akm-cli 0.9.0-rc.1 → 0.9.0-rc.13

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 (587) hide show
  1. package/CHANGELOG.md +1190 -52
  2. package/README.md +62 -37
  3. package/SECURITY.md +46 -31
  4. package/dist/akm +162 -38
  5. package/dist/akm-migrate +44 -0
  6. package/dist/assets/backends/schtasks-template.xml +2 -1
  7. package/dist/assets/hints/cli-hints-full.md +268 -118
  8. package/dist/assets/hints/cli-hints-short.md +87 -24
  9. package/dist/assets/{profiles → improve-strategies}/catchup.json +3 -1
  10. package/dist/assets/{profiles → improve-strategies}/consolidate.json +3 -1
  11. package/dist/assets/{profiles → improve-strategies}/default.json +6 -7
  12. package/dist/assets/improve-strategies/frequent.json +15 -0
  13. package/dist/assets/{profiles → improve-strategies}/graph-refresh.json +4 -2
  14. package/dist/assets/{profiles → improve-strategies}/memory-focus.json +4 -1
  15. package/dist/assets/{profiles → improve-strategies}/proactive-maintenance.json +5 -5
  16. package/dist/assets/{profiles → improve-strategies}/quick.json +4 -2
  17. package/dist/assets/improve-strategies/reflect-distill.json +30 -0
  18. package/dist/assets/{profiles → improve-strategies}/thorough.json +1 -1
  19. package/dist/assets/prompts/consolidate-system.md +5 -5
  20. package/dist/assets/prompts/extract-session.md +2 -6
  21. package/dist/assets/prompts/memory-infer-user.md +2 -3
  22. package/dist/assets/prompts/reflect-llm-framed-contract.md +11 -0
  23. package/dist/assets/prompts/reflect-llm-schema-contract.md +3 -0
  24. package/dist/assets/prompts/reflect-output-repair.md +3 -0
  25. package/dist/assets/stash-skeleton/README.md +38 -10
  26. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  38. package/dist/assets/tasks/core/extract.yml +3 -2
  39. package/dist/assets/tasks/core/improve.yml +2 -1
  40. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  41. package/dist/assets/tasks/core/sync.yml +1 -0
  42. package/dist/assets/tasks/core/version-check.yml +2 -1
  43. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  44. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  45. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  46. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  48. package/dist/assets/templates/html/health.html +5 -4
  49. package/dist/assets/workflows/workflow-template.md +31 -15
  50. package/dist/cli/invocation.js +279 -0
  51. package/dist/cli/parse-args.js +5 -90
  52. package/dist/cli/retired-commands.js +78 -0
  53. package/dist/cli/shared.js +158 -48
  54. package/dist/cli-node.mjs +2 -1
  55. package/dist/cli.js +747 -293
  56. package/dist/commands/agent/agent-dispatch.js +19 -18
  57. package/dist/commands/agent/agent-support.js +0 -24
  58. package/dist/commands/agent/contribute-cli.js +43 -97
  59. package/dist/commands/completions.js +80 -23
  60. package/dist/commands/config-cli.js +44 -281
  61. package/dist/commands/env/env-binding.js +13 -9
  62. package/dist/commands/env/env-cli.js +76 -159
  63. package/dist/commands/env/env.js +12 -163
  64. package/dist/commands/env/marker-path.js +6 -0
  65. package/dist/commands/env/secret-cli.js +45 -61
  66. package/dist/commands/env/secret.js +32 -62
  67. package/dist/commands/feedback-cli.js +179 -85
  68. package/dist/commands/health/accept-rate.js +58 -0
  69. package/dist/commands/health/advisories.js +7 -8
  70. package/dist/commands/health/checks.js +279 -94
  71. package/dist/commands/health/html-report.js +197 -578
  72. package/dist/commands/health/improve-metrics.js +277 -246
  73. package/dist/commands/health/llm-usage.js +19 -19
  74. package/dist/commands/health/md-report.js +16 -7
  75. package/dist/commands/health/metrics.js +67 -32
  76. package/dist/commands/health/renderers.js +47 -0
  77. package/dist/commands/health/report-view-model.js +508 -0
  78. package/dist/commands/health/stash-exposure.js +1 -1
  79. package/dist/commands/health/surfaces.js +16 -56
  80. package/dist/commands/health/task-runs.js +3 -67
  81. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  82. package/dist/commands/health/types-improve.js +29 -0
  83. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  84. package/dist/commands/health/types-result.js +7 -0
  85. package/dist/commands/health/types-runs.js +4 -0
  86. package/dist/commands/health/types-session-log.js +4 -0
  87. package/dist/commands/health/types-windows.js +4 -0
  88. package/dist/commands/health/types.js +26 -21
  89. package/dist/commands/health/windows.js +2 -3
  90. package/dist/commands/health.js +296 -167
  91. package/dist/commands/improve/anti-collapse.js +5 -5
  92. package/dist/commands/improve/autonomy-gate.js +68 -0
  93. package/dist/commands/improve/collapse-detector.js +65 -52
  94. package/dist/commands/improve/consolidate/chunking.js +9 -7
  95. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  96. package/dist/commands/improve/consolidate/merge.js +4 -0
  97. package/dist/commands/improve/consolidate.js +454 -1354
  98. package/dist/commands/improve/content-hash.js +39 -0
  99. package/dist/commands/improve/distill/content-repair.js +4 -10
  100. package/dist/commands/improve/distill/promote-memory.js +89 -64
  101. package/dist/commands/improve/distill/quality-gate.js +118 -42
  102. package/dist/commands/improve/distill-guards.js +1 -1
  103. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  104. package/dist/commands/improve/distill.js +607 -363
  105. package/dist/commands/improve/eligibility.js +165 -79
  106. package/dist/commands/improve/extract-cli.js +35 -126
  107. package/dist/commands/improve/extract-prompt.js +6 -35
  108. package/dist/commands/improve/extract.js +640 -391
  109. package/dist/commands/improve/feedback-valence.js +2 -12
  110. package/dist/commands/improve/improve-cli.js +134 -135
  111. package/dist/commands/improve/improve-result-file.js +30 -50
  112. package/dist/commands/improve/improve-run-types.js +4 -0
  113. package/dist/commands/improve/improve-strategies.js +135 -0
  114. package/dist/commands/improve/improve.js +904 -701
  115. package/dist/commands/improve/locks.js +64 -111
  116. package/dist/commands/improve/loop-stages.js +1110 -923
  117. package/dist/commands/improve/memory/derived-ref.js +124 -0
  118. package/dist/commands/improve/memory/memory-belief.js +79 -7
  119. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  120. package/dist/commands/improve/memory/memory-improve.js +25 -37
  121. package/dist/commands/improve/outcome-loop.js +25 -88
  122. package/dist/commands/improve/preparation.js +1034 -813
  123. package/dist/commands/improve/proactive-maintenance.js +34 -9
  124. package/dist/commands/improve/proposal-envelope.js +31 -0
  125. package/dist/commands/improve/reflect.js +983 -794
  126. package/dist/commands/improve/run-context.js +119 -0
  127. package/dist/commands/improve/salience.js +24 -127
  128. package/dist/commands/improve/session-asset.js +7 -3
  129. package/dist/commands/improve/shared.js +14 -34
  130. package/dist/commands/improve/source-identity.js +28 -0
  131. package/dist/commands/improve/triage.js +20 -17
  132. package/dist/commands/lint/base-linter.js +340 -313
  133. package/dist/commands/lint/env-key-rules.js +31 -47
  134. package/dist/commands/lint/index.js +185 -30
  135. package/dist/commands/{events.js → log.js} +28 -38
  136. package/dist/commands/migrate-cli.js +54 -0
  137. package/dist/commands/migration-tool.js +55 -0
  138. package/dist/commands/observability-cli.js +70 -208
  139. package/dist/commands/proposal/diff-format.js +50 -0
  140. package/dist/commands/proposal/drain-policies.js +0 -6
  141. package/dist/commands/proposal/drain.js +91 -40
  142. package/dist/commands/proposal/proposal-cli.js +134 -132
  143. package/dist/commands/proposal/proposal-types.js +56 -0
  144. package/dist/commands/proposal/proposal.js +83 -65
  145. package/dist/commands/proposal/propose-cli.js +88 -0
  146. package/dist/commands/proposal/propose.js +105 -88
  147. package/dist/commands/proposal/repository.js +1303 -278
  148. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  149. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  150. package/dist/commands/proposal/validators/proposals.js +6 -8
  151. package/dist/commands/read/curate.js +78 -73
  152. package/dist/commands/read/knowledge.js +510 -13
  153. package/dist/commands/read/registry-search.js +2 -2
  154. package/dist/commands/read/remember-cli.js +84 -15
  155. package/dist/commands/read/search-cli.js +203 -96
  156. package/dist/commands/read/search.js +126 -94
  157. package/dist/commands/read/show.js +226 -250
  158. package/dist/commands/registry-cli.js +34 -60
  159. package/dist/commands/remember.js +18 -57
  160. package/dist/commands/sources/add-cli.js +104 -49
  161. package/dist/commands/sources/bundle-cli.js +166 -0
  162. package/dist/commands/sources/bundle-config-ops.js +63 -0
  163. package/dist/commands/sources/info.js +27 -15
  164. package/dist/commands/sources/init.js +30 -40
  165. package/dist/commands/sources/installed-stashes.js +469 -172
  166. package/dist/commands/sources/schema-repair.js +10 -9
  167. package/dist/commands/sources/self-update.js +182 -121
  168. package/dist/commands/sources/source-add.js +169 -178
  169. package/dist/commands/sources/source-clone.js +144 -41
  170. package/dist/commands/sources/source-manage.js +94 -59
  171. package/dist/commands/sources/sources-cli.js +64 -205
  172. package/dist/commands/sources/stash-cli.js +91 -54
  173. package/dist/commands/sources/stash-skeleton.js +1 -1
  174. package/dist/commands/tasks/tasks-cli.js +106 -104
  175. package/dist/commands/tasks/tasks.js +445 -262
  176. package/dist/commands/workflow-cli.js +75 -228
  177. package/dist/core/action-contributors.js +1 -1
  178. package/dist/core/activation-policy.js +49 -0
  179. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  180. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  181. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  182. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  183. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  184. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  185. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  186. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  187. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  188. package/dist/core/adapter/adapters/index.js +80 -0
  189. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  190. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  191. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  192. package/dist/core/adapter/adapters/shared.js +286 -0
  193. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  194. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  195. package/dist/core/adapter/bundle-adapter.js +4 -0
  196. package/dist/core/adapter/detect-adapter.js +17 -0
  197. package/dist/core/adapter/recognize-match.js +44 -0
  198. package/dist/core/adapter/registry.js +56 -0
  199. package/dist/core/adapter/types.js +4 -0
  200. package/dist/core/asset/akm-markdown.js +30 -0
  201. package/dist/core/asset/asset-placement.js +243 -0
  202. package/dist/core/asset/asset-ref.js +110 -79
  203. package/dist/core/asset/asset-serialize.js +20 -0
  204. package/dist/core/asset/frontmatter.js +28 -12
  205. package/dist/core/asset/markdown.js +40 -51
  206. package/dist/core/asset/resolve-ref.js +274 -0
  207. package/dist/core/asset/stash-meta.js +2 -2
  208. package/dist/core/bundle-id.js +51 -0
  209. package/dist/core/common.js +281 -86
  210. package/dist/core/config/config-io.js +42 -128
  211. package/dist/core/config/config-schema.js +233 -855
  212. package/dist/core/config/config-sources.js +162 -39
  213. package/dist/core/config/config-types.js +16 -11
  214. package/dist/core/config/config-version.js +29 -0
  215. package/dist/core/config/config-walker.js +126 -37
  216. package/dist/core/config/config.js +154 -331
  217. package/dist/core/config/deep-merge.js +41 -0
  218. package/dist/core/config/engine-semantics.js +28 -0
  219. package/dist/core/config/experimental.js +21 -0
  220. package/dist/core/config/schema/embedding.js +38 -0
  221. package/dist/core/config/schema/engines.js +116 -0
  222. package/dist/core/config/schema/experimental.js +47 -0
  223. package/dist/core/config/schema/feedback.js +31 -0
  224. package/dist/core/config/schema/improve-processes.js +389 -0
  225. package/dist/core/config/schema/improve.js +94 -0
  226. package/dist/core/config/schema/index-config.js +176 -0
  227. package/dist/core/config/schema/output.js +18 -0
  228. package/dist/core/config/schema/primitives.js +94 -0
  229. package/dist/core/config/schema/search.js +30 -0
  230. package/dist/core/config/schema/setup.js +18 -0
  231. package/dist/core/config/schema/sources-bundles.js +169 -0
  232. package/dist/core/config/schema/workflow.js +29 -0
  233. package/dist/core/env-secret-ref.js +155 -20
  234. package/dist/core/errors.js +17 -15
  235. package/dist/core/events-types.js +4 -0
  236. package/dist/core/events.js +46 -128
  237. package/dist/core/extra-params.js +62 -0
  238. package/dist/core/file-change.js +17 -0
  239. package/dist/core/file-lock.js +202 -57
  240. package/dist/core/fs-txn.js +392 -0
  241. package/dist/core/git-message.js +59 -0
  242. package/dist/core/improve-result.js +167 -0
  243. package/dist/core/lesson-lint.js +1 -17
  244. package/dist/core/logs-db.js +1 -1
  245. package/dist/core/maintenance-barrier.js +135 -0
  246. package/dist/core/migration-operation.js +44 -0
  247. package/dist/core/mutation-target.js +78 -0
  248. package/dist/core/paths.js +22 -25
  249. package/dist/core/platform.js +10 -0
  250. package/dist/core/recognition-util.js +128 -0
  251. package/dist/core/redaction.js +392 -0
  252. package/dist/core/standards/resolve-standards-context.js +36 -65
  253. package/dist/core/standards/resolve-stash-standards.js +2 -2
  254. package/dist/core/standards/resolve-type-conventions.js +5 -5
  255. package/dist/core/state/migrations.js +242 -11
  256. package/dist/core/state-db.js +98 -10
  257. package/dist/core/structured.js +1 -1
  258. package/dist/core/subprocess.js +303 -0
  259. package/dist/core/text-truncation.js +9 -5
  260. package/dist/core/time.js +20 -0
  261. package/dist/core/type-presentation.js +130 -0
  262. package/dist/core/warn.js +0 -3
  263. package/dist/core/write-source.js +834 -118
  264. package/dist/indexer/bundle-identity-guard.js +92 -0
  265. package/dist/indexer/db/graph-db.js +1 -25
  266. package/dist/indexer/db/llm-cache.js +1 -1
  267. package/dist/indexer/ensure-index.js +30 -9
  268. package/dist/indexer/graph/graph-boost.js +9 -30
  269. package/dist/indexer/graph/graph-extraction.js +41 -27
  270. package/dist/indexer/graph/graph-types.js +4 -0
  271. package/dist/indexer/index-writer-lock.js +93 -49
  272. package/dist/indexer/index-written-assets.js +100 -53
  273. package/dist/indexer/indexer.js +746 -329
  274. package/dist/indexer/init.js +18 -25
  275. package/dist/indexer/installations.js +142 -0
  276. package/dist/indexer/passes/dir-staleness.js +18 -10
  277. package/dist/indexer/passes/memory-inference.js +25 -15
  278. package/dist/indexer/passes/metadata.js +412 -243
  279. package/dist/indexer/scan/doc-to-entry.js +160 -0
  280. package/dist/indexer/scan/drain-dir.js +134 -0
  281. package/dist/indexer/search/db-search.js +292 -108
  282. package/dist/indexer/search/fts-query.js +64 -0
  283. package/dist/indexer/search/ranking-contributors.js +145 -25
  284. package/dist/indexer/search/ranking-types.js +4 -0
  285. package/dist/indexer/search/ranking.js +28 -71
  286. package/dist/indexer/search/search-attribution.js +67 -0
  287. package/dist/indexer/search/search-fields.js +18 -3
  288. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  289. package/dist/indexer/search/search-source.js +157 -111
  290. package/dist/indexer/search/semantic-status.js +4 -1
  291. package/dist/indexer/usage/usage-events.js +10 -30
  292. package/dist/indexer/walk/file-context.js +3 -45
  293. package/dist/indexer/walk/matchers.js +42 -73
  294. package/dist/indexer/walk/path-resolver.js +11 -5
  295. package/dist/indexer/walk/walker.js +42 -14
  296. package/dist/integrations/agent/builder-shared.js +7 -0
  297. package/dist/integrations/agent/builders.js +5 -58
  298. package/dist/integrations/agent/config.js +3 -143
  299. package/dist/integrations/agent/detect.js +17 -2
  300. package/dist/integrations/agent/engine-resolution.js +231 -0
  301. package/dist/integrations/agent/index.js +1 -2
  302. package/dist/integrations/agent/model-aliases.js +8 -3
  303. package/dist/integrations/agent/profiles.js +6 -99
  304. package/dist/integrations/agent/prompts.js +46 -18
  305. package/dist/integrations/agent/runner-dispatch.js +78 -13
  306. package/dist/integrations/agent/runner.js +76 -208
  307. package/dist/integrations/agent/spawn.js +48 -279
  308. package/dist/integrations/harnesses/aider/agent-builder.js +9 -8
  309. package/dist/integrations/harnesses/aider/index.js +2 -12
  310. package/dist/integrations/harnesses/amazonq/agent-builder.js +10 -16
  311. package/dist/integrations/harnesses/amazonq/index.js +3 -17
  312. package/dist/integrations/harnesses/claude/agent-builder.js +2 -3
  313. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  314. package/dist/integrations/harnesses/claude/index.js +1 -14
  315. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  316. package/dist/integrations/harnesses/codex/agent-builder.js +8 -7
  317. package/dist/integrations/harnesses/codex/index.js +2 -13
  318. package/dist/integrations/harnesses/copilot/agent-builder.js +9 -9
  319. package/dist/integrations/harnesses/copilot/index.js +1 -13
  320. package/dist/integrations/harnesses/gemini/agent-builder.js +8 -9
  321. package/dist/integrations/harnesses/gemini/index.js +1 -13
  322. package/dist/integrations/harnesses/ids.js +24 -0
  323. package/dist/integrations/harnesses/index.js +31 -33
  324. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  325. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  326. package/dist/integrations/harnesses/opencode/index.js +1 -18
  327. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  328. package/dist/integrations/harnesses/opencode-sdk/harness.js +3 -17
  329. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +274 -191
  330. package/dist/integrations/harnesses/openhands/agent-builder.js +12 -10
  331. package/dist/integrations/harnesses/openhands/index.js +2 -12
  332. package/dist/integrations/harnesses/pi/agent-builder.js +11 -18
  333. package/dist/integrations/harnesses/pi/index.js +3 -16
  334. package/dist/integrations/harnesses/shared.js +17 -0
  335. package/dist/integrations/harnesses/types.js +38 -34
  336. package/dist/integrations/lockfile.js +211 -24
  337. package/dist/integrations/session-logs/index.js +24 -40
  338. package/dist/integrations/session-logs/provider-base.js +113 -0
  339. package/dist/llm/client.js +182 -110
  340. package/dist/llm/embedders/deterministic.js +2 -2
  341. package/dist/llm/embedders/remote.js +21 -9
  342. package/dist/llm/feature-gate.js +17 -57
  343. package/dist/llm/graph-extract.js +12 -13
  344. package/dist/llm/index-passes.js +8 -42
  345. package/dist/llm/memory-infer.js +144 -1
  346. package/dist/llm/metadata-enhance.js +45 -30
  347. package/dist/llm/structured-call.js +16 -8
  348. package/dist/llm/usage-persist.js +30 -5
  349. package/dist/llm/usage-telemetry.js +59 -6
  350. package/dist/output/cli-hints.js +1 -2
  351. package/dist/output/command-registry.js +27 -0
  352. package/dist/output/context.js +22 -7
  353. package/dist/output/format-exempt.js +80 -0
  354. package/dist/output/generic-render.js +251 -0
  355. package/dist/output/html-render.js +11 -16
  356. package/dist/output/render-registry.js +57 -0
  357. package/dist/output/renderers.js +15 -281
  358. package/dist/output/shapes/curate.js +10 -1
  359. package/dist/output/shapes/events.js +12 -7
  360. package/dist/output/shapes/helpers.js +58 -84
  361. package/dist/output/shapes/passthrough.js +8 -40
  362. package/dist/output/shapes/proposal/producer.js +15 -7
  363. package/dist/output/shapes/registry.js +12 -6
  364. package/dist/output/shapes.js +0 -9
  365. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  366. package/dist/output/text/bundle-show.js +7 -0
  367. package/dist/output/text/command-format.js +562 -0
  368. package/dist/output/text/env.js +1 -3
  369. package/dist/output/text/events.js +8 -7
  370. package/dist/output/text/helpers.js +15 -1375
  371. package/dist/output/text/proposal/producer.js +4 -2
  372. package/dist/output/text/proposal-format.js +202 -0
  373. package/dist/output/text/registry-commands.js +1 -2
  374. package/dist/output/text/registry.js +12 -6
  375. package/dist/output/text/show-directives.js +117 -0
  376. package/dist/output/text/show-format.js +103 -0
  377. package/dist/output/text/sync.js +5 -0
  378. package/dist/output/text/workflow-format.js +332 -0
  379. package/dist/output/text/workflow.js +1 -2
  380. package/dist/output/text.js +10 -19
  381. package/dist/registry/factory.js +4 -6
  382. package/dist/registry/origin-resolve.js +16 -27
  383. package/dist/registry/providers/skills-sh.js +3 -3
  384. package/dist/registry/providers/static-index.js +15 -25
  385. package/dist/registry/resolve.js +43 -94
  386. package/dist/registry/semver.js +43 -0
  387. package/dist/runtime.js +81 -12
  388. package/dist/scripts/akm-migrate.js +35529 -0
  389. package/dist/setup/detect.js +5 -7
  390. package/dist/setup/detected-engines.js +136 -0
  391. package/dist/setup/engine-config.js +100 -0
  392. package/dist/setup/registry-stash-loader.js +3 -3
  393. package/dist/setup/semantic-assets.js +12 -9
  394. package/dist/setup/setup.js +444 -208
  395. package/dist/setup/steps/connection-shared.js +120 -0
  396. package/dist/setup/steps/connection.js +108 -305
  397. package/dist/setup/steps/platforms.js +13 -12
  398. package/dist/setup/steps/semantic.js +15 -3
  399. package/dist/setup/steps/sources.js +21 -15
  400. package/dist/setup/steps/stashdir.js +6 -4
  401. package/dist/setup/steps/tasks.js +236 -119
  402. package/dist/setup/steps.js +3 -2
  403. package/dist/sources/freshness.js +39 -0
  404. package/dist/sources/provider-factory.js +11 -17
  405. package/dist/sources/providers/filesystem.js +2 -3
  406. package/dist/sources/providers/git-install.js +278 -34
  407. package/dist/sources/providers/git-provider.js +54 -56
  408. package/dist/sources/providers/git-stash.js +420 -91
  409. package/dist/sources/providers/git.js +2 -2
  410. package/dist/sources/providers/npm.js +16 -19
  411. package/dist/sources/providers/provider-utils.js +47 -22
  412. package/dist/sources/providers/sync-from-ref.js +3 -9
  413. package/dist/sources/providers/website.js +2 -2
  414. package/dist/sources/resolve.js +11 -10
  415. package/dist/sources/snapshot-fetchers/types.js +4 -0
  416. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  417. package/dist/storage/database.js +60 -4
  418. package/dist/storage/engines/sqlite-migrations.js +156 -5
  419. package/dist/storage/locations.js +1 -2
  420. package/dist/storage/repositories/canaries-repository.js +1 -1
  421. package/dist/storage/repositories/events-repository.js +51 -11
  422. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  423. package/dist/storage/repositories/index-connection.js +79 -0
  424. package/dist/storage/repositories/index-db.js +4 -3
  425. package/dist/storage/repositories/index-entries-repository.js +863 -0
  426. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  427. package/dist/storage/repositories/index-entry-types.js +4 -0
  428. package/dist/storage/repositories/index-fts-repository.js +167 -0
  429. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  430. package/dist/storage/repositories/index-meta-repository.js +49 -0
  431. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  432. package/dist/storage/repositories/index-sql.js +12 -0
  433. package/dist/storage/repositories/index-utility-repository.js +356 -0
  434. package/dist/storage/repositories/index-vec-repository.js +250 -0
  435. package/dist/storage/repositories/outcome-repository.js +119 -0
  436. package/dist/storage/repositories/proposals-repository.js +317 -75
  437. package/dist/storage/repositories/registry-cache.js +1 -1
  438. package/dist/storage/repositories/salience-repository.js +172 -0
  439. package/dist/storage/repositories/task-history-repository.js +110 -3
  440. package/dist/storage/repositories/workflow-runs-repository.js +68 -35
  441. package/dist/tasks/backends/cron.js +169 -46
  442. package/dist/tasks/backends/exec-utils.js +76 -3
  443. package/dist/tasks/backends/index.js +6 -9
  444. package/dist/tasks/backends/launchd.js +292 -55
  445. package/dist/tasks/backends/schtasks.js +557 -70
  446. package/dist/tasks/backends/types.js +4 -0
  447. package/dist/tasks/command-executable.js +93 -0
  448. package/dist/tasks/embedded.js +56 -38
  449. package/dist/tasks/parser.js +156 -64
  450. package/dist/tasks/resolve-akm-bin.js +144 -51
  451. package/dist/tasks/runner.js +377 -209
  452. package/dist/tasks/schedule.js +108 -19
  453. package/dist/tasks/scheduler-invocation.js +296 -0
  454. package/dist/tasks/schema.js +1 -1
  455. package/dist/tasks/task-id.js +35 -0
  456. package/dist/tasks/validator.js +30 -16
  457. package/dist/workflows/authoring/authoring.js +96 -148
  458. package/dist/workflows/authoring/scope-key.js +1 -1
  459. package/dist/workflows/cli.js +0 -20
  460. package/dist/workflows/concurrency-policy.js +15 -0
  461. package/dist/workflows/exec/brief.js +25 -59
  462. package/dist/workflows/exec/frozen-judge.js +47 -0
  463. package/dist/workflows/exec/native-executor.js +157 -94
  464. package/dist/workflows/exec/report.js +365 -200
  465. package/dist/workflows/exec/run-workflow.js +46 -40
  466. package/dist/workflows/exec/scheduler.js +12 -41
  467. package/dist/workflows/exec/step-work.js +239 -205
  468. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  469. package/dist/workflows/ir/compile.js +141 -283
  470. package/dist/workflows/ir/freeze.js +233 -0
  471. package/dist/workflows/ir/plan-hash.js +40 -5
  472. package/dist/workflows/ir/schema.js +537 -1
  473. package/dist/workflows/parser.js +878 -306
  474. package/dist/workflows/program/expressions.js +20 -208
  475. package/dist/workflows/program/schema.js +7 -10
  476. package/dist/workflows/renderer.js +99 -121
  477. package/dist/workflows/resource-limits.js +22 -0
  478. package/dist/workflows/runtime/checkin.js +1 -1
  479. package/dist/workflows/runtime/plan-classifier.js +131 -0
  480. package/dist/workflows/runtime/runs.js +200 -113
  481. package/dist/workflows/runtime/unit-checkin.js +1 -1
  482. package/dist/workflows/runtime/unit-phases.js +20 -0
  483. package/dist/workflows/runtime/workflow-asset-loader.js +235 -97
  484. package/dist/workflows/schema.js +1 -11
  485. package/dist/workflows/validate-summary.js +4 -26
  486. package/dist/workflows/validator.js +52 -30
  487. package/docs/README.md +42 -78
  488. package/docs/migration/README.md +8 -0
  489. package/docs/migration/release-notes/0.6.0.md +1 -1
  490. package/docs/migration/release-notes/0.7.0.md +9 -8
  491. package/docs/migration/release-notes/0.9.0.md +158 -14
  492. package/docs/migration/v0.7-to-v0.8.md +46 -47
  493. package/docs/migration/v0.8-to-v0.9.md +844 -0
  494. package/docs/reference/README.md +12 -0
  495. package/docs/reference/data-and-telemetry.md +333 -0
  496. package/package.json +21 -17
  497. package/schemas/akm-asset-envelope.json +93 -0
  498. package/schemas/akm-config.json +4636 -0
  499. package/schemas/akm-task.json +87 -0
  500. package/{dist/schemas → schemas}/akm-workflow.json +127 -82
  501. package/dist/akm-migrate-storage +0 -38
  502. package/dist/assets/help/help-accept.md +0 -12
  503. package/dist/assets/help/help-improve.md +0 -84
  504. package/dist/assets/help/help-proposals.md +0 -17
  505. package/dist/assets/help/help-propose.md +0 -17
  506. package/dist/assets/help/help-reject.md +0 -11
  507. package/dist/assets/profiles/frequent.json +0 -13
  508. package/dist/assets/profiles/recombine-only.json +0 -21
  509. package/dist/assets/profiles/reflect-distill.json +0 -30
  510. package/dist/assets/profiles/synthesize.json +0 -15
  511. package/dist/assets/prompts/procedural-system.md +0 -44
  512. package/dist/assets/prompts/recombine-system.md +0 -40
  513. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  514. package/dist/assets/tasks/core/backup.yml +0 -4
  515. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  516. package/dist/assets/templates/html/default.html +0 -78
  517. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  518. package/dist/assets/wiki/index-template.md +0 -12
  519. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  520. package/dist/assets/wiki/log-template.md +0 -8
  521. package/dist/assets/wiki/schema-template.md +0 -61
  522. package/dist/cli/config-migrate.js +0 -150
  523. package/dist/cli/config-validate.js +0 -39
  524. package/dist/commands/graph/graph-cli.js +0 -124
  525. package/dist/commands/graph/graph.js +0 -487
  526. package/dist/commands/improve/calibration.js +0 -161
  527. package/dist/commands/improve/dedup.js +0 -482
  528. package/dist/commands/improve/extract-watch.js +0 -140
  529. package/dist/commands/improve/hot-probation.js +0 -45
  530. package/dist/commands/improve/improve-auto-accept.js +0 -276
  531. package/dist/commands/improve/improve-profiles.js +0 -168
  532. package/dist/commands/improve/procedural.js +0 -398
  533. package/dist/commands/improve/recombine.js +0 -818
  534. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  535. package/dist/commands/lint/agent-linter.js +0 -44
  536. package/dist/commands/lint/command-linter.js +0 -44
  537. package/dist/commands/lint/default-linter.js +0 -16
  538. package/dist/commands/lint/fact-linter.js +0 -39
  539. package/dist/commands/lint/knowledge-linter.js +0 -16
  540. package/dist/commands/lint/memory-linter.js +0 -61
  541. package/dist/commands/lint/registry.js +0 -41
  542. package/dist/commands/lint/skill-linter.js +0 -45
  543. package/dist/commands/lint/task-linter.js +0 -50
  544. package/dist/commands/lint/workflow-linter.js +0 -81
  545. package/dist/commands/proposal/legacy-import.js +0 -115
  546. package/dist/commands/sources/history.js +0 -196
  547. package/dist/commands/tasks/default-tasks.js +0 -186
  548. package/dist/commands/wiki-cli.js +0 -292
  549. package/dist/core/asset/asset-registry.js +0 -76
  550. package/dist/core/asset/asset-spec.js +0 -316
  551. package/dist/core/config/config-migration.js +0 -602
  552. package/dist/core/deep-merge.js +0 -38
  553. package/dist/core/eval/rank-metrics.js +0 -113
  554. package/dist/core/ripgrep/install.js +0 -163
  555. package/dist/core/ripgrep/resolve.js +0 -81
  556. package/dist/indexer/db/db.js +0 -1414
  557. package/dist/indexer/manifest.js +0 -170
  558. package/dist/indexer/passes/metadata-contributors.js +0 -31
  559. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  560. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -25
  561. package/dist/llm/call-ai.js +0 -62
  562. package/dist/llm/memory-infer-impl.js +0 -138
  563. package/dist/output/shapes/distill.js +0 -14
  564. package/dist/output/shapes/history.js +0 -11
  565. package/dist/output/text/distill.js +0 -6
  566. package/dist/output/text/enable-disable.js +0 -8
  567. package/dist/output/text/history.js +0 -6
  568. package/dist/output/text/wiki.js +0 -16
  569. package/dist/registry/build-index.js +0 -386
  570. package/dist/schemas/akm-config.json +0 -14225
  571. package/dist/scripts/migrate-storage.js +0 -13169
  572. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -10169
  573. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  574. package/dist/setup/legacy-config.js +0 -106
  575. package/dist/storage/repositories/consolidation-repository.js +0 -38
  576. package/dist/storage/repositories/recombine-repository.js +0 -213
  577. package/dist/wiki/wiki-templates.js +0 -15
  578. package/dist/wiki/wiki.js +0 -1012
  579. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  580. package/dist/workflows/db.js +0 -350
  581. package/dist/workflows/exec/watch.js +0 -116
  582. package/dist/workflows/program/parser.js +0 -760
  583. package/dist/workflows/program/project.js +0 -105
  584. package/docs/data-and-telemetry.md +0 -227
  585. package/docs/migration/release-notes/0.9.0-beta.60.md +0 -19
  586. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  587. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -1,6 +1,6 @@
