Persistent ticket context for Claude Code. Never lose your place when switching between tasks.
When you work across multiple tickets and Claude sessions, context disappears every time you switch branches. Juggle fixes that by creating a persistent CONTEXT.md for each ticket — a living document that any Claude session can read to immediately pick up where you left off.
jt init PROJ-123 ← creates ~/juggle-task/PROJ-123/ from your ticket tracker
... do work ...
/jt-update ← saves what you did + next steps to CONTEXT.md
... close session ...
jt open PROJ-123 ← checks out the branch, launches Claude with full context pre-loaded
Each ticket directory contains:
CONTEXT.md— the key file: current state, what was done, decisions, next stepsREADME.md— ticket metadata (URL, branch, priority, session history)IMPLEMENTATION.md— planning doc stub
curl -fsSL https://raw.githubusercontent.com/JJwilkin/juggle-task/main/install.sh | bashThis installs:
- Two Claude Code skills (
/jt-init,/jt-update) to~/.claude/skills/ - The
jtCLI to~/.local/bin/jt
Then restart Claude Code to load the new skills.
To pin a specific version:
JUGGLE_VERSION=v0.2.0 curl -fsSL https://raw.githubusercontent.com/JJwilkin/juggle-task/main/install.sh | bash| Command | What it does |
|---|---|
jt init <ticket> |
Create ticket context, launch Claude to run /jt-init |
jt open [ticket] |
Checkout branch + launch Claude with context pre-loaded |
jt update |
Launch Claude to save session progress via /jt-update |
jt ls |
List all tracked tickets |
jt config [set <path>] |
View or change the tickets directory |
jt upgrade |
Upgrade to the latest version |
| Skill | What it does |
|---|---|
/jt-init <ticket> |
Create ticket context from ID or URL, check out branch, name the session |
/jt-update |
Save session progress, next steps, and session log to CONTEXT.md |
Accepts a ticket ID or URL:
jt init PROJ-123
jt init https://linear.app/myorg/issue/PROJ-123/my-ticket-titleLaunches Claude and automatically runs /jt-init — no manual typing required. With Linear MCP configured, it auto-populates title, description, priority, and branch name. Without it, Claude will ask — works with any tracker or none.
The primary way to resume work. Checks out the branch and launches an interactive Claude session with CONTEXT.md pre-loaded as context. The session is automatically named after the ticket.
jt open PROJ-123
jt open # interactive picker if no argumentRun inside a Claude session at the end of your work to checkpoint progress:
/jt-update
Claude detects the current ticket from the branch name, summarises what was accomplished, and updates CONTEXT.md with session notes, decisions, and new next steps. Also updates the ticket index.
# Start a new ticket
jt init PROJ-123
# ... do work across one or more sessions ...
# End of session — save context
/jt-update
# Resume later (new Claude session, full context pre-loaded)
jt open PROJ-123
Each jt open starts a fresh Claude session named after the ticket. Each /jt-update appends to the session history so you always have a complete record.
Juggle stores your tickets directory in ~/.jt-config (a single line containing the path). Default: ~/juggle-task.
# View current config
jt config
# Change tickets directory
jt config set /path/to/your/ticketsOn first /jt-init, if no config exists, Juggle will ask where you want to store tickets.
Juggle optionally integrates with Linear via the Claude AI Linear MCP server. When configured, /jt-init auto-populates the ticket title, description, priority, status, and branch name from Linear.
To set up Linear MCP in Claude Code, follow the Claude AI MCP setup guide and connect your Linear workspace.
Without Linear, /jt-init simply asks for a title and description — it works with any issue tracker or no tracker at all.
curl -fsSL https://raw.githubusercontent.com/JJwilkin/juggle-task/main/uninstall.sh | bashThis removes the Claude skills and jt binary. Your tickets directory and ~/.jt-config are left untouched.
MIT