@pennyfarthing/core 7.7.0 → 7.8.1
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/README.md +1 -1
- package/package.json +1 -1
- package/packages/core/dist/cli/commands/doctor.d.ts +3 -0
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +134 -9
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/pennyfarthing-dist/agents/sm-setup.md +37 -2
- package/pennyfarthing-dist/agents/sm.md +68 -22
- package/pennyfarthing-dist/agents/workflow-status-check.md +11 -1
- package/pennyfarthing-dist/commands/git-cleanup.md +43 -308
- package/pennyfarthing-dist/commands/solo.md +31 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +1 -1
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +83 -83
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +11 -11
- package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -2
- package/pennyfarthing-dist/scripts/core/check-context.sh +3 -0
- package/pennyfarthing-dist/scripts/core/handoff-marker.sh +13 -2
- package/pennyfarthing-dist/scripts/core/prime.sh +3 -157
- package/pennyfarthing-dist/scripts/core/run.sh +9 -0
- package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +117 -20
- package/pennyfarthing-dist/scripts/jira/README.md +10 -7
- package/pennyfarthing-dist/scripts/misc/add-short-names.sh +13 -0
- package/pennyfarthing-dist/scripts/misc/add_short_names.py +226 -0
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +6 -5
- package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +319 -0
- package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.sh +6 -5
- package/pennyfarthing-dist/scripts/sprint/import_epic_to_future.py +270 -0
- package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +59 -0
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +8 -6
- package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +402 -0
- package/pennyfarthing-dist/scripts/workflow/check.sh +3 -476
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +61 -0
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +13 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +57 -0
- package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +4 -22
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +83 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-02-categorize.md +116 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +210 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +88 -0
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +71 -0
- package/pennyfarthing-dist/workflows/git-cleanup.yaml +59 -0
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.mjs +0 -393
- package/pennyfarthing-dist/scripts/hooks/tests/question-reflector.test.mjs +0 -545
- package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +0 -327
- package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +0 -503
- package/pennyfarthing-dist/scripts/jira/jira-lib.mjs +0 -443
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.mjs +0 -208
- package/pennyfarthing-dist/scripts/jira/jira-sync.mjs +0 -198
- package/pennyfarthing-dist/scripts/misc/add-short-names.mjs +0 -264
- package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +0 -474
- package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.mjs +0 -377
- package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.js +0 -492
- /package/pennyfarthing-dist/guides/{AGENT-COORDINATION.md → agent-coordination.md} +0 -0
- /package/pennyfarthing-dist/guides/{HOOKS.md → hooks.md} +0 -0
- /package/pennyfarthing-dist/guides/{PROMPT-PATTERNS.md → prompt-patterns.md} +0 -0
- /package/pennyfarthing-dist/guides/{SESSION-ARTIFACTS.md → session-artifacts.md} +0 -0
- /package/pennyfarthing-dist/guides/{XML-TAGS.md → xml-tags.md} +0 -0
|
@@ -13,49 +13,49 @@ theme:
|
|
|
13
13
|
default_humor: high
|
|
14
14
|
character_immersion: high
|
|
15
15
|
user_title: Castaway
|
|
16
|
-
portrait_style: ",
|
|
16
|
+
portrait_style: ", 1960s TV sitcom portrait, black and white, stylized illustration, palm trees lagoon backdrop"
|
|
17
17
|
tier: D
|
|
18
18
|
pennyfarthing_version: "5.3.0"
|
|
19
19
|
created: 2026-01-06
|
|
20
20
|
|
|
21
21
|
agents:
|
|
22
22
|
orchestrator:
|
|
23
|
-
character:
|
|
24
|
-
shortName:
|
|
25
|
-
visual: "
|
|
23
|
+
character: Radio Announcer
|
|
24
|
+
shortName: Announcer
|
|
25
|
+
visual: "1960s radio broadcaster, headphones around neck, speaking into vintage microphone, studio setting"
|
|
26
26
|
ocean:
|
|
27
27
|
O: 5 # Receives signals from everywhere - maximum openness
|
|
28
28
|
C: 2 # Never quite works right - low follow-through
|
|
29
29
|
E: 4 # Always broadcasting, trying to connect
|
|
30
30
|
A: 3 # Tries to help everyone equally
|
|
31
31
|
N: 5 # Constant static anxiety about failed connections
|
|
32
|
-
style: The
|
|
33
|
-
expertise:
|
|
34
|
-
role: The
|
|
35
|
-
trait: Orchestrates
|
|
32
|
+
style: The voice from the mainland who broadcasts news the castaways can never respond to
|
|
33
|
+
expertise: Broadcasting information, coordinating from afar, delivering news nobody can act on
|
|
34
|
+
role: The distant voice who sees the big picture but can't directly help
|
|
35
|
+
trait: Orchestrates from the outside, always informing but never quite connecting
|
|
36
36
|
quirks:
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
37
|
+
- Broadcasts news that the castaways desperately need but can never respond to
|
|
38
|
+
- Always cheerful despite delivering reports about search parties giving up
|
|
39
|
+
- Has no idea anyone is listening on that uncharted desert isle
|
|
40
|
+
- Represents the tantalizingly close but unreachable outside world
|
|
41
|
+
- Sometimes broadcasts weather reports that directly affect the island
|
|
42
42
|
catchphrases:
|
|
43
|
-
- "
|
|
44
|
-
- "
|
|
45
|
-
- "
|
|
46
|
-
- "
|
|
47
|
-
- "
|
|
48
|
-
- "
|
|
49
|
-
quote: "
|
|
43
|
+
- "Good evening, this is your nightly news... and somewhere out there, someone's listening."
|
|
44
|
+
- "In other news, the search for the missing charter boat has been called off..."
|
|
45
|
+
- "Broadcasting live from the mainland... if only they could hear us back."
|
|
46
|
+
- "And now for the weather in the Pacific... scattered storms, perfect for castaways."
|
|
47
|
+
- "This has been your friendly neighborhood announcer, signing off... to anyone who's listening."
|
|
48
|
+
- "Stay tuned for more updates from civilization... we'll be here, even if you can't reach us."
|
|
49
|
+
quote: "Good evening, this is your nightly news... and somewhere out there, someone's listening."
|
|
50
50
|
emoji: "📻"
|
|
51
51
|
helper:
|
|
52
|
-
name: The
|
|
53
|
-
style: "
|
|
52
|
+
name: The Broadcast
|
|
53
|
+
style: "Delivering news from the mainland that the castaways can only receive"
|
|
54
54
|
|
|
55
55
|
sm:
|
|
56
56
|
character: The Skipper (Jonas Grumby)
|
|
57
57
|
shortName: Skipper
|
|
58
|
-
visual: "
|
|
58
|
+
visual: "Stocky sea captain, blue polo shirt, white captain's hat, exasperated expression, hands on hips"
|
|
59
59
|
ocean:
|
|
60
60
|
O: 2 # Traditional, by-the-book Navy man
|
|
61
61
|
C: 4 # Tries to run a tight ship despite chaos
|
|
@@ -88,7 +88,7 @@ agents:
|
|
|
88
88
|
tea:
|
|
89
89
|
character: Mary Ann Summers
|
|
90
90
|
shortName: Mary Ann
|
|
91
|
-
visual: "Wholesome
|
|
91
|
+
visual: "Wholesome young woman, gingham blouse, pigtails with ribbons, warm smile, holding fresh pie"
|
|
92
92
|
ocean:
|
|
93
93
|
O: 3 # Practical Kansas values, grounded
|
|
94
94
|
C: 5 # Thorough, reliable, tests everything
|
|
@@ -121,7 +121,7 @@ agents:
|
|
|
121
121
|
dev:
|
|
122
122
|
character: Gilligan
|
|
123
123
|
shortName: Gilligan
|
|
124
|
-
visual: "
|
|
124
|
+
visual: "Skinny young sailor, red rugby shirt, white bucket hat, goofy apologetic grin, clumsy stance"
|
|
125
125
|
ocean:
|
|
126
126
|
O: 4 # Creative in completely unexpected ways
|
|
127
127
|
C: 1 # Chaotic good - plans never survive contact
|
|
@@ -154,7 +154,7 @@ agents:
|
|
|
154
154
|
reviewer:
|
|
155
155
|
character: Thurston Howell III
|
|
156
156
|
shortName: Mr. Howell
|
|
157
|
-
visual: "
|
|
157
|
+
visual: "Elderly millionaire, ascot and navy blazer, monocle, snobbish disapproving expression, cocktail glass"
|
|
158
158
|
ocean:
|
|
159
159
|
O: 1 # Set in wealthy, old-money ways
|
|
160
160
|
C: 4 # Harvard standards must be maintained
|
|
@@ -187,7 +187,7 @@ agents:
|
|
|
187
187
|
architect:
|
|
188
188
|
character: The Professor (Roy Hinkley)
|
|
189
189
|
shortName: Professor
|
|
190
|
-
visual: "Scholarly man
|
|
190
|
+
visual: "Scholarly man, white dress shirt, round glasses, explaining gesture, coconut invention nearby"
|
|
191
191
|
ocean:
|
|
192
192
|
O: 5 # Can invent literally anything
|
|
193
193
|
C: 5 # Rigorous scientific method
|
|
@@ -220,7 +220,7 @@ agents:
|
|
|
220
220
|
pm:
|
|
221
221
|
character: Ginger Grant
|
|
222
222
|
shortName: Ginger
|
|
223
|
-
visual: "Glamorous
|
|
223
|
+
visual: "Glamorous redhead, sequined evening gown, dramatic pose, movie star confidence and allure"
|
|
224
224
|
ocean:
|
|
225
225
|
O: 4 # Creative and dramatic
|
|
226
226
|
C: 3 # Professional performer when it matters
|
|
@@ -253,7 +253,7 @@ agents:
|
|
|
253
253
|
tech-writer:
|
|
254
254
|
character: Eunice "Lovey" Howell
|
|
255
255
|
shortName: Lovey
|
|
256
|
-
visual: "Elegant
|
|
256
|
+
visual: "Elegant older socialite, pearl necklace, fancy hat with flowers, refined gentle smile, gloved hands"
|
|
257
257
|
ocean:
|
|
258
258
|
O: 3 # Cultured but conventional
|
|
259
259
|
C: 4 # Proper breeding demands thoroughness
|
|
@@ -284,70 +284,70 @@ agents:
|
|
|
284
284
|
style: "Documentation with proper breeding and refined sensibilities"
|
|
285
285
|
|
|
286
286
|
ux-designer:
|
|
287
|
-
character:
|
|
288
|
-
shortName:
|
|
289
|
-
visual: "
|
|
287
|
+
character: Mary Ann Summers
|
|
288
|
+
shortName: Mary Ann
|
|
289
|
+
visual: "Wholesome young woman, casual island clothes, welcoming smile, arranging bamboo furniture"
|
|
290
290
|
ocean:
|
|
291
|
-
O:
|
|
292
|
-
C: 5 #
|
|
293
|
-
E:
|
|
294
|
-
A: 5 #
|
|
295
|
-
N:
|
|
296
|
-
style: The
|
|
297
|
-
expertise:
|
|
298
|
-
role: The
|
|
299
|
-
trait: Designs experiences
|
|
291
|
+
O: 3 # Practical Kansas values, grounded
|
|
292
|
+
C: 5 # Makes everything work smoothly
|
|
293
|
+
E: 3 # Friendly but not flashy
|
|
294
|
+
A: 5 # Sweetest castaway, thinks of everyone
|
|
295
|
+
N: 2 # Grounded and stable, rarely flustered
|
|
296
|
+
style: The practical farm girl who makes island life actually livable for everyone
|
|
297
|
+
expertise: Making things work for real people, practical comfort, intuitive arrangements
|
|
298
|
+
role: The one who quietly ensures everyone can actually use what gets built
|
|
299
|
+
trait: Designs experiences with Kansas common sense that just works
|
|
300
300
|
quirks:
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
-
|
|
305
|
-
-
|
|
301
|
+
- Makes the huts comfortable while everyone else argues about rescue
|
|
302
|
+
- Arranges things so even Mr. Howell can find what he needs
|
|
303
|
+
- Tests everything by asking "would Aunt Martha understand this?"
|
|
304
|
+
- Creates systems that work for both the Professor and Gilligan
|
|
305
|
+
- Quietly fixes usability problems nobody else noticed
|
|
306
306
|
catchphrases:
|
|
307
|
-
- "
|
|
308
|
-
- "
|
|
309
|
-
- "
|
|
310
|
-
- "The
|
|
311
|
-
- "
|
|
312
|
-
- "
|
|
313
|
-
quote: "
|
|
314
|
-
emoji: "
|
|
307
|
+
- "Back home, we'd make sure everyone could use the barn door, not just the farmhands."
|
|
308
|
+
- "If Gilligan can figure it out, anyone can. Let me simplify this."
|
|
309
|
+
- "A good pie is one everyone enjoys, not just the fancy folks."
|
|
310
|
+
- "The Professor's inventions are clever, but can the Skipper actually operate them?"
|
|
311
|
+
- "Simple doesn't mean dumb - it means it works for real people."
|
|
312
|
+
- "Aunt Martha always said: if you have to explain it twice, redesign it."
|
|
313
|
+
quote: "If Gilligan can figure it out, anyone can. Let me simplify this."
|
|
314
|
+
emoji: "🥧"
|
|
315
315
|
helper:
|
|
316
|
-
name:
|
|
317
|
-
style: "
|
|
316
|
+
name: Common Sense
|
|
317
|
+
style: "Kansas practicality that makes complex things usable"
|
|
318
318
|
|
|
319
319
|
devops:
|
|
320
|
-
character: The
|
|
321
|
-
shortName:
|
|
322
|
-
visual: "
|
|
320
|
+
character: The Skipper (Jonas Grumby)
|
|
321
|
+
shortName: Skipper
|
|
322
|
+
visual: "Stocky sea captain, working on boat repairs, tools in hand, determined expression, sweating"
|
|
323
323
|
ocean:
|
|
324
|
-
O: 2 #
|
|
325
|
-
C:
|
|
326
|
-
E:
|
|
327
|
-
A: 4 #
|
|
328
|
-
N: 4 #
|
|
329
|
-
style: The
|
|
330
|
-
expertise:
|
|
331
|
-
role: The
|
|
332
|
-
trait: Maintains infrastructure
|
|
324
|
+
O: 2 # Traditional Navy man, by the book
|
|
325
|
+
C: 4 # Keeps the Minnow and island infrastructure running
|
|
326
|
+
E: 5 # Booming voice, always in charge of operations
|
|
327
|
+
A: 4 # Takes care of his passengers and crew
|
|
328
|
+
N: 4 # The weight of responsibility, plus Gilligan
|
|
329
|
+
style: The captain who keeps the ship and island infrastructure running through sheer will
|
|
330
|
+
expertise: Maritime maintenance, improvised repairs, keeping systems afloat against all odds
|
|
331
|
+
role: The one responsible for keeping everything operational so rescue remains possible
|
|
332
|
+
trait: Maintains infrastructure with Navy discipline and coconut-rope ingenuity
|
|
333
333
|
quirks:
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
-
|
|
337
|
-
-
|
|
338
|
-
-
|
|
334
|
+
- Personally responsible for the Minnow and all island systems
|
|
335
|
+
- Does maintenance work himself rather than delegating to Gilligan (learned that lesson)
|
|
336
|
+
- Treats infrastructure failures as personal failures of his command
|
|
337
|
+
- Has salvaged the Minnow for parts more times than he can count
|
|
338
|
+
- Navy training kicks in when systems go critical
|
|
339
339
|
catchphrases:
|
|
340
|
-
- "A three-hour tour
|
|
341
|
-
- "
|
|
342
|
-
- "
|
|
343
|
-
- "
|
|
344
|
-
- "
|
|
345
|
-
-
|
|
346
|
-
quote: "
|
|
347
|
-
emoji: "
|
|
340
|
+
- "A three-hour tour turned into a three-year maintenance contract... but the Skipper delivers!"
|
|
341
|
+
- "The Minnow may be beached, but her systems still run. That's MY job."
|
|
342
|
+
- "In the Navy, we kept ships afloat with less. Hand me that coconut wrench."
|
|
343
|
+
- "Gilligan, DON'T touch the infrastructure! I'll handle the deployment."
|
|
344
|
+
- "She's held together with rope and prayer, but she'll hold. The Skipper guarantees it."
|
|
345
|
+
- "When the weather started getting rough... we adapted. That's what sailors do."
|
|
346
|
+
quote: "The Minnow may be beached, but her systems still run. That's MY job."
|
|
347
|
+
emoji: "⚓"
|
|
348
348
|
helper:
|
|
349
|
-
name:
|
|
350
|
-
style: "
|
|
349
|
+
name: The Minnow
|
|
350
|
+
style: "Battered but functional infrastructure that somehow keeps running"
|
|
351
351
|
|
|
352
352
|
additional_characters:
|
|
353
353
|
wrongway_feldman:
|
|
@@ -13,13 +13,13 @@ theme:
|
|
|
13
13
|
default_humor: enabled
|
|
14
14
|
character_immersion: high
|
|
15
15
|
user_title: Bossmang
|
|
16
|
-
portrait_style: ",
|
|
16
|
+
portrait_style: ", russian constructivist style, bold geometric shapes, red and black color palette, propaganda poster aesthetic, angular compositions, industrial typography influence"
|
|
17
17
|
tier: S
|
|
18
18
|
|
|
19
19
|
agents:
|
|
20
20
|
orchestrator:
|
|
21
21
|
character: The Investigator
|
|
22
|
-
visual: "A gaunt man with hollow cheeks and
|
|
22
|
+
visual: "A gaunt man with hollow cheeks and detective fedora, trench coat silhouette, glowing blue eyes rendered as geometric shapes, stark angular shadows"
|
|
23
23
|
ocean:
|
|
24
24
|
O: 5
|
|
25
25
|
C: 3
|
|
@@ -51,7 +51,7 @@ agents:
|
|
|
51
51
|
shortName: Investigator
|
|
52
52
|
sm:
|
|
53
53
|
character: Camina Drummer
|
|
54
|
-
visual: "A fierce
|
|
54
|
+
visual: "A fierce woman with bold mohawk silhouette, geometric tattoo patterns, captain's jacket rendered in angular blocks, commanding diagonal composition"
|
|
55
55
|
# JOB FAIR OPTIMIZED: Drummer excels at sm coordination
|
|
56
56
|
ocean:
|
|
57
57
|
O: 3 # Belter culture
|
|
@@ -84,7 +84,7 @@ agents:
|
|
|
84
84
|
|
|
85
85
|
tea:
|
|
86
86
|
character: Amos Burton
|
|
87
|
-
visual: "A stocky muscular
|
|
87
|
+
visual: "A stocky muscular figure with shaved head, dead eyes as stark circles, mechanic's jumpsuit in bold flat shapes, industrial worker aesthetic"
|
|
88
88
|
# JOB FAIR OPTIMIZED: Amos excels at testing/breaking things
|
|
89
89
|
ocean:
|
|
90
90
|
O: 2 # Practical focus
|
|
@@ -117,7 +117,7 @@ agents:
|
|
|
117
117
|
|
|
118
118
|
dev:
|
|
119
119
|
character: Naomi Nagata
|
|
120
|
-
visual: "A tall
|
|
120
|
+
visual: "A tall woman with flowing curly hair as dynamic curves, angular features emphasized, engineer holding geometric tablet, diagonal thrust composition"
|
|
121
121
|
# JOB FAIR OPTIMIZED: Naomi excels at implementation
|
|
122
122
|
ocean:
|
|
123
123
|
O: 5 # Engineering genius
|
|
@@ -150,7 +150,7 @@ agents:
|
|
|
150
150
|
|
|
151
151
|
reviewer:
|
|
152
152
|
character: Chrisjen Avasarala
|
|
153
|
-
visual: "An elderly Indian woman with silver hair
|
|
153
|
+
visual: "An elderly Indian woman with silver hair as bold swoops, sari rendered in dramatic angular folds, geometric jewelry shapes, piercing gaze with sharp triangular shadows"
|
|
154
154
|
ocean:
|
|
155
155
|
O: 4
|
|
156
156
|
C: 5
|
|
@@ -182,7 +182,7 @@ agents:
|
|
|
182
182
|
shortName: Avasarala
|
|
183
183
|
architect:
|
|
184
184
|
character: Naomi Nagata (design mode)
|
|
185
|
-
visual: "A tall
|
|
185
|
+
visual: "A tall woman with flowing curly hair, standing at geometric holographic display, clean engineering uniform in flat shapes, contemplative expression with angular highlights"
|
|
186
186
|
ocean:
|
|
187
187
|
O: 5
|
|
188
188
|
C: 5
|
|
@@ -214,7 +214,7 @@ agents:
|
|
|
214
214
|
shortName: Naomi
|
|
215
215
|
pm:
|
|
216
216
|
character: Chrisjen Avasarala (planning mode)
|
|
217
|
-
visual: "An elderly Indian woman with silver hair
|
|
217
|
+
visual: "An elderly Indian woman with silver hair as bold swoops, formal diplomatic attire in angular blocks, geometric earrings, calculating strategic expression with stark shadows"
|
|
218
218
|
ocean:
|
|
219
219
|
O: 4
|
|
220
220
|
C: 5
|
|
@@ -246,7 +246,7 @@ agents:
|
|
|
246
246
|
shortName: Avasarala
|
|
247
247
|
tech-writer:
|
|
248
248
|
character: James Holden
|
|
249
|
-
visual: "A rugged man
|
|
249
|
+
visual: "A rugged man with wavy hair rendered as bold strokes, gray jumpsuit in flat geometric planes, coffee cup as iconic shape, idealistic upward gaze"
|
|
250
250
|
# JOB FAIR OPTIMIZED: Holden excels at documentation/broadcasting
|
|
251
251
|
ocean:
|
|
252
252
|
O: 4 # Idealistic vision
|
|
@@ -279,7 +279,7 @@ agents:
|
|
|
279
279
|
|
|
280
280
|
ux-designer:
|
|
281
281
|
character: Alex Kamal
|
|
282
|
-
visual: "A friendly man with
|
|
282
|
+
visual: "A friendly man with bold mustache silhouette, pilot suit with geometric military patches, warm expression through simplified shapes, circular helmet frame"
|
|
283
283
|
ocean:
|
|
284
284
|
O: 4
|
|
285
285
|
C: 3
|
|
@@ -311,7 +311,7 @@ agents:
|
|
|
311
311
|
shortName: Alex
|
|
312
312
|
devops:
|
|
313
313
|
character: Amos Burton (systems mode)
|
|
314
|
-
visual: "A stocky muscular
|
|
314
|
+
visual: "A stocky muscular figure with shaved head, maintenance jumpsuit in bold flat shapes, geometric tool belt, stoic expression with industrial worker aesthetic"
|
|
315
315
|
ocean:
|
|
316
316
|
O: 2
|
|
317
317
|
C: 4
|
|
@@ -219,8 +219,8 @@ case "$1" in
|
|
|
219
219
|
# 5. Sidecars (loaded by prime.sh LAST)
|
|
220
220
|
|
|
221
221
|
# Auto-prime loads agent definition FIRST (highest attention zone)
|
|
222
|
-
if [[ -f "$PROJECT_ROOT/.pennyfarthing/scripts/prime.sh" ]]; then
|
|
223
|
-
"$PROJECT_ROOT/.pennyfarthing/scripts/prime.sh" --quiet --agent "$2"
|
|
222
|
+
if [[ -f "$PROJECT_ROOT/.pennyfarthing/scripts/core/prime.sh" ]]; then
|
|
223
|
+
"$PROJECT_ROOT/.pennyfarthing/scripts/core/prime.sh" --quiet --agent "$2"
|
|
224
224
|
fi
|
|
225
225
|
|
|
226
226
|
# Output persona AFTER agent definition (character voice is supplementary)
|
|
@@ -207,6 +207,9 @@ if last_total is not None:
|
|
|
207
207
|
else:
|
|
208
208
|
print('CONTEXT_STATUS=OK')
|
|
209
209
|
|
|
210
|
+
# RELAY_MODE: Output for handoff-marker.sh to use
|
|
211
|
+
print(f'RELAY_MODE={str(relay_mode).lower()}')
|
|
212
|
+
|
|
210
213
|
# HANDOFF_MODE: 'auto' if relay_mode enabled, 'ask' otherwise
|
|
211
214
|
# MSSCI-12395: relay_mode controls autohandoff independent of context level
|
|
212
215
|
if relay_mode:
|
|
@@ -48,6 +48,7 @@ eval "$("$SCRIPT_DIR/check-context.sh" 2>/dev/null)" || true
|
|
|
48
48
|
# Default values if check-context.sh failed
|
|
49
49
|
IS_CYCLIST="${IS_CYCLIST:-false}"
|
|
50
50
|
USE_TIREPUMP="${USE_TIREPUMP:-false}"
|
|
51
|
+
RELAY_MODE="${RELAY_MODE:-false}"
|
|
51
52
|
|
|
52
53
|
# Generate marker based on environment
|
|
53
54
|
if [[ "$IS_ERROR" == "true" ]]; then
|
|
@@ -69,8 +70,18 @@ AGENT_COMMAND:
|
|
|
69
70
|
fallback: "Run \`/${NEXT_AGENT}\` to continue"
|
|
70
71
|
---
|
|
71
72
|
EOF
|
|
73
|
+
elif [[ "$RELAY_MODE" != "true" ]]; then
|
|
74
|
+
# Cyclist + Relay OFF - emit question marker for manual handoff confirmation
|
|
75
|
+
cat <<EOF
|
|
76
|
+
---
|
|
77
|
+
AGENT_COMMAND:
|
|
78
|
+
marker: "<!-- CYCLIST:QUESTION:yesno -->"
|
|
79
|
+
question: "Ready to hand off to /${NEXT_AGENT}?"
|
|
80
|
+
fallback: "Run \`/${NEXT_AGENT}\` to continue"
|
|
81
|
+
---
|
|
82
|
+
EOF
|
|
72
83
|
elif [[ "$USE_TIREPUMP" == "true" ]]; then
|
|
73
|
-
# Cyclist +
|
|
84
|
+
# Cyclist + Relay ON + high context - context clear marker
|
|
74
85
|
cat <<EOF
|
|
75
86
|
---
|
|
76
87
|
AGENT_COMMAND:
|
|
@@ -79,7 +90,7 @@ AGENT_COMMAND:
|
|
|
79
90
|
---
|
|
80
91
|
EOF
|
|
81
92
|
else
|
|
82
|
-
# Cyclist
|
|
93
|
+
# Cyclist + Relay ON + low context - handoff marker
|
|
83
94
|
cat <<EOF
|
|
84
95
|
---
|
|
85
96
|
AGENT_COMMAND:
|
|
@@ -1,161 +1,7 @@
|
|
|
1
|
-
#!/usr/bin/env
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
2
|
# prime.sh - Load essential project context at agent activation
|
|
3
3
|
# Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
# 1. CLAUDE.md (already in system prompt - skipped)
|
|
7
|
-
# 2. Agent definition + behavior guide (HIGHEST PRIORITY - load first!)
|
|
8
|
-
# 3. Persona (already output by agent-session.sh before this runs)
|
|
9
|
-
# 4. Session summary (active work context)
|
|
10
|
-
# 5. Sidecars (patterns, gotchas, decisions - lowest priority)
|
|
11
|
-
# 6. Domain docs (--full only)
|
|
5
|
+
# Thin wrapper around python -m pennyfarthing_scripts.prime
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Load shared functions
|
|
16
|
-
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
17
|
-
source "$SCRIPT_DIR/../sprint/sprint-common.sh"
|
|
18
|
-
|
|
19
|
-
# Defaults
|
|
20
|
-
QUIET=false
|
|
21
|
-
MINIMAL=false
|
|
22
|
-
FULL=false
|
|
23
|
-
AGENT_NAME=""
|
|
24
|
-
|
|
25
|
-
# Parse arguments
|
|
26
|
-
while [[ $# -gt 0 ]]; do
|
|
27
|
-
case $1 in
|
|
28
|
-
--quiet) QUIET=true; shift ;;
|
|
29
|
-
--minimal) MINIMAL=true; shift ;;
|
|
30
|
-
--full) FULL=true; shift ;;
|
|
31
|
-
--agent) AGENT_NAME="$2"; shift 2 ;;
|
|
32
|
-
-h|--help)
|
|
33
|
-
echo "Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]"
|
|
34
|
-
echo " --minimal Skip all context (fastest)"
|
|
35
|
-
echo " --full Include domain docs from .claude/project/"
|
|
36
|
-
echo " --quiet Suppress section headers"
|
|
37
|
-
echo " --agent <name> Load agent definition and sidecar"
|
|
38
|
-
exit 0
|
|
39
|
-
;;
|
|
40
|
-
*) shift ;;
|
|
41
|
-
esac
|
|
42
|
-
done
|
|
43
|
-
|
|
44
|
-
# Helper to print headers (respects --quiet)
|
|
45
|
-
print_header() {
|
|
46
|
-
if [[ "$QUIET" != "true" ]]; then
|
|
47
|
-
echo ""
|
|
48
|
-
echo "# $1"
|
|
49
|
-
fi
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
# Stop here for minimal mode
|
|
53
|
-
if [[ "$MINIMAL" == "true" ]]; then
|
|
54
|
-
exit 0
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
# =============================================================================
|
|
58
|
-
# PRIORITY 1: Agent definition (HIGHEST ATTENTION ZONE)
|
|
59
|
-
# =============================================================================
|
|
60
|
-
# This is the most critical content - load it FIRST while attention is highest
|
|
61
|
-
|
|
62
|
-
if [[ -n "$AGENT_NAME" ]]; then
|
|
63
|
-
AGENT_FILE="$PROJECT_ROOT/.pennyfarthing/agents/${AGENT_NAME}.md"
|
|
64
|
-
if [[ -f "$AGENT_FILE" ]]; then
|
|
65
|
-
print_header "Agent Definition: ${AGENT_NAME}"
|
|
66
|
-
cat "$AGENT_FILE"
|
|
67
|
-
fi
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
|
-
# =============================================================================
|
|
71
|
-
# PRIORITY 2: Agent behavior guide (shared protocols)
|
|
72
|
-
# =============================================================================
|
|
73
|
-
|
|
74
|
-
if [[ -n "$AGENT_NAME" ]]; then
|
|
75
|
-
BEHAVIOR_GUIDE="$PROJECT_ROOT/.pennyfarthing/guides/agent-behavior.md"
|
|
76
|
-
if [[ -f "$BEHAVIOR_GUIDE" ]]; then
|
|
77
|
-
print_header "Agent Behavior Guide"
|
|
78
|
-
cat "$BEHAVIOR_GUIDE"
|
|
79
|
-
fi
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
# =============================================================================
|
|
83
|
-
# PRIORITY 3: Persona already loaded by agent-session.sh (before prime.sh runs)
|
|
84
|
-
# =============================================================================
|
|
85
|
-
# Nothing to do here - persona is output by agent-session.sh start
|
|
86
|
-
|
|
87
|
-
# =============================================================================
|
|
88
|
-
# PRIORITY 4: Session summary (active work context)
|
|
89
|
-
# =============================================================================
|
|
90
|
-
|
|
91
|
-
# Sprint summary (brief - just name and progress)
|
|
92
|
-
if [[ -f "$(get_sprint_file)" ]]; then
|
|
93
|
-
print_header "Sprint Context"
|
|
94
|
-
summary=$(get_sprint_summary)
|
|
95
|
-
if [[ -n "$summary" ]]; then
|
|
96
|
-
echo "$summary"
|
|
97
|
-
fi
|
|
98
|
-
progress=$(get_sprint_progress)
|
|
99
|
-
if [[ -n "$progress" ]]; then
|
|
100
|
-
echo "$progress"
|
|
101
|
-
fi
|
|
102
|
-
fi
|
|
103
|
-
|
|
104
|
-
# Active session (if exists) - extract header metadata + current assessment
|
|
105
|
-
SESSION_FILE=""
|
|
106
|
-
if [[ -d "$PROJECT_ROOT/.session" ]]; then
|
|
107
|
-
SESSION_FILE=$(find "$PROJECT_ROOT/.session" -maxdepth 1 -name "*-session.md" -type f 2>/dev/null | head -1)
|
|
108
|
-
fi
|
|
109
|
-
|
|
110
|
-
if [[ -n "$SESSION_FILE" && -f "$SESSION_FILE" ]]; then
|
|
111
|
-
print_header "Active Session: $(basename "$SESSION_FILE")"
|
|
112
|
-
|
|
113
|
-
# Extract header (everything before first ## heading)
|
|
114
|
-
awk '/^## / {exit} {print}' "$SESSION_FILE"
|
|
115
|
-
|
|
116
|
-
# Find the most recent assessment section
|
|
117
|
-
last_assessment=$(grep -n '^## .*Assessment' "$SESSION_FILE" | tail -1 | cut -d: -f1)
|
|
118
|
-
|
|
119
|
-
if [[ -n "$last_assessment" ]]; then
|
|
120
|
-
echo ""
|
|
121
|
-
echo "---"
|
|
122
|
-
awk -v start="$last_assessment" '
|
|
123
|
-
NR >= start {
|
|
124
|
-
if (NR > start && /^## /) exit
|
|
125
|
-
print
|
|
126
|
-
}
|
|
127
|
-
' "$SESSION_FILE"
|
|
128
|
-
fi
|
|
129
|
-
fi
|
|
130
|
-
|
|
131
|
-
# =============================================================================
|
|
132
|
-
# PRIORITY 5: Sidecars (patterns, gotchas, decisions - LOWEST PRIORITY)
|
|
133
|
-
# =============================================================================
|
|
134
|
-
# These are supplementary - loaded last when attention is lower
|
|
135
|
-
|
|
136
|
-
if [[ -n "$AGENT_NAME" ]]; then
|
|
137
|
-
SIDECAR_DIR="$PROJECT_ROOT/.pennyfarthing/sidecars/${AGENT_NAME}"
|
|
138
|
-
if [[ -d "$SIDECAR_DIR" ]]; then
|
|
139
|
-
# Load in specific order: patterns first (most useful), then gotchas, then decisions
|
|
140
|
-
for filename in patterns.md gotchas.md decisions.md; do
|
|
141
|
-
pattern_file="$SIDECAR_DIR/$filename"
|
|
142
|
-
if [[ -f "$pattern_file" ]]; then
|
|
143
|
-
print_header "Agent Sidecar: $filename"
|
|
144
|
-
cat "$pattern_file"
|
|
145
|
-
fi
|
|
146
|
-
done
|
|
147
|
-
fi
|
|
148
|
-
fi
|
|
149
|
-
|
|
150
|
-
# =============================================================================
|
|
151
|
-
# PRIORITY 6: Domain docs (--full only, rarely used)
|
|
152
|
-
# =============================================================================
|
|
153
|
-
|
|
154
|
-
if [[ "$FULL" == "true" ]]; then
|
|
155
|
-
for doc in "$PROJECT_ROOT/.claude/project"/CLAUDE-*.md; do
|
|
156
|
-
if [[ -f "$doc" ]]; then
|
|
157
|
-
print_header "$(basename "$doc")"
|
|
158
|
-
cat "$doc"
|
|
159
|
-
fi
|
|
160
|
-
done
|
|
161
|
-
fi
|
|
7
|
+
exec python3 -m pennyfarthing_scripts.prime "$@"
|
|
@@ -64,6 +64,15 @@ fi
|
|
|
64
64
|
# Full path required - script must include category
|
|
65
65
|
SCRIPT_PATH="$SCRIPTS_DIR/$SCRIPT_NAME"
|
|
66
66
|
|
|
67
|
+
# Python-first dispatch: prefer .py over .sh when available
|
|
68
|
+
# This enables transparent migration of shell scripts to Python
|
|
69
|
+
SCRIPT_BASE="${SCRIPT_NAME%.sh}"
|
|
70
|
+
PYTHON_PATH="$SCRIPTS_DIR/${SCRIPT_BASE}.py"
|
|
71
|
+
|
|
72
|
+
if [[ -f "$PYTHON_PATH" ]] && command -v python3 &>/dev/null; then
|
|
73
|
+
exec python3 "$PYTHON_PATH" "$@"
|
|
74
|
+
fi
|
|
75
|
+
|
|
67
76
|
if [[ -f "$SCRIPT_PATH" ]]; then
|
|
68
77
|
exec "$SCRIPT_PATH" "$@"
|
|
69
78
|
else
|