akm-cli 0.9.0-rc.0 → 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 (598) hide show
  1. package/CHANGELOG.md +1283 -22
  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/prompts/workflow-unit-preamble.md +26 -0
  26. package/dist/assets/stash-skeleton/README.md +38 -10
  27. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +8 -0
  28. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +8 -0
  29. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +14 -1
  30. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +13 -1
  31. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +9 -1
  32. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +11 -0
  33. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +9 -0
  34. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +9 -0
  35. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +8 -0
  36. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +100 -0
  37. package/dist/assets/stash-skeleton/facts/conventions/domains.md +64 -0
  38. package/dist/assets/stash-skeleton/facts/conventions/organization.md +136 -0
  39. package/dist/assets/tasks/core/extract.yml +3 -2
  40. package/dist/assets/tasks/core/improve.yml +2 -1
  41. package/dist/assets/tasks/core/index-refresh.yml +1 -0
  42. package/dist/assets/tasks/core/sync.yml +1 -0
  43. package/dist/assets/tasks/core/version-check.yml +2 -1
  44. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  45. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  46. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  47. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  48. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  49. package/dist/assets/templates/html/health.html +5 -4
  50. package/dist/assets/workflows/workflow-template.md +31 -15
  51. package/dist/cli/invocation.js +279 -0
  52. package/dist/cli/parse-args.js +5 -90
  53. package/dist/cli/retired-commands.js +78 -0
  54. package/dist/cli/shared.js +158 -48
  55. package/dist/cli-node.mjs +2 -1
  56. package/dist/cli.js +747 -293
  57. package/dist/commands/agent/agent-dispatch.js +19 -18
  58. package/dist/commands/agent/agent-support.js +0 -24
  59. package/dist/commands/agent/contribute-cli.js +43 -97
  60. package/dist/commands/completions.js +80 -23
  61. package/dist/commands/config-cli.js +44 -281
  62. package/dist/commands/env/env-binding.js +99 -0
  63. package/dist/commands/env/env-cli.js +84 -224
  64. package/dist/commands/env/env.js +12 -163
  65. package/dist/commands/env/marker-path.js +6 -0
  66. package/dist/commands/env/secret-cli.js +45 -61
  67. package/dist/commands/env/secret.js +32 -62
  68. package/dist/commands/feedback-cli.js +179 -85
  69. package/dist/commands/health/accept-rate.js +58 -0
  70. package/dist/commands/health/advisories.js +7 -8
  71. package/dist/commands/health/checks.js +279 -94
  72. package/dist/commands/health/html-report.js +197 -578
  73. package/dist/commands/health/improve-metrics.js +277 -246
  74. package/dist/commands/health/llm-usage.js +19 -19
  75. package/dist/commands/health/md-report.js +16 -7
  76. package/dist/commands/health/metrics.js +67 -32
  77. package/dist/commands/health/renderers.js +47 -0
  78. package/dist/commands/health/report-view-model.js +508 -0
  79. package/dist/commands/health/stash-exposure.js +1 -1
  80. package/dist/commands/health/surfaces.js +16 -56
  81. package/dist/commands/health/task-runs.js +3 -67
  82. package/dist/{migrate-storage-node.mjs → commands/health/types-checks.js} +1 -5
  83. package/dist/commands/health/types-improve.js +29 -0
  84. package/dist/{output/text/save.js → commands/health/types-metrics.js} +1 -2
  85. package/dist/commands/health/types-result.js +7 -0
  86. package/dist/commands/health/types-runs.js +4 -0
  87. package/dist/commands/health/types-session-log.js +4 -0
  88. package/dist/commands/health/types-windows.js +4 -0
  89. package/dist/commands/health/types.js +26 -21
  90. package/dist/commands/health/windows.js +2 -3
  91. package/dist/commands/health.js +296 -167
  92. package/dist/commands/improve/anti-collapse.js +5 -5
  93. package/dist/commands/improve/autonomy-gate.js +68 -0
  94. package/dist/commands/improve/collapse-detector.js +65 -52
  95. package/dist/commands/improve/consolidate/chunking.js +9 -7
  96. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  97. package/dist/commands/improve/consolidate/merge.js +4 -0
  98. package/dist/commands/improve/consolidate.js +454 -1354
  99. package/dist/commands/improve/content-hash.js +39 -0
  100. package/dist/commands/improve/distill/content-repair.js +4 -10
  101. package/dist/commands/improve/distill/promote-memory.js +89 -64
  102. package/dist/commands/improve/distill/quality-gate.js +118 -42
  103. package/dist/commands/improve/distill-guards.js +1 -1
  104. package/dist/commands/improve/distill-promotion-policy.js +33 -888
  105. package/dist/commands/improve/distill.js +607 -363
  106. package/dist/commands/improve/eligibility.js +165 -79
  107. package/dist/commands/improve/extract-cli.js +35 -126
  108. package/dist/commands/improve/extract-prompt.js +6 -35
  109. package/dist/commands/improve/extract.js +640 -391
  110. package/dist/commands/improve/feedback-valence.js +2 -12
  111. package/dist/commands/improve/improve-cli.js +134 -135
  112. package/dist/commands/improve/improve-result-file.js +30 -50
  113. package/dist/commands/improve/improve-run-types.js +4 -0
  114. package/dist/commands/improve/improve-strategies.js +135 -0
  115. package/dist/commands/improve/improve.js +904 -701
  116. package/dist/commands/improve/locks.js +64 -111
  117. package/dist/commands/improve/loop-stages.js +1110 -923
  118. package/dist/commands/improve/memory/derived-ref.js +124 -0
  119. package/dist/commands/improve/memory/memory-belief.js +79 -7
  120. package/dist/commands/improve/memory/memory-contradiction-detect.js +49 -52
  121. package/dist/commands/improve/memory/memory-improve.js +25 -37
  122. package/dist/commands/improve/outcome-loop.js +25 -88
  123. package/dist/commands/improve/preparation.js +1034 -813
  124. package/dist/commands/improve/proactive-maintenance.js +34 -9
  125. package/dist/commands/improve/proposal-envelope.js +31 -0
  126. package/dist/commands/improve/reflect.js +983 -794
  127. package/dist/commands/improve/run-context.js +119 -0
  128. package/dist/commands/improve/salience.js +24 -127
  129. package/dist/commands/improve/session-asset.js +7 -3
  130. package/dist/commands/improve/shared.js +14 -34
  131. package/dist/commands/improve/source-identity.js +28 -0
  132. package/dist/commands/improve/triage.js +20 -17
  133. package/dist/commands/lint/base-linter.js +340 -313
  134. package/dist/commands/lint/env-key-rules.js +31 -47
  135. package/dist/commands/lint/index.js +185 -30
  136. package/dist/commands/{events.js → log.js} +28 -38
  137. package/dist/commands/migrate-cli.js +54 -0
  138. package/dist/commands/migration-tool.js +55 -0
  139. package/dist/commands/observability-cli.js +70 -208
  140. package/dist/commands/proposal/diff-format.js +50 -0
  141. package/dist/commands/proposal/drain-policies.js +0 -6
  142. package/dist/commands/proposal/drain.js +91 -40
  143. package/dist/commands/proposal/proposal-cli.js +134 -132
  144. package/dist/commands/proposal/proposal-types.js +56 -0
  145. package/dist/commands/proposal/proposal.js +83 -65
  146. package/dist/commands/proposal/propose-cli.js +88 -0
  147. package/dist/commands/proposal/propose.js +105 -88
  148. package/dist/commands/proposal/repository.js +1303 -278
  149. package/dist/commands/proposal/validators/proposal-quality-validators.js +16 -6
  150. package/dist/commands/proposal/validators/proposal-validators.js +61 -12
  151. package/dist/commands/proposal/validators/proposals.js +6 -8
  152. package/dist/commands/read/curate.js +78 -73
  153. package/dist/commands/read/knowledge.js +510 -13
  154. package/dist/commands/read/registry-search.js +2 -2
  155. package/dist/commands/read/remember-cli.js +84 -15
  156. package/dist/commands/read/search-cli.js +203 -96
  157. package/dist/commands/read/search.js +126 -94
  158. package/dist/commands/read/show.js +226 -250
  159. package/dist/commands/registry-cli.js +34 -60
  160. package/dist/commands/remember.js +18 -57
  161. package/dist/commands/sources/add-cli.js +104 -49
  162. package/dist/commands/sources/bundle-cli.js +166 -0
  163. package/dist/commands/sources/bundle-config-ops.js +63 -0
  164. package/dist/commands/sources/info.js +27 -15
  165. package/dist/commands/sources/init.js +30 -40
  166. package/dist/commands/sources/installed-stashes.js +469 -172
  167. package/dist/commands/sources/migration-help.js +7 -4
  168. package/dist/commands/sources/schema-repair.js +10 -9
  169. package/dist/commands/sources/self-update.js +182 -121
  170. package/dist/commands/sources/source-add.js +169 -178
  171. package/dist/commands/sources/source-clone.js +144 -41
  172. package/dist/commands/sources/source-manage.js +94 -59
  173. package/dist/commands/sources/sources-cli.js +64 -205
  174. package/dist/commands/sources/stash-cli.js +91 -54
  175. package/dist/commands/sources/stash-skeleton.js +1 -1
  176. package/dist/commands/tasks/tasks-cli.js +106 -104
  177. package/dist/commands/tasks/tasks.js +445 -262
  178. package/dist/commands/workflow-cli.js +232 -121
  179. package/dist/core/action-contributors.js +1 -1
  180. package/dist/core/activation-policy.js +49 -0
  181. package/dist/core/adapter/adapters/agent-skills-adapter.js +181 -0
  182. package/dist/core/adapter/adapters/akm-adapter.js +528 -0
  183. package/dist/core/adapter/adapters/akm-lint.js +392 -0
  184. package/dist/core/adapter/adapters/akm-metadata.js +387 -0
  185. package/dist/core/adapter/adapters/akm-task-adapter.js +149 -0
  186. package/dist/core/adapter/adapters/akm-workflow-adapter.js +180 -0
  187. package/dist/core/adapter/adapters/claude-adapter.js +61 -0
  188. package/dist/core/adapter/adapters/dotenv-adapter.js +187 -0
  189. package/dist/core/adapter/adapters/generic-files-adapter.js +119 -0
  190. package/dist/core/adapter/adapters/index.js +80 -0
  191. package/dist/core/adapter/adapters/llm-wiki-adapter.js +419 -0
  192. package/dist/core/adapter/adapters/okf-adapter.js +391 -0
  193. package/dist/core/adapter/adapters/opencode-adapter.js +68 -0
  194. package/dist/core/adapter/adapters/shared.js +286 -0
  195. package/dist/core/adapter/adapters/tool-dir-shared.js +217 -0
  196. package/dist/core/adapter/adapters/website-snapshot-adapter.js +155 -0
  197. package/dist/core/adapter/bundle-adapter.js +4 -0
  198. package/dist/core/adapter/detect-adapter.js +17 -0
  199. package/dist/core/adapter/recognize-match.js +44 -0
  200. package/dist/core/adapter/registry.js +56 -0
  201. package/dist/core/adapter/types.js +4 -0
  202. package/dist/core/asset/akm-markdown.js +30 -0
  203. package/dist/core/asset/asset-placement.js +243 -0
  204. package/dist/core/asset/asset-ref.js +110 -79
  205. package/dist/core/asset/asset-serialize.js +20 -0
  206. package/dist/core/asset/frontmatter.js +28 -12
  207. package/dist/core/asset/markdown.js +40 -51
  208. package/dist/core/asset/resolve-ref.js +274 -0
  209. package/dist/core/asset/stash-meta.js +2 -2
  210. package/dist/core/bundle-id.js +51 -0
  211. package/dist/core/common.js +281 -86
  212. package/dist/core/config/config-io.js +42 -128
  213. package/dist/core/config/config-schema.js +233 -834
  214. package/dist/core/config/config-sources.js +162 -39
  215. package/dist/core/config/config-types.js +16 -11
  216. package/dist/core/config/config-version.js +29 -0
  217. package/dist/core/config/config-walker.js +126 -37
  218. package/dist/core/config/config.js +154 -331
  219. package/dist/core/config/deep-merge.js +41 -0
  220. package/dist/core/config/engine-semantics.js +28 -0
  221. package/dist/core/config/experimental.js +21 -0
  222. package/dist/core/config/schema/embedding.js +38 -0
  223. package/dist/core/config/schema/engines.js +116 -0
  224. package/dist/core/config/schema/experimental.js +47 -0
  225. package/dist/core/config/schema/feedback.js +31 -0
  226. package/dist/core/config/schema/improve-processes.js +389 -0
  227. package/dist/core/config/schema/improve.js +94 -0
  228. package/dist/core/config/schema/index-config.js +176 -0
  229. package/dist/core/config/schema/output.js +18 -0
  230. package/dist/core/config/schema/primitives.js +94 -0
  231. package/dist/core/config/schema/search.js +30 -0
  232. package/dist/core/config/schema/setup.js +18 -0
  233. package/dist/core/config/schema/sources-bundles.js +169 -0
  234. package/dist/core/config/schema/workflow.js +29 -0
  235. package/dist/core/env-secret-ref.js +155 -20
  236. package/dist/core/errors.js +17 -15
  237. package/dist/core/events-types.js +4 -0
  238. package/dist/core/events.js +46 -128
  239. package/dist/core/extra-params.js +62 -0
  240. package/dist/core/file-change.js +17 -0
  241. package/dist/core/file-lock.js +202 -57
  242. package/dist/core/fs-txn.js +392 -0
  243. package/dist/core/git-message.js +59 -0
  244. package/dist/core/improve-result.js +167 -0
  245. package/dist/core/json-schema.js +142 -0
  246. package/dist/core/lesson-lint.js +1 -17
  247. package/dist/core/logs-db.js +1 -1
  248. package/dist/core/maintenance-barrier.js +135 -0
  249. package/dist/core/migration-operation.js +44 -0
  250. package/dist/core/mutation-target.js +78 -0
  251. package/dist/core/paths.js +22 -25
  252. package/dist/core/platform.js +10 -0
  253. package/dist/core/recognition-util.js +128 -0
  254. package/dist/core/redaction.js +392 -0
  255. package/dist/core/standards/resolve-standards-context.js +36 -65
  256. package/dist/core/standards/resolve-stash-standards.js +2 -2
  257. package/dist/core/standards/resolve-type-conventions.js +5 -5
  258. package/dist/core/state/migrations.js +242 -11
  259. package/dist/core/state-db.js +98 -10
  260. package/dist/core/structured.js +1 -1
  261. package/dist/core/subprocess.js +303 -0
  262. package/dist/core/text-truncation.js +9 -5
  263. package/dist/core/time.js +20 -0
  264. package/dist/core/type-presentation.js +130 -0
  265. package/dist/core/warn.js +0 -3
  266. package/dist/core/write-source.js +834 -118
  267. package/dist/indexer/bundle-identity-guard.js +92 -0
  268. package/dist/indexer/db/graph-db.js +1 -25
  269. package/dist/indexer/db/llm-cache.js +1 -1
  270. package/dist/indexer/ensure-index.js +30 -9
  271. package/dist/indexer/graph/graph-boost.js +9 -30
  272. package/dist/indexer/graph/graph-extraction.js +41 -27
  273. package/dist/indexer/graph/graph-types.js +4 -0
  274. package/dist/indexer/index-writer-lock.js +93 -49
  275. package/dist/indexer/index-written-assets.js +100 -53
  276. package/dist/indexer/indexer.js +746 -329
  277. package/dist/indexer/init.js +18 -25
  278. package/dist/indexer/installations.js +142 -0
  279. package/dist/indexer/passes/dir-staleness.js +18 -10
  280. package/dist/indexer/passes/memory-inference.js +25 -15
  281. package/dist/indexer/passes/metadata.js +412 -243
  282. package/dist/indexer/scan/doc-to-entry.js +160 -0
  283. package/dist/indexer/scan/drain-dir.js +134 -0
  284. package/dist/indexer/search/db-search.js +292 -108
  285. package/dist/indexer/search/fts-query.js +64 -0
  286. package/dist/indexer/search/ranking-contributors.js +145 -25
  287. package/dist/indexer/search/ranking-types.js +4 -0
  288. package/dist/indexer/search/ranking.js +28 -71
  289. package/dist/indexer/search/search-attribution.js +67 -0
  290. package/dist/indexer/search/search-fields.js +18 -3
  291. package/dist/indexer/search/search-hit-enrichers.js +30 -40
  292. package/dist/indexer/search/search-source.js +157 -111
  293. package/dist/indexer/search/semantic-status.js +4 -1
  294. package/dist/indexer/usage/usage-events.js +10 -30
  295. package/dist/indexer/walk/file-context.js +3 -45
  296. package/dist/indexer/walk/matchers.js +42 -34
  297. package/dist/indexer/walk/path-resolver.js +11 -5
  298. package/dist/indexer/walk/walker.js +42 -14
  299. package/dist/integrations/agent/builder-shared.js +7 -0
  300. package/dist/integrations/agent/builders.js +5 -56
  301. package/dist/integrations/agent/config.js +3 -143
  302. package/dist/integrations/agent/detect.js +17 -2
  303. package/dist/integrations/agent/engine-resolution.js +231 -0
  304. package/dist/integrations/agent/index.js +1 -2
  305. package/dist/integrations/agent/model-aliases.js +16 -2
  306. package/dist/integrations/agent/profiles.js +36 -62
  307. package/dist/integrations/agent/prompts.js +46 -18
  308. package/dist/integrations/agent/runner-dispatch.js +93 -4
  309. package/dist/integrations/agent/runner.js +76 -208
  310. package/dist/integrations/agent/spawn.js +88 -196
  311. package/dist/integrations/harnesses/aider/agent-builder.js +114 -0
  312. package/dist/integrations/harnesses/aider/index.js +48 -0
  313. package/dist/integrations/harnesses/aider/result-extractor.js +53 -0
  314. package/dist/integrations/harnesses/amazonq/agent-builder.js +147 -0
  315. package/dist/integrations/harnesses/amazonq/index.js +45 -0
  316. package/dist/integrations/harnesses/amazonq/result-extractor.js +48 -0
  317. package/dist/integrations/harnesses/claude/agent-builder.js +46 -8
  318. package/dist/integrations/harnesses/claude/config-import.js +1 -3
  319. package/dist/integrations/harnesses/claude/index.js +24 -35
  320. package/dist/integrations/harnesses/claude/result-extractor.js +52 -0
  321. package/dist/integrations/harnesses/claude/session-log.js +27 -75
  322. package/dist/integrations/harnesses/codex/agent-builder.js +138 -0
  323. package/dist/integrations/harnesses/codex/index.js +52 -0
  324. package/dist/integrations/harnesses/codex/result-extractor.js +73 -0
  325. package/dist/integrations/harnesses/copilot/agent-builder.js +122 -0
  326. package/dist/integrations/harnesses/copilot/index.js +48 -0
  327. package/dist/integrations/harnesses/copilot/result-extractor.js +151 -0
  328. package/dist/integrations/harnesses/gemini/agent-builder.js +120 -0
  329. package/dist/integrations/harnesses/gemini/index.js +48 -0
  330. package/dist/integrations/harnesses/gemini/result-extractor.js +121 -0
  331. package/dist/integrations/harnesses/ids.js +24 -0
  332. package/dist/integrations/harnesses/index.js +54 -34
  333. package/dist/integrations/harnesses/opencode/agent-builder.js +23 -5
  334. package/dist/integrations/harnesses/opencode/config-import.js +1 -3
  335. package/dist/integrations/harnesses/opencode/index.js +14 -32
  336. package/dist/integrations/harnesses/opencode/session-log.js +67 -125
  337. package/dist/integrations/harnesses/opencode-sdk/harness.js +51 -0
  338. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +681 -108
  339. package/dist/integrations/harnesses/openhands/agent-builder.js +128 -0
  340. package/dist/integrations/harnesses/openhands/index.js +48 -0
  341. package/dist/integrations/harnesses/openhands/result-extractor.js +103 -0
  342. package/dist/integrations/harnesses/pi/agent-builder.js +97 -0
  343. package/dist/integrations/harnesses/pi/index.js +45 -0
  344. package/dist/integrations/harnesses/pi/result-extractor.js +135 -0
  345. package/dist/integrations/harnesses/shared.js +17 -0
  346. package/dist/integrations/harnesses/types.js +43 -32
  347. package/dist/integrations/lockfile.js +211 -24
  348. package/dist/integrations/session-logs/index.js +36 -39
  349. package/dist/integrations/session-logs/provider-base.js +113 -0
  350. package/dist/llm/client.js +182 -110
  351. package/dist/llm/embedders/deterministic.js +2 -2
  352. package/dist/llm/embedders/remote.js +21 -9
  353. package/dist/llm/feature-gate.js +17 -57
  354. package/dist/llm/graph-extract.js +12 -13
  355. package/dist/llm/index-passes.js +8 -42
  356. package/dist/llm/memory-infer.js +144 -1
  357. package/dist/llm/metadata-enhance.js +45 -30
  358. package/dist/llm/structured-call.js +16 -8
  359. package/dist/llm/usage-persist.js +30 -5
  360. package/dist/llm/usage-telemetry.js +59 -6
  361. package/dist/output/cli-hints.js +1 -2
  362. package/dist/output/command-registry.js +27 -0
  363. package/dist/output/context.js +22 -7
  364. package/dist/output/format-exempt.js +80 -0
  365. package/dist/output/generic-render.js +251 -0
  366. package/dist/output/html-render.js +11 -16
  367. package/dist/output/render-registry.js +57 -0
  368. package/dist/output/renderers.js +14 -279
  369. package/dist/output/shapes/curate.js +10 -1
  370. package/dist/output/shapes/events.js +12 -7
  371. package/dist/output/shapes/helpers.js +58 -84
  372. package/dist/output/shapes/passthrough.js +11 -39
  373. package/dist/output/shapes/proposal/producer.js +15 -7
  374. package/dist/output/shapes/registry.js +12 -6
  375. package/dist/output/shapes.js +0 -9
  376. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  377. package/dist/output/text/bundle-show.js +7 -0
  378. package/dist/output/text/command-format.js +562 -0
  379. package/dist/output/text/env.js +1 -3
  380. package/dist/output/text/events.js +8 -7
  381. package/dist/output/text/helpers.js +15 -1164
  382. package/dist/output/text/proposal/producer.js +4 -2
  383. package/dist/output/text/proposal-format.js +202 -0
  384. package/dist/output/text/registry-commands.js +1 -2
  385. package/dist/output/text/registry.js +12 -6
  386. package/dist/output/text/show-directives.js +117 -0
  387. package/dist/output/text/show-format.js +103 -0
  388. package/dist/output/text/sync.js +5 -0
  389. package/dist/output/text/workflow-format.js +332 -0
  390. package/dist/output/text/workflow.js +3 -2
  391. package/dist/output/text.js +10 -19
  392. package/dist/registry/factory.js +4 -6
  393. package/dist/registry/origin-resolve.js +16 -27
  394. package/dist/registry/providers/skills-sh.js +3 -3
  395. package/dist/registry/providers/static-index.js +15 -25
  396. package/dist/registry/resolve.js +43 -94
  397. package/dist/registry/semver.js +43 -0
  398. package/dist/runtime.js +81 -12
  399. package/dist/scripts/akm-migrate.js +35529 -0
  400. package/dist/setup/detect.js +5 -7
  401. package/dist/setup/detected-engines.js +136 -0
  402. package/dist/setup/engine-config.js +100 -0
  403. package/dist/setup/registry-stash-loader.js +3 -3
  404. package/dist/setup/semantic-assets.js +12 -9
  405. package/dist/setup/setup.js +444 -208
  406. package/dist/setup/steps/connection-shared.js +120 -0
  407. package/dist/setup/steps/connection.js +108 -305
  408. package/dist/setup/steps/platforms.js +13 -12
  409. package/dist/setup/steps/semantic.js +15 -3
  410. package/dist/setup/steps/sources.js +21 -15
  411. package/dist/setup/steps/stashdir.js +6 -4
  412. package/dist/setup/steps/tasks.js +236 -119
  413. package/dist/setup/steps.js +3 -2
  414. package/dist/sources/freshness.js +39 -0
  415. package/dist/sources/provider-factory.js +11 -17
  416. package/dist/sources/providers/filesystem.js +2 -3
  417. package/dist/sources/providers/git-install.js +278 -34
  418. package/dist/sources/providers/git-provider.js +54 -56
  419. package/dist/sources/providers/git-stash.js +420 -91
  420. package/dist/sources/providers/git.js +2 -2
  421. package/dist/sources/providers/npm.js +16 -19
  422. package/dist/sources/providers/provider-utils.js +47 -22
  423. package/dist/sources/providers/sync-from-ref.js +3 -9
  424. package/dist/sources/providers/website.js +2 -2
  425. package/dist/sources/resolve.js +11 -10
  426. package/dist/sources/snapshot-fetchers/types.js +4 -0
  427. package/dist/sources/{website-ingest.js → snapshot-fetchers/website-ingest.js} +110 -41
  428. package/dist/storage/database.js +60 -4
  429. package/dist/storage/engines/sqlite-migrations.js +156 -5
  430. package/dist/storage/locations.js +1 -2
  431. package/dist/storage/repositories/canaries-repository.js +1 -1
  432. package/dist/storage/repositories/events-repository.js +51 -11
  433. package/dist/storage/repositories/improve-runs-repository.js +6 -32
  434. package/dist/storage/repositories/index-connection.js +79 -0
  435. package/dist/storage/repositories/index-db.js +4 -3
  436. package/dist/storage/repositories/index-entries-repository.js +863 -0
  437. package/dist/{indexer/db/entry-mapper.js → storage/repositories/index-entry-mapper.js} +19 -2
  438. package/dist/storage/repositories/index-entry-types.js +4 -0
  439. package/dist/storage/repositories/index-fts-repository.js +167 -0
  440. package/dist/storage/repositories/index-llm-cache-repository.js +108 -0
  441. package/dist/storage/repositories/index-meta-repository.js +49 -0
  442. package/dist/{indexer/db/schema.js → storage/repositories/index-schema.js} +226 -100
  443. package/dist/storage/repositories/index-sql.js +12 -0
  444. package/dist/storage/repositories/index-utility-repository.js +356 -0
  445. package/dist/storage/repositories/index-vec-repository.js +250 -0
  446. package/dist/storage/repositories/outcome-repository.js +119 -0
  447. package/dist/storage/repositories/proposals-repository.js +317 -75
  448. package/dist/storage/repositories/registry-cache.js +1 -1
  449. package/dist/storage/repositories/salience-repository.js +172 -0
  450. package/dist/storage/repositories/task-history-repository.js +110 -3
  451. package/dist/storage/repositories/workflow-runs-repository.js +240 -19
  452. package/dist/tasks/backends/cron.js +169 -46
  453. package/dist/tasks/backends/exec-utils.js +76 -3
  454. package/dist/tasks/backends/index.js +6 -9
  455. package/dist/tasks/backends/launchd.js +292 -55
  456. package/dist/tasks/backends/schtasks.js +557 -70
  457. package/dist/tasks/backends/types.js +4 -0
  458. package/dist/tasks/command-executable.js +93 -0
  459. package/dist/tasks/embedded.js +56 -38
  460. package/dist/tasks/parser.js +156 -64
  461. package/dist/tasks/resolve-akm-bin.js +144 -51
  462. package/dist/tasks/runner.js +377 -209
  463. package/dist/tasks/schedule.js +108 -19
  464. package/dist/tasks/scheduler-invocation.js +296 -0
  465. package/dist/tasks/schema.js +1 -1
  466. package/dist/tasks/task-id.js +35 -0
  467. package/dist/tasks/validator.js +30 -16
  468. package/dist/text-import-hook.mjs +1 -1
  469. package/dist/workflows/authoring/authoring.js +104 -43
  470. package/dist/workflows/authoring/scope-key.js +1 -1
  471. package/dist/workflows/cli.js +0 -16
  472. package/dist/workflows/concurrency-policy.js +15 -0
  473. package/dist/workflows/exec/brief.js +450 -0
  474. package/dist/workflows/exec/frozen-judge.js +47 -0
  475. package/dist/workflows/exec/native-executor.js +1038 -0
  476. package/dist/workflows/exec/param-secrets.js +115 -0
  477. package/dist/workflows/exec/report.js +1460 -0
  478. package/dist/workflows/exec/run-workflow.js +602 -0
  479. package/dist/workflows/exec/scheduler.js +71 -0
  480. package/dist/workflows/exec/step-work.js +1190 -0
  481. package/dist/workflows/exec/unit-writer.js +23 -0
  482. package/dist/workflows/exec/workflow-engine-gate.js +67 -0
  483. package/dist/workflows/exec/worktree.js +171 -0
  484. package/dist/workflows/ir/compile.js +246 -0
  485. package/dist/workflows/ir/freeze.js +233 -0
  486. package/dist/workflows/ir/params.js +54 -0
  487. package/dist/workflows/ir/plan-hash.js +68 -0
  488. package/dist/workflows/ir/schema.js +540 -0
  489. package/dist/workflows/parser.js +878 -304
  490. package/dist/workflows/program/expressions.js +181 -0
  491. package/dist/workflows/program/schema.js +51 -0
  492. package/dist/workflows/renderer.js +100 -45
  493. package/dist/workflows/resource-limits.js +22 -0
  494. package/dist/workflows/runtime/agent-identity.js +59 -14
  495. package/dist/workflows/runtime/checkin.js +1 -1
  496. package/dist/workflows/runtime/plan-classifier.js +131 -0
  497. package/dist/workflows/runtime/runs.js +376 -119
  498. package/dist/workflows/runtime/unit-checkin.js +45 -0
  499. package/dist/workflows/runtime/unit-phases.js +20 -0
  500. package/dist/workflows/runtime/workflow-asset-loader.js +241 -40
  501. package/dist/workflows/schema.js +1 -11
  502. package/dist/workflows/validate-summary.js +2 -3
  503. package/dist/workflows/validator.js +52 -30
  504. package/docs/README.md +42 -78
  505. package/docs/migration/README.md +8 -0
  506. package/docs/migration/release-notes/0.6.0.md +1 -1
  507. package/docs/migration/release-notes/0.7.0.md +9 -8
  508. package/docs/migration/release-notes/0.9.0.md +158 -14
  509. package/docs/migration/v0.7-to-v0.8.md +46 -47
  510. package/docs/migration/v0.8-to-v0.9.md +844 -0
  511. package/docs/reference/README.md +12 -0
  512. package/docs/reference/data-and-telemetry.md +333 -0
  513. package/package.json +21 -17
  514. package/schemas/akm-asset-envelope.json +93 -0
  515. package/schemas/akm-config.json +4636 -0
  516. package/schemas/akm-task.json +87 -0
  517. package/schemas/akm-workflow.json +373 -0
  518. package/dist/akm-migrate-storage +0 -38
  519. package/dist/assets/help/help-accept.md +0 -12
  520. package/dist/assets/help/help-improve.md +0 -84
  521. package/dist/assets/help/help-proposals.md +0 -17
  522. package/dist/assets/help/help-propose.md +0 -17
  523. package/dist/assets/help/help-reject.md +0 -11
  524. package/dist/assets/profiles/frequent.json +0 -13
  525. package/dist/assets/profiles/recombine-only.json +0 -21
  526. package/dist/assets/profiles/reflect-distill.json +0 -30
  527. package/dist/assets/profiles/synthesize.json +0 -15
  528. package/dist/assets/prompts/procedural-system.md +0 -44
  529. package/dist/assets/prompts/recombine-system.md +0 -40
  530. package/dist/assets/prompts/staleness-detect-system.md +0 -6
  531. package/dist/assets/tasks/core/backup.yml +0 -4
  532. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  533. package/dist/assets/templates/html/default.html +0 -78
  534. package/dist/assets/templates/html/vendor/echarts.min.js +0 -45
  535. package/dist/assets/wiki/index-template.md +0 -12
  536. package/dist/assets/wiki/ingest-workflow-template.md +0 -83
  537. package/dist/assets/wiki/log-template.md +0 -8
  538. package/dist/assets/wiki/schema-template.md +0 -61
  539. package/dist/cli/config-migrate.js +0 -150
  540. package/dist/cli/config-validate.js +0 -39
  541. package/dist/commands/graph/graph-cli.js +0 -124
  542. package/dist/commands/graph/graph.js +0 -487
  543. package/dist/commands/improve/calibration.js +0 -161
  544. package/dist/commands/improve/dedup.js +0 -482
  545. package/dist/commands/improve/extract-watch.js +0 -140
  546. package/dist/commands/improve/hot-probation.js +0 -45
  547. package/dist/commands/improve/improve-auto-accept.js +0 -276
  548. package/dist/commands/improve/improve-profiles.js +0 -168
  549. package/dist/commands/improve/procedural.js +0 -398
  550. package/dist/commands/improve/recombine.js +0 -818
  551. package/dist/commands/improve/schema-similarity-gate.js +0 -168
  552. package/dist/commands/lint/agent-linter.js +0 -44
  553. package/dist/commands/lint/command-linter.js +0 -44
  554. package/dist/commands/lint/default-linter.js +0 -16
  555. package/dist/commands/lint/fact-linter.js +0 -39
  556. package/dist/commands/lint/knowledge-linter.js +0 -16
  557. package/dist/commands/lint/memory-linter.js +0 -61
  558. package/dist/commands/lint/registry.js +0 -41
  559. package/dist/commands/lint/skill-linter.js +0 -45
  560. package/dist/commands/lint/task-linter.js +0 -50
  561. package/dist/commands/lint/workflow-linter.js +0 -81
  562. package/dist/commands/proposal/legacy-import.js +0 -115
  563. package/dist/commands/sources/history.js +0 -196
  564. package/dist/commands/tasks/default-tasks.js +0 -186
  565. package/dist/commands/wiki-cli.js +0 -292
  566. package/dist/core/asset/asset-registry.js +0 -76
  567. package/dist/core/asset/asset-spec.js +0 -259
  568. package/dist/core/config/config-migration.js +0 -602
  569. package/dist/core/deep-merge.js +0 -38
  570. package/dist/core/eval/rank-metrics.js +0 -113
  571. package/dist/core/ripgrep/install.js +0 -163
  572. package/dist/core/ripgrep/resolve.js +0 -81
  573. package/dist/indexer/db/db.js +0 -1413
  574. package/dist/indexer/manifest.js +0 -170
  575. package/dist/indexer/passes/metadata-contributors.js +0 -31
  576. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -94
  577. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -49
  578. package/dist/llm/call-ai.js +0 -62
  579. package/dist/llm/memory-infer-impl.js +0 -138
  580. package/dist/output/shapes/distill.js +0 -14
  581. package/dist/output/shapes/history.js +0 -11
  582. package/dist/output/text/distill.js +0 -6
  583. package/dist/output/text/enable-disable.js +0 -8
  584. package/dist/output/text/history.js +0 -6
  585. package/dist/output/text/wiki.js +0 -16
  586. package/dist/registry/build-index.js +0 -386
  587. package/dist/scripts/migrate-storage.js +0 -19108
  588. package/dist/scripts/migrations/import-fs-improve-runs-to-db.js +0 -9411
  589. package/dist/scripts/migrations/v16-to-v17.js +0 -141
  590. package/dist/setup/legacy-config.js +0 -106
  591. package/dist/storage/repositories/consolidation-repository.js +0 -38
  592. package/dist/storage/repositories/recombine-repository.js +0 -213
  593. package/dist/wiki/wiki-templates.js +0 -15
  594. package/dist/wiki/wiki.js +0 -1012
  595. package/dist/workflows/db.js +0 -215
  596. package/docs/data-and-telemetry.md +0 -226
  597. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/registry.js +0 -0
  598. /package/dist/sources/{wiki-fetchers → snapshot-fetchers}/youtube.js +0 -0
