@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,574 @@
|
|
|
1
|
+
# Fan-out/Fan-in Pattern
|
|
2
|
+
|
|
3
|
+
**Pattern Type:** Parallel Execution with Aggregation
|
|
4
|
+
**Agents Involved:** Orchestrating agent + multiple parallel workers
|
|
5
|
+
**Coordination Mechanism:** Task tool with `run_in_background` + TaskOutput
|
|
6
|
+
|
|
7
|
+
## Problem Statement
|
|
8
|
+
|
|
9
|
+
Sequential agent workflows create bottlenecks when processing independent work items:
|
|
10
|
+
|
|
11
|
+
1. **Time Waste:** Waiting for each agent to complete before starting the next, even when work is independent
|
|
12
|
+
2. **Underutilization:** Compute resources sit idle while one agent runs
|
|
13
|
+
3. **Scaling Limits:** Total time grows linearly with work item count
|
|
14
|
+
4. **Unnecessary Coupling:** Independent operations blocked by unrelated predecessors
|
|
15
|
+
|
|
16
|
+
Without parallel execution, workflows may:
|
|
17
|
+
- Take N times longer for N independent items
|
|
18
|
+
- Miss opportunities for concurrent data gathering
|
|
19
|
+
- Create artificial dependencies between unrelated work
|
|
20
|
+
- Limit throughput when coordinating across multiple repositories
|
|
21
|
+
|
|
22
|
+
## Solution
|
|
23
|
+
|
|
24
|
+
Use **parallel Task invocations** to fan work out to multiple agents, then **aggregate results** when they complete. This creates a scatter-gather architecture:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Orchestrator
|
|
28
|
+
│
|
|
29
|
+
├───► Agent A ──┐
|
|
30
|
+
├───► Agent B ──┼──► Collect Results ──► Continue
|
|
31
|
+
└───► Agent C ──┘
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The key insight: **Independent work items can execute concurrently** using Claude Code's Task tool parallelism.
|
|
35
|
+
|
|
36
|
+
### Two Parallelism Modes
|
|
37
|
+
|
|
38
|
+
1. **Implicit Parallelism:** Multiple Task calls in a single message execute concurrently
|
|
39
|
+
2. **Explicit Background:** Use `run_in_background: true` for long-running tasks with manual result collection
|
|
40
|
+
|
|
41
|
+
## State Diagram
|
|
42
|
+
|
|
43
|
+
```mermaid
|
|
44
|
+
stateDiagram-v2
|
|
45
|
+
[*] --> ORCHESTRATE: Start parallel work
|
|
46
|
+
|
|
47
|
+
ORCHESTRATE --> FAN_OUT: Identify independent items
|
|
48
|
+
|
|
49
|
+
FAN_OUT --> PARALLEL: Spawn Task calls
|
|
50
|
+
note right of FAN_OUT: Multiple Task tools\nin single message
|
|
51
|
+
|
|
52
|
+
state PARALLEL {
|
|
53
|
+
Agent_A --> Collecting
|
|
54
|
+
Agent_B --> Collecting
|
|
55
|
+
Agent_C --> Collecting
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
Collecting --> AGGREGATE: All complete
|
|
59
|
+
|
|
60
|
+
AGGREGATE --> CONTINUE: Results merged
|
|
61
|
+
CONTINUE --> [*]: Workflow proceeds
|
|
62
|
+
|
|
63
|
+
state Timeout {
|
|
64
|
+
[*] --> PARTIAL_FAILURE
|
|
65
|
+
PARTIAL_FAILURE --> AGGREGATE: Handle missing
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
note right of PARALLEL: Concurrent execution
|
|
69
|
+
note right of AGGREGATE: Merge results
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### ASCII Alternative
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
76
|
+
│ FAN-OUT/FAN-IN PATTERN │
|
|
77
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
78
|
+
|
|
79
|
+
┌─────────────┐
|
|
80
|
+
│ ORCHESTRATE │
|
|
81
|
+
│ (decide │
|
|
82
|
+
│ work) │
|
|
83
|
+
└──────┬──────┘
|
|
84
|
+
│
|
|
85
|
+
│ Identify N independent work items
|
|
86
|
+
│
|
|
87
|
+
▼
|
|
88
|
+
┌─────────────┐
|
|
89
|
+
│ FAN-OUT │
|
|
90
|
+
│ (spawn) │
|
|
91
|
+
└──────┬──────┘
|
|
92
|
+
│
|
|
93
|
+
┌─────┼─────┬─────┐
|
|
94
|
+
│ │ │ │
|
|
95
|
+
▼ ▼ ▼ ▼
|
|
96
|
+
┌───┐ ┌───┐ ┌───┐ ┌───┐
|
|
97
|
+
│ A │ │ B │ │ C │ │ D │ ◄── Parallel agents
|
|
98
|
+
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
|
|
99
|
+
│ │ │ │
|
|
100
|
+
│ │ │ │ Work executes concurrently
|
|
101
|
+
▼ ▼ ▼ ▼
|
|
102
|
+
┌───┐ ┌───┐ ┌───┐ ┌───┐
|
|
103
|
+
│ ✓ │ │ ✓ │ │ ✗ │ │ ✓ │ ◄── Results (may have failures)
|
|
104
|
+
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
|
|
105
|
+
│ │ │ │
|
|
106
|
+
└─────┴─────┴─────┘
|
|
107
|
+
│
|
|
108
|
+
▼
|
|
109
|
+
┌─────────────────┐
|
|
110
|
+
│ FAN-IN │
|
|
111
|
+
│ (collect) │
|
|
112
|
+
└────────┬────────┘
|
|
113
|
+
│
|
|
114
|
+
│ Aggregate results, handle partial failures
|
|
115
|
+
│
|
|
116
|
+
▼
|
|
117
|
+
┌─────────────────┐
|
|
118
|
+
│ CONTINUE │
|
|
119
|
+
│ (proceed) │
|
|
120
|
+
└─────────────────┘
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Timing Comparison
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
Sequential (without pattern):
|
|
127
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
128
|
+
│ Agent A │ │ Agent B │ │ Agent C │ │ Agent D │ │
|
|
129
|
+
│ (5s) │ wait │ (3s) │ wait │ (4s) │ wait │ (2s) │ │
|
|
130
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
131
|
+
Total: 14 seconds + wait overhead
|
|
132
|
+
|
|
133
|
+
Parallel (with pattern):
|
|
134
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
135
|
+
│ Agent A │████████████ │
|
|
136
|
+
│ Agent B │██████ │
|
|
137
|
+
│ Agent C │████████ │
|
|
138
|
+
│ Agent D │████ │
|
|
139
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
140
|
+
Total: 5 seconds (longest task)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Implementation
|
|
144
|
+
|
|
145
|
+
### Method 1: Implicit Parallelism (Multiple Task Calls)
|
|
146
|
+
|
|
147
|
+
When you include multiple Task tool invocations in a single response, Claude Code executes them concurrently:
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
# In a single agent response, call multiple Tasks
|
|
151
|
+
# All three execute in parallel automatically
|
|
152
|
+
|
|
153
|
+
Task:
|
|
154
|
+
subagent_type: "Explore"
|
|
155
|
+
description: "Check frontend repo"
|
|
156
|
+
prompt: |
|
|
157
|
+
Scan frontend/ directory for TypeScript errors.
|
|
158
|
+
Report count and severity.
|
|
159
|
+
|
|
160
|
+
Task:
|
|
161
|
+
subagent_type: "Explore"
|
|
162
|
+
description: "Check backend repo"
|
|
163
|
+
prompt: |
|
|
164
|
+
Scan api/ directory for Go lint issues.
|
|
165
|
+
Report count and severity.
|
|
166
|
+
|
|
167
|
+
Task:
|
|
168
|
+
subagent_type: "Explore"
|
|
169
|
+
description: "Check shared libs"
|
|
170
|
+
prompt: |
|
|
171
|
+
Scan libs/ directory for outdated dependencies.
|
|
172
|
+
Report count and severity.
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Results return when all tasks complete. The agent then aggregates them.
|
|
176
|
+
|
|
177
|
+
### Method 2: Explicit Background Execution
|
|
178
|
+
|
|
179
|
+
For long-running tasks or when you need to do work while waiting:
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
# Fan-out: Start background tasks
|
|
183
|
+
Task:
|
|
184
|
+
subagent_type: "testing-runner"
|
|
185
|
+
description: "Run backend tests"
|
|
186
|
+
run_in_background: true
|
|
187
|
+
prompt: |
|
|
188
|
+
REPOS: api
|
|
189
|
+
Execute test suite and report results.
|
|
190
|
+
|
|
191
|
+
Task:
|
|
192
|
+
subagent_type: "testing-runner"
|
|
193
|
+
description: "Run frontend tests"
|
|
194
|
+
run_in_background: true
|
|
195
|
+
prompt: |
|
|
196
|
+
REPOS: frontend
|
|
197
|
+
Execute test suite and report results.
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
This returns immediately with task IDs. To collect results:
|
|
201
|
+
|
|
202
|
+
```yaml
|
|
203
|
+
# Fan-in: Collect results (blocking)
|
|
204
|
+
TaskOutput:
|
|
205
|
+
task_id: "abc123" # ID from first Task result
|
|
206
|
+
block: true
|
|
207
|
+
timeout: 120000 # 2 minute timeout
|
|
208
|
+
|
|
209
|
+
TaskOutput:
|
|
210
|
+
task_id: "def456" # ID from second Task result
|
|
211
|
+
block: true
|
|
212
|
+
timeout: 120000
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Result Aggregation Pattern
|
|
216
|
+
|
|
217
|
+
After collecting results, merge them into a unified structure:
|
|
218
|
+
|
|
219
|
+
```markdown
|
|
220
|
+
## Multi-Repo Status Report
|
|
221
|
+
|
|
222
|
+
### Summary
|
|
223
|
+
| Repo | Status | Issues | Time |
|
|
224
|
+
|------|--------|--------|------|
|
|
225
|
+
| frontend | PASS | 0 | 3.2s |
|
|
226
|
+
| api | FAIL | 3 | 5.1s |
|
|
227
|
+
| libs | PASS | 0 | 1.8s |
|
|
228
|
+
|
|
229
|
+
### Total Issues: 3
|
|
230
|
+
### Overall Status: FAILING
|
|
231
|
+
|
|
232
|
+
### Details
|
|
233
|
+
[Aggregated from individual reports...]
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Real Example: Parallel Repo Status Check
|
|
237
|
+
|
|
238
|
+
**Use Case:** Check git status across multiple repositories simultaneously
|
|
239
|
+
|
|
240
|
+
```yaml
|
|
241
|
+
# Orchestrator spawns parallel status checks
|
|
242
|
+
Task:
|
|
243
|
+
subagent_type: "workflow-status-check"
|
|
244
|
+
description: "Check pennyfarthing status"
|
|
245
|
+
prompt: |
|
|
246
|
+
REPO: pennyfarthing
|
|
247
|
+
PROJECT_ROOT: /Users/dev/Projects/pennyfarthing
|
|
248
|
+
Report git status, branch, and uncommitted changes.
|
|
249
|
+
|
|
250
|
+
Task:
|
|
251
|
+
subagent_type: "workflow-status-check"
|
|
252
|
+
description: "Check API status"
|
|
253
|
+
prompt: |
|
|
254
|
+
REPO: api
|
|
255
|
+
PROJECT_ROOT: /Users/dev/Projects/api
|
|
256
|
+
Report git status, branch, and uncommitted changes.
|
|
257
|
+
|
|
258
|
+
Task:
|
|
259
|
+
subagent_type: "workflow-status-check"
|
|
260
|
+
description: "Check UI status"
|
|
261
|
+
prompt: |
|
|
262
|
+
REPO: ui
|
|
263
|
+
PROJECT_ROOT: /Users/dev/Projects/ui
|
|
264
|
+
Report git status, branch, and uncommitted changes.
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Real Example: Parallel File Analysis
|
|
268
|
+
|
|
269
|
+
**Use Case:** Analyze multiple files to build context for a story
|
|
270
|
+
|
|
271
|
+
```yaml
|
|
272
|
+
# SM agent gathers context from multiple files in parallel
|
|
273
|
+
Task:
|
|
274
|
+
subagent_type: "sm-file-summary"
|
|
275
|
+
description: "Summarize service layer"
|
|
276
|
+
prompt: |
|
|
277
|
+
FILES: internal/service/*.go
|
|
278
|
+
Create condensed summary focusing on public interfaces.
|
|
279
|
+
|
|
280
|
+
Task:
|
|
281
|
+
subagent_type: "sm-file-summary"
|
|
282
|
+
description: "Summarize handlers"
|
|
283
|
+
prompt: |
|
|
284
|
+
FILES: internal/handlers/*.go
|
|
285
|
+
Create condensed summary focusing on HTTP endpoints.
|
|
286
|
+
|
|
287
|
+
Task:
|
|
288
|
+
subagent_type: "sm-file-summary"
|
|
289
|
+
description: "Summarize models"
|
|
290
|
+
prompt: |
|
|
291
|
+
FILES: internal/models/*.go
|
|
292
|
+
Create condensed summary focusing on data structures.
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## When to Use
|
|
296
|
+
|
|
297
|
+
### Ideal Scenarios
|
|
298
|
+
|
|
299
|
+
| Scenario | Why Fan-out/Fan-in Works |
|
|
300
|
+
|----------|--------------------------|
|
|
301
|
+
| Multi-repo operations | Each repo is independent |
|
|
302
|
+
| Gathering diverse data | File scans don't affect each other |
|
|
303
|
+
| Running test suites | Tests across repos/packages run independently |
|
|
304
|
+
| Status checks | Checking N things concurrently |
|
|
305
|
+
| Independent file processing | Batch processing without dependencies |
|
|
306
|
+
|
|
307
|
+
### Decision Heuristic
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
Is the work...
|
|
311
|
+
├── Truly independent (no shared state)?
|
|
312
|
+
│ └── YES → Fan-out is safe
|
|
313
|
+
├── Using shared resources (same files, DB)?
|
|
314
|
+
│ └── CAUTION → May need synchronization
|
|
315
|
+
├── Order-dependent (A before B)?
|
|
316
|
+
│ └── NO fan-out → Use sequential
|
|
317
|
+
├── Aggregatable (results can be merged)?
|
|
318
|
+
│ └── YES → Fan-in will work
|
|
319
|
+
└── Failure-tolerant (partial success OK)?
|
|
320
|
+
└── YES → Fan-out with error handling
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Concurrency Guidelines
|
|
324
|
+
|
|
325
|
+
| Work Items | Recommendation |
|
|
326
|
+
|------------|----------------|
|
|
327
|
+
| 2-5 | Implicit parallelism (multiple Task calls) |
|
|
328
|
+
| 5-10 | Explicit background with batching |
|
|
329
|
+
| 10+ | Consider chunking into batches |
|
|
330
|
+
|
|
331
|
+
## Error Recovery
|
|
332
|
+
|
|
333
|
+
### Partial Failure Handling
|
|
334
|
+
|
|
335
|
+
When some parallel tasks fail while others succeed:
|
|
336
|
+
|
|
337
|
+
```markdown
|
|
338
|
+
## Aggregated Results
|
|
339
|
+
|
|
340
|
+
### Successful (3/4)
|
|
341
|
+
| Task | Status | Result |
|
|
342
|
+
|------|--------|--------|
|
|
343
|
+
| Frontend check | SUCCESS | Clean |
|
|
344
|
+
| Backend check | SUCCESS | Clean |
|
|
345
|
+
| Lib check | SUCCESS | Clean |
|
|
346
|
+
|
|
347
|
+
### Failed (1/4)
|
|
348
|
+
| Task | Status | Error |
|
|
349
|
+
|------|--------|-------|
|
|
350
|
+
| DB check | TIMEOUT | Connection refused |
|
|
351
|
+
|
|
352
|
+
### Decision
|
|
353
|
+
**Proceeding with partial results.** DB check can be retried independently.
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Timeout Strategy
|
|
357
|
+
|
|
358
|
+
```yaml
|
|
359
|
+
# Set appropriate timeouts based on expected work
|
|
360
|
+
TaskOutput:
|
|
361
|
+
task_id: "task-123"
|
|
362
|
+
block: true
|
|
363
|
+
timeout: 30000 # 30s for quick tasks
|
|
364
|
+
|
|
365
|
+
TaskOutput:
|
|
366
|
+
task_id: "task-456"
|
|
367
|
+
block: true
|
|
368
|
+
timeout: 300000 # 5min for test suites
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Retry Pattern
|
|
372
|
+
|
|
373
|
+
```
|
|
374
|
+
For each failed task:
|
|
375
|
+
1. Log failure reason
|
|
376
|
+
2. Determine if retryable (timeout vs. permanent error)
|
|
377
|
+
3. Retry up to 2 times with backoff
|
|
378
|
+
4. If still failing, mark as failed in aggregate
|
|
379
|
+
5. Continue with successful results if acceptable
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Graceful Degradation
|
|
383
|
+
|
|
384
|
+
When complete failure is unacceptable:
|
|
385
|
+
|
|
386
|
+
```markdown
|
|
387
|
+
## Fallback Strategy
|
|
388
|
+
|
|
389
|
+
If parallel execution fails completely:
|
|
390
|
+
1. Fall back to sequential execution
|
|
391
|
+
2. Log degradation for monitoring
|
|
392
|
+
3. Continue workflow with slower path
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Anti-Patterns
|
|
396
|
+
|
|
397
|
+
### Dependent Tasks in Parallel
|
|
398
|
+
|
|
399
|
+
**Wrong:**
|
|
400
|
+
```yaml
|
|
401
|
+
# These have a dependency - B needs A's output!
|
|
402
|
+
Task:
|
|
403
|
+
subagent_type: "analyzer"
|
|
404
|
+
prompt: "Analyze the codebase and identify modules"
|
|
405
|
+
|
|
406
|
+
Task:
|
|
407
|
+
subagent_type: "reporter"
|
|
408
|
+
prompt: "Report on the modules identified above" # Can't access A's output!
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Correct:**
|
|
412
|
+
```yaml
|
|
413
|
+
# Sequential for dependent work
|
|
414
|
+
Task:
|
|
415
|
+
subagent_type: "analyzer"
|
|
416
|
+
prompt: "Analyze the codebase and identify modules"
|
|
417
|
+
# Wait for result, then:
|
|
418
|
+
Task:
|
|
419
|
+
subagent_type: "reporter"
|
|
420
|
+
prompt: "Report on these modules: {modules_from_A}"
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Too Many Parallel Tasks
|
|
424
|
+
|
|
425
|
+
**Wrong:**
|
|
426
|
+
```yaml
|
|
427
|
+
# Spawning 50 parallel tasks overwhelms resources
|
|
428
|
+
for file in all_files:
|
|
429
|
+
Task:
|
|
430
|
+
prompt: "Process {file}"
|
|
431
|
+
run_in_background: true
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Correct:**
|
|
435
|
+
```yaml
|
|
436
|
+
# Batch into manageable chunks
|
|
437
|
+
Task:
|
|
438
|
+
prompt: "Process files 1-10: {batch_1}"
|
|
439
|
+
run_in_background: true
|
|
440
|
+
|
|
441
|
+
Task:
|
|
442
|
+
prompt: "Process files 11-20: {batch_2}"
|
|
443
|
+
run_in_background: true
|
|
444
|
+
# ... continue with reasonable batch sizes
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Ignoring Failed Tasks
|
|
448
|
+
|
|
449
|
+
**Wrong:**
|
|
450
|
+
```markdown
|
|
451
|
+
# Silently proceeding despite failures
|
|
452
|
+
All tasks returned. Continuing with workflow...
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Correct:**
|
|
456
|
+
```markdown
|
|
457
|
+
# Explicit failure handling
|
|
458
|
+
## Task Results
|
|
459
|
+
- 3/4 tasks succeeded
|
|
460
|
+
- 1/4 tasks failed (timeout on repo-c)
|
|
461
|
+
|
|
462
|
+
## Decision
|
|
463
|
+
Partial failure is acceptable for status check.
|
|
464
|
+
Proceeding with available data.
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
### No Timeout on Background Tasks
|
|
468
|
+
|
|
469
|
+
**Wrong:**
|
|
470
|
+
```yaml
|
|
471
|
+
TaskOutput:
|
|
472
|
+
task_id: "task-123"
|
|
473
|
+
block: true
|
|
474
|
+
# No timeout - could hang forever
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
**Correct:**
|
|
478
|
+
```yaml
|
|
479
|
+
TaskOutput:
|
|
480
|
+
task_id: "task-123"
|
|
481
|
+
block: true
|
|
482
|
+
timeout: 60000 # Always set appropriate timeout
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
### Mixing Parallel and Sequential Without Awareness
|
|
486
|
+
|
|
487
|
+
**Wrong:**
|
|
488
|
+
```yaml
|
|
489
|
+
# A and B are parallel, but developer thinks B waits for A
|
|
490
|
+
Task:
|
|
491
|
+
description: "Create branch" # A
|
|
492
|
+
prompt: "Create feature branch"
|
|
493
|
+
|
|
494
|
+
Task:
|
|
495
|
+
description: "Commit to branch" # B - races with A!
|
|
496
|
+
prompt: "Commit initial files"
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
**Correct:**
|
|
500
|
+
```yaml
|
|
501
|
+
# Make dependency explicit
|
|
502
|
+
Task:
|
|
503
|
+
description: "Create branch and commit"
|
|
504
|
+
prompt: |
|
|
505
|
+
1. Create feature branch
|
|
506
|
+
2. Commit initial files
|
|
507
|
+
# Sequential within single task
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
## Comparison with Related Patterns
|
|
511
|
+
|
|
512
|
+
| Pattern | Use When | Key Difference |
|
|
513
|
+
|---------|----------|----------------|
|
|
514
|
+
| **TDD Flow** | Sequential handoffs needed | One agent at a time |
|
|
515
|
+
| **Helper Delegation** | Strategic/tactical split | Opus delegates to Haiku |
|
|
516
|
+
| **Fan-out/Fan-in** | Independent parallel work | Multiple agents simultaneously |
|
|
517
|
+
| **Approval Gates** | Human decision points | Blocking on external input |
|
|
518
|
+
|
|
519
|
+
### Pattern Combinations
|
|
520
|
+
|
|
521
|
+
Fan-out/fan-in works well with other patterns:
|
|
522
|
+
|
|
523
|
+
```
|
|
524
|
+
TDD Flow with parallel repo checks:
|
|
525
|
+
SM ──► [Parallel status checks] ──► TEA ──► Dev ──► Reviewer ──► SM
|
|
526
|
+
|
|
527
|
+
Helper delegation with parallel subagents:
|
|
528
|
+
Opus ──► [Parallel Haiku tasks] ──► Opus continues
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
## Implementation Checklist
|
|
532
|
+
|
|
533
|
+
When implementing fan-out/fan-in:
|
|
534
|
+
|
|
535
|
+
- [ ] Verify work items are truly independent
|
|
536
|
+
- [ ] Choose implicit vs. explicit parallelism
|
|
537
|
+
- [ ] Set appropriate timeouts for each task type
|
|
538
|
+
- [ ] Plan result aggregation format
|
|
539
|
+
- [ ] Handle partial failures gracefully
|
|
540
|
+
- [ ] Consider batch size for many items
|
|
541
|
+
- [ ] Test timeout and failure scenarios
|
|
542
|
+
- [ ] Log parallel execution for debugging
|
|
543
|
+
|
|
544
|
+
## Related Patterns
|
|
545
|
+
|
|
546
|
+
- **TDD Flow Pattern** (`tdd-flow-pattern.md`): Sequential coordination that may use fan-out for status checks
|
|
547
|
+
- **Helper Delegation Pattern** (`helper-delegation-pattern.md`): Can be combined with parallel subagent spawning
|
|
548
|
+
- **Approval Gates Pattern** (`approval-gates-pattern.md`): May pause fan-out for human decision points
|
|
549
|
+
|
|
550
|
+
## References
|
|
551
|
+
|
|
552
|
+
### Claude Code Task Tool
|
|
553
|
+
- `Task`: Spawns agents, supports `run_in_background` for async execution
|
|
554
|
+
- `TaskOutput`: Collects results from background tasks
|
|
555
|
+
- Multiple Task calls in single message execute concurrently
|
|
556
|
+
|
|
557
|
+
### Agent Definitions
|
|
558
|
+
- Orchestrator: `agents/orchestrator.md` - Multi-agent coordination
|
|
559
|
+
- SM: `agents/sm.md` - Story workflow orchestration
|
|
560
|
+
- Testing Runner: `agents/testing-runner.md` - Parallel test execution candidate
|
|
561
|
+
|
|
562
|
+
### Current Usage Opportunities
|
|
563
|
+
|
|
564
|
+
| Component | Current | Parallel Opportunity |
|
|
565
|
+
|-----------|---------|---------------------|
|
|
566
|
+
| SM file summaries | Sequential | Parallel file analysis |
|
|
567
|
+
| Repo status checks | Sequential | Simultaneous repo scanning |
|
|
568
|
+
| Testing runner | Sequential per-repo | Parallel test suites |
|
|
569
|
+
| Multi-repo PR creation | Sequential | Parallel branch operations |
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
*Last verified: 2026-01-06*
|
|
574
|
+
*Pennyfarthing v4.0.0*
|