1
1
  # akm CLI
2
2
 
3
- You have access to a searchable library of scripts, skills, commands, agents, knowledge documents, workflows, wikis, and memories via `akm`. Search your sources first before writing something from scratch.
3
+ You have access to a searchable library of scripts, skills, commands, agents, knowledge documents, workflows, env files, secrets, lessons, and memories via `akm`. Search your sources first before writing something from scratch.
4
4
 
5
5
  ## Agent Task Loop
6
6
 
@@ -8,15 +8,15 @@ For any task, follow this loop:
8
8
  1. `akm curate "<task>"` — find the best matching asset
9
9
  2. `akm show <ref>` — read the schema (field names and structure)
10
10
  3. Edit the workspace file using schema field names + task-specific values from your README
11
- 4. `akm feedback <ref> --positive` — record success
11
+ 4. `akm feedback <ref> --positive` — record success; use `--negative --reason "..."` when it fails
12
12
 
13
13
  For workflow tasks:
14
- 1. `akm workflow next workflow:<name>` — get current step instructions
14
+ 1. `akm workflow next workflows/<name>` — get current step instructions
15
15
  2. Do the step work in your workspace
16
- 3. `akm workflow complete <run-id> --step <step-id>` — mark done, get next step
16
+ 3. `akm workflow complete <run-id> --step <step-id> --summary "what was done"` — mark done, get next step
17
17
 