@@ -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.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for lesson assets that capture compounding, hard-won judgment.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a lesson asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -40,4 +42,10 @@ Use a lesson to record:
40
42
  - Update an existing lesson when new feedback sharpens the same judgment.
41
43
  - Create a new lesson only when the trigger or failure mode is meaningfully different.
42
44
  - Deprecate or revise stale lessons instead of allowing contradictory guidance to accumulate.
43
- - When a lesson becomes broadly normative, consider promoting the stable rule into a `fact:conventions/...` asset.
45
+ - When a lesson becomes broadly normative, consider promoting the stable rule into a `facts/conventions/...` asset.
46
+
47
+ ## Placement & linking
48
+
49
+ - Lessons are **scope-born**: file them under the **project/client** they were
50
+ learned in (`lessons/projectA/token-refresh-gotcha`) and xref the asset the
51
+ lesson corrects or refines.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for memory assets using durable-context and provenance discipline.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a memory asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -36,3 +38,12 @@ Use a memory when a future agent would make a better decision by knowing a speci
36
38
  - Consolidate repeated memories into a clearer fact or knowledge asset.
37
39
  - Convert broad, stable conventions into `fact` assets.
38
40
  - Archive memories that are no longer current rather than letting stale context keep influencing agents.
41
+
42
+ ## Placement & linking
43
+
44
+ - Memories are **scope-born**: file them under the **current project/client**
45
+ slug (`memories/projectA/auth-token-refresh`) — the working context is the
46
+ answer, so no per-asset judgment is needed. Add the subject as a tag
47
+ (`tags: [auth, projectA]`) for cross-cutting recall.
48
+ - When a memory turns out to be domain-general, **append** a new
49
+ `knowledge/<domain>/…` asset that xrefs it — never rename the memory up a rung.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for script assets using agent-safe CLI helper principles.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a script asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -41,3 +43,10 @@ Use a script when a task is mechanical, repeatable, and better handled by a dete
41
43
  - Keep dangerous actions behind explicit flags.
