Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Delegate coding tasks to Google Jules AI agent for asynchronous execution. Use when user says: 'have Jules fix', 'delegate to Jules', 'send to Jules', 'ask Jules to', 'check Jules sessions', 'pull Jules results', 'jules add tests', 'jules add docs', 'jules review pr'. Handles: bug fixes, documentation, features, tests, refactoring, code reviews. Works with GitHub repos, creates PRs.
.claude/skills/sanjay3290-jules/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 144% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 154% | 0% |
Delegate coding tasks to Google's Jules AI agent on GitHub repositories.
| Variable | Required | Description | |----------|----------|-------------| | JULES_API_KEY | For API auth | API key from jules.google.com/settings |
Two auth paths are available. Use Path 1 for interactive use, Path 2 for headless/agent use.
bashwhich jules || npm install -g @google/jules
bashjules remote list --repo
If fails → tell user to run jules login (or --no-launch-browser for headless)
Get key from jules.google.com/settings (3-key limit per account).
bashexport JULES_API_KEY="your-api-key"
bashcurl -s -H "x-goog-api-key: $JULES_API_KEY" \ "https://jules.googleapis.com/v1alpha/sessions?pageSize=1" | head -20
bashgit remote get-url origin 2>/dev/null | sed -E 's#.*(github\.com)[/:]([^/]+/[^/.]+)(\.git)?#\2#'
If not GitHub or not in git repo → ask user for --repo owner/repo
Check repo is in jules remote list --repo. If not → direct to https://jules.google.com
bashjules new "Fix auth bug" # Auto-detected repo jules new --repo owner/repo "Add unit tests" # Specific repo jules new --repo owner/repo --parallel 3 "Implement X" # Parallel sessions cat task.md | jules new --repo owner/repo # From stdin
bashjules remote list --session # All sessions jules remote list --repo # Connected repos
bashjules remote pull --session <id> # View diff jules remote pull --session <id> --apply # Apply locally jules teleport <id> # Clone + apply
bashLATEST=$(jules remote list --session 2>/dev/null | awk 'NR==2 {print $1}') jules remote pull --session $LATEST
bashcurl -s -X POST "https://jules.googleapis.com/v1alpha/sessions" \ -H "x-goog-api-key: $JULES_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "Fix auth bug", "prompt": "Fix the authentication timeout issue in src/auth.ts", "sourceContext": { "repository": "owner/repo", "branchName": "main" }, "automationMode": "AUTO_CREATE_PR", "requirePlanApproval": false }'
Key fields:
prompt — The task description (required)sourceContext.repository — GitHub owner/repo (required)sourceContext.branchName — Target branch (default: repo default)automationMode — "AUTO_CREATE_PR" to auto-create PRs, omit for manualtitle — Display name for the sessionrequirePlanApproval — true to pause for plan review before executionbashcurl -s -H "x-goog-api-key: $JULES_API_KEY" \ "https://jules.googleapis.com/v1alpha/sessions?pageSize=10"
bashcurl -s -H "x-goog-api-key: $JULES_API_KEY" \ "https://jules.googleapis.com/v1alpha/sessions/SESSION_ID"
bashSESSION_ID="<id>" while true; do STATE=$(curl -s -H "x-goog-api-key: $JULES_API_KEY" \ "https://jules.googleapis.com/v1alpha/sessions/$SESSION_ID" \ | python3 -c "import sys,json; print(json.load(sys.stdin).get('state','UNKNOWN'))") case "$STATE" in COMPLETED) echo "Done!" break ;; FAILED) echo "Failed. Check: https://jules.google.com/session/$SESSION_ID" break ;; *) echo "State: $STATE - waiting 30s..." sleep 30 ;; esac done
Enrich prompts with current context for better results:
bashBRANCH=$(git branch --show-current) RECENT_FILES=$(git diff --name-only HEAD~3 2>/dev/null | head -10 | tr '\n' ', ') RECENT_COMMITS=$(git log --oneline -5 | tr '\n' '; ') STAGED=$(git diff --cached --name-only | tr '\n' ', ')
Use when creating tasks (CLI):
bashjules new --repo owner/repo "Fix the bug in auth module. Context: branch=$BRANCH, recently modified: $RECENT_FILES"
Use when creating tasks (API):
bashcurl -s -X POST "https://jules.googleapis.com/v1alpha/sessions" \ -H "x-goog-api-key: $JULES_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"prompt\": \"Fix the bug in auth module. Context: branch=$BRANCH, recently modified: $RECENT_FILES\", \"sourceContext\": {\"repository\": \"owner/repo\", \"branchName\": \"$BRANCH\"}, \"automationMode\": \"AUTO_CREATE_PR\" }"
Quick commands for common tasks:
bashFILES=$(git diff --name-only HEAD~3 2>/dev/null | grep -E '\.(js|ts|py|go|java)$' | head -5 | tr '\n' ', ') jules new "Add unit tests for recently modified files: $FILES. Include edge cases and mocks where needed."
bashFILES=$(git diff --name-only HEAD~3 2>/dev/null | grep -E '\.(js|ts|py|go|java)$' | head -5 | tr '\n' ', ') jules new "Add documentation comments to: $FILES. Include function descriptions, parameters, return values, and examples."
bashjules new "Fix all linting errors in the codebase. Run the linter, identify issues, and fix them while maintaining code functionality."
bashPR_NUM=123 PR_INFO=$(gh pr view $PR_NUM --json title,body,files --jq '"\(.title)\n\(.body)\nFiles: \(.files[].path)"') jules new "Review this PR for bugs, security issues, and improvements: $PR_INFO"
After Jules completes, apply changes to a new branch:
bashSESSION_ID="<id>" TASK_DESC="<brief description>" # Create branch, apply, commit git checkout -b "jules/$SESSION_ID" jules remote pull --session "$SESSION_ID" --apply git add -A git commit -m "feat: $TASK_DESC Jules session: $SESSION_ID" # Optional: push and create PR git push -u origin "jules/$SESSION_ID" gh pr create --title "$TASK_DESC" --body "Automated changes from Jules session $SESSION_ID"
Wait for session to finish:
bashSESSION_ID="<id>" while true; do STATUS=$(jules remote list --session 2>/dev/null | grep "$SESSION_ID" | awk '{print $NF}') case "$STATUS" in Completed) echo "Done!" jules remote pull --session "$SESSION_ID" break ;; Failed) echo "Failed. Check: https://jules.google.com/session/$SESSION_ID" break ;; *User*) echo "Needs input: https://jules.google.com/session/$SESSION_ID" break ;; *) echo "Status: $STATUS - waiting 30s..." sleep 30 ;; esac done
Create in repo root to improve Jules results:
markdown# AGENTS.md ## Project Overview [Brief description] ## Tech Stack - Language: [TypeScript/Python/Go/etc.] - Framework: [React/FastAPI/Gin/etc.] - Testing: [Jest/pytest/go test/etc.] ## Code Conventions - [Linter/formatter used] - [Naming conventions] - [File organization] ## Testing Requirements - Unit tests for new features - Integration tests for APIs - Coverage target: [X]% ## Build & Deploy - Build: `[command]` - Test: `[command]`
| Status | Action | |--------|--------| | Planning / In Progress | Wait | | Awaiting User F | Respond at web UI | | Completed | Pull results | | Failed | Check web UI |
JULES_API_KEY) for headless/agent automation; use CLI for interactive sessions| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 9,472 | 32,826 | +247% | 1 | 1 | 0% | 1,699 | 4,147 | +144% | 0 | 0 | — |
case-02 | fail→pass | 15,776 | 7,019 | -56% | 1 | 1 | 0% | 2,837 | 3,985 | +40% | 0 | 0 | — |
case-03 | fail→pass | 15,851 | 8,884 | -44% | 1 | 1 | 0% | 3,271 | 4,418 | +35% | 0 | 0 | — |
case-04 | fail→pass | 8,803 | 4,010 | -54% | 1 | 1 | 0% | 1,716 | 3,332 | +94% | 0 | 0 | — |
case-05 | fail→fail | 8,004 | 7,322 | -9% | 1 | 1 | 0% | 1,443 | 3,842 | +166% | 0 | 0 | — |
case-06 | fail→pass | 7,148 | 3,363 | -53% | 1 | 1 | 0% | 1,234 | 3,132 | +154% | 0 | 0 | — |
case-07 | fail→pass | 10,284 | 5,503 | -46% | 1 | 1 | 0% | 1,996 | 3,508 | +76% | 0 | 0 | — |
case-08 | fail→pass | 11,546 | 4,178 | -64% | 1 | 1 | 0% | 2,174 | 3,343 | +54% | 0 | 0 | — |
case-09 | pass→pass | 15,504 | 10,625 | -31% | 1 | 1 | 0% | 3,117 | 4,851 | +56% | 0 | 0 | — |
case-10 | fail→pass | 11,341 | 4,155 | -63% | 1 | 1 | 0% | 2,340 | 3,283 | +40% | 0 | 0 | — |
case-11 | pass→pass | 11,670 | 5,513 | -53% | 1 | 1 | 0% | 2,076 | 3,442 | +66% | 0 | 0 | — |
case-12 | pass→pass | 8,149 | 1,673 | -79% | 1 | 1 | 0% | 1,310 | 2,744 | +109% | 0 | 0 | — |
case-13 | fail→pass | 8,535 | 2,482 | -71% | 1 | 1 | 0% | 1,582 | 2,856 | +81% | 0 | 0 | — |
case-14 | fail→pass | 6,444 | 1,902 | -70% | 1 | 1 | 0% | 1,148 | 2,732 | +138% | 0 | 0 | — |
case-15 | fail→pass | 8,503 | 2,419 | -72% | 1 | 1 | 0% | 1,566 | 2,838 | +81% | 0 | 0 | — |
case-16 | pass→pass | 12,676 | 5,631 | -56% | 1 | 1 | 0% | 2,274 | 3,538 | +56% | 0 | 0 | — |
case-17 | fail→pass | 9,802 | 3,406 | -65% | 1 | 1 | 0% | 1,935 | 3,135 | +62% | 0 | 0 | — |
case-18 | fail→pass | 10,125 | 3,308 | -67% | 1 | 1 | 0% | 1,749 | 3,056 | +75% | 0 | 0 | — |
case-19 | pass→pass | 3,915 | 3,677 | -6% | 1 | 1 | 0% | 763 | 3,190 | +318% | 0 | 0 | — |
case-20 | pass→pass | 4,831 | 3,024 | -37% | 1 | 1 | 0% | 1,068 | 3,032 | +184% | 0 | 0 | — |
case-21 | pass→pass | 2,881 | 2,373 | -18% | 1 | 1 | 0% | 511 | 2,881 | +464% | 0 | 0 | — |
case-22 | pass→pass | 3,688 | 3,607 | -2% | 1 | 1 | 0% | 746 | 3,072 | +312% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.