Auto-Coding with Jules: The Complete Guide to Google's Autonomous AI Coding Agent
Learn how to automate GitHub issue resolution and PR creation with Jules, Google's groundbreaking AI coding agent powered by Gemini 2.5 Pro
Overview: Enter the Era of Autonomous Coding
The landscape of AI-assisted development is shifting from real-time copilots to autonomous agents. Google’s Jules represents this paradigm shift—an AI coding agent that works independently in the background while you focus on other tasks.
Unlike traditional coding assistants that require constant interaction, Jules operates asynchronously. You assign it a task through a GitHub issue, approve its plan, and come back later to find a fully-formed pull request waiting for review. It’s like having a junior developer who never sleeps, never complains, and works entirely in the cloud.
What Makes Jules Different
Jules is Google’s asynchronous autonomous AI coding agent powered by Gemini 2.5 Pro. Here’s what sets it apart:
- GitHub-Native Integration: Works directly within your GitHub workflow—no IDE plugins required
- Asynchronous Execution: Runs tasks in isolated Google Cloud VMs while you work on other things
- Transparent Planning: Shows its reasoning and waits for your approval before making changes
- Full Autonomy: Handles file modifications, test execution, and PR creation end-to-end
- Codebase Comprehension: Leverages Gemini 2.5 Pro’s 2M token context window to understand entire repositories
The core value proposition is simple: delegate entire coding tasks, not just snippets. While GitHub Copilot suggests the next line and Claude Code assists with interactive coding sessions, Jules takes ownership of complete workflows from issue to pull request.
Core Features: What Jules Can Do
1. GitHub-Native Integration
Jules lives where your code lives. Install it as a GitHub App, and it gains access to:
- Repository source code (with your permission)
- Issues and comments for task assignment
- Branch creation and management
- Pull request creation and updates
No context switching between tools. No copying code to external interfaces. Everything happens in GitHub.
2. Asynchronous Workflow Architecture
This is Jules’ killer feature. When you assign a task:
- Jules clones your repository to a secure Google Cloud VM
- Analyzes the codebase using Gemini 2.5 Pro
- Generates an execution plan
- Waits for your approval
- Executes changes autonomously (writes code, runs tests, fixes errors)
- Creates a pull request with all changes
- Cleans up the VM
You can close your laptop and come back hours later to a completed PR. This asynchronous model is perfect for:
- Overnight batch tasks (update all dependencies)
- Long-running refactors (migrate to new API)
- Background quality improvements (add test coverage)
3. Transparent Planning and Reasoning
Before making any changes, Jules presents a detailed plan:
Plan Preview:
1. Analyze current authentication implementation in src/auth/
2. Identify OAuth 2.0 integration points
3. Add JWT token validation middleware
4. Update user session management
5. Add comprehensive unit tests
6. Update documentation in README.md
Estimated files affected: 7
Estimated time: 15-20 minutes
You review, approve, or request modifications. This human-in-the-loop approach ensures you maintain control while delegating execution.
4. Automatic Pull Request Generation
When Jules completes a task, it doesn’t just dump code—it creates production-ready PRs with:
- Descriptive titles and detailed descriptions
- Commit history (logical, well-messaged commits)
- Test results and coverage reports
- Links back to the original issue
The PR is ready for team review and CI/CD pipeline validation.
5. Full Codebase Comprehension
Gemini 2.5 Pro’s 2 million token context window means Jules can:
- Understand monorepos with hundreds of files
- Maintain consistency across frontend and backend
- Respect existing code patterns and conventions
- Make changes that consider the entire system architecture
It’s not just pattern matching—it’s architectural understanding.
Technical Architecture: How Jules Works Under the Hood
Understanding Jules’ architecture helps you use it effectively. Here’s the complete workflow:
graph TD
A[Developer Creates GitHub Issue] --> B[Jules Assigned via @jules Comment]
B --> C[Jules Clones Repo to Google Cloud VM]
C --> D[Gemini 2.5 Pro Analyzes Codebase]
D --> E[Jules Generates Execution Plan]
E --> F[Developer Reviews & Approves Plan]
F --> G{Approved?}
G -->|No| H[Developer Requests Changes]
H --> E
G -->|Yes| I[Jules Executes Changes in VM]
I --> J[Writes/Modifies Code]
J --> K[Runs Tests & Validates]
K --> L{Tests Pass?}
L -->|No| M[Jules Debugs & Fixes]
M --> K
L -->|Yes| N[Jules Creates Pull Request]
N --> O[VM Cleanup]
O --> P[Developer Reviews PR]
P --> Q[Merge to Main]
Step-by-Step Breakdown
1. Task Assignment
You create a GitHub issue or comment on an existing one:
@jules Please add input validation to the user registration endpoint.
Check for email format, password strength, and username uniqueness.
Add appropriate error messages for each validation failure.
2. Repository Cloning
Jules spins up an isolated Google Cloud VM and clones your repository. This ensures:
- No interference with your local development
- Secure execution in Google’s infrastructure
- Ability to run tests requiring specific environments
3. Analysis and Planning
Gemini 2.5 Pro reads your entire codebase:
- Identifies relevant files (
src/api/auth/register.ts) - Understands existing validation patterns
- Locates test files (
tests/auth/register.test.ts) - Reviews error handling conventions
It generates a plan detailing every file it will modify and why.
4. Developer Approval
Jules posts the plan as a comment. You can:
- Approve immediately (
@jules approve) - Request clarifications (
@jules can you also add rate limiting?) - Reject and reassign (
@jules cancel, different approach needed)
5. Autonomous Execution
After approval, Jules:
- Creates a new branch (
jules/add-registration-validation) - Modifies files according to the plan
- Runs your existing test suite
- If tests fail, debugs and fixes the code
- May iterate multiple times until tests pass
6. Pull Request Creation
Jules commits changes with clear messages:
feat: add input validation to user registration
- Add email format validation with regex
- Implement password strength checker (min 8 chars, special chars)
- Add username uniqueness check against database
- Create custom error messages for each validation type
- Add comprehensive test coverage (95% coverage achieved)
Closes #123
7. Cleanup
The VM is destroyed, and all temporary resources are cleaned up. You’re left with a clean PR ready for review.
Integration Methods: Three Ways to Use Jules
Google offers three ways to interact with Jules, each suited to different workflows.
1. GitHub Web Interface (Easiest)
Setup:
- Install the Jules GitHub App from the marketplace
- Grant repository access (public or private)
- Start using
@julesmentions in issues and comments
Usage Example:
# In a GitHub issue:
Title: Upgrade React Router to v7
Body:
Our app currently uses React Router v5. We need to upgrade to v7 for:
- Improved performance
- Better TypeScript support
- Data loading APIs
@jules Please upgrade React Router from v5 to v7 across the entire codebase.
Update all route configurations and component imports.
Ensure all tests pass after the migration.
Jules responds with a plan, you approve, and the PR appears in your repository.
2. Jules Tools CLI (For Power Users)
Released in October 2025, the CLI brings Jules into your terminal workflow.
Installation:
npm install -g @google/jules-tools
Authentication:
jules auth login
# Opens browser for Google account authentication
Usage Examples:
# Create a new task
jules task create \
--repo="myorg/myproject" \
--title="Fix memory leak in dashboard component" \
--description="Users report browser slowdown after 30 minutes. Profile and fix."
# List active tasks
jules task list --status=active
# Get task status
jules task status --id=task_abc123
# Approve a plan
jules task approve --id=task_abc123
# Cancel a task
jules task cancel --id=task_abc123
The CLI is perfect for:
- Batch task creation from scripts
- CI/CD integration
- Custom automation workflows
- Teams preferring terminal-based tools
3. Public API (Early Access, Most Flexible)
The Jules API enables programmatic integration for advanced use cases.
Authentication:
export JULES_API_KEY="your_api_key_here"
API Example:
const axios = require('axios');
const createJulesTask = async () => {
const response = await axios.post(
'https://api.jules.google.com/v1/tasks',
{
repository: 'myorg/myproject',
title: 'Add Redis caching layer',
description: 'Implement Redis caching for user profile queries to reduce database load',
options: {
auto_approve: false, // Require manual approval
target_branch: 'develop',
labels: ['performance', 'infrastructure']
}
},
{
headers: {
'Authorization': `Bearer ${process.env.JULES_API_KEY}`,
'Content-Type': 'application/json'
}
}
);
console.log(`Task created: ${response.data.task_id}`);
console.log(`View at: ${response.data.github_url}`);
};
createJulesTask();
API Capabilities:
- Create tasks programmatically
- Monitor task progress
- Retrieve execution logs
- Manage multiple repositories
- Integrate with custom dashboards
Use Cases:
- Automated dependency updates (run weekly via cron)
- Integration with issue tracking systems (Jira, Linear)
- Custom developer portals
- Automated code quality improvements
Real-World Use Cases: When to Delegate to Jules
Jules excels at specific types of tasks. Here are proven use cases from real development teams.
1. Bug Triage and Fixes
Scenario: Your issue tracker has 47 open bugs. Some are simple null pointer exceptions or off-by-one errors that don’t require deep architectural knowledge.
Jules Workflow:
@jules Please fix the null pointer exception in UserProfileService.java line 247.
The error occurs when user.profile is null. Add proper null checking and
fallback to default profile values.
Jules:
- Analyzes the code path leading to line 247
- Identifies the root cause (missing null check after database query)
- Adds defensive programming (null check + default values)
- Updates related tests
- Creates a PR with before/after comparison
Time Saved: 30 minutes per bug × 20 simple bugs = 10 hours saved
2. Test Coverage Improvement
Scenario: You’re launching soon, but test coverage is 62%. You need 80%+ for confidence.
Jules Workflow:
@jules Improve test coverage for src/payment/ directory to 85%.
Focus on edge cases: failed transactions, refunds, currency conversion.
Use our existing Jest testing patterns.
Jules:
- Analyzes existing test structure in
tests/payment/ - Identifies untested code paths using coverage reports
- Generates comprehensive test cases for:
- Payment processing failures
- Partial refunds
- Multi-currency transactions
- Timeout scenarios
- Ensures tests follow project conventions
- Achieves 87% coverage
Time Saved: Writing tests for complex payment logic = 4-6 hours → Jules does it in 20 minutes
3. Dependency Updates
Scenario: You have 23 outdated npm packages. Some require code changes (breaking changes in APIs).
Jules Workflow:
# Using CLI for batch updates
jules task create \
--repo="myorg/frontend" \
--title="Update all dependencies to latest stable versions" \
--description="Update package.json dependencies. Fix breaking changes. Ensure all tests pass."
Jules:
- Reads
package.jsonand identifies outdated packages - Checks changelogs for breaking changes
- Updates dependencies incrementally (not all at once—smart!)
- Modifies code to accommodate API changes
- Runs the full test suite after each update
- Rolls back if tests fail and tries alternative approaches
Result: All 23 packages updated, 0 breaking changes shipped to production
4. Code Refactoring
Scenario: You’re migrating from class components to React hooks. 30+ components need conversion.
Jules Workflow:
@jules Convert all class components in src/components/legacy/ to functional
components with hooks. Maintain existing functionality and prop interfaces.
Update tests accordingly.
Jules:
- Identifies 32 class components
- Analyzes lifecycle methods (componentDidMount, etc.)
- Converts to equivalent hooks (useEffect, useState)
- Preserves prop types and TypeScript interfaces
- Updates enzyme tests to React Testing Library
- Creates one PR with all conversions
Time Saved: 30 components × 15 minutes each = 7.5 hours → Jules completes in 45 minutes
5. Documentation Generation
Scenario: Your API endpoints lack documentation. Onboarding new developers is painful.
Jules Workflow:
@jules Generate comprehensive API documentation for all endpoints in src/api/v2/.
Include request/response examples, error codes, and authentication requirements.
Output as OpenAPI 3.0 spec.
Jules:
- Scans all route handlers in
src/api/v2/ - Analyzes request validation schemas
- Examines response structures
- Identifies error handling patterns
- Generates OpenAPI 3.0 YAML with:
- All endpoints documented
- Request/response examples
- Error code descriptions
- Authentication schemes
Result: Production-ready API docs in 30 minutes vs. days of manual writing
Comparison with Other AI Coding Tools
How does Jules stack up against the competition? Let’s compare:
| Feature | Jules | Claude Code | GitHub Copilot | Cursor |
|---|---|---|---|---|
| Execution Model | Asynchronous (background) | Synchronous (interactive) | Synchronous (autocomplete) | Synchronous (chat + edit) |
| Task Autonomy | Full (issue to PR) | Partial (requires guidance) | Minimal (suggestions only) | Partial (multi-step edits) |
| Integration | GitHub-native | CLI-based | IDE plugin | IDE (VS Code fork) |
| Context Window | 2M tokens (Gemini 2.5 Pro) | 200K tokens (Claude Sonnet 3.5) | Limited (file-level) | Configurable |
| Best For | Background tasks, refactors | Interactive development | Code completion | Rapid prototyping |
| Pricing (Pro Tier) | $19.99/month (75 tasks/day) | $20/month (unlimited) | $10/month (unlimited) | $20/month (unlimited) |
| Test Execution | ✅ Runs tests in VM | ✅ Via terminal commands | ❌ No | ⚠️ Limited |
| PR Creation | ✅ Automatic | ⚠️ Manual (you commit) | ❌ No | ⚠️ Manual |
| Multi-file Changes | ✅ Excellent | ✅ Good | ⚠️ Limited | ✅ Good |
When to Use Each Tool
Use Jules when:
- You have a well-defined task that will take 30+ minutes
- You can describe the goal clearly in natural language
- The task can run asynchronously (no immediate decisions needed)
- You want a complete PR, not just code suggestions
Examples: Dependency updates, test coverage, refactoring, bug fixes, documentation
Use Claude Code when:
- You’re actively coding and need an intelligent pair programmer
- The problem is exploratory (you’re figuring it out as you go)
- You need back-and-forth discussion about implementation approaches
- You want control over every step
Examples: Architecting new features, debugging complex issues, learning new codebases
Use GitHub Copilot when:
- You need fast autocomplete while typing
- You’re writing boilerplate or repetitive code
- You want inline suggestions without breaking flow
- You’re working in an IDE all day
Examples: Writing CRUD endpoints, creating test cases, generating utility functions
Use Cursor when:
- You want an AI-first IDE experience
- You’re building a new project from scratch
- You value rapid iteration and multi-file edits
- You prefer chat-based interaction within your editor
Examples: MVP development, prototyping, full-stack projects
The Optimal Combination
Smart teams use multiple tools:
- Jules for overnight batch work (update dependencies, improve test coverage)
- Claude Code for complex feature development (AI pair programming)
- GitHub Copilot for day-to-day autocomplete (productivity boost)
This isn’t zero-sum—it’s additive. Each tool handles what it does best.
Pricing and Availability
Jules operates on a tiered pricing model designed for individuals and teams.
Free Plan
Limits:
- 15 individual tasks per day
- 3 concurrent tasks at a time
Best For:
- Personal projects
- Trying out Jules
- Small-scale automation
Cost: $0/month
AI Pro Plan
Limits:
- ~75 individual tasks per day (5× free tier)
- ~15 concurrent tasks
Best For:
- Professional developers
- Active open-source maintainers
- Small teams (2-5 developers)
Cost: $19.99/month
AI Ultra Plan
Limits:
- ~300 individual tasks per day (20× free tier)
- ~60 concurrent tasks
Best For:
- Large teams
- Enterprises with multiple repositories
- High-volume automation workflows
Cost: $124.99/month
What Counts as a “Task”?
- Each GitHub issue assigned to Jules = 1 task
- Each CLI
jules task create= 1 task - Each API task creation = 1 task
Task limits reset daily at midnight UTC.
Concurrent Task Limits
If you hit the concurrent limit, new tasks queue until active ones complete. For example:
- Free tier: 3 tasks running → 4th task waits
- Pro tier: 15 tasks running → 16th task queues
This prevents resource exhaustion and ensures quality execution.
How Jules Pricing Compares
| Tool | Free Tier | Pro Tier | Notes |
|---|---|---|---|
| Jules | 15 tasks/day | $19.99 (75 tasks/day) | Task-based limits |
| Claude Code | ❌ None | $20/month (unlimited) | Usage-based |
| GitHub Copilot | ❌ None | $10/month (unlimited) | Autocomplete-focused |
| Cursor | 14-day trial | $20/month (unlimited) | IDE subscription |
Jules’ task-based pricing is unique. If you average 3-4 Jules tasks per workday (~20/week), the Pro plan ($19.99) provides excellent value.
Limitations and Considerations
Jules is powerful, but it’s not perfect. Understanding its limitations helps you use it effectively.
1. Language Support (Currently Limited)
Supported:
- Python (excellent)
- JavaScript/TypeScript (excellent)
- React, Node.js, Express (good)
Not Yet Supported:
- Java, C++, Rust, Go, C#
- Mobile development (Swift, Kotlin)
- Emerging languages (Zig, Elixir)
Google is expanding language support. Check the official docs for updates.
2. English-Only Interface
Jules currently only understands English prompts:
- GitHub issue descriptions must be in English
- Code comments can be in any language
- Generated documentation will be in English
This limits adoption for non-English-speaking teams.
3. Asynchronous Latency
Tasks typically take 15-45 minutes to complete:
- Simple bug fix: 10-15 minutes
- Test coverage improvement: 20-30 minutes
- Large refactor: 30-60 minutes
This is not suitable for:
- Urgent hotfixes (use Claude Code or manual coding)
- Rapid iteration during development
- Real-time pair programming
It is suitable for:
- Overnight batch jobs
- Work you assign before lunch
- Background quality improvements
4. GitHub-Only Integration
Jules only works with GitHub repositories:
- Not compatible with GitLab, Bitbucket, Azure DevOps
- Requires GitHub account and repository access
- No local-only usage (always needs GitHub connection)
If your organization uses GitLab, Jules won’t work (yet).
5. Security and Privacy Considerations
What Jules Accesses:
- Full repository source code (cloned to Google Cloud VM)
- GitHub issues, PRs, and comments
- Repository settings and branch protections
Security Measures:
- Isolated VMs per task (no data persistence between tasks)
- Encrypted data in transit and at rest
- OAuth-based authentication (no password storage)
- Compliance with SOC 2, ISO 27001
Best Practices:
- Review Jules’ plan before approval (don’t auto-approve everything)
- Audit PRs before merging (treat Jules like a junior developer)
- Use branch protection rules (require human review)
- Don’t share API keys in repository code
6. Not a Replacement for Human Judgment
Jules can write code, but it:
- Doesn’t understand business context deeply
- Can’t make product decisions
- May miss non-obvious edge cases
- Requires human review before merging
Always review Jules’ PRs. It’s a tool, not a team member.
Best Practices: Getting the Most from Jules
1. Write Clear, Specific GitHub Issues
Bad Example:
@jules Fix the bug in authentication
Jules will struggle with:
- Which bug? (too vague)
- Where in authentication? (no specificity)
- What’s the expected behavior? (no acceptance criteria)
Good Example:
@jules Fix authentication bug: users remain logged in after password reset
Steps to reproduce:
1. User requests password reset
2. User changes password via email link
3. User's old session remains valid (should be invalidated)
Expected behavior:
- After password reset, all existing sessions should be invalidated
- User should be forced to log in with new password
Files likely involved:
- src/auth/password-reset.ts
- src/session/session-manager.ts
Please add tests to prevent regression.
Jules now has:
- Clear problem statement
- Reproduction steps
- Expected outcome
- Hints about file locations
- Test requirements
2. Leverage the Plan Review Process
When Jules presents a plan:
✅ Do This:
- Read the plan carefully (what files, what changes?)
- Ask questions if anything is unclear (
@jules why are you modifying config.ts?) - Request additions (
@jules please also add integration tests) - Suggest alternatives (
@jules consider using the existing EmailService instead)
❌ Don’t Do This:
- Auto-approve without reading
- Approve plans that seem too broad (“modify 47 files”)
- Skip verification of affected files
The plan review is your opportunity to course-correct before Jules invests compute time.
3. Integrate with CI/CD Pipelines
Make Jules’ PRs go through your standard pipeline:
# .github/workflows/jules-pr-validation.yml
name: Validate Jules PRs
on:
pull_request:
branches: [main, develop]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: npm install
- name: Run linter
run: npm run lint
- name: Run tests
run: npm test
- name: Check test coverage
run: npm run coverage
- name: Build
run: npm run build
Jules’ PRs should pass:
- Linting (ESLint, Prettier)
- Unit tests
- Integration tests
- Build process
- Code coverage thresholds
Don’t lower standards for AI-generated code.
4. Use Batch Operations Wisely
Jules excels at batch work. Examples:
Batch Dependency Updates:
# Instead of 10 individual tasks:
jules task create --title="Update React to v19"
jules task create --title="Update TypeScript to v5.3"
# ... 8 more tasks
# Do this (one task):
jules task create --title="Update all frontend dependencies to latest stable versions"
Batch Test Coverage:
@jules Improve test coverage across src/api/, src/services/, and src/utils/
to 85%. Focus on untested edge cases and error handling.
Batching reduces overhead and lets Jules optimize globally.
5. Create Task Templates for Recurring Work
If you do certain tasks weekly/monthly, create templates:
Dependency Update Template:
# .github/ISSUE_TEMPLATE/weekly-dependency-update.md
---
name: Weekly Dependency Update
about: Update all dependencies to latest stable versions
labels: maintenance, dependencies
---
@jules Please update all dependencies in package.json to their latest stable versions.
Requirements:
- Check for breaking changes in changelogs
- Update code to accommodate API changes
- Ensure all tests pass
- Update documentation if APIs changed
- Create a single PR with all updates
Packages to prioritize:
- Security updates (always include)
- Framework updates (React, Next.js)
- Testing libraries (Jest, Testing Library)
Create the issue weekly, and Jules handles it automatically.
6. Monitor and Iterate
Track Jules’ performance over time:
- How many tasks succeed on first try?
- Which tasks require human intervention?
- Where does Jules consistently struggle?
Use this data to:
- Improve task descriptions
- Adjust expectations
- Identify areas where Jules needs better prompting
Conclusion: The Future of Autonomous Coding
Jules represents a fundamental shift in how we think about AI coding assistance. It’s not about faster autocomplete or smarter suggestions—it’s about delegation.
When to Use Jules
Jules is ideal when:
- You have a clearly defined task (bug fix, refactor, test coverage)
- The task will take 30+ minutes of focused work
- You can describe the desired outcome in natural language
- You don’t need immediate results (asynchronous is fine)
- You want a complete pull request, not code snippets
When to Use Other Tools
Use Claude Code, GitHub Copilot, or Cursor when:
- You’re actively developing and need real-time assistance
- The problem is exploratory (you’re figuring out the approach)
- You need to make decisions during implementation
- You’re pair programming with AI
Combining Tools for Maximum Productivity
The most productive developers use a portfolio of AI tools:
-
Jules for overnight batch work
- “Update all dependencies”
- “Improve test coverage to 85%”
- “Refactor authentication to OAuth 2.0”
-
Claude Code for complex feature development
- “Help me architect a real-time chat feature”
- “Debug this memory leak”
- “Explain this legacy code”
-
GitHub Copilot for day-to-day coding
- Autocomplete as you type
- Generate boilerplate
- Quick function implementations
This isn’t about replacing one tool with another—it’s about using the right tool for each job.
The Road Ahead
Google is actively developing Jules. Expect:
- Expanded language support (Java, C++, Rust coming)
- Multi-language interface (Spanish, Japanese, Korean)
- GitLab and Bitbucket integration
- Enhanced IDE integration (VS Code, IntelliJ)
- Improved planning accuracy
- Faster execution times
As models improve and infrastructure scales, the line between “AI assistant” and “AI teammate” will blur. Jules is an early glimpse of that future.
Getting Started
Ready to try Jules?
- Install the GitHub App: Visit the GitHub Marketplace
- Grant Repository Access: Choose repositories to enable
- Create Your First Task: Open an issue and mention
@jules - Review the Plan: See what Jules proposes
- Approve and Wait: Let Jules work in the background
- Review the PR: Merge when satisfied
Start with simple tasks (bug fixes, documentation) and gradually move to complex work (refactors, migrations) as you build confidence.
The future of coding isn’t writing every line yourself—it’s orchestrating AI agents to multiply your impact. Jules is one of the first production-ready tools in this new paradigm.
Welcome to the era of autonomous coding.
Resources:
Was this helpful?
Your support helps me create better content. Buy me a coffee! ☕