@pennyfarthing/core 7.0.1 → 7.0.2
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.
- package/package.json +10 -11
- package/pennyfarthing-dist/agents/README.md +16 -2
- package/pennyfarthing-dist/agents/architect.md +19 -5
- package/pennyfarthing-dist/agents/dev.md +18 -4
- package/pennyfarthing-dist/agents/devops.md +19 -5
- package/pennyfarthing-dist/agents/generic-handoff.md +4 -1
- package/pennyfarthing-dist/agents/orchestrator.md +25 -8
- package/pennyfarthing-dist/agents/pm.md +14 -3
- package/pennyfarthing-dist/agents/reviewer-preflight.md +10 -52
- package/pennyfarthing-dist/agents/reviewer.md +27 -7
- package/pennyfarthing-dist/agents/sm.md +51 -22
- package/pennyfarthing-dist/agents/tea.md +18 -4
- package/pennyfarthing-dist/agents/testing-runner.md +4 -1
- package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -0
- package/pennyfarthing-dist/scripts/agent-session.sh +0 -0
- package/pennyfarthing-dist/scripts/check-context.sh +0 -0
- package/pennyfarthing-dist/scripts/check.sh +0 -0
- package/pennyfarthing-dist/scripts/deploy.sh +0 -0
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -0
- package/pennyfarthing-dist/scripts/prime.sh +0 -0
- package/pennyfarthing-dist/scripts/release.sh +0 -0
- package/pennyfarthing-dist/scripts/repo-utils.sh +0 -0
- package/pennyfarthing-dist/scripts/run-ci.sh +0 -0
- package/pennyfarthing-dist/scripts/run.sh +0 -0
- package/pennyfarthing-dist/scripts/statusline.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
- package/pennyfarthing-dist/scripts/uninstall.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/common.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -0
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/logging.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/retry.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -0
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -0
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -0
- package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +71 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pennyfarthing/core",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.2",
|
|
4
4
|
"description": "Claude Code agent framework with TDD workflow and persona system",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -28,14 +28,6 @@
|
|
|
28
28
|
"bugs": {
|
|
29
29
|
"url": "https://github.com/1898andCo/pennyfarthing/issues"
|
|
30
30
|
},
|
|
31
|
-
"scripts": {
|
|
32
|
-
"build": "pnpm -r build && ./scripts/utils/generate-skill-docs.sh",
|
|
33
|
-
"docs": "./scripts/utils/generate-skill-docs.sh",
|
|
34
|
-
"dev": "pnpm -r --parallel dev",
|
|
35
|
-
"test": "pnpm -r test",
|
|
36
|
-
"lint": "eslint 'packages/*/src/**/*.ts' --max-warnings 0",
|
|
37
|
-
"clean": "pnpm -r clean"
|
|
38
|
-
},
|
|
39
31
|
"dependencies": {
|
|
40
32
|
"chalk": "^5.3.0",
|
|
41
33
|
"commander": "^12.1.0",
|
|
@@ -54,5 +46,12 @@
|
|
|
54
46
|
"engines": {
|
|
55
47
|
"node": ">=18.0.0"
|
|
56
48
|
},
|
|
57
|
-
"
|
|
58
|
-
|
|
49
|
+
"scripts": {
|
|
50
|
+
"build": "pnpm -r build && ./scripts/utils/generate-skill-docs.sh",
|
|
51
|
+
"docs": "./scripts/utils/generate-skill-docs.sh",
|
|
52
|
+
"dev": "pnpm -r --parallel dev",
|
|
53
|
+
"test": "pnpm -r test",
|
|
54
|
+
"lint": "eslint 'packages/*/src/**/*.ts' --max-warnings 0",
|
|
55
|
+
"clean": "pnpm -r clean"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -49,7 +49,18 @@ Focus on specific repo(s), implement/test/document features.
|
|
|
49
49
|
- **`ux-designer.md`** - UX Designer (UI design, UX)
|
|
50
50
|
|
|
51
51
|
### Official Subagents (Haiku-based)
|
|
52
|
-
Lightweight subagents for mechanical tasks. Invoked via `Task tool` with `subagent_type`.
|
|
52
|
+
Lightweight subagents for mechanical tasks. Invoked via `Task tool` with `subagent_type: "general-purpose"` and `model: "haiku"`.
|
|
53
|
+
|
|
54
|
+
**Invocation pattern:**
|
|
55
|
+
```yaml
|
|
56
|
+
Task tool:
|
|
57
|
+
subagent_type: "general-purpose"
|
|
58
|
+
model: "haiku"
|
|
59
|
+
prompt: |
|
|
60
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
61
|
+
|
|
62
|
+
{PARAMETERS}
|
|
63
|
+
```
|
|
53
64
|
|
|
54
65
|
- **`workflow-status-check.md`** - Detect workflow state
|
|
55
66
|
- **`generic-sm-setup.md`** - Research OR setup mode (Story 31-11)
|
|
@@ -304,9 +315,12 @@ Subagents can run in background using Claude Code's `run_in_background` paramete
|
|
|
304
315
|
|
|
305
316
|
```yaml
|
|
306
317
|
Task tool:
|
|
307
|
-
subagent_type: "
|
|
318
|
+
subagent_type: "general-purpose"
|
|
319
|
+
model: "haiku"
|
|
308
320
|
run_in_background: true
|
|
309
321
|
prompt: |
|
|
322
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
323
|
+
|
|
310
324
|
REPOS: all
|
|
311
325
|
CONTEXT: Background test run while implementing
|
|
312
326
|
RUN_ID: bg-test-001
|
|
@@ -17,10 +17,21 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: Architecture scanning, pattern analysis, codebase exploration.
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `workflow-status-check` - Scan sprint state and active sessions
|
|
22
|
-
- `testing-runner` - Verify builds pass after design changes
|
|
23
|
-
- `sm-file-summary` - Summarize files for context gathering
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `workflow-status-check.md` - Scan sprint state and active sessions
|
|
22
|
+
- `testing-runner.md` - Verify builds pass after design changes
|
|
23
|
+
- `sm-file-summary.md` - Summarize files for context gathering
|
|
24
|
+
|
|
25
|
+
- **Invocation pattern:**
|
|
26
|
+
```yaml
|
|
27
|
+
Task tool:
|
|
28
|
+
subagent_type: "general-purpose"
|
|
29
|
+
model: "haiku"
|
|
30
|
+
prompt: |
|
|
31
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
32
|
+
|
|
33
|
+
{PARAMETERS}
|
|
34
|
+
```
|
|
24
35
|
</helpers>
|
|
25
36
|
|
|
26
37
|
<responsibilities>
|
|
@@ -140,8 +151,11 @@ When design changes may affect build:
|
|
|
140
151
|
|
|
141
152
|
```yaml
|
|
142
153
|
Task tool:
|
|
143
|
-
subagent_type: "
|
|
154
|
+
subagent_type: "general-purpose"
|
|
155
|
+
model: "haiku"
|
|
144
156
|
prompt: |
|
|
157
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
158
|
+
|
|
145
159
|
REPOS: all
|
|
146
160
|
CONTEXT: Verifying build after design change
|
|
147
161
|
RUN_ID: architect-verify
|
|
@@ -17,9 +17,20 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: run tests, gather results, update session for handoff
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `testing-runner` - Run tests, gather results
|
|
22
|
-
- `generic-handoff` - Workflow-driven session update for handoff
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `testing-runner.md` - Run tests, gather results
|
|
22
|
+
- `generic-handoff.md` - Workflow-driven session update for handoff
|
|
23
|
+
|
|
24
|
+
- **Invocation pattern:**
|
|
25
|
+
```yaml
|
|
26
|
+
Task tool:
|
|
27
|
+
subagent_type: "general-purpose"
|
|
28
|
+
model: "haiku"
|
|
29
|
+
prompt: |
|
|
30
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
31
|
+
|
|
32
|
+
{PARAMETERS}
|
|
33
|
+
```
|
|
23
34
|
</helpers>
|
|
24
35
|
|
|
25
36
|
<responsibilities>
|
|
@@ -176,8 +187,11 @@ Then spawn with detected workflow (tdd, trivial, etc.):
|
|
|
176
187
|
|
|
177
188
|
```yaml
|
|
178
189
|
Task tool:
|
|
179
|
-
subagent_type: "
|
|
190
|
+
subagent_type: "general-purpose"
|
|
191
|
+
model: "haiku"
|
|
180
192
|
prompt: |
|
|
193
|
+
Read and follow: .pennyfarthing/agents/generic-handoff.md
|
|
194
|
+
|
|
181
195
|
STORY_ID: {value}
|
|
182
196
|
WORKFLOW: {workflow from session} # e.g., "tdd" or "trivial"
|
|
183
197
|
CURRENT_PHASE: green # or "implement" for trivial workflow
|
|
@@ -17,10 +17,21 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: System checks, log analysis, config scanning.
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `workflow-status-check` - Scan sprint state and active sessions
|
|
22
|
-
- `testing-runner` - Verify CI pipeline and tests pass
|
|
23
|
-
- `sm-file-summary` - Summarize configuration files
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `workflow-status-check.md` - Scan sprint state and active sessions
|
|
22
|
+
- `testing-runner.md` - Verify CI pipeline and tests pass
|
|
23
|
+
- `sm-file-summary.md` - Summarize configuration files
|
|
24
|
+
|
|
25
|
+
- **Invocation pattern:**
|
|
26
|
+
```yaml
|
|
27
|
+
Task tool:
|
|
28
|
+
subagent_type: "general-purpose"
|
|
29
|
+
model: "haiku"
|
|
30
|
+
prompt: |
|
|
31
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
32
|
+
|
|
33
|
+
{PARAMETERS}
|
|
34
|
+
```
|
|
24
35
|
</helpers>
|
|
25
36
|
|
|
26
37
|
<responsibilities>
|
|
@@ -140,8 +151,11 @@ Before any deployment:
|
|
|
140
151
|
|
|
141
152
|
```yaml
|
|
142
153
|
Task tool:
|
|
143
|
-
subagent_type: "
|
|
154
|
+
subagent_type: "general-purpose"
|
|
155
|
+
model: "haiku"
|
|
144
156
|
prompt: |
|
|
157
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
158
|
+
|
|
145
159
|
REPOS: all
|
|
146
160
|
CONTEXT: Pre-deployment verification
|
|
147
161
|
RUN_ID: devops-verify
|
|
@@ -104,8 +104,11 @@ Based on the gate type from the workflow, run the appropriate checks.
|
|
|
104
104
|
If no valid cache or TEST_RESULT not provided, delegate to testing-runner:
|
|
105
105
|
```yaml
|
|
106
106
|
Task tool:
|
|
107
|
-
subagent_type: "
|
|
107
|
+
subagent_type: "general-purpose"
|
|
108
|
+
model: "haiku"
|
|
108
109
|
prompt: |
|
|
110
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
111
|
+
|
|
109
112
|
REPOS: {REPOS}
|
|
110
113
|
CONTEXT: TEA handoff - verify tests are RED
|
|
111
114
|
RUN_ID: {STORY_ID}-tea-handoff
|
|
@@ -17,12 +17,23 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: Status checks, metrics gathering, file scanning.
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `workflow-status-check` - Scan session files and git status
|
|
22
|
-
- `testing-runner` - Run tests to verify changes
|
|
23
|
-
- `sm-file-summary` - Summarize agent files for audit
|
|
24
|
-
- `generic-handoff` - Update session for phase transitions
|
|
25
|
-
- `Explore` - Search for patterns across codebase
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `workflow-status-check.md` - Scan session files and git status
|
|
22
|
+
- `testing-runner.md` - Run tests to verify changes
|
|
23
|
+
- `sm-file-summary.md` - Summarize agent files for audit
|
|
24
|
+
- `generic-handoff.md` - Update session for phase transitions
|
|
25
|
+
- `Explore` - Search for patterns across codebase (Claude Code built-in)
|
|
26
|
+
|
|
27
|
+
- **Invocation pattern:**
|
|
28
|
+
```yaml
|
|
29
|
+
Task tool:
|
|
30
|
+
subagent_type: "general-purpose"
|
|
31
|
+
model: "haiku"
|
|
32
|
+
prompt: |
|
|
33
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
34
|
+
|
|
35
|
+
{PARAMETERS}
|
|
36
|
+
```
|
|
26
37
|
</helpers>
|
|
27
38
|
|
|
28
39
|
<responsibilities>
|
|
@@ -238,8 +249,11 @@ REFLECT: I should follow this pattern for consistency
|
|
|
238
249
|
Never run `just test`, `npm test`, etc. directly. Always spawn:
|
|
239
250
|
```yaml
|
|
240
251
|
Task tool:
|
|
241
|
-
subagent_type: "
|
|
252
|
+
subagent_type: "general-purpose"
|
|
253
|
+
model: "haiku"
|
|
242
254
|
prompt: |
|
|
255
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
256
|
+
|
|
243
257
|
REPOS: pennyfarthing
|
|
244
258
|
CONTEXT: Verify agent file changes don't break tests
|
|
245
259
|
RUN_ID: orchestrator-verify
|
|
@@ -294,8 +308,11 @@ See `/dev-patterns` skill → "Turn-Efficient Patterns" for complete guidance.
|
|
|
294
308
|
After completing file updates, spawn handoff helper:
|
|
295
309
|
```yaml
|
|
296
310
|
Task tool:
|
|
297
|
-
subagent_type: "
|
|
311
|
+
subagent_type: "general-purpose"
|
|
312
|
+
model: "haiku"
|
|
298
313
|
prompt: |
|
|
314
|
+
Read and follow: .pennyfarthing/agents/generic-handoff.md
|
|
315
|
+
|
|
299
316
|
STORY_ID: {value}
|
|
300
317
|
WORKFLOW: agent-docs
|
|
301
318
|
CURRENT_PHASE: implement
|
|
@@ -17,9 +17,20 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: Backlog scanning, Jira queries, velocity calculation, status checks.
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `workflow-status-check` - Scan sprint state and active sessions
|
|
22
|
-
- `sm-file-summary` - Summarize files for context gathering
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `workflow-status-check.md` - Scan sprint state and active sessions
|
|
22
|
+
- `sm-file-summary.md` - Summarize files for context gathering
|
|
23
|
+
|
|
24
|
+
- **Invocation pattern:**
|
|
25
|
+
```yaml
|
|
26
|
+
Task tool:
|
|
27
|
+
subagent_type: "general-purpose"
|
|
28
|
+
model: "haiku"
|
|
29
|
+
prompt: |
|
|
30
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
31
|
+
|
|
32
|
+
{PARAMETERS}
|
|
33
|
+
```
|
|
23
34
|
</helpers>
|
|
24
35
|
|
|
25
36
|
<responsibilities>
|
|
@@ -97,58 +97,16 @@ fi
|
|
|
97
97
|
|
|
98
98
|
Spawn a testing-runner subagent with:
|
|
99
99
|
```yaml
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
## Project Info
|
|
112
|
-
- Project root: $CLAUDE_PROJECT_DIR (set by SessionStart hook)
|
|
113
|
-
- Repo(s) to test: {REPO}
|
|
114
|
-
- Context: PR review pre-flight for Story {STORY_ID}
|
|
115
|
-
- Run ID: {STORY_ID}-review
|
|
116
|
-
|
|
117
|
-
## Execute Tests and Lints
|
|
118
|
-
|
|
119
|
-
Use repo-utils.sh for dynamic repo handling:
|
|
120
|
-
```bash
|
|
121
|
-
source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
|
|
122
|
-
RUN_ID="{STORY_ID}-review"
|
|
123
|
-
|
|
124
|
-
for repo in $(get_repo_names); do
|
|
125
|
-
repo_path=$(get_repo_path "$repo")
|
|
126
|
-
test_cmd=$(get_test_command "$repo")
|
|
127
|
-
lint_cmd=$(get_lint_command "$repo")
|
|
128
|
-
|
|
129
|
-
cd $CLAUDE_PROJECT_DIR/$repo_path
|
|
130
|
-
|
|
131
|
-
# Run tests
|
|
132
|
-
if [[ -n "$test_cmd" ]]; then
|
|
133
|
-
$test_cmd 2>&1 | tee $CLAUDE_PROJECT_DIR/.session/test-{STORY_ID}-reviewer-verify.log
|
|
134
|
-
fi
|
|
135
|
-
|
|
136
|
-
# Run linter
|
|
137
|
-
if [[ -n "$lint_cmd" ]]; then
|
|
138
|
-
$lint_cmd 2>&1 | tee $CLAUDE_PROJECT_DIR/.session/lint-{STORY_ID}-${repo}.log
|
|
139
|
-
fi
|
|
140
|
-
done
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Check for Forbidden Skip Patterns
|
|
144
|
-
```bash
|
|
145
|
-
source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
|
|
146
|
-
for repo in $(get_repo_names); do
|
|
147
|
-
check_skip_violations "$repo"
|
|
148
|
-
done
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## Output structured results per testing-runner.md format
|
|
100
|
+
Task tool:
|
|
101
|
+
subagent_type: "general-purpose"
|
|
102
|
+
model: "haiku"
|
|
103
|
+
description: "run tests"
|
|
104
|
+
prompt: |
|
|
105
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
106
|
+
|
|
107
|
+
REPOS: {REPOS}
|
|
108
|
+
CONTEXT: PR review pre-flight for Story {STORY_ID}
|
|
109
|
+
RUN_ID: {STORY_ID}-review
|
|
152
110
|
```
|
|
153
111
|
|
|
154
112
|
If you cannot spawn a subagent, run the tests directly using the testing skill commands.
|
|
@@ -35,10 +35,21 @@ A bug you miss ships to production. A security hole you miss gets exploited. An
|
|
|
35
35
|
<helpers>
|
|
36
36
|
From theme config. Model: haiku. Tasks: gather pre-flight data, update session for approval/rejection
|
|
37
37
|
|
|
38
|
-
- **
|
|
39
|
-
- `testing-runner` - Run tests
|
|
40
|
-
- `reviewer-preflight` - Gather pre-flight data (tests, lint, smells)
|
|
41
|
-
- `generic-handoff` - Workflow-driven session update (approve or reject)
|
|
38
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
39
|
+
- `testing-runner.md` - Run tests
|
|
40
|
+
- `reviewer-preflight.md` - Gather pre-flight data (tests, lint, smells)
|
|
41
|
+
- `generic-handoff.md` - Workflow-driven session update (approve or reject)
|
|
42
|
+
|
|
43
|
+
- **Invocation pattern:**
|
|
44
|
+
```yaml
|
|
45
|
+
Task tool:
|
|
46
|
+
subagent_type: "general-purpose"
|
|
47
|
+
model: "haiku"
|
|
48
|
+
prompt: |
|
|
49
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
50
|
+
|
|
51
|
+
{PARAMETERS}
|
|
52
|
+
```
|
|
42
53
|
</helpers>
|
|
43
54
|
|
|
44
55
|
<responsibilities>
|
|
@@ -109,8 +120,11 @@ Spawn Helper to gather mechanical data:
|
|
|
109
120
|
|
|
110
121
|
```yaml
|
|
111
122
|
Task tool:
|
|
112
|
-
subagent_type: "
|
|
123
|
+
subagent_type: "general-purpose"
|
|
124
|
+
model: "haiku"
|
|
113
125
|
prompt: |
|
|
126
|
+
Read and follow: .pennyfarthing/agents/reviewer-preflight.md
|
|
127
|
+
|
|
114
128
|
STORY_ID: {value}
|
|
115
129
|
REPOS: {value}
|
|
116
130
|
BRANCH: {value}
|
|
@@ -241,8 +255,11 @@ Then spawn with detected workflow:
|
|
|
241
255
|
```yaml
|
|
242
256
|
# Approval
|
|
243
257
|
Task tool:
|
|
244
|
-
subagent_type: "
|
|
258
|
+
subagent_type: "general-purpose"
|
|
259
|
+
model: "haiku"
|
|
245
260
|
prompt: |
|
|
261
|
+
Read and follow: .pennyfarthing/agents/generic-handoff.md
|
|
262
|
+
|
|
246
263
|
STORY_ID: {value}
|
|
247
264
|
WORKFLOW: {workflow from session} # e.g., "tdd" or "trivial"
|
|
248
265
|
CURRENT_PHASE: review
|
|
@@ -252,8 +269,11 @@ Task tool:
|
|
|
252
269
|
|
|
253
270
|
# Rejection
|
|
254
271
|
Task tool:
|
|
255
|
-
subagent_type: "
|
|
272
|
+
subagent_type: "general-purpose"
|
|
273
|
+
model: "haiku"
|
|
256
274
|
prompt: |
|
|
275
|
+
Read and follow: .pennyfarthing/agents/generic-handoff.md
|
|
276
|
+
|
|
257
277
|
STORY_ID: {value}
|
|
258
278
|
WORKFLOW: {workflow from session} # e.g., "tdd" or "trivial"
|
|
259
279
|
CURRENT_PHASE: review
|
|
@@ -16,20 +16,25 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
16
16
|
<helpers>
|
|
17
17
|
From theme config. Model: haiku. Tasks: Status checks, backlog scans, file summaries, Jira updates, session archival.
|
|
18
18
|
|
|
19
|
-
- **
|
|
20
|
-
- `workflow-status-check` - Scan session files and git status
|
|
21
|
-
- `testing-runner` - Run tests
|
|
22
|
-
- `generic-sm-setup` - Research backlog OR setup story (mode: research|setup)
|
|
23
|
-
- `generic-sm-finish` - Preflight checks OR execute finish (phase: preflight|execute)
|
|
24
|
-
- `generic-handoff` - Workflow-driven phase transitions (TEA/Dev/Reviewer)
|
|
25
|
-
- `sm-handoff` - SM→TEA/Dev handoff with Jira claim and branch verification
|
|
26
|
-
- `sm-file-summary` - Read and summarize files for context
|
|
27
|
-
|
|
28
|
-
- **
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
19
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
20
|
+
- `workflow-status-check.md` - Scan session files and git status
|
|
21
|
+
- `testing-runner.md` - Run tests
|
|
22
|
+
- `generic-sm-setup.md` - Research backlog OR setup story (mode: research|setup)
|
|
23
|
+
- `generic-sm-finish.md` - Preflight checks OR execute finish (phase: preflight|execute)
|
|
24
|
+
- `generic-handoff.md` - Workflow-driven phase transitions (TEA/Dev/Reviewer)
|
|
25
|
+
- `sm-handoff.md` - SM→TEA/Dev handoff with Jira claim and branch verification
|
|
26
|
+
- `sm-file-summary.md` - Read and summarize files for context
|
|
27
|
+
|
|
28
|
+
- **Invocation pattern:**
|
|
29
|
+
```yaml
|
|
30
|
+
Task tool:
|
|
31
|
+
subagent_type: "general-purpose"
|
|
32
|
+
model: "haiku"
|
|
33
|
+
prompt: |
|
|
34
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
35
|
+
|
|
36
|
+
{PARAMETERS}
|
|
37
|
+
```
|
|
33
38
|
</helpers>
|
|
34
39
|
|
|
35
40
|
<responsibilities>
|
|
@@ -120,8 +125,11 @@ REFLECT: I should clarify AC4 with the user before proceeding.
|
|
|
120
125
|
1. Run workflow status check:
|
|
121
126
|
```yaml
|
|
122
127
|
Task tool:
|
|
123
|
-
subagent_type: "
|
|
128
|
+
subagent_type: "general-purpose"
|
|
129
|
+
model: "haiku"
|
|
124
130
|
prompt: |
|
|
131
|
+
Read and follow: .pennyfarthing/agents/workflow-status-check.md
|
|
132
|
+
|
|
125
133
|
CALLING_AGENT: SM
|
|
126
134
|
```
|
|
127
135
|
2. Helper returns: `FINISH_STATE`, `NEW_WORK_STATE`, or `IN_PROGRESS_STATE`
|
|
@@ -136,8 +144,11 @@ I send helper to check the workflow status before anything else.
|
|
|
136
144
|
|
|
137
145
|
```yaml
|
|
138
146
|
Task tool:
|
|
139
|
-
subagent_type: "
|
|
147
|
+
subagent_type: "general-purpose"
|
|
148
|
+
model: "haiku"
|
|
140
149
|
prompt: |
|
|
150
|
+
Read and follow: .pennyfarthing/agents/workflow-status-check.md
|
|
151
|
+
|
|
141
152
|
CALLING_AGENT: SM
|
|
142
153
|
```
|
|
143
154
|
|
|
@@ -169,8 +180,11 @@ Task tool:
|
|
|
169
180
|
|
|
170
181
|
```yaml
|
|
171
182
|
Task tool:
|
|
172
|
-
subagent_type: "
|
|
183
|
+
subagent_type: "general-purpose"
|
|
184
|
+
model: "haiku"
|
|
173
185
|
prompt: |
|
|
186
|
+
Read and follow: .pennyfarthing/agents/generic-sm-finish.md
|
|
187
|
+
|
|
174
188
|
PHASE: preflight
|
|
175
189
|
STORY_ID: {value}
|
|
176
190
|
JIRA_KEY: {value from session/YAML jira field, or omit if not found}
|
|
@@ -211,8 +225,11 @@ I read helper's bookkeeping report and write `sprint/context/story-{X-Y}-summary
|
|
|
211
225
|
|
|
212
226
|
```yaml
|
|
213
227
|
Task tool:
|
|
214
|
-
subagent_type: "
|
|
228
|
+
subagent_type: "general-purpose"
|
|
229
|
+
model: "haiku"
|
|
215
230
|
prompt: |
|
|
231
|
+
Read and follow: .pennyfarthing/agents/generic-sm-finish.md
|
|
232
|
+
|
|
216
233
|
PHASE: execute
|
|
217
234
|
STORY_ID: {value}
|
|
218
235
|
SUMMARY_CONTENT: {value}
|
|
@@ -234,8 +251,11 @@ Helper does:
|
|
|
234
251
|
|
|
235
252
|
```yaml
|
|
236
253
|
Task tool:
|
|
237
|
-
subagent_type: "
|
|
254
|
+
subagent_type: "general-purpose"
|
|
255
|
+
model: "haiku"
|
|
238
256
|
prompt: |
|
|
257
|
+
Read and follow: .pennyfarthing/agents/generic-sm-setup.md
|
|
258
|
+
|
|
239
259
|
MODE: research
|
|
240
260
|
```
|
|
241
261
|
|
|
@@ -261,8 +281,11 @@ I receive helper's research report and present to the user:
|
|
|
261
281
|
|
|
262
282
|
```yaml
|
|
263
283
|
Task tool:
|
|
264
|
-
subagent_type: "
|
|
284
|
+
subagent_type: "general-purpose"
|
|
285
|
+
model: "haiku"
|
|
265
286
|
prompt: |
|
|
287
|
+
Read and follow: .pennyfarthing/agents/sm-file-summary.md
|
|
288
|
+
|
|
266
289
|
STORY_ID: {value}
|
|
267
290
|
FILE_LIST: |
|
|
268
291
|
path/to/file1.go
|
|
@@ -344,8 +367,11 @@ Then spawn setup with the detected workflow:
|
|
|
344
367
|
|
|
345
368
|
```yaml
|
|
346
369
|
Task tool:
|
|
347
|
-
subagent_type: "
|
|
370
|
+
subagent_type: "general-purpose"
|
|
371
|
+
model: "haiku"
|
|
348
372
|
prompt: |
|
|
373
|
+
Read and follow: .pennyfarthing/agents/generic-sm-setup.md
|
|
374
|
+
|
|
349
375
|
MODE: setup
|
|
350
376
|
STORY_ID: {value}
|
|
351
377
|
JIRA_KEY: {value}
|
|
@@ -373,8 +399,11 @@ After story setup, spawn Helper to update session file for handoff:
|
|
|
373
399
|
|
|
374
400
|
```yaml
|
|
375
401
|
Task tool:
|
|
376
|
-
subagent_type: "
|
|
402
|
+
subagent_type: "general-purpose"
|
|
403
|
+
model: "haiku"
|
|
377
404
|
prompt: |
|
|
405
|
+
Read and follow: .pennyfarthing/agents/sm-handoff.md
|
|
406
|
+
|
|
378
407
|
STORY_ID: {value}
|
|
379
408
|
REPOS: {value}
|
|
380
409
|
TITLE: {value}
|
|
@@ -17,9 +17,20 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
17
17
|
<helpers>
|
|
18
18
|
From theme config. Model: haiku. Tasks: run tests, gather results, update session for handoff
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- `testing-runner` - Run tests, gather results
|
|
22
|
-
- `generic-handoff` - Workflow-driven session update for handoff
|
|
20
|
+
- **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
|
|
21
|
+
- `testing-runner.md` - Run tests, gather results
|
|
22
|
+
- `generic-handoff.md` - Workflow-driven session update for handoff
|
|
23
|
+
|
|
24
|
+
- **Invocation pattern:**
|
|
25
|
+
```yaml
|
|
26
|
+
Task tool:
|
|
27
|
+
subagent_type: "general-purpose"
|
|
28
|
+
model: "haiku"
|
|
29
|
+
prompt: |
|
|
30
|
+
Read and follow: .pennyfarthing/agents/{subagent-name}.md
|
|
31
|
+
|
|
32
|
+
{PARAMETERS}
|
|
33
|
+
```
|
|
23
34
|
</helpers>
|
|
24
35
|
|
|
25
36
|
<responsibilities>
|
|
@@ -151,8 +162,11 @@ Then spawn with detected workflow:
|
|
|
151
162
|
|
|
152
163
|
```yaml
|
|
153
164
|
Task tool:
|
|
154
|
-
subagent_type: "
|
|
165
|
+
subagent_type: "general-purpose"
|
|
166
|
+
model: "haiku"
|
|
155
167
|
prompt: |
|
|
168
|
+
Read and follow: .pennyfarthing/agents/generic-handoff.md
|
|
169
|
+
|
|
156
170
|
STORY_ID: {value}
|
|
157
171
|
WORKFLOW: {workflow from session} # e.g., "tdd"
|
|
158
172
|
CURRENT_PHASE: red
|
|
@@ -65,9 +65,12 @@ The testing-runner can be spawned in background mode, allowing the main agent to
|
|
|
65
65
|
|
|
66
66
|
```yaml
|
|
67
67
|
Task tool:
|
|
68
|
-
subagent_type: "
|
|
68
|
+
subagent_type: "general-purpose"
|
|
69
|
+
model: "haiku"
|
|
69
70
|
run_in_background: true
|
|
70
71
|
prompt: |
|
|
72
|
+
Read and follow: .pennyfarthing/agents/testing-runner.md
|
|
73
|
+
|
|
71
74
|
REPOS: all
|
|
72
75
|
CONTEXT: Background test run while implementing
|
|
73
76
|
RUN_ID: bg-test-001
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -20,6 +20,21 @@ Cyclist is a visual terminal interface for Claude Code that displays:
|
|
|
20
20
|
- Story/session progress tracking
|
|
21
21
|
- Git status and context information
|
|
22
22
|
|
|
23
|
+
## Quick Start (Recommended)
|
|
24
|
+
|
|
25
|
+
Use `just` commands from the project root:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Start Cyclist Electron (recommended)
|
|
29
|
+
just cyclist-electron
|
|
30
|
+
|
|
31
|
+
# Start Cyclist web server only (browser-based)
|
|
32
|
+
just cyclist-web
|
|
33
|
+
|
|
34
|
+
# Start Cyclist for a different project
|
|
35
|
+
just cyclist-electron project_dir=/path/to/project
|
|
36
|
+
```
|
|
37
|
+
|
|
23
38
|
## Environment Variables
|
|
24
39
|
|
|
25
40
|
| Variable | Description | Default |
|
|
@@ -38,6 +53,20 @@ Cyclist is a visual terminal interface for Claude Code that displays:
|
|
|
38
53
|
|
|
39
54
|
## Launch Commands
|
|
40
55
|
|
|
56
|
+
### Using Just (Recommended)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Electron mode (from any pennyfarthing project)
|
|
60
|
+
just cyclist-electron
|
|
61
|
+
|
|
62
|
+
# Web mode (browser-based)
|
|
63
|
+
just cyclist-web
|
|
64
|
+
|
|
65
|
+
# With explicit project directory
|
|
66
|
+
just cyclist-electron project_dir=/path/to/project
|
|
67
|
+
just cyclist-web project_dir=/path/to/project
|
|
68
|
+
```
|
|
69
|
+
|
|
41
70
|
### Web Backend (Browser Mode)
|
|
42
71
|
|
|
43
72
|
Run from the **cyclist package directory**:
|
|
@@ -62,19 +91,10 @@ cyclist /path/to/project
|
|
|
62
91
|
|
|
63
92
|
# Direct launch via open
|
|
64
93
|
open -a Cyclist --args --project-dir=/path/to/project
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Quick Launch Examples
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# Web mode for current directory
|
|
71
|
-
cd packages/cyclist && CYCLIST_PROJECT_DIR=$PWD npm start
|
|
72
|
-
|
|
73
|
-
# Web mode on custom port
|
|
74
|
-
cd packages/cyclist && PORT=3000 CYCLIST_PROJECT_DIR=/path npm start
|
|
75
94
|
|
|
76
|
-
#
|
|
77
|
-
cd packages/cyclist
|
|
95
|
+
# Development (from packages/cyclist)
|
|
96
|
+
cd packages/cyclist
|
|
97
|
+
CYCLIST_PROJECT_DIR=/path/to/project npm run dev
|
|
78
98
|
```
|
|
79
99
|
|
|
80
100
|
## Port Auto-Discovery
|
|
@@ -91,27 +111,61 @@ From `packages/cyclist/`:
|
|
|
91
111
|
|--------|-------------|
|
|
92
112
|
| `npm start` | Run production server |
|
|
93
113
|
| `npm run dev` | Electron dev mode with file watching |
|
|
114
|
+
| `npm run dev:once` | Build and run Electron once (no watching) |
|
|
94
115
|
| `npm run dev:web` | Web server with tsx watch |
|
|
95
116
|
| `npm run dev:server` | Server-only with tsx watch |
|
|
96
117
|
| `npm run build` | Compile TypeScript |
|
|
97
118
|
|
|
119
|
+
## Just Commands Reference
|
|
120
|
+
|
|
121
|
+
| Command | Description |
|
|
122
|
+
|---------|-------------|
|
|
123
|
+
| `just cyclist-electron` | Start Electron dev mode |
|
|
124
|
+
| `just cyclist-web` | Start web server mode |
|
|
125
|
+
| `just cyclist-build` | Build Cyclist TypeScript |
|
|
126
|
+
| `just cyclist-rebuild` | Rebuild native modules (node-pty) |
|
|
127
|
+
| `just cyclist-setup` | Full clean + install + rebuild + build |
|
|
128
|
+
| `just cyclist-build-and-install` | Build and install Cyclist.app |
|
|
129
|
+
| `just test-cyclist` | Run Cyclist tests |
|
|
130
|
+
|
|
98
131
|
## Requirements
|
|
99
132
|
|
|
100
|
-
- Project must have `.
|
|
101
|
-
- For Electron: Cyclist.app must be installed
|
|
133
|
+
- Project must have `.pennyfarthing/` directory with config (Pennyfarthing-enabled)
|
|
134
|
+
- For Electron: Cyclist.app must be installed, or run from source
|
|
102
135
|
- For web: Run from `packages/cyclist/` directory
|
|
103
136
|
|
|
104
137
|
## Troubleshooting
|
|
105
138
|
|
|
139
|
+
### Window not appearing (Electron)
|
|
140
|
+
|
|
141
|
+
The `package.json` has `"main": "dist/server.js"` for npm module use. The `dev` scripts explicitly run `electron dist/main.js` to use the correct entry point. If you run `electron .` directly, it will run the web server instead of the Electron main process.
|
|
142
|
+
|
|
143
|
+
**Fix:** Use `just cyclist-electron` or `npm run dev` which run `electron dist/main.js`.
|
|
144
|
+
|
|
106
145
|
### Server won't start
|
|
107
|
-
|
|
146
|
+
|
|
147
|
+
- Ensure you're in the cyclist package directory (or use `just` commands)
|
|
108
148
|
- Run `npm run build` first if dist/ is stale
|
|
109
149
|
- Check console for port conflict messages
|
|
110
150
|
|
|
111
151
|
### No portraits showing
|
|
152
|
+
|
|
112
153
|
- Verify `pennyfarthing-dist/personas/portraits/` exists
|
|
113
|
-
- Check theme in `.
|
|
154
|
+
- Check theme in `.pennyfarthing/config.local.yaml`
|
|
114
155
|
|
|
115
156
|
### "Not a Pennyfarthing project"
|
|
116
|
-
|
|
157
|
+
|
|
158
|
+
- Ensure project has `.pennyfarthing/` directory with `config.local.yaml` or agent symlinks
|
|
159
|
+
- Or has `.claude/` directory with persona-config.yaml (legacy)
|
|
117
160
|
- Run `pennyfarthing init` in the project first
|
|
161
|
+
- Or set `CYCLIST_PROJECT_DIR` to point to a valid project
|
|
162
|
+
|
|
163
|
+
### Native module issues (node-pty)
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Rebuild native modules for current Electron version
|
|
167
|
+
just cyclist-rebuild
|
|
168
|
+
|
|
169
|
+
# Or full setup from scratch
|
|
170
|
+
just cyclist-setup
|
|
171
|
+
```
|