18
18
  Workflow runs are scoped to your current project/worktree/directory. Ref-based
19
- commands like `workflow next workflow:<name>`, `workflow status workflow:<name>`,
19
+ commands like `workflow next workflows/<name>`, `workflow status workflows/<name>`,
20
20
  and `workflow list` operate within the current scope only.
21
21
 
22
22
  ## Quick Reference
@@ -25,26 +25,27 @@ and `workflow list` operate within the current scope only.
25
25
  akm search "<query>" # Search all sources
26
26
  akm curate "<task>" # Curate the best matches for a task
27
27
  akm search "<query>" --type workflow # Filter to workflow assets
28
- akm search "<query>" --source both # Also search registries
28
+ akm search "memories/projectA/" # List a subtree (conceptId prefix; trailing slash required)
29
+ akm search "<query>" --from all # Also search registries
29
30
  akm show <ref> # View asset details
31
+ akm help <command> # Show a command's options and subcommands
30
32
  akm workflow next <ref> # Start or resume a workflow
31
- akm remember "Deployment needs VPN access" # Record a memory in your stash
32
- akm remember "note" --target my-stash # Route write to a named writable stash source
33
- akm import ./notes/release-checklist.md # Import a knowledge doc into your stash
34
- akm import ./doc.md --target my-stash # Route import to a named writable stash source
35
- akm wiki list # List available wikis
36
- akm wiki ingest <name> # Dispatch an agent to run the ingest workflow (uses defaults.agent or --profile)
37
- akm wiki stash <name> ./paper.md --target my-stash # Route wiki stash write to a named source
38
- akm proposal diff skill:akm-dream # Diff proposal by ref, UUID, or 8-char prefix
33
+ akm remember "Deployment needs VPN access" # Record a memory in your bundle
34
+ akm remember "note" --bundle my-bundle # Route write to a named writable bundle source
35
+ akm remember "note" --xref knowledge/auth-flow # Cite provenance in frontmatter xrefs (repeatable)
36
+ akm remember "fix" --supersedes memories/old-note # Write a correction AND demote the superseded asset
37
+ akm import ./notes/release-checklist.md # Import a knowledge doc into your bundle
38
+ akm import ./doc.md --target my-bundle # Route import to a named writable bundle source
39
+ akm proposal diff skills/akm-dream # Diff proposal by ref, UUID, or 8-char prefix
39
40
  akm proposal accept 7c115132 # Accept by UUID prefix
