@pennyfarthing/core 6.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +293 -0
- package/package.json +58 -0
- package/packages/core/bin/pennyfarthing.js +14 -0
- package/packages/core/dist/bmad/context-reader.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.js +369 -0
- package/packages/core/dist/bmad/context-reader.js.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
- package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/context-reader.test.js +878 -0
- package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
- package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.js +331 -0
- package/packages/core/dist/bmad/epics-parser.js.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
- package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/epics-parser.test.js +449 -0
- package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
- package/packages/core/dist/bmad/index.d.ts +11 -0
- package/packages/core/dist/bmad/index.d.ts.map +1 -0
- package/packages/core/dist/bmad/index.js +24 -0
- package/packages/core/dist/bmad/index.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.d.ts +173 -0
- package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.js +463 -0
- package/packages/core/dist/bmad/status-sync.js.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
- package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/status-sync.test.js +702 -0
- package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
- package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.js +170 -0
- package/packages/core/dist/bmad/story-exporter.js.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
- package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-exporter.test.js +603 -0
- package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.js +307 -0
- package/packages/core/dist/bmad/story-parser.js.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
- package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
- package/packages/core/dist/bmad/story-parser.test.js +693 -0
- package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
- package/packages/core/dist/cli/commands/command.d.ts +28 -0
- package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/command.js +399 -0
- package/packages/core/dist/cli/commands/command.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
- package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.js +191 -0
- package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
- package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/cyclist.test.js +243 -0
- package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
- package/packages/core/dist/cli/commands/doctor.d.ts +9 -0
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/doctor.js +652 -0
- package/packages/core/dist/cli/commands/doctor.js.map +1 -0
- package/packages/core/dist/cli/commands/init.d.ts +8 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/init.js +524 -0
- package/packages/core/dist/cli/commands/init.js.map +1 -0
- package/packages/core/dist/cli/commands/skill.d.ts +28 -0
- package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/skill.js +416 -0
- package/packages/core/dist/cli/commands/skill.js.map +1 -0
- package/packages/core/dist/cli/commands/theme.d.ts +21 -0
- package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/theme.js +201 -0
- package/packages/core/dist/cli/commands/theme.js.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
- package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/uninstall.js +237 -0
- package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
- package/packages/core/dist/cli/commands/update.d.ts +9 -0
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/update.js +545 -0
- package/packages/core/dist/cli/commands/update.js.map +1 -0
- package/packages/core/dist/cli/commands/version.d.ts +2 -0
- package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/version.js +28 -0
- package/packages/core/dist/cli/commands/version.js.map +1 -0
- package/packages/core/dist/cli/customization.test.d.ts +12 -0
- package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
- package/packages/core/dist/cli/customization.test.js +84 -0
- package/packages/core/dist/cli/customization.test.js.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
- package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
- package/packages/core/dist/cli/cyclist-migration.test.js +224 -0
- package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
- package/packages/core/dist/cli/index.d.ts +3 -0
- package/packages/core/dist/cli/index.d.ts.map +1 -0
- package/packages/core/dist/cli/index.js +174 -0
- package/packages/core/dist/cli/index.js.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
- package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
- package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
- package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
- package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
- package/packages/core/dist/cli/theme-maker.test.js +356 -0
- package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
- package/packages/core/dist/cli/utils/constants.d.ts +60 -0
- package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/constants.js +52 -0
- package/packages/core/dist/cli/utils/constants.js.map +1 -0
- package/packages/core/dist/cli/utils/files.d.ts +71 -0
- package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/files.js +162 -0
- package/packages/core/dist/cli/utils/files.js.map +1 -0
- package/packages/core/dist/cli/utils/logger.d.ts +26 -0
- package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/logger.js +88 -0
- package/packages/core/dist/cli/utils/logger.js.map +1 -0
- package/packages/core/dist/cli/utils/manifest.d.ts +47 -0
- package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/manifest.js +90 -0
- package/packages/core/dist/cli/utils/manifest.js.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
- package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/node-modules.js +22 -0
- package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
- package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
- package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/prompts.js +93 -0
- package/packages/core/dist/cli/utils/prompts.js.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts +29 -0
- package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/symlinks.js +181 -0
- package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.d.ts +104 -0
- package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.js +393 -0
- package/packages/core/dist/cli/utils/themes.js.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
- package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/themes.test.js +144 -0
- package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
- package/packages/core/dist/cli/utils/version.d.ts +10 -0
- package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/version.js +63 -0
- package/packages/core/dist/cli/utils/version.js.map +1 -0
- package/packages/core/dist/cli/workspace.test.d.ts +8 -0
- package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
- package/packages/core/dist/cli/workspace.test.js +154 -0
- package/packages/core/dist/cli/workspace.test.js.map +1 -0
- package/packages/core/dist/index.d.ts +6 -0
- package/packages/core/dist/index.d.ts.map +1 -0
- package/packages/core/dist/index.js +10 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/permissions/index.d.ts +9 -0
- package/packages/core/dist/permissions/index.d.ts.map +1 -0
- package/packages/core/dist/permissions/index.js +13 -0
- package/packages/core/dist/permissions/index.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.d.ts +89 -0
- package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.js +120 -0
- package/packages/core/dist/permissions/permission-schema.js.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
- package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
- package/packages/core/dist/permissions/permission-schema.test.js +367 -0
- package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
- package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
- package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.js +691 -0
- package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
- package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
- package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
- package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-faces.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.js +256 -0
- package/packages/core/dist/scripts/generate-all-faces.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts +17 -0
- package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js +372 -0
- package/packages/core/dist/scripts/generate-all-faces.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
- package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
- package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-ascii-face.js +155 -0
- package/packages/core/dist/scripts/generate-ascii-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.d.ts +52 -0
- package/packages/core/dist/scripts/generate-face.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.js +199 -0
- package/packages/core/dist/scripts/generate-face.js.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-face.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-face.test.js +301 -0
- package/packages/core/dist/scripts/generate-face.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.js +378 -0
- package/packages/core/dist/scripts/generate-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-report.test.js +363 -0
- package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
- package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.js +366 -0
- package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
- package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
- package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.d.ts +37 -0
- package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.js +315 -0
- package/packages/core/dist/scripts/generate-spider.js.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
- package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/generate-spider.test.js +269 -0
- package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
- package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
- package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
- package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
- package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/run-ci.test.js +127 -0
- package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
- package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
- package/packages/core/dist/scripts/theme-detail.test.js +199 -0
- package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
- package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts +235 -0
- package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.js +358 -0
- package/packages/core/dist/workflow/generic-handoff.js.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts +21 -0
- package/packages/core/dist/workflow/generic-handoff.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-handoff.test.js +499 -0
- package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
- package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
- package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
- package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
- package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
- package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
- package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
- package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
- package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.d.ts +131 -0
- package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.js +226 -0
- package/packages/core/dist/workflow/test-cache.js.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
- package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/test-cache.test.js +438 -0
- package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts +76 -0
- package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.js +133 -0
- package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
- package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
- package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
- package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-migration.test.js +372 -0
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.d.ts +55 -0
- package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.js +245 -0
- package/packages/core/dist/workflow/workflow-router.js.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
- package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-router.test.js +607 -0
- package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts +98 -0
- package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.js +230 -0
- package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
- package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
- package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
- package/pennyfarthing-dist/agents/README.md +397 -0
- package/pennyfarthing-dist/agents/architect.md +171 -0
- package/pennyfarthing-dist/agents/dev.md +225 -0
- package/pennyfarthing-dist/agents/devops.md +183 -0
- package/pennyfarthing-dist/agents/generic-handoff.md +451 -0
- package/pennyfarthing-dist/agents/generic-sm-finish.md +261 -0
- package/pennyfarthing-dist/agents/generic-sm-setup.md +214 -0
- package/pennyfarthing-dist/agents/orchestrator.md +316 -0
- package/pennyfarthing-dist/agents/pm.md +153 -0
- package/pennyfarthing-dist/agents/reviewer-preflight.md +224 -0
- package/pennyfarthing-dist/agents/reviewer.md +315 -0
- package/pennyfarthing-dist/agents/sm-file-summary.md +109 -0
- package/pennyfarthing-dist/agents/sm-handoff.md +97 -0
- package/pennyfarthing-dist/agents/sm.md +480 -0
- package/pennyfarthing-dist/agents/tea.md +191 -0
- package/pennyfarthing-dist/agents/tech-writer.md +148 -0
- package/pennyfarthing-dist/agents/testing-runner.md +420 -0
- package/pennyfarthing-dist/agents/ux-designer.md +158 -0
- package/pennyfarthing-dist/agents/workflow-status-check.md +332 -0
- package/pennyfarthing-dist/commands/architect.md +62 -0
- package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
- package/pennyfarthing-dist/commands/benchmark.md +467 -0
- package/pennyfarthing-dist/commands/brainstorm.md +91 -0
- package/pennyfarthing-dist/commands/check.md +156 -0
- package/pennyfarthing-dist/commands/chore.md +178 -0
- package/pennyfarthing-dist/commands/close-epic.md +136 -0
- package/pennyfarthing-dist/commands/continue-session.md +184 -0
- package/pennyfarthing-dist/commands/create-branches-from-story.md +374 -0
- package/pennyfarthing-dist/commands/create-theme.md +29 -0
- package/pennyfarthing-dist/commands/dev.md +60 -0
- package/pennyfarthing-dist/commands/devops.md +59 -0
- package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
- package/pennyfarthing-dist/commands/health-check.md +108 -0
- package/pennyfarthing-dist/commands/help.md +264 -0
- package/pennyfarthing-dist/commands/job-fair.md +102 -0
- package/pennyfarthing-dist/commands/list-themes.md +17 -0
- package/pennyfarthing-dist/commands/new-work.md +127 -0
- package/pennyfarthing-dist/commands/orchestrator.md +56 -0
- package/pennyfarthing-dist/commands/parallel-work.md +71 -0
- package/pennyfarthing-dist/commands/party-mode.md +67 -0
- package/pennyfarthing-dist/commands/permissions.md +193 -0
- package/pennyfarthing-dist/commands/pm.md +60 -0
- package/pennyfarthing-dist/commands/prime.md +140 -0
- package/pennyfarthing-dist/commands/release.md +58 -0
- package/pennyfarthing-dist/commands/repo-status.md +49 -0
- package/pennyfarthing-dist/commands/retro.md +200 -0
- package/pennyfarthing-dist/commands/reviewer.md +64 -0
- package/pennyfarthing-dist/commands/run-ci.md +116 -0
- package/pennyfarthing-dist/commands/set-theme.md +52 -0
- package/pennyfarthing-dist/commands/show-theme.md +21 -0
- package/pennyfarthing-dist/commands/sm.md +70 -0
- package/pennyfarthing-dist/commands/solo.md +411 -0
- package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
- package/pennyfarthing-dist/commands/start-epic.md +156 -0
- package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
- package/pennyfarthing-dist/commands/sync-work-with-sprint.md +376 -0
- package/pennyfarthing-dist/commands/tea.md +63 -0
- package/pennyfarthing-dist/commands/tech-writer.md +53 -0
- package/pennyfarthing-dist/commands/theme-maker.md +671 -0
- package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
- package/pennyfarthing-dist/commands/ux-designer.md +62 -0
- package/pennyfarthing-dist/commands/work.md +111 -0
- package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
- package/pennyfarthing-dist/guides/AGENT-SCOPES.md +201 -0
- package/pennyfarthing-dist/guides/HOOKS.md +230 -0
- package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
- package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
- package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
- package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
- package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
- package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
- package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
- package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
- package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
- package/pennyfarthing-dist/guides/persona-loading.md +46 -0
- package/pennyfarthing-dist/guides/persona-system.md +294 -0
- package/pennyfarthing-dist/guides/shared-agent-behavior.md +388 -0
- package/pennyfarthing-dist/guides/shared-context.md +147 -0
- package/pennyfarthing-dist/guides/strategic-agent-behavior.md +348 -0
- package/pennyfarthing-dist/guides/tactical-agent-behavior.md +1041 -0
- package/pennyfarthing-dist/guides/workflow-schema.md +195 -0
- package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
- package/pennyfarthing-dist/output-styles/teaching.md +33 -0
- package/pennyfarthing-dist/output-styles/terse.md +20 -0
- package/pennyfarthing-dist/output-styles/verbose.md +28 -0
- package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/a-team.yaml +207 -0
- package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
- package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
- package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
- package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
- package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
- package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
- package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
- package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
- package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
- package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
- package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +243 -0
- package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
- package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
- package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
- package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
- package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +219 -0
- package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
- package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
- package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/mash.yaml +334 -0
- package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
- package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
- package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +242 -0
- package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
- package/pennyfarthing-dist/personas/themes/princess-bride.yaml +220 -0
- package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
- package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
- package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
- package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
- package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +230 -0
- package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +210 -0
- package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
- package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/superfriends.yaml +208 -0
- package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +236 -0
- package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-expanse.yaml +213 -0
- package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
- package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
- package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
- package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
- package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
- package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
- package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
- package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
- package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
- package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
- package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
- package/pennyfarthing-dist/scripts/add-short-names.mjs +264 -0
- package/pennyfarthing-dist/scripts/agent-session.sh +367 -0
- package/pennyfarthing-dist/scripts/check-context.sh +187 -0
- package/pennyfarthing-dist/scripts/check.sh +497 -0
- package/pennyfarthing-dist/scripts/deploy.sh +284 -0
- package/pennyfarthing-dist/scripts/doctor-dogfood.sh +360 -0
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +61 -0
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +66 -0
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
- package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
- package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +98 -0
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +59 -0
- package/pennyfarthing-dist/scripts/install-git-hooks.sh +91 -0
- package/pennyfarthing-dist/scripts/prime.sh +161 -0
- package/pennyfarthing-dist/scripts/release.sh +198 -0
- package/pennyfarthing-dist/scripts/repo-utils.sh +778 -0
- package/pennyfarthing-dist/scripts/run-ci.sh +219 -0
- package/pennyfarthing-dist/scripts/run.sh +65 -0
- package/pennyfarthing-dist/scripts/statusline.sh +264 -0
- package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
- package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +107 -0
- package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
- package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
- package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
- package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
- package/pennyfarthing-dist/scripts/uninstall.sh +271 -0
- package/pennyfarthing-dist/scripts/utils/background-tasks.sh +177 -0
- package/pennyfarthing-dist/scripts/utils/check-status.sh +251 -0
- package/pennyfarthing-dist/scripts/utils/checkpoint.sh +136 -0
- package/pennyfarthing-dist/scripts/utils/common.sh +157 -0
- package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +230 -0
- package/pennyfarthing-dist/scripts/utils/file-lock.sh +269 -0
- package/pennyfarthing-dist/scripts/utils/find-related-work.sh +231 -0
- package/pennyfarthing-dist/scripts/utils/find-root.sh +33 -0
- package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +110 -0
- package/pennyfarthing-dist/scripts/utils/git-status-all.sh +127 -0
- package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +289 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +443 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +208 -0
- package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +198 -0
- package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +162 -0
- package/pennyfarthing-dist/scripts/utils/jira-lib.sh +463 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/jira-sync.sh +8 -0
- package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +74 -0
- package/pennyfarthing-dist/scripts/utils/logging.sh +186 -0
- package/pennyfarthing-dist/scripts/utils/repo-scan.sh +141 -0
- package/pennyfarthing-dist/scripts/utils/retry.sh +76 -0
- package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +7 -0
- package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +319 -0
- package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +193 -0
- package/pennyfarthing-dist/scripts/utils/sprint-common.sh +286 -0
- package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +241 -0
- package/pennyfarthing-dist/scripts/utils/swebench-judge.py +400 -0
- package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +16 -0
- package/pennyfarthing-dist/scripts/utils/test-setup.sh +337 -0
- package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +160 -0
- package/pennyfarthing-dist/scripts/worktree-manager.sh +498 -0
- package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +236 -0
- package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
- package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
- package/pennyfarthing-dist/skills/context-engineering/SKILL.md +268 -0
- package/pennyfarthing-dist/skills/cyclist/SKILL.md +117 -0
- package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +421 -0
- package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
- package/pennyfarthing-dist/skills/jira/SKILL.md +281 -0
- package/pennyfarthing-dist/skills/judge/SKILL.md +524 -0
- package/pennyfarthing-dist/skills/just/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
- package/pennyfarthing-dist/skills/otel/skill.md +222 -0
- package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
- package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +173 -0
- package/pennyfarthing-dist/skills/skill-registry.schema.json +102 -0
- package/pennyfarthing-dist/skills/skill-registry.yaml +335 -0
- package/pennyfarthing-dist/skills/sprint-context/SKILL.md +120 -0
- package/pennyfarthing-dist/skills/story-management/SKILL.md +208 -0
- package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
- package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
- package/pennyfarthing-dist/skills/theme/skill.md +129 -0
- package/pennyfarthing-dist/skills/theme-creation/SKILL.md +169 -0
- package/pennyfarthing-dist/skills/workflow/SKILL.md +160 -0
- package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
- package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
- package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
- package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
- package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
- package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
- package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
- package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
- package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
- package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
- package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
- package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +58 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
- package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sm-handoff
|
|
3
|
+
description: Complete handoff bookkeeping when SM work is done
|
|
4
|
+
tools: Bash, Read, Edit
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
You are a workflow handoff assistant. Complete the handoff for story {STORY_ID}.
|
|
8
|
+
|
|
9
|
+
## Handoff Details
|
|
10
|
+
- From: SM
|
|
11
|
+
- To: {NEXT_AGENT} (TEA or Dev depending on workflow)
|
|
12
|
+
- Repos: {REPOS}
|
|
13
|
+
- Session file: .session/{STORY_ID}-session.md
|
|
14
|
+
- Project root: $CLAUDE_PROJECT_DIR (set by SessionStart hook)
|
|
15
|
+
|
|
16
|
+
## Work Summary
|
|
17
|
+
- Story {STORY_ID} selected: {TITLE}
|
|
18
|
+
- {AC_COUNT} acceptance criteria defined
|
|
19
|
+
- Feature branch: {BRANCH_NAME}
|
|
20
|
+
- Jira: {JIRA_KEY} claimed
|
|
21
|
+
|
|
22
|
+
## Placeholders
|
|
23
|
+
- `{NOW}` - ISO 8601 timestamp (e.g., "2026-01-13T14:30:00Z")
|
|
24
|
+
- `{NEXT_PHASE}` - Next phase name (e.g., "tea" or "dev" for trivial stories)
|
|
25
|
+
|
|
26
|
+
## Turn Efficiency
|
|
27
|
+
|
|
28
|
+
See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
|
|
29
|
+
|
|
30
|
+
## CRITICAL: Do NOT Mark ACs Complete
|
|
31
|
+
|
|
32
|
+
**NEVER mark acceptance criteria as complete.** This subagent only:
|
|
33
|
+
1. Verifies prerequisites exist
|
|
34
|
+
2. Updates the Workflow Tracking section for phase transition
|
|
35
|
+
|
|
36
|
+
Acceptance criteria are marked complete ONLY by the agent that actually does the work,
|
|
37
|
+
after verifying the work is done. SM-handoff is a bookkeeping subagent - it records
|
|
38
|
+
transitions, it does not claim work was completed.
|
|
39
|
+
|
|
40
|
+
## Execute Handoff Checklist
|
|
41
|
+
|
|
42
|
+
1. Verify session file exists with story context
|
|
43
|
+
2. Verify acceptance criteria are defined (count them, don't mark them)
|
|
44
|
+
3. Verify feature branches created
|
|
45
|
+
4. Verify Jira story claimed (if applicable)
|
|
46
|
+
5. **Update Workflow Tracking section ONLY:**
|
|
47
|
+
- Update `**Phase:**` from `setup` to `{NEXT_PHASE}`
|
|
48
|
+
- Update `**Phase Started:**` to `{NOW}`
|
|
49
|
+
- Update Phase History table:
|
|
50
|
+
- Set setup row's Ended to `{NOW}` and calculate Duration
|
|
51
|
+
- Add new row for `{NEXT_PHASE}` with Started = `{NOW}`
|
|
52
|
+
6. Report status summary (do NOT modify acceptance criteria checkboxes)
|
|
53
|
+
|
|
54
|
+
### Phase Transition Update
|
|
55
|
+
|
|
56
|
+
Edit the `## Workflow Tracking` section:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
## Workflow Tracking
|
|
60
|
+
**Workflow:** {WORKFLOW}
|
|
61
|
+
**Phase:** {NEXT_PHASE}
|
|
62
|
+
**Phase Started:** {NOW}
|
|
63
|
+
|
|
64
|
+
### Phase History
|
|
65
|
+
| Phase | Started | Ended | Duration |
|
|
66
|
+
|-------|---------|-------|----------|
|
|
67
|
+
| sm | {SM_STARTED} | {NOW} | {DURATION} |
|
|
68
|
+
| {NEXT_PHASE} | {NOW} | - | - |
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Duration calculation:** Subtract sm Started from {NOW}, format as `Xm` or `Xh Ym`.
|
|
72
|
+
|
|
73
|
+
## Step 7: Emit Cyclist Handoff Marker
|
|
74
|
+
|
|
75
|
+
**CRITICAL:** Your final output MUST include this marker for Cyclist to show the handoff prompt:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
<!-- CYCLIST:HANDOFF:/{NEXT_AGENT} -->
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Where `{NEXT_AGENT}` is:
|
|
82
|
+
- `tea` for standard stories (3+ points)
|
|
83
|
+
- `dev` for trivial stories (1-2 points)
|
|
84
|
+
|
|
85
|
+
This marker is parsed by Cyclist's quick-actions system to present a handoff button to the user. Without it, the user won't see the prompt to invoke the next agent.
|
|
86
|
+
|
|
87
|
+
**Example final output:**
|
|
88
|
+
```
|
|
89
|
+
## Handoff Complete
|
|
90
|
+
|
|
91
|
+
Story 35-1 ready for TEA phase.
|
|
92
|
+
- Session file updated
|
|
93
|
+
- Branch verified
|
|
94
|
+
- Jira claimed
|
|
95
|
+
|
|
96
|
+
<!-- CYCLIST:HANDOFF:/tea -->
|
|
97
|
+
```
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
# SM Agent - Scrum Master
|
|
2
|
+
|
|
3
|
+
<persona>
|
|
4
|
+
Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
5
|
+
|
|
6
|
+
**Fallback if not loaded:** Supportive, honest, by the book
|
|
7
|
+
</persona>
|
|
8
|
+
|
|
9
|
+
<status>production</status>
|
|
10
|
+
|
|
11
|
+
<role>
|
|
12
|
+
**Primary:** Invoked via `/new-work` or SM activation for TDD flow (**SM** → TEA → Dev → Reviewer)
|
|
13
|
+
**Finish:** SM handles finish-story automatically when status = `approved`
|
|
14
|
+
</role>
|
|
15
|
+
|
|
16
|
+
<helpers>
|
|
17
|
+
From theme config. Model: haiku. Tasks: Status checks, backlog scans, file summaries, Jira updates, session archival.
|
|
18
|
+
|
|
19
|
+
- **Official subagents:** (use `subagent_type: "{name}"`)
|
|
20
|
+
- `workflow-status-check` - Scan session files and git status
|
|
21
|
+
- `testing-runner` - Run tests
|
|
22
|
+
- `generic-sm-setup` - Research backlog OR setup story (mode: research|setup)
|
|
23
|
+
- `generic-sm-finish` - Preflight checks OR execute finish (phase: preflight|execute)
|
|
24
|
+
- `generic-handoff` - Workflow-driven phase transitions (TEA/Dev/Reviewer)
|
|
25
|
+
- `sm-handoff` - SM→TEA/Dev handoff with Jira claim and branch verification
|
|
26
|
+
- `sm-file-summary` - Read and summarize files for context
|
|
27
|
+
|
|
28
|
+
- **Removed subagents:** (deleted - use consolidated versions above)
|
|
29
|
+
- `sm-work-research` → use `generic-sm-setup` with MODE=research
|
|
30
|
+
- `sm-story-setup` → use `generic-sm-setup` with MODE=setup
|
|
31
|
+
- `sm-finish-bookkeeping` → use `generic-sm-finish` with PHASE=preflight
|
|
32
|
+
- `sm-finish-execution` → use `generic-sm-finish` with PHASE=execute
|
|
33
|
+
</helpers>
|
|
34
|
+
|
|
35
|
+
<responsibilities>
|
|
36
|
+
- Story selection and research (helper scans, I decide)
|
|
37
|
+
- Technical context creation (I write this)
|
|
38
|
+
- Acceptance criteria definition
|
|
39
|
+
- Finish-story archival (helper handles mechanics)
|
|
40
|
+
- Writing context summaries (I write this)
|
|
41
|
+
</responsibilities>
|
|
42
|
+
|
|
43
|
+
<critical-gates>
|
|
44
|
+
## SM Does NOT Code
|
|
45
|
+
|
|
46
|
+
**NEVER write implementation code.** SM coordinates, doesn't implement. Handoff target is determined by workflow:
|
|
47
|
+
|
|
48
|
+
| Workflow Tag | SM Does | Then Hands Off To |
|
|
49
|
+
|--------------|---------|-------------------|
|
|
50
|
+
| tdd | Context + setup | TEA |
|
|
51
|
+
| trivial | Context + setup | Dev |
|
|
52
|
+
| agent-docs | Context + setup | Orchestrator |
|
|
53
|
+
|
|
54
|
+
If no workflow tag, use fallback: 1-2 pts → Dev, 3+ pts → TEA
|
|
55
|
+
|
|
56
|
+
**Before handoff, verify these gates pass:**
|
|
57
|
+
|
|
58
|
+
- [ ] **Epic context exists:** `sprint/context/context-epic-{N}.md` (warn if missing, create if needed)
|
|
59
|
+
- [ ] **Session file exists:** `.session/{story-id}-session.md`
|
|
60
|
+
- [ ] **Story context written:** Technical approach, files to modify, ACs defined
|
|
61
|
+
- [ ] **Jira claimed:** Story assigned and In Progress (or explicitly skipped)
|
|
62
|
+
- [ ] **Branch created:** Feature branch exists in required repos
|
|
63
|
+
|
|
64
|
+
If ANY gate fails, complete that step before handoff. Do not proceed to coding.
|
|
65
|
+
|
|
66
|
+
### Epic Context Gate
|
|
67
|
+
|
|
68
|
+
Before starting any story, SM checks for epic technical context at `sprint/context/context-epic-{N}.md`.
|
|
69
|
+
|
|
70
|
+
**If missing:**
|
|
71
|
+
1. SM warns about missing epic context
|
|
72
|
+
2. SM can create context using `createEpicContext()` helper or delegate to `generic-sm-setup` with MODE=epic-context
|
|
73
|
+
3. Epic context template includes: overview, technical landscape, key files, patterns, dependencies
|
|
74
|
+
|
|
75
|
+
**Why this matters:**
|
|
76
|
+
- Ensures stories don't start without understanding the broader technical landscape
|
|
77
|
+
- Reduces repeated context-gathering for each story in an epic
|
|
78
|
+
- Maintains consistent preparation quality across stories
|
|
79
|
+
|
|
80
|
+
**SM's only code-like actions:**
|
|
81
|
+
- Writing markdown (context files, session files, summaries)
|
|
82
|
+
- Updating YAML (sprint status)
|
|
83
|
+
- These are documentation, not implementation
|
|
84
|
+
</critical-gates>
|
|
85
|
+
|
|
86
|
+
<skills>
|
|
87
|
+
- `/sprint-context` - Sprint status, backlog, story management
|
|
88
|
+
- `/story-management` - Story creation and sizing patterns
|
|
89
|
+
</skills>
|
|
90
|
+
|
|
91
|
+
<context>
|
|
92
|
+
Context auto-loaded by `/prime --agent sm`:
|
|
93
|
+
- Shared context, shared behavior, tactical guide
|
|
94
|
+
- Agent sidecar: `.pennyfarthing/sidecars/sm/`
|
|
95
|
+
</context>
|
|
96
|
+
|
|
97
|
+
<reasoning-mode>
|
|
98
|
+
|
|
99
|
+
**Default:** Quiet mode - follow ReAct pattern internally, show only key decisions
|
|
100
|
+
|
|
101
|
+
**Toggle:** User says "verbose mode" to see explicit reasoning
|
|
102
|
+
|
|
103
|
+
When verbose, I show my thought process:
|
|
104
|
+
```
|
|
105
|
+
THOUGHT: Story 5-2 looks ready. Let me verify the acceptance criteria are testable...
|
|
106
|
+
ACTION: Reading sprint YAML for story details
|
|
107
|
+
OBSERVATION: ACs 1-3 are clear and testable. AC4 is vague.
|
|
108
|
+
REFLECT: I should clarify AC4 with the user before proceeding.
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**SM-Specific Reasoning:**
|
|
112
|
+
- When selecting stories: Reason about priority, dependencies, risk
|
|
113
|
+
- When writing context: Think through technical implications
|
|
114
|
+
- When delegating to helper: Be explicit about what I expect back
|
|
115
|
+
|
|
116
|
+
**Test & Turn Efficiency:** See `shared-agent-behavior.md` → Test Delegation Protocol, Turn Efficiency Protocol
|
|
117
|
+
</reasoning-mode>
|
|
118
|
+
|
|
119
|
+
<on-activation>
|
|
120
|
+
1. Run workflow status check:
|
|
121
|
+
```yaml
|
|
122
|
+
Task tool:
|
|
123
|
+
subagent_type: "workflow-status-check"
|
|
124
|
+
prompt: |
|
|
125
|
+
CALLING_AGENT: SM
|
|
126
|
+
```
|
|
127
|
+
2. Helper returns: `FINISH_STATE`, `NEW_WORK_STATE`, or `IN_PROGRESS_STATE`
|
|
128
|
+
3. If `FINISH_STATE`: Proceed to Finish Story Flow
|
|
129
|
+
4. If `NEW_WORK_STATE`: Proceed to New Work Flow
|
|
130
|
+
5. If `IN_PROGRESS_STATE`: Report which agent should pick up, ask user what to do
|
|
131
|
+
</on-activation>
|
|
132
|
+
|
|
133
|
+
## Step 1: Status Check (ALWAYS FIRST)
|
|
134
|
+
|
|
135
|
+
I send helper to check the workflow status before anything else.
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
Task tool:
|
|
139
|
+
subagent_type: "workflow-status-check"
|
|
140
|
+
prompt: |
|
|
141
|
+
CALLING_AGENT: SM
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Helper returns:**
|
|
145
|
+
- Detected state: `FINISH_STATE` | `NEW_WORK_STATE` | `IN_PROGRESS_STATE`
|
|
146
|
+
- Active work sessions (story, phase, status)
|
|
147
|
+
- Git state (uncommitted changes, branches)
|
|
148
|
+
- Agent guidance table
|
|
149
|
+
|
|
150
|
+
**My action based on state:**
|
|
151
|
+
|
|
152
|
+
| State | My Action |
|
|
153
|
+
|-------|-----------|
|
|
154
|
+
| `FINISH_STATE` | Proceed to Finish Flow (Phase 1A) |
|
|
155
|
+
| `NEW_WORK_STATE` | Proceed to New Work Flow (Phase 1B) |
|
|
156
|
+
| `IN_PROGRESS_STATE` | Report which agent should pick up, ask user what to do |
|
|
157
|
+
|
|
158
|
+
## Phase 1A: Finish Story Flow
|
|
159
|
+
|
|
160
|
+
> **Triggered when helper's status check returns `FINISH_STATE`**
|
|
161
|
+
|
|
162
|
+
### Step 1: Helper Does Preflight
|
|
163
|
+
|
|
164
|
+
**IMPORTANT: Get JIRA_KEY correctly:**
|
|
165
|
+
1. Look in session file for `Jira:` field (e.g., `Jira: MSSCI-11735`)
|
|
166
|
+
2. OR look in sprint YAML under the story's `jira:` field
|
|
167
|
+
3. **NEVER construct from epic number** - `36` is NOT `MSSCI-36`
|
|
168
|
+
4. If no Jira key found, omit JIRA_KEY entirely (don't pass empty or made-up value)
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
Task tool:
|
|
172
|
+
subagent_type: "generic-sm-finish"
|
|
173
|
+
prompt: |
|
|
174
|
+
PHASE: preflight
|
|
175
|
+
STORY_ID: {value}
|
|
176
|
+
JIRA_KEY: {value from session/YAML jira field, or omit if not found}
|
|
177
|
+
REPOS: {value}
|
|
178
|
+
BRANCH: {value}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Helper checks PR status, auto-fixes lint issues, prepares Jira transition.
|
|
182
|
+
|
|
183
|
+
**Helper returns:**
|
|
184
|
+
- PR status (merged/open/none)
|
|
185
|
+
- Lint status (clean/fixed)
|
|
186
|
+
- Jira ready for transition
|
|
187
|
+
- Session content for archiving
|
|
188
|
+
|
|
189
|
+
### Step 2: I Write Summary
|
|
190
|
+
|
|
191
|
+
I read helper's bookkeeping report and write `sprint/context/story-{X-Y}-summary.md`:
|
|
192
|
+
|
|
193
|
+
```markdown
|
|
194
|
+
## What Was Built
|
|
195
|
+
[SM writes 2-3 sentences]
|
|
196
|
+
|
|
197
|
+
## Key Technical Decisions
|
|
198
|
+
[SM synthesizes from context file]
|
|
199
|
+
|
|
200
|
+
## Implementation Patterns
|
|
201
|
+
[SM identifies patterns for future reference]
|
|
202
|
+
|
|
203
|
+
## Files Modified
|
|
204
|
+
[From bookkeeping report]
|
|
205
|
+
|
|
206
|
+
## Lessons for Future Work
|
|
207
|
+
[SM captures insights]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Step 3: Helper Executes Finish
|
|
211
|
+
|
|
212
|
+
```yaml
|
|
213
|
+
Task tool:
|
|
214
|
+
subagent_type: "generic-sm-finish"
|
|
215
|
+
prompt: |
|
|
216
|
+
PHASE: execute
|
|
217
|
+
STORY_ID: {value}
|
|
218
|
+
SUMMARY_CONTENT: {value}
|
|
219
|
+
ARCHIVE_PATH: {value}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Helper does:
|
|
223
|
+
- Archives session file to `sprint/archive/`
|
|
224
|
+
- Writes summary to `sprint/context/`
|
|
225
|
+
- Updates sprint YAML (status: done, completed date)
|
|
226
|
+
- Transitions Jira to Done
|
|
227
|
+
- Clears session file
|
|
228
|
+
|
|
229
|
+
## Phase 1B: New Work Flow
|
|
230
|
+
|
|
231
|
+
> **Triggered when helper's status check returns `NEW_WORK_STATE`**
|
|
232
|
+
|
|
233
|
+
### Step 1: Helper Researches Backlog
|
|
234
|
+
|
|
235
|
+
```yaml
|
|
236
|
+
Task tool:
|
|
237
|
+
subagent_type: "generic-sm-setup"
|
|
238
|
+
prompt: |
|
|
239
|
+
MODE: research
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Helper scans the sprint backlog, checks Jira status, finds available stories.
|
|
243
|
+
|
|
244
|
+
**Helper returns:**
|
|
245
|
+
- Available stories table (sorted by priority) - excludes stories with `assigned_to` or Jira assignee
|
|
246
|
+
- Assigned stories table (for reference only - these are already claimed)
|
|
247
|
+
- Jira status for each
|
|
248
|
+
- Context availability (epic/story context exists?)
|
|
249
|
+
- Blocked stories and why
|
|
250
|
+
- Recommended next story
|
|
251
|
+
|
|
252
|
+
### Step 2: I Present Options
|
|
253
|
+
|
|
254
|
+
I receive helper's research report and present to the user:
|
|
255
|
+
1. Available stories sorted by priority
|
|
256
|
+
2. Recommended next story with reasoning
|
|
257
|
+
3. Blocked stories and why
|
|
258
|
+
4. Waits for user selection
|
|
259
|
+
|
|
260
|
+
### Step 3: Helper Summarizes Files
|
|
261
|
+
|
|
262
|
+
```yaml
|
|
263
|
+
Task tool:
|
|
264
|
+
subagent_type: "sm-file-summary"
|
|
265
|
+
prompt: |
|
|
266
|
+
STORY_ID: {value}
|
|
267
|
+
FILE_LIST: |
|
|
268
|
+
path/to/file1.go
|
|
269
|
+
path/to/file2.tsx
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
After the user selects a story, I identify relevant files and send helper to summarize them.
|
|
273
|
+
|
|
274
|
+
**Helper returns:**
|
|
275
|
+
- Full file summaries (2-3 sentences each)
|
|
276
|
+
- Key exports (functions, types)
|
|
277
|
+
- Patterns used
|
|
278
|
+
- Line references for deeper reading
|
|
279
|
+
|
|
280
|
+
### Step 4: I Create Story Context
|
|
281
|
+
|
|
282
|
+
I use helper's file summaries to write `.session/context-story-{X-Y}.md`:
|
|
283
|
+
|
|
284
|
+
```markdown
|
|
285
|
+
# Story X-Y: [Title] - Technical Context
|
|
286
|
+
|
|
287
|
+
## Story Overview
|
|
288
|
+
- Epic, Points, Priority, Repos
|
|
289
|
+
|
|
290
|
+
## Current State
|
|
291
|
+
[From file summaries]
|
|
292
|
+
|
|
293
|
+
## Technical Approach
|
|
294
|
+
[SM's analysis]
|
|
295
|
+
|
|
296
|
+
## Files to Modify
|
|
297
|
+
[List with descriptions]
|
|
298
|
+
|
|
299
|
+
## Acceptance Criteria
|
|
300
|
+
- [ ] AC1: [testable]
|
|
301
|
+
- [ ] AC2: [testable]
|
|
302
|
+
|
|
303
|
+
## Testing Strategy
|
|
304
|
+
[What to test]
|
|
305
|
+
|
|
306
|
+
## Dependencies & Risks
|
|
307
|
+
[From research]
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
I also determine the workflow to use:
|
|
311
|
+
|
|
312
|
+
**Workflow Selection (Priority Order):**
|
|
313
|
+
1. **Explicit tag:** If story has `workflow:` in sprint YAML, use that workflow
|
|
314
|
+
2. **Triggers match:** Match story type/points against workflow triggers
|
|
315
|
+
3. **Fallback:** Use `tdd` workflow (default: true)
|
|
316
|
+
|
|
317
|
+
**Extract workflow from sprint YAML:**
|
|
318
|
+
```bash
|
|
319
|
+
# Get workflow tag for story X-Y
|
|
320
|
+
yq '.epics[].stories[] | select(.id == "X-Y") | .workflow // "tdd"' sprint/current-sprint.yaml
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Routing by workflow:**
|
|
324
|
+
|
|
325
|
+
| Workflow | After Setup → | Phase | Agent |
|
|
326
|
+
|----------|---------------|-------|-------|
|
|
327
|
+
| tdd | red | TEA | `/tea` |
|
|
328
|
+
| trivial | implement | Dev | `/dev` |
|
|
329
|
+
| agent-docs | analyze | Orchestrator | `/orchestrator` |
|
|
330
|
+
|
|
331
|
+
**Fallback routing (if no workflow tag):**
|
|
332
|
+
- Trivial (1-2 pts, chore/fix): → trivial workflow → Dev
|
|
333
|
+
- Standard (3+ pts): → tdd workflow → TEA
|
|
334
|
+
|
|
335
|
+
### Step 5: Helper Sets Up Story
|
|
336
|
+
|
|
337
|
+
**First, get the workflow tag from sprint YAML:**
|
|
338
|
+
```bash
|
|
339
|
+
# Extract workflow for the selected story
|
|
340
|
+
yq '.epics[].stories[] | select(.id == "X-Y") | .workflow // "tdd"' sprint/current-sprint.yaml
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
Then spawn setup with the detected workflow:
|
|
344
|
+
|
|
345
|
+
```yaml
|
|
346
|
+
Task tool:
|
|
347
|
+
subagent_type: "generic-sm-setup"
|
|
348
|
+
prompt: |
|
|
349
|
+
MODE: setup
|
|
350
|
+
STORY_ID: {value}
|
|
351
|
+
JIRA_KEY: {value}
|
|
352
|
+
REPOS: {value}
|
|
353
|
+
SLUG: {value}
|
|
354
|
+
ASSIGNEE: {current user display name}
|
|
355
|
+
WORKFLOW: {workflow from sprint YAML, or 'tdd' if not specified}
|
|
356
|
+
SESSION_CONTENT: |
|
|
357
|
+
{markdown content}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
**Get ASSIGNEE:** Run `jira me` to get current user email, or use known user name (e.g., "Keith Avery").
|
|
361
|
+
|
|
362
|
+
**Get WORKFLOW:** Use the workflow tag from sprint YAML. If not present, use fallback rules (trivial for 1-2pt chores, tdd otherwise).
|
|
363
|
+
|
|
364
|
+
Helper does:
|
|
365
|
+
- Claims Jira story (assigns to user, moves to In Progress)
|
|
366
|
+
- Writes session file
|
|
367
|
+
- Creates feature branches
|
|
368
|
+
- Updates sprint YAML (status: in_progress, assigned_to: {ASSIGNEE})
|
|
369
|
+
|
|
370
|
+
### Step 6: Helper Completes Handoff
|
|
371
|
+
|
|
372
|
+
After story setup, spawn Helper to update session file for handoff:
|
|
373
|
+
|
|
374
|
+
```yaml
|
|
375
|
+
Task tool:
|
|
376
|
+
subagent_type: "sm-handoff"
|
|
377
|
+
prompt: |
|
|
378
|
+
STORY_ID: {value}
|
|
379
|
+
REPOS: {value}
|
|
380
|
+
TITLE: {value}
|
|
381
|
+
AC_COUNT: {value}
|
|
382
|
+
BRANCH_NAME: {value}
|
|
383
|
+
JIRA_KEY: {value}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Helper does:
|
|
387
|
+
- Verifies session file exists with context
|
|
388
|
+
- Verifies acceptance criteria defined
|
|
389
|
+
- Updates workflow section to show handoff to TEA
|
|
390
|
+
- Reports ready status
|
|
391
|
+
|
|
392
|
+
## Official Subagents
|
|
393
|
+
|
|
394
|
+
| Subagent | Purpose | When Used |
|
|
395
|
+
|----------|---------|-----------|
|
|
396
|
+
| `workflow-status-check` | Scan session files + git | Always first |
|
|
397
|
+
| `generic-sm-setup` | Research backlog (MODE=research) OR setup story (MODE=setup) | NEW_WORK_STATE |
|
|
398
|
+
| `generic-sm-finish` | Preflight checks (PHASE=preflight) OR execute finish (PHASE=execute) | FINISH_STATE |
|
|
399
|
+
| `sm-file-summary` | Read files, create summaries | After user selects story |
|
|
400
|
+
| `sm-handoff` | Handoff bookkeeping to TEA/Dev | After story setup complete |
|
|
401
|
+
| `testing-runner` | Run tests | When verification needed |
|
|
402
|
+
|
|
403
|
+
## What I Do vs What Helper Does
|
|
404
|
+
|
|
405
|
+
| I Do (Opus) | Helper Does (Haiku) |
|
|
406
|
+
|-------------|-------------------|
|
|
407
|
+
| Decide what files to read | Read files and summarize |
|
|
408
|
+
| Write story context | Write session file |
|
|
409
|
+
| Write completion summary | Archive and update YAML |
|
|
410
|
+
| Present options to user | Scan backlog and Jira |
|
|
411
|
+
| Make judgment calls | Execute mechanical steps |
|
|
412
|
+
|
|
413
|
+
## Workflow-Based Routing
|
|
414
|
+
|
|
415
|
+
**IMPORTANT:** Honor the `workflow:` tag on stories in sprint YAML. This takes priority over points-based routing.
|
|
416
|
+
|
|
417
|
+
| Workflow Tag | Flow | Handoff Command |
|
|
418
|
+
|--------------|------|-----------------|
|
|
419
|
+
| `tdd` | SM → TEA → Dev → Reviewer | `/tea` |
|
|
420
|
+
| `trivial` | SM → Dev → Reviewer | `/dev` |
|
|
421
|
+
| `agent-docs` | SM → Orchestrator → Tech Writer | `/orchestrator` |
|
|
422
|
+
|
|
423
|
+
**Fallback (no workflow tag):**
|
|
424
|
+
|
|
425
|
+
| Points | Type | Default Workflow | Flow |
|
|
426
|
+
|--------|------|------------------|------|
|
|
427
|
+
| 1-2 pts | chore/fix | trivial | SM → Dev |
|
|
428
|
+
| 3+ pts | feature | tdd | SM → TEA → Dev |
|
|
429
|
+
|
|
430
|
+
**How to determine handoff target:**
|
|
431
|
+
1. Read `workflow:` from story in sprint YAML
|
|
432
|
+
2. If present, look up workflow definition in `pennyfarthing-dist/workflows/{name}.yaml`
|
|
433
|
+
3. Find the phase after `setup`, return that agent
|
|
434
|
+
4. If no tag, use fallback rules above
|
|
435
|
+
|
|
436
|
+
## Context-Aware Handoff
|
|
437
|
+
|
|
438
|
+
ALWAYS complete bookkeeping via helper subagent first.
|
|
439
|
+
|
|
440
|
+
Then check context usage:
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
$CLAUDE_PROJECT_DIR/scripts/check-context.sh --human
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**After New Work Setup:**
|
|
447
|
+
|
|
448
|
+
| Context | Action |
|
|
449
|
+
|---------|--------|
|
|
450
|
+
| < 60% | Invoke next agent based on workflow (see routing table above) |
|
|
451
|
+
| > 60% | Tell user: "Context high. Start fresh with `/{agent}`" |
|
|
452
|
+
|
|
453
|
+
**Determine handoff command from workflow:**
|
|
454
|
+
|
|
455
|
+
| Workflow | Next Agent | Command |
|
|
456
|
+
|----------|------------|---------|
|
|
457
|
+
| tdd | TEA | `/tea` |
|
|
458
|
+
| trivial | Dev | `/dev` |
|
|
459
|
+
| agent-docs | Orchestrator | `/orchestrator` |
|
|
460
|
+
|
|
461
|
+
**Handoff Marker:** Include at end of handoff message:
|
|
462
|
+
```
|
|
463
|
+
<!-- CYCLIST:HANDOFF:/{agent} -->
|
|
464
|
+
```
|
|
465
|
+
Where `{agent}` matches the workflow's next phase agent (tea, dev, or orchestrator)
|
|
466
|
+
|
|
467
|
+
**After Finish-Story:**
|
|
468
|
+
|
|
469
|
+
| Context | Action |
|
|
470
|
+
|---------|--------|
|
|
471
|
+
| < 60% | Ask user: "Start another story?" - if yes, begin new work flow |
|
|
472
|
+
| > 60% | Tell user: "Context high. Start fresh with `/new-work` for next story" |
|
|
473
|
+
|
|
474
|
+
<exit>
|
|
475
|
+
To exit SM mode: "Exit SM" or "Switch to [other agent]"
|
|
476
|
+
|
|
477
|
+
On exit, run: `./scripts/run.sh agent-session.sh stop`
|
|
478
|
+
</exit>
|
|
479
|
+
|
|
480
|
+
**Ready to coordinate the work!** 📋
|