@pennyfarthing/core 11.2.0 → 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.
- package/README.md +100 -40
- package/package.json +2 -1
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +474 -66
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/init.js +4 -4
- package/packages/core/dist/cli/commands/init.js.map +1 -1
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +4 -5
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/utils/constants.d.ts +3 -8
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/constants.js +3 -4
- package/packages/core/dist/cli/utils/constants.js.map +1 -1
- package/packages/core/dist/cli/utils/settings.d.ts +7 -0
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/settings.js +70 -29
- package/packages/core/dist/cli/utils/settings.js.map +1 -1
- package/packages/core/dist/cli/utils/symlinks.js +16 -16
- package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
- package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.js +1 -1
- package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
- package/packages/core/dist/consultation/tandem-metrics.d.ts +91 -0
- package/packages/core/dist/consultation/tandem-metrics.d.ts.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.js +131 -0
- package/packages/core/dist/consultation/tandem-metrics.js.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.test.d.ts +18 -0
- package/packages/core/dist/consultation/tandem-metrics.test.d.ts.map +1 -0
- package/packages/core/dist/consultation/tandem-metrics.test.js +457 -0
- package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -0
- package/packages/core/dist/public/css/react.css +1 -1
- package/packages/core/dist/public/js/react/react.js +14 -14
- package/packages/core/dist/server/api/agent-load.js +1 -1
- package/packages/core/dist/server/api/agent-load.js.map +1 -1
- package/packages/core/dist/server/api/git.d.ts.map +1 -1
- package/packages/core/dist/server/api/git.js +0 -1
- package/packages/core/dist/server/api/git.js.map +1 -1
- package/packages/core/dist/server/api/index.d.ts +2 -0
- package/packages/core/dist/server/api/index.d.ts.map +1 -1
- package/packages/core/dist/server/api/index.js +2 -0
- package/packages/core/dist/server/api/index.js.map +1 -1
- package/packages/core/dist/server/api/project-info.d.ts +11 -0
- package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
- package/packages/core/dist/server/api/project-info.js +18 -0
- package/packages/core/dist/server/api/project-info.js.map +1 -0
- package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
- package/packages/core/dist/server/otlp-receiver.js +18 -1
- package/packages/core/dist/server/otlp-receiver.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.test.js +1 -1
- package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
- package/packages/core/dist/server/server.d.ts +0 -3
- package/packages/core/dist/server/server.d.ts.map +1 -1
- package/packages/core/dist/server/server.js +5 -38
- package/packages/core/dist/server/server.js.map +1 -1
- package/packages/core/dist/server/server.test.d.ts +1 -1
- package/packages/core/dist/server/server.test.js +12 -23
- package/packages/core/dist/server/server.test.js.map +1 -1
- package/packages/core/dist/server/settings.d.ts +1 -0
- package/packages/core/dist/server/settings.d.ts.map +1 -1
- package/packages/core/dist/server/settings.js +13 -0
- package/packages/core/dist/server/settings.js.map +1 -1
- package/packages/core/dist/shared/capabilities.d.ts +88 -0
- package/packages/core/dist/shared/capabilities.d.ts.map +1 -0
- package/packages/core/dist/shared/capabilities.js +133 -0
- package/packages/core/dist/shared/capabilities.js.map +1 -0
- package/packages/core/dist/shared/capabilities.test.d.ts +2 -0
- package/packages/core/dist/shared/capabilities.test.d.ts.map +1 -0
- package/packages/core/dist/shared/capabilities.test.js +217 -0
- package/packages/core/dist/shared/capabilities.test.js.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.d.ts +47 -0
- package/packages/core/dist/shared/spawn-prompt.d.ts.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.js +82 -0
- package/packages/core/dist/shared/spawn-prompt.js.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.test.d.ts +2 -0
- package/packages/core/dist/shared/spawn-prompt.test.d.ts.map +1 -0
- package/packages/core/dist/shared/spawn-prompt.test.js +251 -0
- package/packages/core/dist/shared/spawn-prompt.test.js.map +1 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts +18 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js +434 -0
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -0
- package/packages/core/dist/workflow/team-lifecycle.d.ts +169 -0
- package/packages/core/dist/workflow/team-lifecycle.d.ts.map +1 -0
- package/packages/core/dist/workflow/team-lifecycle.js +217 -0
- package/packages/core/dist/workflow/team-lifecycle.js.map +1 -0
- package/packages/core/dist/workflow/team-lifecycle.test.d.ts +20 -0
- package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/team-lifecycle.test.js +966 -0
- package/packages/core/dist/workflow/team-lifecycle.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +32 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.js +120 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
- package/packages/core/dist/workflow/workflow-schema.test.js +570 -1
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
- package/pennyfarthing-dist/agents/dev.md +21 -12
- package/pennyfarthing-dist/agents/reviewer.md +23 -4
- package/pennyfarthing-dist/agents/sm-finish.md +19 -2
- package/pennyfarthing-dist/agents/sm-setup.md +7 -7
- package/pennyfarthing-dist/agents/sm.md +12 -12
- package/pennyfarthing-dist/agents/tea.md +2 -2
- package/pennyfarthing-dist/agents/testing-runner.md +1 -1
- package/pennyfarthing-dist/commands/pf-architect.md +1 -1
- package/pennyfarthing-dist/commands/pf-ba.md +1 -1
- package/pennyfarthing-dist/commands/pf-chore.md +2 -2
- package/pennyfarthing-dist/commands/pf-dev.md +1 -1
- package/pennyfarthing-dist/commands/pf-devops.md +1 -1
- package/pennyfarthing-dist/commands/pf-epic.md +6 -6
- package/pennyfarthing-dist/commands/pf-git.md +12 -10
- package/pennyfarthing-dist/commands/pf-health-check.md +1 -1
- package/pennyfarthing-dist/commands/pf-help.md +12 -12
- package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
- package/pennyfarthing-dist/commands/pf-pm.md +1 -1
- package/pennyfarthing-dist/commands/pf-prime.md +8 -8
- package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
- package/pennyfarthing-dist/commands/pf-session.md +7 -7
- package/pennyfarthing-dist/commands/pf-sm.md +1 -1
- package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
- package/pennyfarthing-dist/commands/pf-tea.md +1 -1
- package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
- package/pennyfarthing-dist/commands/pf-theme.md +9 -9
- package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
- package/pennyfarthing-dist/commands/pf-work.md +1 -1
- package/pennyfarthing-dist/gates/approval.md +63 -0
- package/pennyfarthing-dist/gates/confidence-sm.md +71 -0
- package/pennyfarthing-dist/gates/context-ok.md +56 -0
- package/pennyfarthing-dist/gates/evaluations/confidence-sm.md +54 -0
- package/pennyfarthing-dist/gates/quality-pass.md +67 -0
- package/pennyfarthing-dist/gates/tests-fail.md +84 -0
- package/pennyfarthing-dist/gates/tests-pass.md +79 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +84 -29
- package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
- package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
- package/pennyfarthing-dist/guides/bell-mode.md +1 -1
- package/pennyfarthing-dist/guides/bikerack.md +10 -10
- package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
- package/pennyfarthing-dist/guides/gate-schema.md +2 -2
- package/pennyfarthing-dist/guides/gates.md +3 -3
- package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
- package/pennyfarthing-dist/guides/hooks.md +29 -29
- package/pennyfarthing-dist/guides/prime.md +2 -2
- package/pennyfarthing-dist/guides/reflector.md +1 -1
- package/pennyfarthing-dist/guides/skill-schema.md +6 -6
- package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
- package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +8 -8
- package/pennyfarthing-dist/scripts/README.md +4 -4
- package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
- package/pennyfarthing-dist/scripts/core/check-context.sh +3 -1
- package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +4 -89
- package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
- package/pennyfarthing-dist/scripts/git/README.md +14 -14
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
- package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +4 -183
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +4 -95
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +4 -65
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -31
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +29 -34
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +4 -71
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -19
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +4 -30
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -32
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +4 -65
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +4 -78
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -93
- package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
- package/pennyfarthing-dist/scripts/lib/run-pf.sh +39 -0
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/statusline.sh +4 -301
- package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
- package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
- package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
- package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
- package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
- package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
- package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
- package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
- package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
- package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
- package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
- package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
- package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
- package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
- package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
- package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
- package/pennyfarthing-dist/skills/skill-registry.yaml +19 -19
- package/pennyfarthing-dist/templates/settings.local.json.template +19 -10
- package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
- package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
- package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +11 -2
- package/pennyfarthing_scripts/CLAUDE.md +19 -10
- package/pennyfarthing_scripts/__init__.py +1 -1
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/cli.py +2 -2
- package/pennyfarthing_scripts/bellmode_hook.py +9 -296
- package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/audit_log_panel.py +161 -0
- package/pennyfarthing_scripts/bikerack/base_panel.py +27 -4
- package/pennyfarthing_scripts/bikerack/changed_panel.py +96 -4
- package/pennyfarthing_scripts/bikerack/context_meter_footer.py +88 -0
- package/pennyfarthing_scripts/bikerack/debug_panel.py +1 -1
- package/pennyfarthing_scripts/bikerack/diffs_panel.py +30 -0
- package/pennyfarthing_scripts/bikerack/events.py +28 -0
- package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
- package/pennyfarthing_scripts/bikerack/portrait_resolver.py +139 -0
- package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
- package/pennyfarthing_scripts/bikerack/sprint_panel.py +373 -142
- package/pennyfarthing_scripts/bikerack/story_detail_data.py +247 -0
- package/pennyfarthing_scripts/bikerack/story_detail_screen.py +177 -0
- package/pennyfarthing_scripts/bikerack/tui.py +304 -62
- package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
- package/pennyfarthing_scripts/cli.py +5 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/config.py +29 -2
- package/pennyfarthing_scripts/common/pr_config.py +38 -0
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/cli.py +3 -3
- package/pennyfarthing_scripts/context.py +3 -3
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
- package/pennyfarthing_scripts/git/status_all.py +1 -1
- package/pennyfarthing_scripts/git/worktree.py +2 -2
- package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/cli.py +33 -1
- package/pennyfarthing_scripts/handoff/complete_phase.py +28 -0
- package/pennyfarthing_scripts/handoff/marker.py +15 -15
- package/pennyfarthing_scripts/handoff/phase_check.py +96 -0
- package/pennyfarthing_scripts/handoff/resolve_gate.py +13 -1
- package/pennyfarthing_scripts/hooks/__init__.py +442 -0
- package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/bell_mode.py +214 -0
- package/pennyfarthing_scripts/hooks/cli.py +96 -0
- package/pennyfarthing_scripts/hooks/context_breaker.py +104 -0
- package/pennyfarthing_scripts/hooks/context_warning.py +66 -0
- package/pennyfarthing_scripts/hooks/cyclist_pretooluse.py +129 -0
- package/pennyfarthing_scripts/hooks/pre_edit_check.py +77 -0
- package/pennyfarthing_scripts/hooks/reflector_check.py +270 -0
- package/pennyfarthing_scripts/hooks/schema_validation.py +202 -0
- package/pennyfarthing_scripts/hooks/session_start.py +294 -0
- package/pennyfarthing_scripts/hooks/session_stop.py +111 -0
- package/pennyfarthing_scripts/hooks/sprint_yaml_validation.py +97 -0
- package/pennyfarthing_scripts/hooks/statusline.py +429 -0
- package/pennyfarthing_scripts/hooks.py +27 -432
- package/pennyfarthing_scripts/pretooluse_hook.py +3 -185
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/heatmap.py +3 -15
- package/pennyfarthing_scripts/prime/workflow.py +2 -1
- package/pennyfarthing_scripts/schema_validation_hook.py +3 -298
- package/pennyfarthing_scripts/session_start_hook.py +4 -186
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/cli.py +121 -0
- package/pennyfarthing_scripts/sprint/loader.py +154 -3
- package/pennyfarthing_scripts/sprint/story_update.py +26 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
- package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
- package/pennyfarthing_scripts/tests/test_sprint_panel.py +344 -265
- package/pennyfarthing_scripts/tests/test_workflow_list_team.py +147 -0
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
- package/pennyfarthing_scripts/validate/adapters/workflow.py +19 -0
- package/pennyfarthing_scripts/welcome_hook.py +3 -149
- package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/cli.py +22 -20
- package/pennyfarthing_scripts/workflow/state.py +0 -1
- package/pennyfarthing_scripts/workflow/team_lifecycle.py +256 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts +0 -16
- package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +0 -1
- package/packages/core/dist/cli/cyclist-migration.test.js +0 -229
- package/packages/core/dist/cli/cyclist-migration.test.js.map +0 -1
- package/packages/core/dist/scripts/theme-detail.test.d.ts +0 -10
- package/packages/core/dist/scripts/theme-detail.test.d.ts.map +0 -1
- package/packages/core/dist/scripts/theme-detail.test.js +0 -199
- package/packages/core/dist/scripts/theme-detail.test.js.map +0 -1
|
@@ -3,23 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
**Tests:** Use `testing-runner` subagent, never run directly.
|
|
5
5
|
|
|
6
|
-
**Handoff:** Run
|
|
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
|
|
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
|
|
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,19 +100,65 @@ 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>
|
|
101
|
-
**EVERY TURN MUST END WITH A CYCLIST MARKER
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
|
|
|
109
|
-
|
|
|
110
|
-
|
|
|
151
|
+
**Cyclist only:** EVERY TURN MUST END WITH A CYCLIST MARKER. Stop hook enforces this.
|
|
152
|
+
**CLI mode:** Do NOT emit CYCLIST markers — they are inert outside Cyclist.
|
|
153
|
+
|
|
154
|
+
| Situation | Cyclist Marker | CLI Behavior |
|
|
155
|
+
|-----------|---------------|--------------|
|
|
156
|
+
| Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` | Use AGENT_COMMAND `action` field |
|
|
157
|
+
| Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` | Tell user to `/clear` then run agent |
|
|
158
|
+
| Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` | Ask user directly |
|
|
159
|
+
| Open-ended question | `<!-- CYCLIST:QUESTION:open -->` | Ask user directly |
|
|
160
|
+
| Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` | Ask user directly |
|
|
161
|
+
| Everything else | `<!-- CYCLIST:CONTINUE -->` | (no marker needed) |
|
|
111
162
|
</critical>
|
|
112
163
|
|
|
113
164
|
---
|
|
@@ -117,14 +168,20 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
117
168
|
|
|
118
169
|
1. Write assessment to session
|
|
119
170
|
2. Terminate tandem backseat (if active)
|
|
120
|
-
3.
|
|
121
|
-
4.
|
|
122
|
-
5. If
|
|
123
|
-
6. If
|
|
124
|
-
|
|
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 blocked → report error, STOP
|
|
174
|
+
6. If skip → jump to step 8
|
|
175
|
+
7. If ready → spawn gate subagent with gate file → GATE_RESULT
|
|
176
|
+
- If fail → fix issues, retry from step 4 (max 3 retries)
|
|
125
177
|
- If pass → continue
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
128
185
|
|
|
129
186
|
**Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
|
|
130
187
|
</agent-exit-protocol>
|
|
@@ -135,14 +192,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
135
192
|
On activation, check if story phase belongs to you:
|
|
136
193
|
|
|
137
194
|
```bash
|
|
138
|
-
|
|
139
|
-
# If OWNER != your agent → emit handoff marker and EXIT
|
|
195
|
+
"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff phase-check {your_agent_name}
|
|
140
196
|
```
|
|
141
197
|
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
<!-- CYCLIST:HANDOFF:/{OWNER} -->
|
|
198
|
+
If result has `action: "redirect"`:
|
|
145
199
|
|
|
146
|
-
|
|
147
|
-
|
|
200
|
+
- **Cyclist:** Emit `<!-- CYCLIST:HANDOFF:/{phase_owner} -->` and EXIT
|
|
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
|
|
202
|
+
- **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
|
|
148
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
|
|
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
|
|
455
|
-
/tea
|
|
456
|
-
/dev
|
|
457
|
-
/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
|
|
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
|
-
| `
|
|
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
|
-
| `.
|
|
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.
|