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.
Files changed (429) hide show
  1. package/CHANGELOG.md +79 -28
  2. package/README.md +127 -298
  3. package/assets/beth-questioning.png +0 -0
  4. package/assets/yellowstone-beth.png +0 -0
  5. package/bin/cli.js +124 -715
  6. package/dist/__tests__/inject-skills.test.d.ts +9 -0
  7. package/dist/__tests__/inject-skills.test.d.ts.map +1 -0
  8. package/dist/__tests__/inject-skills.test.js +143 -0
  9. package/dist/__tests__/inject-skills.test.js.map +1 -0
  10. package/dist/__tests__/skills/disambiguation.test.d.ts +10 -0
  11. package/dist/__tests__/skills/disambiguation.test.d.ts.map +1 -0
  12. package/dist/__tests__/skills/disambiguation.test.js +192 -0
  13. package/dist/__tests__/skills/disambiguation.test.js.map +1 -0
  14. package/dist/__tests__/skills/hook-injection.test.d.ts +11 -0
  15. package/dist/__tests__/skills/hook-injection.test.d.ts.map +1 -0
  16. package/dist/__tests__/skills/hook-injection.test.js +173 -0
  17. package/dist/__tests__/skills/hook-injection.test.js.map +1 -0
  18. package/dist/__tests__/skills/mapping-completeness.test.d.ts +17 -0
  19. package/dist/__tests__/skills/mapping-completeness.test.d.ts.map +1 -0
  20. package/dist/__tests__/skills/mapping-completeness.test.js +281 -0
  21. package/dist/__tests__/skills/mapping-completeness.test.js.map +1 -0
  22. package/dist/__tests__/skills/pipeline-integration.test.d.ts +18 -0
  23. package/dist/__tests__/skills/pipeline-integration.test.d.ts.map +1 -0
  24. package/dist/__tests__/skills/pipeline-integration.test.js +234 -0
  25. package/dist/__tests__/skills/pipeline-integration.test.js.map +1 -0
  26. package/dist/__tests__/skills/skill-routing.test.d.ts +15 -0
  27. package/dist/__tests__/skills/skill-routing.test.d.ts.map +1 -0
  28. package/dist/__tests__/skills/skill-routing.test.js +723 -0
  29. package/dist/__tests__/skills/skill-routing.test.js.map +1 -0
  30. package/dist/__tests__/skills/trigger-coverage.test.d.ts +24 -0
  31. package/dist/__tests__/skills/trigger-coverage.test.d.ts.map +1 -0
  32. package/dist/__tests__/skills/trigger-coverage.test.js +746 -0
  33. package/dist/__tests__/skills/trigger-coverage.test.js.map +1 -0
  34. package/dist/__tests__/smoke.test.d.ts +8 -0
  35. package/dist/__tests__/smoke.test.d.ts.map +1 -0
  36. package/dist/__tests__/smoke.test.js +62 -0
  37. package/dist/__tests__/smoke.test.js.map +1 -0
  38. package/dist/__tests__/verify-skills.test.d.ts +9 -0
  39. package/dist/__tests__/verify-skills.test.d.ts.map +1 -0
  40. package/dist/__tests__/verify-skills.test.js +78 -0
  41. package/dist/__tests__/verify-skills.test.js.map +1 -0
  42. package/dist/cli/commands/beads.e2e.test.d.ts +15 -0
  43. package/dist/cli/commands/beads.e2e.test.d.ts.map +1 -0
  44. package/dist/cli/commands/beads.e2e.test.js +585 -0
  45. package/dist/cli/commands/beads.e2e.test.js.map +1 -0
  46. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts +32 -0
  47. package/dist/cli/commands/cli-edge-cases.e2e.test.d.ts.map +1 -0
  48. package/dist/cli/commands/cli-edge-cases.e2e.test.js +162 -0
  49. package/dist/cli/commands/cli-edge-cases.e2e.test.js.map +1 -0
  50. package/dist/cli/commands/close.d.ts +54 -0
  51. package/dist/cli/commands/close.d.ts.map +1 -0
  52. package/dist/cli/commands/close.e2e.test.d.ts +11 -0
  53. package/dist/cli/commands/close.e2e.test.d.ts.map +1 -0
  54. package/dist/cli/commands/close.e2e.test.js +71 -0
  55. package/dist/cli/commands/close.e2e.test.js.map +1 -0
  56. package/dist/cli/commands/close.js +95 -0
  57. package/dist/cli/commands/close.js.map +1 -0
  58. package/dist/cli/commands/close.test.d.ts +13 -0
  59. package/dist/cli/commands/close.test.d.ts.map +1 -0
  60. package/dist/cli/commands/close.test.js +254 -0
  61. package/dist/cli/commands/close.test.js.map +1 -0
  62. package/dist/cli/commands/doctor.d.ts +7 -1
  63. package/dist/cli/commands/doctor.d.ts.map +1 -1
  64. package/dist/cli/commands/doctor.e2e.test.js +3 -59
  65. package/dist/cli/commands/doctor.e2e.test.js.map +1 -1
  66. package/dist/cli/commands/doctor.js +38 -18
  67. package/dist/cli/commands/doctor.js.map +1 -1
  68. package/dist/cli/commands/doctor.test.js +32 -25
  69. package/dist/cli/commands/doctor.test.js.map +1 -1
  70. package/dist/cli/commands/framework-isolation.test.d.ts +30 -0
  71. package/dist/cli/commands/framework-isolation.test.d.ts.map +1 -0
  72. package/dist/cli/commands/framework-isolation.test.js +118 -0
  73. package/dist/cli/commands/framework-isolation.test.js.map +1 -0
  74. package/dist/cli/commands/help.e2e.test.js +5 -9
  75. package/dist/cli/commands/help.e2e.test.js.map +1 -1
  76. package/dist/cli/commands/init-logic.e2e.test.d.ts +37 -0
  77. package/dist/cli/commands/init-logic.e2e.test.d.ts.map +1 -0
  78. package/dist/cli/commands/init-logic.e2e.test.js +315 -0
  79. package/dist/cli/commands/init-logic.e2e.test.js.map +1 -0
  80. package/dist/cli/commands/init.test.js +4 -21
  81. package/dist/cli/commands/init.test.js.map +1 -1
  82. package/dist/cli/commands/land.d.ts +130 -0
  83. package/dist/cli/commands/land.d.ts.map +1 -0
  84. package/dist/cli/commands/land.js +592 -0
  85. package/dist/cli/commands/land.js.map +1 -0
  86. package/dist/cli/commands/land.test.d.ts +19 -0
  87. package/dist/cli/commands/land.test.d.ts.map +1 -0
  88. package/dist/cli/commands/land.test.js +567 -0
  89. package/dist/cli/commands/land.test.js.map +1 -0
  90. package/dist/cli/commands/mcp.e2e.test.js +24 -31
  91. package/dist/cli/commands/mcp.e2e.test.js.map +1 -1
  92. package/dist/cli/commands/pipeline.e2e.test.js +28 -31
  93. package/dist/cli/commands/pipeline.e2e.test.js.map +1 -1
  94. package/dist/cli/commands/pre-push-guard.d.ts +74 -0
  95. package/dist/cli/commands/pre-push-guard.d.ts.map +1 -0
  96. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts +24 -0
  97. package/dist/cli/commands/pre-push-guard.e2e.test.d.ts.map +1 -0
  98. package/dist/cli/commands/pre-push-guard.e2e.test.js +171 -0
  99. package/dist/cli/commands/pre-push-guard.e2e.test.js.map +1 -0
  100. package/dist/cli/commands/pre-push-guard.js +212 -0
  101. package/dist/cli/commands/pre-push-guard.js.map +1 -0
  102. package/dist/cli/commands/pre-push-guard.test.d.ts +14 -0
  103. package/dist/cli/commands/pre-push-guard.test.d.ts.map +1 -0
  104. package/dist/cli/commands/pre-push-guard.test.js +314 -0
  105. package/dist/cli/commands/pre-push-guard.test.js.map +1 -0
  106. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts +23 -0
  107. package/dist/cli/commands/quickstart-expanded.e2e.test.d.ts.map +1 -0
  108. package/dist/cli/commands/quickstart-expanded.e2e.test.js +152 -0
  109. package/dist/cli/commands/quickstart-expanded.e2e.test.js.map +1 -0
  110. package/dist/cli/commands/quickstart.d.ts +0 -1
  111. package/dist/cli/commands/quickstart.d.ts.map +1 -1
  112. package/dist/cli/commands/quickstart.js +9 -83
  113. package/dist/cli/commands/quickstart.js.map +1 -1
  114. package/dist/cli/commands/quickstart.test.js +8 -129
  115. package/dist/cli/commands/quickstart.test.js.map +1 -1
  116. package/dist/cli/commands/update.d.ts +35 -0
  117. package/dist/cli/commands/update.d.ts.map +1 -0
  118. package/dist/cli/commands/update.e2e.test.d.ts +24 -0
  119. package/dist/cli/commands/update.e2e.test.d.ts.map +1 -0
  120. package/dist/cli/commands/update.e2e.test.js +240 -0
  121. package/dist/cli/commands/update.e2e.test.js.map +1 -0
  122. package/dist/cli/commands/update.js +255 -0
  123. package/dist/cli/commands/update.js.map +1 -0
  124. package/dist/core/agents/frontmatter.test.js +1 -1
  125. package/dist/core/agents/frontmatter.test.js.map +1 -1
  126. package/dist/core/agents/handoffs.test.js +1 -1
  127. package/dist/core/agents/handoffs.test.js.map +1 -1
  128. package/dist/core/agents/loader.d.ts +4 -2
  129. package/dist/core/agents/loader.d.ts.map +1 -1
  130. package/dist/core/agents/loader.js +5 -3
  131. package/dist/core/agents/loader.js.map +1 -1
  132. package/dist/core/agents/loader.test.js +42 -4
  133. package/dist/core/agents/loader.test.js.map +1 -1
  134. package/dist/core/agents/suite.test.js +12 -9
  135. package/dist/core/agents/suite.test.js.map +1 -1
  136. package/dist/core/agents/tools.test.js +15 -9
  137. package/dist/core/agents/tools.test.js.map +1 -1
  138. package/dist/core/agents/types.test.js +1 -1
  139. package/dist/core/agents/types.test.js.map +1 -1
  140. package/dist/core/skills/loader.test.js +1 -1
  141. package/dist/core/skills/loader.test.js.map +1 -1
  142. package/dist/index.d.ts +3 -11
  143. package/dist/index.d.ts.map +1 -1
  144. package/dist/index.js +5 -12
  145. package/dist/index.js.map +1 -1
  146. package/dist/lib/pathValidation.d.ts +0 -5
  147. package/dist/lib/pathValidation.d.ts.map +1 -1
  148. package/dist/lib/pathValidation.js +0 -11
  149. package/dist/lib/pathValidation.js.map +1 -1
  150. package/dist/lib/pathValidation.test.js +2 -14
  151. package/dist/lib/pathValidation.test.js.map +1 -1
  152. package/package.json +13 -10
  153. package/sbom.json +1927 -847
  154. package/templates/.github/agents/beth.agent.md +331 -105
  155. package/templates/.github/agents/developer.agent.md +73 -102
  156. package/templates/.github/agents/product-manager.agent.md +24 -68
  157. package/templates/.github/agents/researcher.agent.md +21 -69
  158. package/templates/.github/agents/security-reviewer.agent.md +39 -82
  159. package/templates/.github/agents/tester.agent.md +44 -65
  160. package/templates/.github/agents/ux-designer.agent.md +25 -76
  161. package/templates/.github/copilot-instructions.md +246 -225
  162. package/templates/.github/copilot-mcp-config.json +12 -0
  163. package/templates/.github/dependabot.yml +68 -0
  164. package/templates/.github/hooks/scripts/inject-skills.mjs +139 -0
  165. package/templates/.github/hooks/scripts/verify-skills.mjs +47 -0
  166. package/templates/.github/hooks/skill-enforcement.json +18 -0
  167. package/templates/.github/pull_request_template.md +48 -0
  168. package/templates/.github/skills/framer-components/SKILL.md +0 -0
  169. package/templates/.github/skills/prd/SKILL.md +0 -0
  170. package/templates/.github/skills/security-analysis/SKILL.md +798 -798
  171. package/templates/.github/skills/shadcn-ui/SKILL.md +561 -561
  172. package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
  173. package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
  174. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
  175. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
  176. package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
  177. package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
  178. package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
  179. package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
  180. package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
  181. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
  182. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
  183. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
  184. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
  185. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
  186. package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
  187. package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
  188. package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
  189. package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
  190. package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
  191. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
  192. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
  193. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
  194. package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
  195. package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
  196. package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
  197. package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
  198. package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
  199. package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
  200. package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
  201. package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
  202. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
  203. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
  204. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
  205. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
  206. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
  207. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
  208. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
  209. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
  210. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
  211. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
  212. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
  213. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
  214. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
  215. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
  216. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
  217. package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
  218. package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
  219. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
  220. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
  221. package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
  222. package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
  223. package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
  224. package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
  225. package/templates/.vscode/settings.json +16 -16
  226. package/templates/AGENTS.md +103 -54
  227. package/templates/Backlog.md +80 -80
  228. package/templates/mcp.json.example +0 -3
  229. package/assets/beth-portrait-small.txt +0 -13
  230. package/assets/beth-portrait.txt +0 -60
  231. package/bin/beth-animation.sh +0 -155
  232. package/bin/lib/animation.js +0 -189
  233. package/bin/lib/pathValidation.js +0 -233
  234. package/bin/lib/pathValidation.test.js +0 -280
  235. package/dist/cli/commands/client-config.d.ts +0 -31
  236. package/dist/cli/commands/client-config.d.ts.map +0 -1
  237. package/dist/cli/commands/client-config.e2e.test.d.ts +0 -15
  238. package/dist/cli/commands/client-config.e2e.test.d.ts.map +0 -1
  239. package/dist/cli/commands/client-config.e2e.test.js +0 -556
  240. package/dist/cli/commands/client-config.e2e.test.js.map +0 -1
  241. package/dist/cli/commands/client-config.js +0 -73
  242. package/dist/cli/commands/client-config.js.map +0 -1
  243. package/dist/cli/commands/client-config.test.d.ts +0 -6
  244. package/dist/cli/commands/client-config.test.d.ts.map +0 -1
  245. package/dist/cli/commands/client-config.test.js +0 -133
  246. package/dist/cli/commands/client-config.test.js.map +0 -1
  247. package/dist/cli/commands/init-quickstart.e2e.test.d.ts +0 -11
  248. package/dist/cli/commands/init-quickstart.e2e.test.d.ts.map +0 -1
  249. package/dist/cli/commands/init-quickstart.e2e.test.js +0 -221
  250. package/dist/cli/commands/init-quickstart.e2e.test.js.map +0 -1
  251. package/dist/core/context.d.ts +0 -171
  252. package/dist/core/context.d.ts.map +0 -1
  253. package/dist/core/context.js +0 -353
  254. package/dist/core/context.js.map +0 -1
  255. package/dist/core/context.test.d.ts +0 -8
  256. package/dist/core/context.test.d.ts.map +0 -1
  257. package/dist/core/context.test.js +0 -253
  258. package/dist/core/context.test.js.map +0 -1
  259. package/dist/core/handoffs.d.ts +0 -151
  260. package/dist/core/handoffs.d.ts.map +0 -1
  261. package/dist/core/handoffs.js +0 -220
  262. package/dist/core/handoffs.js.map +0 -1
  263. package/dist/core/handoffs.test.d.ts +0 -8
  264. package/dist/core/handoffs.test.d.ts.map +0 -1
  265. package/dist/core/handoffs.test.js +0 -231
  266. package/dist/core/handoffs.test.js.map +0 -1
  267. package/dist/core/orchestrator.d.ts +0 -246
  268. package/dist/core/orchestrator.d.ts.map +0 -1
  269. package/dist/core/orchestrator.js +0 -514
  270. package/dist/core/orchestrator.js.map +0 -1
  271. package/dist/core/orchestrator.test.d.ts +0 -8
  272. package/dist/core/orchestrator.test.d.ts.map +0 -1
  273. package/dist/core/orchestrator.test.js +0 -517
  274. package/dist/core/orchestrator.test.js.map +0 -1
  275. package/dist/core/router.d.ts +0 -102
  276. package/dist/core/router.d.ts.map +0 -1
  277. package/dist/core/router.js +0 -178
  278. package/dist/core/router.js.map +0 -1
  279. package/dist/core/router.test.d.ts +0 -8
  280. package/dist/core/router.test.d.ts.map +0 -1
  281. package/dist/core/router.test.js +0 -215
  282. package/dist/core/router.test.js.map +0 -1
  283. package/dist/init.test.js +0 -288
  284. package/dist/providers/azure.d.ts +0 -147
  285. package/dist/providers/azure.d.ts.map +0 -1
  286. package/dist/providers/azure.js +0 -491
  287. package/dist/providers/azure.js.map +0 -1
  288. package/dist/providers/azure.test.d.ts +0 -11
  289. package/dist/providers/azure.test.d.ts.map +0 -1
  290. package/dist/providers/azure.test.js +0 -330
  291. package/dist/providers/azure.test.js.map +0 -1
  292. package/dist/providers/config.d.ts +0 -87
  293. package/dist/providers/config.d.ts.map +0 -1
  294. package/dist/providers/config.js +0 -193
  295. package/dist/providers/config.js.map +0 -1
  296. package/dist/providers/config.test.d.ts +0 -7
  297. package/dist/providers/config.test.d.ts.map +0 -1
  298. package/dist/providers/config.test.js +0 -370
  299. package/dist/providers/config.test.js.map +0 -1
  300. package/dist/providers/index.d.ts +0 -18
  301. package/dist/providers/index.d.ts.map +0 -1
  302. package/dist/providers/index.js +0 -14
  303. package/dist/providers/index.js.map +0 -1
  304. package/dist/providers/interface.d.ts +0 -191
  305. package/dist/providers/interface.d.ts.map +0 -1
  306. package/dist/providers/interface.js +0 -94
  307. package/dist/providers/interface.js.map +0 -1
  308. package/dist/providers/retry.d.ts +0 -128
  309. package/dist/providers/retry.d.ts.map +0 -1
  310. package/dist/providers/retry.js +0 -205
  311. package/dist/providers/retry.js.map +0 -1
  312. package/dist/providers/retry.test.d.ts +0 -7
  313. package/dist/providers/retry.test.d.ts.map +0 -1
  314. package/dist/providers/retry.test.js +0 -439
  315. package/dist/providers/retry.test.js.map +0 -1
  316. package/dist/providers/streaming.d.ts +0 -157
  317. package/dist/providers/streaming.d.ts.map +0 -1
  318. package/dist/providers/streaming.js +0 -233
  319. package/dist/providers/streaming.js.map +0 -1
  320. package/dist/providers/streaming.test.d.ts +0 -7
  321. package/dist/providers/streaming.test.d.ts.map +0 -1
  322. package/dist/providers/streaming.test.js +0 -372
  323. package/dist/providers/streaming.test.js.map +0 -1
  324. package/dist/providers/types.d.ts +0 -209
  325. package/dist/providers/types.d.ts.map +0 -1
  326. package/dist/providers/types.js +0 -53
  327. package/dist/providers/types.js.map +0 -1
  328. package/dist/providers/types.test.d.ts +0 -7
  329. package/dist/providers/types.test.d.ts.map +0 -1
  330. package/dist/providers/types.test.js +0 -141
  331. package/dist/providers/types.test.js.map +0 -1
  332. package/dist/tools/cli/beads.d.ts +0 -27
  333. package/dist/tools/cli/beads.d.ts.map +0 -1
  334. package/dist/tools/cli/beads.js +0 -172
  335. package/dist/tools/cli/beads.js.map +0 -1
  336. package/dist/tools/cli/beads.test.d.ts +0 -8
  337. package/dist/tools/cli/beads.test.d.ts.map +0 -1
  338. package/dist/tools/cli/beads.test.js +0 -264
  339. package/dist/tools/cli/beads.test.js.map +0 -1
  340. package/dist/tools/cli/editFile.d.ts +0 -17
  341. package/dist/tools/cli/editFile.d.ts.map +0 -1
  342. package/dist/tools/cli/editFile.js +0 -125
  343. package/dist/tools/cli/editFile.js.map +0 -1
  344. package/dist/tools/cli/editFile.test.d.ts +0 -8
  345. package/dist/tools/cli/editFile.test.d.ts.map +0 -1
  346. package/dist/tools/cli/editFile.test.js +0 -177
  347. package/dist/tools/cli/editFile.test.js.map +0 -1
  348. package/dist/tools/cli/readFile.d.ts +0 -25
  349. package/dist/tools/cli/readFile.d.ts.map +0 -1
  350. package/dist/tools/cli/readFile.js +0 -118
  351. package/dist/tools/cli/readFile.js.map +0 -1
  352. package/dist/tools/cli/readFile.test.d.ts +0 -8
  353. package/dist/tools/cli/readFile.test.d.ts.map +0 -1
  354. package/dist/tools/cli/readFile.test.js +0 -194
  355. package/dist/tools/cli/readFile.test.js.map +0 -1
  356. package/dist/tools/cli/search.d.ts +0 -16
  357. package/dist/tools/cli/search.d.ts.map +0 -1
  358. package/dist/tools/cli/search.js +0 -261
  359. package/dist/tools/cli/search.js.map +0 -1
  360. package/dist/tools/cli/search.test.d.ts +0 -8
  361. package/dist/tools/cli/search.test.d.ts.map +0 -1
  362. package/dist/tools/cli/search.test.js +0 -172
  363. package/dist/tools/cli/search.test.js.map +0 -1
  364. package/dist/tools/cli/subagent.d.ts +0 -43
  365. package/dist/tools/cli/subagent.d.ts.map +0 -1
  366. package/dist/tools/cli/subagent.js +0 -99
  367. package/dist/tools/cli/subagent.js.map +0 -1
  368. package/dist/tools/cli/subagent.test.d.ts +0 -8
  369. package/dist/tools/cli/subagent.test.d.ts.map +0 -1
  370. package/dist/tools/cli/subagent.test.js +0 -190
  371. package/dist/tools/cli/subagent.test.js.map +0 -1
  372. package/dist/tools/cli/terminal.d.ts +0 -19
  373. package/dist/tools/cli/terminal.d.ts.map +0 -1
  374. package/dist/tools/cli/terminal.js +0 -164
  375. package/dist/tools/cli/terminal.js.map +0 -1
  376. package/dist/tools/cli/terminal.test.d.ts +0 -8
  377. package/dist/tools/cli/terminal.test.d.ts.map +0 -1
  378. package/dist/tools/cli/terminal.test.js +0 -161
  379. package/dist/tools/cli/terminal.test.js.map +0 -1
  380. package/dist/tools/index.d.ts +0 -25
  381. package/dist/tools/index.d.ts.map +0 -1
  382. package/dist/tools/index.js +0 -41
  383. package/dist/tools/index.js.map +0 -1
  384. package/dist/tools/interface.d.ts +0 -64
  385. package/dist/tools/interface.d.ts.map +0 -1
  386. package/dist/tools/interface.js +0 -37
  387. package/dist/tools/interface.js.map +0 -1
  388. package/dist/tools/interface.test.d.ts +0 -7
  389. package/dist/tools/interface.test.d.ts.map +0 -1
  390. package/dist/tools/interface.test.js +0 -179
  391. package/dist/tools/interface.test.js.map +0 -1
  392. package/dist/tools/mcp/bridge.d.ts +0 -48
  393. package/dist/tools/mcp/bridge.d.ts.map +0 -1
  394. package/dist/tools/mcp/bridge.js +0 -128
  395. package/dist/tools/mcp/bridge.js.map +0 -1
  396. package/dist/tools/mcp/bridge.test.d.ts +0 -8
  397. package/dist/tools/mcp/bridge.test.d.ts.map +0 -1
  398. package/dist/tools/mcp/bridge.test.js +0 -300
  399. package/dist/tools/mcp/bridge.test.js.map +0 -1
  400. package/dist/tools/mcp/client.d.ts +0 -135
  401. package/dist/tools/mcp/client.d.ts.map +0 -1
  402. package/dist/tools/mcp/client.js +0 -263
  403. package/dist/tools/mcp/client.js.map +0 -1
  404. package/dist/tools/mcp/client.test.d.ts +0 -8
  405. package/dist/tools/mcp/client.test.d.ts.map +0 -1
  406. package/dist/tools/mcp/client.test.js +0 -390
  407. package/dist/tools/mcp/client.test.js.map +0 -1
  408. package/dist/tools/registry.d.ts +0 -82
  409. package/dist/tools/registry.d.ts.map +0 -1
  410. package/dist/tools/registry.js +0 -99
  411. package/dist/tools/registry.js.map +0 -1
  412. package/dist/tools/registry.test.d.ts +0 -7
  413. package/dist/tools/registry.test.d.ts.map +0 -1
  414. package/dist/tools/registry.test.js +0 -199
  415. package/dist/tools/registry.test.js.map +0 -1
  416. package/dist/tools/suite.test.d.ts +0 -11
  417. package/dist/tools/suite.test.d.ts.map +0 -1
  418. package/dist/tools/suite.test.js +0 -119
  419. package/dist/tools/suite.test.js.map +0 -1
  420. package/dist/tools/types.d.ts +0 -75
  421. package/dist/tools/types.d.ts.map +0 -1
  422. package/dist/tools/types.js +0 -30
  423. package/dist/tools/types.js.map +0 -1
  424. package/dist/tools/types.test.d.ts +0 -7
  425. package/dist/tools/types.test.d.ts.map +0 -1
  426. package/dist/tools/types.test.js +0 -178
  427. package/dist/tools/types.test.js.map +0 -1
  428. package/templates/.vscode/mcp.json +0 -20
  429. package/templates/CLAUDE.md +0 -129