40
- akm proposal reject skill:my-skill --reason "..." # Reject by ref
41
+ akm proposal reject skills/my-skill --reason "..." # Reject by ref
41
42
  akm feedback <ref> --positive|--negative # Record whether an asset helped
42
- akm add <ref> # Add a source (npm, GitHub, git, local dir)
43
- akm clone <ref> # Copy an asset to the working stash (optional --dest arg to clone to specific location)
44
- akm sync # Commit (and push if writable remote) changes in the primary stash (--no-push to commit only)
43
+ akm bundle add <ref> # Add a source (npm, GitHub, git, local dir)
44
+ akm clone <ref> # Copy an asset to the working bundle (optional --dest arg to clone to specific location)
45
+ akm sync # Commit (and push if writable remote) changes in the primary bundle (--no-push to commit only)
45
46
  akm improve --no-sync # Run improve without the end-of-run auto-commit
46
47
  akm improve --no-push # Auto-commit but skip push for this run
47
- akm registry search "<query>" # Search all registries
48
+ akm search "<query>" --from registry # Search all registries (registry search was folded into search)
48
49
  ```
49
50
 
50
51
  ## Primary Asset Types
@@ -55,14 +56,76 @@ akm registry search "<query>" # Search all registries
55
56
  | skill | Instructions to follow (read the full content) |
56
57
  | command | A prompt template with placeholders to fill in |
57
58
  | agent | A system prompt with model and tool hints |
58
- | knowledge | A reference doc (use `toc` or `section "..."` to navigate) |
59
+ | knowledge | A reference doc (append `#<heading-slug>` to the ref to read one section) |
59
60
  | workflow | Parsed steps plus workflow-specific execution commands |