42
44
  - When a script becomes a core operation, add or update a workflow that explains when to run it.
43
45
  - If the script encodes a convention, also document that convention in a fact or knowledge asset.
46
+
47
+ ## Placement & linking
48
+
49
+ - Scripts are **reuse-born**: file a general helper under a tool/domain slug
50
+ from `facts/conventions/domains` (`scripts/build/release`). Use the project slug
51
+ only when the script hard-codes project-specific paths, endpoints, or
52
+ credentials.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for skill assets as reusable, just-in-time procedural rulebooks.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a skill asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -38,3 +40,10 @@ Use a skill when the stash needs reusable procedural guidance for a recurring cl
38
40
  - Add companion knowledge docs when the skill needs background material that would bloat the main procedure.
39
41
  - Promote durable recurring corrections into the skill; leave one-off observations in memories or lessons.
40
42
  - Prefer small edits that preserve the skill’s operational shape over broad rewrites that erase tested guidance.
43
+
44
+ ## Placement & linking
45
+
46
+ - Skills are **reuse-born**: place `skills/<domain>/<name>/SKILL.md` under a
47
+ stable **domain** prefix from `facts/conventions/domains`
48
+ (`skills/testing/flaky-test-triage`) so any project finds and reuses it instead
49
+ of duplicating the procedure.
@@ -1,7 +1,9 @@
1
1
  ---