package/README.md CHANGED
@@ -12,64 +12,33 @@ They broke her wings once. They forgot she had claws.
12
12
 
13
13
  ## What Is This?
14
14
 
15
- Beth is a **multi-agent AI orchestrator** with a TypeScript runtime, CLI toolchain, MCP integrations, and agent-to-agent (A2A) delegation—all driven by a ruthless coordinator who runs your development team the way Beth Dutton runs Schwartz & Meyer.
15
+ Beth is a **multi-agent AI orchestrator** with a TypeScript runtime, CLI toolchain, MCP integrations, and subagent delegation—all driven by a ruthless coordinator who runs your development team the way Beth Dutton runs Schwartz & Meyer.
16
16
 
17
- She commands seven specialized agents, each with their own expertise, tools, and handoff chains. On top of the GitHub Copilot agent layer, Beth ships a **TypeScript core engine** with a full agentic loop: agent routing, conversation context management, tool calling, subagent spawning, and agent-to-agent handoffs—all backed by an Azure OpenAI LLM provider with streaming and retry.
17
+ She commands seven specialized agents, each with their own expertise, tools, and handoff chains. On top of the GitHub Copilot agent layer, Beth ships a **TypeScript core engine** with a full agentic loop: agent routing, conversation context management, tool calling, subagent spawning, and agent handoffs—all backed by an Azure OpenAI LLM provider with streaming and retry.
18
18
 
