relay-cc 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +428 -0
  3. package/agents/relay-codebase-mapper.md +761 -0
  4. package/agents/relay-debugger.md +1203 -0
  5. package/agents/relay-estimator.md +257 -0
  6. package/agents/relay-executor.md +823 -0
  7. package/agents/relay-plan-checker.md +812 -0
  8. package/agents/relay-planner.md +1418 -0
  9. package/agents/relay-reviewer.md +279 -0
  10. package/agents/relay-ticket-researcher.md +287 -0
  11. package/agents/relay-verifier.md +778 -0
  12. package/bin/install.js +1667 -0
  13. package/commands/relay/add-todo.md +193 -0
  14. package/commands/relay/check-todos.md +200 -0
  15. package/commands/relay/debug.md +169 -0
  16. package/commands/relay/estimate.md +182 -0
  17. package/commands/relay/help.md +328 -0
  18. package/commands/relay/history.md +203 -0
  19. package/commands/relay/map-codebase.md +71 -0
  20. package/commands/relay/pause-work.md +128 -0
  21. package/commands/relay/pr.md +223 -0
  22. package/commands/relay/quick.md +307 -0
  23. package/commands/relay/resume-work.md +40 -0
  24. package/commands/relay/resume.md +181 -0
  25. package/commands/relay/review.md +322 -0
  26. package/commands/relay/rollback.md +248 -0
  27. package/commands/relay/set-profile.md +116 -0
  28. package/commands/relay/settings.md +165 -0
  29. package/commands/relay/setup.md +247 -0
  30. package/commands/relay/status.md +131 -0
  31. package/commands/relay/tickets.md +106 -0
  32. package/commands/relay/update.md +200 -0
  33. package/commands/relay/work.md +398 -0
  34. package/hooks/dist/relay-check-update.js +61 -0
  35. package/hooks/dist/relay-statusline.js +91 -0
  36. package/package.json +47 -0
  37. package/relay/references/checkpoints.md +1078 -0
  38. package/relay/references/continuation-format.md +249 -0
  39. package/relay/references/git-integration.md +209 -0
  40. package/relay/references/model-profiles.md +57 -0
  41. package/relay/references/planning-config.md +189 -0
  42. package/relay/references/questioning.md +141 -0
  43. package/relay/references/tdd.md +263 -0
  44. package/relay/references/ui-brand.md +162 -0
  45. package/relay/references/verification-patterns.md +612 -0
  46. package/relay/templates/DEBUG.md +159 -0
  47. package/relay/templates/UAT.md +247 -0
  48. package/relay/templates/analysis.md +101 -0
  49. package/relay/templates/codebase/architecture.md +255 -0
  50. package/relay/templates/codebase/concerns.md +310 -0
  51. package/relay/templates/codebase/conventions.md +307 -0
  52. package/relay/templates/codebase/integrations.md +280 -0
  53. package/relay/templates/codebase/stack.md +186 -0
  54. package/relay/templates/codebase/structure.md +285 -0
  55. package/relay/templates/codebase/testing.md +480 -0
  56. package/relay/templates/config.json +40 -0
  57. package/relay/templates/context.md +283 -0
  58. package/relay/templates/continue-here.md +78 -0
  59. package/relay/templates/debug-subagent-prompt.md +91 -0
  60. package/relay/templates/estimate.md +108 -0
  61. package/relay/templates/phase-prompt.md +567 -0
  62. package/relay/templates/planner-subagent-prompt.md +117 -0
  63. package/relay/templates/research.md +552 -0
  64. package/relay/templates/state.md +127 -0
  65. package/relay/templates/summary.md +246 -0
  66. package/relay/templates/verification-report.md +322 -0
  67. package/relay/workflows/analyze-ticket.md +42 -0
  68. package/relay/workflows/diagnose-issues.md +231 -0
  69. package/relay/workflows/execute-phase.md +700 -0
  70. package/relay/workflows/execute-plan.md +1851 -0
  71. package/relay/workflows/map-codebase.md +357 -0
  72. package/relay/workflows/resume-project.md +307 -0
  73. package/relay/workflows/sync-ticket.md +58 -0
  74. package/relay/workflows/verify-phase.md +628 -0
  75. package/relay/workflows/verify-ticket.md +596 -0
  76. package/scripts/build-hooks.js +42 -0
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: relay:map-codebase
3
+ description: Analyze codebase with parallel mapper agents to produce .relay/codebase/ documents
4
+ argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
5
+ allowed-tools:
6
+ - Read
7
+ - Bash
8
+ - Glob
9
+ - Grep
10
+ - Write
11
+ - Task
12
+ ---
13
+
14
+ <objective>
15
+ Analyze existing codebase using parallel relay-codebase-mapper agents to produce structured codebase documents.
16
+
17
+ Each mapper agent explores a focus area and **writes documents directly** to `.relay/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
18
+
19
+ Output: .relay/codebase/ folder with 7 structured documents about the codebase state.
20
+ </objective>
21
+
22
+ <execution_context>
23
+ @~/.claude/relay/workflows/map-codebase.md
24
+ </execution_context>
25
+
26
+ <context>
27
+ Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
28
+
29
+ **Load project state if exists:**
30
+ Check for .relay/STATE.md - loads context if project already initialized
31
+
32
+ **This command can run:**
33
+ - Before /relay:new-project (brownfield codebases) - creates codebase map first
34
+ - After /relay:new-project (greenfield codebases) - updates codebase map as code evolves
35
+ - Anytime to refresh codebase understanding
36
+ </context>
37
+
38
+ <when_to_use>
39
+ **Use map-codebase for:**
40
+ - Brownfield projects before initialization (understand existing code first)
41
+ - Refreshing codebase map after significant changes
42
+ - Onboarding to an unfamiliar codebase
43
+ - Before major refactoring (understand current state)
44
+ - When STATE.md references outdated codebase info
45
+
46
+ **Skip map-codebase for:**
47
+ - Greenfield projects with no code yet (nothing to map)
48
+ - Trivial codebases (<5 files)
49
+ </when_to_use>
50
+
51
+ <process>
52
+ 1. Check if .relay/codebase/ already exists (offer to refresh or skip)
53
+ 2. Create .relay/codebase/ directory structure
54
+ 3. Spawn 4 parallel relay-codebase-mapper agents:
55
+ - Agent 1: tech focus → writes STACK.md, INTEGRATIONS.md
56
+ - Agent 2: arch focus → writes ARCHITECTURE.md, STRUCTURE.md
57
+ - Agent 3: quality focus → writes CONVENTIONS.md, TESTING.md
58
+ - Agent 4: concerns focus → writes CONCERNS.md
59
+ 4. Wait for agents to complete, collect confirmations (NOT document contents)
60
+ 5. Verify all 7 documents exist with line counts
61
+ 6. Commit codebase map
62
+ 7. Offer next steps (typically: /relay:new-project or /relay:plan-phase)
63
+ </process>
64
+
65
+ <success_criteria>
66
+ - [ ] .relay/codebase/ directory created
67
+ - [ ] All 7 codebase documents written by mapper agents
68
+ - [ ] Documents follow template structure
69
+ - [ ] Parallel agents completed without errors
70
+ - [ ] User knows next steps
71
+ </success_criteria>
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: relay:pause-work
3
+ description: Create context handoff when pausing work on a ticket
4
+ allowed-tools:
5
+ - Read
6
+ - Write
7
+ - Bash
8
+ ---
9
+
10
+ <objective>
11
+ Create `.continue-here.md` handoff file to preserve complete work state across sessions.
12
+
13
+ Enables seamless resumption in fresh session with full context restoration.
14
+ </objective>
15
+
16
+ <context>
17
+ @.relay/STATE.md
18
+ </context>
19
+
20
+ <process>
21
+
22
+ <step name="detect">
23
+ **Find active ticket from STATE.md.**
24
+
25
+ Read STATE.md and extract active ticket ID. If no active ticket, report:
26
+ ```
27
+ No active ticket found. Nothing to pause.
28
+ ```
29
+ STOP.
30
+ </step>
31
+
32
+ <step name="gather">
33
+ **Collect complete state for handoff:**
34
+
35
+ 1. **Current position**: Which ticket, which stage, which task
36
+ 2. **Work completed**: What got done this session
37
+ 3. **Work remaining**: What's left in current plan
38
+ 4. **Decisions made**: Key decisions and rationale
39
+ 5. **Blockers/issues**: Anything stuck
40
+ 6. **Mental context**: The approach, next steps
41
+ 7. **Files modified**: What's changed but not committed
42
+
43
+ Ask user for clarifications if needed.
44
+ </step>
45
+
46
+ <step name="write">
47
+ **Write handoff to `.relay/tickets/${TICKET_ID}/.continue-here.md`:**
48
+
49
+ ```markdown
50
+ ---
51
+ ticket: ${TICKET_ID}
52
+ stage: ${CURRENT_STAGE}
53
+ status: paused
54
+ last_updated: [timestamp]
55
+ ---
56
+
57
+ <current_state>
58
+ [Where exactly are we? Immediate context]
59
+ </current_state>
60
+
61
+ <completed_work>
62
+ - [What was accomplished]
63
+ </completed_work>
64
+
65
+ <remaining_work>
66
+ - [What's left to do]
67
+ </remaining_work>
68
+
69
+ <decisions_made>
70
+ - [Key decisions and rationale]
71
+ </decisions_made>
72
+
73
+ <blockers>
74
+ - [Any blockers or issues]
75
+ </blockers>
76
+
77
+ <context>
78
+ [Mental state, the plan, approach being taken]
79
+ </context>
80
+
81
+ <next_action>
82
+ Start with: [specific first action when resuming]
83
+ </next_action>
84
+ ```
85
+
86
+ Be specific enough for a fresh Claude to understand immediately.
87
+ </step>
88
+
89
+ <step name="commit">
90
+ **Check planning config:**
91
+
92
+ ```bash
93
+ COMMIT_PLANNING_DOCS=$(cat .relay/config.json 2>/dev/null | grep -o '"commit_docs"[[:space:]]*:[[:space:]]*[^,}]*' | grep -o 'true\|false' || echo "true")
94
+ git check-ignore -q .relay 2>/dev/null && COMMIT_PLANNING_DOCS=false
95
+ ```
96
+
97
+ **If `COMMIT_PLANNING_DOCS=false`:** Skip git operations
98
+
99
+ **If `COMMIT_PLANNING_DOCS=true` (default):**
100
+
101
+ ```bash
102
+ git add .relay/tickets/${TICKET_ID}/.continue-here.md
103
+ git commit -m "wip(${TICKET_ID}): paused work"
104
+ ```
105
+ </step>
106
+
107
+ <step name="confirm">
108
+ ```
109
+ Handoff created: .relay/tickets/${TICKET_ID}/.continue-here.md
110
+
111
+ Current state:
112
+ - Ticket: ${TICKET_ID}
113
+ - Stage: ${CURRENT_STAGE}
114
+ - Status: paused
115
+
116
+ To resume: /relay:resume-work
117
+ ```
118
+ </step>
119
+
120
+ </process>
121
+
122
+ <success_criteria>
123
+ - [ ] Active ticket identified from STATE.md
124
+ - [ ] .continue-here.md created in ticket directory
125
+ - [ ] All sections filled with specific content
126
+ - [ ] Committed as WIP
127
+ - [ ] User knows how to resume
128
+ </success_criteria>
@@ -0,0 +1,223 @@
1
+ ---
2
+ name: relay:pr
3
+ description: Create a pull request from completed ticket work
4
+ argument-hint: [ticket-id]
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Bash
9
+ - Glob
10
+ - Grep
11
+ - AskUserQuestion
12
+ - mcp__jira__add_comment
13
+ - mcp__github__create_comment
14
+ - mcp__azure_devops__update_work_item
15
+ ---
16
+
17
+ <objective>
18
+ Create a pull request from completed ticket work with auto-generated title and description based on ticket artifacts (ANALYSIS.md, SUMMARY.md, VERIFICATION.md).
19
+
20
+ No agents spawned — orchestration only.
21
+ </objective>
22
+
23
+ <context>
24
+ @.relay/config.json
25
+ @.relay/STATE.md
26
+ Ticket ID: $ARGUMENTS
27
+ </context>
28
+
29
+ <process>
30
+
31
+ ## 0. Pre-flight
32
+
33
+ ```bash
34
+ test -f .relay/config.json && echo "config exists" || echo "no config"
35
+ command -v gh >/dev/null 2>&1 && echo "gh available" || echo "gh missing"
36
+ gh auth status 2>&1 | head -1
37
+ ```
38
+
39
+ If no config: suggest `/relay:setup` and STOP.
40
+ If `gh` CLI not available or not authenticated: report requirement and STOP.
41
+
42
+ ## 1. Resolve Ticket ID
43
+
44
+ **If $ARGUMENTS provided:** Use as ticket ID.
45
+
46
+ **If no arguments:** Try to detect from STATE.md active ticket or current branch:
47
+
48
+ ```bash
49
+ # Try active ticket from STATE.md
50
+ grep -oE 'Active.*: [A-Z]+-[0-9]+' .relay/STATE.md 2>/dev/null | grep -oE '[A-Z]+-[0-9]+' | head -1
51
+
52
+ # Try current branch name
53
+ git branch --show-current | grep -oE '[A-Z]+-[0-9]+' | head -1
54
+ ```
55
+
56
+ If no ticket ID resolved:
57
+ ```
58
+ AskUserQuestion(
59
+ header: "Ticket",
60
+ question: "Which ticket's work should this PR cover?",
61
+ options: [
62
+ { label: "Enter ID", description: "Type a ticket ID (e.g., PROJ-123)" },
63
+ { label: "Browse tickets", description: "See tickets with existing work" }
64
+ ]
65
+ )
66
+ ```
67
+
68
+ ## 2. Gather Context
69
+
70
+ Read ticket artifacts:
71
+
72
+ ```bash
73
+ test -f .relay/tickets/${TICKET_ID}/ANALYSIS.md && echo "analysis exists"
74
+ test -f .relay/tickets/${TICKET_ID}/SUMMARY.md && echo "summary exists"
75
+ test -f .relay/tickets/${TICKET_ID}/VERIFICATION.md && echo "verification exists"
76
+ ```
77
+
78
+ Read available artifacts and extract:
79
+ - **From ANALYSIS.md:** Ticket title, type, acceptance criteria
80
+ - **From SUMMARY.md:** What was implemented, key decisions
81
+ - **From VERIFICATION.md:** Pass/fail status, coverage
82
+
83
+ Get git context:
84
+
85
+ ```bash
86
+ # Diff stat against main/master
87
+ BASE_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | sed 's/.*: //')
88
+ BASE_BRANCH=${BASE_BRANCH:-main}
89
+
90
+ git diff ${BASE_BRANCH}...HEAD --stat
91
+ git log ${BASE_BRANCH}...HEAD --oneline
92
+ ```
93
+
94
+ ## 3. Generate PR Content
95
+
96
+ **Title format:** `${TICKET_ID}: ${ticket_title}`
97
+
98
+ **Body format:**
99
+
100
+ ```markdown
101
+ ## Summary
102
+
103
+ {2-3 bullet points from SUMMARY.md describing what was done}
104
+
105
+ ## Changes
106
+
107
+ {diff stat summary — files changed, insertions, deletions}
108
+
109
+ ## Verification
110
+
111
+ {pass/fail status from VERIFICATION.md}
112
+ {list acceptance criteria with check marks}
113
+
114
+ ## Commits
115
+
116
+ {list of commits from git log}
117
+
118
+ ---
119
+
120
+ Ticket: ${TICKET_ID}
121
+ Generated by [Relay](https://github.com/ibnyusrat/relay)
122
+ ```
123
+
124
+ ## 4. Preview and Confirm
125
+
126
+ Display the generated PR:
127
+
128
+ ```
129
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
130
+ Relay ► PR PREVIEW — ${TICKET_ID}
131
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
132
+
133
+ Title: ${PR_TITLE}
134
+
135
+ ${PR_BODY}
136
+ ```
137
+
138
+ ```
139
+ AskUserQuestion(
140
+ header: "Create PR",
141
+ question: "How would you like to proceed?",
142
+ options: [
143
+ { label: "Create PR", description: "Push branch and create pull request" },
144
+ { label: "Edit title", description: "Modify the PR title before creating" },
145
+ { label: "Edit body", description: "Modify the PR description before creating" },
146
+ { label: "Cancel", description: "Don't create a PR" }
147
+ ]
148
+ )
149
+ ```
150
+
151
+ If "Edit title": ask for new title, then re-preview.
152
+ If "Edit body": ask for changes, then re-preview.
153
+ If "Cancel": STOP.
154
+
155
+ ## 5. Push and Create PR
156
+
157
+ ```bash
158
+ # Push branch
159
+ CURRENT_BRANCH=$(git branch --show-current)
160
+ git push -u origin "${CURRENT_BRANCH}"
161
+
162
+ # Create PR
163
+ gh pr create --title "${PR_TITLE}" --body "${PR_BODY}" --base "${BASE_BRANCH}"
164
+ ```
165
+
166
+ Capture PR URL from output.
167
+
168
+ ## 6. Update State
169
+
170
+ Update STATE.md with PR link:
171
+
172
+ ```bash
173
+ # Add PR reference to ticket's section in STATE.md
174
+ PR_URL=$(gh pr view --json url --jq '.url')
175
+ ```
176
+
177
+ ## 7. Optional: Post PR Link to Ticket System
178
+
179
+ If integration is configured:
180
+
181
+ ```
182
+ AskUserQuestion(
183
+ header: "Sync",
184
+ question: "Post PR link back to ${TICKET_ID}?",
185
+ options: [
186
+ { label: "Post link", description: "Add PR URL as comment on the ticket" },
187
+ { label: "Skip", description: "Don't update the external ticket" }
188
+ ]
189
+ )
190
+ ```
191
+
192
+ If "Post link": use appropriate MCP tool to add comment with PR URL.
193
+
194
+ ## 8. Completion
195
+
196
+ ```
197
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
198
+ Relay ► PR CREATED — ${TICKET_ID}
199
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
200
+
201
+ PR: ${PR_URL}
202
+ Title: ${PR_TITLE}
203
+ Branch: ${CURRENT_BRANCH} → ${BASE_BRANCH}
204
+
205
+ ## Next Steps
206
+
207
+ - Review the PR at ${PR_URL}
208
+ - `/relay:tickets` — pick another ticket
209
+ - `/relay:work <id>` — start next ticket
210
+ ```
211
+
212
+ </process>
213
+
214
+ <success_criteria>
215
+ - [ ] Ticket ID resolved (from argument, STATE.md, or branch)
216
+ - [ ] Ticket artifacts read for context
217
+ - [ ] PR title and body generated from artifacts
218
+ - [ ] User previewed and approved content
219
+ - [ ] Branch pushed to remote
220
+ - [ ] PR created via `gh pr create`
221
+ - [ ] STATE.md updated with PR link
222
+ - [ ] Optionally synced PR link to ticket system
223
+ </success_criteria>