coding-os 0.3.2__py3-none-any.whl

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 (1304) hide show
  1. adapters/claude/README.md +6 -0
  2. adapters/claude/_install_helpers/extract_stacks.py +43 -0
  3. adapters/claude/_install_helpers/update_mcp_json.py +75 -0
  4. adapters/claude/adapter.yaml +164 -0
  5. adapters/claude/hooks/README.md +40 -0
  6. adapters/claude/hooks/agent_memory_sync.py +131 -0
  7. adapters/claude/hooks/ensure-agent-memory-link.sh +36 -0
  8. adapters/claude/hooks/sync-agent-memory.sh +21 -0
  9. adapters/claude/install.sh +86 -0
  10. adapters/claude/sdk_dispatcher.py +871 -0
  11. adapters/claude/settings.local.template.json +31 -0
  12. adapters/claude/settings.template.json +808 -0
  13. adapters/claude/update_mcp_json.py +85 -0
  14. adapters/codex/adapter.yaml +254 -0
  15. adapters/codex/chat_provider.py +230 -0
  16. adapters/codex/commands/formula-f1.md +129 -0
  17. adapters/codex/commands/formula-f10.md +100 -0
  18. adapters/codex/commands/formula-f11.md +123 -0
  19. adapters/codex/commands/formula-f2.md +139 -0
  20. adapters/codex/commands/formula-f3.md +127 -0
  21. adapters/codex/commands/formula-f4.md +101 -0
  22. adapters/codex/commands/formula-f5.md +135 -0
  23. adapters/codex/commands/formula-f6.md +147 -0
  24. adapters/codex/commands/formula-f7.md +111 -0
  25. adapters/codex/commands/formula-f8.md +133 -0
  26. adapters/codex/commands/formula-f9.md +112 -0
  27. adapters/codex/enable_codex_hooks.py +94 -0
  28. adapters/codex/ensure_codex_mcp.py +124 -0
  29. adapters/codex/hooks/codex-merge-hook-output.py +72 -0
  30. adapters/codex/hooks/codex-normalize-edit.py +96 -0
  31. adapters/codex/hooks/codex-postedit-dispatch.sh +75 -0
  32. adapters/codex/hooks/codex-posttool-dispatch.sh +70 -0
  33. adapters/codex/hooks/codex-preedit-dispatch.sh +83 -0
  34. adapters/codex/hooks/codex-pretool-dispatch.sh +82 -0
  35. adapters/codex/hooks/codex-sessionend-dispatch.sh +20 -0
  36. adapters/codex/hooks/codex-sessionstart-dispatch.sh +68 -0
  37. adapters/codex/hooks/codex-stop-dispatch.sh +73 -0
  38. adapters/codex/hooks/codex-userpromptsubmit-dispatch.sh +74 -0
  39. adapters/codex/hooks.template.json +208 -0
  40. adapters/codex/install.sh +83 -0
  41. adapters/codex/sdk_dispatcher.py +449 -0
  42. board_os/__init__.py +39 -0
  43. board_os/_agent_runtime.py +256 -0
  44. board_os/config.py +421 -0
  45. board_os/git_coherence.py +107 -0
  46. board_os/hub_adapter_manifest.py +140 -0
  47. board_os/mcp_tools.py +3228 -0
  48. board_os/migration.py +166 -0
  49. board_os/parser.py +317 -0
  50. board_os/presence.py +156 -0
  51. board_os/sync.py +320 -0
  52. board_os/transition_gates.py +224 -0
  53. board_os/transition_gates_cli.py +272 -0
  54. board_os/transition_gates_validator.py +551 -0
  55. board_os/verify_suites.py +126 -0
  56. board_os/verify_suites_cli.py +328 -0
  57. board_os/workflow.py +967 -0
  58. cli/__init__.py +0 -0
  59. cli/_data_types.py +248 -0
  60. cli/_init_helpers.py +587 -0
  61. cli/_resources.py +100 -0
  62. cli/adapter_registry.py +239 -0
  63. cli/add_stack.py +315 -0
  64. cli/aggregator.py +438 -0
  65. cli/board_commands.py +1218 -0
  66. cli/brain_commands.py +255 -0
  67. cli/cognition.py +345 -0
  68. cli/config_composer.py +349 -0
  69. cli/core_version.py +41 -0
  70. cli/cron_commands.py +278 -0
  71. cli/db_reset.py +298 -0
  72. cli/doc_commands.py +111 -0
  73. cli/doctor.py +2953 -0
  74. cli/doctor_board.py +365 -0
  75. cli/doctor_extras.py +1121 -0
  76. cli/doctor_graph.py +608 -0
  77. cli/doctor_tokens.py +254 -0
  78. cli/graph_commands.py +1265 -0
  79. cli/hook_renderer.py +393 -0
  80. cli/hub_commands.py +580 -0
  81. cli/list_adapters.py +79 -0
  82. cli/list_stacks.py +105 -0
  83. cli/logs_commands.py +89 -0
  84. cli/main.py +3070 -0
  85. cli/materialize_file.py +65 -0
  86. cli/mcp_start.py +153 -0
  87. cli/module_commands.py +513 -0
  88. cli/pr_commands.py +2024 -0
  89. cli/preset_commands.py +126 -0
  90. cli/preset_registry.py +171 -0
  91. cli/project_overrides.py +119 -0
  92. cli/registry.py +365 -0
  93. cli/remove_stack.py +492 -0
  94. cli/renderer.py +620 -0
  95. cli/setup.py +464 -0
  96. cli/skill_commands.py +689 -0
  97. cli/skill_registry.py +235 -0
  98. cli/skills_list.py +332 -0
  99. cli/stack_lint.py +351 -0
  100. cli/stack_registry.py +688 -0
  101. cli/subsystems.py +335 -0
  102. cli/sync_all.py +310 -0
  103. cli/tail_command.py +410 -0
  104. cli/update.py +608 -0
  105. cli/verify_since_edit.py +439 -0
  106. coding_os-0.3.2.dist-info/METADATA +508 -0
  107. coding_os-0.3.2.dist-info/RECORD +1304 -0
  108. coding_os-0.3.2.dist-info/WHEEL +5 -0
  109. coding_os-0.3.2.dist-info/entry_points.txt +5 -0
  110. coding_os-0.3.2.dist-info/licenses/LICENSE +201 -0
  111. coding_os-0.3.2.dist-info/top_level.txt +10 -0
  112. core/__init__.py +0 -0
  113. core/board_os/__init__.py +39 -0
  114. core/board_os/_agent_runtime.py +256 -0
  115. core/board_os/config.py +421 -0
  116. core/board_os/git_coherence.py +107 -0
  117. core/board_os/hub_adapter_manifest.py +140 -0
  118. core/board_os/mcp_tools.py +3228 -0
  119. core/board_os/migration.py +166 -0
  120. core/board_os/parser.py +317 -0
  121. core/board_os/presence.py +156 -0
  122. core/board_os/sync.py +320 -0
  123. core/board_os/transition-gates.yaml +176 -0
  124. core/board_os/transition_gates.py +224 -0
  125. core/board_os/transition_gates_cli.py +272 -0
  126. core/board_os/transition_gates_validator.py +551 -0
  127. core/board_os/verify-suites.yaml +113 -0
  128. core/board_os/verify_suites.py +126 -0
  129. core/board_os/verify_suites_cli.py +328 -0
  130. core/board_os/workflow.py +967 -0
  131. core/commands/board.md +27 -0
  132. core/commands/classify.md +23 -0
  133. core/commands/compose.md +23 -0
  134. core/commands/daily.md +31 -0
  135. core/commands/diagnose.md +7 -0
  136. core/commands/memory-search.md +23 -0
  137. core/commands/new-project.md +33 -0
  138. core/commands/retro.md +38 -0
  139. core/commands/review.md +14 -0
  140. core/commands/task.md +17 -0
  141. core/commands/verify.md +34 -0
  142. core/docs/thinking_os-final-edition.md +1449 -0
  143. core/doctor-config.yaml +74 -0
  144. core/graph_os/__init__.py +29 -0
  145. core/graph_os/backend.py +233 -0
  146. core/graph_os/backends/__init__.py +13 -0
  147. core/graph_os/backends/sqlite_backend.py +1053 -0
  148. core/graph_os/bench/__init__.py +17 -0
  149. core/graph_os/bench/fixtures.py +56 -0
  150. core/graph_os/bench/harness.py +95 -0
  151. core/graph_os/bench/persian_precision.py +142 -0
  152. core/graph_os/bench/scale_500k.py +120 -0
  153. core/graph_os/bench/token_cost.py +170 -0
  154. core/graph_os/bench/viewer_fps.py +110 -0
  155. core/graph_os/communities.py +410 -0
  156. core/graph_os/enterprise.py +218 -0
  157. core/graph_os/entry_points.py +226 -0
  158. core/graph_os/extractors/__init__.py +25 -0
  159. core/graph_os/extractors/code_generic.py +914 -0
  160. core/graph_os/extractors/code_go.py +1422 -0
  161. core/graph_os/extractors/code_json.py +340 -0
  162. core/graph_os/extractors/code_php.py +979 -0
  163. core/graph_os/extractors/code_python.py +1454 -0
  164. core/graph_os/extractors/code_shell.py +538 -0
  165. core/graph_os/extractors/code_toml.py +302 -0
  166. core/graph_os/extractors/code_ts.py +1665 -0
  167. core/graph_os/extractors/code_yaml.py +394 -0
  168. core/graph_os/extractors/contracts.py +1592 -0
  169. core/graph_os/extractors/md_links.py +890 -0
  170. core/graph_os/extractors/task_deps.py +345 -0
  171. core/graph_os/groups/__init__.py +22 -0
  172. core/graph_os/groups/cross_repo.py +156 -0
  173. core/graph_os/groups/manifest.py +141 -0
  174. core/graph_os/ingest/__init__.py +19 -0
  175. core/graph_os/ingest/base.py +306 -0
  176. core/graph_os/ingest/github.py +112 -0
  177. core/graph_os/ingest/zip.py +95 -0
  178. core/graph_os/toolchain.py +393 -0
  179. core/graph_os/tools/__init__.py +9 -0
  180. core/graph_os/tools/graph.py +5573 -0
  181. core/graph_os/tools/reindex_dispatch.py +730 -0
  182. core/graph_os/tree_sitter_overlay.py +235 -0
  183. core/graph_os/types.py +252 -0
  184. core/graph_os/vec_index.py +277 -0
  185. core/graph_os/viewer/__init__.py +12 -0
  186. core/graph_os/viewer/exporter.py +93 -0
  187. core/graph_os/viewer/template.py +189 -0
  188. core/hooks/_helpers/_paths.py +40 -0
  189. core/hooks/_helpers/advance_role.py +72 -0
  190. core/hooks/_helpers/auto_compose.py +228 -0
  191. core/hooks/_helpers/auto_validate_lessons.py +55 -0
  192. core/hooks/_helpers/branch_guard_check.py +796 -0
  193. core/hooks/_helpers/check_commit_message.py +108 -0
  194. core/hooks/_helpers/check_dangerous_rm.py +80 -0
  195. core/hooks/_helpers/check_git_bypass.py +154 -0
  196. core/hooks/_helpers/check_git_destructive.py +77 -0
  197. core/hooks/_helpers/check_settings_write.py +97 -0
  198. core/hooks/_helpers/consume_override.py +51 -0
  199. core/hooks/_helpers/context_budget.py +77 -0
  200. core/hooks/_helpers/cos_say_json.py +103 -0
  201. core/hooks/_helpers/destructive_edit_check.py +163 -0
  202. core/hooks/_helpers/detect_status_transition.py +82 -0
  203. core/hooks/_helpers/digest_regen.py +56 -0
  204. core/hooks/_helpers/doc_sync_check.py +498 -0
  205. core/hooks/_helpers/drain_embedding_outbox.py +52 -0
  206. core/hooks/_helpers/extract_additional_context.py +51 -0
  207. core/hooks/_helpers/extract_commit_msg_arg.py +74 -0
  208. core/hooks/_helpers/git_command_parse.py +424 -0
  209. core/hooks/_helpers/git_settings_fields.py +47 -0
  210. core/hooks/_helpers/graph_context_match.py +37 -0
  211. core/hooks/_helpers/graph_marker_check.py +70 -0
  212. core/hooks/_helpers/jit_recall.py +56 -0
  213. core/hooks/_helpers/json_field.py +41 -0
  214. core/hooks/_helpers/narrative_signal.py +59 -0
  215. core/hooks/_helpers/observation_count.py +31 -0
  216. core/hooks/_helpers/pre_commit_batch.py +177 -0
  217. core/hooks/_helpers/pre_commit_fake_input.py +42 -0
  218. core/hooks/_helpers/presence_gc.py +102 -0
  219. core/hooks/_helpers/presence_write.py +167 -0
  220. core/hooks/_helpers/recover_indirect.py +35 -0
  221. core/hooks/_helpers/routing_evolution.py +104 -0
  222. core/hooks/_helpers/session_recap.py +72 -0
  223. core/hooks/_helpers/skill_primer.py +229 -0
  224. core/hooks/_helpers/task_sync.py +59 -0
  225. core/hooks/_helpers/tool_failure_capture.py +147 -0
  226. core/hooks/_helpers/trajectory_autosnap.py +278 -0
  227. core/hooks/_helpers/trajectory_startup.py +62 -0
  228. core/hooks/_helpers/turn_summary.py +82 -0
  229. core/hooks/_helpers/validate_task_frontmatter.py +98 -0
  230. core/hooks/_helpers/wip_limit_check.py +103 -0
  231. core/hooks/_helpers/wip_lines.py +53 -0
  232. core/hooks/_helpers/work_log_append.py +89 -0
  233. core/hooks/_helpers/wrap_dispatch_output.py +82 -0
  234. core/hooks/advance-role.sh +48 -0
  235. core/hooks/agent-presence.sh +179 -0
  236. core/hooks/auto-brain-decay.sh +184 -0
  237. core/hooks/auto-compose-roles.sh +83 -0
  238. core/hooks/auto-graph-reconcile-shell.sh +119 -0
  239. core/hooks/auto-regen-doc-index.sh +120 -0
  240. core/hooks/auto-reindex-docs.sh +130 -0
  241. core/hooks/auto-task-sync.sh +56 -0
  242. core/hooks/auto-trace-rotate.sh +88 -0
  243. core/hooks/block-bad-patterns.sh +212 -0
  244. core/hooks/block-dangerous-commands.sh +182 -0
  245. core/hooks/block-hardcoded-literals.sh +90 -0
  246. core/hooks/block-migration-conflict.sh +114 -0
  247. core/hooks/block-protected-files.sh +129 -0
  248. core/hooks/block-secrets.sh +185 -0
  249. core/hooks/block-shared-tree-edit.sh +75 -0
  250. core/hooks/block-uv-heredoc.sh +78 -0
  251. core/hooks/branch-guard.sh +122 -0
  252. core/hooks/capture-observation.sh +76 -0
  253. core/hooks/capture-tool-failure.sh +24 -0
  254. core/hooks/capture-work-log.sh +89 -0
  255. core/hooks/check-agents-md-refs.sh +75 -0
  256. core/hooks/check-agents-md-size.sh +49 -0
  257. core/hooks/check-capture-worked.sh +148 -0
  258. core/hooks/check-doc-size.sh +61 -0
  259. core/hooks/check-mcp-extras.sh +92 -0
  260. core/hooks/check-state.sh +87 -0
  261. core/hooks/classify-task-mode.sh +103 -0
  262. core/hooks/cos-env.sh +1301 -0
  263. core/hooks/drain-embedding-outbox.sh +24 -0
  264. core/hooks/enforce-anti-ambiguity.sh +74 -0
  265. core/hooks/enforce-commit-message.sh +73 -0
  266. core/hooks/enforce-doc-anchor.sh +224 -0
  267. core/hooks/enforce-doc-sync.sh +206 -0
  268. core/hooks/enforce-graph-context.sh +89 -0
  269. core/hooks/enforce-graph-first-read.sh +94 -0
  270. core/hooks/enforce-memory-check.sh +128 -0
  271. core/hooks/enforce-rename-plan.sh +78 -0
  272. core/hooks/enforce-scaffold-boundary.sh +68 -0
  273. core/hooks/enforce-skill.sh +125 -0
  274. core/hooks/enforce-task-body.sh +52 -0
  275. core/hooks/enforce-task-start.sh +81 -0
  276. core/hooks/enforce-task-transition.sh +75 -0
  277. core/hooks/enforce-template.sh +143 -0
  278. core/hooks/enforce-verify.sh +112 -0
  279. core/hooks/enforce-wip-limit.sh +43 -0
  280. core/hooks/enforce-zoom.sh +69 -0
  281. core/hooks/ensure-hub-up.sh +67 -0
  282. core/hooks/inject-mcp-caller-session.sh +70 -0
  283. core/hooks/jit-recall.sh +65 -0
  284. core/hooks/link-commit-to-task.sh +143 -0
  285. core/hooks/lint-task.sh +40 -0
  286. core/hooks/nudge-docs-first.sh +71 -0
  287. core/hooks/nudge-git-mode.sh +29 -0
  288. core/hooks/nudge-graph-os.sh +118 -0
  289. core/hooks/nudge-learn-narrative.sh +36 -0
  290. core/hooks/nudge-model-routing.sh +32 -0
  291. core/hooks/nudge-reentry.sh +101 -0
  292. core/hooks/nudge-reuse-first.sh +68 -0
  293. core/hooks/nudge-task-discovery.sh +81 -0
  294. core/hooks/nudge-thinking-os.sh +109 -0
  295. core/hooks/pr-reap.sh +23 -0
  296. core/hooks/reclaim-sweep.sh +58 -0
  297. core/hooks/record-verify-auto.sh +77 -0
  298. core/hooks/record-verify.sh +74 -0
  299. core/hooks/regen-reminder.sh +104 -0
  300. core/hooks/registry.yaml +1262 -0
  301. core/hooks/remind-daily.sh +27 -0
  302. core/hooks/remind-dogfood.sh +70 -0
  303. core/hooks/remind-learn-validate.sh +94 -0
  304. core/hooks/rules-primer.sh +50 -0
  305. core/hooks/search-enforce-inventory.sh +108 -0
  306. core/hooks/search-verify-remaining.sh +132 -0
  307. core/hooks/session-context.sh +729 -0
  308. core/hooks/session-end.sh +145 -0
  309. core/hooks/session-skill-primer.sh +43 -0
  310. core/hooks/snapshot-transcript.sh +56 -0
  311. core/hooks/sync-task-current.sh +85 -0
  312. core/hooks/test-first-reminder.sh +120 -0
  313. core/hooks/test-governor.sh +173 -0
  314. core/hooks/thinking_os-gate.sh +52 -0
  315. core/hooks/track-backtrack.sh +35 -0
  316. core/hooks/track-discovery.sh +121 -0
  317. core/hooks/track-skill.sh +53 -0
  318. core/hooks/validate-task-frontmatter.sh +49 -0
  319. core/hooks/verify-rename-callers.sh +119 -0
  320. core/hooks/warn-abandoned-task.sh +99 -0
  321. core/hooks/warn-destructive-edit.sh +64 -0
  322. core/hooks/warn-diff-size.sh +43 -0
  323. core/hooks/warn-graph-empty.sh +81 -0
  324. core/hooks/warn-mcp-down.sh +190 -0
  325. core/hooks/write-state.sh +55 -0
  326. core/logging_os/__init__.py +33 -0
  327. core/logging_os/api.py +127 -0
  328. core/logging_os/bridge.py +80 -0
  329. core/logging_os/config.py +172 -0
  330. core/logging_os/fingerprint.py +25 -0
  331. core/logging_os/redact.py +53 -0
  332. core/logging_os/render.py +83 -0
  333. core/logging_os/sinks.py +164 -0
  334. core/rules/anti-overengineering.md +44 -0
  335. core/rules/api-contract-discipline.md +41 -0
  336. core/rules/dimension-registry.md +155 -0
  337. core/rules/git-workflow.md +57 -0
  338. core/rules/memory.md +46 -0
  339. core/rules/model-routing.md +22 -0
  340. core/rules/skill-enforcement.md +75 -0
  341. core/rules/test-discipline.md +38 -0
  342. core/rules/thinking_os.md +48 -0
  343. core/rules/transparency-banner.md +37 -0
  344. core/runtime_paths.yaml +36 -0
  345. core/scaffold_manifest.json +14430 -0
  346. core/scheduled/__init__.py +0 -0
  347. core/scheduled/_activity.py +126 -0
  348. core/scheduled/_state.py +113 -0
  349. core/scheduled/config.py +86 -0
  350. core/scheduled/dep_reconcile.py +135 -0
  351. core/scheduled/error_sweep.py +137 -0
  352. core/scheduled/nightly.py +930 -0
  353. core/scheduled/responsive_extract.py +65 -0
  354. core/schemas/adapter.schema.json +269 -0
  355. core/schemas/preset.schema.json +50 -0
  356. core/schemas/skill.schema.json +81 -0
  357. core/schemas/stack.schema.json +404 -0
  358. core/scripts/_lib.sh +9 -0
  359. core/scripts/docs-lint.sh +228 -0
  360. core/scripts/docs-nav-fix.sh +133 -0
  361. core/scripts/docs-staleness-check.sh +154 -0
  362. core/scripts/install-adapter.sh +266 -0
  363. core/scripts/link-stack-skills.sh +52 -0
  364. core/scripts/log-latest.sh +106 -0
  365. core/scripts/log-search.sh +89 -0
  366. core/scripts/log-write.sh +134 -0
  367. core/scripts/ref-resolve.sh +71 -0
  368. core/skills/a11y/SKILL.md +305 -0
  369. core/skills/a11y/assets/a11y-checklist.md +137 -0
  370. core/skills/a11y/references/aria-and-focus.md +247 -0
  371. core/skills/a11y/references/rn-accessibility.md +343 -0
  372. core/skills/a11y/references/screen-reader-testing.md +190 -0
  373. core/skills/agent-memory/SKILL.md +191 -0
  374. core/skills/agent-memory/assets/memory-checklist.md +21 -0
  375. core/skills/agent-memory/references/memory-recipes.md +57 -0
  376. core/skills/api-design/SKILL.md +232 -0
  377. core/skills/api-design/assets/api-design-checklist.md +110 -0
  378. core/skills/api-design/references/error-envelope.md +381 -0
  379. core/skills/api-design/references/idempotency-pagination.md +312 -0
  380. core/skills/api-design/references/rest-contracts.md +426 -0
  381. core/skills/auth-patterns/SKILL.md +352 -0
  382. core/skills/auth-patterns/assets/auth-checklist.md +118 -0
  383. core/skills/auth-patterns/references/jwt-and-service-tokens.md +343 -0
  384. core/skills/auth-patterns/references/passkeys-2fa.md +289 -0
  385. core/skills/auth-patterns/references/sessions-vs-jwt.md +230 -0
  386. core/skills/auth-patterns/scripts/cookie-flag-check.py +146 -0
  387. core/skills/backend-fundamentals/SKILL.md +238 -0
  388. core/skills/backend-fundamentals/assets/backend-checklist.md +27 -0
  389. core/skills/backend-fundamentals/references/backend-patterns.md +56 -0
  390. core/skills/backend-fundamentals/scripts/check_layering.py +83 -0
  391. core/skills/clean-code/SKILL.md +642 -0
  392. core/skills/clean-code/scripts/audit-fail-closed.py +167 -0
  393. core/skills/codebase-explorer/SKILL.md +89 -0
  394. core/skills/codebase-explorer/assets/reading-checklist.md +24 -0
  395. core/skills/codebase-explorer/references/reading-strategies.md +52 -0
  396. core/skills/codebase-explorer/scripts/outline.py +99 -0
  397. core/skills/db-design/SKILL.md +327 -0
  398. core/skills/db-design/assets/migration-template.sql +49 -0
  399. core/skills/db-design/references/migration-discipline.md +290 -0
  400. core/skills/db-design/references/postgres-patterns.md +340 -0
  401. core/skills/db-design/scripts/migration-safety.sh +150 -0
  402. core/skills/deployment-cicd/SKILL.md +260 -0
  403. core/skills/deployment-cicd/assets/deploy-checklist.md +26 -0
  404. core/skills/deployment-cicd/references/pipeline-and-release.md +54 -0
  405. core/skills/deployment-cicd/scripts/lint_workflow.py +79 -0
  406. core/skills/docker/SKILL.md +114 -0
  407. core/skills/docker/assets/dockerfile-checklist.md +31 -0
  408. core/skills/docker/references/compose-patterns.md +66 -0
  409. core/skills/docker/references/dockerfile-optimization.md +64 -0
  410. core/skills/docker/scripts/lint_dockerfile.sh +48 -0
  411. core/skills/docker/versions.json +16 -0
  412. core/skills/end-to-end-testing/SKILL.md +101 -0
  413. core/skills/end-to-end-testing/assets/e2e-checklist.md +23 -0
  414. core/skills/end-to-end-testing/references/maestro.md +63 -0
  415. core/skills/end-to-end-testing/references/playwright.md +68 -0
  416. core/skills/end-to-end-testing/scripts/lint_e2e.py +88 -0
  417. core/skills/end-to-end-testing/versions.json +16 -0
  418. core/skills/frontend-design/SKILL.md +76 -0
  419. core/skills/frontend-design/assets/design-checklist.md +29 -0
  420. core/skills/frontend-design/references/design-principles.md +65 -0
  421. core/skills/frontend-design/scripts/check_contrast.py +89 -0
  422. core/skills/frontend-fundamentals/SKILL.md +213 -0
  423. core/skills/frontend-fundamentals/assets/frontend-checklist.md +25 -0
  424. core/skills/frontend-fundamentals/references/rendering-and-state.md +66 -0
  425. core/skills/frontend-fundamentals/scripts/check_frontend.py +86 -0
  426. core/skills/graph-explorer/SKILL.md +215 -0
  427. core/skills/graph-explorer/scripts/explain-impact.sh +64 -0
  428. core/skills/graphql/SKILL.md +187 -0
  429. core/skills/grpc-microservices/SKILL.md +174 -0
  430. core/skills/hexagonal-architecture/SKILL.md +199 -0
  431. core/skills/hexagonal-architecture/assets/folder-scaffold.md +233 -0
  432. core/skills/hexagonal-architecture/references/anti-patterns.md +129 -0
  433. core/skills/hexagonal-architecture/references/go-fiber-layout.md +429 -0
  434. core/skills/hexagonal-architecture/references/python-fastapi-layout.md +453 -0
  435. core/skills/hexagonal-architecture/references/react-native-layout.md +428 -0
  436. core/skills/i18n/SKILL.md +126 -0
  437. core/skills/incident-response/SKILL.md +225 -0
  438. core/skills/incident-response/assets/incident-checklist.md +29 -0
  439. core/skills/incident-response/references/severity-and-runbook.md +53 -0
  440. core/skills/incident-response/scripts/classify_severity.py +86 -0
  441. core/skills/linux-sysadmin/SKILL.md +115 -0
  442. core/skills/linux-sysadmin/assets/hardening-checklist.md +29 -0
  443. core/skills/linux-sysadmin/references/ssh-hardening.md +62 -0
  444. core/skills/linux-sysadmin/references/systemd-and-services.md +77 -0
  445. core/skills/linux-sysadmin/scripts/triage.sh +50 -0
  446. core/skills/linux-sysadmin/versions.json +17 -0
  447. core/skills/llm-patterns/SKILL.md +410 -0
  448. core/skills/llm-patterns/assets/llm-feature-checklist.md +26 -0
  449. core/skills/llm-patterns/references/rag-and-evals.md +59 -0
  450. core/skills/llm-patterns/scripts/estimate_tokens.py +75 -0
  451. core/skills/messaging-queues/SKILL.md +142 -0
  452. core/skills/mobile-fundamentals/SKILL.md +406 -0
  453. core/skills/mobile-fundamentals/assets/mobile-launch-checklist.md +130 -0
  454. core/skills/mobile-fundamentals/references/navigation-and-deep-links.md +337 -0
  455. core/skills/mobile-fundamentals/references/offline-sync.md +339 -0
  456. core/skills/node-backend/SKILL.md +114 -0
  457. core/skills/node-backend/assets/node-checklist.md +25 -0
  458. core/skills/node-backend/references/async-and-errors.md +67 -0
  459. core/skills/node-backend/references/event-loop.md +65 -0
  460. core/skills/node-backend/scripts/check_package.py +78 -0
  461. core/skills/node-backend/versions.json +17 -0
  462. core/skills/observability/SKILL.md +289 -0
  463. core/skills/observability/assets/observability-checklist.md +27 -0
  464. core/skills/observability/references/instrumentation.md +57 -0
  465. core/skills/observability/scripts/lint_logging.py +77 -0
  466. core/skills/payments/SKILL.md +102 -0
  467. core/skills/performance/SKILL.md +305 -0
  468. core/skills/performance/assets/perf-checklist.md +143 -0
  469. core/skills/performance/references/mobile-performance.md +249 -0
  470. core/skills/performance/references/web-vitals.md +209 -0
  471. core/skills/php/SKILL.md +116 -0
  472. core/skills/php/assets/php-checklist.md +26 -0
  473. core/skills/php/references/modern-php.md +64 -0
  474. core/skills/php/references/security.md +72 -0
  475. core/skills/php/scripts/scan_php_smells.py +99 -0
  476. core/skills/php/versions.json +9 -0
  477. core/skills/pr-mode-driver/SKILL.md +65 -0
  478. core/skills/realtime-websockets/SKILL.md +152 -0
  479. core/skills/redis/SKILL.md +105 -0
  480. core/skills/redis/assets/redis-checklist.md +27 -0
  481. core/skills/redis/references/operations.md +66 -0
  482. core/skills/redis/references/patterns.md +62 -0
  483. core/skills/redis/scripts/analyze_info.py +101 -0
  484. core/skills/redis/versions.json +9 -0
  485. core/skills/search/SKILL.md +91 -0
  486. core/skills/search/references/grep.md +76 -0
  487. core/skills/search/scripts/verify-count.sh +73 -0
  488. core/skills/search-infra/SKILL.md +109 -0
  489. core/skills/security-mobile/SKILL.md +394 -0
  490. core/skills/security-mobile/assets/mobile-security-checklist.md +117 -0
  491. core/skills/security-mobile/references/masvs-l1-checklist.md +127 -0
  492. core/skills/security-web/SKILL.md +217 -0
  493. core/skills/security-web/assets/security-web-checklist.md +167 -0
  494. core/skills/security-web/references/owasp-top-10.md +551 -0
  495. core/skills/security-web/references/supply-chain.md +179 -0
  496. core/skills/security-web/scripts/csp-check.sh +153 -0
  497. core/skills/shell-scripting/SKILL.md +128 -0
  498. core/skills/shell-scripting/assets/script-checklist.md +33 -0
  499. core/skills/shell-scripting/references/argument-parsing.md +84 -0
  500. core/skills/shell-scripting/references/bash-robustness.md +78 -0
  501. core/skills/shell-scripting/scripts/lint_script.sh +53 -0
  502. core/skills/shell-scripting/scripts/new_script.py +131 -0
  503. core/skills/shell-scripting/versions.json +23 -0
  504. core/skills/sql-authoring/SKILL.md +104 -0
  505. core/skills/sql-authoring/assets/query-review-checklist.md +26 -0
  506. core/skills/sql-authoring/references/query-patterns.md +89 -0
  507. core/skills/sql-authoring/references/reading-explain.md +52 -0
  508. core/skills/sql-authoring/scripts/analyze_plan.py +100 -0
  509. core/skills/sql-authoring/versions.json +17 -0
  510. core/skills/state-management/SKILL.md +428 -0
  511. core/skills/state-management/references/tanstack-query-recipes.md +301 -0
  512. core/skills/state-management/references/zustand-recipes.md +364 -0
  513. core/skills/supabase/SKILL.md +108 -0
  514. core/skills/supabase/assets/supabase-checklist.md +26 -0
  515. core/skills/supabase/references/realtime-and-storage.md +55 -0
  516. core/skills/supabase/references/rls-and-auth.md +65 -0
  517. core/skills/supabase/scripts/check_rls.py +88 -0
  518. core/skills/supabase/versions.json +9 -0
  519. core/skills/task-driver/SKILL.md +272 -0
  520. core/skills/task-driver/scripts/task-lint.sh +163 -0
  521. core/skills/technical-writing/SKILL.md +85 -0
  522. core/skills/technical-writing/assets/doc-checklist.md +29 -0
  523. core/skills/technical-writing/references/doc-anatomy.md +53 -0
  524. core/skills/technical-writing/references/writing-craft.md +59 -0
  525. core/skills/technical-writing/scripts/new_doc.py +81 -0
  526. core/skills/terraform-k8s/SKILL.md +133 -0
  527. core/skills/testing-strategy/SKILL.md +266 -0
  528. core/skills/testing-strategy/assets/test-review-checklist.md +25 -0
  529. core/skills/testing-strategy/references/test-types.md +52 -0
  530. core/skills/testing-strategy/scripts/coverage_gate.py +79 -0
  531. core/skills/thinking_os/SKILL.md +288 -0
  532. core/skills/thinking_os/scripts/classify.sh +122 -0
  533. core/skills/typescript/SKILL.md +110 -0
  534. core/skills/typescript/assets/typescript-checklist.md +24 -0
  535. core/skills/typescript/references/strictness.md +53 -0
  536. core/skills/typescript/references/type-system.md +86 -0
  537. core/skills/typescript/scripts/check_tsconfig.py +92 -0
  538. core/skills/typescript/versions.json +9 -0
  539. core/subsystems.yaml +202 -0
  540. core/thinking_os/__init__.py +1 -0
  541. core/thinking_os/_agent_markers.py +32 -0
  542. core/thinking_os/agents/README.md +71 -0
  543. core/thinking_os/agents/analyst.md +139 -0
  544. core/thinking_os/agents/architect.md +127 -0
  545. core/thinking_os/agents/debugger.md +111 -0
  546. core/thinking_os/agents/deployer.md +112 -0
  547. core/thinking_os/agents/distiller.md +28 -0
  548. core/thinking_os/agents/documenter.md +101 -0
  549. core/thinking_os/agents/implementer.md +135 -0
  550. core/thinking_os/agents/internal/session_observer.md +39 -0
  551. core/thinking_os/agents/observer.md +100 -0
  552. core/thinking_os/agents/onboarder.md +81 -0
  553. core/thinking_os/agents/refactorer.md +123 -0
  554. core/thinking_os/agents/repairer.md +47 -0
  555. core/thinking_os/agents/researcher.md +129 -0
  556. core/thinking_os/agents/reviewer.md +147 -0
  557. core/thinking_os/agents/security_auditor.md +133 -0
  558. core/thinking_os/background.py +405 -0
  559. core/thinking_os/bootstrap_outcomes.py +200 -0
  560. core/thinking_os/budget.py +302 -0
  561. core/thinking_os/capture.py +495 -0
  562. core/thinking_os/cognition.py +516 -0
  563. core/thinking_os/cognition_schemas.py +517 -0
  564. core/thinking_os/compress.py +192 -0
  565. core/thinking_os/concepts.py +233 -0
  566. core/thinking_os/dashboard.py +159 -0
  567. core/thinking_os/database.py +2883 -0
  568. core/thinking_os/decay.py +393 -0
  569. core/thinking_os/digest.py +295 -0
  570. core/thinking_os/dispatcher.py +192 -0
  571. core/thinking_os/dispatcher_helpers.py +48 -0
  572. core/thinking_os/dispatchers/__init__.py +3 -0
  573. core/thinking_os/dispatchers/default.py +47 -0
  574. core/thinking_os/distill.py +192 -0
  575. core/thinking_os/doc_indexer.py +905 -0
  576. core/thinking_os/embeddings.py +943 -0
  577. core/thinking_os/formula_composer.py +556 -0
  578. core/thinking_os/gate_marker.py +75 -0
  579. core/thinking_os/graph.py +296 -0
  580. core/thinking_os/graph_indexer.py +360 -0
  581. core/thinking_os/health_check.py +517 -0
  582. core/thinking_os/impact.py +119 -0
  583. core/thinking_os/memory_gc.py +356 -0
  584. core/thinking_os/migrator_embeddings.py +318 -0
  585. core/thinking_os/precision.py +194 -0
  586. core/thinking_os/presets/registry.yaml +127 -0
  587. core/thinking_os/record_outcome.py +399 -0
  588. core/thinking_os/repair.py +105 -0
  589. core/thinking_os/retrieval_quality.py +239 -0
  590. core/thinking_os/roles/analyst.yaml +83 -0
  591. core/thinking_os/roles/architect.yaml +88 -0
  592. core/thinking_os/roles/debugger.yaml +71 -0
  593. core/thinking_os/roles/deployer.yaml +71 -0
  594. core/thinking_os/roles/documenter.yaml +72 -0
  595. core/thinking_os/roles/implementer.yaml +83 -0
  596. core/thinking_os/roles/observer.yaml +70 -0
  597. core/thinking_os/roles/refactorer.yaml +71 -0
  598. core/thinking_os/roles/researcher.yaml +72 -0
  599. core/thinking_os/roles/reviewer.yaml +79 -0
  600. core/thinking_os/roles/security_auditor.yaml +83 -0
  601. core/thinking_os/roles_state.py +168 -0
  602. core/thinking_os/sanitizer.py +320 -0
  603. core/thinking_os/server.py +3160 -0
  604. core/thinking_os/session_enrich.py +272 -0
  605. core/thinking_os/session_observe_worker.py +111 -0
  606. core/thinking_os/session_startup.py +74 -0
  607. core/thinking_os/session_summary.py +245 -0
  608. core/thinking_os/situations/registry.yaml +99 -0
  609. core/thinking_os/task_analyzer.py +462 -0
  610. core/thinking_os/task_parser.py +342 -0
  611. core/thinking_os/task_sync.py +73 -0
  612. core/thinking_os/tools/__init__.py +6 -0
  613. core/thinking_os/tools/_shared.py +947 -0
  614. core/thinking_os/tools/cognition.py +1867 -0
  615. core/thinking_os/tools/docs.py +770 -0
  616. core/thinking_os/tools/learning.py +2078 -0
  617. core/thinking_os/tools/logs.py +79 -0
  618. core/thinking_os/tools/memory.py +840 -0
  619. core/thinking_os/tools/metrics.py +200 -0
  620. core/thinking_os/tools/retrieve.py +415 -0
  621. core/thinking_os/tools/routing.py +658 -0
  622. core/thinking_os/tools/tasks.py +449 -0
  623. core/thinking_os/tools/trajectory.py +181 -0
  624. core/thinking_os/tracing.py +235 -0
  625. core/web/__init__.py +5 -0
  626. core/web/_cache.py +118 -0
  627. core/web/_deps.py +56 -0
  628. core/web/_envelope.py +85 -0
  629. core/web/_project_context.py +140 -0
  630. core/web/chat_providers.py +108 -0
  631. core/web/init_jobs.py +216 -0
  632. core/web/routes/__init__.py +25 -0
  633. core/web/routes/_bounded_read.py +76 -0
  634. core/web/routes/board.py +1089 -0
  635. core/web/routes/cognition.py +1838 -0
  636. core/web/routes/config.py +635 -0
  637. core/web/routes/graph.py +513 -0
  638. core/web/routes/health.py +180 -0
  639. core/web/routes/hooks.py +288 -0
  640. core/web/routes/hub.py +1219 -0
  641. core/web/routes/logs.py +374 -0
  642. core/web/routes/metrics.py +43 -0
  643. core/web/routes/observability.py +400 -0
  644. core/web/routes/patterns.py +227 -0
  645. core/web/routes/presence.py +609 -0
  646. core/web/routes/roles.py +446 -0
  647. core/web/routes/scheduled.py +261 -0
  648. core/web/routes/search.py +238 -0
  649. core/web/routes/sessions.py +220 -0
  650. core/web/routes/settings.py +363 -0
  651. core/web/routes/stream.py +547 -0
  652. core/web/security.py +157 -0
  653. core/web/server.py +283 -0
  654. graph_os/__init__.py +29 -0
  655. graph_os/backend.py +233 -0
  656. graph_os/backends/__init__.py +13 -0
  657. graph_os/backends/sqlite_backend.py +1053 -0
  658. graph_os/communities.py +410 -0
  659. graph_os/enterprise.py +218 -0
  660. graph_os/entry_points.py +226 -0
  661. graph_os/extractors/__init__.py +25 -0
  662. graph_os/extractors/code_generic.py +914 -0
  663. graph_os/extractors/code_go.py +1422 -0
  664. graph_os/extractors/code_json.py +340 -0
  665. graph_os/extractors/code_php.py +979 -0
  666. graph_os/extractors/code_python.py +1454 -0
  667. graph_os/extractors/code_shell.py +538 -0
  668. graph_os/extractors/code_toml.py +302 -0
  669. graph_os/extractors/code_ts.py +1665 -0
  670. graph_os/extractors/code_yaml.py +394 -0
  671. graph_os/extractors/contracts.py +1592 -0
  672. graph_os/extractors/md_links.py +890 -0
  673. graph_os/extractors/task_deps.py +345 -0
  674. graph_os/groups/__init__.py +22 -0
  675. graph_os/groups/cross_repo.py +156 -0
  676. graph_os/groups/manifest.py +141 -0
  677. graph_os/ingest/__init__.py +19 -0
  678. graph_os/ingest/base.py +306 -0
  679. graph_os/ingest/github.py +112 -0
  680. graph_os/ingest/zip.py +95 -0
  681. graph_os/toolchain.py +393 -0
  682. graph_os/tools/__init__.py +9 -0
  683. graph_os/tools/graph.py +5573 -0
  684. graph_os/tools/reindex_dispatch.py +730 -0
  685. graph_os/tree_sitter_overlay.py +235 -0
  686. graph_os/types.py +252 -0
  687. graph_os/vec_index.py +277 -0
  688. graph_os/viewer/__init__.py +12 -0
  689. graph_os/viewer/exporter.py +93 -0
  690. graph_os/viewer/template.py +189 -0
  691. scheduled/__init__.py +0 -0
  692. scheduled/_activity.py +126 -0
  693. scheduled/_state.py +113 -0
  694. scheduled/config.py +86 -0
  695. scheduled/dep_reconcile.py +135 -0
  696. scheduled/error_sweep.py +137 -0
  697. scheduled/nightly.py +930 -0
  698. scheduled/responsive_extract.py +65 -0
  699. scripts/__init__.py +4 -0
  700. scripts/_commit_msg_body.sh +31 -0
  701. scripts/_post_commit_body.sh +49 -0
  702. scripts/_pre_commit_body.sh +121 -0
  703. scripts/_prepare_commit_msg_body.sh +53 -0
  704. scripts/audit_mcp_tools.py +693 -0
  705. scripts/bench_sdk_dispatcher.py +177 -0
  706. scripts/capture_golden.py +169 -0
  707. scripts/check_graph_phantoms.py +75 -0
  708. scripts/dev/audit_doc_links.py +359 -0
  709. scripts/dev/audit_scaffold_module_tags.py +107 -0
  710. scripts/dev/backfill_doc_headers.py +328 -0
  711. scripts/dev/backfill_nav_lines.py +119 -0
  712. scripts/dev/fix_nav_placement.py +106 -0
  713. scripts/dev/inspect_sdk_options.py +45 -0
  714. scripts/dev/migrate_check_ids.py +170 -0
  715. scripts/dev/strip_purpose_blocks.py +154 -0
  716. scripts/dump_openapi.py +66 -0
  717. scripts/e2e_dispatch_tool.py +195 -0
  718. scripts/generate_manifest.py +166 -0
  719. scripts/golden_sections.py +20 -0
  720. scripts/graph_demo.py +161 -0
  721. scripts/install-git-hooks.sh +47 -0
  722. scripts/migrate_embeddings_minilm_to_bge_m3.py +84 -0
  723. scripts/operational_eval.py +445 -0
  724. scripts/probe_agent_session_resolver.py +59 -0
  725. scripts/prune_deleted_path.py +127 -0
  726. scripts/refactor_agent_dual_mode.py +171 -0
  727. scripts/refresh_skill_versions.py +302 -0
  728. scripts/regen_doc_index.py +209 -0
  729. scripts/regen_doctor_schema.py +62 -0
  730. scripts/regen_rules.py +94 -0
  731. scripts/rename_formulas_to_semantic.py +241 -0
  732. scripts/smoke_db_connections.py +183 -0
  733. scripts/smoke_doc_header.py +72 -0
  734. scripts/smoke_graph_e2e.py +374 -0
  735. scripts/smoke_sdk_dispatch.py +84 -0
  736. scripts/smoke_uid_resolver.py +164 -0
  737. scripts/verify_dispatchers.py +244 -0
  738. scripts/verify_phase_c_e2e.py +436 -0
  739. templates/__init__.py +6 -0
  740. templates/_base/Makefile.base +353 -0
  741. templates/_base/base.yaml +59 -0
  742. templates/_base/coding-os.yaml.template +39 -0
  743. templates/_base/dimension-registry.template.md +68 -0
  744. templates/_base/domain-config.template.json +46 -0
  745. templates/_base/fragments/anatomy-map.md.tmpl +11 -0
  746. templates/_base/fragments/context-discipline.md.tmpl +3 -0
  747. templates/_base/fragments/core-loop.md.tmpl +52 -0
  748. templates/_base/fragments/engineering-routing.md.tmpl +3 -0
  749. templates/_base/fragments/header.md.tmpl +6 -0
  750. templates/_base/fragments/identity.md.tmpl +3 -0
  751. templates/_base/fragments/principles.md.tmpl +3 -0
  752. templates/_base/fragments/retrieval-routing.md.tmpl +23 -0
  753. templates/_base/fragments/session-handoff.md.tmpl +3 -0
  754. templates/_base/fragments/skills.md.tmpl +3 -0
  755. templates/_base/fragments/ssot-map.md.tmpl +3 -0
  756. templates/_base/fragments/stop-conditions.md.tmpl +3 -0
  757. templates/_base/fragments/subagent-dispatch.md.tmpl +3 -0
  758. templates/_base/fragments/task-authoring.md.tmpl +69 -0
  759. templates/_base/fragments/task-logging.md.tmpl +8 -0
  760. templates/_base/fragments/tool-routing.md.tmpl +9 -0
  761. templates/_base/fragments/verification-matrix.md.tmpl +12 -0
  762. templates/_base/lang/dart/analysis_options.yaml +7 -0
  763. templates/_base/lang/php/phpcs.xml.dist +10 -0
  764. templates/_base/lang/python/pyproject.toml +19 -0
  765. templates/_base/lang/rust/clippy.toml +5 -0
  766. templates/_base/lang/rust/rustfmt.toml +3 -0
  767. templates/_base/lang/typescript/eslint.config.js +26 -0
  768. templates/_base/lang/typescript/tsconfig.json +15 -0
  769. templates/_base/lang/typescript/vitest.config.ts +10 -0
  770. templates/_base/scaffold/changes.log +1 -0
  771. templates/_base/scaffold/docs/00-index.md +55 -0
  772. templates/_base/scaffold/docs/_meta/feature-dependency-tree.md +30 -0
  773. templates/_base/scaffold/docs/_meta/foundation-map.md +56 -0
  774. templates/_base/scaffold/docs/_meta/questions.md +8 -0
  775. templates/_base/scaffold/docs/_meta/roadmap.md +33 -0
  776. templates/_base/scaffold/docs/api-contracts/00-index.md +58 -0
  777. templates/_base/scaffold/docs/api-contracts/error-format.md +58 -0
  778. templates/_base/scaffold/docs/architecture/00-index.md +42 -0
  779. templates/_base/scaffold/docs/architecture/adr/00-index.md +39 -0
  780. templates/_base/scaffold/docs/engineering/00-index.md +9 -0
  781. templates/_base/scaffold/docs/governance/00-index.md +55 -0
  782. templates/_base/scaffold/docs/governance/_templates/doc-cheat-sheet.md +202 -0
  783. templates/_base/scaffold/docs/governance/_templates/playbook-template.md +81 -0
  784. templates/_base/scaffold/docs/governance/_templates/post-mortem-template.md +85 -0
  785. templates/_base/scaffold/docs/governance/_templates/runbook-template.md +88 -0
  786. templates/_base/scaffold/docs/governance/_templates/security-review-template.md +111 -0
  787. templates/_base/scaffold/docs/governance/_templates/task-detail.md +61 -0
  788. templates/_base/scaffold/docs/governance/agent-workflow.md +101 -0
  789. templates/_base/scaffold/docs/governance/anatomy-contract.md +150 -0
  790. templates/_base/scaffold/docs/governance/critical-rules.md +224 -0
  791. templates/_base/scaffold/docs/governance/decision-records.md +58 -0
  792. templates/_base/scaffold/docs/governance/docs-first-protocol.md +157 -0
  793. templates/_base/scaffold/docs/governance/docs-system.md +151 -0
  794. templates/_base/scaffold/docs/governance/gdpr-compliance.md +66 -0
  795. templates/_base/scaffold/docs/governance/mcp-tool-inventory.md +112 -0
  796. templates/_base/scaffold/docs/governance/risk-register.md +26 -0
  797. templates/_base/scaffold/docs/governance/scaffold-boundary-contract.md +161 -0
  798. templates/_base/scaffold/docs/governance/task-lifecycle.md +125 -0
  799. templates/_base/scaffold/docs/governance/wrapper-derivation.md +50 -0
  800. templates/_base/scaffold/docs/insights/00-index.md +17 -0
  801. templates/_base/scaffold/docs/ops/00-index.md +59 -0
  802. templates/_base/scaffold/docs/ops/runbooks/00-index.md +9 -0
  803. templates/_base/scaffold/docs/playbooks/00-index.md +12 -0
  804. templates/_base/scaffold/docs/playbooks/research-validation.md +29 -0
  805. templates/_base/scaffold/docs/playbooks/security-review.md +41 -0
  806. templates/_base/scaffold/docs/prd/00-index.md +43 -0
  807. templates/_base/scaffold/docs/prd/01-snapshot-vision.md +56 -0
  808. templates/_base/scaffold/docs/workflow/workflow-guide.md +138 -0
  809. templates/_base/scaffold/src/shared/README.md +23 -0
  810. templates/_base/skill-enforcement.template.md +14 -0
  811. templates/_base/task-detail.template.md +61 -0
  812. templates/_presets/ai-saas.yaml +9 -0
  813. templates/_presets/django-next.yaml +8 -0
  814. templates/_presets/dotnet-react.yaml +8 -0
  815. templates/_presets/flutter-baas.yaml +8 -0
  816. templates/_presets/go-react.yaml +8 -0
  817. templates/_presets/hexagonal-product.yaml +16 -0
  818. templates/_presets/jamstack.yaml +8 -0
  819. templates/_presets/laravel-vue.yaml +8 -0
  820. templates/_presets/mean.yaml +8 -0
  821. templates/_presets/mern.yaml +9 -0
  822. templates/_presets/nest-angular.yaml +8 -0
  823. templates/_presets/nextjs-fastapi.yaml +10 -0
  824. templates/_presets/nuxt-fullstack.yaml +9 -0
  825. templates/_presets/pern.yaml +9 -0
  826. templates/_presets/rails-react.yaml +8 -0
  827. templates/_presets/rn-api.yaml +8 -0
  828. templates/_presets/rust-svelte.yaml +8 -0
  829. templates/_presets/spring-react.yaml +8 -0
  830. templates/_presets/t3-style.yaml +9 -0
  831. templates/_presets/tall.yaml +8 -0
  832. templates/_presets/wordpress-cms.yaml +8 -0
  833. templates/angular/rules/frontend.md +19 -0
  834. templates/angular/scaffold/docs/engineering/accessibility.md +46 -0
  835. templates/angular/scaffold/docs/engineering/angular-rules.md +35 -0
  836. templates/angular/scaffold/docs/playbooks/angular-app.md +42 -0
  837. templates/angular/scaffold/src/frontend/angular.json +52 -0
  838. templates/angular/scaffold/src/frontend/package.json +28 -0
  839. templates/angular/scaffold/src/frontend/src/app/app.component.ts +19 -0
  840. templates/angular/scaffold/src/frontend/src/app/app.config.ts +22 -0
  841. templates/angular/scaffold/src/frontend/src/app/app.routes.ts +8 -0
  842. templates/angular/scaffold/src/frontend/src/app/core/global-error-handler.ts +12 -0
  843. templates/angular/scaffold/src/frontend/src/app/health/health.component.ts +14 -0
  844. templates/angular/scaffold/src/frontend/src/app/health/health.service.spec.ts +16 -0
  845. templates/angular/scaffold/src/frontend/src/app/health/health.service.ts +10 -0
  846. templates/angular/scaffold/src/frontend/src/index.html +11 -0
  847. templates/angular/scaffold/src/frontend/src/main.ts +9 -0
  848. templates/angular/scaffold/src/frontend/src/styles.css +14 -0
  849. templates/angular/scaffold/src/frontend/tsconfig.app.json +8 -0
  850. templates/angular/scaffold/src/frontend/tsconfig.json +27 -0
  851. templates/angular/scaffold/src/frontend/tsconfig.spec.json +8 -0
  852. templates/angular/scaffold-boundary.yaml +27 -0
  853. templates/angular/skills/angular/SKILL.md +79 -0
  854. templates/angular/skills/angular/references/anatomy.md +69 -0
  855. templates/angular/stack.yaml +75 -0
  856. templates/aspnet-core/rules/backend.md +20 -0
  857. templates/aspnet-core/scaffold/docs/engineering/aspnet-core-rules.md +36 -0
  858. templates/aspnet-core/scaffold/docs/playbooks/aspnet-core-service.md +40 -0
  859. templates/aspnet-core/scaffold/src/backend/Backend.csproj +11 -0
  860. templates/aspnet-core/scaffold/src/backend/Backend.sln +27 -0
  861. templates/aspnet-core/scaffold/src/backend/Common/ExceptionHandlingMiddleware.cs +35 -0
  862. templates/aspnet-core/scaffold/src/backend/Features/Health/HealthEndpoints.cs +10 -0
  863. templates/aspnet-core/scaffold/src/backend/Features/Health/HealthService.cs +9 -0
  864. templates/aspnet-core/scaffold/src/backend/Program.cs +22 -0
  865. templates/aspnet-core/scaffold/src/backend/tests/Backend.Tests/Backend.Tests.csproj +22 -0
  866. templates/aspnet-core/scaffold/src/backend/tests/Backend.Tests/HealthServiceTests.cs +15 -0
  867. templates/aspnet-core/scaffold-boundary.yaml +24 -0
  868. templates/aspnet-core/skills/aspnet-core/SKILL.md +80 -0
  869. templates/aspnet-core/skills/aspnet-core/references/anatomy.md +65 -0
  870. templates/aspnet-core/stack.yaml +68 -0
  871. templates/astro/rules/frontend.md +20 -0
  872. templates/astro/scaffold/docs/engineering/astro-rules.md +40 -0
  873. templates/astro/scaffold/docs/playbooks/astro-app.md +57 -0
  874. templates/astro/scaffold/docs/playbooks/content-seo.md +37 -0
  875. templates/astro/scaffold/src/frontend/astro.config.mjs +10 -0
  876. templates/astro/scaffold/src/frontend/package.json +23 -0
  877. templates/astro/scaffold/src/frontend/src/components/Greeting.astro +13 -0
  878. templates/astro/scaffold/src/frontend/src/content/posts/hello.md +10 -0
  879. templates/astro/scaffold/src/frontend/src/content.config.ts +19 -0
  880. templates/astro/scaffold/src/frontend/src/lib/problem.test.ts +39 -0
  881. templates/astro/scaffold/src/frontend/src/lib/problem.ts +30 -0
  882. templates/astro/scaffold/src/frontend/src/pages/api/health.ts +13 -0
  883. templates/astro/scaffold/src/frontend/src/pages/index.astro +21 -0
  884. templates/astro/scaffold/src/frontend/tsconfig.json +9 -0
  885. templates/astro/scaffold/src/frontend/vitest.config.ts +10 -0
  886. templates/astro/scaffold-boundary.yaml +28 -0
  887. templates/astro/skills/astro/SKILL.md +71 -0
  888. templates/astro/skills/astro/references/anatomy.md +66 -0
  889. templates/astro/stack.yaml +75 -0
  890. templates/csharp-plain/scaffold/src/backend/Backend.csproj +12 -0
  891. templates/csharp-plain/scaffold/src/backend/Program.cs +1 -0
  892. templates/csharp-plain/scaffold-boundary.yaml +23 -0
  893. templates/csharp-plain/stack.yaml +50 -0
  894. templates/django/rules/backend.md +18 -0
  895. templates/django/scaffold/docs/engineering/anti-ambiguity.md +74 -0
  896. templates/django/scaffold/docs/engineering/backend-rules.md +133 -0
  897. templates/django/scaffold/docs/engineering/glossary.md +51 -0
  898. templates/django/scaffold/docs/engineering/logging-standards.md +107 -0
  899. templates/django/scaffold/docs/engineering/naming-conventions.md +68 -0
  900. templates/django/scaffold/docs/engineering/secrets-rotation-runbook.md +142 -0
  901. templates/django/scaffold/docs/playbooks/backend-api.md +119 -0
  902. templates/django/scaffold/src/backend/config/__init__.py +0 -0
  903. templates/django/scaffold/src/backend/config/settings.py +31 -0
  904. templates/django/scaffold/src/backend/config/urls.py +11 -0
  905. templates/django/scaffold/src/backend/config/wsgi.py +6 -0
  906. templates/django/scaffold/src/backend/manage.py +14 -0
  907. templates/django/scaffold/src/backend/pyproject.toml +37 -0
  908. templates/django/scaffold/src/backend/tests/test_health.py +4 -0
  909. templates/django/scaffold-boundary.yaml +25 -0
  910. templates/django/skills/python-django/SKILL.md +450 -0
  911. templates/django/skills/python-django/references/anatomy.md +117 -0
  912. templates/django/skills/python-django/scripts/new_endpoint.py +89 -0
  913. templates/django/stack.yaml +73 -0
  914. templates/fastapi/rules/backend.md +18 -0
  915. templates/fastapi/scaffold/docs/engineering/fastapi-rules.md +37 -0
  916. templates/fastapi/scaffold/docs/playbooks/fastapi-service.md +30 -0
  917. templates/fastapi/scaffold/src/backend/app/__init__.py +0 -0
  918. templates/fastapi/scaffold/src/backend/app/main.py +8 -0
  919. templates/fastapi/scaffold/src/backend/pyproject.toml +39 -0
  920. templates/fastapi/scaffold/src/backend/tests/test_health.py +11 -0
  921. templates/fastapi/scaffold-boundary.yaml +25 -0
  922. templates/fastapi/skills/python-fastapi/SKILL.md +75 -0
  923. templates/fastapi/skills/python-fastapi/references/anatomy.md +117 -0
  924. templates/fastapi/skills/python-fastapi/scripts/new_endpoint.py +101 -0
  925. templates/fastapi/stack.yaml +57 -0
  926. templates/flutter/rules/mobile.md +26 -0
  927. templates/flutter/scaffold/docs/engineering/flutter-rules.md +35 -0
  928. templates/flutter/scaffold/docs/playbooks/flutter-app.md +45 -0
  929. templates/flutter/scaffold/src/mobile/lib/core/error_mapper.dart +17 -0
  930. templates/flutter/scaffold/src/mobile/lib/core/router.dart +13 -0
  931. templates/flutter/scaffold/src/mobile/lib/main.dart +22 -0
  932. templates/flutter/scaffold/src/mobile/lib/screens/health_screen.dart +32 -0
  933. templates/flutter/scaffold/src/mobile/lib/services/health_service.dart +11 -0
  934. templates/flutter/scaffold/src/mobile/lib/state/health_provider.dart +13 -0
  935. templates/flutter/scaffold/src/mobile/pubspec.yaml +22 -0
  936. templates/flutter/scaffold/src/mobile/test/health_provider_test.dart +90 -0
  937. templates/flutter/scaffold-boundary.yaml +28 -0
  938. templates/flutter/skills/flutter/SKILL.md +76 -0
  939. templates/flutter/skills/flutter/references/anatomy.md +64 -0
  940. templates/flutter/stack.yaml +70 -0
  941. templates/go/rules/backend.md +19 -0
  942. templates/go/scaffold/docs/engineering/go-rules.md +45 -0
  943. templates/go/scaffold/docs/playbooks/go-service.md +30 -0
  944. templates/go/scaffold/src/backend/cmd/api/main.go +22 -0
  945. templates/go/scaffold/src/backend/cmd/api/main_test.go +20 -0
  946. templates/go/scaffold/src/backend/go.mod +3 -0
  947. templates/go/scaffold-boundary.yaml +25 -0
  948. templates/go/skills/go-patterns/SKILL.md +68 -0
  949. templates/go/skills/go-patterns/assets/go-checklist.md +29 -0
  950. templates/go/skills/go-patterns/references/anatomy.md +115 -0
  951. templates/go/skills/go-patterns/references/go-2026-idioms.md +92 -0
  952. templates/go/skills/go-patterns/scripts/new_endpoint.py +117 -0
  953. templates/go/skills/go-patterns/versions.json +16 -0
  954. templates/go/stack.yaml +54 -0
  955. templates/go-fiber/rules/backend.md +20 -0
  956. templates/go-fiber/scaffold/docs/engineering/fiber-rules.md +97 -0
  957. templates/go-fiber/scaffold/docs/playbooks/fiber-service.md +149 -0
  958. templates/go-fiber/scaffold/src/backend/cmd/api/main.go +21 -0
  959. templates/go-fiber/scaffold/src/backend/cmd/api/main_test.go +17 -0
  960. templates/go-fiber/scaffold/src/backend/go.mod +23 -0
  961. templates/go-fiber/scaffold/src/backend/go.sum +49 -0
  962. templates/go-fiber/scaffold-boundary.yaml +26 -0
  963. templates/go-fiber/skills/go-fiber/SKILL.md +203 -0
  964. templates/go-fiber/skills/go-fiber/assets/fiber-checklist.md +26 -0
  965. templates/go-fiber/skills/go-fiber/references/anatomy.md +116 -0
  966. templates/go-fiber/skills/go-fiber/references/fiber-v3-patterns.md +89 -0
  967. templates/go-fiber/skills/go-fiber/scripts/new_endpoint.py +107 -0
  968. templates/go-fiber/skills/go-fiber/versions.json +16 -0
  969. templates/go-fiber/stack.yaml +59 -0
  970. templates/go-plain/scaffold/src/backend/go.mod +3 -0
  971. templates/go-plain/scaffold/src/backend/main.go +7 -0
  972. templates/go-plain/scaffold-boundary.yaml +22 -0
  973. templates/go-plain/stack.yaml +51 -0
  974. templates/java-plain/scaffold/src/backend/mvnw +302 -0
  975. templates/java-plain/scaffold/src/backend/pom.xml +41 -0
  976. templates/java-plain/scaffold/src/backend/src/main/java/com/example/app/Main.java +10 -0
  977. templates/java-plain/scaffold-boundary.yaml +23 -0
  978. templates/java-plain/stack.yaml +51 -0
  979. templates/laravel/rules/backend.md +20 -0
  980. templates/laravel/scaffold/docs/engineering/laravel-rules.md +28 -0
  981. templates/laravel/scaffold/docs/playbooks/laravel-service.md +28 -0
  982. templates/laravel/scaffold/src/backend/app/Exceptions/Handler.php +27 -0
  983. templates/laravel/scaffold/src/backend/app/Http/Controllers/HealthController.php +15 -0
  984. templates/laravel/scaffold/src/backend/app/Support/HealthStatus.php +14 -0
  985. templates/laravel/scaffold/src/backend/composer.json +24 -0
  986. templates/laravel/scaffold/src/backend/phpunit.xml +10 -0
  987. templates/laravel/scaffold/src/backend/public/index.php +8 -0
  988. templates/laravel/scaffold/src/backend/routes/api.php +7 -0
  989. templates/laravel/scaffold/src/backend/tests/Unit/HealthStatusTest.php +16 -0
  990. templates/laravel/scaffold-boundary.yaml +23 -0
  991. templates/laravel/skills/laravel/SKILL.md +56 -0
  992. templates/laravel/skills/laravel/references/anatomy.md +65 -0
  993. templates/laravel/stack.yaml +66 -0
  994. templates/meta/rules/graph-first.md +27 -0
  995. templates/meta/rules/hook-author.md +19 -0
  996. templates/meta/rules/mcp-tool-author.md +18 -0
  997. templates/meta/rules/meta-engineering.md +17 -0
  998. templates/meta/scaffold-boundary.yaml +55 -0
  999. templates/meta/skills/claude-sdk-integration/SKILL.md +163 -0
  1000. templates/meta/skills/claude-sdk-integration/assets/sdk-checklist.md +27 -0
  1001. templates/meta/skills/claude-sdk-integration/scripts/check_model_ids.py +97 -0
  1002. templates/meta/skills/graph-os-authoring/SKILL.md +278 -0
  1003. templates/meta/skills/graph-os-authoring/assets/graph-os-checklist.md +25 -0
  1004. templates/meta/skills/graph-os-authoring/scripts/new_extractor.py +76 -0
  1005. templates/meta/skills/hook-authoring/SKILL.md +292 -0
  1006. templates/meta/skills/hook-authoring/assets/hook-checklist.md +30 -0
  1007. templates/meta/skills/hook-authoring/scripts/new_hook.sh +75 -0
  1008. templates/meta/skills/mcp-tool-authoring/SKILL.md +301 -0
  1009. templates/meta/skills/mcp-tool-authoring/assets/mcp-tool-checklist.md +29 -0
  1010. templates/meta/skills/mcp-tool-authoring/scripts/new_tool.py +74 -0
  1011. templates/meta/skills/meta-engineering/SKILL.md +151 -0
  1012. templates/meta/skills/meta-engineering/assets/meta-edit-checklist.md +28 -0
  1013. templates/meta/skills/meta-engineering/scripts/which_layer.py +61 -0
  1014. templates/meta/skills/python-meta-server/SKILL.md +162 -0
  1015. templates/meta/skills/python-meta-server/assets/meta-server-checklist.md +28 -0
  1016. templates/meta/skills/python-meta-server/scripts/check_envelope.py +91 -0
  1017. templates/meta/skills/react-vite-hub/SKILL.md +140 -0
  1018. templates/meta/skills/react-vite-hub/assets/hub-ui-checklist.md +23 -0
  1019. templates/meta/skills/react-vite-hub/scripts/check_vite_env.py +73 -0
  1020. templates/meta/stack.yaml +119 -0
  1021. templates/nestjs/rules/backend.md +20 -0
  1022. templates/nestjs/scaffold/docs/engineering/nestjs-rules.md +33 -0
  1023. templates/nestjs/scaffold/docs/playbooks/nestjs-service.md +39 -0
  1024. templates/nestjs/scaffold/src/backend/nest-cli.json +5 -0
  1025. templates/nestjs/scaffold/src/backend/package.json +28 -0
  1026. templates/nestjs/scaffold/src/backend/src/app.module.ts +9 -0
  1027. templates/nestjs/scaffold/src/backend/src/common/all-exceptions.filter.ts +59 -0
  1028. templates/nestjs/scaffold/src/backend/src/health/health.controller.ts +14 -0
  1029. templates/nestjs/scaffold/src/backend/src/health/health.module.ts +10 -0
  1030. templates/nestjs/scaffold/src/backend/src/health/health.service.spec.ts +21 -0
  1031. templates/nestjs/scaffold/src/backend/src/health/health.service.ts +9 -0
  1032. templates/nestjs/scaffold/src/backend/src/main.ts +26 -0
  1033. templates/nestjs/scaffold/src/backend/tsconfig.json +16 -0
  1034. templates/nestjs/scaffold/src/backend/vitest.config.ts +9 -0
  1035. templates/nestjs/scaffold-boundary.yaml +25 -0
  1036. templates/nestjs/skills/nestjs/SKILL.md +67 -0
  1037. templates/nestjs/skills/nestjs/references/anatomy.md +65 -0
  1038. templates/nestjs/stack.yaml +68 -0
  1039. templates/nextjs/rules/frontend.md +18 -0
  1040. templates/nextjs/scaffold/docs/design/00-index.md +23 -0
  1041. templates/nextjs/scaffold/docs/design/colors-tokens.md +141 -0
  1042. templates/nextjs/scaffold/docs/design/components-patterns.md +159 -0
  1043. templates/nextjs/scaffold/docs/design/motion-accessibility.md +137 -0
  1044. templates/nextjs/scaffold/docs/design/typography-spacing.md +107 -0
  1045. templates/nextjs/scaffold/docs/engineering/accessibility-web.md +56 -0
  1046. templates/nextjs/scaffold/docs/engineering/copywriting-standard.md +102 -0
  1047. templates/nextjs/scaffold/docs/engineering/formatting-rules.md +89 -0
  1048. templates/nextjs/scaffold/docs/engineering/frontend-rendering-rules.md +80 -0
  1049. templates/nextjs/scaffold/docs/engineering/frontend-rules.md +183 -0
  1050. templates/nextjs/scaffold/docs/engineering/i18n-policy.md +99 -0
  1051. templates/nextjs/scaffold/docs/pages-content-spec/00-index.md +78 -0
  1052. templates/nextjs/scaffold/docs/playbooks/content-seo.md +55 -0
  1053. templates/nextjs/scaffold/docs/playbooks/docs-governance.md +51 -0
  1054. templates/nextjs/scaffold/docs/playbooks/frontend-ui.md +63 -0
  1055. templates/nextjs/scaffold/src/frontend/app/layout.tsx +14 -0
  1056. templates/nextjs/scaffold/src/frontend/app/page.tsx +3 -0
  1057. templates/nextjs/scaffold/src/frontend/eslint.config.js +17 -0
  1058. templates/nextjs/scaffold/src/frontend/lib/greeting.test.ts +9 -0
  1059. templates/nextjs/scaffold/src/frontend/lib/greeting.ts +3 -0
  1060. templates/nextjs/scaffold/src/frontend/package.json +28 -0
  1061. templates/nextjs/scaffold/src/frontend/tsconfig.json +18 -0
  1062. templates/nextjs/scaffold/src/frontend/vitest.config.ts +10 -0
  1063. templates/nextjs/scaffold-boundary.yaml +30 -0
  1064. templates/nextjs/skills/nextjs-react/SKILL.md +485 -0
  1065. templates/nextjs/skills/nextjs-react/references/anatomy.md +116 -0
  1066. templates/nextjs/skills/nextjs-react/scripts/new_component.py +72 -0
  1067. templates/nextjs/stack.yaml +81 -0
  1068. templates/node-express/rules/backend.md +20 -0
  1069. templates/node-express/scaffold/docs/engineering/express-rules.md +30 -0
  1070. templates/node-express/scaffold/docs/playbooks/express-service.md +35 -0
  1071. templates/node-express/scaffold/src/backend/package.json +24 -0
  1072. templates/node-express/scaffold/src/backend/src/index.ts +17 -0
  1073. templates/node-express/scaffold/src/backend/src/middleware/error-handler.ts +12 -0
  1074. templates/node-express/scaffold/src/backend/src/routes/health.test.ts +33 -0
  1075. templates/node-express/scaffold/src/backend/src/routes/health.ts +7 -0
  1076. templates/node-express/scaffold/src/backend/tsconfig.json +15 -0
  1077. templates/node-express/scaffold/src/backend/types/express-bootstrap.d.ts +21 -0
  1078. templates/node-express/scaffold-boundary.yaml +25 -0
  1079. templates/node-express/skills/node-express/SKILL.md +70 -0
  1080. templates/node-express/skills/node-express/references/anatomy.md +63 -0
  1081. templates/node-express/stack.yaml +63 -0
  1082. templates/python/scaffold/docs/engineering/python-rules.md +27 -0
  1083. templates/python/scaffold/docs/playbooks/python-library.md +35 -0
  1084. templates/python/stack.yaml +60 -0
  1085. templates/rails/rules/backend.md +10 -0
  1086. templates/rails/scaffold/docs/engineering/rails-rules.md +33 -0
  1087. templates/rails/scaffold/docs/playbooks/rails-service.md +42 -0
  1088. templates/rails/scaffold/src/backend/Gemfile +12 -0
  1089. templates/rails/scaffold/src/backend/app/controllers/application_controller.rb +26 -0
  1090. templates/rails/scaffold/src/backend/app/controllers/health_controller.rb +6 -0
  1091. templates/rails/scaffold/src/backend/app/models/health.rb +6 -0
  1092. templates/rails/scaffold/src/backend/config/application.rb +12 -0
  1093. templates/rails/scaffold/src/backend/config/boot.rb +3 -0
  1094. templates/rails/scaffold/src/backend/config/routes.rb +4 -0
  1095. templates/rails/scaffold/src/backend/config.ru +5 -0
  1096. templates/rails/scaffold/src/backend/spec/rails_helper.rb +18 -0
  1097. templates/rails/scaffold/src/backend/spec/requests/health_spec.rb +24 -0
  1098. templates/rails/scaffold-boundary.yaml +25 -0
  1099. templates/rails/skills/rails/SKILL.md +62 -0
  1100. templates/rails/skills/rails/references/anatomy.md +71 -0
  1101. templates/rails/stack.yaml +72 -0
  1102. templates/react-native/rules/mobile.md +26 -0
  1103. templates/react-native/scaffold/docs/engineering/accessibility-mobile.md +95 -0
  1104. templates/react-native/scaffold/docs/engineering/mobile-rules.md +56 -0
  1105. templates/react-native/scaffold/docs/engineering/offline-first.md +61 -0
  1106. templates/react-native/scaffold/docs/playbooks/mobile-app.md +49 -0
  1107. templates/react-native/scaffold/src/mobile/App.tsx +9 -0
  1108. templates/react-native/scaffold/src/mobile/eslint.config.js +17 -0
  1109. templates/react-native/scaffold/src/mobile/package.json +23 -0
  1110. templates/react-native/scaffold/src/mobile/src/greeting.test.ts +9 -0
  1111. templates/react-native/scaffold/src/mobile/src/greeting.ts +3 -0
  1112. templates/react-native/scaffold/src/mobile/tsconfig.json +17 -0
  1113. templates/react-native/scaffold/src/mobile/vitest.config.ts +10 -0
  1114. templates/react-native/scaffold-boundary.yaml +30 -0
  1115. templates/react-native/skills/react-native-mobile/SKILL.md +119 -0
  1116. templates/react-native/skills/react-native-mobile/assets/rn-mobile-checklist.md +28 -0
  1117. templates/react-native/skills/react-native-mobile/references/anatomy.md +140 -0
  1118. templates/react-native/skills/react-native-mobile/references/rn-2026-practices.md +54 -0
  1119. templates/react-native/skills/react-native-mobile/scripts/new_screen.py +73 -0
  1120. templates/react-native/skills/react-native-mobile/versions.json +16 -0
  1121. templates/react-native/skills/react-native-patterns/SKILL.md +512 -0
  1122. templates/react-native/skills/react-native-patterns/assets/rn-review-checklist.md +26 -0
  1123. templates/react-native/skills/react-native-patterns/references/anatomy.md +62 -0
  1124. templates/react-native/skills/react-native-patterns/references/list-performance.md +70 -0
  1125. templates/react-native/skills/react-native-patterns/scripts/scan_rn_perf.py +77 -0
  1126. templates/react-native/stack.yaml +70 -0
  1127. templates/ruby-plain/scaffold/src/backend/Gemfile +8 -0
  1128. templates/ruby-plain/scaffold/src/backend/main.rb +3 -0
  1129. templates/ruby-plain/scaffold-boundary.yaml +23 -0
  1130. templates/ruby-plain/stack.yaml +50 -0
  1131. templates/rust-axum/rules/backend.md +20 -0
  1132. templates/rust-axum/scaffold/docs/engineering/rust-axum-rules.md +35 -0
  1133. templates/rust-axum/scaffold/docs/playbooks/rust-axum-service.md +43 -0
  1134. templates/rust-axum/scaffold/src/backend/Cargo.toml +20 -0
  1135. templates/rust-axum/scaffold/src/backend/src/app.rs +12 -0
  1136. templates/rust-axum/scaffold/src/backend/src/error.rs +48 -0
  1137. templates/rust-axum/scaffold/src/backend/src/main.rs +24 -0
  1138. templates/rust-axum/scaffold/src/backend/src/routes/health.rs +37 -0
  1139. templates/rust-axum/scaffold/src/backend/src/routes/mod.rs +2 -0
  1140. templates/rust-axum/scaffold-boundary.yaml +25 -0
  1141. templates/rust-axum/skills/rust/SKILL.md +73 -0
  1142. templates/rust-axum/skills/rust/references/anatomy.md +63 -0
  1143. templates/rust-axum/stack.yaml +65 -0
  1144. templates/rust-plain/scaffold/src/backend/Cargo.toml +6 -0
  1145. templates/rust-plain/scaffold/src/backend/src/main.rs +3 -0
  1146. templates/rust-plain/scaffold-boundary.yaml +23 -0
  1147. templates/rust-plain/stack.yaml +51 -0
  1148. templates/spring-boot/rules/backend.md +20 -0
  1149. templates/spring-boot/scaffold/docs/engineering/spring-boot-rules.md +35 -0
  1150. templates/spring-boot/scaffold/docs/playbooks/spring-boot-service.md +45 -0
  1151. templates/spring-boot/scaffold/src/backend/mvnw +302 -0
  1152. templates/spring-boot/scaffold/src/backend/pom.xml +69 -0
  1153. templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/Application.java +16 -0
  1154. templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/common/GlobalExceptionHandler.java +31 -0
  1155. templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthController.java +22 -0
  1156. templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthService.java +12 -0
  1157. templates/spring-boot/scaffold/src/backend/src/main/java/com/example/app/health/HealthStatus.java +4 -0
  1158. templates/spring-boot/scaffold/src/backend/src/test/java/com/example/app/health/HealthServiceTest.java +15 -0
  1159. templates/spring-boot/scaffold-boundary.yaml +26 -0
  1160. templates/spring-boot/skills/spring-boot/SKILL.md +84 -0
  1161. templates/spring-boot/skills/spring-boot/references/anatomy.md +63 -0
  1162. templates/spring-boot/stack.yaml +65 -0
  1163. templates/svelte-sveltekit/rules/frontend.md +20 -0
  1164. templates/svelte-sveltekit/scaffold/docs/engineering/svelte-sveltekit-rules.md +37 -0
  1165. templates/svelte-sveltekit/scaffold/docs/playbooks/svelte-sveltekit-app.md +36 -0
  1166. templates/svelte-sveltekit/scaffold/src/frontend/package.json +22 -0
  1167. templates/svelte-sveltekit/scaffold/src/frontend/src/app.html +12 -0
  1168. templates/svelte-sveltekit/scaffold/src/frontend/src/hooks.server.ts +14 -0
  1169. templates/svelte-sveltekit/scaffold/src/frontend/src/lib/components/Greeting.svelte +6 -0
  1170. templates/svelte-sveltekit/scaffold/src/frontend/src/lib/stores/count.test.ts +26 -0
  1171. templates/svelte-sveltekit/scaffold/src/frontend/src/lib/stores/count.ts +4 -0
  1172. templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+layout.svelte +24 -0
  1173. templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+page.svelte +9 -0
  1174. templates/svelte-sveltekit/scaffold/src/frontend/src/routes/+page.ts +7 -0
  1175. templates/svelte-sveltekit/scaffold/src/frontend/src/routes/health/+server.ts +7 -0
  1176. templates/svelte-sveltekit/scaffold/src/frontend/svelte.config.js +10 -0
  1177. templates/svelte-sveltekit/scaffold/src/frontend/tsconfig.json +7 -0
  1178. templates/svelte-sveltekit/scaffold/src/frontend/vite.config.ts +7 -0
  1179. templates/svelte-sveltekit/scaffold/src/frontend/vitest.config.ts +11 -0
  1180. templates/svelte-sveltekit/scaffold-boundary.yaml +29 -0
  1181. templates/svelte-sveltekit/skills/svelte/SKILL.md +90 -0
  1182. templates/svelte-sveltekit/skills/svelte/references/anatomy.md +62 -0
  1183. templates/svelte-sveltekit/stack.yaml +70 -0
  1184. templates/typescript-plain/scaffold/src/index.ts +3 -0
  1185. templates/typescript-plain/scaffold/tsconfig.json +13 -0
  1186. templates/typescript-plain/scaffold-boundary.yaml +22 -0
  1187. templates/typescript-plain/stack.yaml +44 -0
  1188. templates/vue-nuxt/rules/frontend.md +19 -0
  1189. templates/vue-nuxt/scaffold/docs/engineering/nuxt-rules.md +30 -0
  1190. templates/vue-nuxt/scaffold/docs/playbooks/nuxt-app.md +29 -0
  1191. templates/vue-nuxt/scaffold/src/frontend/app.vue +3 -0
  1192. templates/vue-nuxt/scaffold/src/frontend/nuxt.config.ts +11 -0
  1193. templates/vue-nuxt/scaffold/src/frontend/package.json +20 -0
  1194. templates/vue-nuxt/scaffold/src/frontend/pages/index.test.ts +19 -0
  1195. templates/vue-nuxt/scaffold/src/frontend/pages/index.vue +11 -0
  1196. templates/vue-nuxt/scaffold/src/frontend/vitest.config.ts +12 -0
  1197. templates/vue-nuxt/scaffold-boundary.yaml +26 -0
  1198. templates/vue-nuxt/skills/vue-nuxt/SKILL.md +57 -0
  1199. templates/vue-nuxt/skills/vue-nuxt/references/anatomy.md +60 -0
  1200. templates/vue-nuxt/stack.yaml +61 -0
  1201. templates/wordpress/rules/backend.md +19 -0
  1202. templates/wordpress/scaffold/docs/engineering/wordpress-rules.md +28 -0
  1203. templates/wordpress/scaffold/docs/playbooks/wordpress-service.md +29 -0
  1204. templates/wordpress/scaffold/src/backend/composer.json +17 -0
  1205. templates/wordpress/scaffold/src/backend/phpcs.xml.dist +11 -0
  1206. templates/wordpress/scaffold/src/backend/phpunit.xml +10 -0
  1207. templates/wordpress/scaffold/src/backend/plugin/inc/health.php +8 -0
  1208. templates/wordpress/scaffold/src/backend/plugin/plugin.php +28 -0
  1209. templates/wordpress/scaffold/src/backend/tests/HealthStatusTest.php +15 -0
  1210. templates/wordpress/scaffold/src/backend/theme/functions.php +18 -0
  1211. templates/wordpress/scaffold/src/backend/theme/style.css +11 -0
  1212. templates/wordpress/scaffold-boundary.yaml +23 -0
  1213. templates/wordpress/skills/wordpress/SKILL.md +110 -0
  1214. templates/wordpress/skills/wordpress/assets/wp-checklist.md +28 -0
  1215. templates/wordpress/skills/wordpress/references/wp-development.md +75 -0
  1216. templates/wordpress/skills/wordpress/references/wp-security.md +68 -0
  1217. templates/wordpress/skills/wordpress/scripts/scan_wp_smells.py +91 -0
  1218. templates/wordpress/skills/wordpress/versions.json +16 -0
  1219. templates/wordpress/stack.yaml +60 -0
  1220. thinking_os/__init__.py +1 -0
  1221. thinking_os/_agent_markers.py +32 -0
  1222. thinking_os/background.py +405 -0
  1223. thinking_os/bootstrap_outcomes.py +200 -0
  1224. thinking_os/budget.py +302 -0
  1225. thinking_os/capture.py +495 -0
  1226. thinking_os/cognition.py +516 -0
  1227. thinking_os/cognition_schemas.py +517 -0
  1228. thinking_os/compress.py +192 -0
  1229. thinking_os/concepts.py +233 -0
  1230. thinking_os/dashboard.py +159 -0
  1231. thinking_os/database.py +2883 -0
  1232. thinking_os/decay.py +393 -0
  1233. thinking_os/digest.py +295 -0
  1234. thinking_os/dispatcher.py +192 -0
  1235. thinking_os/dispatcher_helpers.py +48 -0
  1236. thinking_os/dispatchers/__init__.py +3 -0
  1237. thinking_os/dispatchers/default.py +47 -0
  1238. thinking_os/distill.py +192 -0
  1239. thinking_os/doc_indexer.py +905 -0
  1240. thinking_os/embeddings.py +943 -0
  1241. thinking_os/formula_composer.py +556 -0
  1242. thinking_os/gate_marker.py +75 -0
  1243. thinking_os/graph.py +296 -0
  1244. thinking_os/graph_indexer.py +360 -0
  1245. thinking_os/health_check.py +517 -0
  1246. thinking_os/impact.py +119 -0
  1247. thinking_os/memory_gc.py +356 -0
  1248. thinking_os/migrator_embeddings.py +318 -0
  1249. thinking_os/precision.py +194 -0
  1250. thinking_os/record_outcome.py +399 -0
  1251. thinking_os/repair.py +105 -0
  1252. thinking_os/retrieval_quality.py +239 -0
  1253. thinking_os/roles_state.py +168 -0
  1254. thinking_os/sanitizer.py +320 -0
  1255. thinking_os/server.py +3160 -0
  1256. thinking_os/session_enrich.py +272 -0
  1257. thinking_os/session_observe_worker.py +111 -0
  1258. thinking_os/session_startup.py +74 -0
  1259. thinking_os/session_summary.py +245 -0
  1260. thinking_os/task_analyzer.py +462 -0
  1261. thinking_os/task_parser.py +342 -0
  1262. thinking_os/task_sync.py +73 -0
  1263. thinking_os/tools/__init__.py +6 -0
  1264. thinking_os/tools/_shared.py +947 -0
  1265. thinking_os/tools/cognition.py +1867 -0
  1266. thinking_os/tools/docs.py +770 -0
  1267. thinking_os/tools/learning.py +2078 -0
  1268. thinking_os/tools/logs.py +79 -0
  1269. thinking_os/tools/memory.py +840 -0
  1270. thinking_os/tools/metrics.py +200 -0
  1271. thinking_os/tools/retrieve.py +415 -0
  1272. thinking_os/tools/routing.py +658 -0
  1273. thinking_os/tools/tasks.py +449 -0
  1274. thinking_os/tools/trajectory.py +181 -0
  1275. thinking_os/tracing.py +235 -0
  1276. web/__init__.py +5 -0
  1277. web/_cache.py +118 -0
  1278. web/_deps.py +56 -0
  1279. web/_envelope.py +85 -0
  1280. web/_project_context.py +140 -0
  1281. web/chat_providers.py +108 -0
  1282. web/init_jobs.py +216 -0
  1283. web/routes/__init__.py +25 -0
  1284. web/routes/_bounded_read.py +76 -0
  1285. web/routes/board.py +1089 -0
  1286. web/routes/cognition.py +1838 -0
  1287. web/routes/config.py +635 -0
  1288. web/routes/graph.py +513 -0
  1289. web/routes/health.py +180 -0
  1290. web/routes/hooks.py +288 -0
  1291. web/routes/hub.py +1219 -0
  1292. web/routes/logs.py +374 -0
  1293. web/routes/metrics.py +43 -0
  1294. web/routes/observability.py +400 -0
  1295. web/routes/patterns.py +227 -0
  1296. web/routes/presence.py +609 -0
  1297. web/routes/roles.py +446 -0
  1298. web/routes/scheduled.py +261 -0
  1299. web/routes/search.py +238 -0
  1300. web/routes/sessions.py +220 -0
  1301. web/routes/settings.py +363 -0
  1302. web/routes/stream.py +547 -0
  1303. web/security.py +157 -0
  1304. web/server.py +283 -0