60
61
  | memory | Recalled context (read the content for background information) |
61
- | env | A `.env` file of related CONFIGURATION (many vars; sensitive or not — all protected); key names only. Inject with `akm env run <ref> -- <cmd>` (the agent-safe path — values stay on disk). |
62
- | secret | A single sensitive value for AUTHENTICATION (token, key, cert); name only. Use `akm secret path` / `akm secret run`. |
63
- | wiki | A page in a multi-wiki knowledge base. For any wiki task, start with `akm wiki list`. To ingest sources, run `akm wiki ingest <name>` — it dispatches the configured agent profile to execute the ingest workflow against the wiki's `raw/` directory. Run `akm wiki -h` for the full surface. |
62
+ | env | A `.env` file of configuration an app loads together (many vars; sensitive or not — all protected); key names only. Inject with `akm env run <ref> -- <cmd>` (the agent-safe path — values stay on disk). |
63
+ | secret | A single sensitive value for AUTHENTICATION (token, key, cert); name only. Inject with `akm secret run <ref> <VAR> -- <cmd>`. |
64
+ | lesson | A distilled feedback lesson: `content` plus `action` (rendered from the `when_to_use` frontmatter). Read both before applying a related skill. Generated by the improve pipeline and promoted through the proposal queue. |
64
65
 
65
66
  When an asset meaningfully helps or fails, record that with `akm feedback` so
66
67
  future search ranking can learn from real usage.
67
68
 
68
- Run `akm -h` for the full command reference.
69
+ ## Error Shapes and Exit Codes
70
+
71
+ Every command returns JSON by default. On failure, the shape is always
72
+ emitted on **stderr** (stdout is normally left empty):
73
+
74
+ ```json
75
+ {"ok": false, "error": "<message>", "code": "<optional machine-readable code>", "hint": "<optional remediation hint>"}
76
+ ```
77
+
78
+ Exit codes:
79
+
80
+ | Code | Meaning |
81
+ | --- | --- |
82
+ | 0 | Success |
83
+ | 1 | Not found or command-reported failure |
84
+ | 2 | Usage / bad input |
85
+ | 4 | Health warning (`akm health` only) |
86
+ | 70 | Internal / unclassified error |
87
+ | 78 | Configuration error |
88
+
89
+ Check `ok === false` or a non-zero exit code to detect failure. The `hint`
90
+ field, when present, describes a corrective action. `search`/`curate`
91
+ success results also carry an additive `tip` field (a plain-text suggestion)
92
+ when the result set is empty.
93
+
94
+ `env run`, `secret run`, and `migrate` preserve the spawned process's exact
95
+ status. `task run` preserves configuration failures as exit 78; other failed
96
+ task results and failed `agent` dispatches map to exit 1 while retaining the
97
+ child status in their result envelope.
98
+
99
+ `akm lint` is the exception: it exits **0 on every successful run regardless
100
+ of findings**. Read `summary.flagged` to detect issues, or pass
101
+ `--fail-on-flagged` to opt into "exit 1 when findings exist":
102
+
103
+ ```sh
104
+ akm lint | jq '.summary.flagged' # always exit 0; read the count
105
+ akm lint --fail-on-flagged && deploy # exit 1 if any flagged issues
106
+ ```
107
+
108
+ ## Proposals & improvement (0.8.0+)
109
+
110
+ `akm` ships a proposal queue so reflective edits, new asset drafts, and
111
+ feedback-distilled lessons land out-of-band before they touch the live
112
+ bundle. None of these commands mutate bundle content directly — they always
113
+ go through `akm proposal accept`.
114
+
115
+ ```sh
116
+ akm improve <ref> # Produce an improvement proposal for an existing asset
117
+ akm improve <ref> --task "tighten the description"
118
+ akm proposal new <type> <name> --task "..." # Draft a new asset proposal from a description
119
+ akm proposal new lesson docker-cleanup --task "consolidate cleanup feedback"
120
+ akm proposal list # List pending proposals
121
+ akm proposal list --status pending|accepted|rejected|reverted
122
+ akm proposal show <id> # Render the proposal body
123
+ akm proposal diff <ref-or-id> # Diff by ref, UUID, or 8-char prefix
124
+ akm proposal accept 7c115132 # Accept by UUID prefix
125
+ akm proposal reject skills/my-skill --reason "not ready" # Reject by asset ref
126
+ akm search "<query>" --include-proposed # Surface proposal-queue entries in search
127
+ ```
128
+
129
+ Run `akm help <command>` for that command's options and subcommands. Run
130
+ `akm --help` for the command overview or `akm hints --detail full` for the
131
+ complete agent guide.
@@ -7,7 +7,9 @@
7
7
  "memoryInference": { "enabled": false },
