Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Interact with the Jules CLI to manage asynchronous coding sessions. Use this skill to assign tasks, monitor progress, and pull patches from completed sessions.
.claude/skills/majiayu000-jules-cli/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 128% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 22% | 0% |
bash# 1. Verify available repos (pre-flight check) jules remote list --repo # 2. Submit a task and wait for completion ./scripts/jules_submit.py --repo GITHUB_USERNAME/REPO "Your task description"
Note: Use your GitHub username/org, not your local system username (e.g., octocat/Hello-World, not $USER/Hello-World).
This skill enables the agent to interact with the jules CLI. It supports task assignment, session monitoring, and result integration (pulling patches from completed sessions).
Before submitting tasks, verify which repositories are available and confirm the correct format:
bash# List available repos to verify access and see correct username format jules remote list --repo
Important: The --repo flag requires your GitHub username or organization name, not your local system username.
octocat/Hello-World (GitHub username)localuser/Hello-World (local system username)If you're unsure of your GitHub username:
jules remote list --repo to see available repos with correct formattingjules_submit.py to handle the session lifecycle (new session → wait → pull → apply).jules remote new.Why this is recommended:
The jules_submit.py script handles session creation, waiting for completion, and applying results.
bash# Submit task and wait for completion ./scripts/jules_submit.py --repo octocat/Hello-World "Implement unit tests for the login module" # Submit without waiting (fire-and-forget) ./scripts/jules_submit.py --repo octocat/Hello-World --no-wait "Research API options"
Flags:
--repo <repo>: Repository in GITHUB_USERNAME/REPO format (e.g., octocat/Hello-World)--no-wait: Exit immediately after creating session (don't wait for completion)Use this when you need granular control over each step or want to inspect intermediate results.
bash# Step 1: Create session jules remote new --repo octocat/Hello-World --session "Task description" # Step 2: Wait for session (check status until terminal state) ./scripts/wait_for_session.sh <SESSION_ID> # Step 3: Pull and apply changes jules remote pull --session <SESSION_ID> --apply
Cause: Using local system username instead of GitHub username
Solution:
jules remote list --repo to see correct formatoctocat/repo not localuser/repoIf you see Trying to make a GET request without a valid client (did you forget to login?) when running from automation:
HOME environment variable is set to the user's home directory.~/.jules/cache/oauth_creds.json exists and is valid. Run jules login manually if needed.If you see could not open a new TTY or inappropriate ioctl for device:
echo "task" | jules ... < /dev/null.jules_submit.py) handle this automatically.This skill has been validated with live Jules sessions. Key test scenarios include:
All error patterns documented above were discovered and resolved during live testing with the Jules platform.
jules remote newAssigns a new session to Jules in a remote VM.
bashjules remote new --repo octocat/Hello-World --session "Task description"
Flags:
--repo <repo>: Repository in GITHUB_USERNAME/REPO format--session <task>: The task description (required)--parallel <num>: Number of parallel sessions (1-5)jules remote listLists remote sessions or repositories.
bash# List your active sessions jules remote list --session # List available repos (useful for verifying repo format) jules remote list --repo
jules remote pullPulls the result of a remote session and optionally applies it.
bashjules remote pull --session <SESSION_ID> --apply
Flags:
--session <id>: The session ID (required)--apply: Apply the patch to the local repositoryscripts/)jules_submit.py: Primary tool for automation. Wraps the entire workflow.parse_sessions.py: Parses the tabular output of jules remote list --session into JSON format.wait_for_session.sh: Polls a session status until it reaches a terminal state.references/usage.md: Comprehensive reference of all jules commands, flags, and advanced usage patterns.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 5,228 | 15,147 | +190% | 1 | 1 | 0% | 836 | 1,599 | +91% | 0 | 0 | — |
case-02 | fail→fail | 15,164 | 10,072 | -34% | 1 | 1 | 0% | 387 | 1,723 | +345% | 0 | 0 | — |
case-03 | fail→fail | 9,900 | 11,071 | +12% | 1 | 1 | 0% | 610 | 1,680 | +175% | 0 | 0 | — |
case-04 | fail→pass | 8,772 | 8,160 | -7% | 1 | 1 | 0% | 1,537 | 1,973 | +28% | 0 | 0 | — |
case-05 | fail→pass | 15,542 | 4,031 | -74% | 1 | 1 | 0% | 1,457 | 1,899 | +30% | 0 | 0 | — |
case-06 | fail→pass | 15,968 | 9,153 | -43% | 1 | 1 | 0% | 935 | 2,136 | +128% | 0 | 0 | — |
case-07 | fail→pass | 8,629 | 2,676 | -69% | 1 | 1 | 0% | 1,520 | 1,852 | +22% | 0 | 0 | — |
case-08 | fail→pass | 25,179 | 8,091 | -68% | 1 | 1 | 0% | 2,329 | 1,994 | -14% | 0 | 0 | — |
case-09 | fail→pass | 23,617 | 6,162 | -74% | 1 | 1 | 0% | 2,576 | 2,186 | -15% | 0 | 0 | — |
case-10 | fail→pass | 15,125 | 9,849 | -35% | 1 | 1 | 0% | 2,713 | 3,305 | +22% | 0 | 0 | — |
case-11 | fail→pass | 16,694 | 3,610 | -78% | 1 | 1 | 0% | 2,597 | 1,899 | -27% | 0 | 0 | — |
case-12 | fail→pass | 16,093 | 7,155 | -56% | 1 | 1 | 0% | 2,651 | 1,824 | -31% | 0 | 0 | — |
case-13 | pass→pass | 8,470 | 5,472 | -35% | 1 | 1 | 0% | 1,462 | 2,207 | +51% | 0 | 0 | — |
case-14 | fail→pass | 8,165 | 3,354 | -59% | 1 | 1 | 0% | 1,559 | 2,056 | +32% | 0 | 0 | — |
case-15 | fail→pass | 9,783 | 1,734 | -82% | 1 | 1 | 0% | 1,643 | 1,657 | +1% | 0 | 0 | — |
case-16 | fail→pass | 8,077 | 2,315 | -71% | 1 | 1 | 0% | 1,326 | 1,737 | +31% | 0 | 0 | — |
case-17 | fail→pass | 16,265 | 5,321 | -67% | 1 | 1 | 0% | 2,134 | 2,226 | +4% | 0 | 0 | — |
case-18 | pass→pass | 7,107 | 3,624 | -49% | 1 | 1 | 0% | 1,234 | 1,879 | +52% | 0 | 0 | — |
case-19 | pass→pass | 7,261 | 3,494 | -52% | 1 | 1 | 0% | 1,228 | 2,040 | +66% | 0 | 0 | — |
case-20 | pass→pass | 4,368 | 3,971 | -9% | 1 | 1 | 0% | 860 | 2,182 | +154% | 0 | 0 | — |
case-21 | pass→pass | 6,259 | 3,884 | -38% | 1 | 1 | 0% | 874 | 2,126 | +143% | 0 | 0 | — |
case-22 | pass→pass | 6,886 | 3,776 | -45% | 1 | 1 | 0% | 1,355 | 2,123 | +57% | 0 | 0 | — |
case-23 | pass→pass | 3,732 | 2,666 | -29% | 1 | 1 | 0% | 660 | 1,751 | +165% | 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. 23 cases were attempted, and 20 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +61 percentage points is the difference between those two pass rates over the 20 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.