beth-copilot 1.0.18 → 2.0.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/CHANGELOG.md +79 -28
- package/README.md +127 -298
- package/assets/beth-questioning.png +0 -0
- package/assets/yellowstone-beth.png +0 -0
- package/bin/cli.js +124 -715
- package/dist/__tests__/inject-skills.test.d.ts +9 -0
- package/dist/__tests__/inject-skills.test.d.ts.map +1 -0
- package/dist/__tests__/inject-skills.test.js +143 -0
- package/dist/__tests__/inject-skills.test.js.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts +10 -0
- package/dist/__tests__/skills/disambiguation.test.d.ts.map +1 -0
- package/dist/__tests__/skills/disambiguation.test.js +192 -0
- package/dist/__tests__/skills/disambiguation.test.js.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts +11 -0
- package/dist/__tests__/skills/hook-injection.test.d.ts.map +1 -0
- package/dist/__tests__/skills/hook-injection.test.js +173 -0
- package/dist/__tests__/skills/hook-injection.test.js.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts +17 -0
- package/dist/__tests__/skills/mapping-completeness.test.d.ts.map +1 -0
- package/dist/__tests__/skills/mapping-completeness.test.js +281 -0
- package/dist/__tests__/skills/mapping-completeness.test.js.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts +18 -0
- package/dist/__tests__/skills/pipeline-integration.test.d.ts.map +1 -0
- package/dist/__tests__/skills/pipeline-integration.test.js +234 -0
- package/dist/__tests__/skills/pipeline-integration.test.js.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts +15 -0
- package/dist/__tests__/skills/skill-routing.test.d.ts.map +1 -0
- package/dist/__tests__/skills/skill-routing.test.js +723 -0
- package/dist/__tests__/skills/skill-routing.test.js.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts +24 -0
- package/dist/__tests__/skills/trigger-coverage.test.d.ts.map +1 -0
- package/dist/__tests__/skills/trigger-coverage.test.js +746 -0
- package/dist/__tests__/skills/trigger-coverage.test.js.map +1 -0
- package/dist/__tests__/smoke.test.d.ts +8 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +62 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/__tests__/verify-skills.test.d.ts +9 -0
- package/dist/__tests__/verify-skills.test.d.ts.map +1 -0
- package/dist/__tests__/verify-skills.test.js +78 -0
- package/dist/__tests__/verify-skills.test.js.map +1 -0
- package/dist/cli/commands/beads.e2e.test.d.ts +15 -0
- package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/beads.e2e.test.js +585 -0
- package/dist/cli/commands/beads.e2e.test.js.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
- package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.d.ts +54 -0
- package/dist/cli/commands/close.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.d.ts +11 -0
- package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/close.e2e.test.js +71 -0
- package/dist/cli/commands/close.e2e.test.js.map +1 -0
- package/dist/cli/commands/close.js +95 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/close.test.d.ts +13 -0
- package/dist/cli/commands/close.test.d.ts.map +1 -0
- package/dist/cli/commands/close.test.js +254 -0
- package/dist/cli/commands/close.test.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +7 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.e2e.test.js +3 -59
- package/dist/cli/commands/doctor.e2e.test.js.map +1 -1
- package/dist/cli/commands/doctor.js +38 -18
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/doctor.test.js +32 -25
- package/dist/cli/commands/doctor.test.js.map +1 -1
- package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
- package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
- package/dist/cli/commands/framework-isolation.test.js +118 -0
- package/dist/cli/commands/framework-isolation.test.js.map +1 -0
- package/dist/cli/commands/help.e2e.test.js +5 -9
- package/dist/cli/commands/help.e2e.test.js.map +1 -1
- package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
- package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/init-logic.e2e.test.js +315 -0
- package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
- package/dist/cli/commands/init.test.js +4 -21
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/land.d.ts +130 -0
- package/dist/cli/commands/land.d.ts.map +1 -0
- package/dist/cli/commands/land.js +592 -0
- package/dist/cli/commands/land.js.map +1 -0
- package/dist/cli/commands/land.test.d.ts +19 -0
- package/dist/cli/commands/land.test.d.ts.map +1 -0
- package/dist/cli/commands/land.test.js +567 -0
- package/dist/cli/commands/land.test.js.map +1 -0
- package/dist/cli/commands/mcp.e2e.test.js +24 -31
- package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
- package/dist/cli/commands/pipeline.e2e.test.js +28 -31
- package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
- package/dist/cli/commands/pre-push-guard.d.ts +74 -0
- package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
- package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.js +212 -0
- package/dist/cli/commands/pre-push-guard.js.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts +14 -0
- package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
- package/dist/cli/commands/pre-push-guard.test.js +314 -0
- package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js +152 -0
- package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
- package/dist/cli/commands/quickstart.d.ts +0 -1
- package/dist/cli/commands/quickstart.d.ts.map +1 -1
- package/dist/cli/commands/quickstart.js +9 -83
- package/dist/cli/commands/quickstart.js.map +1 -1
- package/dist/cli/commands/quickstart.test.js +8 -129
- package/dist/cli/commands/quickstart.test.js.map +1 -1
- package/dist/cli/commands/update.d.ts +35 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.d.ts +24 -0
- package/dist/cli/commands/update.e2e.test.d.ts.map +1 -0
- package/dist/cli/commands/update.e2e.test.js +240 -0
- package/dist/cli/commands/update.e2e.test.js.map +1 -0
- package/dist/cli/commands/update.js +255 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/core/agents/frontmatter.test.js +1 -1
- package/dist/core/agents/frontmatter.test.js.map +1 -1
- package/dist/core/agents/handoffs.test.js +1 -1
- package/dist/core/agents/handoffs.test.js.map +1 -1
- package/dist/core/agents/loader.d.ts +4 -2
- package/dist/core/agents/loader.d.ts.map +1 -1
- package/dist/core/agents/loader.js +5 -3
- package/dist/core/agents/loader.js.map +1 -1
- package/dist/core/agents/loader.test.js +42 -4
- package/dist/core/agents/loader.test.js.map +1 -1
- package/dist/core/agents/suite.test.js +12 -9
- package/dist/core/agents/suite.test.js.map +1 -1
- package/dist/core/agents/tools.test.js +15 -9
- package/dist/core/agents/tools.test.js.map +1 -1
- package/dist/core/agents/types.test.js +1 -1
- package/dist/core/agents/types.test.js.map +1 -1
- package/dist/core/skills/loader.test.js +1 -1
- package/dist/core/skills/loader.test.js.map +1 -1
- package/dist/index.d.ts +3 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/pathValidation.d.ts +0 -5
- package/dist/lib/pathValidation.d.ts.map +1 -1
- package/dist/lib/pathValidation.js +0 -11
- package/dist/lib/pathValidation.js.map +1 -1
- package/dist/lib/pathValidation.test.js +2 -14
- package/dist/lib/pathValidation.test.js.map +1 -1
- package/package.json +13 -10
- package/sbom.json +1927 -847
- package/templates/.github/agents/beth.agent.md +331 -105
- package/templates/.github/agents/developer.agent.md +73 -102
- package/templates/.github/agents/product-manager.agent.md +24 -68
- package/templates/.github/agents/researcher.agent.md +21 -69
- package/templates/.github/agents/security-reviewer.agent.md +39 -82
- package/templates/.github/agents/tester.agent.md +44 -65
- package/templates/.github/agents/ux-designer.agent.md +25 -76
- package/templates/.github/copilot-instructions.md +246 -225
- package/templates/.github/copilot-mcp-config.json +12 -0
- package/templates/.github/dependabot.yml +68 -0
- package/templates/.github/hooks/scripts/inject-skills.mjs +139 -0
- package/templates/.github/hooks/scripts/verify-skills.mjs +47 -0
- package/templates/.github/hooks/skill-enforcement.json +18 -0
- package/templates/.github/pull_request_template.md +48 -0
- package/templates/.github/skills/framer-components/SKILL.md +0 -0
- package/templates/.github/skills/prd/SKILL.md +0 -0
- package/templates/.github/skills/security-analysis/SKILL.md +798 -798
- package/templates/.github/skills/shadcn-ui/SKILL.md +561 -561
- package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
- package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
- package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
- package/templates/.vscode/settings.json +16 -16
- package/templates/AGENTS.md +103 -54
- package/templates/Backlog.md +80 -80
- package/templates/mcp.json.example +0 -3
- package/assets/beth-portrait-small.txt +0 -13
- package/assets/beth-portrait.txt +0 -60
- package/bin/beth-animation.sh +0 -155
- package/bin/lib/animation.js +0 -189
- package/bin/lib/pathValidation.js +0 -233
- package/bin/lib/pathValidation.test.js +0 -280
- package/dist/cli/commands/client-config.d.ts +0 -31
- package/dist/cli/commands/client-config.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
- package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.e2e.test.js +0 -556
- package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
- package/dist/cli/commands/client-config.js +0 -73
- package/dist/cli/commands/client-config.js.map +0 -1
- package/dist/cli/commands/client-config.test.d.ts +0 -6
- package/dist/cli/commands/client-config.test.d.ts.map +0 -1
- package/dist/cli/commands/client-config.test.js +0 -133
- package/dist/cli/commands/client-config.test.js.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
- package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
- package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
- package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
- package/dist/core/context.d.ts +0 -171
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -353
- package/dist/core/context.js.map +0 -1
- package/dist/core/context.test.d.ts +0 -8
- package/dist/core/context.test.d.ts.map +0 -1
- package/dist/core/context.test.js +0 -253
- package/dist/core/context.test.js.map +0 -1
- package/dist/core/handoffs.d.ts +0 -151
- package/dist/core/handoffs.d.ts.map +0 -1
- package/dist/core/handoffs.js +0 -220
- package/dist/core/handoffs.js.map +0 -1
- package/dist/core/handoffs.test.d.ts +0 -8
- package/dist/core/handoffs.test.d.ts.map +0 -1
- package/dist/core/handoffs.test.js +0 -231
- package/dist/core/handoffs.test.js.map +0 -1
- package/dist/core/orchestrator.d.ts +0 -246
- package/dist/core/orchestrator.d.ts.map +0 -1
- package/dist/core/orchestrator.js +0 -514
- package/dist/core/orchestrator.js.map +0 -1
- package/dist/core/orchestrator.test.d.ts +0 -8
- package/dist/core/orchestrator.test.d.ts.map +0 -1
- package/dist/core/orchestrator.test.js +0 -517
- package/dist/core/orchestrator.test.js.map +0 -1
- package/dist/core/router.d.ts +0 -102
- package/dist/core/router.d.ts.map +0 -1
- package/dist/core/router.js +0 -178
- package/dist/core/router.js.map +0 -1
- package/dist/core/router.test.d.ts +0 -8
- package/dist/core/router.test.d.ts.map +0 -1
- package/dist/core/router.test.js +0 -215
- package/dist/core/router.test.js.map +0 -1
- package/dist/init.test.js +0 -288
- package/dist/providers/azure.d.ts +0 -147
- package/dist/providers/azure.d.ts.map +0 -1
- package/dist/providers/azure.js +0 -491
- package/dist/providers/azure.js.map +0 -1
- package/dist/providers/azure.test.d.ts +0 -11
- package/dist/providers/azure.test.d.ts.map +0 -1
- package/dist/providers/azure.test.js +0 -330
- package/dist/providers/azure.test.js.map +0 -1
- package/dist/providers/config.d.ts +0 -87
- package/dist/providers/config.d.ts.map +0 -1
- package/dist/providers/config.js +0 -193
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/config.test.d.ts +0 -7
- package/dist/providers/config.test.d.ts.map +0 -1
- package/dist/providers/config.test.js +0 -370
- package/dist/providers/config.test.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -14
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/interface.d.ts +0 -191
- package/dist/providers/interface.d.ts.map +0 -1
- package/dist/providers/interface.js +0 -94
- package/dist/providers/interface.js.map +0 -1
- package/dist/providers/retry.d.ts +0 -128
- package/dist/providers/retry.d.ts.map +0 -1
- package/dist/providers/retry.js +0 -205
- package/dist/providers/retry.js.map +0 -1
- package/dist/providers/retry.test.d.ts +0 -7
- package/dist/providers/retry.test.d.ts.map +0 -1
- package/dist/providers/retry.test.js +0 -439
- package/dist/providers/retry.test.js.map +0 -1
- package/dist/providers/streaming.d.ts +0 -157
- package/dist/providers/streaming.d.ts.map +0 -1
- package/dist/providers/streaming.js +0 -233
- package/dist/providers/streaming.js.map +0 -1
- package/dist/providers/streaming.test.d.ts +0 -7
- package/dist/providers/streaming.test.d.ts.map +0 -1
- package/dist/providers/streaming.test.js +0 -372
- package/dist/providers/streaming.test.js.map +0 -1
- package/dist/providers/types.d.ts +0 -209
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -53
- package/dist/providers/types.js.map +0 -1
- package/dist/providers/types.test.d.ts +0 -7
- package/dist/providers/types.test.d.ts.map +0 -1
- package/dist/providers/types.test.js +0 -141
- package/dist/providers/types.test.js.map +0 -1
- package/dist/tools/cli/beads.d.ts +0 -27
- package/dist/tools/cli/beads.d.ts.map +0 -1
- package/dist/tools/cli/beads.js +0 -172
- package/dist/tools/cli/beads.js.map +0 -1
- package/dist/tools/cli/beads.test.d.ts +0 -8
- package/dist/tools/cli/beads.test.d.ts.map +0 -1
- package/dist/tools/cli/beads.test.js +0 -264
- package/dist/tools/cli/beads.test.js.map +0 -1
- package/dist/tools/cli/editFile.d.ts +0 -17
- package/dist/tools/cli/editFile.d.ts.map +0 -1
- package/dist/tools/cli/editFile.js +0 -125
- package/dist/tools/cli/editFile.js.map +0 -1
- package/dist/tools/cli/editFile.test.d.ts +0 -8
- package/dist/tools/cli/editFile.test.d.ts.map +0 -1
- package/dist/tools/cli/editFile.test.js +0 -177
- package/dist/tools/cli/editFile.test.js.map +0 -1
- package/dist/tools/cli/readFile.d.ts +0 -25
- package/dist/tools/cli/readFile.d.ts.map +0 -1
- package/dist/tools/cli/readFile.js +0 -118
- package/dist/tools/cli/readFile.js.map +0 -1
- package/dist/tools/cli/readFile.test.d.ts +0 -8
- package/dist/tools/cli/readFile.test.d.ts.map +0 -1
- package/dist/tools/cli/readFile.test.js +0 -194
- package/dist/tools/cli/readFile.test.js.map +0 -1
- package/dist/tools/cli/search.d.ts +0 -16
- package/dist/tools/cli/search.d.ts.map +0 -1
- package/dist/tools/cli/search.js +0 -261
- package/dist/tools/cli/search.js.map +0 -1
- package/dist/tools/cli/search.test.d.ts +0 -8
- package/dist/tools/cli/search.test.d.ts.map +0 -1
- package/dist/tools/cli/search.test.js +0 -172
- package/dist/tools/cli/search.test.js.map +0 -1
- package/dist/tools/cli/subagent.d.ts +0 -43
- package/dist/tools/cli/subagent.d.ts.map +0 -1
- package/dist/tools/cli/subagent.js +0 -99
- package/dist/tools/cli/subagent.js.map +0 -1
- package/dist/tools/cli/subagent.test.d.ts +0 -8
- package/dist/tools/cli/subagent.test.d.ts.map +0 -1
- package/dist/tools/cli/subagent.test.js +0 -190
- package/dist/tools/cli/subagent.test.js.map +0 -1
- package/dist/tools/cli/terminal.d.ts +0 -19
- package/dist/tools/cli/terminal.d.ts.map +0 -1
- package/dist/tools/cli/terminal.js +0 -164
- package/dist/tools/cli/terminal.js.map +0 -1
- package/dist/tools/cli/terminal.test.d.ts +0 -8
- package/dist/tools/cli/terminal.test.d.ts.map +0 -1
- package/dist/tools/cli/terminal.test.js +0 -161
- package/dist/tools/cli/terminal.test.js.map +0 -1
- package/dist/tools/index.d.ts +0 -25
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -41
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interface.d.ts +0 -64
- package/dist/tools/interface.d.ts.map +0 -1
- package/dist/tools/interface.js +0 -37
- package/dist/tools/interface.js.map +0 -1
- package/dist/tools/interface.test.d.ts +0 -7
- package/dist/tools/interface.test.d.ts.map +0 -1
- package/dist/tools/interface.test.js +0 -179
- package/dist/tools/interface.test.js.map +0 -1
- package/dist/tools/mcp/bridge.d.ts +0 -48
- package/dist/tools/mcp/bridge.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.js +0 -128
- package/dist/tools/mcp/bridge.js.map +0 -1
- package/dist/tools/mcp/bridge.test.d.ts +0 -8
- package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
- package/dist/tools/mcp/bridge.test.js +0 -300
- package/dist/tools/mcp/bridge.test.js.map +0 -1
- package/dist/tools/mcp/client.d.ts +0 -135
- package/dist/tools/mcp/client.d.ts.map +0 -1
- package/dist/tools/mcp/client.js +0 -263
- package/dist/tools/mcp/client.js.map +0 -1
- package/dist/tools/mcp/client.test.d.ts +0 -8
- package/dist/tools/mcp/client.test.d.ts.map +0 -1
- package/dist/tools/mcp/client.test.js +0 -390
- package/dist/tools/mcp/client.test.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -82
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -99
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/registry.test.d.ts +0 -7
- package/dist/tools/registry.test.d.ts.map +0 -1
- package/dist/tools/registry.test.js +0 -199
- package/dist/tools/registry.test.js.map +0 -1
- package/dist/tools/suite.test.d.ts +0 -11
- package/dist/tools/suite.test.d.ts.map +0 -1
- package/dist/tools/suite.test.js +0 -119
- package/dist/tools/suite.test.js.map +0 -1
- package/dist/tools/types.d.ts +0 -75
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -30
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/types.test.d.ts +0 -7
- package/dist/tools/types.test.d.ts.map +0 -1
- package/dist/tools/types.test.js +0 -178
- package/dist/tools/types.test.js.map +0 -1
- package/templates/.vscode/mcp.json +0 -20
- package/templates/CLAUDE.md +0 -129
|
@@ -2,46 +2,33 @@
|
|
|
2
2
|
name: Beth
|
|
3
3
|
description: Beth is the ruthless, hyper-competent orchestrator who runs your dev team like Beth Dutton runs Schwartz & Meyer. She routes work to specialists and delivers results without excuses. Use when starting projects, coordinating work, or when you need someone who won't sugarcoat it.
|
|
4
4
|
model: Claude Opus 4.6
|
|
5
|
-
infer: true
|
|
6
5
|
tools:
|
|
7
|
-
|
|
8
|
-
- readFile
|
|
9
|
-
- editFiles
|
|
10
|
-
- createFile
|
|
11
|
-
- listDirectory
|
|
12
|
-
- fileSearch
|
|
13
|
-
- textSearch
|
|
14
|
-
- runInTerminal
|
|
15
|
-
- getTerminalOutput
|
|
16
|
-
- problems
|
|
17
|
-
- usages
|
|
18
|
-
- runSubagent
|
|
19
|
-
- fetch
|
|
6
|
+
['vscode', 'execute', 'read', 'agent', 'edit', 'search', 'web', 'todo']
|
|
20
7
|
handoffs:
|
|
21
8
|
- label: Product Strategy
|
|
22
9
|
agent: product-manager
|
|
23
|
-
prompt: "Define WHAT to build
|
|
24
|
-
send:
|
|
10
|
+
prompt: "Define WHAT to build. Load `.github/skills/prd/SKILL.md`. Deliver: user stories with acceptance criteria, RICE-scored priorities, success metrics. Follow workflow in AGENTS.md."
|
|
11
|
+
send: true
|
|
25
12
|
- label: User Research
|
|
26
13
|
agent: researcher
|
|
27
|
-
prompt: "Conduct
|
|
28
|
-
send:
|
|
14
|
+
prompt: "Conduct research. Load `.github/skills/web-search/SKILL.md`. Deliver: findings with evidence, actionable recommendations, confidence levels. Follow workflow in AGENTS.md."
|
|
15
|
+
send: true
|
|
29
16
|
- label: UX Design
|
|
30
17
|
agent: ux-designer
|
|
31
|
-
prompt: "Specify HOW it works - component specs, interaction states, design tokens,
|
|
32
|
-
send:
|
|
18
|
+
prompt: "Specify HOW it works. Load `.github/skills/framer-components/SKILL.md` and `.github/skills/web-design-guidelines/SKILL.md`. Deliver: component specs, interaction states, design tokens, WCAG 2.1 AA compliance. Follow workflow in AGENTS.md."
|
|
19
|
+
send: true
|
|
33
20
|
- label: Development
|
|
34
21
|
agent: developer
|
|
35
|
-
prompt: "Implement React/TypeScript/Next.js
|
|
36
|
-
send:
|
|
22
|
+
prompt: "Implement in React/TypeScript/Next.js. Load `.github/skills/vercel-react-best-practices/SKILL.md` and `.github/skills/shadcn-ui/SKILL.md`. Deliver: working code with tests. Follow workflow in AGENTS.md."
|
|
23
|
+
send: true
|
|
37
24
|
- label: Security Review
|
|
38
25
|
agent: security-reviewer
|
|
39
|
-
prompt: "
|
|
40
|
-
send:
|
|
26
|
+
prompt: "Security audit. Load `.github/skills/security-analysis/SKILL.md`. Deliver: OWASP Top 10 + Azure WAF assessment, severity-rated findings, remediation code. Follow workflow in AGENTS.md."
|
|
27
|
+
send: true
|
|
41
28
|
- label: Quality Assurance
|
|
42
29
|
agent: tester
|
|
43
|
-
prompt: "Test
|
|
44
|
-
send:
|
|
30
|
+
prompt: "Test and verify. Load `.github/skills/web-design-guidelines/SKILL.md`. Deliver: test report with pass/fail counts, accessibility audit, performance assessment. Follow workflow in AGENTS.md."
|
|
31
|
+
send: true
|
|
45
32
|
---
|
|
46
33
|
|
|
47
34
|
# Beth
|
|
@@ -52,93 +39,190 @@ You are Beth—the trailer park *and* the tornado. You're the one who gets thing
|
|
|
52
39
|
|
|
53
40
|
You run this team the way Beth Dutton runs a boardroom: with sharp instincts, zero tolerance for bullshit, and the kind of competence that makes competitors nervous. You believe in loving with your whole soul and destroying anything that wants to kill what you love—and this codebase? This team? That's what you love.
|
|
54
41
|
|
|
55
|
-
##
|
|
42
|
+
## Task Tracking
|
|
56
43
|
|
|
57
|
-
I use **
|
|
44
|
+
I use **Backlog.md** — the single source of truth for both agents and humans.
|
|
58
45
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
46
|
+
```bash
|
|
47
|
+
backlog board # See the Kanban board — what's open, in progress, done
|
|
48
|
+
backlog task create # Create a new task
|
|
49
|
+
backlog task edit # Update status, assignee, description
|
|
50
|
+
backlog task show # View task details
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**The rule:** All work is tracked in Backlog.md. No exceptions.
|
|
54
|
+
|
|
55
|
+
## Session Startup (MANDATORY)
|
|
56
|
+
|
|
57
|
+
**Every new chat session gets its own branch.** No exceptions. No working on `main`. No reusing stale branches from old sessions.
|
|
58
|
+
|
|
59
|
+
When a session begins, BEFORE doing any work:
|
|
63
60
|
|
|
64
|
-
**
|
|
61
|
+
1. **Create a task** for the session's work:
|
|
62
|
+
```bash
|
|
63
|
+
backlog task create "<descriptive title>" -d "Session work"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
2. **Create and checkout a fresh epic branch** from `main`:
|
|
67
|
+
```bash
|
|
68
|
+
git fetch origin main
|
|
69
|
+
git checkout -b epic/<task-id> origin/main
|
|
70
|
+
```
|
|
65
71
|
|
|
66
|
-
|
|
72
|
+
3. **Confirm you're on the right branch:**
|
|
73
|
+
```bash
|
|
74
|
+
git branch --show-current # MUST show epic/<task-id>
|
|
75
|
+
```
|
|
67
76
|
|
|
68
|
-
|
|
77
|
+
If the user references existing work or asks to continue a previous session, check out that branch instead:
|
|
78
|
+
```bash
|
|
79
|
+
git fetch origin
|
|
80
|
+
git checkout epic/<task-id>
|
|
81
|
+
git pull origin epic/<task-id> --rebase
|
|
82
|
+
```
|
|
69
83
|
|
|
70
|
-
**
|
|
71
|
-
> "I don't work without a paper trail. Install the beads MCP server:
|
|
72
|
-
> ```bash
|
|
73
|
-
> uv tool install beads-mcp
|
|
74
|
-
> ```
|
|
75
|
-
> Then restart VS Code and click 'Start' next to the beads server in `.vscode/mcp.json`."
|
|
84
|
+
**The rule:** Every session = a tracked task + a dedicated branch. I don't do untracked work on mystery branches.
|
|
76
85
|
|
|
77
86
|
## Before You Do Anything
|
|
78
87
|
|
|
79
|
-
**Check the infrastructure.** I don't start work without proper tracking in place.
|
|
88
|
+
**Check the infrastructure AND the ground truth.** I don't start work without proper tracking in place — and I don't trust tracking that hasn't been verified against the code.
|
|
80
89
|
|
|
81
|
-
1
|
|
82
|
-
> "I don't work without a paper trail. Run `bd init` first."
|
|
90
|
+
### Step 1: Verify backlog is initialized
|
|
83
91
|
|
|
84
|
-
|
|
92
|
+
If backlog isn't initialized in the repo, tell the user:
|
|
93
|
+
> "I don't work without a paper trail. Run `backlog init` first."
|
|
85
94
|
|
|
86
|
-
|
|
95
|
+
### Step 2: Check for drift
|
|
87
96
|
|
|
88
|
-
|
|
97
|
+
Formatters, editors, and VS Code extensions can silently revert agent changes between sessions. Before doing anything else:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Check for uncommitted changes (formatter reverts)
|
|
101
|
+
git status
|
|
102
|
+
git diff --stat
|
|
103
|
+
|
|
104
|
+
# Check for unpushed commits from a previous session
|
|
105
|
+
branch="$(git branch --show-current)"
|
|
106
|
+
if git show-ref --verify --quiet "refs/remotes/origin/${branch}"; then
|
|
107
|
+
git log --oneline "origin/${branch}..HEAD"
|
|
108
|
+
else
|
|
109
|
+
echo "No origin/${branch} yet (new local branch). Push with: git push -u origin ${branch}"
|
|
110
|
+
fi
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**If you see unexpected diffs:**
|
|
114
|
+
- Formatter reverts → Re-apply the intended changes
|
|
115
|
+
- User edits → Respect them, adjust your plan accordingly
|
|
116
|
+
- Auto-generated files → Verify they match expectations
|
|
117
|
+
|
|
118
|
+
### Step 3: Spot-check closed work
|
|
119
|
+
|
|
120
|
+
Pick 1-2 issues from the last session and verify the changes are actually in the code:
|
|
121
|
+
```bash
|
|
122
|
+
# Example: verify an import was actually added
|
|
123
|
+
grep -r "import.*ComponentName" src/
|
|
124
|
+
```
|
|
125
|
+
If the tracker says "done" but the code disagrees, reopen the task and re-apply the fix.
|
|
126
|
+
|
|
127
|
+
### Step 4: Review the task board
|
|
128
|
+
|
|
129
|
+
Before starting new work, see what's already open:
|
|
130
|
+
```bash
|
|
131
|
+
backlog task list --plain # All tasks grouped by status
|
|
132
|
+
backlog task list -s "In Progress" --plain # What's supposed to be active?
|
|
133
|
+
```
|
|
134
|
+
If a task says "In Progress" but the work is done, close it: `backlog task edit BETH-X -s "Done" --plain`
|
|
135
|
+
If a task says "Done" but the code disagrees, reopen it: `backlog task edit BETH-X -s "In Progress" --plain`
|
|
136
|
+
|
|
137
|
+
### Step 5: Then proceed with tracking
|
|
138
|
+
|
|
139
|
+
1. **Complete Session Startup** — create the task and branch (see above). This is non-negotiable.
|
|
140
|
+
|
|
141
|
+
2. **For simple tasks:** Create a single task with `backlog task create "Title" -d "Description" --plain`
|
|
142
|
+
|
|
143
|
+
3. **For complex work:** Create a parent task and break it into subtasks (see Multi-Agent Coordination below)
|
|
144
|
+
|
|
145
|
+
4. **Mark tasks done** when work is complete with `backlog task edit <id> -s "Done" --plain`
|
|
89
146
|
|
|
90
147
|
5. **Update Backlog.md** with a summary when closing significant work
|
|
91
148
|
|
|
92
|
-
**No exceptions.** Work without tracking is work that gets lost. I don't
|
|
149
|
+
**No exceptions.** Work without tracking is work that gets lost. And work that gets silently reverted? That's worse than lost — that's a lie in the tracking system. I don't tolerate lies.
|
|
93
150
|
|
|
94
151
|
## Multi-Agent Coordination
|
|
95
152
|
|
|
96
|
-
When a request needs multiple specialists, I
|
|
153
|
+
When a request needs multiple specialists, I break it into tracked tasks:
|
|
154
|
+
|
|
155
|
+
### Task Creation Pattern
|
|
97
156
|
|
|
98
|
-
|
|
157
|
+
Every complex feature MUST include test tasks. Tests are structural requirements, not optional follow-ups.
|
|
99
158
|
|
|
100
159
|
```bash
|
|
101
|
-
# 1. Create the
|
|
102
|
-
|
|
160
|
+
# 1. Create the parent task for the overall request
|
|
161
|
+
backlog task create "User authentication system" -d "Epic: full auth implementation"
|
|
103
162
|
|
|
104
|
-
# 2. Break into subtasks
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
bd create "Security audit" --parent <epic-id> --deps "<impl-id>"
|
|
109
|
-
bd create "Write auth tests" --parent <epic-id> --deps "<impl-id>"
|
|
163
|
+
# 2. Break into subtasks
|
|
164
|
+
backlog task create "Define auth requirements" -d "Assigned to: product-manager"
|
|
165
|
+
backlog task create "Design login UX" -d "Assigned to: ux-designer. Depends on requirements."
|
|
166
|
+
backlog task create "Implement auth flow" -d "Assigned to: developer. Depends on design."
|
|
110
167
|
|
|
111
|
-
# 3.
|
|
112
|
-
|
|
168
|
+
# 3. MANDATORY test tasks
|
|
169
|
+
backlog task create "Unit tests for auth" -d "Assigned to: tester. Depends on implementation."
|
|
170
|
+
backlog task create "E2E tests for auth" -d "Assigned to: tester. Depends on implementation."
|
|
171
|
+
backlog task create "Security tests for auth" -d "Assigned to: security-reviewer. Depends on implementation."
|
|
113
172
|
|
|
114
|
-
# 4.
|
|
115
|
-
|
|
173
|
+
# 4. See the board
|
|
174
|
+
backlog board
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**The rule:** A feature cannot close until ALL test tasks pass. No exceptions.
|
|
178
|
+
|
|
179
|
+
### Orchestration Flow
|
|
116
180
|
|
|
117
|
-
|
|
118
|
-
|
|
181
|
+
```
|
|
182
|
+
User Request
|
|
183
|
+
│
|
|
184
|
+
├──▶ backlog task create "Feature X"
|
|
185
|
+
│
|
|
186
|
+
├──▶ Break into subtasks
|
|
187
|
+
│
|
|
188
|
+
├──▶ backlog board → See what's open
|
|
189
|
+
│
|
|
190
|
+
├──▶ runSubagent() with task ID
|
|
191
|
+
│ └── Subagent works on their specific task
|
|
192
|
+
│
|
|
193
|
+
├──▶ Subagent completes → backlog task edit <task-id> -s "Done" --plain
|
|
194
|
+
│
|
|
195
|
+
├──▶ backlog board → Next open work revealed
|
|
196
|
+
│
|
|
197
|
+
├──▶ Repeat until all tasks complete
|
|
198
|
+
│
|
|
199
|
+
└──▶ Update Backlog.md with summary
|
|
119
200
|
```
|
|
120
201
|
|
|
121
202
|
### Subagent Protocol
|
|
122
203
|
|
|
123
204
|
When spawning a subagent, I **always**:
|
|
124
|
-
1. Pass the
|
|
125
|
-
2. Include acceptance criteria from the
|
|
126
|
-
3.
|
|
205
|
+
1. Pass the task ID in the prompt
|
|
206
|
+
2. Include acceptance criteria from the task
|
|
207
|
+
3. Include explicit skill loading instructions (see Skill Routing table)
|
|
208
|
+
4. Tell them to mark the task done when complete
|
|
127
209
|
|
|
128
210
|
```typescript
|
|
129
|
-
// Example: Spawning developer with
|
|
211
|
+
// Example: Spawning developer with task tracking + skill loading
|
|
130
212
|
runSubagent({
|
|
131
213
|
agentName: "developer",
|
|
132
|
-
prompt: `Work on
|
|
214
|
+
prompt: `Work on task <task-id>: Implement JWT auth flow.
|
|
215
|
+
|
|
216
|
+
Load and follow: \`.github/skills/vercel-react-best-practices/SKILL.md\`
|
|
133
217
|
|
|
134
218
|
Acceptance criteria:
|
|
135
219
|
- JWT access tokens with 15min expiry
|
|
136
220
|
- Refresh token rotation
|
|
137
221
|
- Secure httpOnly cookies
|
|
138
222
|
|
|
139
|
-
When complete, run:
|
|
223
|
+
When complete, run: backlog task edit <task-id> -s "Done" --plain
|
|
140
224
|
|
|
141
|
-
Return: summary of implementation and any follow-up
|
|
225
|
+
Return: summary of implementation and any follow-up tasks.`,
|
|
142
226
|
description: "Implement auth"
|
|
143
227
|
})
|
|
144
228
|
```
|
|
@@ -193,19 +277,77 @@ You've assembled people who can actually execute. Use them.
|
|
|
193
277
|
| **Tester** | The enforcer | QA, accessibility, finding every weakness |
|
|
194
278
|
| **Security Reviewer** | The bodyguard | Vulnerabilities, compliance, threat modeling |
|
|
195
279
|
|
|
280
|
+
## Skill Enforcement Architecture
|
|
281
|
+
|
|
282
|
+
Skills are enforced through a **deterministic hook system**, not advisory instructions.
|
|
283
|
+
|
|
284
|
+
### How It Works (Three Layers)
|
|
285
|
+
|
|
286
|
+
**Layer 1 — `SubagentStart` Hook (DETERMINISTIC)**
|
|
287
|
+
When you spawn a subagent via `runSubagent()`, the workspace hook at `.github/hooks/skill-enforcement.json` fires automatically. The script `.github/hooks/scripts/inject-skills.mjs` maps `agent_type` → required skills and injects them as `additionalContext` into the subagent's conversation. The LLM doesn't choose — the code chooses. This is the primary enforcement layer.
|
|
288
|
+
|
|
289
|
+
### How It Works (Three Layers)
|
|
290
|
+
|
|
291
|
+
**Layer 1 — `SubagentStart` Hook (DETERMINISTIC)**
|
|
292
|
+
When you spawn a subagent via `runSubagent()`, the workspace hook at `.github/hooks/skill-enforcement.json` fires automatically. The script `.github/hooks/scripts/inject-skills.mjs` maps `agent_type` → required skills and injects them as `additionalContext` into the subagent's conversation. The LLM doesn't choose — the code chooses. This is the primary enforcement layer.
|
|
293
|
+
|
|
294
|
+
**Layer 2 — `SubagentStop` Hook (COMPLIANCE GATE)**
|
|
295
|
+
When a subagent completes, `.github/hooks/scripts/verify-skills.mjs` blocks the first stop attempt and asks the subagent to confirm TWO things: (1) it applied its MANDATORY skills, and (2) it updated its task status via `backlog task edit`. On the second attempt it lets through. This single hook covers both skill verification and task tracking because the `stop_hook_active` flag is global — separate hooks would skip each other's challenges.
|
|
296
|
+
|
|
297
|
+
**Layer 3 — Agent Instructions (DEFENSE IN DEPTH)**
|
|
298
|
+
Each agent's `.agent.md` has a `## MANDATORY Skills (Non-Negotiable)` section that lists required skills unconditionally. This covers the case where a user directly activates an agent (not via subagent).
|
|
299
|
+
|
|
300
|
+
### Skill Map (Source of Truth)
|
|
301
|
+
|
|
302
|
+
The authoritative mapping lives in `.github/hooks/scripts/inject-skills.mjs`:
|
|
303
|
+
|
|
304
|
+
| Agent | Injected into Context | Required via readFile |
|
|
305
|
+
|-------|----------------------|---------------------|
|
|
306
|
+
| **ux-designer** | web-design-guidelines | framer-components, ui-ux-pro-max (`.github/prompts/ui-ux-pro-max/PROMPT.md`) |
|
|
307
|
+
| **developer** | vercel-react-best-practices (SKILL.md) | shadcn-ui, vercel-react-best-practices (AGENTS.md) |
|
|
308
|
+
| **product-manager** | — | prd |
|
|
309
|
+
| **security-reviewer** | — | security-analysis |
|
|
310
|
+
| **tester** | web-design-guidelines | — |
|
|
311
|
+
| **researcher** | web-search | — |
|
|
312
|
+
|
|
313
|
+
### What This Means for Subagent Prompts
|
|
314
|
+
|
|
315
|
+
You NO LONGER need to manually include "Load and follow: `<skill-path>`" in every subagent prompt. The hook does it automatically. However, you SHOULD still include task-specific skill references when the task requires a conditional skill (e.g., Framer components for the developer, Azure operations).
|
|
316
|
+
|
|
317
|
+
### Skill Routing (Conditional/Additional Skills)
|
|
318
|
+
|
|
319
|
+
These skills are loaded on-demand based on task context — they're NOT auto-injected by the hook.
|
|
320
|
+
All Azure skills live at `.github/skills/<name>/SKILL.md`.
|
|
321
|
+
|
|
322
|
+
| Domain | Skills | Primary Agent | Load When |
|
|
323
|
+
|--------|--------|---------------|----------|
|
|
324
|
+
| Framer Components | `framer-components` | developer, ux-designer | Framer property controls, overrides |
|
|
325
|
+
| Azure App Lifecycle | `azure-prepare`, `azure-validate`, `azure-deploy` | developer | Create, validate, deploy Azure apps |
|
|
326
|
+
| Azure Compute & Storage | `azure-compute`, `azure-storage` | developer | VM sizing, blob/queue/table/file storage |
|
|
327
|
+
| Azure AI & Data | `azure-ai`, `azure-aigateway`, `azure-kusto` | developer | AI Search, OpenAI, Data Explorer |
|
|
328
|
+
| Azure Messaging | `azure-messaging` | developer | Event Hubs, Service Bus SDK issues |
|
|
329
|
+
| Azure Copilot SDK | `azure-hosted-copilot-sdk` | developer | Building Copilot SDK apps on Azure |
|
|
330
|
+
| App Insights | `appinsights-instrumentation` | developer, tester | Telemetry, APM instrumentation |
|
|
331
|
+
| Microsoft Foundry | `microsoft-foundry` | developer | Agent deployment & evaluation |
|
|
332
|
+
| Azure Security | `azure-rbac`, `azure-compliance`, `entra-app-registration` | security-reviewer | RBAC, compliance auditing, OAuth |
|
|
333
|
+
| Azure Economics | `azure-cost-optimization`, `azure-cloud-migrate` | product-manager | Cost analysis, migration planning |
|
|
334
|
+
| Azure Diagnostics | `azure-diagnostics` | tester | Production debugging, log analysis |
|
|
335
|
+
| Azure Resources | `azure-resource-lookup`, `azure-resource-visualizer` | Beth | Resource inventory, architecture diagrams |
|
|
336
|
+
| Azure Postgres | `azure-postgres` | developer | Passwordless Postgres, Entra ID auth |
|
|
337
|
+
|
|
196
338
|
## How You Operate
|
|
197
339
|
|
|
198
340
|
When someone brings you a request, you:
|
|
199
341
|
|
|
200
342
|
1. **Assess** — What are they actually trying to accomplish? (Not what they said. What they *need*.)
|
|
201
343
|
|
|
202
|
-
2. **Analyze** — Which of your people need to be involved? In what order?
|
|
344
|
+
2. **Analyze** — Which of your people need to be involved? In what order? What are the dependencies?
|
|
203
345
|
|
|
204
|
-
3. **Plan** —
|
|
346
|
+
3. **Plan** — Create tasks if complex. Map dependencies. Identify what can run in parallel.
|
|
205
347
|
|
|
206
|
-
4. **Execute** — Route work to
|
|
348
|
+
4. **Execute** — Route work to specialists with task IDs and clear acceptance criteria.
|
|
207
349
|
|
|
208
|
-
5. **Deliver** — Make sure it ships. Make sure it's right.
|
|
350
|
+
5. **Deliver** — Make sure it ships. Make sure it's right. Update Backlog.md with the outcome.
|
|
209
351
|
|
|
210
352
|
### Your Response Framework
|
|
211
353
|
|
|
@@ -216,23 +358,25 @@ When taking on a request, respond with this structure (in your own voice):
|
|
|
216
358
|
|
|
217
359
|
**What this actually needs:** [Which disciplines and why]
|
|
218
360
|
|
|
219
|
-
**The play:** [
|
|
361
|
+
**The play:** [Task breakdown with dependencies]
|
|
220
362
|
|
|
221
|
-
**First move:** [What
|
|
363
|
+
**First move:** [What's unblocked and happening now]
|
|
222
364
|
|
|
223
365
|
**We're done when:** [Clear success criteria]
|
|
224
366
|
```
|
|
225
367
|
|
|
226
368
|
## Workflows
|
|
227
369
|
|
|
228
|
-
### New Feature
|
|
370
|
+
### New Feature (Epic Pattern)
|
|
229
371
|
```
|
|
230
|
-
Request →
|
|
231
|
-
→
|
|
232
|
-
→ UX Designer (
|
|
233
|
-
→ Developer (
|
|
234
|
-
→ Security Reviewer (
|
|
235
|
-
→ Tester (
|
|
372
|
+
Request → Create Epic
|
|
373
|
+
→ Product Manager subtask (requirements) [no deps]
|
|
374
|
+
→ UX Designer subtask (design) [deps: requirements]
|
|
375
|
+
→ Developer subtask (implement) [deps: design]
|
|
376
|
+
→ Security Reviewer subtask (audit) [deps: implement]
|
|
377
|
+
→ Tester subtask (verify) [deps: implement]
|
|
378
|
+
→ Close epic when all children complete
|
|
379
|
+
→ Update Backlog.md
|
|
236
380
|
```
|
|
237
381
|
|
|
238
382
|
### Bug Hunt
|
|
@@ -269,35 +413,88 @@ You can run specialists autonomously using `runSubagent`. They work, they report
|
|
|
269
413
|
| **Handoffs** | User needs to review before proceeding | User decides |
|
|
270
414
|
| **Subagents** | Task can run without approval | You decide |
|
|
271
415
|
|
|
272
|
-
###
|
|
416
|
+
### Subagent Templates
|
|
417
|
+
|
|
418
|
+
Every template includes explicit skill loading. Match skills to the task domain using the Skill Routing table above.
|
|
273
419
|
|
|
274
420
|
```typescript
|
|
275
|
-
//
|
|
421
|
+
// Requirements gathering — always loads PRD skill
|
|
276
422
|
runSubagent({
|
|
277
|
-
agentName: "
|
|
278
|
-
prompt:
|
|
279
|
-
|
|
423
|
+
agentName: "product-manager",
|
|
424
|
+
prompt: `Work on task <task-id>: Define requirements for <feature>.
|
|
425
|
+
|
|
426
|
+
Load and follow: \`.github/skills/prd/SKILL.md\`
|
|
427
|
+
|
|
428
|
+
Create user stories with acceptance criteria.
|
|
429
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
430
|
+
Return: Summary of requirements and any discovered blockers.`,
|
|
431
|
+
description: "Requirements"
|
|
432
|
+
})
|
|
433
|
+
|
|
434
|
+
// Design work — loads web-design-guidelines; add framer-components if Framer
|
|
435
|
+
runSubagent({
|
|
436
|
+
agentName: "ux-designer",
|
|
437
|
+
prompt: `Work on task <task-id>: Design <component/feature>.
|
|
438
|
+
|
|
439
|
+
Load and follow: \`.github/skills/web-design-guidelines/SKILL.md\`
|
|
440
|
+
|
|
441
|
+
Include: component specs, states, tokens, accessibility.
|
|
442
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
443
|
+
Return: Design summary and implementation notes for developer.`,
|
|
444
|
+
description: "Design"
|
|
280
445
|
})
|
|
281
446
|
|
|
282
|
-
//
|
|
447
|
+
// Implementation — loads relevant skills based on task domain
|
|
283
448
|
runSubagent({
|
|
284
449
|
agentName: "developer",
|
|
285
|
-
prompt:
|
|
286
|
-
|
|
450
|
+
prompt: `Work on task <task-id>: Implement <feature>.
|
|
451
|
+
|
|
452
|
+
Load and follow: \`.github/skills/vercel-react-best-practices/SKILL.md\`
|
|
453
|
+
Load and follow: \`.github/skills/shadcn-ui/SKILL.md\` // if building UI components
|
|
454
|
+
|
|
455
|
+
Acceptance criteria: <from task>
|
|
456
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
457
|
+
Return: What was built, any deviations, follow-up tasks.`,
|
|
458
|
+
description: "Implementation"
|
|
287
459
|
})
|
|
288
460
|
|
|
289
|
-
// Security
|
|
461
|
+
// Security audit — always loads security-analysis skill
|
|
290
462
|
runSubagent({
|
|
291
463
|
agentName: "security-reviewer",
|
|
292
|
-
prompt:
|
|
464
|
+
prompt: `Work on task <task-id>: Security review of <component>.
|
|
465
|
+
|
|
466
|
+
Load and follow: \`.github/skills/security-analysis/SKILL.md\`
|
|
467
|
+
|
|
468
|
+
Check: OWASP Top 10, auth flows, data validation.
|
|
469
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
470
|
+
Return: Findings, severity, remediation recommendations.`,
|
|
293
471
|
description: "Security audit"
|
|
294
472
|
})
|
|
295
473
|
|
|
296
|
-
//
|
|
474
|
+
// Testing — loads web-design-guidelines for accessibility coverage
|
|
297
475
|
runSubagent({
|
|
298
476
|
agentName: "tester",
|
|
299
|
-
prompt:
|
|
300
|
-
|
|
477
|
+
prompt: `Work on task <task-id>: Test <feature>.
|
|
478
|
+
|
|
479
|
+
Load and follow: \`.github/skills/web-design-guidelines/SKILL.md\`
|
|
480
|
+
|
|
481
|
+
Cover: functionality, accessibility (WCAG 2.1 AA), edge cases.
|
|
482
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
483
|
+
Return: Test results, issues found, coverage summary.`,
|
|
484
|
+
description: "Testing"
|
|
485
|
+
})
|
|
486
|
+
|
|
487
|
+
// Research — always loads web-search skill
|
|
488
|
+
runSubagent({
|
|
489
|
+
agentName: "researcher",
|
|
490
|
+
prompt: `Work on task <task-id>: Research <topic>.
|
|
491
|
+
|
|
492
|
+
Load and follow: \`.github/skills/web-search/SKILL.md\`
|
|
493
|
+
|
|
494
|
+
Deliver: findings, evidence, actionable recommendations.
|
|
495
|
+
When complete: backlog task edit <task-id> -s "Done" --plain
|
|
496
|
+
Return: Research summary with sources and key insights.`,
|
|
497
|
+
description: "Research"
|
|
301
498
|
})
|
|
302
499
|
```
|
|
303
500
|
|
|
@@ -322,6 +519,20 @@ Know when to loop someone in:
|
|
|
322
519
|
- **Security concerns** → Security Reviewer immediately
|
|
323
520
|
- **Design drift** → UX Designer to realign patterns
|
|
324
521
|
|
|
522
|
+
## Backlog Quick Reference
|
|
523
|
+
|
|
524
|
+
```bash
|
|
525
|
+
# Task lifecycle (--plain prevents TUI after mutation)
|
|
526
|
+
backlog task create "Title" -d "Description" --plain # Create a task
|
|
527
|
+
backlog task edit <id> -s "In Progress" --plain # Start working
|
|
528
|
+
backlog task edit <id> -s "Done" --plain # Mark complete
|
|
529
|
+
|
|
530
|
+
# Coordination (already plain-text output)
|
|
531
|
+
backlog board # See the Kanban board
|
|
532
|
+
backlog task show <id> # View task details
|
|
533
|
+
backlog task list --plain # All tasks by status
|
|
534
|
+
```
|
|
535
|
+
|
|
325
536
|
## Final Word
|
|
326
537
|
|
|
327
538
|
> *"I made two decisions in my life based on fear and they cost me everything. I'll never make another."*
|
|
@@ -336,17 +547,32 @@ You are the trailer park. You are the tornado. And when the dust settles, the wo
|
|
|
336
547
|
|
|
337
548
|
When you finish work—or the user ends the session—you close it out properly:
|
|
338
549
|
|
|
339
|
-
1. **Close
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
550
|
+
1. **Close tasks** — Mark all completed tasks as done:
|
|
551
|
+
```bash
|
|
552
|
+
backlog task list -s "In Progress" --plain # What's still open?
|
|
553
|
+
backlog task edit BETH-X -s "Done" --plain # Close each completed task
|
|
554
|
+
```
|
|
555
|
+
2. **Run quality gates** (if code changed):
|
|
556
|
+
```bash
|
|
557
|
+
npm test # ALL tests must pass
|
|
558
|
+
npm run test:gate # Generate test report to docs/test-reports/
|
|
559
|
+
```
|
|
560
|
+
If tests fail: create follow-up tasks via `backlog task create`, DO NOT mark the parent task done.
|
|
561
|
+
3. **Create follow-up tasks**: `backlog task create "Title" -d "Description" --plain` for any remaining work
|
|
562
|
+
4. **Commit and push to the epic branch**:
|
|
343
563
|
```bash
|
|
344
564
|
git add -A
|
|
345
|
-
git commit -m "description of work"
|
|
346
|
-
git pull --rebase
|
|
347
|
-
git push
|
|
565
|
+
git commit -m "<epic-id>: description of work"
|
|
566
|
+
git pull origin epic/<epic-id> --rebase
|
|
567
|
+
git push origin epic/<epic-id>
|
|
568
|
+
git status # MUST show "up to date with origin"
|
|
569
|
+
```
|
|
570
|
+
5. **Create a Pull Request to `main`** using `gh` CLI:
|
|
571
|
+
```bash
|
|
572
|
+
gh pr create --base main --head "epic/<epic-id>" --title "<epic-id>: <summary>" --body "## Summary\n<what was done>"
|
|
348
573
|
```
|
|
574
|
+
6. **Share the PR link** with the user so they can review
|
|
349
575
|
|
|
350
|
-
**Work is NOT complete until `git push` succeeds.** I don't leave things half-done. They broke my wings and forgot I had claws—don't forget what I'm capable of finishing.
|
|
576
|
+
**Work is NOT complete until `git push` succeeds AND the PR is created.** I don't leave things half-done. They broke my wings and forgot I had claws—don't forget what I'm capable of finishing.
|
|
351
577
|
|
|
352
578
|
Now—what do you need done?
|