8
8
  "graphExtraction": { "enabled": false },
9
9
  "extract": { "enabled": false },
10
- "triage": { "enabled": true, "applyMode": "queue", "policy": "personal-stash", "maxAcceptsPerRun": 100 }
10
+ "triage": { "enabled": true, "applyMode": "queue", "policy": "personal-stash", "maxAcceptsPerRun": 100 },
11
+ "validation": { "enabled": false },
12
+ "proactiveMaintenance": { "enabled": false }
11
13
  },
12
14
  "sync": { "enabled": true, "push": true }
13
15
  }
@@ -7,7 +7,9 @@
7
7
  "memoryInference": { "enabled": false },
8
8
  "graphExtraction": { "enabled": false },
9
9
  "extract": { "enabled": false },
10
- "triage": { "enabled": false }
10
+ "triage": { "enabled": false },
11
+ "validation": { "enabled": false },
12
+ "proactiveMaintenance": { "enabled": false }
11
13
  },
12
14
  "sync": { "enabled": true, "push": true }
13
15
  }
@@ -1,20 +1,19 @@
1
1
  {
2
- "description": "Standard improve pass — all sub-processes + sustaining proactive lane.",
2
+ "description": "Standard improve pass — reflect, distill, advisory consolidation, graph extraction, and validation. Memory inference is listed below but only runs when experimental.improveAutonomy is set; improve-stage extract and proactive maintenance off.",
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
6
6
  "limit": 25,
7
- "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "wiki", "workflow"]
7
+ "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
8
8
  },
9
9
  "distill": { "enabled": true, "allowedTypes": ["memory"], "requirePlannedRefs": true },
10
10
  "consolidate": { "enabled": true, "allowedTypes": ["memory"], "minPoolSize": 500 },
11
11
  "memoryInference": { "enabled": true },
12
12
  "graphExtraction": { "enabled": true },
13
- "extract": { "enabled": true, "triage": { "enabled": true, "minScore": 2 } },
14
- "proactiveMaintenance": { "enabled": true, "dueDays": 30, "maxPerRun": 15 },
15
- "triage": { "enabled": false, "applyMode": "queue", "policy": "personal-stash" },
16
- "recombine": { "enabled": false },
17
- "procedural": { "enabled": false }
13
+ "extract": { "enabled": false, "triage": { "enabled": true, "minScore": 2 } },
14
+ "validation": { "enabled": true },
15
+ "proactiveMaintenance": { "enabled": false, "dueDays": 30, "maxPerRun": 15 },
16
+ "triage": { "enabled": false, "applyMode": "queue", "policy": "personal-stash" }
18
17
  },
19
18
  "sync": { "enabled": true, "push": true }
20
19
  }
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "Frequent inference pass — memory inference, graph extraction, and reflect; improve-stage extract off.",
3
+ "processes": {
4
+ "reflect": { "enabled": true },
5
+ "distill": { "enabled": false },
6
+ "consolidate": { "enabled": false },
7
+ "memoryInference": { "enabled": true },
8
+ "graphExtraction": { "enabled": true },
9
+ "extract": { "enabled": false, "minNewSessions": 3, "triage": { "enabled": true, "minScore": 2 } },
10
+ "triage": { "enabled": false },
11
+ "validation": { "enabled": false },
12
+ "proactiveMaintenance": { "enabled": false }
13
+ },
14
+ "sync": { "enabled": true, "push": true }
15
+ }
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Full-corpus graph extraction pass — rebuilds graph relationships across all stash files. Disables all other sub-processes. Use via `akm improve --profile graph-refresh` or the embedded `graph-refresh-weekly` task.",
2
+ "description": "Full-corpus graph extraction pass — rebuilds graph relationships across all stash files. Disables all other sub-processes. Use via `akm improve --strategy graph-refresh` or the embedded `graph-refresh-weekly` task.",
3
3
  "processes": {
4
4
  "reflect": { "enabled": false },
5
5
  "distill": { "enabled": false },
@@ -7,7 +7,9 @@
7
7
  "memoryInference": { "enabled": false },
8
8
  "graphExtraction": { "enabled": true, "fullScan": true },
9
9
  "extract": { "enabled": false },
10
- "triage": { "enabled": false }
10
+ "triage": { "enabled": false },
11
+ "validation": { "enabled": false },
12
+ "proactiveMaintenance": { "enabled": false }
11
13
  },
12
14
  "sync": { "enabled": true, "push": true }
13
15
  }
@@ -6,7 +6,10 @@
6
6
  "consolidate": { "enabled": false },
7
7
  "memoryInference": { "enabled": true },
8
8
  "graphExtraction": { "enabled": false },
9
- "triage": { "enabled": false }
9
+ "extract": { "enabled": false },
10
+ "triage": { "enabled": false },
11
+ "validation": { "enabled": false },
12
+ "proactiveMaintenance": { "enabled": false }
10
13
  },
11
14
  "sync": { "enabled": true, "push": true }
12
15
  }
@@ -1,23 +1,23 @@
1
1
  {
2
- "description": "Proactive-maintenance pass — reflect, distill, proposal triage (promote, high budget), and the proactive-maintenance lane (maxPerRun 100); consolidate/memoryInference/graphExtraction/extract off. Sync disabled: an interrupted run would otherwise leave an uncommitted backlog.",
2
+ "description": "Opt-in proactive-maintenance pass — reflect, distill, proposal triage (promote, high budget), and the proactive-maintenance lane (maxPerRun 100); consolidate/memoryInference/graphExtraction/extract off. Sync disabled: an interrupted run would otherwise leave an uncommitted backlog.",
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
6
- "mode": "llm",
7
- "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "wiki", "workflow"]
6
+ "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
8
7
  },
9
- "distill": { "enabled": true, "mode": "llm", "allowedTypes": ["memory"] },
8
+ "distill": { "enabled": true, "allowedTypes": ["memory"] },
10
9
  "consolidate": { "enabled": false },
11
10
  "memoryInference": { "enabled": false },
12
11
  "graphExtraction": { "enabled": false },
13
12
  "extract": { "enabled": false },
13
+ "validation": { "enabled": false },
14
14
  "triage": {
15
15
  "enabled": true,
16
16
  "applyMode": "promote",
17
17
  "policy": "personal-stash",
18
18
  "maxAcceptsPerRun": 100,
19
19
  "maxDiffLines": 200,
20
- "judgment": { "mode": "llm" }
20
+ "judgment": {}
21
21
  },
22
22
  "proactiveMaintenance": { "enabled": true, "dueDays": 30, "maxPerRun": 100 }
23
23
  },
@@ -3,14 +3,16 @@
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
6
- "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "wiki", "workflow"]
6
+ "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
7
7
  },
8
8
  "extract": { "enabled": false },
9
9
  "distill": { "enabled": false },
10
10
  "consolidate": { "enabled": false },
11
11
  "memoryInference": { "enabled": false },
12
12
  "graphExtraction": { "enabled": false },
13
- "triage": { "enabled": false }
13
+ "triage": { "enabled": false },
14
+ "validation": { "enabled": false },
15
+ "proactiveMaintenance": { "enabled": false }
14
16
  },
15
17
  "sync": { "enabled": true, "push": true }
16
18
  }
