akm-cli 0.9.0-rc.8 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/CHANGELOG.md +1063 -44
  2. package/README.md +51 -25
  3. package/SECURITY.md +14 -1
  4. package/STABILITY.md +497 -0
  5. package/dist/akm +148 -35
  6. package/dist/{akm-migrate-storage → akm-migrate} +6 -9
  7. package/dist/assets/hints/cli-hints-full.md +223 -95
  8. package/dist/assets/hints/cli-hints-short.md +85 -22
  9. package/dist/assets/improve-strategies/default.json +1 -1
  10. package/dist/assets/improve-strategies/reflect-distill.json +1 -1
  11. package/dist/assets/prompts/memory-infer-user.md +2 -3
  12. package/dist/assets/stash-skeleton/README.md +6 -5
  13. package/dist/assets/stash-skeleton/facts/conventions/assets/agent.md +2 -0
  14. package/dist/assets/stash-skeleton/facts/conventions/assets/command.md +2 -0
  15. package/dist/assets/stash-skeleton/facts/conventions/assets/fact.md +2 -0
  16. package/dist/assets/stash-skeleton/facts/conventions/assets/knowledge.md +2 -0
  17. package/dist/assets/stash-skeleton/facts/conventions/assets/lesson.md +2 -0
  18. package/dist/assets/stash-skeleton/facts/conventions/assets/memory.md +2 -0
  19. package/dist/assets/stash-skeleton/facts/conventions/assets/script.md +2 -0
  20. package/dist/assets/stash-skeleton/facts/conventions/assets/skill.md +2 -0
  21. package/dist/assets/stash-skeleton/facts/conventions/assets/workflow.md +2 -0
  22. package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +2 -0
  23. package/dist/assets/stash-skeleton/facts/conventions/domains.md +2 -0
  24. package/dist/assets/stash-skeleton/facts/conventions/organization.md +20 -9
  25. package/dist/assets/tasks/core/extract.yml +1 -1
  26. package/dist/assets/tasks/core/version-check.yml +1 -1
  27. package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +5 -0
  28. package/dist/assets/tasks/improve/akm-improve-catchup.yml +8 -0
  29. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +5 -0
  30. package/dist/assets/tasks/improve/akm-improve-frequent.yml +5 -0
  31. package/dist/assets/tasks/improve/akm-improve-nightly.yml +5 -0
  32. package/dist/assets/templates/html/health.html +1 -3
  33. package/dist/assets/workflows/workflow-template.md +32 -15
  34. package/dist/cli/invocation.js +40 -15
  35. package/dist/cli/parse-args.js +0 -22
  36. package/dist/cli/retired-commands.js +121 -0
  37. package/dist/cli/shared.js +154 -22
  38. package/dist/cli/unknown-flags.js +236 -0
  39. package/dist/cli-node.mjs +2 -1
  40. package/dist/cli.js +696 -258
  41. package/dist/commands/agent/agent-dispatch.js +14 -3
  42. package/dist/commands/agent/contribute-cli.js +73 -88
  43. package/dist/commands/completions.js +79 -22
  44. package/dist/commands/config-cli.js +17 -150
  45. package/dist/commands/env/env-cli.js +59 -143
  46. package/dist/commands/env/env.js +12 -163
  47. package/dist/commands/env/marker-path.js +6 -0
  48. package/dist/commands/env/secret-cli.js +36 -66
  49. package/dist/commands/env/secret.js +24 -57
  50. package/dist/commands/feedback-cli.js +141 -87
  51. package/dist/commands/health/accept-rate.js +58 -0
  52. package/dist/commands/health/advisories.js +3 -4
  53. package/dist/commands/health/checks.js +85 -23
  54. package/dist/commands/health/html-report.js +7 -10
  55. package/dist/commands/health/improve-metrics.js +25 -83
  56. package/dist/commands/health/md-report.js +5 -9
  57. package/dist/commands/health/metrics.js +62 -20
  58. package/dist/commands/health/renderers.js +47 -0
  59. package/dist/commands/health/report-view-model.js +4 -5
  60. package/dist/commands/health/stash-exposure.js +1 -1
  61. package/dist/commands/health/surfaces.js +3 -48
  62. package/dist/commands/health/task-runs.js +3 -67
  63. package/dist/commands/health/types-improve.js +7 -0
  64. package/dist/commands/health.js +99 -28
  65. package/dist/commands/improve/anti-collapse.js +2 -2
  66. package/dist/commands/improve/autonomy-gate.js +68 -0
  67. package/dist/commands/improve/collapse-detector.js +41 -40
  68. package/dist/commands/improve/consolidate/eligibility.js +1 -23
  69. package/dist/commands/improve/consolidate/merge.js +4 -0
  70. package/dist/commands/improve/consolidate.js +140 -1000
  71. package/dist/commands/improve/distill/promote-memory.js +12 -12
  72. package/dist/commands/improve/distill/quality-gate.js +6 -6
  73. package/dist/commands/improve/distill.js +58 -69
  74. package/dist/commands/improve/eligibility.js +105 -57
  75. package/dist/commands/improve/extract-cli.js +14 -133
  76. package/dist/commands/improve/improve-cli.js +98 -114
  77. package/dist/commands/improve/improve-result-file.js +1 -28
  78. package/dist/commands/improve/improve-strategies.js +8 -5
  79. package/dist/commands/improve/improve.js +128 -91
  80. package/dist/commands/improve/loop-stages.js +182 -20
  81. package/dist/commands/improve/memory/derived-ref.js +45 -43
  82. package/dist/commands/improve/memory/memory-belief.js +1 -1
  83. package/dist/commands/improve/memory/memory-contradiction-detect.js +4 -12
  84. package/dist/commands/improve/memory/memory-improve.js +6 -5
  85. package/dist/commands/improve/outcome-loop.js +22 -65
  86. package/dist/commands/improve/preparation.js +114 -123
  87. package/dist/commands/improve/proactive-maintenance.js +2 -5
  88. package/dist/commands/improve/reflect.js +56 -160
  89. package/dist/commands/improve/salience.js +11 -122
  90. package/dist/commands/improve/source-identity.js +10 -38
  91. package/dist/commands/lint/base-linter.js +20 -124
  92. package/dist/commands/lint/env-key-rules.js +31 -47
  93. package/dist/commands/lint/index.js +249 -43
  94. package/dist/commands/{events.js → log.js} +33 -38
  95. package/dist/commands/migrate-cli.js +92 -12
  96. package/dist/commands/migration-tool.js +46 -0
  97. package/dist/commands/observability-cli.js +70 -209
  98. package/dist/commands/proposal/drain.js +101 -29
  99. package/dist/commands/proposal/proposal-cli.js +76 -48
  100. package/dist/commands/proposal/proposal.js +54 -18
  101. package/dist/commands/proposal/propose-cli.js +88 -0
  102. package/dist/commands/proposal/propose.js +23 -15
  103. package/dist/commands/proposal/repository.js +701 -278
  104. package/dist/commands/proposal/validators/proposal-quality-validators.js +2 -8
  105. package/dist/commands/proposal/validators/proposal-validators.js +55 -7
  106. package/dist/commands/proposal/validators/proposals.js +4 -7
  107. package/dist/commands/read/curate.js +34 -53
  108. package/dist/commands/read/knowledge.js +150 -95
  109. package/dist/commands/read/registry-search.js +2 -2
  110. package/dist/commands/read/remember-cli.js +42 -15
  111. package/dist/commands/read/search-cli.js +180 -78
  112. package/dist/commands/read/search.js +58 -43
  113. package/dist/commands/read/show.js +197 -141
  114. package/dist/commands/registry-cli.js +12 -51
  115. package/dist/commands/remember.js +14 -57
  116. package/dist/commands/sources/add-cli.js +100 -31
  117. package/dist/commands/sources/bundle-cli.js +166 -0
  118. package/dist/commands/sources/bundle-config-ops.js +7 -2
  119. package/dist/commands/sources/info.js +18 -5
  120. package/dist/commands/sources/init.js +12 -12
  121. package/dist/commands/sources/installed-stashes.js +382 -98
  122. package/dist/commands/sources/schema-repair.js +3 -2
  123. package/dist/commands/sources/self-update.js +131 -38
  124. package/dist/commands/sources/source-add.js +72 -17
  125. package/dist/commands/sources/source-clone.js +129 -45
  126. package/dist/commands/sources/source-manage.js +43 -23
  127. package/dist/commands/sources/sources-cli.js +57 -208
  128. package/dist/commands/sources/stash-cli.js +46 -53
  129. package/dist/commands/tasks/tasks-cli.js +91 -97
  130. package/dist/commands/tasks/tasks.js +276 -421
  131. package/dist/commands/workflow-cli.js +175 -450
  132. package/dist/core/adapter/adapters/akm-adapter.js +47 -28
  133. package/dist/core/adapter/adapters/akm-lint.js +42 -27
  134. package/dist/core/adapter/adapters/akm-metadata.js +15 -44
  135. package/dist/core/adapter/adapters/akm-task-adapter.js +15 -13
  136. package/dist/core/adapter/adapters/akm-workflow-adapter.js +55 -71
  137. package/dist/core/adapter/adapters/dotenv-adapter.js +1 -1
  138. package/dist/core/adapter/adapters/generic-files-adapter.js +2 -0
  139. package/dist/core/adapter/adapters/index.js +6 -6
  140. package/dist/core/adapter/adapters/llm-wiki-adapter.js +14 -8
  141. package/dist/core/adapter/adapters/okf-adapter.js +187 -19
  142. package/dist/core/adapter/adapters/shared.js +3 -19
  143. package/dist/core/adapter/adapters/tool-dir-shared.js +8 -3
  144. package/dist/core/adapter/adapters/website-snapshot-adapter.js +1 -0
  145. package/dist/core/adapter/detect-adapter.js +17 -0
  146. package/dist/core/adapter/recognize-match.js +6 -4
  147. package/dist/core/adapter/validate-context.js +214 -0
  148. package/dist/core/asset/akm-markdown.js +63 -0
  149. package/dist/core/asset/asset-placement.js +20 -6
  150. package/dist/core/asset/asset-ref.js +11 -9
  151. package/dist/core/asset/frontmatter-lint.js +30 -0
  152. package/dist/core/asset/frontmatter.js +37 -9
  153. package/dist/core/asset/markdown.js +40 -51
  154. package/dist/core/asset/resolve-ref.js +89 -18
  155. package/dist/core/asset/stash-meta.js +1 -1
  156. package/dist/core/bundle-id.js +51 -0
  157. package/dist/core/common.js +152 -38
  158. package/dist/core/config/config-io.js +12 -1
  159. package/dist/core/config/config-schema.js +35 -8
  160. package/dist/core/config/config-sources.js +55 -11
  161. package/dist/core/config/config-walker.js +25 -9
  162. package/dist/core/config/config.js +9 -48
  163. package/dist/core/config/experimental.js +21 -0
  164. package/dist/core/config/schema/embedding.js +5 -1
  165. package/dist/core/config/schema/experimental.js +30 -0
  166. package/dist/core/config/schema/improve-processes.js +0 -6
  167. package/dist/core/config/schema/improve.js +21 -3
  168. package/dist/core/config/schema/index-config.js +8 -15
  169. package/dist/core/config/schema/output.js +4 -1
  170. package/dist/core/config/schema/setup.js +9 -18
  171. package/dist/core/config/schema/sources-bundles.js +49 -33
  172. package/dist/core/config/schema/workflow.js +3 -3
  173. package/dist/core/env-secret-ref.js +76 -46
  174. package/dist/core/errors.js +18 -12
  175. package/dist/core/events.js +46 -128
  176. package/dist/core/file-change.js +6 -5
  177. package/dist/core/fs-txn.js +83 -7
  178. package/dist/core/git-message.js +2 -2
  179. package/dist/core/improve-result.js +1 -100
  180. package/dist/core/lesson-lint.js +1 -17
  181. package/dist/core/logs-db.js +2 -1
  182. package/dist/core/migration-operation.js +16 -0
  183. package/dist/core/mutation-target.js +78 -0
  184. package/dist/core/parse.js +4 -1
  185. package/dist/core/paths.js +17 -20
  186. package/dist/core/recognition-util.js +12 -14
  187. package/dist/core/redaction.js +34 -0
  188. package/dist/core/standards/resolve-standards-context.js +2 -14
  189. package/dist/core/standards/resolve-stash-standards.js +2 -2
  190. package/dist/core/standards/resolve-type-conventions.js +2 -2
  191. package/dist/core/state/migrations.js +41 -18
  192. package/dist/core/state-db.js +5 -14
  193. package/dist/core/structured.js +1 -1
  194. package/dist/core/subprocess.js +6 -4
  195. package/dist/core/text-truncation.js +9 -5
  196. package/dist/core/type-presentation.js +3 -3
  197. package/dist/core/warn.js +0 -3
  198. package/dist/core/write-source.js +771 -95
  199. package/dist/indexer/bundle-identity-guard.js +3 -2
  200. package/dist/indexer/db/graph-db.js +0 -24
  201. package/dist/indexer/ensure-index.js +1 -0
  202. package/dist/indexer/graph/graph-boost.js +9 -34
  203. package/dist/indexer/graph/graph-extraction.js +8 -5
  204. package/dist/indexer/index-writer-lock.js +53 -17
  205. package/dist/indexer/index-written-assets.js +16 -22
  206. package/dist/indexer/indexer.js +497 -239
  207. package/dist/indexer/installations.js +14 -96
  208. package/dist/indexer/passes/dir-staleness.js +16 -9
  209. package/dist/indexer/passes/memory-inference.js +11 -9
  210. package/dist/indexer/passes/metadata.js +113 -47
  211. package/dist/indexer/scan/doc-to-entry.js +38 -1
  212. package/dist/indexer/scan/drain-dir.js +13 -23
  213. package/dist/indexer/search/db-search.js +99 -54
  214. package/dist/indexer/search/fts-query.js +47 -24
  215. package/dist/indexer/search/ranking-contributors.js +42 -20
  216. package/dist/indexer/search/ranking.js +18 -99
  217. package/dist/indexer/search/search-fields.js +7 -2
  218. package/dist/indexer/search/search-source.js +82 -93
  219. package/dist/indexer/usage/usage-events.js +0 -89
  220. package/dist/indexer/walk/file-context.js +2 -1
  221. package/dist/indexer/walk/matchers.js +30 -43
  222. package/dist/indexer/walk/path-resolver.js +7 -2
  223. package/dist/indexer/walk/walker.js +38 -12
  224. package/dist/integrations/agent/builders.js +0 -6
  225. package/dist/integrations/agent/config.js +2 -2
  226. package/dist/integrations/agent/detect.js +49 -19
  227. package/dist/integrations/agent/engine-fallback.js +76 -0
  228. package/dist/integrations/agent/profiles.js +14 -0
  229. package/dist/integrations/agent/prompts.js +12 -8
  230. package/dist/integrations/agent/runner-dispatch.js +4 -2
  231. package/dist/integrations/agent/runner.js +0 -1
  232. package/dist/integrations/agent/spawn.js +5 -6
  233. package/dist/integrations/github.js +1 -1
  234. package/dist/integrations/harnesses/aider/agent-builder.js +6 -4
  235. package/dist/integrations/harnesses/amazonq/agent-builder.js +7 -4
  236. package/dist/integrations/harnesses/claude/session-log.js +0 -10
  237. package/dist/integrations/harnesses/codex/agent-builder.js +5 -2
  238. package/dist/integrations/harnesses/copilot/agent-builder.js +5 -3
  239. package/dist/integrations/harnesses/gemini/agent-builder.js +5 -3
  240. package/dist/integrations/harnesses/index.js +3 -7
  241. package/dist/integrations/harnesses/opencode/agent-builder.js +21 -2
  242. package/dist/integrations/harnesses/opencode/session-log.js +0 -15
  243. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +13 -4
  244. package/dist/integrations/harnesses/openhands/agent-builder.js +9 -6
  245. package/dist/integrations/harnesses/pi/agent-builder.js +6 -4
  246. package/dist/integrations/lockfile.js +101 -6
  247. package/dist/integrations/session-logs/index.js +3 -28
  248. package/dist/llm/client.js +136 -100
  249. package/dist/llm/embedders/remote.js +13 -5
  250. package/dist/llm/feature-gate.js +4 -12
  251. package/dist/llm/graph-extract.js +5 -11
  252. package/dist/llm/memory-infer.js +144 -1
  253. package/dist/llm/metadata-enhance.js +5 -7
  254. package/dist/llm/structured-call.js +1 -1
  255. package/dist/llm/usage-persist.js +26 -5
  256. package/dist/llm/usage-telemetry.js +25 -2
  257. package/dist/output/cli-hints.js +1 -2
  258. package/dist/output/context.js +22 -7
  259. package/dist/output/format-exempt.js +80 -0
  260. package/dist/output/generic-render.js +259 -0
  261. package/dist/output/render-registry.js +57 -0
  262. package/dist/output/renderers.js +14 -36
  263. package/dist/output/shapes/curate.js +10 -1
  264. package/dist/output/shapes/events.js +12 -7
  265. package/dist/output/shapes/helpers.js +56 -83
  266. package/dist/output/shapes/migrate.js +8 -0
  267. package/dist/output/shapes/passthrough.js +7 -41
  268. package/dist/output/shapes/proposal/producer.js +15 -7
  269. package/dist/output/shapes.js +2 -9
  270. package/dist/output/text/{init.js → bundle-create.js} +3 -1
  271. package/dist/output/text/bundle-show.js +7 -0
  272. package/dist/output/text/command-format.js +164 -96
  273. package/dist/output/text/env.js +1 -3
  274. package/dist/output/text/events.js +8 -7
  275. package/dist/output/text/health-format.js +103 -0
  276. package/dist/output/text/health.js +7 -0
  277. package/dist/output/text/helpers.js +10 -8
  278. package/dist/output/text/lint-format.js +43 -0
  279. package/dist/output/text/{save.js → lint.js} +2 -2
  280. package/dist/output/text/migrate.js +88 -0
  281. package/dist/output/text/proposal/producer.js +4 -2
  282. package/dist/output/text/proposal-format.js +44 -72
  283. package/dist/output/text/registry-commands.js +1 -2
  284. package/dist/output/text/show-directives.js +15 -7
  285. package/dist/output/text/status-list.js +32 -0
  286. package/dist/output/text/sync.js +5 -0
  287. package/dist/output/text/workflow-format.js +24 -203
  288. package/dist/output/text/workflow.js +1 -7
  289. package/dist/output/text.js +16 -17
  290. package/dist/registry/factory.js +4 -6
  291. package/dist/registry/origin-resolve.js +16 -27
  292. package/dist/registry/providers/skills-sh.js +3 -3
  293. package/dist/registry/providers/static-index.js +13 -23
  294. package/dist/registry/resolve.js +42 -7
  295. package/dist/registry/semver.js +34 -84
  296. package/dist/runtime.js +2 -23
  297. package/dist/scripts/akm-migrate-node.js +60290 -0
  298. package/dist/scripts/akm-migrate.js +59628 -0
  299. package/dist/setup/detect.js +42 -15
  300. package/dist/setup/registry-stash-loader.js +2 -2
  301. package/dist/setup/setup.js +236 -136
  302. package/dist/setup/steps/connection.js +7 -9
  303. package/dist/setup/steps/platforms.js +9 -9
  304. package/dist/setup/steps/semantic.js +15 -3
  305. package/dist/setup/steps/sources.js +12 -13
  306. package/dist/setup/steps/stashdir.js +2 -3
  307. package/dist/setup/steps/tasks.js +237 -120
  308. package/dist/sources/freshness.js +1 -1
  309. package/dist/sources/provider-factory.js +11 -17
  310. package/dist/sources/providers/filesystem.js +2 -3
  311. package/dist/sources/providers/git-install.js +278 -34
  312. package/dist/sources/providers/git-provider.js +25 -23
  313. package/dist/sources/providers/git-stash.js +395 -106
  314. package/dist/sources/providers/git.js +2 -2
  315. package/dist/sources/providers/npm.js +16 -19
  316. package/dist/sources/providers/provider-utils.js +7 -4
  317. package/dist/sources/providers/sync-from-ref.js +3 -9
  318. package/dist/sources/providers/website.js +6 -1
  319. package/dist/sources/resolve.js +6 -5
  320. package/dist/sources/snapshot-fetchers/bluesky.js +146 -0
  321. package/dist/sources/snapshot-fetchers/content-extract.js +566 -0
  322. package/dist/sources/snapshot-fetchers/fetcher-util.js +41 -0
  323. package/dist/sources/snapshot-fetchers/github.js +100 -0
  324. package/dist/sources/snapshot-fetchers/host-guard.js +291 -0
  325. package/dist/sources/snapshot-fetchers/registry.js +17 -1
  326. package/dist/sources/snapshot-fetchers/robots.js +348 -0
  327. package/dist/sources/snapshot-fetchers/rss.js +282 -0
  328. package/dist/sources/snapshot-fetchers/secret-seam.js +42 -0
  329. package/dist/sources/snapshot-fetchers/website-ingest.js +566 -268
  330. package/dist/sources/snapshot-fetchers/x.js +910 -0
  331. package/dist/storage/database.js +7 -0
  332. package/dist/storage/engines/sqlite-migrations.js +23 -111
  333. package/dist/storage/managed-db.js +2 -2
  334. package/dist/storage/repositories/canaries-repository.js +1 -1
  335. package/dist/storage/repositories/events-repository.js +27 -11
  336. package/dist/storage/repositories/improve-runs-repository.js +6 -12
  337. package/dist/storage/repositories/index-connection.js +17 -6
  338. package/dist/storage/repositories/index-entries-repository.js +151 -240
  339. package/dist/storage/repositories/index-entry-mapper.js +15 -11
  340. package/dist/storage/repositories/index-fts-repository.js +5 -2
  341. package/dist/storage/repositories/index-llm-cache-repository.js +0 -1
  342. package/dist/storage/repositories/index-meta-repository.js +2 -3
  343. package/dist/storage/repositories/index-schema.js +10 -25
  344. package/dist/storage/repositories/index-utility-repository.js +15 -28
  345. package/dist/storage/repositories/index-vec-repository.js +6 -1
  346. package/dist/storage/repositories/outcome-repository.js +119 -0
  347. package/dist/storage/repositories/proposals-repository.js +296 -59
  348. package/dist/storage/repositories/registry-cache.js +19 -0
  349. package/dist/storage/repositories/salience-repository.js +172 -0
  350. package/dist/storage/repositories/task-history-repository.js +15 -13
  351. package/dist/storage/repositories/workflow-runs-repository.js +52 -40
  352. package/dist/tasks/backends/cron.js +105 -15
  353. package/dist/tasks/backends/index.js +1 -1
  354. package/dist/tasks/backends/launchd.js +85 -38
  355. package/dist/tasks/backends/schtasks.js +135 -15
  356. package/dist/tasks/embedded.js +56 -40
  357. package/dist/tasks/parser.js +7 -157
  358. package/dist/tasks/resolve-akm-bin.js +137 -59
  359. package/dist/tasks/runner.js +79 -42
  360. package/dist/tasks/scheduler-invocation.js +220 -10
  361. package/dist/tasks/schema.js +24 -1
  362. package/dist/tasks/task-id.js +1 -3
  363. package/dist/tasks/validator.js +20 -6
  364. package/dist/workflows/authoring/authoring.js +94 -143
  365. package/dist/workflows/authoring/scope-key.js +1 -1
  366. package/dist/workflows/exec/frozen-judge.js +28 -2
  367. package/dist/workflows/exec/native-executor.js +77 -57
  368. package/dist/workflows/exec/param-secrets.js +9 -9
  369. package/dist/workflows/exec/run-workflow.js +133 -79
  370. package/dist/workflows/exec/step-work.js +219 -346
  371. package/dist/{migrate-storage-node.mjs → workflows/exec/unit-dispatch.js} +1 -5
  372. package/dist/workflows/ir/compile.js +141 -270
  373. package/dist/workflows/ir/freeze.js +40 -30
  374. package/dist/workflows/ir/params.js +135 -11
  375. package/dist/workflows/ir/plan-hash.js +1 -1
  376. package/dist/workflows/ir/schema.js +25 -26
  377. package/dist/workflows/parser.js +872 -307
  378. package/dist/workflows/program/expressions.js +20 -208
  379. package/dist/workflows/program/schema.js +7 -10
  380. package/dist/workflows/renderer.js +95 -68
  381. package/dist/workflows/resource-limits.js +2 -0
  382. package/dist/workflows/runtime/checkin.js +3 -3
  383. package/dist/workflows/runtime/plan-classifier.js +16 -75
  384. package/dist/workflows/runtime/runs.js +186 -127
  385. package/dist/workflows/runtime/unit-checkin.js +1 -1
  386. package/dist/workflows/runtime/unit-phases.js +2 -2
  387. package/dist/workflows/runtime/workflow-asset-loader.js +232 -83
  388. package/dist/workflows/schema.js +1 -11
  389. package/dist/workflows/validate-summary.js +30 -36
  390. package/dist/workflows/validator.js +21 -62
  391. package/docs/README.md +68 -0
  392. package/docs/migration/README.md +8 -0
  393. package/docs/migration/release-notes/0.7.0.md +11 -11
  394. package/docs/migration/release-notes/0.9.0.md +208 -27
  395. package/docs/migration/v0.7-to-v0.8.md +46 -47
  396. package/docs/migration/v0.8-to-v0.9.md +564 -208
  397. package/docs/migration/v0.9.0-troubleshooting.md +561 -0
  398. package/docs/reference/README.md +12 -0
  399. package/docs/reference/cli.md +2253 -0
  400. package/docs/reference/configuration.md +358 -0
  401. package/docs/reference/data-and-telemetry.md +105 -42
  402. package/docs/reference/workflows.md +647 -0
  403. package/package.json +22 -11
  404. package/schemas/akm-asset-envelope.json +93 -0
  405. package/schemas/akm-config.json +81 -128
  406. package/schemas/akm-workflow.json +74 -73
  407. package/dist/assets/tasks/core/backup.yml +0 -5
  408. package/dist/assets/tasks/graph-refresh-weekly.yml +0 -10
  409. package/dist/cli/config-migrate.js +0 -1806
  410. package/dist/cli/config-validate.js +0 -41
  411. package/dist/commands/backup-cli.js +0 -56
  412. package/dist/commands/bundle/bundle-cli.js +0 -68
  413. package/dist/commands/bundle/bundle.js +0 -219
  414. package/dist/commands/graph/graph-cli.js +0 -124
  415. package/dist/commands/graph/graph.js +0 -489
  416. package/dist/commands/improve/extract-watch.js +0 -140
  417. package/dist/commands/mv-cli.js +0 -1221
  418. package/dist/commands/sources/history.js +0 -201
  419. package/dist/commands/tasks/default-tasks.js +0 -186
  420. package/dist/core/migration-backup.js +0 -1234
  421. package/dist/indexer/usage/unmigrated-vaults-guard.js +0 -95
  422. package/dist/llm/memory-infer-impl.js +0 -138
  423. package/dist/migrate/legacy/config-source-migration.js +0 -223
  424. package/dist/migrate/legacy/content-migration.js +0 -305
  425. package/dist/migrate/legacy/legacy-layout.js +0 -779
  426. package/dist/migrate/legacy/legacy-paths.js +0 -25
  427. package/dist/migrate/legacy/legacy-stash-json.js +0 -72
  428. package/dist/migrate/legacy/proposal-fs-import.js +0 -168
  429. package/dist/migrate/legacy/task-target-ref-migration.js +0 -272
  430. package/dist/migrate/legacy/three-db-cutover.js +0 -841
  431. package/dist/migrate/legacy/workflow-migrations-bodies.js +0 -52
  432. package/dist/migrate/legacy/workflow-migrations-frozen.js +0 -21
  433. package/dist/migrate/legacy-ref-grammar.js +0 -214
  434. package/dist/output/shapes/distill.js +0 -14
  435. package/dist/output/shapes/history.js +0 -11
  436. package/dist/output/text/distill.js +0 -6
  437. package/dist/output/text/enable-disable.js +0 -8
  438. package/dist/output/text/history.js +0 -6
  439. package/dist/registry/build-index.js +0 -382
  440. package/dist/schemas/akm-config.json +0 -4704
  441. package/dist/schemas/akm-task.json +0 -87
  442. package/dist/schemas/akm-workflow.json +0 -372
  443. package/dist/scripts/migrate-storage.js +0 -3816
  444. package/dist/workflows/authoring/workflow-program-template.yaml +0 -31
  445. package/dist/workflows/cli.js +0 -53
  446. package/dist/workflows/exec/brief.js +0 -481
  447. package/dist/workflows/exec/report.js +0 -1460
  448. package/dist/workflows/exec/watch.js +0 -116
  449. package/dist/workflows/program/parser.js +0 -813
  450. package/dist/workflows/program/project.js +0 -104
