agent-bober 0.12.0 → 0.17.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 (726) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/CHANGELOG.md +243 -0
  4. package/README.md +238 -5
  5. package/agents/bober-architect.md +72 -0
  6. package/agents/bober-code-reviewer.md +238 -0
  7. package/agents/bober-curator.md +49 -0
  8. package/agents/bober-deployer.md +267 -0
  9. package/agents/bober-diagnoser.md +289 -0
  10. package/agents/bober-documenter.md +129 -0
  11. package/agents/bober-evaluator.md +135 -1
  12. package/agents/bober-generator.md +80 -3
  13. package/agents/bober-planner.md +47 -1
  14. package/agents/bober-postmortemer.md +185 -0
  15. package/agents/bober-researcher.md +38 -0
  16. package/dist/cli/commands/approve.d.ts +17 -0
  17. package/dist/cli/commands/approve.d.ts.map +1 -0
  18. package/dist/cli/commands/approve.js +64 -0
  19. package/dist/cli/commands/approve.js.map +1 -0
  20. package/dist/cli/commands/audit-show.d.ts +14 -0
  21. package/dist/cli/commands/audit-show.d.ts.map +1 -0
  22. package/dist/cli/commands/audit-show.js +85 -0
  23. package/dist/cli/commands/audit-show.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +10 -0
  25. package/dist/cli/commands/config.d.ts.map +1 -0
  26. package/dist/cli/commands/config.js +73 -0
  27. package/dist/cli/commands/config.js.map +1 -0
  28. package/dist/cli/commands/graph.d.ts +8 -0
  29. package/dist/cli/commands/graph.d.ts.map +1 -0
  30. package/dist/cli/commands/graph.js +219 -0
  31. package/dist/cli/commands/graph.js.map +1 -0
  32. package/dist/cli/commands/impact.d.ts +19 -0
  33. package/dist/cli/commands/impact.d.ts.map +1 -0
  34. package/dist/cli/commands/impact.js +191 -0
  35. package/dist/cli/commands/impact.js.map +1 -0
  36. package/dist/cli/commands/incident.d.ts +19 -0
  37. package/dist/cli/commands/incident.d.ts.map +1 -0
  38. package/dist/cli/commands/incident.js +324 -0
  39. package/dist/cli/commands/incident.js.map +1 -0
  40. package/dist/cli/commands/init.js +40 -1
  41. package/dist/cli/commands/init.js.map +1 -1
  42. package/dist/cli/commands/list-approvals.d.ts +16 -0
  43. package/dist/cli/commands/list-approvals.d.ts.map +1 -0
  44. package/dist/cli/commands/list-approvals.js +57 -0
  45. package/dist/cli/commands/list-approvals.js.map +1 -0
  46. package/dist/cli/commands/memory.d.ts +14 -0
  47. package/dist/cli/commands/memory.d.ts.map +1 -0
  48. package/dist/cli/commands/memory.js +132 -0
  49. package/dist/cli/commands/memory.js.map +1 -0
  50. package/dist/cli/commands/onboard.d.ts +3 -0
  51. package/dist/cli/commands/onboard.d.ts.map +1 -0
  52. package/dist/cli/commands/onboard.js +190 -0
  53. package/dist/cli/commands/onboard.js.map +1 -0
  54. package/dist/cli/commands/playbook.d.ts +17 -0
  55. package/dist/cli/commands/playbook.d.ts.map +1 -0
  56. package/dist/cli/commands/playbook.js +123 -0
  57. package/dist/cli/commands/playbook.js.map +1 -0
  58. package/dist/cli/commands/postmortem.d.ts +12 -0
  59. package/dist/cli/commands/postmortem.d.ts.map +1 -0
  60. package/dist/cli/commands/postmortem.js +67 -0
  61. package/dist/cli/commands/postmortem.js.map +1 -0
  62. package/dist/cli/commands/reject.d.ts +17 -0
  63. package/dist/cli/commands/reject.d.ts.map +1 -0
  64. package/dist/cli/commands/reject.js +52 -0
  65. package/dist/cli/commands/reject.js.map +1 -0
  66. package/dist/cli/commands/rollback.d.ts +21 -0
  67. package/dist/cli/commands/rollback.d.ts.map +1 -0
  68. package/dist/cli/commands/rollback.js +90 -0
  69. package/dist/cli/commands/rollback.js.map +1 -0
  70. package/dist/cli/commands/run.d.ts +9 -0
  71. package/dist/cli/commands/run.d.ts.map +1 -1
  72. package/dist/cli/commands/run.js +29 -0
  73. package/dist/cli/commands/run.js.map +1 -1
  74. package/dist/cli/commands/telemetry.d.ts +16 -0
  75. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  76. package/dist/cli/commands/telemetry.js +152 -0
  77. package/dist/cli/commands/telemetry.js.map +1 -0
  78. package/dist/cli/commands/worktree.d.ts +12 -0
  79. package/dist/cli/commands/worktree.d.ts.map +1 -0
  80. package/dist/cli/commands/worktree.js +57 -0
  81. package/dist/cli/commands/worktree.js.map +1 -0
  82. package/dist/cli/index.js +56 -0
  83. package/dist/cli/index.js.map +1 -1
  84. package/dist/config/defaults.d.ts.map +1 -1
  85. package/dist/config/defaults.js +41 -3
  86. package/dist/config/defaults.js.map +1 -1
  87. package/dist/config/index.d.ts +1 -1
  88. package/dist/config/index.d.ts.map +1 -1
  89. package/dist/config/index.js +4 -0
  90. package/dist/config/index.js.map +1 -1
  91. package/dist/config/loader.d.ts.map +1 -1
  92. package/dist/config/loader.js +25 -1
  93. package/dist/config/loader.js.map +1 -1
  94. package/dist/config/role-providers.d.ts +29 -0
  95. package/dist/config/role-providers.d.ts.map +1 -0
  96. package/dist/config/role-providers.js +115 -0
  97. package/dist/config/role-providers.js.map +1 -0
  98. package/dist/config/schema.d.ts +1350 -61
  99. package/dist/config/schema.d.ts.map +1 -1
  100. package/dist/config/schema.js +189 -0
  101. package/dist/config/schema.js.map +1 -1
  102. package/dist/contracts/eval-result.d.ts +112 -56
  103. package/dist/contracts/eval-result.d.ts.map +1 -1
  104. package/dist/contracts/eval-result.js +3 -0
  105. package/dist/contracts/eval-result.js.map +1 -1
  106. package/dist/contracts/sprint-contract.d.ts +30 -30
  107. package/dist/fleet/aggregator.d.ts +5 -0
  108. package/dist/fleet/aggregator.d.ts.map +1 -0
  109. package/dist/fleet/aggregator.js +39 -0
  110. package/dist/fleet/aggregator.js.map +1 -0
  111. package/dist/fleet/child-config.d.ts +12 -0
  112. package/dist/fleet/child-config.d.ts.map +1 -0
  113. package/dist/fleet/child-config.js +38 -0
  114. package/dist/fleet/child-config.js.map +1 -0
  115. package/dist/fleet/coordinator.d.ts +25 -0
  116. package/dist/fleet/coordinator.d.ts.map +1 -0
  117. package/dist/fleet/coordinator.js +40 -0
  118. package/dist/fleet/coordinator.js.map +1 -0
  119. package/dist/fleet/index.d.ts +40 -0
  120. package/dist/fleet/index.d.ts.map +1 -0
  121. package/dist/fleet/index.js +117 -0
  122. package/dist/fleet/index.js.map +1 -0
  123. package/dist/fleet/manifest.d.ts +51 -0
  124. package/dist/fleet/manifest.d.ts.map +1 -0
  125. package/dist/fleet/manifest.js +32 -0
  126. package/dist/fleet/manifest.js.map +1 -0
  127. package/dist/fleet/reporter.d.ts +32 -0
  128. package/dist/fleet/reporter.d.ts.map +1 -0
  129. package/dist/fleet/reporter.js +71 -0
  130. package/dist/fleet/reporter.js.map +1 -0
  131. package/dist/fleet/runner.d.ts +48 -0
  132. package/dist/fleet/runner.d.ts.map +1 -0
  133. package/dist/fleet/runner.js +104 -0
  134. package/dist/fleet/runner.js.map +1 -0
  135. package/dist/fleet/scaffolder.d.ts +12 -0
  136. package/dist/fleet/scaffolder.d.ts.map +1 -0
  137. package/dist/fleet/scaffolder.js +82 -0
  138. package/dist/fleet/scaffolder.js.map +1 -0
  139. package/dist/fleet/types.d.ts +21 -0
  140. package/dist/fleet/types.d.ts.map +1 -0
  141. package/dist/fleet/types.js +2 -0
  142. package/dist/fleet/types.js.map +1 -0
  143. package/dist/graph/artifact-store.d.ts +14 -0
  144. package/dist/graph/artifact-store.d.ts.map +1 -0
  145. package/dist/graph/artifact-store.js +100 -0
  146. package/dist/graph/artifact-store.js.map +1 -0
  147. package/dist/graph/cli.d.ts +53 -0
  148. package/dist/graph/cli.d.ts.map +1 -0
  149. package/dist/graph/cli.js +181 -0
  150. package/dist/graph/cli.js.map +1 -0
  151. package/dist/graph/client.d.ts +64 -0
  152. package/dist/graph/client.d.ts.map +1 -0
  153. package/dist/graph/client.js +216 -0
  154. package/dist/graph/client.js.map +1 -0
  155. package/dist/graph/fallback.d.ts +13 -0
  156. package/dist/graph/fallback.d.ts.map +1 -0
  157. package/dist/graph/fallback.js +57 -0
  158. package/dist/graph/fallback.js.map +1 -0
  159. package/dist/graph/hook-handler.d.ts +50 -0
  160. package/dist/graph/hook-handler.d.ts.map +1 -0
  161. package/dist/graph/hook-handler.js +217 -0
  162. package/dist/graph/hook-handler.js.map +1 -0
  163. package/dist/graph/incidents.d.ts +59 -0
  164. package/dist/graph/incidents.d.ts.map +1 -0
  165. package/dist/graph/incidents.js +22 -0
  166. package/dist/graph/incidents.js.map +1 -0
  167. package/dist/graph/mcp-client.d.ts +51 -0
  168. package/dist/graph/mcp-client.d.ts.map +1 -0
  169. package/dist/graph/mcp-client.js +285 -0
  170. package/dist/graph/mcp-client.js.map +1 -0
  171. package/dist/graph/onboarding-composer.d.ts +30 -0
  172. package/dist/graph/onboarding-composer.d.ts.map +1 -0
  173. package/dist/graph/onboarding-composer.js +275 -0
  174. package/dist/graph/onboarding-composer.js.map +1 -0
  175. package/dist/graph/pipeline-lifecycle.d.ts +95 -0
  176. package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
  177. package/dist/graph/pipeline-lifecycle.js +341 -0
  178. package/dist/graph/pipeline-lifecycle.js.map +1 -0
  179. package/dist/graph/preflight-budgets.d.ts +52 -0
  180. package/dist/graph/preflight-budgets.d.ts.map +1 -0
  181. package/dist/graph/preflight-budgets.js +78 -0
  182. package/dist/graph/preflight-budgets.js.map +1 -0
  183. package/dist/graph/preflight-injector.d.ts +130 -0
  184. package/dist/graph/preflight-injector.d.ts.map +1 -0
  185. package/dist/graph/preflight-injector.js +618 -0
  186. package/dist/graph/preflight-injector.js.map +1 -0
  187. package/dist/graph/prereq.d.ts +12 -0
  188. package/dist/graph/prereq.d.ts.map +1 -0
  189. package/dist/graph/prereq.js +61 -0
  190. package/dist/graph/prereq.js.map +1 -0
  191. package/dist/graph/prompts.d.ts +42 -0
  192. package/dist/graph/prompts.d.ts.map +1 -0
  193. package/dist/graph/prompts.js +80 -0
  194. package/dist/graph/prompts.js.map +1 -0
  195. package/dist/graph/sandbox.d.ts +19 -0
  196. package/dist/graph/sandbox.d.ts.map +1 -0
  197. package/dist/graph/sandbox.js +25 -0
  198. package/dist/graph/sandbox.js.map +1 -0
  199. package/dist/graph/token-usage.d.ts +21 -0
  200. package/dist/graph/token-usage.d.ts.map +1 -0
  201. package/dist/graph/token-usage.js +22 -0
  202. package/dist/graph/token-usage.js.map +1 -0
  203. package/dist/graph/types.d.ts +129 -0
  204. package/dist/graph/types.d.ts.map +1 -0
  205. package/dist/graph/types.js +12 -0
  206. package/dist/graph/types.js.map +1 -0
  207. package/dist/incident/orchestrator.d.ts +168 -0
  208. package/dist/incident/orchestrator.d.ts.map +1 -0
  209. package/dist/incident/orchestrator.js +279 -0
  210. package/dist/incident/orchestrator.js.map +1 -0
  211. package/dist/incident/playbook-search.d.ts +67 -0
  212. package/dist/incident/playbook-search.d.ts.map +1 -0
  213. package/dist/incident/playbook-search.js +288 -0
  214. package/dist/incident/playbook-search.js.map +1 -0
  215. package/dist/incident/postmortem.d.ts +44 -0
  216. package/dist/incident/postmortem.d.ts.map +1 -0
  217. package/dist/incident/postmortem.js +486 -0
  218. package/dist/incident/postmortem.js.map +1 -0
  219. package/dist/incident/resolution-verify.d.ts +186 -0
  220. package/dist/incident/resolution-verify.d.ts.map +1 -0
  221. package/dist/incident/resolution-verify.js +210 -0
  222. package/dist/incident/resolution-verify.js.map +1 -0
  223. package/dist/incident/rollback.d.ts +137 -0
  224. package/dist/incident/rollback.d.ts.map +1 -0
  225. package/dist/incident/rollback.js +328 -0
  226. package/dist/incident/rollback.js.map +1 -0
  227. package/dist/incident/timeline.d.ts +147 -0
  228. package/dist/incident/timeline.d.ts.map +1 -0
  229. package/dist/incident/timeline.js +452 -0
  230. package/dist/incident/timeline.js.map +1 -0
  231. package/dist/incident/types.d.ts +335 -0
  232. package/dist/incident/types.d.ts.map +1 -0
  233. package/dist/incident/types.js +158 -0
  234. package/dist/incident/types.js.map +1 -0
  235. package/dist/index.d.ts +1 -1
  236. package/dist/index.d.ts.map +1 -1
  237. package/dist/index.js +1 -1
  238. package/dist/index.js.map +1 -1
  239. package/dist/mcp/event-stream.d.ts +46 -0
  240. package/dist/mcp/event-stream.d.ts.map +1 -0
  241. package/dist/mcp/event-stream.js +421 -0
  242. package/dist/mcp/event-stream.js.map +1 -0
  243. package/dist/mcp/external-client.d.ts +38 -0
  244. package/dist/mcp/external-client.d.ts.map +1 -0
  245. package/dist/mcp/external-client.js +121 -0
  246. package/dist/mcp/external-client.js.map +1 -0
  247. package/dist/mcp/run-manager.d.ts +74 -9
  248. package/dist/mcp/run-manager.d.ts.map +1 -1
  249. package/dist/mcp/run-manager.js +127 -31
  250. package/dist/mcp/run-manager.js.map +1 -1
  251. package/dist/mcp/server.d.ts.map +1 -1
  252. package/dist/mcp/server.js +56 -0
  253. package/dist/mcp/server.js.map +1 -1
  254. package/dist/mcp/tools/abort-run.d.ts +2 -0
  255. package/dist/mcp/tools/abort-run.d.ts.map +1 -0
  256. package/dist/mcp/tools/abort-run.js +62 -0
  257. package/dist/mcp/tools/abort-run.js.map +1 -0
  258. package/dist/mcp/tools/anchor.js +1 -1
  259. package/dist/mcp/tools/anchor.js.map +1 -1
  260. package/dist/mcp/tools/approve-checkpoint.d.ts +2 -0
  261. package/dist/mcp/tools/approve-checkpoint.d.ts.map +1 -0
  262. package/dist/mcp/tools/approve-checkpoint.js +70 -0
  263. package/dist/mcp/tools/approve-checkpoint.js.map +1 -0
  264. package/dist/mcp/tools/brownfield.js +1 -1
  265. package/dist/mcp/tools/brownfield.js.map +1 -1
  266. package/dist/mcp/tools/get-project-state.d.ts +2 -0
  267. package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
  268. package/dist/mcp/tools/get-project-state.js +107 -0
  269. package/dist/mcp/tools/get-project-state.js.map +1 -0
  270. package/dist/mcp/tools/get-run-status.d.ts +2 -0
  271. package/dist/mcp/tools/get-run-status.d.ts.map +1 -0
  272. package/dist/mcp/tools/get-run-status.js +40 -0
  273. package/dist/mcp/tools/get-run-status.js.map +1 -0
  274. package/dist/mcp/tools/graph-schemas.d.ts +100 -0
  275. package/dist/mcp/tools/graph-schemas.d.ts.map +1 -0
  276. package/dist/mcp/tools/graph-schemas.js +39 -0
  277. package/dist/mcp/tools/graph-schemas.js.map +1 -0
  278. package/dist/mcp/tools/graph.d.ts +19 -0
  279. package/dist/mcp/tools/graph.d.ts.map +1 -0
  280. package/dist/mcp/tools/graph.js +263 -0
  281. package/dist/mcp/tools/graph.js.map +1 -0
  282. package/dist/mcp/tools/incident.d.ts +2 -0
  283. package/dist/mcp/tools/incident.d.ts.map +1 -0
  284. package/dist/mcp/tools/incident.js +246 -0
  285. package/dist/mcp/tools/incident.js.map +1 -0
  286. package/dist/mcp/tools/index.d.ts +38 -18
  287. package/dist/mcp/tools/index.d.ts.map +1 -1
  288. package/dist/mcp/tools/index.js +74 -18
  289. package/dist/mcp/tools/index.js.map +1 -1
  290. package/dist/mcp/tools/init.d.ts.map +1 -1
  291. package/dist/mcp/tools/init.js +2 -0
  292. package/dist/mcp/tools/init.js.map +1 -1
  293. package/dist/mcp/tools/list-active-runs.d.ts +2 -0
  294. package/dist/mcp/tools/list-active-runs.d.ts.map +1 -0
  295. package/dist/mcp/tools/list-active-runs.js +35 -0
  296. package/dist/mcp/tools/list-active-runs.js.map +1 -0
  297. package/dist/mcp/tools/list-pending-approvals.d.ts +2 -0
  298. package/dist/mcp/tools/list-pending-approvals.d.ts.map +1 -0
  299. package/dist/mcp/tools/list-pending-approvals.js +40 -0
  300. package/dist/mcp/tools/list-pending-approvals.js.map +1 -0
  301. package/dist/mcp/tools/list-projects.d.ts +2 -0
  302. package/dist/mcp/tools/list-projects.d.ts.map +1 -0
  303. package/dist/mcp/tools/list-projects.js +101 -0
  304. package/dist/mcp/tools/list-projects.js.map +1 -0
  305. package/dist/mcp/tools/list-specs.d.ts +2 -0
  306. package/dist/mcp/tools/list-specs.d.ts.map +1 -0
  307. package/dist/mcp/tools/list-specs.js +48 -0
  308. package/dist/mcp/tools/list-specs.js.map +1 -0
  309. package/dist/mcp/tools/playbook.d.ts +2 -0
  310. package/dist/mcp/tools/playbook.d.ts.map +1 -0
  311. package/dist/mcp/tools/playbook.js +104 -0
  312. package/dist/mcp/tools/playbook.js.map +1 -0
  313. package/dist/mcp/tools/postmortem.d.ts +2 -0
  314. package/dist/mcp/tools/postmortem.d.ts.map +1 -0
  315. package/dist/mcp/tools/postmortem.js +75 -0
  316. package/dist/mcp/tools/postmortem.js.map +1 -0
  317. package/dist/mcp/tools/react.js +1 -1
  318. package/dist/mcp/tools/react.js.map +1 -1
  319. package/dist/mcp/tools/reject-checkpoint.d.ts +2 -0
  320. package/dist/mcp/tools/reject-checkpoint.d.ts.map +1 -0
  321. package/dist/mcp/tools/reject-checkpoint.js +79 -0
  322. package/dist/mcp/tools/reject-checkpoint.js.map +1 -0
  323. package/dist/mcp/tools/rollback.d.ts +2 -0
  324. package/dist/mcp/tools/rollback.d.ts.map +1 -0
  325. package/dist/mcp/tools/rollback.js +78 -0
  326. package/dist/mcp/tools/rollback.js.map +1 -0
  327. package/dist/mcp/tools/run-in-worktree.d.ts +2 -0
  328. package/dist/mcp/tools/run-in-worktree.d.ts.map +1 -0
  329. package/dist/mcp/tools/run-in-worktree.js +90 -0
  330. package/dist/mcp/tools/run-in-worktree.js.map +1 -0
  331. package/dist/mcp/tools/run.js +1 -1
  332. package/dist/mcp/tools/run.js.map +1 -1
  333. package/dist/mcp/tools/solidity.js +1 -1
  334. package/dist/mcp/tools/solidity.js.map +1 -1
  335. package/dist/mcp/tools/status.d.ts.map +1 -1
  336. package/dist/mcp/tools/status.js +11 -0
  337. package/dist/mcp/tools/status.js.map +1 -1
  338. package/dist/mcp/tools/subscribe-events.d.ts +2 -0
  339. package/dist/mcp/tools/subscribe-events.d.ts.map +1 -0
  340. package/dist/mcp/tools/subscribe-events.js +48 -0
  341. package/dist/mcp/tools/subscribe-events.js.map +1 -0
  342. package/dist/mcp/tools/unsubscribe-events.d.ts +2 -0
  343. package/dist/mcp/tools/unsubscribe-events.d.ts.map +1 -0
  344. package/dist/mcp/tools/unsubscribe-events.js +45 -0
  345. package/dist/mcp/tools/unsubscribe-events.js.map +1 -0
  346. package/dist/orchestrator/agent-loader.d.ts +16 -0
  347. package/dist/orchestrator/agent-loader.d.ts.map +1 -1
  348. package/dist/orchestrator/agent-loader.js +30 -0
  349. package/dist/orchestrator/agent-loader.js.map +1 -1
  350. package/dist/orchestrator/agentic-loop.d.ts +51 -0
  351. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  352. package/dist/orchestrator/agentic-loop.js +123 -4
  353. package/dist/orchestrator/agentic-loop.js.map +1 -1
  354. package/dist/orchestrator/arch-lenses.d.ts +7 -0
  355. package/dist/orchestrator/arch-lenses.d.ts.map +1 -0
  356. package/dist/orchestrator/arch-lenses.js +22 -0
  357. package/dist/orchestrator/arch-lenses.js.map +1 -0
  358. package/dist/orchestrator/architect-agent.d.ts +16 -0
  359. package/dist/orchestrator/architect-agent.d.ts.map +1 -1
  360. package/dist/orchestrator/architect-agent.js +546 -9
  361. package/dist/orchestrator/architect-agent.js.map +1 -1
  362. package/dist/orchestrator/checkpoints/audit.d.ts +128 -0
  363. package/dist/orchestrator/checkpoints/audit.d.ts.map +1 -0
  364. package/dist/orchestrator/checkpoints/audit.js +272 -0
  365. package/dist/orchestrator/checkpoints/audit.js.map +1 -0
  366. package/dist/orchestrator/checkpoints/feedback-router.d.ts +213 -0
  367. package/dist/orchestrator/checkpoints/feedback-router.d.ts.map +1 -0
  368. package/dist/orchestrator/checkpoints/feedback-router.js +438 -0
  369. package/dist/orchestrator/checkpoints/feedback-router.js.map +1 -0
  370. package/dist/orchestrator/checkpoints/index.d.ts +11 -0
  371. package/dist/orchestrator/checkpoints/index.d.ts.map +1 -0
  372. package/dist/orchestrator/checkpoints/index.js +12 -0
  373. package/dist/orchestrator/checkpoints/index.js.map +1 -0
  374. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts +35 -0
  375. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts.map +1 -0
  376. package/dist/orchestrator/checkpoints/mechanisms/cli.js +153 -0
  377. package/dist/orchestrator/checkpoints/mechanisms/cli.js.map +1 -0
  378. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts +34 -0
  379. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts.map +1 -0
  380. package/dist/orchestrator/checkpoints/mechanisms/disk.js +139 -0
  381. package/dist/orchestrator/checkpoints/mechanisms/disk.js.map +1 -0
  382. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts +141 -0
  383. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts.map +1 -0
  384. package/dist/orchestrator/checkpoints/mechanisms/pr.js +445 -0
  385. package/dist/orchestrator/checkpoints/mechanisms/pr.js.map +1 -0
  386. package/dist/orchestrator/checkpoints/noop.d.ts +12 -0
  387. package/dist/orchestrator/checkpoints/noop.d.ts.map +1 -0
  388. package/dist/orchestrator/checkpoints/noop.js +13 -0
  389. package/dist/orchestrator/checkpoints/noop.js.map +1 -0
  390. package/dist/orchestrator/checkpoints/registry.d.ts +48 -0
  391. package/dist/orchestrator/checkpoints/registry.d.ts.map +1 -0
  392. package/dist/orchestrator/checkpoints/registry.js +89 -0
  393. package/dist/orchestrator/checkpoints/registry.js.map +1 -0
  394. package/dist/orchestrator/checkpoints/renderers/_util.d.ts +50 -0
  395. package/dist/orchestrator/checkpoints/renderers/_util.d.ts.map +1 -0
  396. package/dist/orchestrator/checkpoints/renderers/_util.js +137 -0
  397. package/dist/orchestrator/checkpoints/renderers/_util.js.map +1 -0
  398. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts +15 -0
  399. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts.map +1 -0
  400. package/dist/orchestrator/checkpoints/renderers/code-review.js +66 -0
  401. package/dist/orchestrator/checkpoints/renderers/code-review.js.map +1 -0
  402. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts +15 -0
  403. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts.map +1 -0
  404. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js +40 -0
  405. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js.map +1 -0
  406. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts +15 -0
  407. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts.map +1 -0
  408. package/dist/orchestrator/checkpoints/renderers/eval-result.js +54 -0
  409. package/dist/orchestrator/checkpoints/renderers/eval-result.js.map +1 -0
  410. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts +49 -0
  411. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts.map +1 -0
  412. package/dist/orchestrator/checkpoints/renderers/generator-diff.js +154 -0
  413. package/dist/orchestrator/checkpoints/renderers/generator-diff.js.map +1 -0
  414. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts +15 -0
  415. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts.map +1 -0
  416. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js +59 -0
  417. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js.map +1 -0
  418. package/dist/orchestrator/checkpoints/renderers/plan.d.ts +15 -0
  419. package/dist/orchestrator/checkpoints/renderers/plan.d.ts.map +1 -0
  420. package/dist/orchestrator/checkpoints/renderers/plan.js +34 -0
  421. package/dist/orchestrator/checkpoints/renderers/plan.js.map +1 -0
  422. package/dist/orchestrator/checkpoints/renderers/registry.d.ts +43 -0
  423. package/dist/orchestrator/checkpoints/renderers/registry.d.ts.map +1 -0
  424. package/dist/orchestrator/checkpoints/renderers/registry.js +83 -0
  425. package/dist/orchestrator/checkpoints/renderers/registry.js.map +1 -0
  426. package/dist/orchestrator/checkpoints/renderers/research.d.ts +15 -0
  427. package/dist/orchestrator/checkpoints/renderers/research.d.ts.map +1 -0
  428. package/dist/orchestrator/checkpoints/renderers/research.js +39 -0
  429. package/dist/orchestrator/checkpoints/renderers/research.js.map +1 -0
  430. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts +20 -0
  431. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts.map +1 -0
  432. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js +57 -0
  433. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js.map +1 -0
  434. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts +15 -0
  435. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts.map +1 -0
  436. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js +38 -0
  437. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js.map +1 -0
  438. package/dist/orchestrator/checkpoints/sites.d.ts +22 -0
  439. package/dist/orchestrator/checkpoints/sites.d.ts.map +1 -0
  440. package/dist/orchestrator/checkpoints/sites.js +57 -0
  441. package/dist/orchestrator/checkpoints/sites.js.map +1 -0
  442. package/dist/orchestrator/checkpoints/types.d.ts +51 -0
  443. package/dist/orchestrator/checkpoints/types.d.ts.map +1 -0
  444. package/dist/orchestrator/checkpoints/types.js +9 -0
  445. package/dist/orchestrator/checkpoints/types.js.map +1 -0
  446. package/dist/orchestrator/code-reviewer-agent.d.ts +50 -0
  447. package/dist/orchestrator/code-reviewer-agent.d.ts.map +1 -0
  448. package/dist/orchestrator/code-reviewer-agent.js +283 -0
  449. package/dist/orchestrator/code-reviewer-agent.js.map +1 -0
  450. package/dist/orchestrator/curator-agent.d.ts.map +1 -1
  451. package/dist/orchestrator/curator-agent.js +60 -9
  452. package/dist/orchestrator/curator-agent.js.map +1 -1
  453. package/dist/orchestrator/deploy/classify.d.ts +31 -0
  454. package/dist/orchestrator/deploy/classify.d.ts.map +1 -0
  455. package/dist/orchestrator/deploy/classify.js +109 -0
  456. package/dist/orchestrator/deploy/classify.js.map +1 -0
  457. package/dist/orchestrator/deploy/execute.d.ts +45 -0
  458. package/dist/orchestrator/deploy/execute.d.ts.map +1 -0
  459. package/dist/orchestrator/deploy/execute.js +146 -0
  460. package/dist/orchestrator/deploy/execute.js.map +1 -0
  461. package/dist/orchestrator/deploy/executor.d.ts +22 -0
  462. package/dist/orchestrator/deploy/executor.d.ts.map +1 -0
  463. package/dist/orchestrator/deploy/executor.js +31 -0
  464. package/dist/orchestrator/deploy/executor.js.map +1 -0
  465. package/dist/orchestrator/deploy/index.d.ts +21 -0
  466. package/dist/orchestrator/deploy/index.d.ts.map +1 -0
  467. package/dist/orchestrator/deploy/index.js +21 -0
  468. package/dist/orchestrator/deploy/index.js.map +1 -0
  469. package/dist/orchestrator/deploy/resolve.d.ts +51 -0
  470. package/dist/orchestrator/deploy/resolve.d.ts.map +1 -0
  471. package/dist/orchestrator/deploy/resolve.js +53 -0
  472. package/dist/orchestrator/deploy/resolve.js.map +1 -0
  473. package/dist/orchestrator/deploy/spawn.d.ts +60 -0
  474. package/dist/orchestrator/deploy/spawn.d.ts.map +1 -0
  475. package/dist/orchestrator/deploy/spawn.js +62 -0
  476. package/dist/orchestrator/deploy/spawn.js.map +1 -0
  477. package/dist/orchestrator/deploy/types.d.ts +98 -0
  478. package/dist/orchestrator/deploy/types.d.ts.map +1 -0
  479. package/dist/orchestrator/deploy/types.js +39 -0
  480. package/dist/orchestrator/deploy/types.js.map +1 -0
  481. package/dist/orchestrator/documenter-agent.d.ts +57 -0
  482. package/dist/orchestrator/documenter-agent.d.ts.map +1 -0
  483. package/dist/orchestrator/documenter-agent.js +195 -0
  484. package/dist/orchestrator/documenter-agent.js.map +1 -0
  485. package/dist/orchestrator/environment.d.ts +45 -0
  486. package/dist/orchestrator/environment.d.ts.map +1 -0
  487. package/dist/orchestrator/environment.js +151 -0
  488. package/dist/orchestrator/environment.js.map +1 -0
  489. package/dist/orchestrator/eval-lenses.d.ts +7 -0
  490. package/dist/orchestrator/eval-lenses.d.ts.map +1 -0
  491. package/dist/orchestrator/eval-lenses.js +19 -0
  492. package/dist/orchestrator/eval-lenses.js.map +1 -0
  493. package/dist/orchestrator/eval-persist.d.ts +25 -0
  494. package/dist/orchestrator/eval-persist.d.ts.map +1 -0
  495. package/dist/orchestrator/eval-persist.js +74 -0
  496. package/dist/orchestrator/eval-persist.js.map +1 -0
  497. package/dist/orchestrator/evaluator-agent.d.ts +23 -0
  498. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  499. package/dist/orchestrator/evaluator-agent.js +80 -10
  500. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  501. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  502. package/dist/orchestrator/generator-agent.js +53 -8
  503. package/dist/orchestrator/generator-agent.js.map +1 -1
  504. package/dist/orchestrator/memory/distill.d.ts +60 -0
  505. package/dist/orchestrator/memory/distill.d.ts.map +1 -0
  506. package/dist/orchestrator/memory/distill.js +177 -0
  507. package/dist/orchestrator/memory/distill.js.map +1 -0
  508. package/dist/orchestrator/memory/eval-source.d.ts +20 -0
  509. package/dist/orchestrator/memory/eval-source.d.ts.map +1 -0
  510. package/dist/orchestrator/memory/eval-source.js +88 -0
  511. package/dist/orchestrator/memory/eval-source.js.map +1 -0
  512. package/dist/orchestrator/memory/retrieve.d.ts +45 -0
  513. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -0
  514. package/dist/orchestrator/memory/retrieve.js +102 -0
  515. package/dist/orchestrator/memory/retrieve.js.map +1 -0
  516. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  517. package/dist/orchestrator/model-resolver.js +15 -1
  518. package/dist/orchestrator/model-resolver.js.map +1 -1
  519. package/dist/orchestrator/observability/index.d.ts +12 -0
  520. package/dist/orchestrator/observability/index.d.ts.map +1 -0
  521. package/dist/orchestrator/observability/index.js +12 -0
  522. package/dist/orchestrator/observability/index.js.map +1 -0
  523. package/dist/orchestrator/observability/merge.d.ts +73 -0
  524. package/dist/orchestrator/observability/merge.d.ts.map +1 -0
  525. package/dist/orchestrator/observability/merge.js +110 -0
  526. package/dist/orchestrator/observability/merge.js.map +1 -0
  527. package/dist/orchestrator/pipeline.d.ts +31 -0
  528. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  529. package/dist/orchestrator/pipeline.js +267 -5
  530. package/dist/orchestrator/pipeline.js.map +1 -1
  531. package/dist/orchestrator/planner-agent.d.ts +22 -1
  532. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  533. package/dist/orchestrator/planner-agent.js +165 -8
  534. package/dist/orchestrator/planner-agent.js.map +1 -1
  535. package/dist/orchestrator/research-agent.d.ts.map +1 -1
  536. package/dist/orchestrator/research-agent.js +48 -11
  537. package/dist/orchestrator/research-agent.js.map +1 -1
  538. package/dist/orchestrator/tools/handlers.d.ts +16 -0
  539. package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
  540. package/dist/orchestrator/tools/handlers.js +30 -5
  541. package/dist/orchestrator/tools/handlers.js.map +1 -1
  542. package/dist/orchestrator/tools/index.d.ts +84 -1
  543. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  544. package/dist/orchestrator/tools/index.js +164 -1
  545. package/dist/orchestrator/tools/index.js.map +1 -1
  546. package/dist/orchestrator/tools/schemas.js +5 -5
  547. package/dist/orchestrator/tools/schemas.js.map +1 -1
  548. package/dist/orchestrator/workflow/args-builder.d.ts +35 -0
  549. package/dist/orchestrator/workflow/args-builder.d.ts.map +1 -0
  550. package/dist/orchestrator/workflow/args-builder.js +142 -0
  551. package/dist/orchestrator/workflow/args-builder.js.map +1 -0
  552. package/dist/orchestrator/workflow/budget.d.ts +57 -0
  553. package/dist/orchestrator/workflow/budget.d.ts.map +1 -0
  554. package/dist/orchestrator/workflow/budget.js +80 -0
  555. package/dist/orchestrator/workflow/budget.js.map +1 -0
  556. package/dist/orchestrator/workflow/conformance.d.ts +27 -0
  557. package/dist/orchestrator/workflow/conformance.d.ts.map +1 -0
  558. package/dist/orchestrator/workflow/conformance.js +111 -0
  559. package/dist/orchestrator/workflow/conformance.js.map +1 -0
  560. package/dist/orchestrator/workflow/eligibility.d.ts +8 -0
  561. package/dist/orchestrator/workflow/eligibility.d.ts.map +1 -0
  562. package/dist/orchestrator/workflow/eligibility.js +10 -0
  563. package/dist/orchestrator/workflow/eligibility.js.map +1 -0
  564. package/dist/orchestrator/workflow/engine.d.ts +10 -0
  565. package/dist/orchestrator/workflow/engine.d.ts.map +1 -0
  566. package/dist/orchestrator/workflow/engine.js +2 -0
  567. package/dist/orchestrator/workflow/engine.js.map +1 -0
  568. package/dist/orchestrator/workflow/errors.d.ts +13 -0
  569. package/dist/orchestrator/workflow/errors.d.ts.map +1 -0
  570. package/dist/orchestrator/workflow/errors.js +26 -0
  571. package/dist/orchestrator/workflow/errors.js.map +1 -0
  572. package/dist/orchestrator/workflow/flusher.d.ts +19 -0
  573. package/dist/orchestrator/workflow/flusher.d.ts.map +1 -0
  574. package/dist/orchestrator/workflow/flusher.js +81 -0
  575. package/dist/orchestrator/workflow/flusher.js.map +1 -0
  576. package/dist/orchestrator/workflow/interpreter.d.ts +48 -0
  577. package/dist/orchestrator/workflow/interpreter.d.ts.map +1 -0
  578. package/dist/orchestrator/workflow/interpreter.js +92 -0
  579. package/dist/orchestrator/workflow/interpreter.js.map +1 -0
  580. package/dist/orchestrator/workflow/pure-sprint.d.ts +65 -0
  581. package/dist/orchestrator/workflow/pure-sprint.d.ts.map +1 -0
  582. package/dist/orchestrator/workflow/pure-sprint.js +82 -0
  583. package/dist/orchestrator/workflow/pure-sprint.js.map +1 -0
  584. package/dist/orchestrator/workflow/reconciler.d.ts +15 -0
  585. package/dist/orchestrator/workflow/reconciler.d.ts.map +1 -0
  586. package/dist/orchestrator/workflow/reconciler.js +65 -0
  587. package/dist/orchestrator/workflow/reconciler.js.map +1 -0
  588. package/dist/orchestrator/workflow/resume-cursor.d.ts +10 -0
  589. package/dist/orchestrator/workflow/resume-cursor.d.ts.map +1 -0
  590. package/dist/orchestrator/workflow/resume-cursor.js +25 -0
  591. package/dist/orchestrator/workflow/resume-cursor.js.map +1 -0
  592. package/dist/orchestrator/workflow/retry.d.ts +50 -0
  593. package/dist/orchestrator/workflow/retry.d.ts.map +1 -0
  594. package/dist/orchestrator/workflow/retry.js +100 -0
  595. package/dist/orchestrator/workflow/retry.js.map +1 -0
  596. package/dist/orchestrator/workflow/scheduler.d.ts +87 -0
  597. package/dist/orchestrator/workflow/scheduler.d.ts.map +1 -0
  598. package/dist/orchestrator/workflow/scheduler.js +158 -0
  599. package/dist/orchestrator/workflow/scheduler.js.map +1 -0
  600. package/dist/orchestrator/workflow/selector.d.ts +26 -0
  601. package/dist/orchestrator/workflow/selector.d.ts.map +1 -0
  602. package/dist/orchestrator/workflow/selector.js +54 -0
  603. package/dist/orchestrator/workflow/selector.js.map +1 -0
  604. package/dist/orchestrator/workflow/synthesizer.d.ts +52 -0
  605. package/dist/orchestrator/workflow/synthesizer.d.ts.map +1 -0
  606. package/dist/orchestrator/workflow/synthesizer.js +75 -0
  607. package/dist/orchestrator/workflow/synthesizer.js.map +1 -0
  608. package/dist/orchestrator/workflow/ts-engine.d.ts +13 -0
  609. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -0
  610. package/dist/orchestrator/workflow/ts-engine.js +14 -0
  611. package/dist/orchestrator/workflow/ts-engine.js.map +1 -0
  612. package/dist/orchestrator/workflow/types.d.ts +55 -0
  613. package/dist/orchestrator/workflow/types.d.ts.map +1 -0
  614. package/dist/orchestrator/workflow/types.js +3 -0
  615. package/dist/orchestrator/workflow/types.js.map +1 -0
  616. package/dist/orchestrator/workflow/workflow-engine.d.ts +31 -0
  617. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -0
  618. package/dist/orchestrator/workflow/workflow-engine.js +70 -0
  619. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -0
  620. package/dist/orchestrator/worktree.d.ts +18 -0
  621. package/dist/orchestrator/worktree.d.ts.map +1 -0
  622. package/dist/orchestrator/worktree.js +129 -0
  623. package/dist/orchestrator/worktree.js.map +1 -0
  624. package/dist/providers/anthropic.d.ts +8 -1
  625. package/dist/providers/anthropic.d.ts.map +1 -1
  626. package/dist/providers/anthropic.js +135 -11
  627. package/dist/providers/anthropic.js.map +1 -1
  628. package/dist/providers/claude-code.d.ts +44 -0
  629. package/dist/providers/claude-code.d.ts.map +1 -0
  630. package/dist/providers/claude-code.js +143 -0
  631. package/dist/providers/claude-code.js.map +1 -0
  632. package/dist/providers/factory.d.ts +16 -2
  633. package/dist/providers/factory.d.ts.map +1 -1
  634. package/dist/providers/factory.js +101 -14
  635. package/dist/providers/factory.js.map +1 -1
  636. package/dist/providers/google.d.ts.map +1 -1
  637. package/dist/providers/google.js +32 -3
  638. package/dist/providers/google.js.map +1 -1
  639. package/dist/providers/index.d.ts +4 -2
  640. package/dist/providers/index.d.ts.map +1 -1
  641. package/dist/providers/index.js +3 -1
  642. package/dist/providers/index.js.map +1 -1
  643. package/dist/providers/openai.d.ts.map +1 -1
  644. package/dist/providers/openai.js +28 -3
  645. package/dist/providers/openai.js.map +1 -1
  646. package/dist/providers/preflight.d.ts +22 -0
  647. package/dist/providers/preflight.d.ts.map +1 -0
  648. package/dist/providers/preflight.js +54 -0
  649. package/dist/providers/preflight.js.map +1 -0
  650. package/dist/providers/structured.d.ts +130 -0
  651. package/dist/providers/structured.d.ts.map +1 -0
  652. package/dist/providers/structured.js +205 -0
  653. package/dist/providers/structured.js.map +1 -0
  654. package/dist/providers/types.d.ts +53 -2
  655. package/dist/providers/types.d.ts.map +1 -1
  656. package/dist/state/approval-state.d.ts +74 -0
  657. package/dist/state/approval-state.d.ts.map +1 -0
  658. package/dist/state/approval-state.js +127 -0
  659. package/dist/state/approval-state.js.map +1 -0
  660. package/dist/state/history-rotation.d.ts +17 -0
  661. package/dist/state/history-rotation.d.ts.map +1 -0
  662. package/dist/state/history-rotation.js +84 -0
  663. package/dist/state/history-rotation.js.map +1 -0
  664. package/dist/state/history.d.ts +16 -4
  665. package/dist/state/history.d.ts.map +1 -1
  666. package/dist/state/history.js +62 -20
  667. package/dist/state/history.js.map +1 -1
  668. package/dist/state/index.d.ts +4 -1
  669. package/dist/state/index.d.ts.map +1 -1
  670. package/dist/state/index.js +5 -2
  671. package/dist/state/index.js.map +1 -1
  672. package/dist/state/memory.d.ts +60 -0
  673. package/dist/state/memory.d.ts.map +1 -0
  674. package/dist/state/memory.js +242 -0
  675. package/dist/state/memory.js.map +1 -0
  676. package/dist/state/review-state.d.ts +15 -0
  677. package/dist/state/review-state.d.ts.map +1 -0
  678. package/dist/state/review-state.js +51 -0
  679. package/dist/state/review-state.js.map +1 -0
  680. package/dist/state/run-state.d.ts +39 -0
  681. package/dist/state/run-state.d.ts.map +1 -0
  682. package/dist/state/run-state.js +101 -0
  683. package/dist/state/run-state.js.map +1 -0
  684. package/dist/telemetry/emit.d.ts +41 -0
  685. package/dist/telemetry/emit.d.ts.map +1 -0
  686. package/dist/telemetry/emit.js +65 -0
  687. package/dist/telemetry/emit.js.map +1 -0
  688. package/dist/utils/git.d.ts +27 -0
  689. package/dist/utils/git.d.ts.map +1 -1
  690. package/dist/utils/git.js +50 -0
  691. package/dist/utils/git.js.map +1 -1
  692. package/hooks/hooks.json +27 -1
  693. package/hooks/session-start +42 -0
  694. package/package.json +13 -6
  695. package/scripts/check-prereqs.sh +12 -0
  696. package/scripts/e2e-graph-smoke.sh +167 -0
  697. package/scripts/graph-hook.mjs +151 -0
  698. package/scripts/run-kpi-gate.mjs +245 -0
  699. package/scripts/spike-claude-code-provider.mjs +66 -0
  700. package/scripts/spike-deepseek.mjs +63 -0
  701. package/scripts/sync-skills.mjs +4 -1
  702. package/scripts/sync-targets.json +12 -0
  703. package/scripts/update-all.mjs +255 -0
  704. package/skills/bober.architect/SKILL.md +13 -0
  705. package/skills/bober.architect/references/arch-lens-panel.md +126 -0
  706. package/skills/bober.code-review/SKILL.md +186 -0
  707. package/skills/bober.debug/SKILL.md +300 -0
  708. package/skills/bober.deploy/SKILL.md +262 -0
  709. package/skills/bober.diagnose/SKILL.md +254 -0
  710. package/skills/bober.eval/SKILL.md +9 -0
  711. package/skills/bober.eval/references/lens-panel.md +115 -0
  712. package/skills/bober.graph/SKILL.md +85 -0
  713. package/skills/bober.impact/SKILL.md +101 -0
  714. package/skills/bober.incident/SKILL.md +245 -0
  715. package/skills/bober.onboard/SKILL.md +84 -0
  716. package/skills/bober.plan/SKILL.md +16 -0
  717. package/skills/bober.postmortem/SKILL.md +231 -0
  718. package/skills/bober.run/SKILL.md +23 -4
  719. package/skills/bober.run/references/lens-panel.md +115 -0
  720. package/skills/bober.runbook/SKILL.md +335 -0
  721. package/skills/bober.sprint/SKILL.md +44 -2
  722. package/skills/bober.sprint/references/lens-panel.md +115 -0
  723. package/skills/bober.using-bober/SKILL.md +133 -0
  724. package/skills/bober.verify/SKILL.md +143 -0
  725. package/skills/shared/arch-lens-panel.md +126 -0
  726. package/skills/shared/lens-panel.md +115 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "agent-bober",
