jules · diff

v1.0 to v1.0

108 added, 7 removed. Audit A to A.

---
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)
- ### 1. Install CLI
+ 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
+ #### 2. Check Auth
```bash
jules remote list --repo
```
If fails → tell user to run `jules login` (or `--no-launch-browser` for headless)
- ### 3. Auto-Detect Repo
+ ### 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`
- ### 4. Verify Repo Connected
+ #### Verify Repo Connected
Check repo is in `jules remote list --repo`. If not → direct to https://jules.google.com
- ## Commands
+ ## 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:**
+ **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
+ ## 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