package/STABILITY.md ADDED
@@ -0,0 +1,497 @@
1
+ # Stability policy
2
+
3
+ `akm-cli` follows [Semantic Versioning](https://semver.org/) on the 0.x line
4
+ **with one caveat**: until 1.0, minor releases (0.x → 0.x+1) may include
5
+ breaking changes.
6
+
7
+ **0.9.x series exception.** The 0.9.x releases are a deliberate refactoring
8
+ and clean-up series: the goal is to pay off all remaining technical debt and
9
+ land every planned breaking change before 0.10. While that work completes,
10
+ **0.9.x patch releases may also contain breaking changes** — each one called
11
+ out in the CHANGELOG with a migration note. The 0.10.x series returns to bug
12
+ fixes and tuning, and aims to restore the normal discipline of breaking
13
+ changes only in major and minor releases.
14
+
15
+ This document classifies **every** user-facing surface by stability so you can
16
+ decide which parts of `akm` are safe to script against today and which to
17
+ treat as still-evolving. If a surface is not listed here, that is a bug —
18
+ please file it.
19
+
20
+ ## How to read this
21
+
22
+ | Tier | Contract |
23
+ | --- | --- |
24
+ | **Stable** | Scripted use is supported. Changes are additive within a minor release; breaking changes are called out in the CHANGELOG with a migration note. |
25
+ | **Evolving** | Available across minor releases, but flag names, prompts, and payload shapes may shift. Breaking changes are flagged in the CHANGELOG. |
26
+ | **Experimental** | Subject to change without notice. Not recommended for scripted use. Some experimental surfaces additionally require an explicit opt-in — see [`akm improve` autonomy](#akm-improve-autonomy--opt-in-in-090). |
27
+ | **Internal** | Not a public interface. May change or disappear in any release, without a CHANGELOG note. Listed here only so you can recognize it. |
28
+
29
+ ## Command tier index
30
+
31
+ The canonical index: every command and subcommand group in the current tree
32
+ (enumerated from `main.subCommands` in `src/cli.ts` and each group's own
33
+ `subCommands`), with its tier. The prose sections below remain the detailed
34
+ explanation of *why*; this table is the lookup. Two spots have no single
35
+ explicit sentence naming their tier and were resolved by reading neighbors:
36
+ `akm bundle show` is assigned Evolving because it is discussed only inside
37
+ the Evolving "Bundles & the workspace model" bullet, alongside the still-
38
+ shifting adapter set, unlike its sibling `akm bundle list`, which the Stable
39
+ section names explicitly; and `akm proposal list` is assigned Stable — the
40
+ Stable section names it explicitly ("list filters"), which takes precedence
41
+ over its incidental mention inside the Evolving "Improvement loop" bullet's
42
+ enumeration of the whole `proposal` noun group.
43
+
44
+ | Command | Tier | Notes |
45
+ | --- | --- | --- |
46
+ | `akm setup` | Stable | |
47
+ | `akm index` | Stable | |
48
+ | `akm health` | Evolving | Exit codes are Evolving; report *content* and rendered `md`/`html` layout are Experimental — do not script against report layout. |
49
+ | `akm info` | Stable | |
50
+ | `akm bundle create` | Stable | |
51
+ | `akm bundle add` | Stable | |
52
+ | `akm bundle list` | Stable | |
53
+ | `akm bundle show` | Evolving | See note above. |
54
+ | `akm bundle remove` | Stable | |
55
+ | `akm bundle update` | Stable | |
56
+ | `akm upgrade` | Evolving | |
57
+ | `akm search` | Stable | |
58
+ | `akm curate` | Stable | |
59
+ | `akm show` | Stable | |
60
+ | `akm workflow status` | Stable | |
61
+ | `akm workflow list` | Stable | |
62
+ | `akm workflow create` | Stable | |
63
+ | `akm workflow resume` | Stable | |
64
+ | `akm workflow abandon` | Stable | |
65
+ | `akm workflow run` | Stable | Canonical start/resume/execute command. |
66
+ | `akm remember` | Stable | |
67
+ | `akm import` | Stable | |
68
+ | `akm sync` | Stable | |
69
+ | `akm clone` | Stable | |
70
+ | `akm registry list` | Evolving | |
71
+ | `akm registry add` | Evolving | |
72
+ | `akm registry remove` | Evolving | |
73
+ | `akm migrate status` | Internal | Forwards to the standalone `akm-migrate` tool; renders its result through the normal `--format` pipeline (not exempt — see below). Listed (not hidden) in `--help`/completions. |
74
+ | `akm migrate apply` | Internal | Forwards to the standalone `akm-migrate` tool; renders its result through the normal `--format` pipeline (not exempt — see below). Listed (not hidden) in `--help`/completions. |
75
+ | `akm config path` | Stable | |
76
+ | `akm config list` | Stable | |
77
+ | `akm config get` | Stable | |
78
+ | `akm config set` | Stable | |
79
+ | `akm config unset` | Stable | |
80
+ | `akm feedback` | Stable | |
81
+ | `akm log` | Evolving | |
82
+ | `akm agent` | Evolving | |
83
+ | `akm lint` | Evolving | |
84
+ | `akm improve` | Evolving | Review-first by default; mutating lanes require `experimental.improveAutonomy` — see below. |
85
+ | `akm proposal list` | Stable | See reconciliation note above. |
86
+ | `akm proposal show` | Evolving | |
87
+ | `akm proposal diff` | Evolving | |
88
+ | `akm proposal accept` | Evolving | |
89
+ | `akm proposal reject` | Evolving | |
90
+ | `akm proposal revert` | Evolving | |
91
+ | `akm proposal drain` | Evolving | |
92
+ | `akm proposal extract` | Evolving | Former top-level `akm extract`. |
93
+ | `akm proposal new` | Evolving | Former top-level `akm propose`. |
94
+ | `akm help` | Stable | |
95
+ | `akm help agents` | Stable | |
96
+ | `akm help migrate` | Stable | Only renders release notes. |
97
+ | `akm hints` | Stable | Format-exempt agent guide; `--detail brief` selects the compact version. |
98
+ | `akm completions` | Stable | Format-exempt (emits shell script source). |
99
+ | `akm env list` | Stable | Read-and-inject surface. |
100
+ | `akm env path` | Stable | Read-and-inject surface. |
101
+ | `akm env export` | Stable | Read-and-inject surface. |
102
+ | `akm env run` | Stable | Read-and-inject surface. |
103
+ | `akm env create` | Experimental | Write verb. |
104
+ | `akm env remove` | Experimental | Write verb. |
105
+ | `akm secret list` | Stable | Read-and-inject surface. |
106
+ | `akm secret run` | Stable | Read-and-inject surface. |
107
+ | `akm secret set` | Experimental | Write verb. |
108
+ | `akm task add` | Evolving | |
109
+ | `akm task run` | Evolving | |
110
+ | `akm task history` | Evolving | |
111
+ | `akm task sync` | Evolving | |
112
+ | `akm task doctor` | Evolving | |
113
+
114
+ ## Stable
115
+
116
+ - **Asset ref syntax** — `[bundle//]conceptId[#fragment]`. A `conceptId` is
117
+ subdir-qualified within its bundle: `memories/<name>`, `lessons/<name>`,
118
+ `knowledge/<name>`, `skills/<name>`, `scripts/<name>`, `workflows/<name>`,
119
+ `env/<name>`, `secrets/<name>`, `tasks/<name>`, `facts/<name>`,
120
+ `sessions/<name>`, `commands/<name>`, `agents/<name>`. Other adapters
121
+ declare their own conceptId layouts. The optional `bundle//` prefix names an
122
+ installed bundle; omit it and the ref resolves against the workspace
123
+ `defaultBundle`, then the remaining bundles in installation-priority order.
124
+ Durable state always stores the fully-qualified `bundle//conceptId`; the
125
+ short form is accepted input only, at the CLI, the programmatic surface, and
126
+ inside bundle content (where it resolves against the containing bundle). The
127
+ older `<type>:<name>` grammar is no longer accepted.
128
+ - `#fragment` is **input-only** and never stored. On markdown-document items
129
+ the core resolves it as a section selector — `akm show <ref>#<heading-slug>`
130
+ returns that one section, no fragment returns the whole item, and an
131
+ unmatched fragment lists the available slugs. Elsewhere it is an
132
+ adapter-owned selector opaque to the core. See
133
+ [`docs/architecture/specs/ref.md`](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/ref.md).
134
+ - **Refs in prose** must be fully qualified (`bundle//conceptId`) or a native
135
+ adapter link form. A bare conceptId in prose is ordinary text, not a ref,
136
+ and no akm tool rewrites it.
137
+ - **ConceptId-prefix enumeration** — `akm search "memories/"`,
138
+ `"memories/projecta/"`, `"bundle//"`, `"bundle//skills/"`. A trailing `/` is
139
+ required. The prefix matches the **conceptId** — the spelling every emitted
140
+ `ref` carries — so a ref copied out of search output can be truncated to a
141
+ prefix and pasted back in. Enumeration is not tied to any adapter's type set,
142
+ so every adapter's items browse the same way, and `bundle//` lists a whole
143
+ bundle (this replaced `akm bundle items`). A prefix is explicit intent, so
144
+ `search.defaultExcludeTypes` does not apply to it. The pre-0.9.0
145
+ `"<type>:"` / `"<type>:<prefix>/"` spelling was removed; a query in that
146
+ shape is now an ordinary keyword search whose empty-result tip names the
147
+ conceptId spelling that replaces it.
148
+ - **Read commands** — `akm search`, `akm show`, `akm bundle list`, `akm curate`,
149
+ `akm info`, `akm config get`, `akm config list`, `akm config path`,
150
+ `akm env list`, `akm secret list`, `akm proposal list` (list filters),
151
+ `akm help`, `akm help agents`, `akm hints`, `akm completions`.
152
+ - **Write commands core surface** — `akm bundle add`, `akm bundle update`,
153
+ `akm bundle remove`, `akm clone`, `akm import`, `akm sync`, `akm index`,
154
+ `akm bundle create`, `akm setup`, `akm remember`, `akm feedback`,
155
+ `akm config set`, `akm config unset`.
156
+ - **Renames are delete + create** — moving or renaming an item gives it a new
157
+ identity; learned state does not follow it. Cross-bundle movement is
158
+ copy/import plus delete. The procedure is a plain filesystem move, then
159
+ `akm index`, then `akm lint` to catch inbound refs the move left dangling.
160
+ `akm mv` was **removed in 0.9.0**: it claimed to preserve identity across a
161
+ rename, but its inbound-ref rewriting targeted bare conceptIds rather than
162
+ the anchored `bundle//conceptId` prose form, so it could rewrite non-refs
163
+ while leaving real refs dangling. To carry an asset's earned signal
164
+ (feedback, usage, salience/outcome history) across a rename, the maintainer
165
+ script `scripts/rekey-asset-ref.ts` re-keys those rows old -> new; it is
166
+ Internal tooling, not a supported command surface.
167
+ - **Asset `type` is a free-form, open string** — `--type` filtering is an
168
+ exact match against an open set and is deliberately **not validated**: an
169
+ unrecognized type returns zero hits, not an error. Adapters emit types
170
+ outside the built-in set, so there is no closed list to validate against —
171
+ `--type website` or `--type wiki-source` are ordinary, valid filters.
172
+ - **Output contracts** — JSON output shape (the top-level keys) and the error
173
+ envelope `{ok: false, error, code?, hint?}` on envelope surfaces: `ok` and
174
+ `error` are always present; `code` is a stable machine-readable identifier
175
+ present on every classified failure (exit 1 / 2 / 78) and absent only on
176
+ unexpected internal errors (exit 70); `hint` is best-effort and may be absent. Prefer
177
+ `code` over matching on `error` prose. Plus the exit-code table below.
178
+ **All six** `--format` values (`json|jsonl|yaml|text|md|html`) are available
179
+ on every non-exempt command. `json`, `jsonl`, and `yaml` serialize the
180
+ envelope; `text`, `md`, and `html` render it. A command may register a bespoke
181
+ renderer for a document format — `akm health` does, for its per-run and
182
+ window-compare tables and its full HTML report — and anything unregistered
183
+ falls back to a generic rendering derived from the envelope's own shape. No
184
+ command emits one format's bytes when another was asked for, none rejects a
185
+ format outright, and **no command reads `--format` to decide what data to
186
+ fetch**: a registered renderer fires on the shape of the result (`akm health
187
+ --report` carries the report dataset in the envelope, so the same data is
188
+ available as JSON), never on the format alone.
189
+ `--detail` is verbosity only (`brief|normal|full`);
190
+ `--shape` (`human|agent|summary`) is the output-projection axis (see
191
+ Experimental). A small set of commands is **format-exempt** because their
192
+ output is not a result envelope at all: `completions` (shell script source),
193
+ child-process passthrough in `env run` / `secret run`, a bare-path payload
194
+ from `env path`, and document payloads from `help` (bare, `help agents`, and
195
+ `help migrate`). The set is declared in
196
+ `src/output/format-exempt.ts`, and
197
+ passing `--format` to one of them warns rather than silently doing something
198
+ else. Scripted `setup` modes emit a normal format-aware result; interactive
199
+ `setup` is a terminal UI and emits no result document. `agent` leaves
200
+ inherited child streams raw and formats its final result envelope.
201
+ `migrate status`/`apply` both spawn the standalone `akm-migrate` tool but are
202
+ NOT in the exempt set: `src/commands/migrate-cli.ts` parses the child's
203
+ final JSON result line and renders it through the same `output()` pipeline
204
+ (registered shape `src/output/shapes/migrate.ts`, text renderer
205
+ `src/output/text/migrate.ts`), so all six `--format` values work on them
206
+ like any other command. Any progress-event lines the child prints during a
207
+ real `apply` (content migration, proposal-ref repair) still print verbatim,
208
+ ahead of the formatted result — those are operational logging, not part of
209
+ the result envelope.
210
+
211
+ | Exit code | Meaning |
212
+ | --- | --- |
213
+ | `0` | Success |
214
+ | `1` | Not found / command-reported failure |
215
+ | `2` | Usage / bad input |
216
+ | `4` | Health warning (`akm health` only) |
217
+ | `70` | Internal / unclassified |
218
+ | `78` | Configuration error |
219
+ - **Install scripts** — `install.sh` and `install.ps1` URLs; the `--prefix`
220
+ / `AKM_INSTALL_DIR` environment override.
221
+ - **Runtime** — the npm package requires Node.js >= 22 as its bootstrap and
222
+ prefers a working Bun >= 1.0 for execution when both are available; old,
223
+ unusable, or absent Bun installations fall back to Node.js. Standalone
224
+ binaries are runtime-free.
225
+ - **On-disk storage** — durable workspace state (events, proposals, history,
226
+ workflow runs, salience) lives in `state.db`; the search index (`index.db`)
227
+ is a fully **regenerable** cache rebuilt by `akm index`; high-volume logs stay
228
+ in a separate `logs.db`. Asset metadata lives as file-local frontmatter plus
229
+ the index (there is no separate metadata sidecar). Treat the on-disk schema
230
+ as internal (use `akm` commands, not direct SQL).
231
+
232
+ ## Evolving
233
+
234
+ These surfaces are in active iteration as we learn from users. They will
235
+ remain available across minor releases, but flag names, prompts, and
236
+ proposal-queue shape may shift. Breaking changes will be flagged in the
237
+ CHANGELOG with a migration note.
238
+
239
+ - **Improvement loop** — `akm improve` and the proposal noun group
240
+ `akm proposal {extract,new,list,show,diff,accept,reject,revert,drain}`
241
+ (`extract` and `new` are the former top-level `akm extract`/`akm propose`,
242
+ moved under `proposal` in 0.9.0). Output JSON keys
243
+ are stable; CLI flags (`--strategy`, `--task`, `--generator`) may add
244
+ options or tighten validation across releases. `akm improve` stays on by
245
+ default and is **review-first**: the lanes that mutate assets without review
246
+ require `experimental.improveAutonomy` — see
247
+ [`akm improve` autonomy](#akm-improve-autonomy--opt-in-in-090).
248
+ `--auto-accept` was removed in 0.9.0. It is now accepted-and-warned rather
249
+ than silently absorbed: passing it prints a deprecation warning naming the
250
+ replacement, and the space-separated form (`--auto-accept 90`) no longer
251
+ poisons the asset-type positional — its value is discarded with a second
252
+ warning instead of silently reducing the run to a zero-match no-op. It
253
+ becomes a hard error in 0.10. The replacement is
254
+ `akm improve && akm proposal drain --promote --yes`, or a `triage` block
255
+ with `applyMode: "promote"` in your strategy.
256
+ - **Tasks** — `akm task` subcommand surface (`add | run | sync | doctor |
257
+ history`; no alias, no `list`/`remove`/`init`/`enable`/`disable`); strict
258
+ version-2 YAML for scheduled tasks. Prompt tasks use named engines and task
259
+ history metadata is versioned. Schema additions in patch releases; removals
260
+ only at minor. Bare `akm task` is a usage error naming the subcommands
261
+ (`akm task doctor` reports scheduler diagnostics).
262
+ - **Events / log** — `akm log` is the event-stream surface (0.9.0: the
263
+ asset-scoped `akm history` surface, and `log`'s own `tail` subcommand, were
264
+ both removed; `log` is now a leaf command — the former `list` surface).
265
+ - **Bundles & the workspace model** — installed sources are *bundles*; each is
266
+ recognized by a built-in *adapter* (native Agent Skills, Claude and OpenCode
267
+ commands/agents, knowledge, YAML workflows, tasks, env/secret files, scripts,
268
+ OKF and LLM-wiki knowledge bases). Config is keyed by `bundles` and
269
+ `defaultBundle`. The adapter set, bundle-recognition rules, and the
270
+ `bundles` config shape may still shift. Bundles are inspected through
271
+ `akm bundle list` / `akm bundle show <name>` and enumerated through
272
+ `akm search "bundle//"`. (An earlier `akm bundle items` noun group was
273
+ removed in 0.9.0 as duplicative of `akm search`; the current `akm bundle`
274
+ group — `create | add | list | show | remove | update` — is the
275
+ lifecycle-management surface consolidated from the former top-level
276
+ `init`/`add`/`list`/`remove`/`update` commands, not a revival of that one.)
277
+ OKF is the
278
+ first-class baseline for Markdown concept identity and generic reads; every
279
+ applicable OKF conformance case is required to pass. AKM-authored Markdown is
280
+ an OKF-compatible superset whose adapter adds native behavior progressively.
281
+ - **LLM Wiki bundles** — the Karpathy-style LLM wiki is a first-class built-in
282
+ bundle format (the `llm-wiki` adapter owns `schema.md` / `index.md` /
283
+ `log.md` / `raw/` / `pages/` and its ingest flow); wiki pages are addressed
284
+ as ordinary concepts inside their bundle. Adapter behavior and page
285
+ conventions are still iterating.
286
+ - **Agent dispatch** — `akm agent` subcommand. Supported backends: `claude`,
287
+ `opencode`, `opencode-sdk`, `codex`, `copilot`, `pi`, `gemini`, `aider`,
288
+ `amazonq`, `openhands`. The set will grow.
289
+ - **Proposal queue** — quality classifications (`accepted`, `pending`,
290
+ `proposed`, `rejected`, `archived`) are stable; the JSON shape of a
291
+ proposal record may add fields.
292
+ - **Registries** — `akm registry {list,add,remove}`. Searching registries is
293
+ `akm search --from registry` (0.9.0: `registry search` was folded into
294
+ `search`). Building a registry index is maintainer tooling (Internal) and
295
+ lives outside the CLI, in `scripts/build-registry-index.ts`.
296
+ - **Upgrade** — `akm upgrade`. Checksum verification is not optional; the
297
+ recovery hatch is the `AKM_UPGRADE_SKIP_CHECKSUM` environment variable
298
+ (Internal), not a flag.
299
+ - **Lint** — `akm lint`. The rule set and finding shapes iterate; the
300
+ `--fail-on-flagged` CI contract and the exit codes are stable.
301
+ - **Health** — `akm health` and its exit codes (0 pass / 4 warn / 1 fail) are
302
+ Evolving; the *content* of the report (metrics, advisories) and the rendered
303
+ `md` / `html` layouts are Experimental — do not script against report layout.
304
+
305
+ ## Experimental
306
+
307
+ Subject to change without notice within minor releases. Not yet recommended
308
+ for scripted use.
309
+
310
+ - **`lesson` asset type** — schema (`when_to_use`, `description`) is
311
+ stable, but lesson-distillation triggers and ranking are tuning targets.
312
+ - **`--shape agent` and `--shape summary`** — the output-projection axis
313
+ (`--shape human|agent|summary`). `summary` is implemented only on
314
+ `akm show`; `agent` is implemented on `search`, `show`, and `curate`.
315
+ Coverage will expand. `--detail` is verbosity only (`brief|normal|full`).
316
+ - **Protected env & secret values** — `env` (a whole `.env` group; key names
317
+ are surfaced for discoverability, values never are) and `secret` (a single
318
+ sensitive value). Values are never written to stdout, the index, or
319
+ structured output; the safe injection path is `akm env run <name> --
320
+ <command>` (or `akm secret run <name> <VAR> -- …`). The `env` / `secret`
321
+ **write** verbs (`create`, `set`, `unset`, `remove`) are Experimental; the
322
+ `list` / `path` / `run` / `export` read-and-inject surface is Stable.
323
+ - **Memory belief-state transitions** — `captureMode`, `beliefState`,
324
+ contradiction edges, and the consolidate journal are observable but
325
+ the algorithm that writes them is tuning across patch releases.
326
+ - **Improve tuning config** — `improve.strategies.*.processes.*` (per-process
327
+ engines, limits, gates, and the anti-collapse / CLS / fidelity knobs) and
328
+ the `index.*` per-pass config. The 0.9.x series is explicitly still settling
329
+ the design of the improve processes, so **keys in these two families may be
330
+ added, renamed, or dropped in any 0.9.x or 0.10.x release**. The `akm
331
+ improve` *command* surface is Evolving (above); its tuning config is not.
332
+
333
+ ### `akm improve` autonomy — opt-in in 0.9.0
334
+
335
+ **`akm improve` is review-first by default in 0.9.0.** The command itself is ON
336
+ — its schedules, reflect/distill proposals, and graph extraction all run — but
337
+ the lanes that mutate assets *without* review require an explicit opt-in:
338
+
339
+ ```sh
340
+ akm config set experimental.improveAutonomy true
341
+ ```
342
+
343
+ Without it, these three lanes are downgraded, and each downgrade is **reported,
344
+ not silent**: it warns on stderr naming the lane and the key, appends an
345
+ `improve_skipped` event with `reason: "autonomy_gated"`, is counted in
346
+ `akm health`'s improve skip-reason summary, and is listed by `akm task doctor`
347
+ under `improveAutonomy.gatedLanes` — which is where to look when a *scheduled*
348
+ run stops doing something it used to. `akm task doctor` also reports the
349
+ **effective** `improveTriage.applyMode`, so a `promote` strategy under a
350
+ review-first config correctly shows `queue`.
351
+
352
+ | Lane | What it does when enabled | With autonomy off |
353
+ | --- | --- | --- |
354
+ | `memoryInference` | Writes `.derived.md` children and rewrites parent frontmatter | disabled |
355
+ | memory cleanup | Belief-state frontmatter rewrites, archive moves | analyzed but not applied |
356
+ | `triage` `applyMode: "promote"` | Auto-accepts queued proposals into the bundle | downgraded to `queue` — triage still runs, it just does not auto-accept |
357
+
358
+ Consolidation remains enabled with autonomy off because merge, delete, and
359
+ contradiction operations are advisory; promotion only emits a reviewable
360
+ proposal.
361
+
362
+ Because the gate is applied before the LLM preflight, a review-first workspace
363
+ also needs fewer engines configured: a strategy whose only model-backed process
364
+ is a gated lane resolves without an engine at all.
365
+
366
+ **Three direct writes are deliberately NOT gated**, because they are additive or
367
+ already independently controlled:
368
+
369
+ | Write | Why it stays ungated |
370
+ | --- | --- |
371
+ | `extract` session indexing | Additive `sessions/**` writes; nothing is overwritten or deleted |
372
+ | distill's encoding-salience stamp | Frontmatter metadata only |
373
+ | `sync.push` | Publishes already-committed content to a remote the user configured for that purpose, and has its own `improve.strategies.<name>.sync.push: false` and `--no-push` |
374
+
375
+ Autonomy is never inferred: an absent `experimental` section, an absent key, and
376
+ an explicit `false` all read as off, so a partially-written or older config is
377
+ review-first rather than accidentally permissive.
378
+
379
+ Reflect, distill, extract candidates, validation, proactive-maintenance
380
+ selection, and graph extraction are proposal-only and never write assets
381
+ directly. Two further direct writes are ungated by design: `extract`'s session
382
+ indexing (additive `sessions/**` writes,
383
+ `processes.extract.indexSessions`, default on) and distill's
384
+ encoding-salience frontmatter stamp (metadata only).
385
+
386
+ ## Internal
387
+
388
+ Not public interfaces. Listed so you can recognize them, not so you can rely
389
+ on them.
390
+
391
+ - **Migration surfaces** — the standalone `akm-migrate` tool owns the one-time
392
+ 0.8→0.9 cutover, storage migration, and recovery backups (`akm-migrate
393
+ backup` / `restore`). `akm migrate` is a thin process forwarder; `akm backup`
394
+ and `akm config migrate` are removed. `akm help migrate <version>` is Stable
395
+ and only renders release notes.
396
+ - **`bun scripts/build-registry-index.ts`** — maintainer tooling for building a
397
+ registry index. It is a repository script, not a CLI command (the former
398
+ `akm registry build-index` subcommand was removed).
399
+ - **Environment variables** — see the table below.
400
+
401
+ ### Environment variables
402
+
403
+ **Supported** — documented interfaces; changes get a CHANGELOG note:
404
+
405
+ | Variable | Purpose |
406
+ | --- | --- |
407
+ | `AKM_BUNDLE_DIR`, `AKM_CONFIG_DIR`, `AKM_DATA_DIR`, `AKM_CACHE_DIR` | Filesystem layout overrides |
408
+ | `AKM_LLM_API_KEY`, `AKM_EMBED_API_KEY`, `AKM_ENGINE_<NAME>_API_KEY` | Credential provision for `$VAR` config references |
409
+ | `AKM_LLM_ENDPOINT`, `AKM_LLM_BASE_URL` | Setup provider inference |
410
+ | `AKM_VERBOSE`, `AKM_DEBUG` | Diagnostics |
411
+ | `AKM_REGISTRY_URL` | akm registry mirror override |
412
+ | `AKM_NPM_REGISTRY` | npm mirror override — redirects BOTH the trusted-tarball host allowlist and package metadata lookups (`npm view`-equivalent resolution) to the given registry base, replacing `registry.npmjs.org` wholesale rather than merging with it |
413
+ | `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode (network filesystems) |
414
+ | `AKM_BIN` | Absolute `akm` path for scheduler registration |
415
+ | `AKM_INSTALL_DIR` | Install-script prefix |
416
+ | `AKM_FORCE_SETUP_TMP_STASH` | Documented escape hatch for intentional temp-directory bundles |
417
+ | `AKM_UPGRADE_SKIP_CHECKSUM` | Recovery hatch for a broken upgrade checksum |
418
+
419
+ **Internal** — no compatibility guarantee, may vanish without notice:
420
+ `AKM_NODE_ENTRY`, `AKM_EVENT_SOURCE`, `AKM_SESSION_ID`, `AKM_AGENT_HARNESS`,
421
+ `AKM_EMBED_DETERMINISTIC`, `AKM_CLAUDE_PROJECTS_DIR`,
422
+ `AKM_FORCE_INIT_TMP_STASH`, `AKM_STATE_DIR`.
423
+
424
+ Anything matching `AKM_TEST_*` is test-only fault injection. Never set it.
425
+ `AKM_VERSION` is the only variable actually stripped from release builds, via
426
+ `bun build --define` (see `.github/workflows/release.yml`); no `src/` code
427
+ reads an `AKM_TEST_*` variable, so the compiled `akm` binary itself carries
428
+ none. That said, three fault-injection hooks are NOT compiled out and DO ship
429
+ in every install: `AKM_TEST_MIGRATION_FAIL_INDEX_QUARANTINE`,
430
+ `AKM_TEST_MIGRATION_FAIL_WORKFLOW_DELETE`, and
431
+ `AKM_TEST_MIGRATION_FAIL_RESTORE_AFTER` (`scripts/akm-migrate/`). The migration
432
+ tool ships separately from the compiled `akm` binary, so these throw-only hooks
433
+ remain physically present. At rest they are runtime-guarded no-ops unless the
434
+ exact internal test value is set. Never set them.
435
+
436
+ ## On the horizon
437
+
438
+ These changes are planned and will land in a known future release. They
439
+ are not part of the current stability contract; you should plan migrations
440
+ around them.
441
+
442
+ **The 0.9.0 decision record is fully shipped.** The
443
+ [decision record](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/0.9.0-decisions.md) settles a set of
444
+ breaking changes; every one of them is now in the code, and each decision
445
+ carries its own shipped status.
446
+
447
+ Shipped from that record: **D1** (`#fragment` section selection),
448
+ **D2** (the `akm show <ref> toc|section|lines|frontmatter|full` view grammar is
449
+ gone — `#fragment` is the only section selector), **D4** (conceptId /
450
+ `bundle//` prefix browse), **D5** (`akm bundle` removed), **D6** (open `type`
451
+ set at runtime), **D7** (all six `--format` values everywhere), **D8** (the
452
+ `experimental.improveAutonomy` gate), **D9** (`--auto-accept` warn-and-ignore),
453
+ and partially **D10** (an `akm-migrate` binary now exists, though the code still
454
+ lives in this repo). **D3** shipped too, in the end: `akm mv` was removed in
455
+ 0.9.0 (see the Renames bullet above), with `scripts/rekey-asset-ref.ts` as the
456
+ Internal replacement for the one capability nothing else covered.
457
+
458
+ - **0.10 — migration extraction.** The migration machinery leaves the CLI for
459
+ a separately published `akm-migrate` package (see Internal above).
460
+ - **0.10 — `--auto-accept` hard error.** It is currently accepted-and-warned;
461
+ see the Improvement loop entry.
462
+ - **0.10 — `BundleAdapter.placeNew()` wiring.** The interface declares
463
+ `placeNew()` as an optional capability method, and 8 of the built-in
464
+ adapters already implement it, but nothing in the write path calls it —
465
+ writes still resolve through AKM's native flat type→directory table.
466
+ Placement for every existing bundle is already correct today; this is a
467
+ deliberately sequenced routing change, not unfinished behavior. See
468
+ [D12](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/0.9.0-decisions.md#d12--bundleadapterplacenew-stays-unwired-until-010)
469
+ for why it is scoped out of 0.9.0. Nothing user-visible changes in 0.10 for
470
+ this alone.
471
+ - **1.0 contract freeze** — the `[bundle//]conceptId[#fragment]` ref grammar,
472
+ the supported source model, search behavior, and write-target rules are
473
+ frozen at 1.0. The SDK and in-process plugin story ship on top of that
474
+ frozen core.
475
+
476
+ ## Reporting stability regressions
477
+
478
+ If you script against a stable surface and a release breaks it without a
479
+ CHANGELOG migration note, please open an issue at
480
+ <https://github.com/itlackey/akm/issues> labeled `regression`. We treat
481
+ stable-surface regressions as priority bugs.
482
+
483
+ For experimental surfaces, expect change — but file an issue if a change
484
+ isn't called out in the CHANGELOG, since that's still a documentation gap
485
+ worth fixing.
486
+
487
+ ## See also
488
+
489
+ - [`CHANGELOG.md`](./CHANGELOG.md) — every release's behavior changes.
490
+ - [`SECURITY.md`](./SECURITY.md) — security supported-version policy
491
+ (independent of the feature-stability policy above).
492
+ - [`docs/architecture/specs/ref.md`](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/ref.md) — the
493
+ normative ref grammar.
494
+ - [`docs/architecture/specs/0.9.0-decisions.md`](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/0.9.0-decisions.md)
495
+ — the decision record behind the 0.9.0 surface changes.
496
+ - [`docs/reference/data-and-telemetry.md`](./docs/reference/data-and-telemetry.md) — what
497
+ state akm reads and writes locally.