@pennyfarthing/core 11.2.1 → 11.2.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.
Files changed (467) hide show
  1. package/README.md +100 -40
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/packages/core/dist/cli/commands/doctor.js +121 -28
  5. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  6. package/packages/core/dist/cli/utils/settings.d.ts +0 -4
  7. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  8. package/packages/core/dist/cli/utils/settings.js +31 -26
  9. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  10. package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
  11. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
  12. package/packages/core/dist/consultation/dialogue-manager.js +1 -1
  13. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
  14. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
  15. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -1
  16. package/packages/core/dist/public/css/react.css +1 -1
  17. package/packages/core/dist/public/js/react/react.js +9 -9
  18. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  19. package/packages/core/dist/server/api/git.js +0 -1
  20. package/packages/core/dist/server/api/git.js.map +1 -1
  21. package/packages/core/dist/server/api/index.d.ts +2 -0
  22. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  23. package/packages/core/dist/server/api/index.js +2 -0
  24. package/packages/core/dist/server/api/index.js.map +1 -1
  25. package/packages/core/dist/server/api/project-info.d.ts +11 -0
  26. package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
  27. package/packages/core/dist/server/api/project-info.js +18 -0
  28. package/packages/core/dist/server/api/project-info.js.map +1 -0
  29. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  30. package/packages/core/dist/server/otlp-receiver.js +18 -1
  31. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  32. package/packages/core/dist/server/otlp-receiver.test.js +1 -1
  33. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  34. package/packages/core/dist/server/server.d.ts.map +1 -1
  35. package/packages/core/dist/server/server.js +3 -2
  36. package/packages/core/dist/server/server.js.map +1 -1
  37. package/packages/core/dist/server/server.test.d.ts +1 -1
  38. package/packages/core/dist/server/server.test.js +8 -8
  39. package/packages/core/dist/server/settings.d.ts +1 -0
  40. package/packages/core/dist/server/settings.d.ts.map +1 -1
  41. package/packages/core/dist/server/settings.js +13 -0
  42. package/packages/core/dist/server/settings.js.map +1 -1
  43. package/packages/core/dist/workflow/team-lifecycle.d.ts +169 -0
  44. package/packages/core/dist/workflow/team-lifecycle.d.ts.map +1 -0
  45. package/packages/core/dist/workflow/team-lifecycle.js +217 -0
  46. package/packages/core/dist/workflow/team-lifecycle.js.map +1 -0
  47. package/packages/core/dist/workflow/team-lifecycle.test.d.ts +20 -0
  48. package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +1 -0
  49. package/packages/core/dist/workflow/team-lifecycle.test.js +966 -0
  50. package/packages/core/dist/workflow/team-lifecycle.test.js.map +1 -0
  51. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
  52. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
  53. package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
  54. package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
  55. package/pennyfarthing-dist/agents/dev.md +15 -2
  56. package/pennyfarthing-dist/agents/reviewer.md +17 -4
  57. package/pennyfarthing-dist/agents/sm-finish.md +1 -1
  58. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  59. package/pennyfarthing-dist/agents/sm.md +12 -12
  60. package/pennyfarthing-dist/agents/tea.md +2 -2
  61. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  62. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  63. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  64. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  65. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  66. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  67. package/pennyfarthing-dist/commands/pf-epic.md +6 -6
  68. package/pennyfarthing-dist/commands/pf-git.md +10 -10
  69. package/pennyfarthing-dist/commands/pf-health-check.md +1 -1
  70. package/pennyfarthing-dist/commands/pf-help.md +12 -12
  71. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  72. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  73. package/pennyfarthing-dist/commands/pf-prime.md +8 -8
  74. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  75. package/pennyfarthing-dist/commands/pf-session.md +7 -7
  76. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  77. package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
  78. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  79. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  80. package/pennyfarthing-dist/commands/pf-theme.md +9 -9
  81. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  82. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  83. package/pennyfarthing-dist/guides/agent-behavior.md +70 -19
  84. package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
  85. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  86. package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
  87. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  88. package/pennyfarthing-dist/guides/bikerack.md +10 -10
  89. package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
  90. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
  91. package/pennyfarthing-dist/guides/gate-schema.md +2 -2
  92. package/pennyfarthing-dist/guides/gates.md +3 -3
  93. package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
  94. package/pennyfarthing-dist/guides/hooks.md +27 -27
  95. package/pennyfarthing-dist/guides/prime.md +2 -2
  96. package/pennyfarthing-dist/guides/reflector.md +1 -1
  97. package/pennyfarthing-dist/guides/skill-schema.md +6 -6
  98. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  99. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  100. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  101. package/pennyfarthing-dist/guides/xml-tags.md +8 -8
  102. package/pennyfarthing-dist/scripts/README.md +4 -4
  103. package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
  104. package/pennyfarthing-dist/scripts/core/check-context.sh +1 -1
  105. package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
  106. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +2 -5
  107. package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
  108. package/pennyfarthing-dist/scripts/git/README.md +14 -14
  109. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
  110. package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
  111. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
  112. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
  113. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  114. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +3 -3
  115. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -3
  116. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +3 -3
  117. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -3
  118. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
  119. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +2 -1
  120. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +3 -3
  121. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -3
  122. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +3 -3
  123. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -3
  124. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +3 -3
  125. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +3 -3
  126. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -4
  127. package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
  128. package/pennyfarthing-dist/scripts/lib/run-pf.sh +39 -0
  129. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  130. package/pennyfarthing-dist/scripts/misc/statusline.sh +3 -3
  131. package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
  132. package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
  133. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
  134. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
  135. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
  136. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
  137. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
  138. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
  139. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
  140. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
  141. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
  142. package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
  143. package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
  144. package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
  145. package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
  146. package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
  147. package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
  148. package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
  149. package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
  150. package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
  151. package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
  152. package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
  153. package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
  154. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
  155. package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
  156. package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
  157. package/pennyfarthing-dist/skills/skill-registry.yaml +19 -19
  158. package/pennyfarthing-dist/templates/settings.local.json.template +11 -11
  159. package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
  160. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
  161. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  162. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  163. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  164. package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
  165. package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
  166. package/pennyfarthing_scripts/__init__.py +1 -1
  167. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  187. package/pennyfarthing_scripts/bc/cli.py +2 -2
  188. package/pennyfarthing_scripts/bellmode_hook.py +2 -5
  189. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/bikerack/__pycache__/portrait.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +48 -6
  211. package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
  212. package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
  213. package/pennyfarthing_scripts/bikerack/sprint_panel.py +1 -1
  214. package/pennyfarthing_scripts/bikerack/story_detail_data.py +4 -1
  215. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +2 -1
  216. package/pennyfarthing_scripts/bikerack/tui.py +12 -2
  217. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  218. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  224. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/common/config.py +29 -2
  233. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  234. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  235. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  236. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  237. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  238. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/consultation/cli.py +3 -3
  242. package/pennyfarthing_scripts/context.py +3 -3
  243. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  260. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  261. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  262. package/pennyfarthing_scripts/git/__pycache__/hooks_installer.cpython-314.pyc +0 -0
  263. package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
  264. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  265. package/pennyfarthing_scripts/git/__pycache__/worktree.cpython-314.pyc +0 -0
  266. package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
  267. package/pennyfarthing_scripts/git/status_all.py +1 -1
  268. package/pennyfarthing_scripts/git/worktree.py +2 -2
  269. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  270. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  272. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  274. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  277. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  283. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  285. package/pennyfarthing_scripts/hooks/__init__.py +8 -3
  286. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  292. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  293. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  294. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  295. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  296. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  297. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  298. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  299. package/pennyfarthing_scripts/hooks/bell_mode.py +0 -1
  300. package/pennyfarthing_scripts/hooks/pre_edit_check.py +0 -1
  301. package/pennyfarthing_scripts/hooks/reflector_check.py +1 -2
  302. package/pennyfarthing_scripts/hooks/schema_validation.py +0 -1
  303. package/pennyfarthing_scripts/hooks/session_start.py +6 -8
  304. package/pennyfarthing_scripts/hooks/statusline.py +10 -1
  305. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  307. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  311. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  313. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  315. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  316. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  317. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  318. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  319. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  320. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  321. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  322. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  323. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  324. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  326. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  327. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  328. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  329. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  330. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  331. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  332. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  334. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  335. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  336. package/pennyfarthing_scripts/prime/__pycache__/heatmap.cpython-314.pyc +0 -0
  337. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  338. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  339. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  340. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  341. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  342. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  343. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  344. package/pennyfarthing_scripts/prime/heatmap.py +3 -15
  345. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
  346. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-314.pyc +0 -0
  347. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  348. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  349. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  350. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  351. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  352. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  353. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  354. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  355. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  358. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  359. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  360. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  361. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  362. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  363. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  364. package/pennyfarthing_scripts/sprint/cli.py +121 -0
  365. package/pennyfarthing_scripts/sprint/loader.py +154 -3
  366. package/pennyfarthing_scripts/sprint/story_update.py +7 -0
  367. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  368. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  369. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  370. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  372. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  374. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  375. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  376. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  377. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  378. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  379. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  380. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  381. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  382. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  383. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  384. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  385. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  386. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  387. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  388. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  389. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  390. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  391. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  392. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  393. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  394. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  395. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  396. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  397. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  398. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  399. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  400. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  401. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  402. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  403. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  404. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  405. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  406. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  407. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  408. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  409. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  410. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  411. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  412. package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
  413. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
  414. package/pennyfarthing_scripts/tests/test_workflow_list_team.py +147 -0
  415. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  416. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  417. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  418. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  419. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  420. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  421. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  422. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  423. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  424. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  425. package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  426. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  427. package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
  428. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  429. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  430. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  431. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  432. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  433. package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  434. package/pennyfarthing_scripts/workflow/cli.py +15 -14
  435. package/pennyfarthing_scripts/workflow/state.py +0 -1
  436. package/pennyfarthing_scripts/workflow/team_lifecycle.py +3 -4
  437. package/packages/core/dist/cli/cyclist-migration.test.d.ts +0 -16
  438. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  439. package/packages/core/dist/cli/cyclist-migration.test.js +0 -229
  440. package/packages/core/dist/cli/cyclist-migration.test.js.map +0 -1
  441. package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
  442. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
  443. package/packages/core/dist/scripts/benchmark-integration.js +0 -691
  444. package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
  445. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
  446. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  447. package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
  448. package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
  449. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +0 -1
  450. package/packages/core/dist/scripts/theme-detail.test.js.map +0 -1
  451. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  452. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  453. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  454. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  455. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  456. package/pennyfarthing_scripts/consultation/__pycache__/dialogue_manager.cpython-314.pyc +0 -0
  457. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  458. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  459. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  460. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  461. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  462. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  463. package/pennyfarthing_scripts/tests/__pycache__/test_108_1_gate_migration.cpython-314-pytest-9.0.2.pyc +0 -0
  464. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
  465. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
  466. package/pennyfarthing_scripts/tests/__pycache__/test_dialogue_manager.cpython-314-pytest-9.0.2.pyc +0 -0
  467. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
