jules — Claude Code skill: what it does, how to install
Delegates coding tasks to Google Jules for background execution. Handy when you want an agent to write tests, refactor code, or review pull requests.
npx skills add sanjay3290/ai-skills --skill jules -a claude-codeWhat jules does
This skill passes development tasks from your local agent to Google Jules for asynchronous work. Instead of spending your main session tokens on routine work, you offload bug fixing, test coverage, documentation, or code reviews to a separate worker. Jules works directly with GitHub repositories and can open pull requests on completion.
Setup supports two authentication tracks. For interactive terminal sessions, it relies on @google/jules CLI via jules login. For headless agent workflows, export the JULES_API_KEY environment variable. Tasks are dispatched with jules new or via the REST API, automatically passing the current branch, modified files, and recent commit logs into the prompt context.
Your target GitHub repository must be pre-connected in your Jules account. If the repository is not connected or lives outside GitHub, Jules refuses the job, so verify your connected repositories before launching parallel sessions.
What it helps with
- offload unit test generation for recently modified files
- delegate lint fixes and bug resolution to a background agent
- inspect pull requests for potential issues before merging
- pull and apply patch diffs from completed remote sessions
Example prompts for the agent
- Have Jules add unit tests for recently modified files
- Delegate fixing the authentication timeout bug to Jules and open a PR
- Check Jules sessions and pull results from the latest task
How to install jules
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill jules -a claude-code2Manually: put the files in place
~/.claude/skills/jules/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/jules/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill jules -a codex2Manually: put the files in place
.agents/skills/jules/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill jules -a cursor2Manually: put the files in place
.cursor/skills/jules/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sanjay3290/ai-skills jules2Manually: put the files in place
.github/skills/jules/SKILL.md1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill jules -a gemini-cli2Platform CLI
gemini skills install https://github.com/sanjay3290/ai-skills --path skills/julesManually: put the files in place
.devin/skills/jules/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill jules -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about jules
How to install jules in Claude Code?
Run npx skills add sanjay3290/ai-skills --skill jules -a claude-code in your terminal.
What does the jules skill do?
It dispatches coding jobs to Google Jules, tracks asynchronous execution, and pulls resulting code changes or pull requests into your git workspace.
What authentication methods are supported?
You can log in via @google/jules CLI using jules login or set the JULES_API_KEY environment variable, which has a limit of 3 keys per account.
Source text
SKILL.md · Apache-2.0
---
name: jules
description: "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."
license: Apache-2.0
metadata:
author: sanjay3290
version: "1.0"
---
# Jules Task Delegation
Delegate coding tasks to Google's Jules AI agent on GitHub repositories.
## Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `JULES_API_KEY` | For API auth | API key from [jules.google.com/settings](https://jules.google.com/settings) |
## Setup (Run Before First Command)
Two auth paths are available. Use **Path 1** for interactive use, **Path 2** for headless/agent use.
### Path 1: CLI (Interactive)
#### 1. Install CLI
```bash
which jules || npm install -g @google/jules
```
#### 2. Check Auth
```bash
jules remote list --repo
```
If fails → tell user to run `jules login` (or `--no-launch-browser` for headless)
### Path 2: API Key (Headless / Agent Use)
#### 1. Get API Key
Get key from [jules.google.com/settings](https://jules.google.com/settings) (3-key limit per account).
#### 2. Set Environment Variable
```bash
export JULES_API_KEY="your-api-key"
```
#### 3. Verify
```bash
curl -s -H "x-goog-api-key: $JULES_API_KEY" \
"https://jules.googleapis.com/v1alpha/sessions?pageSize=1" | head -20
```
### Common Setup (Both Paths)
#### Auto-Detect Repo
```bash
git 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`
#### Verify Repo Connected
Check repo is in `jules remote list --repo`. If not → direct to https://jules.google.com
## Commands (CLI)
### Create Tasks
```bash
jules 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
```
### Monitor
```bash
jules remote list --session # All sessions
jules remote list --repo # Connected repos
```
### Retrieve Results
```bash
jules remote pull --session <id> # View diff
jules remote pull --session <id> --apply # Apply locally
jules teleport <id> # Clone + apply
```
### Latest Session Shortcut
```bash
LATEST=$(jules remote list --session 2>/dev/null | awk 'NR==2 {print $1}')
jules remote pull --session $LATEST
```
## Commands (API)
### Create a Task
```bash
curl -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 manual
- `title` — Display name for the session
- `requirePlanApproval` — `true` to pause for plan review before execution
### List Sessions
```bash
curl -s -H "x-goog-api-key: $JULES_API_KEY" \
"https://jules.googleapis.com/v1alpha/sessions?pageSize=10"
```
### Get Session Status
```bash
curl -s -H "x-goog-api-key: $JULES_API_KEY" \
"https://jules.googleapis.com/v1alpha/sessions/SESSION_ID"
```
### Poll Until Complete (API)
```bash
SESSION_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
```
## Smart Context Injection
Enrich prompts with current context for better results:
```bash
BRANCH=$(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):**
```bash
jules new --repo owner/repo "Fix the bug in auth module. Context: branch=$BRANCH, recently modified: $RECENT_FILES"
```
**Use when creating tasks (API):**
```bash
curl -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\"
}"
```
## Template Prompts
Quick commands for common tasks:
### Add Tests
```bash
FILES=$(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."
```
### Add Documentation
```bash
FILES=$(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."
```
### Fix Lint Errors
```bash
jules new "Fix all linting errors in the codebase. Run the linter, identify issues, and fix them while maintaining code functionality."
```
### Review PR
```bash
PR_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"
```
## Git Integration (Apply + Commit)
After Jules completes, apply changes to a new branch:
```bash
SESSION_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"
```
## Poll Until Complete (CLI)
Wait for session to finish:
```bash
SESSION_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
```
## AGENTS.md Template
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]`
```
## Session States
| Status | Action |
|--------|--------|
| Planning / In Progress | Wait |
| Awaiting User F | Respond at web UI |
| Completed | Pull results |
| Failed | Check web UI |
## Notes
- **No CLI reply** → Use web UI for Jules questions
- **No CLI cancel** → Use web UI to cancel
- **GitHub only** → GitLab/Bitbucket not supported
- **AGENTS.md** → Jules reads from repo root for context
- **API vs CLI** → Use API (`JULES_API_KEY`) for headless/agent automation; use CLI for interactive sessions
© sanjay3290 · Apache-2.0 · sanjay3290/ai-skills