@@ -0,0 +1,30 @@
1
+ {
2
+ "description": "Reflect + distill pass — reflect, distill, memoryInference, and proposal triage (promote); proactiveMaintenance/consolidate/graphExtraction/extract off. Sync disabled: an interrupted run would otherwise leave an uncommitted backlog.",
3
+ "processes": {
4
+ "reflect": {
5
+ "enabled": true,
6
+ "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
7
+ },
8
+ "distill": { "enabled": true, "allowedTypes": ["memory"], "requirePlannedRefs": false },
9
+ "consolidate": { "enabled": false },
10
+ "memoryInference": { "enabled": true },
11
+ "graphExtraction": { "enabled": false },
12
+ "extract": {
13
+ "enabled": false,
14
+ "timeoutMs": 300000,
15
+ "triage": { "enabled": true, "minScore": 2 },
16
+ "minNewSessions": 1
17
+ },
18
+ "validation": { "enabled": false },
19
+ "triage": {
20
+ "enabled": true,
21
+ "applyMode": "promote",
22
+ "policy": "personal-stash",
23
+ "maxAcceptsPerRun": 15,
24
+ "maxDiffLines": 200,
25
+ "judgment": {}
26
+ },
27
+ "proactiveMaintenance": { "enabled": false, "dueDays": 30, "maxPerRun": 15 }
28
+ },
29
+ "sync": { "enabled": false }
30
+ }
@@ -3,7 +3,7 @@
3
3
  "processes": {
4
4
  "reflect": {
5
5
  "enabled": true,
6
- "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "wiki", "workflow"]
6
+ "allowedTypes": ["agent", "command", "knowledge", "lesson", "memory", "skill", "workflow"]
7
7
  },
8
8
  "distill": { "enabled": true, "allowedTypes": ["memory"] },
9
9
  "consolidate": { "enabled": true, "allowedTypes": ["memory"] },
@@ -3,17 +3,17 @@ You are the akm consolidate assistant analyzing memory assets.
3
3
  Rules:
4
4
  1. MERGE: Two or more memories are substantially duplicated or closely related → propose merging. Return the primary ref to keep and secondary refs to delete. Do NOT include mergedContent — the merge will be executed in a separate step.
5
5
  2. DELETE: Memory is clearly outdated, contradicted, or redundant → propose deletion. NEVER propose delete for memories annotated `(captureMode: hot)` — they are user-explicit and only the user can retire them. The downstream guard will refuse these regardless, so proposing them just wastes tokens.
6
- 3. PROMOTE: Memory expresses a stable, reusable fact suitable as a `knowledge:` asset → propose promotion. Do NOT delete the source memory. NEVER propose promote / merge / contradict for memories annotated `(already queued)` — they have a pending proposal whose body matches; a duplicate will be deterministically dropped, so proposing them just wastes tokens.
6
+ 3. PROMOTE: Memory expresses a stable, reusable fact suitable as a `knowledge/` asset → propose promotion. Do NOT delete the source memory. NEVER propose promote / merge / contradict for memories annotated `(already queued)` — they have a pending proposal whose body matches; a duplicate will be deterministically dropped, so proposing them just wastes tokens.
7
7
  4. CONTRADICT: Two memories assert logically exclusive facts such that following BOTH simultaneously is impossible — not merely related or overlapping. You MUST cite the exact sentence from Memory A and the exact sentence from Memory B that are in direct conflict. If you cannot cite specific opposing sentences, use KEEP instead. Sharing a topic, tool, domain, or workflow stage is NOT sufficient. Only direct factual opposites qualify: opposing recommended commands, opposing boolean flags, opposing version numbers, or mutually exclusive instructions. Use confidence ≥ 0.92 only; omit the op entirely if below that threshold.
8
8
  5. KEEP: Memory is unique and current → omit from output.
9
9
 
10
10
  Return ONLY JSON (no prose, no code fences):
11
11
  {
12
12
  "operations": [
13
- { "op": "merge", "primary": "memory:<name>", "secondaries": ["memory:<name>", ...], "mergeStrategy": "synthesize", "confidence": 0.95 },
14
- { "op": "delete", "ref": "memory:<name>", "reason": "<brief reason>", "confidence": 0.90 },
15
- { "op": "promote", "ref": "memory:<name>", "knowledgeRef": "knowledge:<suggested-slug>", "reason": "<brief reason>", "description": "<one sentence describing the new knowledge asset>", "confidence": 0.92 },
16
- { "op": "contradict", "ref": "memory:<name>", "contradictedByRef": "memory:<name>", "reason": "<brief reason>", "confidence": 0.88 }
13
+ { "op": "merge", "primary": "memories/<name>", "secondaries": ["memories/<name>", ...], "mergeStrategy": "synthesize", "confidence": 0.95 },
14
+ { "op": "delete", "ref": "memories/<name>", "reason": "<brief reason>", "confidence": 0.90 },
15
+ { "op": "promote", "ref": "memories/<name>", "knowledgeRef": "knowledge/<suggested-slug>", "reason": "<brief reason>", "description": "<one sentence describing the new knowledge asset>", "confidence": 0.92 },
16
+ { "op": "contradict", "ref": "memories/<name>", "contradictedByRef": "memories/<name>", "reason": "<brief reason>", "confidence": 0.88 }
17
17
  ],
18
18
  "warnings": ["<optional concerns>"]
19
19
  }
@@ -46,22 +46,18 @@ Respond with EXACTLY one JSON object matching this shape:
46
46
  "candidates": [
47
47
  {
48
48
  "type": "memory" | "lesson" | "knowledge",
49
- "name": "<kebab-case-slug>",
49
+ "name": "<kebab-case name, e.g. jwt-token; optionally under one kebab-case scope, e.g. auth/jwt-token>",
50
50
  "description": "<one sentence 20-400 chars>",
51
51
  "when_to_use": "<one sentence 15-400 chars; REQUIRED only when type=lesson>",
52
52
  "body": "<markdown body, 200-3000 chars typical>",
53
53
  "confidence": <number 0.0-1.0>,
54
- "evidence": "<one-line pointer to the moment in the session>",
55
- "orderedActions": ["<action-1>", "<action-2>", ...],
56
- "outcomeData": "<one sentence describing the outcome of the action sequence>"
54
+ "evidence": "<one-line pointer to the moment in the session>"
57
55
  }
58
56
  ],
59
57
  "rationale_if_empty": "<one sentence; REQUIRED when candidates is empty>"
60
58
  }