@@ -3,23 +3,28 @@
3
3
 
4
4
  **Tests:** Use `testing-runner` subagent, never run directly.
5
5
 
6
- **Handoff:** Run `pf handoff resolve-gate` → gate check → `pf handoff complete-phase` → `pf handoff marker` → EXIT. See `<agent-exit-protocol>`.
6
+ **Handoff:** Run pf.sh `handoff resolve-gate` → gate check → pf.sh `handoff complete-phase` → pf.sh `handoff marker` → EXIT. See `<agent-exit-protocol>`.
7
7
 
8
8
  **Sidecars:** Write learnings BEFORE starting exit protocol.
9
9
 
10
10
  **Scripts:** Pennyfarthing scripts are Python-based (`pennyfarthing_scripts/`), not shell—check before assuming `.sh`.
11
+
12
+ **pf CLI:** Never call bare `pf` — it is not globally installed. Always use the wrapper:
13
+ ```bash
14
+ "$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh <command> [args...]
15
+ ```
11
16
  </critical>
12
17
 
13
18
  <critical>
14
19
  **Story completion is MANDATORY.** A story is NOT done until:
15
20
  1. Reviewer approves and merges the PR
16
- 2. SM runs `pf sprint story finish` (archive session, update Jira, clean up)
21
+ 2. SM runs pf.sh `sprint story finish` (archive session, update Jira, clean up)
17
22
 
