@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,488 @@
|
|
|
1
|
+
# Helper Delegation Pattern
|
|
2
|
+
|
|
3
|
+
**Pattern Type:** Strategic-to-Tactical Delegation
|
|
4
|
+
**Agents Involved:** Opus (strategic), Haiku (mechanical)
|
|
5
|
+
**Coordination Mechanism:** Task tool with `subagent_type`
|
|
6
|
+
|
|
7
|
+
## Problem Statement
|
|
8
|
+
|
|
9
|
+
AI agents face a fundamental tension between strategic reasoning and mechanical execution:
|
|
10
|
+
|
|
11
|
+
1. **Context Waste:** Opus-level models burn expensive context on mechanical tasks (git commands, file scanning, session updates)
|
|
12
|
+
2. **Instruction Drift:** Agents tend to ignore multi-step markdown instructions during handoffs, leading to incomplete state updates
|
|
13
|
+
3. **Reliability Gap:** Strategic agents make creative decisions well but may skip critical mechanical steps
|
|
14
|
+
4. **Cost Inefficiency:** Using expensive models for simple, deterministic tasks is wasteful
|
|
15
|
+
|
|
16
|
+
Without delegation, agents may:
|
|
17
|
+
- Forget to update session files during handoffs
|
|
18
|
+
- Skip verification steps (tests, lint, git status)
|
|
19
|
+
- Burn context on repetitive scanning operations
|
|
20
|
+
- Make mechanical errors that a simpler, focused agent wouldn't
|
|
21
|
+
|
|
22
|
+
## Solution
|
|
23
|
+
|
|
24
|
+
Delegate mechanical work to **Haiku subagents** via Claude Code's Task tool. This creates a two-tier architecture:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Opus Agent (strategic)
|
|
28
|
+
│
|
|
29
|
+
├── Makes decisions, analyzes problems, writes code
|
|
30
|
+
│
|
|
31
|
+
└── Delegates mechanical work via Task tool
|
|
32
|
+
│
|
|
33
|
+
├── workflow-status-check (state detection)
|
|
34
|
+
├── generic-sm-setup (research backlog or setup story)
|
|
35
|
+
├── generic-sm-finish (preflight checks or execute finish)
|
|
36
|
+
├── sm-handoff (SM→TEA/Dev with Jira/branch verification)
|
|
37
|
+
├── generic-handoff (TEA/Dev/Reviewer phase transitions)
|
|
38
|
+
├── reviewer-preflight (test/lint data gathering)
|
|
39
|
+
└── testing-runner (test execution)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The key insight: **Make critical behaviors AUTOMATIC via subagent delegation** rather than relying on agents to follow markdown instructions.
|
|
43
|
+
|
|
44
|
+
## State Diagram
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
48
|
+
│ HELPER DELEGATION FLOW │
|
|
49
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
50
|
+
|
|
51
|
+
┌──────────────────┐
|
|
52
|
+
│ Opus Agent │
|
|
53
|
+
│ (strategic) │
|
|
54
|
+
└────────┬─────────┘
|
|
55
|
+
│
|
|
56
|
+
│ Task tool invocation
|
|
57
|
+
│ subagent_type: "workflow-status-check"
|
|
58
|
+
│
|
|
59
|
+
▼
|
|
60
|
+
┌──────────────────┐
|
|
61
|
+
│ Haiku Subagent │
|
|
62
|
+
│ (mechanical) │
|
|
63
|
+
└────────┬─────────┘
|
|
64
|
+
│
|
|
65
|
+
│ Executes bash, reads files,
|
|
66
|
+
│ updates session, returns report
|
|
67
|
+
│
|
|
68
|
+
▼
|
|
69
|
+
┌──────────────────┐
|
|
70
|
+
│ Structured │
|
|
71
|
+
│ Markdown Report │
|
|
72
|
+
└────────┬─────────┘
|
|
73
|
+
│
|
|
74
|
+
│ Opus receives result,
|
|
75
|
+
│ continues strategic work
|
|
76
|
+
│
|
|
77
|
+
▼
|
|
78
|
+
┌──────────────────┐
|
|
79
|
+
│ Opus Agent │
|
|
80
|
+
│ (continues) │
|
|
81
|
+
└──────────────────┘
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Delegation Categories
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
88
|
+
│ CATEGORY │ SUBAGENT │ PURPOSE │
|
|
89
|
+
├───────────────────┼────────────────────────┼────────────────────────────┤
|
|
90
|
+
│ State Detection │ workflow-status-check │ Scan files, report state │
|
|
91
|
+
├───────────────────┼────────────────────────┼────────────────────────────┤
|
|
92
|
+
│ Setup/Init │ generic-sm-setup │ Research or setup (MODE) │
|
|
93
|
+
│ │ sm-handoff │ SM→TEA/Dev with Jira/branch│
|
|
94
|
+
├───────────────────┼────────────────────────┼────────────────────────────┤
|
|
95
|
+
│ Phase Handoff │ generic-handoff │ TEA/Dev/Reviewer transitions│
|
|
96
|
+
├───────────────────┼────────────────────────┼────────────────────────────┤
|
|
97
|
+
│ Verification │ reviewer-preflight │ Gather facts before review │
|
|
98
|
+
│ │ testing-runner │ Execute tests, report │
|
|
99
|
+
├───────────────────┼────────────────────────┼────────────────────────────┤
|
|
100
|
+
│ Finish/Cleanup │ generic-sm-finish │ Preflight or execute (PHASE)│
|
|
101
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Implementation
|
|
105
|
+
|
|
106
|
+
### Invocation Pattern
|
|
107
|
+
|
|
108
|
+
Use Claude Code's Task tool with the `subagent_type` parameter:
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
Task tool:
|
|
112
|
+
subagent_type: "workflow-status-check"
|
|
113
|
+
model: "haiku" # Optional, defaults to haiku
|
|
114
|
+
description: "Check workflow state"
|
|
115
|
+
prompt: |
|
|
116
|
+
CALLING_AGENT: SM
|
|
117
|
+
PROJECT_ROOT: $CLAUDE_PROJECT_DIR
|
|
118
|
+
|
|
119
|
+
Scan .session files and git status to determine workflow state.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Placeholder Substitution
|
|
123
|
+
|
|
124
|
+
Subagent definitions use placeholders that the calling agent fills:
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
# Subagent Definition (.pennyfarthing/agents/tea-handoff.md)
|
|
128
|
+
---
|
|
129
|
+
name: tea-handoff
|
|
130
|
+
tools: Bash, Read, Edit, Grep
|
|
131
|
+
model: haiku
|
|
132
|
+
---
|
|
133
|
+
You are a workflow handoff assistant for story {STORY_ID}.
|
|
134
|
+
|
|
135
|
+
Session file: .session/{STORY_ID}-session.md
|
|
136
|
+
Test files: {TEST_FILE_LIST}
|
|
137
|
+
Failing count: {FAILING_COUNT}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
When invoking:
|
|
141
|
+
```yaml
|
|
142
|
+
Task tool:
|
|
143
|
+
subagent_type: "tea-handoff"
|
|
144
|
+
prompt: |
|
|
145
|
+
STORY_ID: 5-2
|
|
146
|
+
TEST_FILE_LIST: internal/service/feature_test.go
|
|
147
|
+
FAILING_COUNT: 4
|
|
148
|
+
PASSING_COUNT: 0
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Subagent Definition Structure
|
|
152
|
+
|
|
153
|
+
Each subagent follows this template (see `agents/*.md`):
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
---
|
|
157
|
+
name: subagent-name
|
|
158
|
+
description: One-line description
|
|
159
|
+
tools: Bash, Read, Edit, Grep # Limited tool set
|
|
160
|
+
model: haiku # Fast, cheap model
|
|
161
|
+
---
|
|
162
|
+
You are a [role] assistant. [Brief purpose].
|
|
163
|
+
|
|
164
|
+
## Placeholders
|
|
165
|
+
- `{PLACEHOLDER}` - Description
|
|
166
|
+
|
|
167
|
+
## Project Root
|
|
168
|
+
$CLAUDE_PROJECT_DIR (set by SessionStart hook)
|
|
169
|
+
|
|
170
|
+
## Step 1: [First Action]
|
|
171
|
+
```bash
|
|
172
|
+
# Bash commands with placeholders
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Step 2: [Second Action]
|
|
176
|
+
[More steps...]
|
|
177
|
+
|
|
178
|
+
## Output Format
|
|
179
|
+
```markdown
|
|
180
|
+
## [Report Title]
|
|
181
|
+
[Structured output template]
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Error Recovery
|
|
185
|
+
[Retry pattern and escalation format]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Real Example: workflow-status-check
|
|
189
|
+
|
|
190
|
+
**Definition** (from `agents/workflow-status-check.md:14-45`):
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Step 1: Scan Session Files
|
|
194
|
+
ls -la .session/*-session.md 2>/dev/null
|
|
195
|
+
|
|
196
|
+
for f in .session/*-session.md; do
|
|
197
|
+
[ -f "$f" ] && head -50 "$f"
|
|
198
|
+
done
|
|
199
|
+
|
|
200
|
+
# Extract: Story ID, Phase, Status, Branch, Jira key
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**State Determination** (lines 89-100):
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
Rules applied in order:
|
|
207
|
+
1. MISSING_EPIC_CONTEXT: No epic context AND no sessions
|
|
208
|
+
2. FINISH_STATE: Phase=approved OR (Phase=review AND Status=approved)
|
|
209
|
+
3. NEW_WORK_STATE: No sessions AND no in_progress stories
|
|
210
|
+
4. IN_PROGRESS_STATE: Session exists with active phase
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Output** (lines 129-183):
|
|
214
|
+
|
|
215
|
+
```markdown
|
|
216
|
+
## Workflow Status Report
|
|
217
|
+
|
|
218
|
+
### Detected State
|
|
219
|
+
**{STATE}**
|
|
220
|
+
|
|
221
|
+
### Active Work Sessions
|
|
222
|
+
| Story | Phase | Status | Days Active |
|
|
223
|
+
|-------|-------|--------|-------------|
|
|
224
|
+
|
|
225
|
+
### Agent Guidance
|
|
226
|
+
**For {CALLING_AGENT}:** {specific action}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Real Example: tea-handoff
|
|
230
|
+
|
|
231
|
+
**Pre-flight Verification** (from `agents/tea-handoff.md:29-40`):
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
# Check TEA Assessment exists
|
|
235
|
+
grep -q "## TEA Assessment" .session/{STORY_ID}-session.md
|
|
236
|
+
# If NOT found: STOP
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Subagent-to-Subagent Delegation** (lines 42-67):
|
|
240
|
+
|
|
241
|
+
```yaml
|
|
242
|
+
# tea-handoff spawns testing-runner for verification
|
|
243
|
+
subagent_type: "general-purpose"
|
|
244
|
+
model: "haiku"
|
|
245
|
+
prompt: |
|
|
246
|
+
Run tests and report results.
|
|
247
|
+
Run ID: {STORY_ID}-tea
|
|
248
|
+
Context: Verify tests are RED
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Session Update** (lines 79-92):
|
|
252
|
+
|
|
253
|
+
```markdown
|
|
254
|
+
1. Read current session file
|
|
255
|
+
2. Add "TEA Assessment" section
|
|
256
|
+
3. Mark workflow checkbox complete
|
|
257
|
+
4. Add log entry: "Tests are RED. Ready for Dev."
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Result Handling
|
|
261
|
+
|
|
262
|
+
Subagents return structured markdown that the calling Opus agent parses:
|
|
263
|
+
|
|
264
|
+
```markdown
|
|
265
|
+
## Pre-Flight Report: Story 5-2
|
|
266
|
+
|
|
267
|
+
### Test Results
|
|
268
|
+
| Repo | Passed | Failed | Status |
|
|
269
|
+
|------|--------|--------|--------|
|
|
270
|
+
| API | 0 | 4 | RED |
|
|
271
|
+
|
|
272
|
+
### Readiness
|
|
273
|
+
**Ready for Dev:** Yes
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
The Opus agent reads this report and decides next steps—it doesn't re-execute the mechanical work.
|
|
277
|
+
|
|
278
|
+
## When to Use
|
|
279
|
+
|
|
280
|
+
### Delegate When:
|
|
281
|
+
|
|
282
|
+
| Scenario | Subagent | Why |
|
|
283
|
+
|----------|----------|-----|
|
|
284
|
+
| Determining workflow state | `workflow-status-check` | Scanning files is mechanical |
|
|
285
|
+
| Creating branches/sessions | `generic-sm-setup MODE=setup` | Git operations are deterministic |
|
|
286
|
+
| Verifying test state | `testing-runner` | Test execution is mechanical |
|
|
287
|
+
| Updating session files | `generic-handoff` | State updates must be reliable |
|
|
288
|
+
| Gathering review data | `reviewer-preflight` | Fact-finding, not judgment |
|
|
289
|
+
| Sprint file updates | `generic-sm-finish` | Archiving is mechanical |
|
|
290
|
+
|
|
291
|
+
### Don't Delegate When:
|
|
292
|
+
|
|
293
|
+
| Scenario | Why Keep in Opus |
|
|
294
|
+
|----------|------------------|
|
|
295
|
+
| Making architectural decisions | Requires strategic reasoning |
|
|
296
|
+
| Writing code/tests | Creative work needs full context |
|
|
297
|
+
| Code review judgment | Adversarial analysis is strategic |
|
|
298
|
+
| User interaction decisions | Context-dependent choices |
|
|
299
|
+
| Error diagnosis | May need creative problem solving |
|
|
300
|
+
|
|
301
|
+
### Decision Heuristic
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
Is the task...
|
|
305
|
+
├── Deterministic (same input → same output)?
|
|
306
|
+
│ └── YES → Delegate
|
|
307
|
+
├── Requiring judgment or creativity?
|
|
308
|
+
│ └── NO → Keep in Opus
|
|
309
|
+
├── Repetitive across sessions?
|
|
310
|
+
│ └── YES → Delegate
|
|
311
|
+
├── Involving file scanning/git operations?
|
|
312
|
+
│ └── YES → Delegate
|
|
313
|
+
└── Making decisions that affect flow?
|
|
314
|
+
└── Keep in Opus
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## Error Recovery
|
|
318
|
+
|
|
319
|
+
### Subagent Retry Pattern
|
|
320
|
+
|
|
321
|
+
From `agents/generic-sm-setup.md` (Error Recovery section):
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
1. Log the failure: Note which step failed and why
|
|
325
|
+
2. Diagnose: What specifically went wrong?
|
|
326
|
+
3. Adjust: Try a different approach (max 2 retries)
|
|
327
|
+
4. Escalate: If still failing, report to calling agent
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Escalation Format
|
|
331
|
+
|
|
332
|
+
When subagents cannot complete their task:
|
|
333
|
+
|
|
334
|
+
```markdown
|
|
335
|
+
SETUP BLOCKED
|
|
336
|
+
|
|
337
|
+
Step failed: [which step]
|
|
338
|
+
Error: [error message]
|
|
339
|
+
Diagnosis: [what went wrong]
|
|
340
|
+
|
|
341
|
+
Recommended fix: [what calling agent should do]
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Common Failure Patterns
|
|
345
|
+
|
|
346
|
+
| Failure | Subagent | Fix |
|
|
347
|
+
|---------|----------|-----|
|
|
348
|
+
| Jira claim failed | generic-sm-setup | Choose different story |
|
|
349
|
+
| Tests all GREEN | generic-handoff | TEA must verify tests are correct |
|
|
350
|
+
| PR not found | generic-handoff | Verify PR was created |
|
|
351
|
+
| Session file missing | any handoff | Check path, may need recreation |
|
|
352
|
+
| Git command failed | any | Check for uncommitted changes |
|
|
353
|
+
|
|
354
|
+
### Never Silently Fail
|
|
355
|
+
|
|
356
|
+
From `agents/workflow-status-check.md:195`:
|
|
357
|
+
|
|
358
|
+
> If partial failure, report what worked and mark unknowns. **Never silently fail.**
|
|
359
|
+
|
|
360
|
+
Subagents must always return a result, even if partial. The calling agent decides how to proceed.
|
|
361
|
+
|
|
362
|
+
## Anti-Patterns
|
|
363
|
+
|
|
364
|
+
### Direct Execution by Opus
|
|
365
|
+
|
|
366
|
+
**Wrong:**
|
|
367
|
+
```
|
|
368
|
+
SM agent runs 50 lines of bash to scan session files,
|
|
369
|
+
check git status, update sprint YAML, create branch...
|
|
370
|
+
```
|
|
371
|
+
Burns context, may skip steps, prone to errors.
|
|
372
|
+
|
|
373
|
+
**Correct:**
|
|
374
|
+
```yaml
|
|
375
|
+
Task tool:
|
|
376
|
+
subagent_type: "generic-sm-setup"
|
|
377
|
+
prompt: |
|
|
378
|
+
MODE: setup
|
|
379
|
+
STORY_ID: 5-2
|
|
380
|
+
[other placeholders]
|
|
381
|
+
```
|
|
382
|
+
Haiku executes reliably, returns structured result.
|
|
383
|
+
|
|
384
|
+
### Skipping Handoff Subagents
|
|
385
|
+
|
|
386
|
+
**Wrong:**
|
|
387
|
+
```
|
|
388
|
+
TEA: "I wrote the tests. Dev, please continue."
|
|
389
|
+
```
|
|
390
|
+
Session file not updated, next agent unclear, state lost.
|
|
391
|
+
|
|
392
|
+
**Correct:**
|
|
393
|
+
```
|
|
394
|
+
TEA: spawns tea-handoff → session updated → Dev activated
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Overloading Subagents
|
|
398
|
+
|
|
399
|
+
**Wrong:**
|
|
400
|
+
```yaml
|
|
401
|
+
# Subagent doing too much
|
|
402
|
+
prompt: |
|
|
403
|
+
1. Analyze code architecture
|
|
404
|
+
2. Decide which tests to write
|
|
405
|
+
3. Write the tests
|
|
406
|
+
4. Commit them
|
|
407
|
+
5. Update session
|
|
408
|
+
```
|
|
409
|
+
Mixing strategic (1-2) with mechanical (3-5).
|
|
410
|
+
|
|
411
|
+
**Correct:**
|
|
412
|
+
```yaml
|
|
413
|
+
# Opus does strategic work, then delegates mechanical
|
|
414
|
+
# OPUS: Decides tests, writes them
|
|
415
|
+
# Then:
|
|
416
|
+
subagent_type: "tea-handoff"
|
|
417
|
+
prompt: |
|
|
418
|
+
STORY_ID: 5-2
|
|
419
|
+
TEST_FILES: [list from Opus work]
|
|
420
|
+
# Only mechanical: verify, update session
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Ignoring Subagent Results
|
|
424
|
+
|
|
425
|
+
**Wrong:**
|
|
426
|
+
```
|
|
427
|
+
Opus spawns workflow-status-check, ignores output, proceeds anyway
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
**Correct:**
|
|
431
|
+
```
|
|
432
|
+
Opus spawns workflow-status-check
|
|
433
|
+
→ Reads state (NEW_WORK_STATE, FINISH_STATE, etc.)
|
|
434
|
+
→ Branches logic based on result
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Missing Error Handling
|
|
438
|
+
|
|
439
|
+
**Wrong:**
|
|
440
|
+
```markdown
|
|
441
|
+
## Step 3: Update Sprint
|
|
442
|
+
Edit sprint/current-sprint.yaml
|
|
443
|
+
```
|
|
444
|
+
No error handling, silent failures possible.
|
|
445
|
+
|
|
446
|
+
**Correct:**
|
|
447
|
+
```markdown
|
|
448
|
+
## Step 3: Update Sprint
|
|
449
|
+
Edit sprint/current-sprint.yaml
|
|
450
|
+
|
|
451
|
+
If edit fails:
|
|
452
|
+
- Log: "Sprint YAML update failed"
|
|
453
|
+
- Diagnose: File locked? Wrong path?
|
|
454
|
+
- Escalate: Report to calling agent
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
## Related Patterns
|
|
458
|
+
|
|
459
|
+
- **TDD Flow Pattern** (`tdd-flow-pattern.md`): The workflow that uses delegation extensively
|
|
460
|
+
- **Approval Gates Pattern** (`approval-gates-pattern.md`): How delegation supports review gates
|
|
461
|
+
- **Fan-out/Fan-in Pattern** (`fan-out-fan-in-pattern.md`): Parallel delegation patterns
|
|
462
|
+
|
|
463
|
+
## References
|
|
464
|
+
|
|
465
|
+
### Subagent Definitions
|
|
466
|
+
- State Detection: `agents/workflow-status-check.md`
|
|
467
|
+
- SM Setup/Research: `agents/generic-sm-setup.md`
|
|
468
|
+
- SM Finish: `agents/generic-sm-finish.md`
|
|
469
|
+
- SM Handoff: `agents/sm-handoff.md`
|
|
470
|
+
- Phase Transitions: `agents/generic-handoff.md`
|
|
471
|
+
- Reviewer Preflight: `agents/reviewer-preflight.md`
|
|
472
|
+
- Testing Runner: `agents/testing-runner.md`
|
|
473
|
+
|
|
474
|
+
### Agent Definitions (Opus)
|
|
475
|
+
- SM: `agents/sm.md`
|
|
476
|
+
- TEA: `agents/tea.md`
|
|
477
|
+
- Dev: `agents/dev.md`
|
|
478
|
+
- Reviewer: `agents/reviewer.md`
|
|
479
|
+
|
|
480
|
+
### Claude Code Documentation
|
|
481
|
+
- Task tool: Spawns subagents with isolated context
|
|
482
|
+
- `subagent_type` parameter: Routes to specialized agents
|
|
483
|
+
- `model` parameter: Specifies haiku for mechanical work
|
|
484
|
+
|
|
485
|
+
---
|
|
486
|
+
|
|
487
|
+
*Last verified: 2026-01-06*
|
|
488
|
+
*Pennyfarthing v4.0.0*
|