@@ -0,0 +1,1262 @@
1
+ # Hook Registry โ€” SSOT for hook registration metadata.
2
+ #
3
+ # Each hook is declared ONCE here. src/cli/hook_renderer.py reads this file
4
+ # and produces adapter-specific settings files:
5
+ # src/adapters/claude/settings.template.json (rendered)
6
+ # src/adapters/codex/hooks.template.json (rendered)
7
+ #
8
+ # Adding a hook:
9
+ # 1. Drop the script in src/core/hooks/<name>.sh
10
+ # 2. Append an entry here (fields below)
11
+ # 3. Run: make regen-adapter-templates
12
+ # 4. Run: make dogfood-full (re-install adapters in this repo)
13
+ #
14
+ # Hook fields:
15
+ # id โ€” logical name (= script basename without .sh)
16
+ # script โ€” filename in src/core/hooks/
17
+ # description โ€” one-line purpose (shown in `cos hooks-list`)
18
+ # category โ€” safety | enforcement | observability | reminder | meta
19
+ # phase โ€” development phase when added (0 | E | F | G | ...)
20
+ # timeout โ€” SECONDS (Claude Code / Codex contract); omit if none.
21
+ # Verified empirically 2026-05-19 against
22
+ # `Slow PreToolUse hooks: 1500057ms` log line that
23
+ # matched timeout=1500 exactly. Keep values <= 30 so
24
+ # a single hung hook can't stall the agent for
25
+ # minutes (or the 60s subprocess-init ceiling fires).
26
+ # events โ€” list of {event, matcher, status_message}
27
+ #
28
+ # Event/matcher pairs are filtered against each adapter's declared
29
+ # capabilities in src/adapters/<agent>/adapter.yaml::capabilities. A pair
30
+ # the adapter cannot fire is skipped in that adapter's output.
31
+
32
+ version: 1
33
+
34
+ hooks:
35
+ # โ”€โ”€ safety โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
36
+ - id: block-secrets
37
+ script: block-secrets.sh
38
+ description: Scans command and file content for credentials (AWS keys, tokens, .env leaks).
39
+ category: safety
40
+ phase: "0"
41
+ timeout: 5
42
+ events:
43
+ - event: PreToolUse
44
+ matcher: Bash
45
+ status_message: "๐Ÿ”’ Scanning command for credentials..."
46
+ - event: PreToolUse
47
+ matcher: Write|Edit
48
+ status_message: "๐Ÿ”’ Scanning file content for credentials..."
49
+
50
+ - id: block-dangerous-commands
51
+ script: block-dangerous-commands.sh
52
+ description: Blocks destructive commands (rm -rf, force-push, reset --hard) without confirmation.
53
+ category: safety
54
+ phase: "0"
55
+ timeout: 5
56
+ events:
57
+ - event: PreToolUse
58
+ matcher: Bash
59
+ status_message: "๐Ÿ›ก๏ธ Checking command safety (rm, force-push, reset)..."
60
+
61
+ - id: branch-guard
62
+ script: branch-guard.sh
63
+ description: Enforces trunk-based git integrity โ€” blocks branch/worktree creation AND HEAD-rewriting ops (`reset <ref>`, `checkout/switch <other-branch>`) in trunk mode.
64
+ category: enforcement
65
+ phase: "0"
66
+ timeout: 5
67
+ events:
68
+ - event: PreToolUse
69
+ matcher: Bash
70
+ status_message: "๐ŸŒณ Enforcing trunk-based workflow (no branches)..."
71
+
72
+ - id: enforce-commit-message
73
+ script: enforce-commit-message.sh
74
+ description: Enforces commit message contract โ€” title โ‰ค100 chars, body โ‰ค3 non-empty lines, no Claude/Anthropic/USER/Co-Authored-By attribution, no Persian prompt quotes.
75
+ category: enforcement
76
+ phase: G
77
+ timeout: 5
78
+ events:
79
+ - event: PreToolUse
80
+ matcher: Bash
81
+ status_message: "๐Ÿ“ Validating commit message contract..."
82
+
83
+ - id: inject-mcp-caller-session
84
+ script: inject-mcp-caller-session.sh
85
+ description: Injects the calling panel's coding-os session as `agent_session` into MCP task-tool args so the panel-blind MCP server attributes writes to the real caller, not the last-writer-wins .active-session pointer. Fail-open; completes F2.
86
+ category: task
87
+ phase: "0"
88
+ timeout: 5
89
+ events:
90
+ - event: PreToolUse
91
+ matcher: mcp__coding-os__cos_task_move
92
+ status_message: "๐Ÿชช Attributing task move to this panel..."
93
+ - event: PreToolUse
94
+ matcher: mcp__coding-os__cos_task_create
95
+ status_message: "๐Ÿชช Attributing task create to this panel..."
96
+ - event: PreToolUse
97
+ matcher: mcp__coding-os__cos_work_log_append
98
+ status_message: "๐Ÿชช Attributing work-log to this panel..."
99
+
100
+ - id: block-uv-heredoc
101
+ script: block-uv-heredoc.sh
102
+ description: Blocks `uv run ... <<EOF` pattern (Rule #9 โ€” silently hangs).
103
+ category: safety
104
+ phase: E
105
+ timeout: 5
106
+ events:
107
+ - event: PreToolUse
108
+ matcher: Bash
109
+ status_message: "โš ๏ธ Inspecting uv-run heredoc pattern (rule #9)..."
110
+
111
+ - id: block-bad-patterns
112
+ script: block-bad-patterns.sh
113
+ description: "Rejects bare `except: pass`, mock-where-real-needed, and other anti-patterns."
114
+ category: safety
115
+ phase: "0"
116
+ timeout: 5
117
+ events:
118
+ - event: PreToolUse
119
+ matcher: Write|Edit
120
+ status_message: "๐Ÿšซ Checking for anti-patterns (bare except: pass, โ€ฆ)..."
121
+
122
+ - id: block-protected-files
123
+ script: block-protected-files.sh
124
+ description: Blocks edits to governance-protected files unless the active task is a governance task.
125
+ category: safety
126
+ phase: "0"
127
+ timeout: 5
128
+ events:
129
+ - event: PreToolUse
130
+ matcher: Write|Edit
131
+ status_message: "๐Ÿ” Checking protected governance files..."
132
+
133
+ - id: block-shared-tree-edit
134
+ script: block-shared-tree-edit.sh
135
+ description: "pr-mode only โ€” blocks Write/Edit/MultiEdit on the shared integration checkout so every change is isolated in a worktree. Inert in trunk mode."
136
+ category: safety
137
+ phase: "0"
138
+ timeout: 5
139
+ events:
140
+ - event: PreToolUse
141
+ matcher: Write|Edit|MultiEdit
142
+ status_message: "๐ŸŒณ pr-mode: enforcing worktree edit isolation..."
143
+
144
+ - id: enforce-task-transition
145
+ script: enforce-task-transition.sh
146
+ description: |
147
+ Blocks hand-edits that mutate a task STATUS transition
148
+ (status: / **Status:** / checkbox [ ]->[x]) on docs/tasks/**/*.md.
149
+ Status changes must route through cos_task_move / cos task-done so the
150
+ board DB, WIP caps, and DoD gates stay consistent; a raw Edit bypasses
151
+ them. Allow-list: governance/docs-update/template-update active task,
152
+ or COS_ALLOW_TASK_EDIT=1.
153
+ category: safety
154
+ phase: "0"
155
+ timeout: 5
156
+ events:
157
+ - event: PreToolUse
158
+ matcher: Write|Edit
159
+ status_message: "๐Ÿšฆ Checking task status transition..."
160
+
161
+ - id: block-migration-conflict
162
+ script: block-migration-conflict.sh
163
+ description: Detects duplicate migration version numbers in db.py (Rule #10 โ€” append-only migrations).
164
+ category: safety
165
+ phase: E
166
+ timeout: 5
167
+ events:
168
+ - event: PreToolUse
169
+ matcher: Write|Edit
170
+ status_message: "๐Ÿ—ƒ๏ธ Checking migration version conflicts (rule #10)..."
171
+
172
+ - id: block-hardcoded-literals
173
+ script: block-hardcoded-literals.sh
174
+ description: Rejects hardcoded stack/adapter name literals in cli/*.py (Rule #12 โ€” data-driven CLI).
175
+ category: safety
176
+ phase: E
177
+ timeout: 5
178
+ events:
179
+ - event: PreToolUse
180
+ matcher: Write|Edit
181
+ status_message: "๐ŸŽฏ Scanning cli/*.py for hardcoded literals (rule #12)..."
182
+
183
+ # โ”€โ”€ enforcement โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
184
+ - id: enforce-verify
185
+ script: enforce-verify.sh
186
+ description: Blocks `task-done` commands unless the required verification suite has recorded a recent pass.
187
+ category: enforcement
188
+ phase: "0"
189
+ timeout: 10
190
+ events:
191
+ - event: PreToolUse
192
+ matcher: Bash
193
+ status_message: "โœ… Verifying suites before task-done..."
194
+
195
+ - id: test-governor
196
+ script: test-governor.sh
197
+ description: PreToolUse Bash โ€” governs pytest invocations for multi-agent laptop safety (TASK-330). BLOCKs full sweeps without audited override (Rule 20), BLOCKs re-runs of a suite already green on the same tree (commit-keyed ledger, COS_TEST_FORCE=1 re-runs), and BLOCKs concurrent heavy runs via a TTL+liveness lockfile. Sweep gate fail-closed; rest fail-open. Spec at docs/engineering/test-governance.md.
198
+ category: enforcement
199
+ phase: "0"
200
+ timeout: 15
201
+ events:
202
+ - event: PreToolUse
203
+ matcher: Bash
204
+ status_message: "๐Ÿงช Test-governor: dedup/lock/sweep check..."
205
+
206
+ - id: record-verify-auto
207
+ script: record-verify-auto.sh
208
+ description: PostToolUse Bash โ€” auto-records completed verify-suite commands (data-driven match against verify-suites.yaml) as PASS/FAIL with commit keys into .last-verify.json, and clears the test-run lockfile (TASK-329). Also fires on PostToolUseFailure so a failed suite records FAIL and frees the lock immediately (TASK-335). Fail-open, always exit 0.
209
+ category: observability
210
+ phase: O
211
+ timeout: 15
212
+ events:
213
+ - event: PostToolUse
214
+ matcher: Bash
215
+ status_message: "๐Ÿงพ Recording verify-suite result..."
216
+ - event: PostToolUseFailure
217
+ matcher: ""
218
+ status_message: "๐Ÿงพ Recording failed suite result..."
219
+
220
+ - id: enforce-template
221
+ script: enforce-template.sh
222
+ description: Requires structured task / ADR / PRD / insight documents to follow the template.
223
+ category: enforcement
224
+ phase: "0"
225
+ timeout: 5
226
+ events:
227
+ - event: PreToolUse
228
+ matcher: Write|Edit
229
+ status_message: "๐Ÿ“‹ Checking doc templates (task / ADR / PRD / insight)..."
230
+
231
+ - id: thinking_os-gate
232
+ script: thinking_os-gate.sh
233
+ description: Requires a recorded Complexity Gate classification before code writes.
234
+ category: enforcement
235
+ phase: "0"
236
+ timeout: 5
237
+ events:
238
+ - event: PreToolUse
239
+ matcher: Write|Edit
240
+ status_message: "๐Ÿง  Verifying Complexity Gate recorded..."
241
+
242
+ - id: enforce-scaffold-boundary
243
+ script: enforce-scaffold-boundary.sh
244
+ description: TASK-163 โ€” block Write/Edit when target path violates an installed stack's `forbids_writing_in`. Reads aggregated $COS_STATE_DIR/scaffold-boundary.yaml; fail-open when missing.
245
+ category: enforcement
246
+ phase: O
247
+ timeout: 10
248
+ events:
249
+ - event: PreToolUse
250
+ matcher: Write|Edit
251
+ status_message: "๐Ÿšง Checking scaffold-boundary (multi-stack subtree isolation)..."
252
+
253
+ - id: enforce-task-start
254
+ script: enforce-task-start.sh
255
+ description: Requires an active task marker so every edit is traceable.
256
+ category: enforcement
257
+ phase: "0"
258
+ timeout: 5
259
+ events:
260
+ - event: PreToolUse
261
+ matcher: Write|Edit
262
+ status_message: "๐Ÿ“Œ Verifying active task..."
263
+
264
+ - id: enforce-doc-anchor
265
+ script: enforce-doc-anchor.sh
266
+ description: Blocks code writes without a recorded doc anchor (Rule #0 โ€” docs-first principle).
267
+ category: enforcement
268
+ phase: E
269
+ timeout: 5
270
+ events:
271
+ - event: PreToolUse
272
+ matcher: Write|Edit
273
+ status_message: "๐Ÿ“Ž Verifying doc anchor (docs-first principle)..."
274
+
275
+ - id: enforce-memory-check
276
+ script: enforce-memory-check.sh
277
+ description: Requires a cos_search memory check before code writes on COMPLICATED/COMPLEX tasks.
278
+ category: enforcement
279
+ phase: F
280
+ timeout: 5
281
+ events:
282
+ - event: PreToolUse
283
+ matcher: Write|Edit
284
+ status_message: "๐Ÿ”Ž Verifying Memory Check (cos_search) recorded..."
285
+
286
+ - id: enforce-skill
287
+ script: enforce-skill.sh
288
+ description: Requires a domain skill to be invoked before editing stack-scoped code files.
289
+ category: enforcement
290
+ phase: "0"
291
+ timeout: 5
292
+ events:
293
+ - event: PreToolUse
294
+ matcher: Write|Edit
295
+ status_message: "๐Ÿ› ๏ธ Verifying domain skill invoked..."
296
+
297
+ - id: enforce-zoom
298
+ script: enforce-zoom.sh
299
+ description: Requires a Plan checkpoint for COMPLICATED/COMPLEX tasks before code writes.
300
+ category: enforcement
301
+ phase: "0"
302
+ timeout: 5
303
+ events:
304
+ - event: PreToolUse
305
+ matcher: Write|Edit
306
+ status_message: "๐Ÿ” Verifying Plan checkpoint for COMPLICATED+..."
307
+
308
+ - id: enforce-doc-sync
309
+ script: enforce-doc-sync.sh
310
+ description: |
311
+ PostToolUse Write|Edit|MultiEdit โ€” code โ†’ doc staleness scanner.
312
+ Closes the docs-first loop in the OTHER direction. Three signals:
313
+ (1) public symbol removed/renamed + doc still mentions it,
314
+ (2) signature changed (param count diff) on a kept symbol โ€” catches
315
+ the "agent invented a non-spec'd field" case, (3) doc mtime older
316
+ than code AND mentions a current symbol (soft).
317
+ Collaborates with thinking_os FTS5 doc index (better than path-mirror
318
+ heuristic) + graph_os reference count when backend is up. WARN class,
319
+ never blocks. Helper: _helpers/doc_sync_check.py.
320
+ category: enforcement
321
+ phase: "0"
322
+ timeout: 30
323
+ events:
324
+ - event: PostToolUse
325
+ matcher: Write|Edit|MultiEdit
326
+ status_message: "๐Ÿ“š Scanning related docs for drift..."
327
+
328
+ # โ”€โ”€ observability โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
329
+ - id: capture-observation
330
+ script: capture-observation.sh
331
+ description: Fire-and-forget observation recording to thinking_os memory (PostToolUse Write|Edit|MultiEdit).
332
+ category: observability
333
+ phase: "0"
334
+ timeout: 10
335
+ events:
336
+ - event: PostToolUse
337
+ matcher: Write|Edit|MultiEdit
338
+ status_message: "๐Ÿง  Recording observation + embedding to memory..."
339
+
340
+ - id: auto-reindex-docs
341
+ script: auto-reindex-docs.sh
342
+ description: Incremental re-index of docs (md) AND code / config (.py/.ts/.tsx/.sh/.yaml/.go) on Write/Edit. Dispatches to the matching graph_os extractor; fire-and-forget.
343
+ category: retrieval
344
+ phase: H
345
+ timeout: 30
346
+ events:
347
+ - event: PostToolUse
348
+ matcher: Write|Edit
349
+ status_message: "โ™ป๏ธ Re-indexing doc/code for cos_doc_search + graph_os freshness..."
350
+
351
+ - id: nudge-reuse-first
352
+ script: nudge-reuse-first.sh
353
+ description: After a Write/Edit under src/services/, nudge (non-blocking, debounced) to promote a symbol duplicated across same-language services into src/shared/<lang>/ โ€” reuse-first placement (project-anatomy.md). Fail-open.
354
+ category: reminder
355
+ phase: H
356
+ timeout: 10
357
+ events:
358
+ - event: PostToolUse
359
+ matcher: Write|Edit
360
+ status_message: "โ™ป๏ธ Checking cross-service reuse (src/shared/ nudge)..."
361
+
362
+ - id: auto-graph-reconcile-shell
363
+ script: auto-graph-reconcile-shell.sh
364
+ description: PostToolUse Bash โ€” single ordered reconciler (replaces auto-reindex-shell-ops + auto-prune-deleted-files). On rm/mv/cp/git/find of a tracked file it walks the touched paths once and prunes-if-gone THEN reindexes-if-present in one job, eliminating the N10 race where the two old hooks hit the graph DB in parallel; bulk ops schedule one debounced full reindex.
365
+ category: retrieval
366
+ phase: O
367
+ timeout: 10
368
+ events:
369
+ - event: PostToolUse
370
+ matcher: Bash
371
+ status_message: "๐Ÿ” Reconciling graph for shell file op (prune + reindex)..."
372
+
373
+ - id: auto-regen-doc-index
374
+ script: auto-regen-doc-index.sh
375
+ description: TASK-161 freshness โ€” regenerate the affected docs/<dir>/00-index.md from frontmatter on every Write/Edit of a docs/**/*.md file. Debounced (5s/dir), fire-and-forget; failures land in $COS_STATE_DIR/.regen-doc-index-errors.log.
376
+ category: retrieval
377
+ phase: O
378
+ timeout: 10
379
+ events:
380
+ - event: PostToolUse
381
+ matcher: Write|Edit
382
+ status_message: "๐Ÿ“‘ Regenerating affected docs/<dir>/00-index.md from frontmatter..."
383
+
384
+ # โ”€โ”€ graph_os enforcement โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
385
+ - id: enforce-graph-first-read
386
+ script: enforce-graph-first-read.sh
387
+ description: |
388
+ PreToolUse Read on a load-bearing meta-repo file
389
+ WARNS (or BLOCKS in strict) when the agent reaches for Read before
390
+ any cos_graph_* tool has been called this session. Reuses the same
391
+ enforce_context_on glob list from .coding-os/rag-config.yaml. Silent
392
+ if the per-file .graph-context-<sha> marker exists. Toggle via
393
+ COS_ENFORCE_GRAPH_FIRST=off|1|strict.
394
+ category: enforcement
395
+ phase: I
396
+ timeout: 10
397
+ events:
398
+ - event: PreToolUse
399
+ matcher: Read
400
+ status_message: "๐Ÿงญ Checking graph-first discipline before Read..."
401
+
402
+ - id: enforce-graph-context
403
+ script: enforce-graph-context.sh
404
+ description: Warn (strict-mode = block) before editing a load-bearing file listed under `.coding-os/rag-config.yaml::graph.enforce_context_on` without a prior cos_graph_context consultation marker.
405
+ category: enforcement
406
+ phase: I
407
+ timeout: 10
408
+ events:
409
+ - event: PreToolUse
410
+ matcher: Write|Edit
411
+ status_message: "๐Ÿงญ Verifying graph-context marker for load-bearing file..."
412
+
413
+ - id: warn-destructive-edit
414
+ script: warn-destructive-edit.sh
415
+ description: Warn (strict-mode = block) before a large net-deletion/overwrite of a load-bearing file (docs/** + graph.enforce_context_on globs); surfaces the last commit + git pull command. Fail-open, self-throttling. Spec docs/engineering/destructive-edit-guard.md.
416
+ category: enforcement
417
+ phase: I
418
+ timeout: 10
419
+ events:
420
+ - event: PreToolUse
421
+ matcher: Write|Edit|MultiEdit
422
+ status_message: "๐Ÿ›ก๏ธ Checking for destructive deletion of load-bearing content..."
423
+
424
+ - id: warn-diff-size
425
+ script: warn-diff-size.sh
426
+ description: PreToolUse Bash โ€” when a `git commit` is about to run, warn (never block) if the staged diff exceeds COS_DIFF_SIZE_THRESHOLD lines (default 400), nudging diff-minimal commits. Fail-open.
427
+ category: enforcement
428
+ phase: "0"
429
+ timeout: 10
430
+ events:
431
+ - event: PreToolUse
432
+ matcher: Bash
433
+ status_message: "๐Ÿ“ Checking staged diff size..."
434
+
435
+ - id: enforce-rename-plan
436
+ script: enforce-rename-plan.sh
437
+ description: Warn (strict-mode = block) when an Edit performs an identifier-rename-shaped string swap without a prior cos_graph_rename_plan marker in this session.
438
+ category: enforcement
439
+ phase: I
440
+ timeout: 10
441
+ events:
442
+ - event: PreToolUse
443
+ matcher: Edit
444
+ status_message: "โœ๏ธ Verifying rename-plan marker..."
445
+
446
+ - id: verify-rename-callers
447
+ script: verify-rename-callers.sh
448
+ description: PostToolUse Edit โ€” when an Edit looks like an identifier rename, greps the repo for unreplaced callers and warns. Closes the gap left by enforce-rename-plan (which verifies plan-existence, not site-completeness). Always non-blocking.
449
+ category: enforcement
450
+ phase: O
451
+ timeout: 30
452
+ events:
453
+ - event: PostToolUse
454
+ matcher: Edit
455
+ status_message: "๐Ÿ” Checking for unreplaced rename callers..."
456
+
457
+ - id: search-enforce-inventory
458
+ script: search-enforce-inventory.sh
459
+ description: PreToolUse Bash โ€” when a bulk replace (sed -i, xargs sed, python replace) is about to run, extracts the OLD pattern, stores it in session state, and emits the inventory grep command for the agent to run. Does NOT run grep itself (full-repo grep exceeds PreToolUse timeout on large codebases). Companion PostToolUse hook (search-verify-remaining) runs bounded verify grep after replace. Always non-blocking.
460
+ category: enforcement
461
+ phase: O
462
+ timeout: 30
463
+ events:
464
+ - event: PreToolUse
465
+ matcher: Bash
466
+ status_message: "๐Ÿ”Ž Running search inventory before bulk replace..."
467
+
468
+ - id: search-verify-remaining
469
+ script: search-verify-remaining.sh
470
+ description: PostToolUse Bash โ€” after a bulk replace, reads session state from search-enforce-inventory and re-runs verify grep. Reports remaining match count vs ground truth. Warns if > 0 remain with file list. Closes the "declared done but 20 remain" gap for Bash-based replace operations. Always non-blocking.
471
+ category: enforcement
472
+ phase: O
473
+ timeout: 30
474
+ events:
475
+ - event: PostToolUse
476
+ matcher: Bash
477
+ status_message: "โœ… Verifying 0 matches remain after replace..."
478
+
479
+ # โ”€โ”€ board_os Scrumban โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
480
+ - id: validate-task-frontmatter
481
+ script: validate-task-frontmatter.sh
482
+ description: Validates lean frontmatter (swimlane/kind/epic/labels/status/priority/appetite) on task MD writes. Blocks malformed YAML or enum violations.
483
+ category: safety
484
+ phase: L
485
+ timeout: 30
486
+ events:
487
+ - event: PreToolUse
488
+ matcher: Write|Edit
489
+ status_message: "๐Ÿงพ Validating task frontmatter..."
490
+
491
+ - id: enforce-wip-limit
492
+ script: enforce-wip-limit.sh
493
+ description: Enforces WIP caps from scrumban-config.yaml when a task transitions to in_progress/emergency. Bypass via COS_WIP_OVERRIDE=1.
494
+ category: safety
495
+ phase: L
496
+ timeout: 30
497
+ events:
498
+ - event: PreToolUse
499
+ matcher: Write|Edit
500
+ status_message: "๐Ÿšฆ Checking WIP limit before status change..."
501
+
502
+ - id: capture-work-log
503
+ script: capture-work-log.sh
504
+ description: Appends one-line Work Log entry to the active task on code Write/Edit. Fire-and-forget; flock-serialized for multi-agent safety.
505
+ category: observability
506
+ phase: L
507
+ timeout: 10
508
+ events:
509
+ - event: PostToolUse
510
+ matcher: Write|Edit|MultiEdit
511
+ status_message: "๐Ÿ“ Appending Work Log entry..."
512
+
513
+ - id: link-commit-to-task
514
+ script: link-commit-to-task.sh
515
+ description: After a real `git commit`, appends the new HEAD sha + subject to the active task's Work Log so cos_task_history links the code commits, not just commits that touched the task .md. Dedup by sha; fire-and-forget.
516
+ category: observability
517
+ phase: L
518
+ timeout: 10
519
+ events:
520
+ - event: PostToolUse
521
+ matcher: Bash
522
+ status_message: "๐Ÿ”— Linking commit to task..."
523
+
524
+ - id: auto-task-sync
525
+ script: auto-task-sync.sh
526
+ description: Re-syncs single task file into DB cache on Write/Edit. Fire-and-forget; keeps the board fresh within one hook latency.
527
+ category: retrieval
528
+ phase: L
529
+ timeout: 10
530
+ events:
531
+ - event: PostToolUse
532
+ matcher: Write|Edit
533
+ status_message: "โ™ป๏ธ Re-syncing task to DB..."
534
+
535
+ - id: sync-task-current
536
+ script: sync-task-current.sh
537
+ description: |
538
+ PostToolUse fan-out โ€” auto-writes the per-panel .task-current marker
539
+ when a task transitions to in_progress via cos_task_move (MCP) or
540
+ `cos task-start` / `cos task-move --to in_progress` (Bash). Panel-env
541
+ reliable (a hook runs in the session lineage; the MCP server / cos CLI
542
+ subprocess resolve a stale panel). Removes the manual `write-state.sh
543
+ .task-current` step (TASK-059). Fire-and-forget; always exits 0.
544
+ category: task
545
+ phase: L
546
+ timeout: 10
547
+ events:
548
+ - event: PostToolUse
549
+ matcher: mcp__coding-os__cos_task_move
550
+ status_message: "๐Ÿ“Œ Syncing .task-current..."
551
+ - event: PostToolUse
552
+ matcher: Bash
553
+ status_message: "๐Ÿ“Œ Syncing .task-current..."
554
+
555
+ - id: advance-role
556
+ script: advance-role.sh
557
+ description: |
558
+ PostToolUse โ€” advances the active role (.role) along the composed chain
559
+ by work phase: Write/Edit/MultiEdit โ†’ implementer/refactorer/debugger,
560
+ test/verify Bash โ†’ reviewer. Only ever selects a role already IN the
561
+ chain (never invents one). Makes the banner roles= field track what the
562
+ agent is DOING rather than a frozen chain lead (TASK-057 F2.3). Fail-open.
563
+ category: cognition
564
+ phase: L
565
+ timeout: 10
566
+ events:
567
+ - event: PostToolUse
568
+ matcher: Write|Edit|MultiEdit
569
+ - event: PostToolUse
570
+ matcher: Bash
571
+
572
+ - id: check-mcp-extras
573
+ script: check-mcp-extras.sh
574
+ description: SessionStart โ€” verifies global cos binary has required Python extras (graph_os, board_os, rag). If missing, MCP crashes silently and all cos_* tools fail. Emits loud warning with exact fix command before agent uses any MCP tools. Fast (<200ms, no server start). Always non-blocking.
575
+ category: safety
576
+ phase: "0"
577
+ timeout: 30
578
+ events:
579
+ - event: SessionStart
580
+ matcher: startup
581
+ status_message: "๐Ÿ”Œ Checking MCP extras health..."
582
+
583
+ - id: remind-daily
584
+ script: remind-daily.sh
585
+ description: On SessionStart, nags if `cos daily` hasn't run in >24h. Non-blocking banner; ADHD-friendly (no shame).
586
+ category: observability
587
+ phase: L
588
+ timeout: 10
589
+ events:
590
+ - event: SessionStart
591
+ matcher: startup
592
+ status_message: "๐Ÿ—“๏ธ Checking daily check-in recency..."
593
+ - event: SessionStart
594
+ matcher: resume
595
+ status_message: "๐Ÿ—“๏ธ Checking daily check-in recency..."
596
+
597
+ - id: ensure-hub-up
598
+ script: ensure-hub-up.sh
599
+ description: SessionStart โ€” if .coding-os.yaml has hub.enabled (default true), probe http://127.0.0.1:9188 and start `cos hub` in the background when down.
600
+ category: observability
601
+ phase: "0"
602
+ timeout: 30
603
+ events:
604
+ - event: SessionStart
605
+ matcher: startup
606
+ status_message: "๐Ÿ›ฐ๏ธ Ensuring Coding OS Hub is up..."
607
+
608
+ - id: lint-task
609
+ script: lint-task.sh
610
+ description: Rule 15 enforcement. Warns task files >1.5k tokens, blocks >3k.
611
+ category: safety
612
+ phase: L
613
+ timeout: 10
614
+ events:
615
+ - event: PostToolUse
616
+ matcher: Write|Edit
617
+ status_message: "๐Ÿ“ Lint task (Rule 15)..."
618
+
619
+ - id: check-doc-size
620
+ script: check-doc-size.sh
621
+ description: Soft size budget per `layer:` (index/playbook/spec/policy/reference/adr/task). Warn-only โ€” complements lint-task with non-task layers.
622
+ category: reminder
623
+ phase: O
624
+ timeout: 5
625
+ events:
626
+ - event: PostToolUse
627
+ matcher: Write|Edit
628
+ status_message: "๐Ÿ“ Checking doc size budget..."
629
+
630
+ - id: enforce-task-body
631
+ script: enforce-task-body.sh
632
+ description: DoR/DoD validator. Blocks transitions to in_progress/complete when task body fails the kind's rules. SSOT in src/core/board_os/transition-gates.yaml.
633
+ category: enforcement
634
+ phase: L
635
+ timeout: 30
636
+ events:
637
+ - event: PreToolUse
638
+ matcher: Write|Edit
639
+ status_message: "๐Ÿšฆ Validating transition gates (DoR/DoD)..."
640
+
641
+ - id: track-skill
642
+ script: track-skill.sh
643
+ description: Tracks which skills have been invoked this session.
644
+ category: observability
645
+ phase: "0"
646
+ timeout: 5
647
+ events:
648
+ - event: PostToolUse
649
+ matcher: Skill
650
+ status_message: "๐Ÿ› ๏ธ Tracking skill invocation..."
651
+
652
+ - id: pr-reap
653
+ script: pr-reap.sh
654
+ description: "pr-mode only โ€” SessionStart orphan reaper: GC worktrees/branches/PRs of presence-offline sessions; drain the cleanup ledger. Inert in trunk."
655
+ category: safety
656
+ phase: "0"
657
+ timeout: 10
658
+ events:
659
+ - event: SessionStart
660
+ matcher: startup|resume
661
+ status_message: "๐ŸŒณ pr-mode: reaping orphaned worktrees..."
662
+
663
+ - id: session-context
664
+ script: session-context.sh
665
+ description: Loads session context + memory digest on session start / compact / resume.
666
+ category: observability
667
+ phase: "0"
668
+ timeout: 30
669
+ events:
670
+ - event: SessionStart
671
+ matcher: startup
672
+ status_message: "๐Ÿš€ Loading session context + memory digest..."
673
+ - event: SessionStart
674
+ matcher: compact|resume
675
+ status_message: "๐Ÿ”„ Recovering workflow context + memory digest..."
676
+ - event: UserPromptSubmit
677
+ matcher: ""
678
+ status_message: "๐Ÿ”„ Checking workflow state..."
679
+
680
+ - id: session-end
681
+ script: session-end.sh
682
+ description: |
683
+ Stop hook โ€” fires at end-of-turn (NOT end-of-conversation). Claude Code
684
+ emits `Stop` after each agent turn, so the same session_id persists
685
+ across many `session-end` invocations. The hook writes per-turn
686
+ summary + memory enrichment; idempotent UPSERT on session_summaries.
687
+ "session" in the hook name refers to the agent loop session-id, which
688
+ is rotated only on a fresh `SessionStart startup` (see
689
+ session-context.sh for rotation logic).
690
+ category: observability
691
+ phase: "0"
692
+ timeout: 30
693
+ events:
694
+ - event: Stop
695
+ matcher: ""
696
+ status_message: "๐Ÿ“ Writing turn summary + enrichment to memory..."
697
+
698
+ - id: warn-abandoned-task
699
+ script: warn-abandoned-task.sh
700
+ description: |
701
+ Stop hook โ€” warns once per session when a task this session moved
702
+ to in_progress is still in_progress at turn-end. Catches the
703
+ "agent started a task but never moved it to testing/complete"
704
+ abandonment pattern. Fail-open: nudges via Stop additionalContext,
705
+ never blocks. Debounced per session-id via .abandoned-task-warned.
706
+ category: observability
707
+ phase: "0"
708
+ timeout: 5
709
+ events:
710
+ - event: Stop
711
+ matcher: ""
712
+ status_message: "๐Ÿฉน Checking for tasks left in_progress..."
713
+
714
+ - id: nudge-reentry
715
+ script: nudge-reentry.sh
716
+ description: |
717
+ UserPromptSubmit twin of warn-abandoned-task โ€” softly reminds once per
718
+ (session, open-set) when this session holds an in_progress task not bound
719
+ to .task-current. Closes the re-entry blind spot the Stop-time hook cannot
720
+ cover (a turn that never reached Stop, or .task-current drifting from the
721
+ DB โ€” common on Codex, whose MCP task-moves fire no .task-current sync).
722
+ Session-scoped, so a sibling session's WIP never false-triggers. Fail-open:
723
+ nudges via UserPromptSubmit additionalContext, never blocks. Debounced per
724
+ (session, in_progress-set) via .reentry-nudged.
725
+ category: observability
726
+ phase: O
727
+ timeout: 5
728
+ events:
729
+ - event: UserPromptSubmit
730
+ matcher: ""
731
+
732
+ - id: drain-embedding-outbox
733
+ script: drain-embedding-outbox.sh
734
+ description: |
735
+ Stop hook โ€” drains the embedding_outbox (Wave 4) off the interactive
736
+ path. The capture hot-path enqueues instead of embedding (so an Edit is
737
+ never blocked by a model load); this hook embeds the backlog at turn-end.
738
+ Fail-open, never blocks; the helper fast-paths out with zero model load
739
+ when the outbox is empty (the common case).
740
+ category: retrieval
741
+ phase: "0"
742
+ timeout: 60
743
+ events:
744
+ - event: Stop
745
+ matcher: ""
746
+ status_message: "๐Ÿงฎ Draining deferred embeddings..."
747
+
748
+ - id: agent-presence
749
+ script: agent-presence.sh
750
+ description: 'Live per-session presence file (.coding-os/<agent>/sessions/<sid>.json). Powers 3-state active/present/offline on the board โ€” uses PPID + PID liveness so "thinking" agents don''t appear offline between tool calls. Updated 2026-05-04 โ€” also fires on SubagentStart/SubagentStop/PostToolUseFailure so parent-session activity stays accurate while sub-agents work. Updated 2026-05-22 โ€” also fires on PostToolUse Bash so read-only sessions (verify/git/pytest, no Write/Edit) refresh last_tool_at and stay visible past the 300s TTL.'
751
+ category: observability
752
+ phase: "0"
753
+ timeout: 5
754
+ events:
755
+ - event: SessionStart
756
+ matcher: startup
757
+ - event: SessionStart
758
+ matcher: compact|resume
759
+ - event: UserPromptSubmit
760
+ matcher: ""
761
+ - event: PostToolUse
762
+ matcher: Write|Edit
763
+ - event: PostToolUse
764
+ matcher: Bash
765
+ - event: PostToolUseFailure
766
+ matcher: ""
767
+ - event: SubagentStart
768
+ matcher: ""
769
+ - event: SubagentStop
770
+ matcher: ""
771
+ - event: Stop
772
+ matcher: ""
773
+ - event: SessionEnd
774
+ matcher: ""
775
+
776
+ - id: warn-mcp-down
777
+ script: warn-mcp-down.sh
778
+ description: Probes thinking_os MCP liveness at session start; loud banner if unreachable. Capped at 2s probe (perl alarm 2 + 500ms slack).
779
+ category: observability
780
+ phase: F
781
+ timeout: 30
782
+ events:
783
+ - event: SessionStart
784
+ matcher: startup
785
+ status_message: "๐Ÿฉบ Probing MCP coding-os liveness..."
786
+ - event: SessionStart
787
+ matcher: compact|resume
788
+ status_message: "๐Ÿฉบ Probing MCP coding-os liveness..."
789
+
790
+ - id: auto-brain-decay
791
+ script: auto-brain-decay.sh
792
+ description: SessionStart runs Ebbinghaus confidence decay on learned_patterns once per 24 h. Fire-and-forget, bounded at 10s; debounces via $COS_STATE_DIR/.last-decay.
793
+ category: observability
794
+ phase: G
795
+ timeout: 30
796
+ events:
797
+ - event: SessionStart
798
+ matcher: startup
799
+ status_message: "๐Ÿ“‰ Debounced pattern-decay sweep..."
800
+ - event: SessionStart
801
+ matcher: compact|resume
802
+ status_message: "๐Ÿ“‰ Debounced pattern-decay sweep..."
803
+
804
+ - id: reclaim-sweep
805
+ script: reclaim-sweep.sh
806
+ description: SessionStart reclaims zombie in_progress/testing tasks of dead predecessor sessions (board_os.cos_task_reclaim). Consumer-robust recovery leg โ€” needs no SessionEnd event or cron. Fire-and-forget, detached, ~30m debounce via $COS_PANEL_DIR/.reclaim-sweep.
807
+ category: observability
808
+ phase: G
809
+ timeout: 15
810
+ events:
811
+ - event: SessionStart
812
+ matcher: startup
813
+ status_message: "โ™ป๏ธ Reclaiming zombie tasks of dead sessions..."
814
+ - event: SessionStart
815
+ matcher: compact|resume
816
+ status_message: "โ™ป๏ธ Reclaiming zombie tasks of dead sessions..."
817
+
818
+ - id: warn-graph-empty
819
+ script: warn-graph-empty.sh
820
+ description: SessionStart one-shot nudge when graph_os has no indexed nodes. Non-blocking; debounced per session; never auto-indexes.
821
+ category: observability
822
+ phase: I
823
+ timeout: 10
824
+ events:
825
+ - event: SessionStart
826
+ matcher: startup
827
+ status_message: "๐Ÿ•ธ๏ธ Checking graph_os index state..."
828
+ - event: SessionStart
829
+ matcher: compact|resume
830
+ status_message: "๐Ÿ•ธ๏ธ Checking graph_os index state..."
831
+
832
+ - id: check-capture-worked
833
+ script: check-capture-worked.sh
834
+ description: Session-end recap โ€” warns if zero observations captured despite code edits.
835
+ category: observability
836
+ phase: F
837
+ timeout: 10
838
+ events:
839
+ - event: Stop
840
+ matcher: ""
841
+ status_message: "๐Ÿ“Š Session recap: verifying observations captured..."
842
+
843
+ # โ”€โ”€ reminder โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
844
+ - id: regen-reminder
845
+ script: regen-reminder.sh
846
+ description: Reminds to regenerate derived artifacts when their sources change.
847
+ category: reminder
848
+ phase: E
849
+ timeout: 5
850
+ events:
851
+ - event: PostToolUse
852
+ matcher: Write|Edit
853
+ status_message: "๐Ÿ”„ Checking if derived artifacts need regeneration..."
854
+
855
+ - id: test-first-reminder
856
+ script: test-first-reminder.sh
857
+ description: Points at the companion test file after a code edit (or suggests one if absent).
858
+ category: reminder
859
+ phase: E
860
+ timeout: 5
861
+ events:
862
+ - event: PostToolUse
863
+ matcher: Write|Edit
864
+ status_message: "๐Ÿงช Checking for companion test file..."
865
+
866
+ - id: remind-learn-validate
867
+ script: remind-learn-validate.sh
868
+ description: Surfaces cos_learn_validate reminder after task-done so the agent feeds back.
869
+ category: reminder
870
+ phase: F
871
+ timeout: 5
872
+ events:
873
+ - event: PostToolUse
874
+ matcher: Bash
875
+ status_message: "๐Ÿ’ก Checking if learn-validate reminder is due..."
876
+
877
+ - id: nudge-learn-narrative
878
+ script: nudge-learn-narrative.sh
879
+ description: |
880
+ Stop hook โ€” when a session shows real learning signal (a file reworked
881
+ >=3x, or a backtrack), nudges the agent ONCE to record a structured lesson
882
+ via cos_learn_narrative (โ†’ docs/insights + memory). Signal-gated (silent on
883
+ trivial sessions), debounced per session, warn-only, fail-open. The channel
884
+ for deep engineering lessons that friction/commit mining can't capture.
885
+ category: reminder
886
+ phase: "0"
887
+ timeout: 5
888
+ events:
889
+ - event: Stop
890
+ matcher: ""
891
+ status_message: "๐Ÿง  Checking if a lesson is worth recording..."
892
+
893
+ - id: jit-recall
894
+ script: jit-recall.sh
895
+ description: |
896
+ PreToolUse Write|Edit just-in-time recall โ€” surfaces a past friction
897
+ lesson about the file being edited plus any convention-rule one-liner
898
+ mapped to the path in jit-rules.tsv, at the moment it matters. Warn-only,
899
+ debounced per (file, session) / (rule, session).
900
+ category: reminder
901
+ phase: O
902
+ timeout: 5
903
+ events:
904
+ - event: PreToolUse
905
+ matcher: "Write|Edit"
906
+ status_message: "๐Ÿง  Checking for a past lesson on this file..."
907
+
908
+ # โ”€โ”€ meta (coding-os meta-project specific) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
909
+ - id: check-agents-md-size
910
+ script: check-agents-md-size.sh
911
+ description: Warns when AGENTS.md approaches Codex's 32 KiB read cap.
912
+ category: meta
913
+ phase: G
914
+ timeout: 5
915
+ events:
916
+ - event: PostToolUse
917
+ matcher: Write|Edit
918
+ status_message: "๐Ÿ“ Checking AGENTS.md size (Codex 32 KiB cap)..."
919
+
920
+ - id: check-agents-md-refs
921
+ script: check-agents-md-refs.sh
922
+ description: Flags AGENTS.md references to src/core/rules or src/core/skills that no longer exist.
923
+ category: meta
924
+ phase: G
925
+ timeout: 5
926
+ events:
927
+ - event: PostToolUse
928
+ matcher: Write|Edit
929
+ status_message: "๐Ÿ”— Checking AGENTS.md path references are alive..."
930
+
931
+ - id: remind-dogfood
932
+ script: remind-dogfood.sh
933
+ description: Reminds to run `make dogfood-full` after edits to core/ or adapters/.
934
+ category: meta
935
+ phase: G
936
+ timeout: 5
937
+ events:
938
+ - event: PostToolUse
939
+ matcher: Write|Edit
940
+ status_message: "๐Ÿงฌ Checking if meta-project dogfood refresh is needed..."
941
+
942
+ # โ”€โ”€ cognition (formula-agent supervisor) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
943
+ - id: enforce-anti-ambiguity
944
+ script: enforce-anti-ambiguity.sh
945
+ description: Blocks code writes at EXECUTE phase when Anti-Ambiguity gate has failures. Bypassed for CLEAR 1.
946
+ category: cognition
947
+ phase: M
948
+ timeout: 5
949
+ events:
950
+ - event: PreToolUse
951
+ matcher: Write|Edit
952
+ status_message: "๐Ÿ” Anti-Ambiguity gate check..."
953
+
954
+ - id: track-backtrack
955
+ script: track-backtrack.sh
956
+ description: Non-blocking advisor that fires when cos_backtrack_log records โ‰ฅ3 backtracks per session.
957
+ category: cognition
958
+ phase: M
959
+ timeout: 5
960
+ events:
961
+ - event: PostToolUse
962
+ matcher: mcp__coding-os__cos_backtrack_log
963
+ status_message: "โ†ฉ๏ธ Backtrack counter updated..."
964
+
965
+ - id: track-discovery
966
+ script: track-discovery.sh
967
+ description: |
968
+ Discovery Protocol auto-trigger. Scans Write/Edit output for
969
+ discovery signal phrases (new actor, missing dependency,
970
+ undocumented behavior, etc.). On โ‰ฅ2 matches, emits a non-blocking
971
+ reminder to call cos_discovery with impact assessment + decision.
972
+ Reminder cooldown: 5 minutes per session to avoid spam.
973
+ Spec: formulas-en.md ยงNavigation Protocol ยง4 (Discovery Protocol).
974
+ category: cognition
975
+ phase: N
976
+ timeout: 5
977
+ events:
978
+ - event: PostToolUse
979
+ matcher: "Write|Edit"
980
+ status_message: "๐Ÿ” Scanning for discoveries..."
981
+
982
+ - id: capture-tool-failure
983
+ script: capture-tool-failure.sh
984
+ description: |
985
+ Capture meaningful tool failures (especially hook-blocked
986
+ events) to the observations table so they feed failure_pattern_query
987
+ and learn_extract. Only captures blocked events and repeated failures โ€”
988
+ transient Bash errors are skipped to avoid noise. This closes the
989
+ "experience capture" gap: previously the system only learned from
990
+ completed outcomes, not from what failed mid-execution.
991
+ category: observability
992
+ phase: EVO
993
+ timeout: 5
994
+ events:
995
+ - event: PostToolUseFailure
996
+ matcher: ""
997
+
998
+ - id: auto-trace-rotate
999
+ script: auto-trace-rotate.sh
1000
+ description: |
1001
+ Stop hook โ€” rotate trace JSONL. gzip files older than
1002
+ COS_TRACE_GZIP_AGE_DAYS (default 3). Delete (gz or jsonl) older than
1003
+ COS_TRACE_DELETE_AGE_DAYS (default 30). Bounded, fire-and-forget.
1004
+ Closes the unbounded growth gap on .coding-os/<agent>/traces/*.jsonl.
1005
+ category: observability
1006
+ phase: O
1007
+ timeout: 30
1008
+ events:
1009
+ - event: Stop
1010
+ matcher: ""
1011
+ status_message: "๐Ÿงน Rotating old trace files..."
1012
+
1013
+ - id: snapshot-transcript
1014
+ script: snapshot-transcript.sh
1015
+ description: |
1016
+ Stop hook โ€” snapshot the live session transcript (transcript_path from
1017
+ the Stop payload) into $COS_AGENT_DIR/sessions/transcripts/<session-id>.jsonl
1018
+ so a workflow session is auditable in-tree, not only in the agent
1019
+ runtime's global store (~/.claude/projects/...). Copies only when the
1020
+ source grew (Stop fires per turn); fail-open when transcript_path is
1021
+ absent. The taskโ†”session link is the existing tasks.agent_session id.
1022
+ category: observability
1023
+ phase: O
1024
+ timeout: 30
1025
+ events:
1026
+ - event: Stop
1027
+ matcher: ""
1028
+ status_message: "๐Ÿ“‘ Snapshotting session transcript..."
1029
+
1030
+ - id: nudge-thinking-os
1031
+ script: nudge-thinking-os.sh
1032
+ description: |
1033
+ UserPromptSubmit nudge โ€” heuristic Complexity Gate + Rule 18 task reconciliation.
1034
+ Counts signal words (design, architect, debug, investigate, refactor,
1035
+ best way, optimize, etc.) plus length. For COMPLICATED+ emits a
1036
+ stdout additional-context block mandating: (1) cos_task_board check per
1037
+ Rule 18, (2) Complexity Gate recording, (3) thinking_os skill load,
1038
+ (4) cos_compose_chain call. Debounced once per session via
1039
+ .zoom-prompt-suggested marker; skipped if .thinking_os-gate already exists.
1040
+ category: cognition
1041
+ phase: O
1042
+ timeout: 10
1043
+ events:
1044
+ - event: UserPromptSubmit
1045
+ matcher: ""
1046
+
1047
+ - id: auto-compose-roles
1048
+ script: auto-compose-roles.sh
1049
+ description: |
1050
+ UserPromptSubmit auto-trigger โ€” for the recorded complexity gate
1051
+ (COMPLICATED/COMPLEX): (1) composes the 11-role chain via formula_composer
1052
+ and stamps .roles/.role so the Hub Roles panel + session banner reflect
1053
+ real activity; (2) runs learn_suggest and writes .learn-suggestions so the
1054
+ Orient recall arc fires and remind-learn-validate has input to validate.
1055
+ Closes the dead-trigger + dead-recall gaps (TASK-055) where
1056
+ cos_compose_chain / cos_learn_suggest had no automatic caller. Debounced
1057
+ once per (session, gate-class) via .roles-composed. Fail-open.
1058
+ category: cognition
1059
+ phase: O
1060
+ timeout: 10
1061
+ events:
1062
+ - event: UserPromptSubmit
1063
+ matcher: ""
1064
+
1065
+ - id: classify-task-mode
1066
+ script: classify-task-mode.sh
1067
+ description: |
1068
+ UserPromptSubmit โ€” classify the prompt into a persona-aware
1069
+ task-mode and write the verdict to $COS_AGENT_DIR/.task-mode.
1070
+ Modes: formal | propose-formal | query | chore | adhoc |
1071
+ gov-required. Downstream enforcement hooks read the marker so a
1072
+ Q&A turn does not pay the same cost as a multi-file refactor โ€”
1073
+ Rule 18 ("task reconciliation mandatory") is honored without
1074
+ forcing a TASK-NNN onto every analytical question. Decision
1075
+ matrix lives in docs/engineering/task-mode-matrix.md.
1076
+ category: cognition
1077
+ phase: O
1078
+ timeout: 5
1079
+ events:
1080
+ - event: UserPromptSubmit
1081
+ matcher: ""
1082
+
1083
+ - id: nudge-graph-os
1084
+ script: nudge-graph-os.sh
1085
+ description: |
1086
+ UserPromptSubmit nudge โ€” graph_os discovery. Pattern-matches the prompt
1087
+ against 13 structural-question patterns (callers, rename, blast radius,
1088
+ contracts, trace, similar, communities, context, detect-changes,
1089
+ entrypoints, doctor, export, path) โ€” bilingual (EN + Persian) โ€” and
1090
+ emits a one-line additional-context block recommending the exact
1091
+ cos_graph_* tool to call before Read/grep. Closes the dogfood gap
1092
+ where the agent never reaches the graph layer. Debounced per session
1093
+ via .graph-nudge-suggested marker.
1094
+ category: cognition
1095
+ phase: I
1096
+ timeout: 10
1097
+ events:
1098
+ - event: UserPromptSubmit
1099
+ matcher: ""
1100
+
1101
+ - id: nudge-model-routing
1102
+ script: nudge-model-routing.sh
1103
+ description: |
1104
+ UserPromptSubmit nudge โ€” model-routing directive (TASK-319). When
1105
+ hub-settings.json::model_routing.enabled, injects a one-line
1106
+ additional-context directive (once per session) telling the agent to
1107
+ consult cos_route_model at Classify and pass model+complexity at
1108
+ dispatch โ€” CLI/VSCode parity with the hub chat Auto option. Toggle
1109
+ off = silent exit, zero injected tokens. Contract:
1110
+ src/core/rules/model-routing.md.
1111
+ category: cognition
1112
+ phase: I
1113
+ timeout: 10
1114
+ events:
1115
+ - event: UserPromptSubmit
1116
+ matcher: ""
1117
+
1118
+ - id: nudge-git-mode
1119
+ script: nudge-git-mode.sh
1120
+ description: |
1121
+ UserPromptSubmit nudge โ€” pr-mode directive (TASK-615). When
1122
+ COS_GIT_WORKFLOW=pr, injects a one-line additional-context directive
1123
+ (once per session) telling the agent to start with `cos pr open` and
1124
+ edit inside the worktree, so pr-mode is surfaced proactively instead of
1125
+ learned by being block-shared-tree-edit BLOCKed. Trunk (default) =
1126
+ silent exit, zero injected tokens. Contract: docs/playbooks/pr-workflow.md.
1127
+ category: cognition
1128
+ phase: I
1129
+ timeout: 10
1130
+ events:
1131
+ - event: UserPromptSubmit
1132
+ matcher: ""
1133
+
1134
+ - id: nudge-task-discovery
1135
+ script: nudge-task-discovery.sh
1136
+ description: |
1137
+ Task-discovery nudge โ€” three events, all fail-open + debounced per
1138
+ session per leg. UserPromptSubmit: task-reference intent (TASK-NNN,
1139
+ check/show/look-at task; bilingual EN + Persian) โ†’ additionalContext
1140
+ recommending `cos task-show TASK-NNN` / cos_task_search / cos_task_show
1141
+ (MCP) over cat/grep on docs/tasks/. PreToolUse Bash: warns (non-blocking)
1142
+ when a command reads docs/tasks/ directly (ls/grep/cat/find/head/tail/
1143
+ awk/sed/less/more/bat/rg/wc/nl/tac). PreToolUse Read: warns when the Read
1144
+ tool targets a docs/tasks/** path. Closes the screenshot-2 gap. Mirrors
1145
+ nudge-graph-os mechanism.
1146
+ category: cognition
1147
+ phase: O
1148
+ timeout: 10
1149
+ events:
1150
+ - event: UserPromptSubmit
1151
+ matcher: ""
1152
+ - event: PreToolUse
1153
+ matcher: Bash
1154
+ status_message: "๐Ÿ—‚๏ธ Suggesting cos task-show over docs/tasks read..."
1155
+ - event: PreToolUse
1156
+ matcher: Read
1157
+ status_message: "๐Ÿ—‚๏ธ Suggesting cos task-show over a docs/tasks Read..."
1158
+
1159
+ - id: nudge-docs-first
1160
+ script: nudge-docs-first.sh
1161
+ description: |
1162
+ UserPromptSubmit nudge โ€” docs-first SSOT discovery. Pattern-matches
1163
+ the prompt for code-edit intent (refactor, rename, fix, add,
1164
+ implement, change function/endpoint/handler/...; bilingual EN +
1165
+ Persian) AND no .doc-anchor populated AND task-mode not in
1166
+ query/chore/adhoc โ†’ emits a one-line additional-context block
1167
+ pointing to cos_doc_search / cos_doc_header and the procedure in
1168
+ docs/governance/docs-first-protocol.md. Closes the gap where
1169
+ enforce-doc-anchor.sh fires only on Write/Edit, but user intent
1170
+ already signals "code coming" at prompt time. Debounced per session
1171
+ via .docs-first-nudged marker.
1172
+ category: cognition
1173
+ phase: O
1174
+ timeout: 10
1175
+ events:
1176
+ - event: UserPromptSubmit
1177
+ matcher: ""
1178
+
1179
+ - id: session-skill-primer
1180
+ script: session-skill-primer.sh
1181
+ description: |
1182
+ SessionStart prime card โ€” emits a compact additionalContext block
1183
+ listing the skills that enforce-skill.sh (PreToolUse Write/Edit)
1184
+ will BLOCK without. Reads SSOT:
1185
+ $COS_STATE_DIR/installed-manifest.json::templates โ†’ active stacks;
1186
+ src/templates/<stack>/stack.yaml โ†’ primary_skill + skill_enforcement
1187
+ table. Closes the gap where the agent only discovers required
1188
+ skills reactively after the first block. Fires on startup AND on
1189
+ compact|resume โ€” in a multi-hour session a compaction can outlive
1190
+ the 120-min .active-skill marker, so the card must re-prime after
1191
+ context loss (mirrors rules-primer). SessionStart
1192
+ fires once per boundary, so no debounce is needed. Always exits 0.
1193
+ category: cognition
1194
+ phase: P
1195
+ timeout: 10
1196
+ events:
1197
+ - event: SessionStart
1198
+ matcher: startup
1199
+ status_message: "๐Ÿง  Priming required-skill card..."
1200
+ - event: SessionStart
1201
+ matcher: compact|resume
1202
+ status_message: "๐Ÿง  Re-priming required-skill card..."
1203
+
1204
+ - id: rules-primer
1205
+ script: rules-primer.sh
1206
+ description: |
1207
+ SessionStart prime card โ€” injects a ~200-token workflow-integrity card
1208
+ at every session boundary (startup, compact, resume) so the agent enters
1209
+ turn-1 knowing Critical Rule 25: task status changes go through
1210
+ cos_task_move / cos task-done (never a hand-Edit;
1211
+ enforce-task-transition BLOCKs it), task lookup via
1212
+ cos task-show / cos_task_search (never ls/grep on docs/tasks), gate via
1213
+ cos_classify_prompt, and that cos_* tools are deferred (ToolSearch first).
1214
+ Full contract: critical-rules.md ยง Rule 25.
1215
+ Always exits 0.
1216
+ category: cognition
1217
+ phase: P
1218
+ timeout: 10
1219
+ events:
1220
+ - event: SessionStart
1221
+ matcher: startup
1222
+ status_message: "๐Ÿ“‹ Priming workflow-integrity rules card..."
1223
+ - event: SessionStart
1224
+ matcher: compact|resume
1225
+ status_message: "๐Ÿ“‹ Re-priming workflow-integrity rules card..."
1226
+
1227
+ - id: ensure-agent-memory-link
1228
+ script: ensure-agent-memory-link.sh
1229
+ adapter_scope: claude
1230
+ description: |
1231
+ SessionStart โ€” turns the harness's machine-local memory dir
1232
+ (~/.claude/projects/<slug>/memory) into a symlink onto the repo's
1233
+ committed .agents/memory, migrating existing files without clobber.
1234
+ Portable agent memory: a fresh clone reconnects on the first session.
1235
+ Idempotent, self-repairing, fail-open. Spec:
1236
+ docs/engineering/learning-extraction.md ยง Versioned agent memory.
1237
+ category: observability
1238
+ phase: "0"
1239
+ timeout: 10
1240
+ events:
1241
+ - event: SessionStart
1242
+ matcher: startup
1243
+ status_message: "๐Ÿ”— Linking versioned agent memory..."
1244
+ - event: SessionStart
1245
+ matcher: resume
1246
+ status_message: "๐Ÿ”— Re-checking agent memory link..."
1247
+
1248
+ - id: sync-agent-memory
1249
+ script: sync-agent-memory.sh
1250
+ adapter_scope: claude
1251
+ description: |
1252
+ Stop โ€” renders Trusted lessons into .agents/memory/MEMORY.md (generated
1253
+ block, manual notes preserved) and harvests foreign notes back into
1254
+ learned_patterns with a content-hash ledger so exported lessons are
1255
+ never re-imported. Fail-open. Spec:
1256
+ docs/engineering/learning-extraction.md ยง Versioned agent memory.
1257
+ category: observability
1258
+ phase: "0"
1259
+ timeout: 30
1260
+ events:
1261
+ - event: Stop
1262
+ matcher: ""