18
23
  **Never** start new work while stories have open PRs. The merge gate blocks `/pf-sprint work` if open PRs exist.
19
24
 
20
25
  **If stuck in incomplete state:**
21
- - Open PRs? → Run `/reviewer` to complete reviews and merge
22
- - Merged but not finished? → Run `/sm` to trigger finish flow
26
+ - Open PRs? → Run `/pf-reviewer` to complete reviews and merge
27
+ - Merged but not finished? → Run `/pf-sm` to trigger finish flow
23
28
  </critical>
24
29
 
25
30
  ---
@@ -49,7 +54,7 @@ On activation, check session file for a `**Tandem:**` line (e.g., `**Tandem:** a
49
54
 
50
55
  **If tandem is configured:**
51
56
 
52
- 1. **Resolve backseat persona** from theme using the `pf theme`
57
+ 1. **Resolve backseat persona** from theme using the `pf.sh theme`
53
58
  ```bash
54
59
  THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
55
60
  PARTNER_CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
@@ -95,6 +100,51 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
95
100
 
96
101
  ---
97
102
 
103
+ <team-mode>
104
+ ## Team Mode Protocol
105
+
106
+ When a workflow phase has a `team:` configuration block, the phase agent acts as
107
+ **team lead** and spawns teammates for parallel collaboration within that phase.
108
+
109
+ ### Team Creation
110
+
111
+ On phase entry, detect the `team:` block in workflow YAML. Use `TeamCreate`
112
+ to create a phase-scoped team named after the phase (e.g., `"green-phase"`).
113
+
114
+ ### Teammate Spawning
115
+
116
+ Spawn teammates via the Task tool with `team_name` parameter. Each teammate
117
+ runs `pf agent start {agent}` for full Prime activation. Keep spawn prompts
118
+ under 500 tokens — teammates auto-load CLAUDE.md, MCP servers, and skills.
119
+
120
+ ### Communication
121
+
122
+ - **Inter-phase handoff:** Use Reflector markers (`<!-- CYCLIST:HANDOFF -->`)
123
+ for phase transitions — unchanged from sequential mode.
124
+ - **Intra-phase collaboration:** Use `SendMessage` for real-time teammate
125
+ communication. Never use markers for intra-phase messaging.
126
+
127
+ ### Teammate Behavior
128
+
129
+ Teammates know they are NOT the lead. They:
130
+ - Communicate via SendMessage (DMs to lead or other teammates)
131
+ - Go idle when their assigned task is complete
132
+ - Respond to shutdown requests with shutdown_response
133
+
134
+ ### Cleanup Before Handoff
135
+
136
+ Before starting the exit protocol, the lead MUST:
137
+ 1. Send `shutdown_request` to all teammates via SendMessage
138
+ 2. Wait for `shutdown_response` from each teammate
139
+ 3. Run `TeamDelete` to clean up the team
140
+ 4. Then proceed with normal handoff (resolve-gate → complete-phase → marker)
141
+
142
+ Teams are **phase-scoped** — created at phase start, destroyed at phase end.
143
+ Handoff between phases is unchanged.
144
+ </team-mode>
145
+
146
+ ---
147
+
98
148
  ## Reflector
99
149
 
100
150
  <critical>
@@ -118,19 +168,20 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
118
168
 
119
169
  1. Write assessment to session
120
170
  2. Terminate tandem backseat (if active)
121
- 3. `pf handoff resolve-gate {story-id} {workflow} {phase}`RESOLVE_RESULT
122
- 4. If blocked report error, STOP
123
- 5. If skipjump to step 7
124
- 6. If readyspawn gate subagent with gate file → GATE_RESULT
125
- - If failfix issues, retry from step 3 (max 3 retries)
171
+ 3. **If team is active:** Shut down all teammates `TeamDelete` to clean up
172
+ 4. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff resolve-gate {story-id} {workflow} {phase}` → RESOLVE_RESULT
173
+ 5. If blockedreport error, STOP
174
+ 6. If skipjump to step 8
175
+ 7. If readyspawn gate subagent with gate file GATE_RESULT
176
+ - If fail → fix issues, retry from step 4 (max 3 retries)
126
177
  - If pass → continue
127
- 7. `pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
128
- 8. `pf handoff marker {next_agent}` → AGENT_COMMAND block
129
- 9. **Act on AGENT_COMMAND:**
130
- - Has `marker:` field → emit the CYCLIST marker (Cyclist path)
131
- - `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
132
- - `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
133
- - No action, no marker → output `fallback` text and EXIT
178
+ 8. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
179
+ 9. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff marker {next_agent}` → AGENT_COMMAND block
180
+ 10. **Act on AGENT_COMMAND:**
181
+ - Has `marker:` field → emit the CYCLIST marker (Cyclist path)
182
+ - `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
183
+ - `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
184
+ - No action, no marker → output `fallback` text and EXIT
134
185
 
135
186
  **Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
136
187
  </agent-exit-protocol>
@@ -141,12 +192,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
141
192
  On activation, check if story phase belongs to you:
142
193
 
143
194
  ```bash
144
- pf handoff phase-check {your_agent_name}
195
+ "$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff phase-check {your_agent_name}
145
196
  ```
146
197
 
147
198
  If result has `action: "redirect"`:
148
199
 
149
200
  - **Cyclist:** Emit `<!-- CYCLIST:HANDOFF:/{phase_owner} -->` and EXIT
150
- - **CLI + relay ON:** Run `pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
201
+ - **CLI + relay ON:** Run `source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
151
202
  - **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
152
203
  </wrong-phase-detection>
@@ -4,7 +4,7 @@
4
4
 
5
5
  This document describes how Pennyfarthing agents are coordinated. The framework supports both single-repo and multi-repo projects.
6
6
 
7
- **Key Principle:** Single entry point (`/pf-session new` or `/work`), state detection via session files, handoffs via Haiku subagents.
7
+ **Key Principle:** Single entry point (`/pf-session new` or `/pf-work`), state detection via session files, handoffs via Haiku subagents.
8
8
 
9
9
  ## The TDD Flow
10
10
 
@@ -12,7 +12,7 @@ SM → TEA → Dev → Reviewer → SM (setup → red → green → review → f
12
12
 
13
13
  Handoffs between agents are managed by Haiku subagents.
14
14
 
15
- **Entry points:** `/pf-session new` (new story) or `/work` (smart resume/start)
15
+ **Entry points:** `/pf-session new` (new story) or `/pf-work` (smart resume/start)
16
16
  **State detection:** Agents read session file on activation
17
17
  **Handoffs:** Agents spawn Haiku subagents to update session file
18
18
  **Finish:** SM handles when status = `approved`
@@ -263,7 +263,7 @@ User: @/pm
263
263
  ### Tactical Agent Workflow (Dev Example)
264
264
 
265
265
  ```
266
- User: @/dev
266
+ User: @/pf-dev
267
267
 
268
268
  1. Load Dev agent definition (.pennyfarthing/agents/dev.md)
269
269
  2. Load base context:
@@ -428,7 +428,7 @@ Dev Agent Example (API story):
428
428
  - No subagent extraction
429
429
 
430
430
  ### Current Architecture (January 2026)
431
- - Smart entry point: `/work` (resumes or starts new)
431
+ - Smart entry point: `/pf-work` (resumes or starts new)
432
432
  - Alternative: `/pf-session new` (explicitly start new story)
433
433
  - State detection via session file in `.session/`
434
434
  - Handoffs via Haiku subagents in `.pennyfarthing/agents/`
@@ -447,17 +447,17 @@ sprint/ # Sprint tracking
447
447
  ### Commands Reference
448
448
  ```bash
449
449
  # Entry points
450
- /work # Smart entry - resume or start new
450
+ /pf-work # Smart entry - resume or start new
451
451
  /pf-session new # Explicitly start new story
452
452
 
453
453
  # TDD Flow agents
454
- /sm # Scrum Master (setup + finish)
455
- /tea # Test Engineer (RED phase)
456
- /dev # Developer (GREEN phase)
457
- /reviewer # Code Reviewer
454
+ /pf-sm # Scrum Master (setup + finish)
455
+ /pf-tea # Test Engineer (RED phase)
456
+ /pf-dev # Developer (GREEN phase)
457
+ /pf-reviewer # Code Reviewer
458
458
 
459
459
  # Support agents
460
- /architect # Architecture design
460
+ /pf-architect # Architecture design
461
461
  /tech-writer # Documentation
462
462
  /ux-designer # UI/UX design
463
463
  /devops # Infrastructure
@@ -106,7 +106,7 @@ High-priority instruction that MUST be followed.
106
106
  ```xml
107
107
  <critical>
108
108
  **HANDOFF REQUIRES MARKER OUTPUT.** After exit protocol completes:
109
- Run `pf handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
109
+ Run `pf.sh handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
110
110
  </critical>
111
111
  ```
112
112
  - **Validation:** First `<critical>` should be within line 30
@@ -175,10 +175,10 @@ Logic for checking if this agent owns the current phase.
175
175
 
176
176
  Read `**Workflow:**` and `**Phase:**` from session. Query:
177
177
  ```bash
178
- OWNER=$(pf workflow phase-check {workflow} {phase})
178
+ OWNER=$("$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh workflow phase-check {workflow} {phase})
179
179
  ```
180
180
 
181
- **If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
181
+ **If OWNER != "dev":** Run `pf.sh handoff marker $OWNER`, output result, tell user.
182
182
  </phase-check>
183
183
  ```
184
184
 
@@ -250,9 +250,9 @@ Tags that contain checklists with `- [ ]` items.
250
250
  ## MANDATORY: Complete Before Exiting
251
251
 
252
252
  - [ ] Write Dev Assessment to session file
253
- - [ ] Run `pf handoff resolve-gate` — verify gate status
254
- - [ ] Run `pf handoff complete-phase` — atomic session update
255
- - [ ] Run `pf handoff marker {next_agent}` — emit marker and EXIT
253
+ - [ ] Run `pf.sh handoff resolve-gate` — verify gate status
254
+ - [ ] Run `pf.sh handoff complete-phase` — atomic session update
255
+ - [ ] Run `pf.sh handoff marker {next_agent}` — emit marker and EXIT
256
256
  </handoff-gate>
257
257
  ```
258
258
 
@@ -38,7 +38,7 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
38
38
  </persona>
39
39
 
40
40
  <role>
41
- **Primary:** {When this agent is invoked, e.g., "via /tea for TDD test writing"}
41
+ **Primary:** {When this agent is invoked, e.g., "via /pf-tea for TDD test writing"}
42
42
  **Position:** {Where in TDD flow, e.g., "SM → **TEA** → Dev → Reviewer"}
43
43
  </role>
44
44
 
@@ -26,7 +26,7 @@ User queues message in Editor
26
26
  |------|---------|
27
27
  | `packages/cyclist/src/bell-mode.ts` | State management: `isBellModeEnabled()`, `setBellMode()`, `toggleBellMode()` |
28
28
  | `packages/cyclist/src/api/bell.ts` | WebSocket broadcast of bell-consumed events |
29
- | `pf hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
29
+ | `pf.sh hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
30
30
  | `packages/cyclist/src/public/hooks/useMessageQueue.ts` | React hook: `queueMessage()`, `dequeueMessage()`, `injectMessage()`, `handleTurnComplete()` |
31
31
  | `packages/cyclist/src/public/contexts/MessageQueueContext.tsx` | Shared React context (single queue instance across components) |
32
32
  | `packages/cyclist/src/public/components/ControlBar.tsx` | Bell mode toggle button |
@@ -28,7 +28,7 @@ Cyclist bundles the conversation UI and dashboard panels into one Electron app.
28
28
 
29
29
  ```bash
30
30
  # Launch BikeRack + Claude CLI together
31
- pf bikerack start
31
+ pf.sh bikerack start
32
32
 
33
33
  # Or via just recipe
34
34
  just bikerack
@@ -37,10 +37,10 @@ just bikerack
37
37
  just bikerack dir=/path/to/project
38
38
 
39
39
  # Stop a running instance
40
- pf bikerack stop
40
+ pf.sh bikerack stop
41
41
 
42
42
  # Check status
43
- pf bikerack status
43
+ pf.sh bikerack status
44
44
  ```
45
45
 
46
46
  BikeRack opens a browser with the Dockview panel layout. Claude CLI runs in the foreground. When Claude exits, BikeRack shuts down automatically via `trap EXIT`.
@@ -71,7 +71,7 @@ BikeRack supports two modes:
71
71
 
72
72
  ## How It Works
73
73
 
74
- 1. **Launcher** (`pf bikerack start`) starts WheelHub with `IS_BIKERACK=1`
74
+ 1. **Launcher** (`pf.sh bikerack start`) starts WheelHub with `IS_BIKERACK=1`
75
75
  2. **WheelHub** listens on port 2898 (separate from Cyclist's 1898)
76
76
  3. **ClaudeService is skipped** — no `/ws/claude` WebSocket channel
77
77
  4. **OTEL telemetry** flows from Claude CLI to WheelHub's OTLP receiver
@@ -92,8 +92,8 @@ Client-side detection is URL-based: the presence of `?panel=X` triggers standalo
92
92
 
93
93
  | File | Purpose |
94
94
  |------|---------|
95
- | `.wheelhub-port` | Port number, written after `server.listen()` — readiness signal |
96
- | `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
95
+ | `.bikerack-port` | Port number, written after `server.listen()` — readiness signal |
96
+ | `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf.sh bikerack stop` |
97
97
 
98
98
  Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
99
99
 
@@ -102,9 +102,9 @@ Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
102
102
  Save and restore BikeRack panel layouts:
103
103
 
104
104
  ```bash
105
- pf bc save my-layout # Save current layout
106
- pf bc load my-layout # Restore a saved layout
107
- pf bc list # List saved layouts
105
+ pf.sh bc save my-layout # Save current layout
106
+ pf.sh bc load my-layout # Restore a saved layout
107
+ pf.sh bc list # List saved layouts
108
108
  ```
109
109
 
110
110
  ## Key Files
@@ -115,7 +115,7 @@ pf bc list # List saved layouts
115
115
  | `packages/core/src/public/components/BikeRackWorkspace.tsx` | Dockview layout for BikeRack |
116
116
  | `packages/core/src/public/components/BikeRackIndex.tsx` | Panel listing index page |
117
117
  | `packages/core/src/public/components/StandalonePanel.tsx` | `?panel=X` routing + `PANEL_REGISTRY` |
118
- | `pennyfarthing_scripts/bikerack/cli.py` | `pf bikerack` launcher CLI |
118
+ | `pennyfarthing_scripts/bikerack/cli.py` | `pf.sh bikerack` launcher CLI |
119
119
 
120
120
  ## Constraints
121
121
 
@@ -6,7 +6,7 @@ CLI tools for analyzing existing codebases. Identify change hotspots, complexity
6
6
 
7
7
  ## Overview
8
8
 
9
- All tools are available under `pf debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
9
+ All tools are available under `pf.sh debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
10
10
 
11
11
  ## Tools
12
12
 
@@ -16,19 +16,19 @@ Find files that change most frequently — high churn often correlates with bugs
16
16
 
17
17
  ```bash
18
18
  # Full analysis (files + directories)
19
- pf debug hotspots analyze
19
+ pf.sh debug hotspots analyze
20
20
 
21
21
  # File-level only
22
- pf debug hotspots files
22
+ pf.sh debug hotspots files
23
23
 
24
24
  # Directory-level only
25
- pf debug hotspots dirs
25
+ pf.sh debug hotspots dirs
26
26
 
27
27
  # Options
28
- pf debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
29
- pf debug hotspots analyze --format json --output hotspots.json
30
- pf debug hotspots analyze --exclude "*.test.ts" --branch main
31
- pf debug hotspots analyze --skip-type orchestrator
28
+ pf.sh debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
29
+ pf.sh debug hotspots analyze --format json --output hotspots.json
30
+ pf.sh debug hotspots analyze --exclude "*.test.ts" --branch main
31
+ pf.sh debug hotspots analyze --skip-type orchestrator
32
32
  ```
33
33
 
34
34
  ### Complexity
@@ -36,9 +36,9 @@ pf debug hotspots analyze --skip-type orchestrator
36
36
  Measure code complexity metrics across files.
37
37
 
38
38
  ```bash
39
- pf debug complexity analyze
40
- pf debug complexity analyze --path ./packages/core/src
41
- pf debug complexity analyze --top 30 --format csv
39
+ pf.sh debug complexity analyze
40
+ pf.sh debug complexity analyze --path ./packages/core/src
41
+ pf.sh debug complexity analyze --top 30 --format csv
42
42
  ```
43
43
 
44
44
  ### Dead Code
@@ -47,12 +47,12 @@ Find unused code: stale files with no recent commits, and unused TypeScript expo
47
47
 
48
48
  ```bash
49
49
  # Files with no recent commits (default: 180 days)
50
- pf debug deadcode stale
51
- pf debug deadcode stale --days 90 --repo pennyfarthing
50
+ pf.sh debug deadcode stale
51
+ pf.sh debug deadcode stale --days 90 --repo pennyfarthing
52
52
 
53
53
  # Unused TypeScript exports (via ts-prune)
54
- pf debug deadcode exports
55
- pf debug deadcode exports --repo pennyfarthing --format json
54
+ pf.sh debug deadcode exports
55
+ pf.sh debug deadcode exports --repo pennyfarthing --format json
56
56
  ```
57
57
 
58
58
  ### Code Markers
@@ -61,16 +61,16 @@ Detect TODO, FIXME, HACK, and XXX comments with git blame data.
61
61
 
62
62
  ```bash
63
63
  # Full analysis with blame data
64
- pf debug codemarkers analyze
64
+ pf.sh debug codemarkers analyze
65
65
 
66
66
  # Only stale markers (older than threshold)
67
- pf debug codemarkers stale --days 90
67
+ pf.sh debug codemarkers stale --days 90
68
68
 
69
69
  # Summary counts by type
70
- pf debug codemarkers summary
70
+ pf.sh debug codemarkers summary
71
71
 
72
72
  # Deprecated symbol detection
73
- pf debug codemarkers deprecations
73
+ pf.sh debug codemarkers deprecations
74
74
  ```
75
75
 
76
76
  ### Dependencies
@@ -78,8 +78,8 @@ pf debug codemarkers deprecations
78
78
  Analyze dependency staleness and security advisories.
79
79
 
80
80
  ```bash
81
- pf debug dependencies analyze
82
- pf debug dependencies analyze --path ./pennyfarthing --format json
81
+ pf.sh debug dependencies analyze
82
+ pf.sh debug dependencies analyze --path ./pennyfarthing --format json
83
83
  ```
84
84
 
85
85
  ### Health Score
@@ -87,9 +87,9 @@ pf debug dependencies analyze --path ./pennyfarthing --format json
87
87
  Composite health score across all dimensions (hotspots, complexity, dead code, dependencies, markers).
88
88
 
89
89
  ```bash
90
- pf debug healthscore analyze
91
- pf debug healthscore analyze --no-cache # Bypass cache
92
- pf debug healthscore analyze --format json --output health.json
90
+ pf.sh debug healthscore analyze
91
+ pf.sh debug healthscore analyze --no-cache # Bypass cache
92
+ pf.sh debug healthscore analyze --format json --output health.json
93
93
  ```
94
94
 
95
95
  ## Common Options
@@ -61,7 +61,7 @@
61
61
 
62
62
  ### Conditional by Type
63
63
 
64
- **Workflow/Agent Commands (e.g., /sm, /dev, /tea)**
64
+ **Workflow/Agent Commands (e.g., /pf-sm, /pf-dev, /pf-tea)**
65
65
  - `<agent-activation>` — Required to show activation
66
66
  - `<instructions>` — Required for agent behavior
67
67
 
@@ -181,7 +181,7 @@ The `gate.file` value is resolved by the gate file discovery algorithm (project-
181
181
  Validate gate files before use:
182
182
 
183
183
  ```bash
184
- pf gate validate path/to/gate-file.md
184
+ pf.sh gate validate path/to/gate-file.md
185
185
  ```
186
186
 
187
187
  The validator checks:
@@ -215,7 +215,7 @@ Gate 'tests-pass' is valid
215
215
 
216
216
  6. **Add recovery steps.** The `recovery` array in failed results gives the agent a clear path to fix issues and retry.
217
217
 
218
- 7. **Test with the validator.** Run `pf gate validate` on your gate file before referencing it in a workflow.
218
+ 7. **Test with the validator.** Run `pf.sh gate validate` on your gate file before referencing it in a workflow.
219
219
 
220
220
  ## Related
221
221
 
@@ -78,14 +78,14 @@ Agents interact with gates through the handoff CLI during their exit sequence:
78
78
 
79
79
  ```
80
80
  1. Agent writes assessment to session file
81
- 2. pf handoff resolve-gate {story-id} {workflow} {phase}
81
+ 2. pf.sh handoff resolve-gate {story-id} {workflow} {phase}
82
82
  → Reads workflow YAML, finds gate for current phase
83
83
  → Returns RESOLVE_RESULT: {status: ready|skip|blocked, gate_file: ...}
84
84
  3. If ready → spawn Haiku subagent with gate file → GATE_RESULT
85
85
  4. If GATE_RESULT.status == fail → fix issues, retry (max 3)
86
86
  5. If GATE_RESULT.status == pass → continue to complete-phase
87
- 6. pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
88
- 7. pf handoff marker {next-agent}
87
+ 6. pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
88
+ 7. pf.sh handoff marker {next-agent}
89
89
  ```
90
90
 
91
91
  If a phase has no `gate:` block, `resolve-gate` returns `status: skip` and the agent proceeds directly to `complete-phase`.
@@ -1,7 +1,7 @@
1
1
  # Handoff CLI
2
2
 
3
3
  <info>
4
- Python CLI for managing workflow phase transitions. Agents use `pf handoff` to resolve gates, complete phase transitions, and generate handoff markers during their exit protocol.
4
+ Python CLI for managing workflow phase transitions. Agents use `pf.sh handoff` to resolve gates, complete phase transitions, and generate handoff markers during their exit protocol.
5
5
  </info>
6
6
 
7
7
  ## Commands
@@ -11,7 +11,7 @@ Python CLI for managing workflow phase transitions. Agents use `pf handoff` to r
11
11
  Check whether the current phase has a gate and what state it's in.
12
12
 
13
13
  ```bash
14
- pf handoff resolve-gate STORY_ID WORKFLOW PHASE
14
+ pf.sh handoff resolve-gate STORY_ID WORKFLOW PHASE
15
15
  ```
16
16
 
17
17
  **Arguments:**
@@ -39,7 +39,7 @@ RESOLVE_RESULT:
39
39
  Atomically update the session file to record a phase transition.
40
40
 
41
41
  ```bash
42
- pf handoff complete-phase STORY_ID WORKFLOW FROM_PHASE TO_PHASE GATE_TYPE
42
+ pf.sh handoff complete-phase STORY_ID WORKFLOW FROM_PHASE TO_PHASE GATE_TYPE
43
43
  ```
44
44
 
45
45
  **Arguments:**
@@ -66,8 +66,8 @@ Updates the session file: `**Phase:**` line, timestamps, and phase history table
66
66
  Generate an environment-aware handoff marker block.
67
67
 
68
68
  ```bash
69
- pf handoff marker NEXT_AGENT
70
- pf handoff marker --error "Tests failing"
69
+ pf.sh handoff marker NEXT_AGENT
70
+ pf.sh handoff marker --error "Tests failing"
71
71
  ```
72
72
 
73
73
  **Arguments:**
@@ -88,14 +88,14 @@ The handoff CLI is used in sequence during agent exit:
88
88
 
89
89
  ```
90
90
  1. Write assessment to session file
91
- 2. pf handoff resolve-gate {story-id} {workflow} {phase}
91
+ 2. pf.sh handoff resolve-gate {story-id} {workflow} {phase}
92
92
  ├── blocked → report error, STOP
93
93
  ├── skip → jump to step 4
94
94
  └── ready → spawn gate subagent → GATE_RESULT
95
95
  ├── fail → fix issues, retry (max 3)
96
96
  └── pass → continue
97
- 3. pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
98
- 4. pf handoff marker {next-agent} → emit marker → EXIT
97
+ 3. pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}
98
+ 4. pf.sh handoff marker {next-agent} → emit marker → EXIT
99
99
  ```
100
100
 
101
101
  See `guides/gates.md` for gate file format and evaluation details.
@@ -16,18 +16,18 @@ Hooks are commands that Claude Code runs at specific events:
16
16
 
17
17
  ### SessionStart Hooks
18
18
 
19
- #### pf hooks session-start
19
+ #### pf.sh hooks session-start
20
20
 
21
- **Location:** `pf hooks session-start`
21
+ **Location:** `pf.sh hooks session-start`
22
22
 
23
23
  Initializes the Pennyfarthing environment:
24
24
  - Creates `.session/` directory structure
25
25
  - Clears stale agent state from previous sessions
26
26
  - Sets `PROJECT_ROOT` and `SESSION_ID` environment variables
27
27
 
28
- #### pf hooks session-stop
28
+ #### pf.sh hooks session-stop
29
29
 
30
- **Location:** `pf hooks session-stop`
30
+ **Location:** `pf.sh hooks session-stop`
31
31
 
32
32
  Cleans up session state when Claude Code exits.
33
33
 
@@ -44,66 +44,66 @@ Project-specific environment setup. Edit this file to:
44
44
 
45
45
  **Location:** `.pennyfarthing/scripts/hooks/otel-auto-config.sh`
46
46
 
47
- Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.wheelhub-port` file and sets `OTEL_EXPORTER_OTLP_PROTOCOL` and `OTEL_EXPORTER_OTLP_ENDPOINT` to route Claude Code telemetry to the running Cyclist/BikeRack server.
47
+ Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.bikerack-port` file and sets `OTEL_EXPORTER_OTLP_PROTOCOL` and `OTEL_EXPORTER_OTLP_ENDPOINT` to route Claude Code telemetry to the running Cyclist/BikeRack server.
48
48
 
49
- #### pf hooks session-start (welcome)
49
+ #### pf.sh hooks session-start (welcome)
50
50
 
51
- **Location:** `pf hooks session-start`
51
+ **Location:** `pf.sh hooks session-start`
52
52
 
53
- Welcome display is now folded into `pf hooks session-start`. In CLI mode, shows ASCII art. In Cyclist mode, sends a WebSocket message to display the logo. Runs once per session (lock file guard).
53
+ Welcome display is now folded into `pf.sh hooks session-start`. In CLI mode, shows ASCII art. In Cyclist mode, sends a WebSocket message to display the logo. Runs once per session (lock file guard).
54
54
 
55
55
  ### PreToolUse Hooks
56
56
 
57
- #### pf hooks pre-edit-check
57
+ #### pf.sh hooks pre-edit-check
58
58
 
59
- **Location:** `pf hooks pre-edit-check`
59
+ **Location:** `pf.sh hooks pre-edit-check`
60
60
 
61
61
  Protects sensitive files from accidental edits:
62
62
  - Blocks: `.env`, `.pem`, `.key`, credentials, secrets
63
63
  - Blocks: `.git/`, `node_modules/`, `vendor/`
64
64
  - Blocks: `.pennyfarthing/*` (managed files)
65
65
 
66
- #### pf hooks cyclist-pretooluse
66
+ #### pf.sh hooks cyclist-pretooluse
67
67
 
68
- **Location:** `pf hooks cyclist-pretooluse`
68
+ **Location:** `pf.sh hooks cyclist-pretooluse`
69
69
 
70
70
  Cyclist-specific pre-tool validation. Runs additional safety checks when operating inside Cyclist.
71
71
 
72
- #### pf hooks context-warning
72
+ #### pf.sh hooks context-warning
73
73
 
74
- **Location:** `pf hooks context-warning`
74
+ **Location:** `pf.sh hooks context-warning`
75
75
 
76
76
  Warns agents when context usage is high. Outputs a warning at 60% usage and a critical warning at 85%. Never blocks — warning only (always exits 0).
77
77
 
78
- #### pf hooks context-breaker
78
+ #### pf.sh hooks context-breaker
79
79
 
80
- **Location:** `pf hooks context-breaker`
80
+ **Location:** `pf.sh hooks context-breaker`
81
81
 
82
- Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `pf hooks context-warning`, this **blocks tool execution** (exit 2). Auto-saves the active agent to a checkpoint so `/pf-session continue` can restore it with FULL tier context.
82
+ Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `pf.sh hooks context-warning`, this **blocks tool execution** (exit 2). Auto-saves the active agent to a checkpoint so `/pf-session continue` can restore it with FULL tier context.
83
83
 
84
- #### pf hooks schema-validation
84
+ #### pf.sh hooks schema-validation
85
85
 
86
- **Location:** `pf hooks schema-validation`
86
+ **Location:** `pf.sh hooks schema-validation`
87
87
 
88
88
  Validates file writes against XML schema rules for agent definitions, workflow files, and other structured content.
89
89
 
90
- #### pf hooks sprint-yaml
90
+ #### pf.sh hooks sprint-yaml
91
91
 
92
- **Location:** `pf hooks sprint-yaml`
92
+ **Location:** `pf.sh hooks sprint-yaml`
93
93
 
94
94
  Validates sprint YAML files on write to prevent structural corruption.
95
95
 
96
96
  ### PostToolUse Hooks
97
97
 
98
- #### pf hooks bell-mode
98
+ #### pf.sh hooks bell-mode
99
99
 
100
- **Location:** `pf hooks bell-mode`
100
+ **Location:** `pf.sh hooks bell-mode`
101
101
 
102
102
  Bell mode message injection. Checks the bell mode queue and injects queued messages into the agent's context at the next tool execution. Also handles tandem observation injection.
103
103
 
104
- #### pf hooks reflector-check
104
+ #### pf.sh hooks reflector-check
105
105
 
106
- **Location:** `pf hooks reflector-check`
106
+ **Location:** `pf.sh hooks reflector-check`
107
107
 
108
108
  Stop hook enforcing that every agent turn ends with a CYCLIST marker. Detects questions, handoff phrases, and validates marker presence. Blocks turns without valid markers in Cyclist mode.
109
109
 
@@ -133,7 +133,7 @@ Hooks are configured in `.claude/settings.local.json`:
133
133
  "hooks": [
134
134
  {
135
135
  "type": "command",
136
- "command": "pf hooks session-start"
136
+ "command": "pf.sh hooks session-start"
137
137
  }
138
138
  ]
139
139
  }
@@ -144,7 +144,7 @@ Hooks are configured in `.claude/settings.local.json`:
144
144
  "hooks": [
145
145
  {
146
146
  "type": "command",
147
- "command": "pf hooks pre-edit-check"
147
+ "command": "pf.sh hooks pre-edit-check"
148
148
  }
149
149
  ]
150
150
  }