4
+ "description": "Marketplace for the Bober multi-agent harness — installs the bober plugin (24 skills + 10 subagents) so updates propagate via `/plugin update` instead of per-project copies.",
5
+ "owner": {
6
+ "name": "BOBER3r"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "name": "bober",
11
+ "description": "Generator-Evaluator multi-agent harness for building applications autonomously with Claude. Researcher → Planner → Curator → Generator → Evaluator pipeline with a tokensave code-graph, incident/runbook tooling, and stack-specific workflows (React, Solidity, Anchor).",
12
+ "author": {
13
+ "name": "BOBER3r"
14
+ },
15
+ "category": "development",
16
+ "homepage": "https://agentbober.com",
17
+ "source": "./"
18
+ }
19
+ ]
20
+ }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "bober",
3
3
  "description": "Generator-Evaluator multi-agent harness for building applications autonomously with Claude",
4
- "version": "0.1.0",
4
+ "version": "0.15.0",
5
5
  "author": { "name": "BOBER3r" },
6
- "homepage": "https://github.com/BOBER3r/agent-bober",
6
+ "homepage": "https://agentbober.com",
7
7
  "repository": "https://github.com/BOBER3r/agent-bober",
8
8
  "license": "MIT"
9
9
  }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,249 @@ All notable changes to `agent-bober` will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.17.0] — 2026-06-13