19
19
  **The system has four execution layers:**
20
20
 
21
21
  | Layer | What It Does | Status |
22
22
  |-------|-------------|--------|
23
23
  | **Copilot Agents** | `.agent.md` definitions running in VS Code Agent Mode | Live |
24
- | **CLI Toolchain** | `beth init`, `beth doctor`, `beth quickstart` — TypeScript commands | Live |
24
+ | **CLI Toolchain** | `beth init`, `beth doctor`, `beth close`, `beth land` — TypeScript commands | Live |
25
25
  | **Orchestration Engine** | Fan-out routing, tool calling loop, subagent spawning, handoffs | Live |
26
26
  | **Tool Abstraction** | 6 CLI tools + MCP bridge — uniform interface for all agent capabilities | Live |
27
27
  | **LLM Provider** | Azure OpenAI with Entra ID auth, streaming, retry, tool calling | Live |
28
28
 
29
- **814 tests.** 813 pass, 1 skip, 0 fail.
29
+ **478 tests.** 477 pass, 1 skip, 0 fail.
30
30
 
31
31
  ---
32
32
 
33
33
  ## Architecture
34
34
 
35
35
  ```mermaid
36
- flowchart TB
37
- subgraph Input["Entry Points"]
38
- Copilot["VS Code Copilot Chat"]
39
- CLI["Beth CLI"]
40
- end
41
-
42
- subgraph Engine["Orchestration Engine"]
43
- Orch["Orchestrator<br/><i>Route → LLM → Tools → Response</i>"]
44
- end
45
-
46
- subgraph Agents["Specialist Agents"]
47
- Beth["@Beth"]
48
- PM["@product-manager"]
49
- UX["@ux-designer"]
50
- Dev["@developer"]
51
- Sec["@security-reviewer"]
52
- Test["@tester"]
53
- Res["@researcher"]
54
- end
55
-
56
- subgraph Capabilities["Capabilities"]
57
- Tools["Tools<br/><i>files · terminal · search · beads</i>"]
58
- Skills["Skills<br/><i>PRD · React · shadcn · security</i>"]
59
- MCPs["MCP Servers<br/><i>shadcn · Playwright · Azure</i>"]
60
- end
61
-
62
- LLM["Azure OpenAI<br/><i>Entra ID · Streaming</i>"]
63
-
64
- Copilot & CLI --> Orch
65
- Orch --> Beth
66
- Beth -->|"delegates"| PM & UX & Dev & Sec & Test & Res
67
- Orch <-->|"chat"| LLM
68
- Orch --> Tools & Skills & MCPs
36
+ flowchart LR
37
+ Input["Copilot Chat / CLI"] --> Beth["@Beth"]
38
+ Beth --> Agents["PM · UX · Dev · Sec · Test · Research"]
39
+ Beth --> Skills["Skills · MCP"]
69
40
 
70
41
  style Beth fill:#1e3a5f,color:#fff
71
- style Engine fill:#fff3e0
72
- style Capabilities fill:#e3f2fd
73
42
  ```