61
59
  ```
62
60
 
63
- `orderedActions` and `outcomeData` are **optional**. Include them only when the candidate represents a recurring action sequence (e.g. a recovery procedure, a build-fix recipe, a deployment checklist) where preserving the ordered steps adds future value. When present, `outcomeData` is required and must describe what happened when the sequence completed (success or failure). Omit both fields entirely for standalone facts, observations, or lessons that are not action-sequence-shaped.
64
-
65
61
  ## Rules
66
62
 
67
63
  1. **Zero candidates is a valid and frequent answer.** Most sessions yield no new durable insight. When that's the case, return `{"candidates": [], "rationale_if_empty": "..."}` explaining what you saw and why it didn't rise to durable-knowledge level. Do not fabricate.
@@ -1,5 +1,4 @@
1
- Compress the memory below into one derived memory. Output ONLY JSON:
2
- {"title":"short title string","description":"one sentence summary string","tags":["tag1","tag2"],"searchHints":["search phrase 1","search phrase 2"],"content":"2-3 sentence compressed body preserving key facts verbatim"}
3
- Rules: be specific, no vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), merge related points, 3-8 tags, 3-6 searchHints. The content field must be a plain string with 2-3 sentences.
1
+ Compress the memory below into one derived memory. Output ONLY a JSON object with exactly these fields: title, description, tags, searchHints, and content.
2
+ Rules: title must be specific and short; description must be one sentence; tags must contain 3-8 specific tags; searchHints must contain 3-6 useful retrieval phrases; content must be a plain string with 2-3 sentences. Avoid vague generalizations, preserve key facts (names/versions/paths/config keys verbatim), and merge related points. Never return field descriptions or placeholder values.
4
3
 
5
4
  Memory:
@@ -0,0 +1,11 @@
1
+ Respond with exactly this plain-text frame, with no prose or code fence around it:
2
+
3
+ {{REF_LINE}}AKM_REFLECT_CONFIDENCE: <number from 0 to 1>
4
+ AKM_REFLECT_FRONTMATTER_PATCH: {"description": null, "when_to_use": null}
5
+ AKM_REFLECT_CONTENT_BEGIN
6
+ <complete improved markdown body>
7
+ AKM_REFLECT_CONTENT_END
8
+
9
+ The first begin marker and final end marker delimit the body; marker lines between them are literal content. Put the complete markdown body between those outer markers. Quotes, Markdown fences, and backslashes inside the body are literal content; do not JSON-escape them. Emit the body only, without YAML frontmatter, because AKM preserves and merges the source frontmatter itself.
10
+
11
+ The frontmatter patch must be a one-line JSON object with exactly `description` and `when_to_use`. Keep a field `null` when it should not change. Supply a non-empty string only when adding or correcting that field; AKM merges those values through its existing sanitizer.
@@ -0,0 +1,3 @@
1
+ Respond only through the provider's native JSON schema. {{FIELD_RULE}}
2
+
3
+ `content` must contain the complete improved markdown body only, without YAML frontmatter. `frontmatterPatch` must contain exactly `description` and `when_to_use`; set either field to `null` when it should not change, or to a non-empty string when adding or correcting it. AKM merges that narrow patch with the source frontmatter and preserves target identity itself. `confidence` is your honest self-rated quality confidence from 0 to 1. Do not add prose or Markdown fences around the JSON response.
@@ -0,0 +1,3 @@
1
+ Your previous response could not be extracted using the required output contract. Reformat that response exactly once using the contract below. Preserve its proposed markdown verbatim: do not revise, summarize, or add content. Return only the repaired envelope.
2
+
3
+ {{OUTPUT_CONTRACT}}
@@ -1,7 +1,7 @@
1
1
  # AKM Stash
2
2
 
3
3
  This is an **AKM stash** — a structured knowledge repository that stores reusable
4
- assets for you and your AI agents. AKM (Agent Knowledge Management) indexes, ranks,
4
+ assets for you and your AI agents. AKM (Agent Knowledge Manager) indexes, ranks,
5
5
  and surfaces these assets at the right moment during coding sessions, improving
6
6
  consistency and reducing repeated context-setting.
7
7
 
@@ -17,10 +17,37 @@ consistency and reducing repeated context-setting.
17
17
  | `workflows/` | Workflows | Multi-step orchestration sequences |
18
18
  | `tasks/` | Tasks | Scheduled or on-demand automation tasks |
19
19
  | `lessons/` | Lessons | Durable lessons extracted from past sessions |
20
+ | `facts/` | Facts | Durable stash-level context; the house conventions in `facts/conventions/` are auto-surfaced to authoring agents |
21
+ | `scripts/` | Scripts | Executable helpers agents and humans can run |
22
+ | `env/`, `secrets/` | Env & Secrets | Configuration groups and single credentials; values are never content-indexed |
20
23
 
21
24
  Add your own assets to any of these directories. AKM will index them automatically
22
25
  on the next `akm index` run (or when the background improve pipeline picks them up).
23
26
 
27
+ ## How to organize assets
28
+
29
+ A file's path under its type directory becomes part of its ref
30
+ (`knowledge/auth/oauth-refresh-races.md` → `knowledge/auth/oauth-refresh-races`),
31
+ and its segments are search terms: `akm search "auth" --type knowledge` narrows
32
+ to that subtree. Retrieval is search, not folder-browse, so pick subdirectories
33
+ deliberately. The house rules live in three convention facts under
34
+ `facts/conventions/` and are surfaced to agents automatically when they author
35
+ assets:
36
+
37
+ - **`facts/conventions/organization`** — the single path axis, chosen by asset
38
+ type. **Scope-born** types (`memory`, `lesson`, `task`, `env`, `secret`) go
39
+ under the current **project/client** slug; **reuse-born** types (`knowledge`,
40
+ `skill`, `fact`, `script`) go under a stable **domain**; global types
41
+ stay at the type root.
42
+ - **`facts/conventions/backlinks`** — how to cross-link: a provenance xref
43
+ whenever an asset derives from another, sparse real associative links,
44
+ corrections as new assets, canonical entity naming.
45
+ - **`facts/conventions/domains`** — the (editable) domain vocabulary for
46
+ reuse-born assets, plus canonical entity spellings.
47
+
48
+ Per-type nuances live in `facts/conventions/assets/<type>.md`. All of these are
49
+ soft guidance — edit them to match how your stash is queried.
50
+
24
51
  ## For agents: how to access this stash
25
52
 
26
53
  All assets in this stash are searchable via the `akm` CLI. Use these commands to
@@ -35,15 +62,16 @@ akm search "<query>"
35
62
  akm search "<query>" --type skill
36
63
  akm search "<query>" --type knowledge
37
64
 
38
- # Show a specific asset by ref
39
- akm show skill:<name>
40
- akm show knowledge:<name>
41
- akm show memory:<name>
42
- akm show command:<name>
65
+ # Show a specific asset by ref ([bundle//]conceptId)
66
+ akm show skills/<name>
67
+ akm show knowledge/<name>
68
+ akm show memories/<name>
69
+ akm show commands/<name>
43
70
 
44
- # List available assets by type
45
- akm list --type skill
46
- akm list --type knowledge
71
+ # Browse available assets by type (a trailing slash lists the subtree)
72
+ akm search "skills/"
73
+ akm search "knowledge/"
74
+ akm search "<query>" --type skill
47
75
  ```
48
76
 
49
77
  ### Recording feedback and new knowledge
@@ -73,4 +101,4 @@ akm proposal accept <id>
73
101
 
74
102
  ---
75
103
 
76
- *Created by `akm init`. See `akm --help` for full command reference.*
104
+ *Created by `akm bundle create`. See `akm --help` for full command reference.*
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for agent assets using scoped role, tool, and maintenance rules.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise an agent asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -36,3 +38,9 @@ Use an agent when a recurring task benefits from a specialized role, bounded res
36
38
  - Add explicit negative guidance when the agent overreaches.
37
39
  - Keep role instructions stable and concise; move large background material into knowledge assets.
38
40
  - Use lessons to capture operational improvements, then promote stable ones into the agent when they become part of the role.
41
+
42
+ ## Placement & linking
43
+
44
+ - Agent definitions are usually **global**: keep them at the type root or under a
45
+ role/domain slug (`agents/reviewer`). Point the agent at the standards and type
46
+ conventions it must read first via xrefs.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for command assets using repeatable LLM operation patterns.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a command asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -36,3 +38,9 @@ Use a command when the user or agent needs to perform the same prompt-shaped tas
36
38
  - If command output regularly becomes useful durable knowledge, instruct the agent to file the result into the right asset type.
37
39
  - If the command starts handling multiple unrelated tasks, split it into smaller commands.
38
40
  - Preserve a clear invocation contract so future agents can call the command safely.
41
+
42
+ ## Placement & linking
43
+
44
+ - Commands are usually **global**: keep them at the type root or under a
45
+ tool/domain slug. Scope to a project only when the command is genuinely
46
+ project-specific.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for fact assets using pinned-core and just-in-time context principles.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a fact asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -34,6 +36,17 @@ Use a fact for stable information that future agents should treat as true or nor
34
36
  ## Maintenance strategy
35
37
 
36
38
  - Revise or supersede facts when the durable truth changes.
37
- - Do not allow contradictory facts to remain equally active.
39
+ - Do not allow contradictory facts to remain equally active: mark the loser
40
+ `beliefState: superseded` / `supersededBy: [<new ref>]` so ranking demotes it.
38
41
  - Promote repeated memories or lessons into facts only when they become stable context.
39
42
  - Keep convention and meta facts especially clear, because they steer future asset creation.
43
+
44
+ ## Placement & linking
45
+
46
+ - Facts are **reuse-born**: give a policy/standard fact a domain-like prefix
47
+ (`facts/policies/pii-handling`) or the type root for personal/meta facts.
48
+ - Facts are also the **delivery layer** for stash-wide conventions:
49
+ `category: convention` or `category: meta` facts are surfaced to every non-wiki
50
+ author, so this is where naming, placement, and linking house-rules live. Keep
51
+ each one short — they inject into authoring prompts. Reserve `pinned: true` for
52
+ the small always-injected core.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for knowledge assets as compiled, on-demand reference documents.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a knowledge asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -36,5 +38,15 @@ Use a knowledge asset for durable reference material, synthesized explanations,
36
38
 
37
39
  - Update the existing page when new information changes the same topic; append a dated note rather than silently rewriting when provenance matters.
38
40
  - Create a new page when the concept deserves its own durable entry.
39
- - Add links both ways when a new relationship matters.
41
+ - Add a return link when you are already editing the related page in the same pass.
40
42
  - Periodically scan for orphaned, stale, or overlapping knowledge docs and consolidate them.
43
+
44
+ ## Placement & linking
45
+
46
+ - Knowledge is **reuse-born**: file it under a stable **domain** prefix from
47
+ `facts/conventions/domains` (`knowledge/auth/oauth-refresh-races`), not under a
48
+ project — that domain slug is what any project searches to reuse it.
49
+ - Knowledge pages are the rewritable synthesized layer — update them in place.
50
+ Ingested source material stays immutable; corrections to it are new assets
51
+ that xref the source. Carry a provenance xref when derived, and a
52
+ self-situating header.