11
+
12
+ ### Added
13
+
14
+ - **Per-sprint documenter** ([#41](https://github.com/BOBER3r/agent-bober/pull/41)): a new `documenter` agent spawned after a sprint's evaluator returns PASS — it writes a concise record of what the sprint built and finds & updates the existing docs (README, ADRs, CLAUDE.md, module docs) while the change is fresh, instead of batching all docs into a final sprint. Documentation only (never touches application code or tests) and **advisory** — a documenter failure or timeout never downgrades the already-passed sprint. On by default; configure via the `documenter` config section (`enabled`, `model`, `maxTurns`, `timeoutMs`).
15
+ - **`simplicity` lens** ([#39](https://github.com/BOBER3r/agent-bober/pull/39)): a complexity-only (YAGNI) lens added to both the evaluator (`evaluator.panel`) and architect (`architect.panel`) lens panels. It surfaces reinvented standard-library code, dependencies doing what a native platform feature already does, single-implementation abstractions, dead flexibility, and logic that could be materially shorter — and is explicitly forbidden from ever flagging a test, a validation at a trust boundary, error handling, security, or accessibility as deletable. Mirrored in `skills/shared/{lens-panel,arch-lens-panel}.md` with the existing drift/parity gates.
16
+ - **`bober:` ceiling-comment convention** ([#39](https://github.com/BOBER3r/agent-bober/pull/39)): the generator marks a deliberate simplification that has a known ceiling with a `bober:` comment naming the ceiling **and** the upgrade path (e.g. `// bober: global lock, per-account locks if throughput matters`). The code-reviewer treats a marked shortcut as intent and an unmarked shortcut with an obvious ceiling as a finding; the evaluator treats a marked simplification as not-a-smell (scoped strictly to code-quality, never to the test/verification discipline).
17
+
18
+ ### Fixed
19
+
20
+ - **Stale plugin `.claude/` copies**: regenerated the `bober-planner` agent + `bober-plan` command and the `bober-documenter` agent copies that had drifted from their canonical `agents/` / `skills/` sources (the planner's bounded-lessons-index step and the new documenter agent were missing from the plugin surface). Run `npm run update-all` to keep these in sync.
21
+ - **Untracked plugin agent/command copies now committed**: the `bober-diagnoser`, `bober-deployer`, and `bober-postmortemer` incident agents and the `bober-graph` / `bober-impact` / `bober-onboard` commands existed on disk but were never tracked, so they did not ship on the plugin surface for everyone. They are now committed (canonical sources were already tracked); all six are provider-agnostic and honour the configured provider (Anthropic / DeepSeek / OpenAI-compatible).
22
+
23
+ ## [0.16.0] — 2026-06-04
24
+
25
+ ### Added
26
+
27
+ - **Multi-provider support — DeepSeek** ([#21](https://github.com/BOBER3r/agent-bober/pull/21), [#24](https://github.com/BOBER3r/agent-bober/pull/24)): DeepSeek is now a first-class provider via the built-in `openai-compat` adapter pointed at `https://api.deepseek.com`. Shorthands `deepseek` / `deepseek-v4-pro` / `deepseek-v4-flash` auto-set the endpoint; set `DEEPSEEK_API_KEY`. Supports **all** roles including tool-calling (curator, generator, evaluator, code-reviewer). See [`docs/providers.md`](docs/providers.md).
28
+ - **Multi-provider support — claude-code (subscription)** ([#21](https://github.com/BOBER3r/agent-bober/pull/21), [#24](https://github.com/BOBER3r/agent-bober/pull/24)): a no-API-key `ClaudeCodeAdapter` that shells out to the `claude` CLI on your Claude subscription (`binary` / `timeoutMs` overrides). Planner and researcher roles only — tool-using roles fall back to another configured provider (role-aware fallback).
29
+ - **Evaluator lens panel** ([#25](https://github.com/BOBER3r/agent-bober/pull/25), [#26](https://github.com/BOBER3r/agent-bober/pull/26)): opt-in `evaluator.panel` runs the evaluation across multiple independent lenses (`correctness`, `security`, `regression`, `quality`) with bounded fan-out and a reconcile step, emitting per-lens verdict telemetry. Off by default — byte-identical behavior when disabled.
30
+ - **Architect lens panel** ([#27](https://github.com/BOBER3r/agent-bober/pull/27)): opt-in `architect.panel` gates the architecture approach-selection and review checkpoints into bounded per-lens fan-out (`scalability`, `security`, `cost`, `operability`, `maintainability`, `reversibility`) with a fail-closed reconcile. Off by default.
31
+ - **Native lens-panel surface**: an optional `lensVerdicts` field on the evaluator result schema plus lens-aware evaluator/architect agent modes and a parity/drift gate, so the Claude Code plugin surface mirrors the TypeScript panel behavior. Canonical references at `skills/shared/lens-panel.md` and `skills/shared/arch-lens-panel.md`.
32
+ - **Config-selectable orchestration engine**: `pipeline.engine` (`'ts'` | `'skill'` | `'workflow'`, default `'ts'`) selects the pipeline orchestration engine behind an engine-selection seam, with an eligibility probe that downgrades `workflow` → `ts` when ineligible or in `careful` mode. No behavior change on the default `ts` path.
33
+ - **Graph telemetry + `update-all`** ([#19](https://github.com/BOBER3r/agent-bober/pull/19), [#20](https://github.com/BOBER3r/agent-bober/pull/20)): tokensave code-graph preflight telemetry written to `.bober/history.jsonl`, and an `update-all` sync flow (`npm run update-all`) that keeps the CLI, skills, agents, and plugin marketplace in sync.
34
+ - **Preset-aware slash-command installation** ([#11](https://github.com/BOBER3r/agent-bober/pull/11), [#12](https://github.com/BOBER3r/agent-bober/pull/12)) *(shipped in 0.12.0, documented here)*: `bober init` now installs only the universal commands plus the commands relevant to the chosen preset, instead of every command.
35
+
36
+ ### Fixed
37
+
38
+ - **Plugin PostToolUse hooks schema** ([#22](https://github.com/BOBER3r/agent-bober/pull/22), [#23](https://github.com/BOBER3r/agent-bober/pull/23)): PostToolUse hooks are now wrapped in the required `hooks[]` array so the Claude Code plugin loads them correctly.
39
+
40
+ ## [0.15.0] — 2026-05-29
41
+
42
+ ### Added
43
+
44
+ - **Claude Opus 4.8 support** ([#17](https://github.com/BOBER3r/agent-bober/pull/17)): the `opus` shorthand now resolves to `claude-opus-4-8` (1M context, adaptive thinking); added an `opus-4-7` shorthand to pin the previous model.
45
+ - **`@anthropic-ai/sdk` upgraded `0.39.0` → `0.100.1`** to expose the Opus 4.8 request fields, with zero adapter behavior change.
46
+ - **Anthropic prompt caching** (pattern borrowed from nousresearch/hermes-agent): ephemeral `cache_control` breakpoints on the system prompt + recent messages (system-and-last-3, capped at 4 per request), behind `providerConfig.promptCaching` — default **on** for Anthropic, no-op for other providers.
47
+ - **`effort` control**: optional `ChatParams.effort` (`low` | `medium` | `high` | `xhigh` | `max`) forwarded as top-level `output_config.effort`; omitted when unset so the API default (`high` on Opus 4.8) applies. Non-Anthropic adapters ignore it.
48
+ - **Mid-conversation system blocks**: a `SystemUpdateMessage` message variant renders to an Anthropic `mid_conv_system` content block with optional ephemeral `cache_control`; OpenAI and Google adapters handle it best-effort without error.
49
+ - **`bober_list_pending_approvals`**: List all pending careful-flow checkpoints awaiting human
50
+ approval. Accepts optional `{ projectPath?: string }` (must be absolute when supplied; defaults
51
+ to cwd). Returns `[{ checkpointId, ageMs, prompt }]` — identical shape to `bober list-approvals
52
+ --json`. Backed by the new shared `listPendingApprovals(projectRoot)` helper in
53
+ `src/state/approval-state.ts`.
54
+ - **`bober_approve_checkpoint`**: Approve a pending checkpoint over MCP by writing
55
+ `.bober/approvals/<id>.approved.json` with the same payload shape as `bober approve`
56
+ (`{ approvedAt, approverId, editDelta? }`). Accepts `{ checkpointId, projectPath?, editDelta? }`.
57
+ Guards with `pendingExists` before writing. Returns `{ approvedAt, checkpointId }`.
58
+ - **`bober_reject_checkpoint`**: Reject a pending checkpoint over MCP by writing
59
+ `.bober/approvals/<id>.rejected.json` with the same payload shape as `bober reject`
60
+ (`{ rejectedAt, rejecterId, feedback }`). Accepts `{ checkpointId, projectPath?, feedback }`
61
+ (feedback required and non-empty). Guards with `pendingExists` before writing.
62
+ Returns `{ rejectedAt, checkpointId }`.
63
+ - **`bober_list_projects`**: Enumerate bober projects under one or more search roots.
64
+ Accepts `{ searchRoots: string[] }`. Walks each root one level deep; returns
65
+ `[{ projectPath, name, mode?, hasActiveRuns, lastRunAt? }]` for every directory
66
+ containing `bober.config.json`. Unreadable roots are skipped with a stderr warning.
67
+ READ-ONLY — does not instantiate RunManager; reads `.bober/runs/*/state.json` directly.
68
+ - **`bober_list_specs`**: List PlanSpecs in a project. Accepts `{ projectPath }`.
69
+ Reads `.bober/specs/*.json` with loose parsing (invalid files silently skipped).
70
+ Returns `[{ specId, title, status, sprintCount, completedAt? }]`.
71
+ - **`bober_get_project_state`**: Aggregate per-project state counts for the cockpit sidebar.
72
+ Accepts `{ projectPath }`. Returns `{ configExists, activeRunCount, lastRunAt?,
73
+ openIncidentCount, pendingApprovalCount, specCount, mode? }`. READ-ONLY — does not
74
+ instantiate RunManager.
75
+ - All six new tools accept an optional `projectPath` (required for discovery tools; optional
76
+ for approval tools). When supplied, `projectPath` must be absolute — a relative path returns
77
+ a soft-error JSON `{ error: "projectPath must be absolute" }` rather than throwing.
78
+ - **`listPendingApprovals(projectRoot)`** helper extracted from
79
+ `src/cli/commands/list-approvals.ts` into `src/state/approval-state.ts`. Both the CLI and
80
+ the MCP tool `bober_list_pending_approvals` share this helper. Exported from
81
+ `src/state/index.ts` as `listPendingApprovals` / `PendingApprovalRow`.
82
+ - **`readRunStatesFromDisk(projectRoot)`** helper added to `src/state/run-state.ts` as a
83
+ named alias for `listRunStateFiles`. Exported from `src/state/index.ts`. Cockpit discovery
84
+ tools use it to enumerate run states for arbitrary project roots without touching the
85
+ RunManager singleton.
86
+ - MCP tool count: **23 → 29**.
87
+
88
+ - **`bober_run_in_worktree`**: Start a pipeline inside an isolated git worktree on a new branch.
89
+ Input: `{ task: string, allowDirty?: boolean, keepOnSuccess?: boolean }`. Returns
90
+ `{ runId, branch, worktreePath, status: 'running' }` immediately (fire-and-forget like `bober_run`).
91
+ Multiple worktree runs can execute concurrently on the same project. Use `bober_get_run_status`
92
+ to track progress.
93
+ - **`bober worktree run <task>`** CLI subcommand mirroring the MCP tool. Flags:
94
+ `--allow-dirty` (skip uncommitted-changes guard), `--keep-on-success` (retain worktree after success).
95
+ Prints `{ runId, branch, worktreePath, projectRoot }` JSON to stdout.
96
+ - **`runInWorktree(task, projectRoot, config, opts)`** (`src/orchestrator/worktree.ts`): the shared helper
97
+ the CLI and MCP tool both use. Creates a git worktree under `<pipeline.worktreeRoot>/<runId>` on a
98
+ branch derived from `generator.branchPattern`, runs the pipeline inside it, and on success removes
99
+ the worktree per `pipeline.cleanupWorktreeOnSuccess`. On failure (or if `--keep-on-success`/`keepOnSuccess`)
100
+ the worktree is retained for debugging and its path is printed to stderr.
101
+ - **`pipeline.worktreeRoot`** config field: directory (relative to projectRoot) under which
102
+ worktrees are created. Default `.bober/worktrees`.
103
+ - **`pipeline.cleanupWorktreeOnSuccess`** config field: when true (default), remove the worktree
104
+ via `git worktree remove` after a successful run. On failure the worktree is always retained.
105
+ - **`RunState.worktreePath`** and **`RunState.branch`** optional fields. Populated by `runInWorktree`
106
+ before the pipeline starts; surfaced in `bober_get_run_status` output.
107
+ - **`RunManager.startRun(task, projectRoot, config, pipelineFn?, opts?)`** signature extended with
108
+ optional `opts: { runId?, worktreePath?, branch? }`. Existing 3- and 4-arg callers are unchanged.
109
+ - **`git.ts`** helpers: `addWorktree`, `removeWorktree`, `isClean` shelling out to git CLI (no new deps).
110
+
111
+ ### Follow-ups (documented, NOT implemented this sprint)
112
+
113
+ - Garbage collection of orphaned worktrees from prior failed runs (`bober worktree prune`).
114
+ - Worktree-aware bober_status (the cockpit uses bober_get_run_status by runId instead).
115
+ - Cross-worktree merge automation.
116
+
117
+ - **`bober_subscribe_events`**: Subscribe to runId-scoped live events. Input: `{ runId: string, since?: string }`. Returns `{ subscriptionId, status: 'subscribed', startedAt }`. The server begins emitting `bober/events` notifications for every line appended to `.bober/history.jsonl` or `.bober/telemetry/<date>.jsonl` whose `runId` matches the subscription. The optional `since` parameter triggers a one-time backfill of pre-existing events with `timestamp > since`.
118
+ - **`bober_unsubscribe_events`**: Unsubscribe from a runId-scoped event stream. Input: `{ subscriptionId: string }`. Releases file-watch handles when no other subscription is watching the same files. Returns `{ subscriptionId, status: 'unsubscribed' }` or a soft-error `{ error: 'Subscription not found: <id>' }`.
119
+ - **`EventStreamManager`** (`src/mcp/event-stream.ts`): In-process class that tails `.bober/history.jsonl` and `.bober/telemetry/<date>.jsonl` using `fs.watch`. One file-watch handle is shared across all subscriptions watching the same file (reference-counted). Date roll-over is detected via a polling interval (5 s, `unref()`'d). Lines without an extractable `runId` (top-level or `details.runId`) are silently skipped. Per-subscription bounded queue (default 1000) drops the oldest events on overflow; a single `bober/events.dropped` notification with `{ subscriptionId, dropped: N }` is emitted once per overflow window. All diagnostic output is routed to `process.stderr` (stdout is reserved for the MCP JSON-RPC transport).
120
+ - **`pipeline.eventQueueBound`** config field: per-subscription bounded queue limit. Default `1000`, minimum `1`. Readable by the server from `bober.config.json` and passed to `EventStreamManager` at startup.
121
+ - **`bober_list_active_runs`**: Lists all runs tracked by the RunManager. Accepts optional `{ status?: 'running'|'completed'|'failed'|'aborted' }` filter. Returns a JSON array of RunState objects. Omit the filter to get all runs regardless of status.
122
+ - **`bober_get_run_status`**: Fetches the full RunState for a specific run by `runId`. Input: `{ runId: string }` (required). Returns the complete RunState JSON or `{ error: 'Run not found: <runId>' }` when the runId is unknown.
123
+ - **`bober_abort_run`**: Aborts a currently running pipeline run. Input: `{ runId: string, reason?: string }`. Flips `status` to `'aborted'`, persists `abortedAt` and `abortReason` to `state.json`, and returns `{ runId, status: 'aborted', abortedAt }`. Returns `{ error: 'Run not found: <runId>' }` for unknown runs, `{ error: 'Run is not active' }` for non-running runs. Note: this sprint flips state only; forceful in-flight subprocess termination (SIGTERM propagation) is deferred to a future hardening sprint.
124
+ - **`RunState.status`** type union widened to include `'aborted'`; new optional fields `abortedAt?: string` and `abortReason?: string` added.
125
+
126
+ ## [0.14.0] — 2026-05-25
127
+
128
+ Bober Vision — agent-bober becomes a four-mode software engineering teammate
129
+ instead of a single-mode autopilot. The pipeline you already know is Mode 1;
130
+ the other three modes share its scaffolding (planner, evaluator, audit log)
131
+ but pause at different boundaries and operate at different blast radii.
132
+
133
+ The headline change: it is now safe to delegate production-touching work.
134
+ Careful-flow gates every meaningful boundary; Diagnose has a native vocabulary
135
+ for incidents; Postmortem auto-synthesizes from the audit trail.
136
+
137
+ See [VISION.md](./VISION.md) for the full design rationale and example flows.
138
+
139
+ ### Added
140
+
141
+ - **Mode 1 — Autopilot** (unchanged): the existing generator-evaluator loop.
142
+ Use for spikes and greenfield. `bober run`.
143
+ - **Mode 2 — Careful-flow**: checkpoint-gated execution. Every
144
+ research/plan/sprint boundary surfaces a diff and waits for approval via
145
+ CLI prompt, disk marker (`.bober/approvals/*.pending.json`), or GitHub PR.
146
+ Per-run audit log at `.bober/audits/<runId>.jsonl`. New CLI:
147
+ `bober approve <checkpointId>`, `bober reject <checkpointId>`,
148
+ `bober list-approvals`, `bober audit-show <runId>`.
149
+ - **Mode 3 — Diagnose**: production-incident response. Generic observability
150
+ MCP plugin slots (any MCP server matching the schema can supply metrics
151
+ and logs). Structured incident timeline at `.bober/incidents/<id>/`.
152
+ Change-management gates around destructive actions. Playbook library
153
+ searchable by symptom. New CLI: `bober incident [start|status|end|list|abort]`,
154
+ `bober rollback <incidentId>`, `bober playbook [list|show|search]`.
155
+ - **Mode 4 — Postmortem**: auto-synthesized from incident artifacts when an
156
+ incident transitions to `resolved`. Every claim has an inline citation
157
+ back to timeline/changelog/observations. Required sections enforced
158
+ (TL;DR, Impact, Timeline, Root Cause 5-Whys, Contributing Factors, What
159
+ Went Well, What Went Wrong, Action Items). New CLI:
160
+ `bober postmortem [generate|show] <incidentId>`.
161
+ - **Behavioral discipline foundation** (verbatim port of obra/superpowers):
162
+ Iron Laws, Red Flags, Rationalization-Prevention tables, SessionStart
163
+ bootstrap, anti-pattern catalog, AGENTS.md contract. Surfaces as 9 new
164
+ universal skills: `bober.using-bober`, `bober.verify`, `bober.debug`,
165
+ `bober.code-review`, `bober.incident`, `bober.diagnose`, `bober.deploy`,
166
+ `bober.runbook`, `bober.postmortem`. Installed by `agent-bober init` and
167
+ copied to `.claude/commands/`.
168
+ - **4 new agent definitions** in `agents/`: `bober-code-reviewer`,
169
+ `bober-diagnoser`, `bober-deployer`, `bober-postmortemer`.
170
+ - **Opt-in local-only telemetry** (default OFF). When enabled, writes mode-0600
171
+ JSONL events to `.bober/telemetry/<date>.jsonl`. ESLint rule
172
+ (`no-restricted-imports` + `no-restricted-globals`) scoped to
173
+ `src/telemetry/**` blocks all network primitives at lint time. Privacy
174
+ invariant: only IDs, counts, durations, and enums in payloads; never
175
+ user-content strings. New CLI: `bober telemetry [status|purge|export]`.
176
+ - **Config schema migration**: `bober config migrate` rewrites an existing
177
+ `bober.config.json` to explicitly include all new vision-era fields with
178
+ default values. Back-compat parsing handles missing fields automatically —
179
+ the migrate command is informative, not required.
180
+ - **Mode + checkpoint config**: `pipeline.mode` (`autopilot` | `careful`,
181
+ default `autopilot`), `pipeline.checkpointMechanism` (`noop` | `disk` |
182
+ `cli` | `github-pr`, default `noop`). All optional; absence means autopilot.
183
+ - **End-to-end correctness gate**: `tests/e2e/four-modes.test.ts` (11 tests)
184
+ exercises all four modes on a fixture project. Uses the real
185
+ `DiskCheckpointMechanism` (not a mock), spawns the real
186
+ `ExternalMcpServer` subprocess for the MCP protocol boundary, runs the
187
+ real incident lifecycle including `verifyResolution`, and validates the
188
+ auto-generated postmortem against the required-sections + citation rules.
189
+
190
+ ### Changed
191
+
192
+ - `src/cli/commands/init.ts`: `UNIVERSAL_COMMANDS` extended with the 9 new
193
+ vision skills. `agentFiles` extended with the 4 new agent definitions.
194
+ All vision-era surfaces now ship with every brownfield/preset init.
195
+ - `VISION.md`, `README.md`, `AGENTS.md` updated to document the four modes,
196
+ the careful-flow mechanisms, the incident lifecycle, the telemetry
197
+ guarantee, and the slash-command set.
198
+
199
+ ### Tests
200
+
201
+ 563 → **1115 tests passing** across 82 test files (4 pre-existing skipped).
202
+ New test coverage includes: incident timeline + state machine, resolution
203
+ verification, rollback (full + per-step gates), postmortem section/citation
204
+ assertions, playbook search, careful-flow integration, observability MCP
205
+ spawn, deployer change classification + ChangeEntry recording, config
206
+ schema back-compat, telemetry writer (mode-0600, default-off, concurrency,
207
+ privacy), CLI subcommands for config/telemetry.
208
+
209
+ ### Backward compatibility
210
+
211
+ - Existing `bober.config.json` files (pre-vision) parse cleanly with the
212
+ extended schema — all new fields are optional and default to current
213
+ autopilot behavior. No migration required.
214
+ - Existing CLI surface (`bober plan`, `bober sprint`, `bober eval`,
215
+ `bober run`, `bober graph`, etc.) is unchanged.
216
+ - Telemetry defaults OFF. No network egress under any condition; enforced
217
+ statically by ESLint and verified at runtime.
218
+
219
+ ## [0.13.0] — 2026-05-24
220
+
221
+ Graph (tokensave) integration — user-facing CLI commands and slash-command skills for code-graph workflows.
222
+
223
+ ### Added
224
+
225
+ - **`agent-bober graph [init|sync|status]`** — manage the code graph index.
226
+ - `init`: runs `tokensave init`, writes `.bober/graph/manifest.json`. Exits 2 with platform-aware install hint when tokensave is missing.
227
+ - `sync [--force]`: re-indexes changed files (full re-index with `--force`). Updates manifest.
228
+ - `status [--json]`: prints `{ready, indexedFileCount, tokensaveVersion, lastSyncedHeadSha, stale}`. Human-readable or JSON.
229
+ - **`agent-bober onboard`** — generate 5 onboarding markdown files in `.bober/onboarding/` using the code graph (architecture overview, hotspots, knowledge gaps, communities, README). Prints a summary table on completion.
230
+ - **`agent-bober impact <symbol|file>`** — analyse the impact radius of a symbol or file. Writes `.bober/graph/impact/<slug>.md` with sections `# Impact: <target>`, `## Affected symbols`, `## Tests covering this symbol`.
231
+ - **3 new universal skills** (installed in all presets and brownfield):
232
+ - `skills/bober.graph/SKILL.md` (`/bober-graph`) — code graph management
233
+ - `skills/bober.onboard/SKILL.md` (`/bober-onboard`) — onboarding doc generation
234
+ - `skills/bober.impact/SKILL.md` (`/bober-impact`) — impact analysis (with `argument-hint: <symbol|file>`)
235
+ - **`scripts/e2e-graph-smoke.sh`** — end-to-end smoke test script (gates on tokensave binary availability).
236
+ - Architecture document: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
237
+
238
+ ### Changed
239
+
240
+ - All 3 graph commands respect `graph.enabled=false` — exit 1 with message: *"Graph integration is disabled. Enable via `graph.enabled: true` in bober.config.json."*
241
+ - `src/cli/commands/init.ts` skill map: `bober.graph`, `bober.onboard`, `bober.impact` added to `UNIVERSAL_COMMANDS` — included in every preset and brownfield init.
242
+
243
+ ### KPI gate result
244
+
245
+ 60% combined reduction (synthetic-fixture baseline; real-pipeline measurement via `node scripts/run-kpi-gate.mjs`).
246
+
247
+ ### Tests
248
+
249
+ 549 → **563 tests passing** (added 14 tests: slug derivation, command success paths, disabled-graph paths, skill bundle frontmatter, init.ts skill inclusion).
250
+
8
251
  ## [0.12.0] — 2026-04-17
9
252
 
10
253
  Tuned for Claude Opus 4.7 — the model now follows instructions literally and
package/README.md CHANGED
@@ -48,8 +48,42 @@ You describe a feature
48
48
 
49
49
  ---
50
50
 
51
+ ## Operating Modes
52
+
53
+ agent-bober operates in four modes — pick the one that matches your situation. See
54
+ [VISION.md](./VISION.md) for full documentation, worked examples, and configuration details.
55
+
56
+ | Mode | When to Use | Entry Point |
57
+ |------|-------------|-------------|
58
+ | **Autopilot** | Feature spikes, greenfield work, no production risk | `bober run` |
59
+ | **Careful-Flow** | Production behavior changes, want checkpoint approval | `bober run --mode careful` |
60
+ | **Diagnose** | Production system is broken right now | `bober incident start` |
61
+ | **Postmortem** | After resolving an incident, generate a retrospective | `bober postmortem generate` |
62
+
63
+ ---
64
+
51
65
  ## Installation
52
66
 
67
+ There are two ways to run agent-bober, and they are complementary:
68
+
69
+ - **Claude Code plugin** — the skills (`/bober-run`, `/bober-plan`, …) and subagents, running on your Claude Code subscription. No npm or API key required.
70
+ - **npm package** — the standalone CLI + MCP server (`agent-bober`), which calls LLM providers directly (anthropic / deepseek / claude-code) and powers headless, CI, and programmatic runs.
71
+
72
+ For the full feature set, install both.
73
+
74
+ ### Claude Code Plugin
75
+
76
+ Install the plugin from its marketplace, then install `bober`:
77
+
78
+ ```text
79
+ /plugin marketplace add BOBER3r/agent-bober
80
+ /plugin install bober@agent-bober
81
+ ```
82
+
83
+ This installs 24 skills + 10 subagents. Update later with `/plugin update bober`. The plugin runs the Researcher → Planner → Curator → Generator → Evaluator pipeline as Claude Code subagents on your Claude subscription — provider selection (the [Capability Matrix](#capability-matrix)) does **not** apply in this mode.
84
+
85
+ ### npm CLI / MCP Server
86
+
53
87
  ```bash
54
88
  # Install globally
55
89
  npm install -g agent-bober
@@ -58,10 +92,12 @@ npm install -g agent-bober
58
92
  npx agent-bober init
59
93
  ```
60
94
 
95
+ This is required to use the DeepSeek / claude-code providers, run bober headlessly or in CI, or expose the MCP server. A few plugin skills (`bober.plan`, `bober.sprint`, `bober.impact`, `bober.onboard`, `bober.graph`) also shell out to the `agent-bober` CLI, so installing it unlocks their full behavior. Graph features additionally require the separate [`tokensave`](#graph-tokensave-integration) binary.
96
+
61
97
  agent-bober works in multiple environments:
62
98
 
63
- - **Claude Code** -- Plugin with 10 slash commands (`/bober-plan`, `/bober-run`, etc.)
64
- - **Cursor / Windsurf** -- MCP server with 10 tools in the chat interface
99
+ - **Claude Code** -- Plugin with 20+ slash commands (`/bober-plan`, `/bober-run`, etc.) — install via the marketplace above
100
+ - **Cursor / Windsurf** -- MCP server with 37 tools in the chat interface
65
101
  - **Any MCP-compatible IDE** -- MCP server via stdio transport
66
102
  - **Any terminal** -- CLI commands (`npx agent-bober run "feature"`)
67
103
 
@@ -114,6 +150,52 @@ Specialized workflows:
114
150
 
115
151
  ---
116
152
 
153
+ ## Graph (Tokensave) Integration
154
+
155
+ > **Optional.** The graph is an opt-in enhancement — agent-bober's core pipeline (Researcher → Planner → Curator → Generator → Evaluator) works fully without it. Enable it only if you want semantic code search, impact analysis, and auto-generated onboarding docs.
156
+
157
+ agent-bober integrates with [tokensave](https://github.com/aovestdipaperino/tokensave) to build a structural code graph that powers semantic search, impact analysis, and automated onboarding documentation.
158
+
159
+ **Prerequisite — install the `tokensave` binary.** It is a native Rust binary, **not** an npm package, so `npm install -g agent-bober` does **not** install it. Install it separately:
160
+
161
+ ```bash
162
+ # macOS (Homebrew)
163
+ brew install aovestdipaperino/tap/tokensave
164
+ # Windows (Scoop)
165
+ scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket && scoop install tokensave
166
+ # Any platform (Cargo / Rust)
167
+ cargo install tokensave
168
+ ```
169
+
170
+ Required version range: **`>=6.0.0-beta.1 <7.0.0`**. agent-bober verifies this on `agent-bober graph init` and prints the correct install hint if `tokensave` is missing or out of range. If the binary is absent, graph features degrade gracefully and the rest of the pipeline is unaffected.
171
+
172
+ Once `tokensave` is installed, enable the graph by adding a `graph` section to `bober.config.json`:
173
+
174
+ ```json
175
+ {
176
+ "graph": {
177
+ "enabled": true,
178
+ "languageTier": "core"
179
+ }
180
+ }
181
+ ```
182
+
183
+ Once enabled, three new CLI commands and slash commands become available:
184
+
185
+ ```bash
186
+ agent-bober graph init # Initialise the graph index
187
+ agent-bober graph sync # Re-index changed files (--force for full re-index)
188
+ agent-bober graph status # Check graph status (--json for machine-readable)
189
+ agent-bober onboard # Generate .bober/onboarding/ documentation
190
+ agent-bober impact <symbol> # Analyse impact radius and test coverage
191
+ ```
192
+
193
+ In Claude Code, the same workflows are available as slash commands: `/bober-graph`, `/bober-onboard`, `/bober-impact`.
194
+
195
+ For architecture details see: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
196
+
197
+ ---
198
+
117
199
  ## Multi-Provider Support
118
200
 
119
201
  agent-bober is **provider-agnostic**. Use any LLM provider for any agent role. Mix and match providers freely -- use one for planning, another for generation, a local model for evaluation.
@@ -129,6 +211,32 @@ agent-bober is **provider-agnostic**. Use any LLM provider for any agent role. M
129
211
 
130
212
  Shorthands resolve to the latest model version automatically. You can also pass any full model ID directly -- it will be sent to the provider as-is.
131
213
 
214
+ ### Capability Matrix
215
+
216
+ > **This matrix applies to the standalone CLI / programmatic provider layer only** (`npx agent-bober run …`), where bober calls each provider's API directly. It does **not** apply to the **Claude Code plugin**: when you run a skill like `/bober-run` inside Claude Code, the roles are spawned as Claude Code subagents on your Claude subscription, so provider selection (including `claude-code`) does not apply. See [Claude Code Plugin](#claude-code-plugin) below.
217
+
218
+ | Role | anthropic (default) | deepseek (openai-compat) | claude-code (subscription) |
219
+ | ---------------------- | -------------------- | ------------------------ | -------------------------- |
220
+ | planner | yes | yes | yes (no tools needed) |
221
+ | researcher (phase 1/2) | yes | yes | yes (no tools needed) |
222
+ | curator | yes | yes (tools) | no (runs own loop) |
223
+ | generator | yes | yes (tools) | no (runs own loop) |
224
+ | evaluator | yes | yes (tools) | no (runs own loop) |
225
+ | code-reviewer | yes | yes (tools) | no (runs own loop) |
226
+ | documenter | yes | yes (tools) | no (runs own loop) |
227
+
228
+ **DeepSeek prerequisites:** `npm install openai` (optional peer dep) and set `DEEPSEEK_API_KEY` in
229
+ your environment. DeepSeek supports all roles including tool-calling roles (curator, generator,
230
+ evaluator, code-reviewer).
231
+
232
+ **claude-code prerequisites:** An active Claude subscription (Pro/Max/Team) and the `claude` CLI
233
+ on PATH. claude-code is **planner and researcher only** — it cannot be used for tool-using roles
234
+ because the `claude -p` interface does not support tool-calling. As of the **2026-06-15 ToS update**,
235
+ programmatic subscription use is metered (Agent-SDK credit, billed at API rates, no rollover).
236
+ Each `claude -p` call injects approximately **40,000 tokens of system-prompt overhead**.
237
+
238
+ See [`docs/providers.md`](docs/providers.md) for copy-paste config snippets for each provider.
239
+
132
240
  ### Configuration
133
241
 
134
242
  Set providers per agent role in `bober.config.json`:
@@ -163,11 +271,18 @@ npx agent-bober run "feature" --provider openai
163
271
 
164
272
  Provider SDKs (`openai`, `@google/generative-ai`) are **optional peer dependencies** -- install only what you use. Only `@anthropic-ai/sdk` is required by default.
165
273
 
274
+ ### Anthropic features (Claude Opus 4.8)
275
+
276
+ - **Latest model by default.** The `opus` shorthand resolves to **`claude-opus-4-8`** (1M context, adaptive thinking). Pin the previous generation with the `opus-4-7` shorthand.
277
+ - **Prompt caching, on by default.** Multi-turn Anthropic calls reuse a cached system + recent-message prefix (ephemeral `cache_control`, system-and-last-3 strategy), cutting input-token cost. Disable per role with `"providerConfig": { "promptCaching": false }`.
278
+ - **Effort control.** Set `effort` (`low` | `medium` | `high` | `xhigh` | `max`) to trade latency/cost against depth; when omitted, the API default applies (`high` on Opus 4.8). Other providers ignore it.
279
+ - **Mid-conversation system updates.** Instructions can be revised mid-task without breaking the prompt cache (Anthropic `mid_conv_system` blocks).
280
+
166
281
  ---
167
282
 
168
283
  ## MCP Server (Cursor, Windsurf, etc.)
169
284
 
170
- agent-bober includes an MCP (Model Context Protocol) server that exposes all functionality as tools in any MCP-compatible IDE.
285
+ agent-bober includes an MCP (Model Context Protocol) server that exposes **37 tools** across pipeline, run-management, careful-flow approvals, multi-project discovery, incident response, and graph in any MCP-compatible IDE.
171
286
 
172
287
  ### Setup for Cursor
173
288
 
@@ -218,6 +333,13 @@ Add to your Windsurf MCP configuration:
218
333
  | `bober_spec` | read | Read the current PlanSpec |
219
334
  | `bober_principles` | read/write | Read or set project principles |
220
335
  | `bober_config` | read/write | Read or update `bober.config.json` |
336
+ | `bober_list_pending_approvals` · `bober_approve_checkpoint` · `bober_reject_checkpoint` | careful-flow | List / approve / reject checkpoint approvals (careful mode) |
337
+ | `bober_list_active_runs` · `bober_get_run_status` · `bober_abort_run` · `bober_run_in_worktree` | run-mgmt | Manage concurrent and isolated-worktree runs |
338
+ | `bober_subscribe_events` · `bober_unsubscribe_events` | events | Live run event stream |
339
+ | `bober_get_project_state` · `bober_list_projects` · `bober_list_specs` | discovery | Multi-project state + spec discovery |
340
+ | `bober_incident_start` · `bober_incident_status` · `bober_incident_list` · `bober_incident_abort` · `bober_rollback_start` · `bober_postmortem_get` · `bober_playbook_search` · `bober_playbook_list` | incident | Diagnose, roll back, postmortem, and search playbooks |
341
+
342
+ *(37 tools total — the rows above summarize the additional categories beyond the core pipeline tools.)*
221
343
 
222
344
  ---
223
345
 
@@ -286,6 +408,20 @@ The `/bober-principles` command also triggers auto-discovery when called with no
286
408
  | `/bober-anchor` | Solana program workflow |
287
409
  | `/bober-brownfield` | Existing codebase workflow |
288
410
  | `/bober-playwright` | Set up Playwright E2E testing, generate tests, debug failures |
411
+ | `/bober-code-review` | Advisory review of the sprint diff against the contract + anti-pattern catalog |
412
+ | `/bober-verify` | Verification-before-completion -- run checks and confirm output before claiming success |
413
+ | `/bober-debug` | Systematic debugging -- reproduce, isolate, hypothesize, fix, verify |
414
+ | `/bober-graph` | Manage the code graph index -- init, sync, status (requires tokensave) |
415
+ | `/bober-impact` | Analyse the impact radius and test coverage of a symbol or file |
416
+ | `/bober-onboard` | Generate onboarding docs from the code graph |
417
+ | `/bober-incident` | Run the incident lifecycle -- diagnose, deploy, verify, postmortem |
418
+ | `/bober-diagnose` | Investigate a production incident -- evidence at boundaries, hypothesize-and-disprove |
419
+ | `/bober-deploy` | Execute a remediation action with blast-radius classification + change-management gates |
420
+ | `/bober-runbook` | Execute a step-by-step recovery procedure with pre/postcondition gates |
421
+ | `/bober-postmortem` | Synthesize an evidence-cited postmortem from incident artifacts |
422
+ | `/bober-using-bober` | Establishes how to find and use bober skills (loaded at conversation start) |
423
+
424
+ > **Preset-aware install:** `bober init <preset>` installs the universal commands above plus only the stack-specific commands matching your preset or mode -- e.g. `/bober-solidity` is added for a `solidity` project, `/bober-react` and `/bober-playwright` for `nextjs`/`react-vite`, and `/bober-brownfield` for an existing codebase. The Claude Code plugin (`/plugin install`) always ships the full set.
289
425
 
290
426
  ### CLI
291
427
 
@@ -300,6 +436,39 @@ npx agent-bober run "feature" # Full autonomous loop
300
436
  npx agent-bober mcp # Start MCP server (Cursor/Windsurf)
301
437
  ```
302
438
 
439
+ #### New Commands (Sprints 9–25)
440
+
441
+ The following commands were added after the initial release. Full reference in [COMMANDS.md](./COMMANDS.md).
442
+
443
+ ```bash
444
+ # Checkpoint approval (careful-flow mode)
445
+ npx agent-bober list-approvals # List pending checkpoints
446
+ npx agent-bober approve <checkpointId> # Approve a checkpoint
447
+ npx agent-bober approve <checkpointId> --edit <file> # Approve with edit delta
448
+ npx agent-bober reject <checkpointId> # Reject a checkpoint
449
+ npx agent-bober audit show <runId> # Show audit log for a run
450
+
451
+ # Incident response
452
+ npx agent-bober incident start '<symptom>' --severity S2 # Start incident
453
+ npx agent-bober incident status <incidentId> # Check status
454
+ npx agent-bober incident end <incidentId> --verified # Mark resolved
455
+ npx agent-bober incident list # List all incidents
456
+ npx agent-bober incident abort <incidentId> --reason "..." # Abort incident
457
+
458
+ # Rollback
459
+ npx agent-bober rollback <incidentId> --dry-run # Preview rollback plan
460
+ npx agent-bober rollback <incidentId> # Execute rollback
461
+
462
+ # Postmortem
463
+ npx agent-bober postmortem generate <incidentId> # Generate retrospective
464
+ npx agent-bober postmortem show <incidentId> # Print retrospective
465
+
466
+ # Playbooks
467
+ npx agent-bober playbook list # List all playbooks
468
+ npx agent-bober playbook show <name> # Show playbook content
469
+ npx agent-bober playbook search '<symptom>' # Search by symptom
470
+ ```
471
+
303
472
  #### Clarification gating
304
473
 
305
474
  When the planner can't fully decompose a feature without more information, it stops with `status: "needs-clarification"` instead of fabricating sprints. The CLI surfaces the open questions and you resolve them via `plan answer`. After the last question is answered the spec auto-promotes to `status: "ready"` and the next `sprint`/`run` proceeds. See the **Architecture** section for the full lifecycle.
@@ -342,6 +511,32 @@ agent-bober run "Build a complete dashboard with auth, CRUD, and charts" --provi
342
511
 
343
512
  ---
344
513
 
514
+ ## Lens Panels (multi-perspective evaluation & architecture)
515
+
516
+ Both the **evaluator** and the **architect** can run as a *lens panel* -- fanning a single decision out across several independent perspectives, then reconciling them into one verdict. Panels are **opt-in and off by default**; when disabled, behavior is byte-identical to the single-pass path.
517
+
518
+ - **Evaluator panel** (`evaluator.panel`): runs each sprint evaluation through the built-in lenses **correctness**, **security**, **regression**, **quality**, and **simplicity**, with bounded fan-out and a reconcile step, recording per-lens verdicts as telemetry.
519
+ - **Architect panel** (`architect.panel`): gates the architecture approach-selection and review checkpoints through the built-in lenses **scalability**, **security**, **cost**, **operability**, **maintainability**, **reversibility**, and **simplicity**, with a fail-closed reconcile.
520
+
521
+ The **simplicity** lens is a complexity-only perspective (YAGNI): it hunts code that reinvents the standard library, dependencies doing what a native platform feature already does, single-implementation abstractions, dead flexibility, and logic that could be materially shorter — while being explicitly forbidden from ever recommending the removal of a test, a validation at a trust boundary, error handling, security, or accessibility. It pairs with a generator convention: deliberate simplifications with a known ceiling are marked with a `bober:` comment naming the ceiling **and** the upgrade path (e.g. `// bober: global lock, per-account locks if throughput matters`), so a shortcut reads as an auditable choice rather than an oversight — and the code-reviewer treats a marked shortcut as intent, an unmarked one with an obvious ceiling as a finding.
522
+
523
+ Enable a panel and (optionally) restrict or override the lenses:
524
+
525
+ ```jsonc
526
+ {
527
+ "evaluator": {
528
+ "panel": { "enabled": true, "lenses": ["correctness", "security"], "maxConcurrent": 4 }
529
+ },
530
+ "architect": {
531
+ "panel": { "enabled": true } // empty "lenses" => all built-ins
532
+ }
533
+ }
534
+ ```
535
+
536
+ Leave `lenses` empty to use the full built-in set; `maxConcurrent` bounds how many lenses run in parallel (default 4). The same panels are available on the Claude Code plugin surface via the lens-aware evaluator/architect agents.
537
+
538
+ ---
539
+
345
540
  ## Configuration
346
541
 
347
542
  All configuration lives in `bober.config.json` at your project root. The `init` command creates this file from a template, and you can customize it afterward.
@@ -405,7 +600,31 @@ All configuration lives in `bober.config.json` at your project root. The `init`
405
600
  { "type": "playwright","required": false }
406
601
  ],
407
602
  "maxIterations": 3, // Max rework cycles per sprint
408
- "plugins": [] // Custom evaluator plugin paths
603
+ "plugins": [], // Custom evaluator plugin paths
604
+ "panel": { // Multi-lens evaluation (opt-in, off by default)
605
+ "enabled": false, // Run the evaluator across multiple lenses
606
+ "lenses": [], // [] = built-ins: correctness, security, regression, quality, simplicity
607
+ "maxConcurrent": 4 // Max lenses evaluated in parallel
608
+ }
609
+ },
610
+
611
+ // -- Documenter (per-sprint docs, on by default) -----
612
+ "documenter": {
613
+ "enabled": true, // Spawn a doc subagent after each sprint passes; set false to skip
614
+ "model": "sonnet", // Model for the documentation pass
615
+ "maxTurns": 20, // Max tool-use turns for the doc pass
616
+ "timeoutMs": 300000, // Advisory: a documenter timeout never downgrades the passed sprint
617
+ "provider": "anthropic", // Optional provider override
618
+ "endpoint": null // Custom base URL (for openai-compat)
619
+ },
620
+
621
+ // -- Architect (lens panel, opt-in) ------------------
622
+ "architect": {
623
+ "panel": {
624
+ "enabled": false, // Multi-lens architecture review (off by default)
625
+ "lenses": [], // [] = built-ins: scalability, security, cost, operability, maintainability, reversibility, simplicity
626
+ "maxConcurrent": 4
627
+ }
409
628
  },
410
629
 
411
630
  // -- Sprint ------------------------------------------
@@ -417,6 +636,7 @@ All configuration lives in `bober.config.json` at your project root. The `init`
417
636
 
418
637
  // -- Pipeline ----------------------------------------
419
638
  "pipeline": {
639
+ "engine": "ts", // Orchestration engine: "ts" (default) | "skill" | "workflow"
420
640
  "researchPhase": true, // Run two-phase research before planning (default: true)
421
641
  "architectPhase": false, // Run solution architecture phase before planning (default: false)
422
642
  "maxIterations": 20, // Max total iterations across all sprints
@@ -671,7 +891,11 @@ To debug failing E2E tests:
671
891
  |
672
892
  pass? ----+---- fail?
673
893
  | |
674
- [Next Sprint] [Rework Loop]
894
+ [Documenter] [Rework Loop]
895
+ (writes/updates
896
+ docs; advisory)
897
+ |
898
+ [Next Sprint]
675
899
  |
676
900
  v
677
901
  All sprints done
@@ -693,6 +917,13 @@ Each agent runs as a **multi-turn agentic loop** with tool access via the unifie
693
917
  - **Curator** (default: Claude Opus): Read-only codebase analysis scoped to a single sprint. For each sprint contract, reads the target files, extracts relevant code sections, inventories existing utilities the generator must reuse, identifies affected files and tests, gathers testing patterns, and produces a structured Sprint Briefing saved to `.bober/briefings/`. Runs once per sprint before the generator. Configurable via `curator` section in config.
694
918
  - **Generator** (default: Claude Sonnet): Full tool access (`bash`, `read_file`, `write_file`, `edit_file`, `glob`, `grep`). Receives the Sprint Briefing (curated patterns, utils, impact analysis) plus the sprint contract and principles -- no research, design, or outline artifacts (context distillation). Starts coding immediately instead of exploring the codebase.
695
919
  - **Evaluator** (default: Claude Sonnet): Read-only + bash tools (`bash`, `read_file`, `glob`, `grep` -- deliberately NO write/edit). Independently verifies by running the dev server, taking Playwright screenshots, executing tests, and inspecting code. Cannot fix bugs -- only report them with precise feedback.
920
+ - **Documenter** (default: Claude Sonnet): Spawned after a sprint's evaluator returns PASS, while the change is fresh. Writes a concise record of what the sprint built and finds & updates the existing docs that are now stale (README, ADRs, CLAUDE.md, module docs). Documentation only -- never touches application code or tests, and its result is **advisory**: a documenter failure or timeout never downgrades the already-passed sprint. On by default; configurable via the `documenter` section (set `enabled: false` to skip).
921
+
922
+ Beyond the build pipeline, agent-bober ships a set of **operations subagents** for the incident lifecycle (invoked via `/bober-incident`, `/bober-diagnose`, `/bober-deploy`, `/bober-runbook`, and `/bober-postmortem`). Like every pipeline agent they run through the same provider-agnostic `LLMClient` layer, so they honour whatever provider you configure (Anthropic, DeepSeek, or any OpenAI-compatible endpoint):
923
+
924
+ - **Diagnoser** (default: Claude Sonnet): Read-only incident investigator. Gathers evidence at component boundaries and forms hypotheses with both supporting AND contradicting evidence, emitting a structured DiagnosisResult -- never writes code, never deploys.
925
+ - **Deployer** (default: Claude Sonnet): Executes a remediation action classified by blast radius. Risky actions are gated behind a Tier 2 checkpoint, and a ChangeEntry with a required inverse is recorded BEFORE execution.
926
+ - **Postmortemer** (default: Claude Sonnet): Read-only synthesizer that turns the incident's recorded artifacts into an evidence-cited postmortem -- chronological timeline, 5-Whys, contributing factors, and action items. Pure offline synthesis, no live observability access.
696
927
 
697
928
  The separation ensures that:
698
929
  1. The Generator cannot "mark its own homework" -- an independent evaluation step with its own tool access catches issues through actual runtime verification, not just reading the generator's self-report.
@@ -747,6 +978,8 @@ bash scripts/run-eval.sh /path/to/project
747
978
 
748
979
  ## Contributing
749
980
 
981
+ See [AGENTS.md](./AGENTS.md) for contributor discipline including the anti-slop pre-PR checklist.
982
+
750
983
  Contributions are welcome. To set up the development environment:
751
984
 
752
985
  ```bash