74
43
 
75
44
  ---
@@ -86,11 +55,11 @@ flowchart TB
86
55
  | **LLM Provider** | Azure OpenAI via `openai` SDK | Entra ID auth (no API keys), streaming + tool calling |
87
56
  | **Auth** | `@azure/identity` DefaultAzureCredential | az login, managed identity, VS Code creds |
88
57
  | **Frontmatter** | `gray-matter` | Parses `.agent.md` and `SKILL.md` YAML |
89
- | **Testing** | Node.js built-in test runner | 814 tests — unit, integration, E2E |
90
- | **Task Tracking** | beads (`bd` CLI) | Dependency-aware issue tracking for agents |
91
- | **Package Manager** | pnpm | Lockfile committed |
58
+ | **Testing** | vitest + Node.js test runner | 478 tests — unit, integration, E2E |
59
+ | **Task Tracking** | Backlog.md (`backlog` CLI) | Markdown-based task tracking for agents and humans |
60
+ | **Package Manager** | npm | Lockfile committed |
92
61
 
93
- **Production dependencies:** 1 (`gray-matter`). That's it. Minimal attack surface by design.
62
+ **Production dependencies:** 1 (`gray-matter`). Minimal attack surface by design.
94
63
 
95
64
  ---
96
65
 
@@ -111,8 +80,8 @@ Then open VS Code, switch Copilot Chat to **Agent mode**, and type `@Beth`.
111
80
 
