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,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.