2
+ type: fact
2
3
  category: convention
3
4
  description: Soft authoring conventions for workflow assets using explicit operations, logging, and lintable steps.
4
5
  when_to_use: Surfaced to authoring agents when they write or revise a workflow asset.
6
+ updated: 2026-07-28
5
7
  ---
6
8
 
7
9
  <!--
@@ -41,3 +43,9 @@ Use a workflow when the task requires multiple steps, branching decisions, repea
41
43
  - Add logging expectations when the workflow creates durable state.
42
44
  - Extract reusable sub-procedures into skills or scripts when the workflow grows too broad.
43
45
  - Record recurring mistakes as lessons, then fold stable corrections back into the workflow.
46
+
47
+ ## Placement & linking
48
+
49
+ - Workflows are usually **global**: keep them at the type root or under a
50
+ tool/domain slug (`workflows/release-train`). Scoping a workflow to one project
51
+ rarely improves retrieval and adds rename risk.
@@ -0,0 +1,100 @@
1
+ ---
2
+ type: fact
3
+ category: convention
4
+ description: How to cross-link assets so retrieval compounds — a provenance xref when derived, sparse real associative xrefs, corrections as new assets, and canonical entity naming.
5
+ when_to_use: Surfaced to authoring agents when they create or revise any asset that derives from, corrects, or relates to another asset.
6
+ updated: 2026-07-28
7
+ ---
8
+
9
+ <!--
10
+ SOFT guidance only — advice, not a contract. Back-linking here is a RETRIEVAL
11
+ mechanism, not decoration: `xrefs:` frontmatter folds into the search index;
12
+ the entity/relation graph is extracted from BODY prose (memory + knowledge),
13
+ never from frontmatter. Over-linking degrades ranking, so these rules are
14
+ deliberately conservative. (LLM-wiki bundles carry their own xref system in
15
+ their pages' frontmatter — this convention is for in-stash assets.)
16
+ -->
17
+
18
+ # Back-linking conventions
19
+
20
+ Cross-references are how knowledge compounds instead of being re-derived every
21
+ session. In AKM they are also **indexed**: the strings in an asset's `xrefs:`
22
+ frontmatter fold into its search-hint text, and knowledge/memory bodies feed an
23
+ LLM-extracted entity/relation graph that boosts ranking. So links are a retrieval
24
+ lever — which means both too few and too many hurt.
25
+
26
+ ```yaml
27
+ ---
28
+ description: OAuth refresh-token race on token rotation
29
+ tags: [auth, projectA]
30
+ xrefs:
31
+ - knowledge/auth/vendor-x-token-api # provenance: what this was synthesized from
32
+ - lessons/projectA/token-refresh-gotcha # one real associative link
33
+ ---
34
+ ```
35
+
36
+ ## Link rules
37
+
38
+ - **One xref is mandatory when the asset derives from another: cite the source
39
+ ref** (`memories/projectA/token-quirk` xrefs `knowledge/auth/vendor-x-token-api`
40
+ — it also makes this asset findable from searches for its source). An
41
+ original observation with no source carries none — never invent provenance.
42
+ `akm remember`/`akm import` write this channel via `--xref <ref>`
43
+ (repeatable; refs are checked at write time). LLM-wiki bundles enforce the
44
+ analogous rule mechanically (`sources:` frontmatter citations); in-stash
45
+ provenance is discipline only.
46
+ - **Associative xrefs are discretionary — real relationships only.** Add one when
47
+ you already know a genuine load-bearing connection. Do **not** hit a link
48
+ quota by pointing at the topically-nearest sibling — a plausible-but-wrong
49
+ xref makes this asset a false search match for the other topic, and a wrong
50
+ relationship asserted in prose poisons the entity graph. A relationship you
51
+ want the graph to learn must be named in the body (e.g. open with "Corrects
52
+ knowledge/auth/oauth-refresh-races").
53
+ - **Cap total xrefs at ~5 (a heuristic, not a measured threshold).** Each xref
54
+ folds its ref tokens into THIS asset's search hints — past a handful, the
55
+ asset matches queries about several other topics and its own ranking signal
56
+ blurs.
57
+ - **Corrections are new assets; ingested material is immutable.** Treat
58
+ ingested raw material, vendored docs, and transcripts as
59
+ immutable-by-discipline: a hard-won fix is a new `lessons/` or `knowledge/`
60
+ asset that xrefs what it corrects.
61
+ Synthesized `knowledge/` pages are the rewritable layer — update them in
62
+ place. When a correction supersedes a standalone asset (memory OR knowledge),
63
+ also set the old asset's `beliefState: superseded` and
64
+ `supersededBy: [<new ref>]` — a metadata edit, not a content edit — so the
65
+ ranker demotes the stale version instead of letting it outrank your fix.
66
+ `akm remember`/`akm import` do both writes in one step via
67
+ `--supersedes <old ref>` (adds the xref and demotes the old asset).
68
+ - **Bidirectional back-links are best-effort.** Add a return xref only when you
69
+ are already editing the target in the same pass. Never require editing a
70
+ separate hot file just to add a back-xref — concurrent writes drop it under
71
+ last-writer-wins and no lint will notice.
72
+
73
+ ## Self-situating headers and canonical naming
74
+
75
+ Put the one-line orientation in `description:` and the trigger conditions in
76
+ `when_to_use:` — those are indexed fields; body prose is not indexed by
77
+ default (only headings reach the index; the opt-in `index.indexBodyOpening`
78
+ flag adds just the first body paragraph, at the lowest weight —
79
+ `description:`/`when_to_use:` remain the primary orientation channel). Then
80
+ open the body with a plain title plus a one-line
81
+ orientation naming what it is, its scope/domain, and its key entities in
82
+ canonical spelling (`Postgres`, `OAuth`, `TLS`, `Acme`) — the entity/relation
83
+ graph is extracted from body prose, and readers land here from `akm show`.
84
+ Keep the canonical-spelling list in `facts/conventions/domains` so agents don't
85
+ fragment `postgres` / `postgresql` / `pg`.
86
+
87
+ ## Hubs are optional, not per-namespace obligations
88
+
89
+ A hub (a `knowledge/` overview page that xrefs the key assets in a domain) is
90
+ worth authoring for a **few genuinely high-traffic domains**. Do **not**
91
+ mandate a hub per namespace and do not edit a hub on every write: that is O(n)
92
+ maintenance, a concurrent-write contention point, and it flattens the multi-hop
93
+ graph into a namespace-wide star. Let the FTS index be the catalog; spend the
94
+ effort on per-asset self-situating headers instead.
95
+
96
+ ## Keep assets atomic
97
+
98
+ One concept per asset. If a note covers two concepts, write two assets and xref
99
+ them — atomic assets give the ranker clean, single-topic targets and give you a
100
+ real relationship to link rather than a blurred one to bury.
@@ -0,0 +1,64 @@
1
+ ---
2
+ type: fact
3
+ category: convention
4
+ description: The closed vocabulary of domain prefixes for reuse-born assets (knowledge/skill/fact/script), plus canonical entity spellings. Edit this to match your stash.
5
+ when_to_use: Surfaced to authoring agents alongside the other convention facts; consult it when picking a domain prefix for a knowledge, skill, fact, or script asset.
6
+ updated: 2026-07-28
7
+ ---
8
+
9
+ <!--
10
+ SOFT guidance only. This is the domain vocabulary that `organization.md` refers
11
+ to. It is intentionally SHORT and STARTER — replace these with the domains your
12
+ stash actually accumulates. A closed list keeps agents from coining a new
13
+ folder per session (which fragments the tree and splits slug search); the flat
14
+ type-root fallback in organization.md handles anything that doesn't fit yet.
15
+ -->
16
+
17
+ # Domain vocabulary
18
+
19
+ Reuse-born assets (`knowledge`, `skill`, `fact`, `script`) take a
20
+ **domain prefix** from this list, e.g. `knowledge/auth/oauth-refresh-races`,
21
+ `skills/testing/flaky-test-triage`. Pick the closest match. If two fit, take the one naming the
22
+ SUBJECT of the doc (what it teaches, not where it was met) and put the other in
23
+ tags; if still tied, the earlier entry in this list wins. If nothing fits, write
24
+ the asset at the type root and propose an addition here — do **not** invent a
25
+ one-off domain mid-task.
26
+
27
+ ## Starter domains
28
+
29
+ Add, remove, and rename to fit your stash. Keep the list short (roughly a dozen)
30
+ — the whole list rides along in every authoring prompt, and a short closed list
31
+ is what keeps two agents picking the same slug. Add a subdomain only where
32
+ volume justifies it.
33
+
34
+ - `auth` — authentication, authorization, tokens, sessions
35
+ - `networking` — protocols, TLS, DNS, proxies, connectivity
36
+ - `databases` — storage engines, queries, migrations (subdomain e.g. `databases/postgres`)
37
+ - `testing` — test strategy, fixtures, flaky-test triage, coverage
38
+ - `build` — build systems, packaging, CI pipelines
39
+ - `cloud` — infra, deploy targets, IaC (subdomain e.g. `cloud/aws`)
40
+ - `observability` — logging, metrics, tracing, alerting
41
+ - `security` — threat modeling, secrets handling, hardening
42
+ - `frontend` — UI, rendering, client state
43
+ - `data-pipelines` — ETL, streaming, batch processing
44
+ - `tooling` — dev tooling, editor/agent integration, scripts
45
+ - `policies` — organizational/business rules the work must obey (PII handling, licensing) (`facts/policies/…`)
46
+ - `conventions` — stash authoring house-rules (`facts/conventions/…`; auto-surfaced to authoring agents — keep them in this directory)
47
+
48
+ ## Canonical entity spellings
49
+
50
+ Pick ONE name per entity and use it everywhere in asset **bodies** — retrieval
51
+ is case-insensitive but treats aliases as different entities, so alias variants
52
+ fragment the entity graph. Extend as your stash grows.
53
+
54
+ - Postgres (not postgresql / pg)
55
+ - Kubernetes (not k8s)
56
+ - TLS (not ssl when you mean TLS)
57
+ - OAuth
58
+
59
+ Project and client slugs are **not** listed here — those are scope slugs for
60
+ scope-born types (`memory`, `lesson`, `task`, `env`, `secret`). Keep their
61
+ canonical spellings in a `category: meta` fact (e.g. `facts/active-projects`) so
62
+ they auto-inject at authoring time — not in `.meta/`, which is unindexed and
63
+ invisible mid-task — and `akm search` for an existing spelling before minting a
64
+ new one.
@@ -0,0 +1,136 @@
1
+ ---
2
+ type: fact
3
+ category: convention
4
+ description: Where to place an asset in the stash — the one path partition axis, chosen by asset type, so refs stay stable and slug search (akm search "<slug>" --type <type>) co-locates related assets.
5
+ when_to_use: Surfaced to authoring agents when they create or move any asset and must decide its subdirectory/name.
6
+ updated: 2026-07-28
7
+ ---
8
+
9
+ <!--
10
+ SOFT guidance only — advice, not a contract. Nothing here is enforced by the
11
+ proposal gate. It steers WHERE assets go so that path-derived refs stay stable
12
+ and scoped search (`akm search "<slug>" --type <type>`) keeps working. Tune
13
+ the axis choices and the domain vocabulary to match how your stash is queried.
14
+ -->
15
+
16
+ # Stash organization conventions
17
+
18
+ A file's path under its type directory **becomes part of its ref**
19
+ (`knowledge/auth/oauth-refresh-races.md` → `knowledge/auth/oauth-refresh-races`).
20
+ That ref is an address other assets cite, and its segments are search terms —
21
+ `akm search "projectA" --type memory` reconstructs a project's memories. The
22
+ path is therefore the one facet you **cannot express twice and cannot change
23
+ without breaking the ref** — so spend it deliberately, on exactly one axis.
24
+
25
+ Retrieval is search, not browse: no one walks these folders at query time. A
26
+ subdirectory buys you three things: its tokens are indexed as part of the
27
+ asset's **name** (the highest-weighted search field), they are auto-added to
28
+ `tags` (even when you set `tags` explicitly), and for scope-born types a slug
29
+ matching the current repo's name earns an automatic in-project ranking boost.
30
+ Every other facet belongs in frontmatter, where the index can actually read it.
31
+
32
+ ## Choose the partition axis by asset TYPE, not per-asset judgment
33
+
34
+ Deciding "project or domain?" per asset is non-deterministic — two agents guess
35
+ differently and bake the wrong guess into an immutable ref. Decide by type:
36
+
37
+ - **Scope-born types → current project / client / team slug.**
38
+ `memory`, `lesson`, `task`, `env`, `secret`. These are born bound to the work
39
+ in front of you, so the working context *is* the answer — no judgment needed.
40
+ When the scope is a single repo, use its repo/package name as the slug (as
41
+ `git remote`/package.json spell it) — ranking auto-boosts assets whose name
42
+ or tags match the current repo. Client/team slugs get no such boost; just
43
+ reuse the existing spelling.
44
+ - `memories/projectA/auth-token-refresh`
45
+ - `lessons/clientX/migration-rollback-gotcha`
46
+ - `secrets/clientX/api-key`
47
+ - **Reuse-born types → stable domain from a short vocabulary.**
48
+ `knowledge`, `skill`, `fact`, `script`. These are meant to be reused
49
+ across projects, so co-locate them by subject — any project retrieves them
50
+ with `akm search "<domain>" --type <type>`.
51
+ - `knowledge/auth/oauth-refresh-races`
52
+ - `skills/testing/flaky-test-triage`
53
+ - `facts/policies/pii-handling`
54
+ - **Global-by-nature types → type root or a tool slug.**
55
+ `command`, `agent`, `workflow`, and stash-wide `env`. Scoping these to a
56
+ project rarely improves precision and only adds rename risk. `env` defaults
57
+ to the project/client slug; only an env consumed by every project sits at
58
+ the type root — if any single project would break when it changes, it is
59
+ scope-born.
60
+
61
+ **Why reuse types don't take the project axis:** project relevance is already
62
+ recovered at query time — AKM blends a per-project usage signal into ranking
63
+ (scoped utility, keyed off the current repo, not the asset's path). Free the
64
+ scarce path segment for the domain — the *only* handle that co-locates
65
+ cross-project reuse.
66
+
67
+ ## Placement rules
68
+
69
+ - **One axis only.** Never encode two dimensions in the path
70
+ (`client/project/subsystem`, or `domain+status`). Second dimensions go in tags.
71
+ - **Depth 1 by default, 2 max**, and only for strict stable containment
72
+ (`knowledge/databases/postgres/…`, `secret/clientX/projectA/…`). Never a third
73
+ semantic level — deeper axes go in frontmatter.
74
+ - **Segments are lowercase-hyphen semantic tokens** that read as query terms
75
+ (`connection-pooling`, `tls-handshake-debugging`) — never opaque IDs, numbers,
76
+ or Johnny.Decimal-style codes, which carry no search signal.
77
+ - **Never put a volatile facet in the path** — status, date, version, priority,
78
+ author, `wip`/`done`. Each one changes and forces a ref-breaking rename. They
79
+ belong in frontmatter tags.
80
+ - **Flat fallback beats an invented folder.** If no domain fits a reuse-type
81
+ asset, write it at the type root (`knowledge/http-retry-basics`) rather than
82
+ coining a one-off domain. An unneeded folder is pure rename liability; propose
83
+ a vocabulary addition instead of fragmenting the tree.
84
+ - **Reuse an existing slug before minting a new one.** Before coining a new
85
+ project/client/domain slug, `akm search` for the existing spelling
86
+ (`acme` vs `acme-corp`) so the prefix does not fragment. Keep the domain
87
+ vocabulary in `facts/conventions/domains`.
88
+ - **Off-axis facets go in `tags:`, not a bare field.** The indexed FTS fields are
89
+ name, description, tags, hints, and content (headings only — body prose is
90
+ not indexed by default; the opt-in `index.indexBodyOpening` flag adds just
91
+ the first body paragraph, at the lowest weight) — there is **no `project`
92
+ field**, so `project: projectA` in
93
+ frontmatter is invisible to search. Put the off-axis facet in `tags` instead
94
+ (a project-scoped memory adds `tags: [auth]`; a domain-scoped asset genuinely
95
+ tied to a project adds `tags: [projectA]` sparingly).
96
+ - **Directory tokens join `tags` on their own.** The scope/domain segments of
97
+ the path are always auto-added to `tags` — even when you set `tags`
98
+ explicitly — so there is no need to restate them; the tag-match ranking
99
+ boost fires for the scope token either way. Filename tokens are auto-added
100
+ only when `tags` is empty.
101
+
102
+ ## Renames and evolution
103
+
104
+ - **A ref is chosen once. Default to not renaming.** A rename dangles
105
+ inbound xrefs silently at write time — nothing catches the breakage until
106
+ the next `akm lint` run flags the dead frontmatter refs (`missing-ref`) —
107
+ while the dead ref string keeps scoring in FTS, and a renamed file
108
+ is a new index entry, so the asset's accumulated usage-ranking history
109
+ resets.
110
+ - **A rename is delete plus create, and you do it by hand.** There is no
111
+ `akm mv` — moving the file strands every inbound ref and gives the
112
+ destination a fresh identity. If a rename is truly unavoidable:
113
+
114
+ ```sh
115
+ mv memories/old-note.md memories/new-note.md
116
+ # update any intentional refs (fully qualified: bundle//memories/old-note)
117
+ akm index
118
+ akm lint # confirms nothing dangles
119
+ ```
120
+
121
+ A memory's `.derived.md` twin must move with its base. Citing files in
122
+ read-only sources cannot be fixed at all — another reason not to rename. The
123
+ asset's accumulated usage-ranking history resets unless you carry it over
124
+ with `bun scripts/rekey-asset-ref.ts <old-ref> <new-ref>` (a maintainer
125
+ script, run from a source clone after the move and before `akm index`).
126
+ - When a project-scoped note turns out to be domain-general, **append, don't
127
+ promote**: write a new `knowledge/<domain>/…` asset that xrefs the originating
128
+ memory. Never rename the memory up a rung — that breaks its ref. The atomic
129
+ note still serves factoid recall; the new synthesis serves reuse; the xref
130
+ bridges them.
131
+
132
+ ## Real isolation is a separate stash, not a folder
133
+
134
+ A path prefix is a ranking scope, not a security boundary. When you need enforced
135
+ isolation (client confidentiality, secret-leak containment), mount a **separate
136
+ stash** and let source resolution keep it apart — don't rely on a subdirectory.
@@ -1,4 +1,5 @@
1
+ version: 2
1
2
  schedule: "*/30 * * * *"
2
- command: akm extract
3
+ command: akm proposal extract --auto
3
4
  enabled: true
4
- description: Extract insights from session files every 30 min
5
+ description: Opt-in all-harness session extraction every 30 min
@@ -1,4 +1,5 @@
1
+ version: 2
1
2
  schedule: "0 2 * * *"
2
- command: akm improve --auto-accept safe
3
+ command: akm improve
3
4
  enabled: true
4
5
  description: Run improve pipeline nightly
@@ -1,3 +1,4 @@
1
+ version: 2
1
2
  schedule: "0 4 * * *"
2
3
  command: akm index
3
4
  enabled: true
@@ -1,3 +1,4 @@
1
+ version: 2
1
2
  schedule: "*/15 * * * *"
2
3
  command: akm sync
3
4
  enabled: true
@@ -1,4 +1,5 @@
1
+ version: 2
1
2
  schedule: "0 9 * * 1"
2
- command: akm info --check-version
3
+ command: akm upgrade --check
3
4
  enabled: true
4
5
  description: Weekly check for new akm releases
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "10 3 * * 0"
3
+ command: akm improve --strategy graph-refresh --skip-if-locked
4
+ enabled: true
5
+ description: Full-corpus graph rebuild (weekly Sunday 3:10am)
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ schedule: "0 4 * * *"
3
+ command: akm improve --strategy catchup --skip-if-locked
4
+ # Manual-recovery task: ships disabled (the retired registerDefaultTasks
5
+ # marked it enableMode: "manual"). `akm task run` works while disabled;
6
+ # opting into the schedule is `enabled: true` + `akm task sync`.
7
+ enabled: false
8
+ description: Manual recovery — consolidation + triage drain (run on demand via `akm task run akm-improve-catchup`)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "20 */4 * * *"
3
+ command: akm improve --strategy consolidate --skip-if-locked
4
+ enabled: true
5
+ description: Consolidation-only pass (every 4h at :20)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "40 * * * *"
3
+ command: akm improve --strategy frequent --skip-if-locked
4
+ enabled: true
5
+ description: Frequent inference pass (hourly at :40; improve-stage extract off)
@@ -0,0 +1,5 @@
1
+ version: 2
2
+ schedule: "15 2 * * *"
3
+ command: akm improve --strategy thorough --skip-if-locked
4
+ enabled: true
5
+ description: Full nightly quality sweep (daily 2:15am; suggested for server installs)
@@ -4,9 +4,8 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>%%REPORT_TITLE%%</title>
7
- <!-- %%ECHARTS_TAG%% : either an inlined <script>…echarts…</script> (self-contained
8
- / deterministic / offline) or a CDN <script src> when the renderer is run
9
- with --echarts cdn. -->
7
+ <!-- %%ECHARTS_TAG%% : a <script src> pointed at the jsDelivr CDN (chunk-9
8
+ WI-9.4d) — viewing this report requires network access. -->
10
9
  %%ECHARTS_TAG%%
11
10
  <style>
12
11
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@@ -391,7 +390,7 @@
391
390
  <div class="table-wrap">
392
391
  <table>
393
392
  <thead>
394
- <tr><th>Started</th><th>Task</th><th>Wall</th><th>Promoted</th><th>Merged</th><th>Contradicted</th><th>MI Written</th><th>Entities</th><th>Lint Fixed</th><th>Status</th></tr>
393
+ <tr><th>Started</th><th>Task</th><th>Strategy</th><th>Wall</th><th>Promoted</th><th>Merged</th><th>Contradicted</th><th>MI Written</th><th>Entities</th><th>Lint Fixed</th><th>Status</th></tr>
395
394
  </thead>
396
395
  <tbody id="lastRunsTable"></tbody>
397
396
  </table>
@@ -683,12 +682,14 @@ tbody.innerHTML = '';
683
682
  const ts = `${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
684
683
  const dur = r.wallTimeMs ? (r.wallTimeMs / 60000).toFixed(1) + 'm' : '—';
685
684
  const task = r.taskId || 'manual';
685
+ const strategy = r.strategy || '—';
686
686
  const badge = r.ok
687
687
  ? '<span class="badge-pill badge-pass" style="padding:2px 8px;font-size:11px;"><span class="dot dot-pass" style="width:6px;height:6px;"></span>&nbsp;ok</span>'
688
688
  : '<span class="badge-pill badge-fail" style="padding:2px 8px;font-size:11px;"><span class="dot dot-fail" style="width:6px;height:6px;"></span>&nbsp;failed</span>';
689
689
  tr.innerHTML = `
690
690
  <td style="font-family:monospace;font-size:12px;">${ts}</td>
691
691
  <td><code>${task}</code></td>
692
+ <td><code>${strategy}</code></td>
692
693
  <td>${dur}</td>
693
694
  <td style="color:var(--accent);font-weight:600;">${r.promoted || 0}</td>
694
695
  <td>${r.merged || 0}</td>
@@ -1,24 +1,40 @@
1
1
  ---
2
- description: Describe what this workflow accomplishes
3
- tags:
4
- - example
2
+ type: workflow
3
+ description: One-sentence summary of what this workflow accomplishes.
4
+ updated: 2026-01-01
5
+ tags: [example]
5
6
  params:
6
- example_param: Explain this parameter
7
+ example_param: { type: string, description: Explain this parameter }
8
+ steps:
9
+ - id: first-step
10
+ - id: second-step
11
+ inputs: [steps.first-step.output]
7
12
  ---
8
13
 
9
- # Workflow: {{TITLE}}
14
+ # {{TITLE}}
10
15
 
11
- ## Step: {{FIRST_STEP_TITLE}}
12
- Step ID: {{FIRST_STEP_ID}}
16
+ Free preamble prose describing what this workflow does. It is indexed for
17
+ search and shown in `akm show`, but it is never dispatched to a step.
13
18
 
14
- ### Instructions
15
- Describe what to do in this step.
19
+ ## first-step
16
20
 
17
- ### Completion Criteria
18
- - Confirm the first step is complete
21
+ Describe what to do in this step. Refer to run parameters in plain
22
+ language — for example, "read the value given by the `example_param`
23
+ parameter" — never as a template expression like `{{ example_param }}`.
19
24
 
20
- ## Step: Second Step
21
- Step ID: second-step
25
+ ## second-step
22
26
 
23
- ### Instructions
24
- Describe what happens next.
27
+ Describe what happens next, using the first step's artifact — attached to
28
+ this unit as context because this step declares
29
+ `inputs: [steps.first-step.output]` above — referred to in prose as "the
30
+ first step's attached artifact."
31
+
32
+ ### gate
33
+
34
+ A `### gate` sub-heading is the step's completion rubric: the judge
35
+ receives this whole section byte-exact when validation is available. Omit
36
+ the heading or leave its text empty to skip validation. An unavailable or
37
+ malformed judge also skips validation.
38
+
39
+ - Confirm the step accomplished what it set out to do.
40
+ - Confirm nothing required was silently skipped.