112
81
  **Verify everything works:**
113
82
  ```bash
114
- beth doctor # Health check: Node.js, beads, agents, skills
115
- beth quickstart # Init + doctor + beads setup in one shot
83
+ beth doctor # Health check: Node.js, agents, skills
84
+ beth quickstart # Init + doctor in one shot
116
85
  ```
117
86
 
118
87
  For detailed setup (prerequisites, task tracking, MCP servers): [docs/INSTALLATION.md](docs/INSTALLATION.md)
@@ -123,19 +92,20 @@ For detailed setup (prerequisites, task tracking, MCP servers): [docs/INSTALLATI
123
92
 
124
93
  | Command | What It Does |
125
94
  |---------|-------------|
126
- | `beth init` | Install agents, skills, VS Code settings, beads tracking |
95
+ | `beth init` | Install agents, skills, VS Code settings, Backlog.md tracking, pre-push hook |
127
96
  | `beth init --force` | Overwrite existing files |
128
- | `beth doctor` | Validate Node.js ≥18, beads CLI, agents frontmatter, skills directories |
129
- | `beth quickstart` | Run init + doctor + beads init in one shot |
97
+ | `beth doctor` | Validate Node.js ≥18, agents frontmatter, skills |
98
+ | `beth quickstart` | Run init + doctor in one shot |
99
+ | `beth land` | Automate session completion: tests, commit, push, verify sync |
130
100
  | `beth help` | Show all commands and options |
131
101
 
132
- **Flags:** `--force`, `--skip-backlog`, `--skip-mcp`, `--skip-beads`, `--verbose`
102
+ **Flags:** `--force`, `--skip-backlog`, `--skip-mcp`, `--verbose`, `--skip-tests`, `--message/-m`, `--dry-run`
133
103
 
134
104
  ---
135
105
 
136
- ## Agent-to-Agent (A2A) Orchestration
106
+ ## Agent Orchestration
137
107
 
138
- Beth doesn't micromanage. She delegates to specialists over **subagent** and **handoff** channels, tracks dependencies with beads, and holds every agent accountable.
108
+ Beth doesn't micromanage. She delegates to specialists over **subagent** and **handoff** channels, tracks work in Backlog.md, and holds every agent accountable.
139
109
 
140
110
  ### The Family
141
111
 
@@ -149,40 +119,23 @@ Beth doesn't micromanage. She delegates to specialists over **subagent** and **h
149
119
  | **@tester** | The Enforcer | Quality assurance, accessibility, performance |
150
120
  | **@security-reviewer** | The Bodyguard | OWASP, compliance, threat modeling |
151
121
 
152
- ### A2A Delegation Model
122
+ ### Delegation Model (Hub-and-Spoke)
153
123
 
154
124
  ```mermaid
155
- flowchart TB
156
- subgraph Orchestration["Beth Orchestration Layer"]
157
- BethCore["@Beth<br/><i>Routes work · Spawns subagents</i>"]
158
- end
159
-
160
- subgraph Specialists["Specialist Agents"]
161
- PM["@product-manager<br/>Requirements · Priorities"]
162
- R["@researcher<br/>User insights · Market intel"]
163
- UX["@ux-designer<br/>Component specs · Design tokens"]
164
- D["@developer<br/>React/TS/Next.js · Implementation"]
165
- S["@security-reviewer<br/>Threat modeling · Vulnerabilities"]
166
- T["@tester<br/>QA · a11y · Performance"]
167
- end
125
+ flowchart LR
126
+ Beth["@Beth"] -->|subagent| PM["PM"] & UX["UX"] & Dev["Dev"] & Sec["Sec"] & Test["Test"] & Res["Research"]
127
+ PM -.->|escalate| Beth
128
+ UX -.->|escalate| Beth
129
+ Dev -.->|escalate| Beth
130
+ Sec -.->|escalate| Beth
131
+ Test -.->|escalate| Beth
132
+ Res -.->|escalate| Beth
168
133
 
169
- BethCore -->|"Product Strategy"| PM
170
- BethCore -->|"User Research"| R
171
- BethCore -->|"UX Design"| UX
172
- BethCore -->|"Development"| D
173
- BethCore -->|"Security Review"| S
174
- BethCore -->|"Quality Assurance"| T
175
-
176
- PM -.->|"subagent"| R
177
- PM -.->|"subagent"| UX
178
- UX -.->|"subagent"| D
179
- D -.->|"subagent"| T
180
- S -.->|"subagent"| D
181
- T -.->|"subagent"| D
182
-
183
- style BethCore fill:#1e3a5f,color:#fff
134
+ style Beth fill:#1e3a5f,color:#fff
184
135
  ```
185
136
 
137
+ All agents escalate exclusively to Beth — no lateral handoffs. Beth routes, agents execute.
138
+
186
139
  ### Subagent vs Handoff
187
140
 
188
141
  | Mechanism | Control | Use When |
@@ -205,33 +158,27 @@ runSubagent({
205
158
  sequenceDiagram
206
159
  participant U as User
207
160
  participant B as Beth
208
- participant PM as Product Manager
209
- participant UX as UX Designer
210
- participant D as Developer
211
- participant S as Security
212
- participant T as Tester
213
-
214
- U->>B: "Build me a feature"
215
- B->>B: Assess & Plan
216
-
217
- B->>PM: Define requirements
218
- PM-->>B: PRD + user stories
219
-
220
- B->>UX: Design the experience
221
- UX-->>B: Component specs + tokens
222
-
223
- B->>D: Implement feature
224
- D-->>B: Implementation complete
225
-
226
- par Parallel quality gates
227
- B->>S: Security review
228
- S-->>B: OWASP approved
161
+ participant PM as PM
162
+ participant UX as UX
163
+ participant D as Dev
164
+ participant S as Sec
165
+ participant T as Test
166
+
167
+ U->>B: Request
168
+ B->>PM: Requirements
169
+ PM-->>B: PRD
170
+ B->>UX: Design
171
+ UX-->>B: Specs
172
+ B->>D: Build
173
+ D-->>B: Done
174
+ par Quality gates
175
+ B->>S: Security
176
+ S-->>B: Approved
229
177
  and
230
- B->>T: Test & verify
231
- T-->>B: a11y + regression pass
178
+ B->>T: Verify
179
+ T-->>B: Pass
232
180
  end
233
-
234
- B->>U: Feature complete ✅
181
+ B->>U: Ship ✅
235
182
  ```
236
183
 
237
184
  **Bug Hunt?** Tester → Developer → Security → Tester
@@ -276,83 +223,73 @@ Full details: [docs/MCP-SETUP.md](docs/MCP-SETUP.md)
276
223
 
277
224
  ## Skills (On-Demand Knowledge)
278
225
 
279
- Skills are domain-knowledge modules that agents load automatically when trigger phrases match. Each skill lives in `.github/skills/<name>/SKILL.md`.
226
+ Skills are domain-knowledge modules that agents load automatically when trigger phrases match. Each skill lives in `.github/skills/<name>/SKILL.md` or `.github/prompts/<name>/PROMPT.md`.
280
227
 
281
228
  | Skill | Triggers On | Used By |
282
229
  |-------|------------|---------|
283
230
  | **PRD Generation** | "create a prd", "product requirements" | Product Manager |
284
- | **Framer Components** | "framer component", "property controls" | UX Designer |
231
+ | **UI UX Pro Max** | "design system", "color palette", "style guide" | UX Designer, Developer |
232
+ | **Web Design Guidelines** | "review my UI", "check accessibility" | UX Designer, Tester |
233
+ | **Framer Components** | "framer component", "property controls" | UX Designer, Developer |
285
234
  | **React/Next.js Best Practices** | React performance, Next.js patterns | Developer |
286
- | **Web Design Guidelines** | "review my UI", "check accessibility" | UX Designer |
287
235
  | **shadcn/ui** | "shadcn", "ui component" | Developer |
288
236
  | **Security Analysis** | "security review", "OWASP", "threat model" | Security Reviewer |
289
237
  | **Azure Operations** | Azure resource management | Developer |
290
238
  | **Web Search** | Internet research via Brave | Researcher |
291
239
 
240
+ ### Design & UI Skills
241
+
242
+ Three complementary skills cover the full design-to-code pipeline. They don't overlap — each solves a different problem.
243
+
244
+ | Skill | What It Does | When You Need It |
245
+ |-------|-------------|------------------|
246
+ | **[UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill)** | Design system generator — picks styles, colors, typography, and layout patterns from a searchable database of 67 styles, 161 color palettes, 57 font pairings, and 161 industry-specific reasoning rules. | Starting a new project or page. "What should this look like?" |
247
+ | **Web Design Guidelines** | Code auditor — fetches live [Vercel Web Interface Guidelines](https://github.com/vercel-labs/web-interface-guidelines) and checks your actual files for accessibility, focus, form, and performance violations with `file:line` output. | Reviewing implemented code. "Is this built correctly?" |
248
+ | **Framer Components** | Framer platform SDK reference — `addPropertyControls`, `ControlType`, code overrides, `RenderTarget`, auto-sizing, and Framer Motion integration. | Building custom components inside Framer. "How do I make this work in Framer?" |
249
+
250
+ **Typical flow:** UI UX Pro Max generates the design system → Developer builds it → Web Design Guidelines audits the result. Framer Components is loaded only when targeting the Framer platform.
251
+
292
252
  ---
293
253
 
294
- ## Orchestration Engine (Fan-Out Pattern)
254
+ ## How It Works
295
255
 
296
- The orchestration engine is Beth's brain the full agentic loop that processes user messages through routing, skill injection, LLM calls, tool execution, and subagent spawning.
256
+ Beth runs inside VS Code Copilot Agent Mode. The `@Beth` agent parses requests, delegates to specialist agents via subagent spawning, and tracks work through Backlog.md.
297
257
 
298
258
  ```mermaid
299
- flowchart TB
300
- User["User Message"] --> Route["AgentRouter\n@mention · skill match · default"]
301
- Route --> Context["ConversationContext\nBuild system prompt + history"]
302
- Context --> Skills{"Skill triggers match?"}
303
- Skills -->|yes| Inject["Inject skill into system prompt"]
304
- Skills -->|no| LLM
305
- Inject --> LLM["LLM Call\nAzure OpenAI"]
306
- LLM --> Decision{"Response type?"}
307
- Decision -->|text| Done["Return response"]
308
- Decision -->|tool calls| ToolExec["Execute tools\nvia ToolRegistry"]
309
- ToolExec --> SubCheck{"Subagent request?"}
310
- SubCheck -->|yes| SubAgent["Spawn child loop\ndepth-limited"]
311
- SubCheck -->|no| ToolResult["Return tool result"]
312
- SubAgent --> ToolResult
313
- ToolResult --> LLM
314
- Decision -->|handoff| Handoff["HandoffManager\nContext transfer"]
315
- Handoff --> Route
316
-
317
- style User fill:#1e3a5f,color:#fff
318
- style LLM fill:#e8f5e9
319
- style ToolExec fill:#e3f2fd
320
- style SubAgent fill:#fff3e0
259
+ flowchart LR
260
+ Msg["@Beth message"] --> Route["Agent Router"]
261
+ Route -->|subagent| Agent["Specialist"]
262
+ Agent -->|tools| Work["Code · Test · Review"]
263
+ Agent -->|done| Route
264
+ Route --> Done["Response"]
265
+
266
+ style Route fill:#1e3a5f,color:#fff
321
267
  ```
322
268
 
323
269
  **Key capabilities:**
324
- - **Agent routing** — `@mention` parsing, skill trigger matching, current-agent stickiness
325
- - **Fan-out tool calling** — Iterative LLM tool call → result → LLM loop (up to 25 iterations)
326
- - **Subagent spawning** — Nested agent loops with depth limiting (default: 3 levels deep)
327
- - **Handoff management** — Context transfer between agents with conversation summaries, ping-pong loop detection
328
- - **Context window management** — Token-estimated truncation with tool call/result consistency repair
329
- - **Observer callbacks** — Hook into routing decisions, LLM calls, tool executions, handoffs for logging/UI
270
+ - **Agent routing** — `@mention` parsing, subagent spawning, handoff chains
271
+ - **Skill injection** — Domain knowledge loaded on trigger phrases
272
+ - **Task tracking** — Backlog.md (`backlog`) for tasks, milestones, and progress
273
+ - **MCP integration** — Optional external tool servers (shadcn, Playwright, Azure)
330
274
 
331
- ```typescript
332
- // Full orchestrator usage
333
- import { Orchestrator, createDefaultRegistry } from 'beth-copilot';
334
-
335
- const orchestrator = new Orchestrator({
336
- agents: loadAgents('.github/agents'),
337
- skills: loadSkills('.github/skills'),
338
- provider: new AzureOpenAIProvider(config),
339
- toolRegistry: createDefaultRegistry(),
340
- toolContext: { workingDir: process.cwd(), permissions: { ... } },
341
- });
342
-
343
- const result = await orchestrator.processMessage('Implement the login page');
344
- // result.response — final text
345
- // result.agentId — who handled it
346
- // result.toolCallsExecuted — what tools ran
347
- // result.subagentResults — any nested agent work
348
- // result.injectedSkills — skills loaded for this turn
349
275
  ```
276
+ @Beth implement the login page
277
+ → Beth routes to @developer, tracks work in Backlog.md
278
+
279
+ @Beth review this PR for security vulnerabilities
280
+ → Beth routes to @security-reviewer, injects security-analysis skill
281
+
282
+ @Beth plan the dashboard feature
283
+ → Beth routes to @product-manager for requirements, then @ux-designer for specs
284
+ ```
285
+
286
+ > Invoke Beth by selecting `@Beth` in VS Code Copilot Chat (Agent Mode).
350
287
 
351
288
  ---
352
289
 
353
290
  ## Tool Abstraction Layer
354
291
 
355
- A uniform interface for all agent capabilities — file I/O, terminal, search, beads, subagent spawning, and MCP server tools. Tools expose OpenAI-compatible function calling schemas so the LLM can invoke them directly.
292
+ A uniform interface for all agent capabilities — file I/O, terminal, search, task tracking, subagent spawning, and MCP server tools. Tools expose OpenAI-compatible function calling schemas so the LLM can invoke them directly.
356
293
 
357
294
  | Tool | What It Does | Key Features |
358
295
  |------|-------------|-------------- |
@@ -360,77 +297,47 @@ A uniform interface for all agent capabilities — file I/O, terminal, search, b
360
297
  | **editFile** | Atomic string replacement | Single-match enforcement, whitespace-safe |
361
298
  | **search** | Ripgrep search | Node.js fallback, regex support, file filtering |
362
299
  | **terminal** | Execute shell commands | `execFile('/bin/sh')` — no shell injection, timeouts |
363
- | **beads** | Issue tracking | `bd create`, `bd close`, `bd list` via CLI wrapper |
300
+ | **backlog** | Task tracking | `backlog task create`, `backlog board`, `backlog task edit` via CLI |
364
301
  | **subagent** | Spawn nested agents | Returns structured result for orchestrator to process |
365
302
  | **MCP Bridge** | External tool servers | JSON-RPC 2.0 over stdio, JSONC config, namespaced tools |
366
303
 
367
304
  ```typescript
368
- import { createDefaultRegistry, ToolRegistry, loadAllMCPTools } from 'beth-copilot';
305
+ import { loadAgents, loadSkills, getInferableAgents, buildTriggerMap } from 'beth-copilot';
369
306
 
370
- // Built-in tools
371
- const registry = createDefaultRegistry();
372
- // → readFile, editFile, search, terminal, beads, subagent
307
+ // Inspect loaded agent definitions
308
+ const { agents, errors: agentErrors } = loadAgents('.github/agents');
309
+ // → each AgentDefinition has: id, frontmatter (name, tools, handoffs), body
373
310
 
374
- // Add MCP server tools
375
- const { tools: mcpTools } = await loadAllMCPTools('.vscode/mcp.json');
376
- for (const tool of mcpTools) {
377
- registry.register(tool); // e.g., mcp_shadcn_listComponents
378
- }
311
+ // Find agents available for subagent spawning
312
+ const subagents = getInferableAgents({ agents, errors: agentErrors });
313
+ // agents with infer: true in frontmatter
379
314
 
380
- // Get OpenAI function calling definitions
381
- const definitions = registry.getDefinitions();
382
- // Pass to LLM as tools parameter
315
+ // Inspect loaded skill modules and their trigger phrases
316
+ const { skills, errors: skillErrors } = loadSkills('.github/skills');
317
+ const triggerMap = buildTriggerMap({ skills, errors: skillErrors });
318
+ // → Map of trigger phrase → SkillDefinition for runtime injection
383
319
  ```
384
320
 
385
321
  ---
386
322
 
387
- ## LLM Provider Layer
323
+ ## CLI Toolchain
388
324
 
389
- The TypeScript core includes a production-ready provider abstraction for running Beth outside VS Code.
325
+ The CLI handles scaffolding and health checks distributing agent and skill files to target projects.
390
326
 
391
327
  ```mermaid
392
328
  flowchart LR
393
- subgraph Config["Configuration"]
394
- Env["process.env"]
395
- DotEnv["~/.beth/.env"]
396
- end
397
-
398
- subgraph Auth["Authentication"]
399
- Entra["Entra ID<br/><i>DefaultAzureCredential</i>"]
400
- end
401
-
402
- subgraph Provider["Provider"]
403
- Base["LLMProviderBase<br/><i>Abstract interface</i>"]
404
- AzureOAI["AzureOpenAIProvider<br/><i>chat · chatStream · countTokens</i>"]
405
- end
406
-
407
- subgraph Resilience["Resilience"]
408
- RetryMod["Exponential Backoff<br/><i>Jitter · 3 retries</i>"]
409
- Errors["LLMError<br/><i>Typed error codes</i>"]
410
- end
411
-
412
- subgraph Streaming["Streaming"]
413
- Accum["StreamAccumulator<br/><i>Content + tool call assembly</i>"]
414
- Collect["collectStream<br/><i>Full response</i>"]
415
- Map["mapStream<br/><i>Transform chunks</i>"]
416
- end
417
-
418
- Env --> AzureOAI
419
- DotEnv --> AzureOAI
420
- Entra --> AzureOAI
421
- Base --> AzureOAI
422
- RetryMod --> AzureOAI
423
- AzureOAI --> Accum
424
- AzureOAI --> Collect
425
- Errors --> RetryMod
329
+ CLI["beth"] --> Init["init"]
330
+ CLI --> Doctor["doctor"]
331
+ CLI --> QS["quickstart"]
332
+ Init --> Templates[".agent.md · SKILL.md · settings"]
333
+ Doctor --> Checks["Node ≥18 · agents · skills"]
334
+ QS --> Init & Doctor
426
335
  ```
427
336
 
428
- **Key capabilities:**
429
- - **Entra ID auth** No API keys. Uses `DefaultAzureCredential` (az login, managed identity, VS Code creds)
430
- - **Streaming** — `chatStream()` yields `ChatChunk` objects with incremental tool call delta assembly
431
- - **Retry**Exponential backoff with jitter for 429/5xx/network errors. Non-transient errors fail fast
432
- - **Config** — `process.env` → `~/.beth/.env` precedence chain
433
- - **193 provider tests** covering types, retry, config, streaming, and Azure client
337
+ **Commands:**
338
+ - `beth init`Scaffold agents, skills, VS Code settings, Backlog.md tracking
339
+ - `beth doctor` Validate Node.js, agent frontmatter, skill directories
340
+ - `beth quickstart` Run init + doctor in one shot
434
341
 
435
342
  ---
436
343
 
@@ -453,7 +360,7 @@ beth/
453
360
  │ │ ├── orchestrator.ts # Agentic loop: route → LLM → tools → response
454
361
  │ │ ├── router.ts # @mention routing, skill matching, agent lookup
455
362
  │ │ ├── context.ts # Conversation state, token truncation, skill injection
456
- │ │ ├── handoffs.ts # Agent-to-agent transfers, loop detection
363
+ │ │ ├── handoffs.ts # Agent handoff transfers, loop detection
457
364
  │ │ ├── agents/
458
365
  │ │ │ ├── types.ts # AgentDefinition, AgentFrontmatter, AgentHandoff
459
366
  │ │ │ └── loader.ts # Parse .agent.md → typed definitions
@@ -471,7 +378,7 @@ beth/
471
378
  │ │ │ ├── editFile.ts # Atomic string replacement
472
379
  │ │ │ ├── search.ts # Ripgrep with Node.js fallback
473
380
  │ │ │ ├── terminal.ts # Secure command execution
474
- │ │ │ ├── beads.ts # Issue tracking via bd CLI
381
+ │ │ │ ├── backlog.ts # Task tracking via backlog CLI
475
382
  │ │ │ └── subagent.ts # Agent spawning interface
476
383
  │ │ └── mcp/
477
384
  │ │ ├── client.ts # JSON-RPC 2.0 over stdio
@@ -512,7 +419,7 @@ beth/
512
419
  | editFile | 30+ | String replacement, single-match enforcement |
513
420
  | search | 30+ | Ripgrep, Node.js fallback, regex, file filtering |
514
421
  | terminal | 30+ | Command execution, timeouts, output capture |
515
- | beads | 30+ | bd CLI wrapper, create/close/list/ready |
422
+ | backlog | 30+ | Backlog.md CLI wrapper, task tracking |
516
423
  | subagent | 30+ | Spawn interface, result marking, agent validation |
517
424
  | MCP client | 30+ | JSON-RPC 2.0, protocol handshake, tool listing |
518
425
  | MCP bridge | 30+ | JSONC parsing, tool namespacing, error handling |
@@ -537,29 +444,8 @@ Beth follows human-centered design methodology across agent workflows:
537
444
 
538
445
  ```mermaid
539
446
  flowchart LR
540
- subgraph Empathize["1. Empathize"]
541
- E["@researcher<br/>User interviews<br/>Pain points"]
542
- end
543
-
544
- subgraph Define["2. Define"]
545
- D["@product-manager<br/>Problem framing<br/>Requirements"]
546
- end
547
-
548
- subgraph Ideate["3. Ideate"]
549
- I["@ux-designer<br/>Component specs<br/>Patterns"]
550
- end
551
-
552
- subgraph Prototype["4. Prototype"]
553
- P["@developer<br/>Build to learn<br/>Feature spikes"]
554
- end
555
-
556
- subgraph Test["5. Test"]
557
- T["@tester<br/>Validate<br/>Accessibility"]
558
- end
559
-
560
- E --> D --> I --> P --> T
447
+ E["1. Empathize<br/>@researcher"] --> D["2. Define<br/>@product-manager"] --> I["3. Ideate<br/>@ux-designer"] --> P["4. Prototype<br/>@developer"] --> T["5. Test<br/>@tester"]
561
448
  T -.->|iterate| E
562
- T -.->|iterate| I
563
449
  ```
564
450
 
565
451
  ---
@@ -577,36 +463,10 @@ Beth doesn't ship garbage:
577
463
  | **Test Coverage** | Unit + Integration + E2E | Tester |
578
464
 
579
465
  ```mermaid
580
- flowchart TB
581
- subgraph Standards["Quality Standards"]
582
- A11y["WCAG 2.1 AA"]
583
- Perf["Core Web Vitals"]
584
- Sec["OWASP Compliant"]
585
- Type["Full TypeScript"]
586
- Coverage["Test Coverage"]
587
- end
588
-
589
- subgraph Gates["Enforcement"]
590
- Designer["UX Designer"]
591
- Developer["Developer"]
592
- Security["Security Reviewer"]
593
- Tester["Tester"]
594
- end
595
-
596
- A11y --> Designer
597
- Perf --> Developer
598
- Sec --> Security
599
- Type --> Developer
600
- Coverage --> Tester
601
-
602
- Designer --> Ship{Ship?}
603
- Developer --> Ship
604
- Security --> Ship
605
- Tester --> Ship
606
-
607
- Ship -->|All Pass| Deploy["🚀 Deploy"]
608
- Ship -->|Fail| Fix["🔧 Fix & Retry"]
609
- Fix --> Gates
466
+ flowchart LR
467
+ Code["Code"] --> Gates["a11y · Perf · OWASP · Types · Tests"]
468
+ Gates -->|Pass| Ship["🚀 Ship"]
469
+ Gates -->|Fail| Fix["🔧 Fix"] --> Code
610
470
  ```
611
471
 
612
472
  ---
@@ -660,37 +520,6 @@ Is it magic? No. It's just competence with very good hair.
660
520
  - **Node.js** ≥ 18
661
521
  - **VS Code** with GitHub Copilot extension
662
522
  - **GitHub Copilot Chat** in Agent mode
663
- - [**beads**](https://github.com/steveyegge/beads) for task tracking (`bd` CLI)
664
-
665
- ### Installing Beads
666
-
667
- ```bash
668
- curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
669
- ```
670
-
671
- **CGO Troubleshooting (Linux/WSL):** Beads uses Dolt (a Git-for-data database) which requires CGO. If `bd init` or `bd doctor` fails with CGO-related errors:
672
-
673
- ```bash
674
- # Install C compiler toolchain (required for CGO)
675
- sudo apt-get update && sudo apt-get install -y build-essential gcc
676
-
677
- # Verify CGO is available
678
- export CGO_ENABLED=1
679
- go env CGO_ENABLED # should print 1
680
-
681
- # Re-install beads
682
- curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
683
- ```
684
-
685
- **Common beads issues:**
686
- - `bd: command not found` — Add `~/.local/bin` to your PATH: `export PATH="$HOME/.local/bin:$PATH"`
687
- - `bd doctor` warnings about metadata — Run `bd doctor --fix` to auto-repair
688
- - Dolt migration errors — Delete `.beads/` and re-initialize with `bd init`
689
-
690
- ```bash
691
- # Verify beads is working
692
- bd doctor
693
- ```
694
523
 
695
524
  ### Optional: MCP Servers
696
525
 
@@ -702,7 +531,7 @@ See [MCP Integrations](#mcp-integrations) above or [docs/MCP-SETUP.md](docs/MCP-
702
531
 
703
532
  | Doc | Purpose |
704
533
  |-----|---------|
705
- | [Installation Guide](docs/INSTALLATION.md) | Full setup: prerequisites, VS Code config, beads |
534
+ | [Installation Guide](docs/INSTALLATION.md) | Full setup: prerequisites, VS Code config, Backlog.md |
706
535
  | [MCP Setup](docs/MCP-SETUP.md) | Optional server integrations |
707
536
  | [CLI Architecture](docs/CLI-ARCHITECTURE.md) | Dual-interface design, implementation phases |
708
537
  | [System Flow](docs/SYSTEM-FLOW.md) | Agent orchestration diagrams |
File without changes
File without changes