Your AI dev agent, connected to your team's workflow.
Fetch tickets from Jira, GitHub Issues, or Azure DevOps — analyze, plan, execute, and sync results back.
npx relay-ccWorks on Mac, Windows, and Linux.
How It Works · Getting Started · Commands · Configuration
Fork of Get Shit Done (GSD) by glittercowboy. All credit for the core architecture goes to the original project.
Relay connects Claude Code to your team's ticket system. One command takes a ticket from assignment to completion:
/relay:work PROJ-123
Six stages, fully orchestrated:
- Fetch — Pull ticket details from Jira/GitHub/Azure DevOps, create a git branch
- Analyze — Spawn a researcher agent to map ticket requirements against your codebase
- Plan — Create an executable plan with atomic tasks, verified against acceptance criteria
- Confirm — Present analysis + plan for your approval before any code is written
- Execute — Spawn executor agents with fresh 200k context per task, atomic commits
- Verify & Sync — Check acceptance criteria, post results back to your ticket system
The complexity is in the system, not in your workflow. Behind the scenes: context engineering, XML prompt formatting, subagent orchestration, state management. What you see: a few commands that just work.
Every stage spawns specialized agents in fresh context windows. Your main session stays lean while agents burn through investigation, planning, and implementation in their own 200k-token contexts.
| Stage | Orchestrator does | Agents do |
|---|---|---|
| Analyze | Collects ticket + codebase context | Researcher maps requirements to code |
| Plan | Validates, manages iteration | Planner creates tasks, checker verifies |
| Execute | Groups into waves, tracks progress | Executors implement with fresh context |
| Verify | Presents results, routes next | Verifier checks against acceptance criteria |
Each task gets its own commit with ticket ID:
feat(PROJ-123): create user registration endpoint
feat(PROJ-123): add email confirmation flow
fix(PROJ-123): handle duplicate email edge case
docs(PROJ-123): complete user registration
Git bisect finds exact failing task. Each commit independently revertable. Clean history for future sessions.
npx relay-ccThe installer prompts you to choose:
- Runtime — Claude Code, OpenCode, Gemini, or all
- Location — Global (all projects) or local (current project only)
Verify with /relay:help inside your chosen runtime.
/relay:setup
Relay detects available MCP integrations (Jira, GitHub Issues, Azure DevOps) and configures your project. Optionally maps your existing codebase for better ticket analysis.
/relay:tickets # Browse available tickets
/relay:work PROJ-123 # Fetch, analyze, plan, execute, verify, sync
npx relay-cc@latestNon-interactive Install (Docker, CI, Scripts)
# Claude Code
npx relay-cc --claude --global # Install to ~/.claude/
npx relay-cc --claude --local # Install to ./.claude/
# OpenCode (open source, free models)
npx relay-cc --opencode --global # Install to ~/.config/opencode/
# Gemini CLI
npx relay-cc --gemini --global # Install to ~/.gemini/
# All runtimes
npx relay-cc --all --global # Install to all directoriesUse --global (-g) or --local (-l) to skip the location prompt.
Use --claude, --opencode, --gemini, or --all to skip the runtime prompt.
Development Installation
Clone the repository and run the installer locally:
git clone https://github.com/ibnyusrat/relay.git
cd relay
node bin/install.js --claude --localInstalls to ./.claude/ for testing modifications before contributing.
Relay is designed for frictionless automation. Run Claude Code with:
claude --dangerously-skip-permissionsTip
This is how Relay is intended to be used — stopping to approve date and git commit 50 times defeats the purpose.
Alternative: Granular Permissions
If you prefer not to use that flag, add this to your project's .claude/settings.json:
{
"permissions": {
"allow": [
"Bash(date:*)",
"Bash(echo:*)",
"Bash(cat:*)",
"Bash(ls:*)",
"Bash(mkdir:*)",
"Bash(wc:*)",
"Bash(head:*)",
"Bash(tail:*)",
"Bash(sort:*)",
"Bash(grep:*)",
"Bash(tr:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git status:*)",
"Bash(git log:*)",
"Bash(git diff:*)",
"Bash(git tag:*)"
]
}
}Relay connects to your ticket system via MCP (Model Context Protocol) servers:
| System | MCP Server | Detection |
|---|---|---|
| Jira | Any Jira MCP server | mcp__jira__* tools |
| GitHub Issues | GitHub MCP server | mcp__github__* tools |
| Azure DevOps | Azure DevOps MCP server | mcp__azure_devops__* tools |
Configure your MCP server in Claude Code settings, then run /relay:setup to connect.
| Command | What it does |
|---|---|
/relay:setup |
Connect to Jira/GitHub Issues/Azure DevOps |
/relay:tickets |
Browse available tickets |
/relay:work <id> |
Fetch → analyze → plan → confirm → execute → verify → sync |
/relay:estimate <id> |
Estimate effort before committing (complexity, time, impact) |
/relay:resume <id> |
Resume a specific ticket by ID (detects stage, switches branch) |
| Command | What it does |
|---|---|
/relay:quick |
Execute ad-hoc task with Relay guarantees (skip analysis) |
| Command | What it does |
|---|---|
/relay:pr [id] |
Create PR from ticket work (auto-generates title/description) |
/relay:review |
Review a PR or address review comments on your own PR |
/relay:rollback <id> |
Safely revert ticket work via git revert |
| Command | What it does |
|---|---|
/relay:status |
Check current state and route to next action |
/relay:history [filter] |
Show completed ticket history with outcomes |
/relay:help |
Show all commands and usage guide |
/relay:update |
Update Relay with changelog preview |
| Command | What it does |
|---|---|
/relay:pause-work |
Create context handoff when stopping mid-ticket |
/relay:resume-work |
Restore from last session |
| Command | What it does |
|---|---|
/relay:map-codebase |
Analyze existing codebase (7 focused documents) |
/relay:debug [desc] |
Systematic debugging with persistent state |
/relay:add-todo [desc] |
Capture idea for later |
/relay:check-todos |
List pending todos |
/relay:settings |
Configure model profile and workflow agents |
/relay:set-profile <profile> |
Switch model profile (quality/balanced/budget) |
Relay stores project settings in .relay/config.json. Configure during /relay:setup or update later with /relay:settings.
Control which Claude model each agent uses. Balance quality vs token spend.
| Profile | Planning | Execution | Verification |
|---|---|---|---|
quality |
Opus | Opus | Sonnet |
balanced (default) |
Opus | Sonnet | Sonnet |
budget |
Sonnet | Sonnet | Haiku |
Switch profiles:
/relay:set-profile budget
Optional agents that improve quality but add tokens and time.
| Setting | Default | What it does |
|---|---|---|
workflow.research |
true |
Research codebase before planning |
workflow.plan_check |
true |
Verify plans achieve ticket goals |
workflow.verifier |
true |
Confirm acceptance criteria met |
| Setting | Default | What it does |
|---|---|---|
git.branching_strategy |
ticket |
Branch per ticket |
git.ticket_branch_template |
{ticket_id}/{slug} |
Branch name format |
| Setting | Default | What it does |
|---|---|---|
planning.commit_docs |
false |
Track .relay/ artifacts in git |
.relay/
├── config.json # Integration config, workflow settings
├── STATE.md # Active ticket, recent history, velocity
├── codebase/ # Codebase map (7 documents)
├── tickets/
│ └── PROJ-123/
│ ├── ESTIMATE.md # Pre-work effort estimate
│ ├── ANALYSIS.md # Codebase-aware ticket analysis
│ ├── PLAN.md # Executable plan
│ ├── SUMMARY.md # Execution results
│ └── VERIFICATION.md # Acceptance criteria check
├── reviews/ # PR review documents
├── debug/ # Debug sessions
├── quick/ # Quick task artifacts
└── todos/ # Captured ideas
├── pending/
└── done/
Relay's codebase mapping and analysis commands read files to understand your project. Protect files containing secrets by adding them to Claude Code's deny list:
- Open Claude Code settings (
.claude/settings.jsonor global) - Add sensitive file patterns to the deny list:
{
"permissions": {
"deny": [
"Read(.env)",
"Read(.env.*)",
"Read(**/secrets/*)",
"Read(**/*credential*)",
"Read(**/*.pem)",
"Read(**/*.key)"
]
}
}This prevents Claude from reading these files entirely, regardless of what commands you run.
Important
Relay includes built-in protections against committing secrets, but defense-in-depth is best practice. Deny read access to sensitive files as a first line of defense.
Commands not found after install?
- Restart Claude Code to reload slash commands
- Verify files exist in
~/.claude/commands/relay/(global) or./.claude/commands/relay/(local)
Commands not working as expected?
- Run
/relay:helpto verify installation - Re-run
npx relay-ccto reinstall
Updating to the latest version?
npx relay-cc@latestUsing Docker or containerized environments?
If file reads fail with tilde paths (~/.claude/...), set CLAUDE_CONFIG_DIR before installing:
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx relay-cc --globalThis ensures absolute paths are used instead of ~ which may not expand correctly in containers.
If you previously used Get Shit Done (GSD), the installer automatically:
- Removes old
commands/gsd/and agent files - Updates hooks and settings references
- Cleans up old cache files
Your existing .planning/ project data is not modified. Relay uses .relay/ for new projects.
To remove Relay completely:
# Global installs
npx relay-cc --claude --global --uninstall
npx relay-cc --opencode --global --uninstall
# Local installs (current project)
npx relay-cc --claude --local --uninstall
npx relay-cc --opencode --local --uninstallThis removes all Relay commands, agents, hooks, and settings while preserving your other configurations.
MIT License. See LICENSE for details.
Claude Code is powerful. Relay makes it reliable.