akm-cli 0.9.30 → 0.10.261001-beta

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 (384) hide show
  1. package/CHANGELOG.md +438 -0
  2. package/README.md +10 -10
  3. package/ROADMAP.md +112 -0
  4. package/STABILITY.md +99 -57
  5. package/dist/api-node.mjs +20 -0
  6. package/dist/api.d.ts +23 -0
  7. package/dist/api.js +45 -0
  8. package/dist/assets/hints/cli-hints-full.md +15 -29
  9. package/dist/assets/hints/cli-hints-short.md +2 -2
  10. package/dist/assets/improve-strategies/default.json +3 -3
  11. package/dist/assets/prompts/consolidate-pair.md +9 -7
  12. package/dist/assets/stash-skeleton/README.md +1 -1
  13. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  14. package/dist/cli/shared.js +31 -48
  15. package/dist/cli/unknown-flags.js +6 -43
  16. package/dist/cli.js +8 -34
  17. package/dist/commands/agent/contribute-cli.js +1 -1
  18. package/dist/commands/completions.js +1 -2
  19. package/dist/commands/config-cli.js +5 -28
  20. package/dist/commands/env/env-cli.js +5 -5
  21. package/dist/commands/env/secret-cli.js +2 -2
  22. package/dist/commands/feedback-cli.js +75 -49
  23. package/dist/commands/health/checks.js +41 -16
  24. package/dist/commands/health/plugin-staleness.js +52 -22
  25. package/dist/commands/improve/autonomy-gate.js +5 -3
  26. package/dist/commands/improve/consolidate/chunking.js +3 -10
  27. package/dist/commands/improve/consolidate/continuity-check.js +4 -4
  28. package/dist/commands/improve/consolidate/pair-pass.js +29 -10
  29. package/dist/commands/improve/consolidate.js +10 -65
  30. package/dist/commands/improve/distill/lesson-update.js +91 -0
  31. package/dist/commands/improve/distill-guards.js +1 -43
  32. package/dist/commands/improve/distill.js +148 -21
  33. package/dist/commands/improve/eligibility.js +14 -1
  34. package/dist/commands/improve/extract-cli.js +1 -1
  35. package/dist/commands/improve/extract-prompt.js +17 -7
  36. package/dist/commands/improve/extract.js +5 -7
  37. package/dist/commands/improve/improve-cli.js +125 -118
  38. package/dist/commands/improve/improve-strategies.js +8 -12
  39. package/dist/commands/improve/improve.js +134 -52
  40. package/dist/commands/improve/loop-stages.js +18 -5
  41. package/dist/commands/improve/planner.js +0 -1
  42. package/dist/commands/improve/preparation.js +40 -99
  43. package/dist/commands/improve/proactive-maintenance.js +2 -2
  44. package/dist/commands/improve/reflect-noise.js +3 -55
  45. package/dist/commands/improve/reflect.js +29 -34
  46. package/dist/commands/improve/retrieval-queries.js +37 -0
  47. package/dist/commands/improve/retrieval-scope.js +2 -2
  48. package/dist/commands/improve/salience.js +2 -9
  49. package/dist/commands/improve/session-asset.js +4 -1
  50. package/dist/commands/improve/stage.js +23 -12
  51. package/dist/commands/lint/index.js +5 -20
  52. package/dist/commands/observability-cli.js +3 -9
  53. package/dist/commands/proposal/drain.js +43 -6
  54. package/dist/commands/proposal/proposal-cli.js +11 -31
  55. package/dist/commands/proposal/repository.js +20 -14
  56. package/dist/commands/proposal/validators/proposal-quality-validators.js +0 -3
  57. package/dist/commands/read/knowledge.js +3 -3
  58. package/dist/commands/read/remember-cli.js +0 -13
  59. package/dist/commands/read/search-cli.js +29 -97
  60. package/dist/commands/read/search.js +0 -11
  61. package/dist/commands/read/show.js +0 -19
  62. package/dist/commands/sources/plugin-upgrade.js +164 -101
  63. package/dist/commands/sources/sources-cli.js +1 -15
  64. package/dist/commands/sources/stash-cli.js +6 -14
  65. package/dist/commands/tasks/tasks-cli.js +4 -115
  66. package/dist/commands/workflow/plan.js +11 -33
  67. package/dist/commands/workflow-cli.js +2 -7
  68. package/dist/core/adapter/adapter-ids.js +1 -2
  69. package/dist/core/adapter/adapters/agent-skills-adapter.js +0 -4
  70. package/dist/core/adapter/adapters/akm-adapter.js +9 -48
  71. package/dist/core/adapter/adapters/akm-lint.js +10 -26
  72. package/dist/core/adapter/adapters/akm-metadata.js +2 -72
  73. package/dist/core/adapter/adapters/akm-task-adapter.js +0 -5
  74. package/dist/core/adapter/adapters/akm-workflow-adapter.js +9 -28
  75. package/dist/core/adapter/adapters/dotenv-adapter.js +1 -20
  76. package/dist/core/adapter/adapters/generic-files-adapter.js +0 -10
  77. package/dist/core/adapter/adapters/llm-wiki-adapter.js +0 -4
  78. package/dist/core/adapter/adapters/tool-dir-shared.js +0 -24
  79. package/dist/core/adapter/adapters/website-snapshot-adapter.js +4 -4
  80. package/dist/core/adapter/recognize-match.js +3 -4
  81. package/dist/core/common.js +18 -2
  82. package/dist/core/config/config-schema.js +12 -15
  83. package/dist/core/config/config-types.js +6 -15
  84. package/dist/core/config/config-walker.js +6 -23
  85. package/dist/core/config/config.js +17 -80
  86. package/dist/core/config/engine-semantics.js +7 -3
  87. package/dist/core/config/schema/engines.js +7 -7
  88. package/dist/core/config/schema/improve-processes.js +10 -63
  89. package/dist/core/config/schema/improve.js +2 -21
  90. package/dist/core/config/schema/index-config.js +6 -39
  91. package/dist/core/env-secret-ref.js +2 -45
  92. package/dist/core/errors.js +1 -2
  93. package/dist/core/extra-params.js +2 -86
  94. package/dist/core/file-lock.js +12 -7
  95. package/dist/core/improve-result.js +13 -1
  96. package/dist/core/mutation-target.js +2 -2
  97. package/dist/core/paths.js +4 -0
  98. package/dist/core/recognition-util.js +4 -5
  99. package/dist/core/run-lock.js +1 -1
  100. package/dist/core/subprocess.js +49 -0
  101. package/dist/core/warn.js +21 -4
  102. package/dist/core/write-source.js +3 -3
  103. package/dist/execution/target-ref.js +1 -2
  104. package/dist/indexer/indexer.js +15 -6
  105. package/dist/indexer/passes/memory-inference.js +15 -6
  106. package/dist/indexer/search/db-search.js +49 -36
  107. package/dist/indexer/search/fts-query.js +0 -19
  108. package/dist/indexer/search/ranking.js +29 -1
  109. package/dist/indexer/usage/usage-events.js +21 -16
  110. package/dist/integrations/agent/engine-resolution.js +5 -2
  111. package/dist/integrations/agent/index.js +1 -1
  112. package/dist/integrations/agent/profiles.js +41 -98
  113. package/dist/integrations/agent/request-lowering.js +3 -3
  114. package/dist/integrations/harnesses/aider/index.js +5 -0
  115. package/dist/integrations/harnesses/amazonq/index.js +1 -0
  116. package/dist/integrations/harnesses/claude/config-import.js +2 -3
  117. package/dist/integrations/harnesses/claude/index.js +5 -0
  118. package/dist/integrations/harnesses/codex/index.js +1 -0
  119. package/dist/integrations/harnesses/copilot/index.js +1 -0
  120. package/dist/integrations/harnesses/gemini/index.js +1 -0
  121. package/dist/integrations/harnesses/index.js +18 -39
  122. package/dist/integrations/harnesses/opencode/agent-builder.js +60 -35
  123. package/dist/integrations/harnesses/opencode/config-import.js +121 -52
  124. package/dist/integrations/harnesses/opencode/index.js +22 -0
  125. package/dist/integrations/harnesses/opencode/plugin-layout.js +68 -0
  126. package/dist/integrations/harnesses/opencode/session-log-types.js +12 -0
  127. package/dist/integrations/harnesses/opencode/session-log-v1.js +72 -0
  128. package/dist/integrations/harnesses/opencode/session-log-v2.js +140 -0
  129. package/dist/integrations/harnesses/opencode/session-log.js +104 -115
  130. package/dist/integrations/harnesses/opencode/version.js +98 -0
  131. package/dist/integrations/harnesses/opencode-sdk/{harness.js → index.js} +5 -17
  132. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +105 -206
  133. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +199 -0
  134. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +254 -0
  135. package/dist/integrations/harnesses/opencode-sdk/wire.js +66 -0
  136. package/dist/integrations/harnesses/openhands/index.js +1 -0
  137. package/dist/integrations/harnesses/pi/index.js +1 -0
  138. package/dist/integrations/harnesses/shared.js +2 -0
  139. package/dist/integrations/harnesses/types.js +2 -0
  140. package/dist/llm/client.js +74 -14
  141. package/dist/output/cli-hints.js +1 -1
  142. package/dist/output/context.js +10 -19
  143. package/dist/output/format-exempt.js +5 -8
  144. package/dist/output/shapes/helpers.js +1 -22
  145. package/dist/output/shapes/passthrough.js +0 -1
  146. package/dist/output/shapes.js +3 -31
  147. package/dist/output/stdout.js +5 -1
  148. package/dist/output/text/command-format.js +6 -1
  149. package/dist/output/text/workflow-format.js +4 -22
  150. package/dist/scripts/akm-migrate-node.js +15769 -16731
  151. package/dist/scripts/akm-migrate.js +16339 -17297
  152. package/dist/setup/detect.js +10 -4
  153. package/dist/setup/harness-config-import.js +5 -14
  154. package/dist/setup/setup.js +1 -1
  155. package/dist/setup/steps/tasks.js +12 -13
  156. package/dist/sources/providers/git-stash.js +94 -13
  157. package/dist/storage/repositories/index-utility-repository.js +2 -32
  158. package/dist/storage/repositories/index-vec-repository.js +4 -0
  159. package/dist/storage/repositories/task-history-repository.js +0 -5
  160. package/dist/storage/repositories/workflow-runs-repository.js +5 -15
  161. package/dist/tasks/embedded.js +2 -1
  162. package/dist/tasks/run/run-command-task.js +9 -1
  163. package/dist/tasks/run/run-workflow-task.js +4 -3
  164. package/dist/tasks/run/task-history.js +0 -2
  165. package/dist/tasks/run/task-log.js +38 -1
  166. package/dist/tasks/schedule-gates.js +39 -0
  167. package/dist/tasks/scheduler-binding.js +0 -16
  168. package/dist/tasks/scheduler-sync.js +3 -97
  169. package/dist/tasks/source/bounded-document.js +1 -1
  170. package/dist/tasks/source/task-source-v4.js +2 -12
  171. package/dist/tasks/task-run-reserved-flags.js +2 -31
  172. package/dist/workflows/authoring/authoring.js +6 -6
  173. package/dist/workflows/compile.js +8 -65
  174. package/dist/workflows/exec/child-workflow.js +22 -3
  175. package/dist/workflows/exec/native-executor.js +12 -147
  176. package/dist/workflows/exec/run-workflow.js +31 -103
  177. package/dist/workflows/exec/step-work.js +9 -178
  178. package/dist/workflows/exec/unit-dispatch.js +0 -10
  179. package/dist/workflows/freeze/environment.js +3 -44
  180. package/dist/workflows/freeze/freeze.js +8 -41
  181. package/dist/workflows/freeze/targets/child-workflow.js +27 -63
  182. package/dist/workflows/freeze/targets/command.js +2 -16
  183. package/dist/workflows/freeze/targets/shell.js +0 -2
  184. package/dist/workflows/freeze/task-bindings.js +2 -28
  185. package/dist/workflows/ir/params.js +12 -2
  186. package/dist/workflows/parser.js +82 -232
  187. package/dist/workflows/plan.js +1 -1
  188. package/dist/workflows/renderer.js +10 -19
  189. package/dist/workflows/runtime/run-plan.js +11 -53
  190. package/dist/workflows/runtime/runs.js +4 -27
  191. package/dist/workflows/source-files.js +12 -16
  192. package/dist/workflows/source-semantics.js +1 -93
  193. package/docs/README.md +43 -42
  194. package/docs/agents/README.md +15 -0
  195. package/docs/agents/agent-install.md +14 -0
  196. package/docs/architecture/0.10-process-rules.md +827 -0
  197. package/docs/architecture/README.md +67 -0
  198. package/docs/architecture/adapters.md +258 -0
  199. package/docs/architecture/akm-architecture-decision-history.md +2055 -0
  200. package/docs/architecture/akm-core-principles.md +126 -0
  201. package/docs/architecture/architecture.md +578 -0
  202. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +550 -0
  203. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +72 -0
  204. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +142 -0
  205. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +189 -0
  206. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +97 -0
  207. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +108 -0
  208. package/docs/architecture/decisions/0006-task-source-version-routing.md +124 -0
  209. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +83 -0
  210. package/docs/architecture/decisions/0008-task-binding-normalization.md +88 -0
  211. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +80 -0
  212. package/docs/architecture/decisions/0010-driver-protocol-cut.md +36 -0
  213. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +125 -0
  214. package/docs/architecture/decisions/README.md +62 -0
  215. package/docs/architecture/improvement.md +479 -0
  216. package/docs/architecture/internals/classification.md +154 -0
  217. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +40 -0
  218. package/docs/architecture/internals/functional-contract-patterns.md +340 -0
  219. package/docs/architecture/internals/health-advisories.md +110 -0
  220. package/docs/architecture/internals/improve-workflow.md +719 -0
  221. package/docs/architecture/internals/indexing.md +498 -0
  222. package/docs/architecture/internals/registry-network-boundary.md +57 -0
  223. package/docs/architecture/internals/search.md +248 -0
  224. package/docs/architecture/internals/storage-locations.md +943 -0
  225. package/docs/architecture/persisted-data-compat.md +68 -0
  226. package/docs/architecture/reviews/env-secret-access.md +319 -0
  227. package/docs/architecture/runtime-boundary-design.md +153 -0
  228. package/docs/architecture/specs/0.9.0-close-out-plan.md +361 -0
  229. package/docs/architecture/specs/0.9.0-decisions.md +532 -0
  230. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +745 -0
  231. package/docs/architecture/specs/0.9.0-open-items-register.md +135 -0
  232. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +740 -0
  233. package/docs/architecture/specs/0.9.0-release-surface-review.md +636 -0
  234. package/docs/architecture/specs/agent-command-engine-model-design.md +513 -0
  235. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +501 -0
  236. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +291 -0
  237. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +2059 -0
  238. package/docs/architecture/specs/di-seams-plan.md +539 -0
  239. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +275 -0
  240. package/docs/architecture/specs/fact-asset-type.md +142 -0
  241. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +634 -0
  242. package/docs/architecture/specs/okf-support.md +148 -0
  243. package/docs/architecture/specs/ref.md +329 -0
  244. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +72 -0
  245. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +152 -0
  246. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +352 -0
  247. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +300 -0
  248. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +402 -0
  249. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +758 -0
  250. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +645 -0
  251. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +602 -0
  252. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +27 -0
  253. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +27 -0
  254. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +74 -0
  255. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +15 -0
  256. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +132 -0
  257. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +147 -0
  258. package/docs/architecture/specs/stash-conventions-code-spec.md +275 -0
  259. package/docs/architecture/specs/stash-organization-conventions.md +377 -0
  260. package/docs/architecture/specs/task-workflow-format-unification.md +721 -0
  261. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +231 -0
  262. package/docs/architecture/specs/workflow-format-unification.md +432 -0
  263. package/docs/architecture/testing/manual-testing-checklist.md +3411 -0
  264. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +924 -0
  265. package/docs/architecture/testing/task-workflow-manual-tests.md +1720 -0
  266. package/docs/architecture/testing/testing-workflow.md +446 -0
  267. package/docs/architecture/workflow-engine.md +223 -0
  268. package/docs/guides/README.md +33 -0
  269. package/docs/guides/author-bundles.md +310 -0
  270. package/docs/guides/author-workflows.md +490 -0
  271. package/docs/guides/bundles.md +323 -0
  272. package/docs/guides/capture-knowledge.md +136 -0
  273. package/docs/guides/claude-code-vs-akm-workflows.md +29 -0
  274. package/docs/guides/concepts.md +93 -0
  275. package/docs/guides/discover-and-load.md +158 -0
  276. package/docs/guides/getting-started.md +240 -0
  277. package/docs/guides/improve-the-library.md +247 -0
  278. package/docs/guides/knowledge-management.md +18 -0
  279. package/docs/guides/recipes/headless-install.md +97 -0
  280. package/docs/guides/recipes/website-source.md +28 -0
  281. package/docs/guides/run-workflows.md +279 -0
  282. package/docs/guides/scheduling.md +131 -0
  283. package/docs/guides/use-with-any-agent.md +174 -0
  284. package/docs/guides/wikis.md +81 -0
  285. package/docs/integration/bundling-akm.md +7 -6
  286. package/docs/maintainers/README.md +19 -0
  287. package/docs/maintainers/curate-workmap.md +335 -0
  288. package/docs/maintainers/eval.md +3 -0
  289. package/docs/maintainers/local-development.md +108 -0
  290. package/docs/maintainers/release-checklist.md +135 -0
  291. package/docs/migration/README.md +4 -2
  292. package/docs/migration/release-notes/0.0.13.md +1 -1
  293. package/docs/migration/release-notes/0.1.0.md +1 -1
  294. package/docs/migration/release-notes/0.10.0.md +201 -0
  295. package/docs/migration/release-notes/0.2.0.md +1 -1
  296. package/docs/migration/release-notes/0.3.0.md +1 -1
  297. package/docs/migration/release-notes/0.5.0.md +1 -1
  298. package/docs/migration/release-notes/0.6.0.md +1 -1
  299. package/docs/migration/release-notes/0.7.0.md +1 -1
  300. package/docs/migration/release-notes/0.7.3.md +2 -2
  301. package/docs/migration/release-notes/0.7.4.md +1 -1
  302. package/docs/migration/release-notes/0.7.5.md +1 -1
  303. package/docs/migration/release-notes/0.8.0.md +1 -1
  304. package/docs/migration/release-notes/0.9.0.md +1 -1
  305. package/docs/migration/release-notes/0.9.14.md +1 -1
  306. package/docs/migration/release-notes/0.9.15.md +1 -1
  307. package/docs/migration/release-notes/0.9.16.md +1 -1
  308. package/docs/migration/release-notes/0.9.17.md +1 -1
  309. package/docs/migration/release-notes/0.9.19.md +1 -1
  310. package/docs/migration/release-notes/0.9.2.md +1 -1
  311. package/docs/migration/release-notes/README.md +28 -31
  312. package/docs/migration/v0.5-to-v0.6.md +759 -0
  313. package/docs/migration/v0.8-to-v0.9.md +1 -1
  314. package/docs/migration/v0.9-to-v0.10.md +507 -0
  315. package/docs/plans/0.9.2-agent-command-workflow-plan.md +423 -0
  316. package/docs/posts/README.md +30 -0
  317. package/docs/posts/akm-command-tour.md +495 -0
  318. package/docs/posts/akm-logo-sized.webp +0 -0
  319. package/docs/posts/belief-aware-memory-12.md +139 -0
  320. package/docs/posts/config-v2-lessons-16.md +191 -0
  321. package/docs/posts/improve-loop-autonomous-10.md +225 -0
  322. package/docs/posts/improve-pipeline-debugging-0803.md +179 -0
  323. package/docs/posts/intro-part-01.md +76 -0
  324. package/docs/posts/intro-part-02.md +221 -0
  325. package/docs/posts/intro-part-03.md +190 -0
  326. package/docs/posts/intro-part-04.md +221 -0
  327. package/docs/posts/llm-mode-reflect-13.md +166 -0
  328. package/docs/posts/openpalm-built-on-akm.md +86 -0
  329. package/docs/posts/progressive-disclosure-06.md +129 -0
  330. package/docs/posts/proposal-safety-net-15.md +112 -0
  331. package/docs/posts/release-0.5.0.md +247 -0
  332. package/docs/posts/release-0.6.0.md +117 -0
  333. package/docs/posts/release-0.7.0.md +159 -0
  334. package/docs/posts/release-0.8.0.md +332 -0
  335. package/docs/posts/scattered-skills-05.md +100 -0
  336. package/docs/posts/task-assets-persistent-workflows-11.md +222 -0
  337. package/docs/posts/team-skills-07.md +198 -0
  338. package/docs/posts/wiki-agent-knowledge-08.md +223 -0
  339. package/docs/posts/workflows-vaults-09.md +321 -0
  340. package/docs/product-surface.md +54 -0
  341. package/docs/reference/README.md +2 -2
  342. package/docs/reference/api.md +65 -0
  343. package/docs/reference/asset-types.md +166 -0
  344. package/docs/reference/bundle-types.md +2 -4
  345. package/docs/reference/cli.md +163 -192
  346. package/docs/reference/configuration.md +101 -20
  347. package/docs/reference/data-and-telemetry.md +2 -2
  348. package/docs/reference/env-and-secrets.md +126 -0
  349. package/docs/reference/memory.md +124 -0
  350. package/docs/reference/refs.md +156 -0
  351. package/docs/reference/registry.md +489 -0
  352. package/docs/reference/supported-formats.md +3 -4
  353. package/docs/reference/tasks.md +12 -19
  354. package/docs/reference/website-sources.md +141 -0
  355. package/docs/reference/workflow-schema.md +89 -317
  356. package/docs/reference/workflows.md +20 -48
  357. package/package.json +23 -16
  358. package/schemas/akm-config.json +2 -243
  359. package/schemas/akm-task.json +2 -3
  360. package/schemas/akm-workflow.json +47 -84
  361. package/dist/assets/improve-strategies/catchup.json +0 -41
  362. package/dist/assets/improve-strategies/proactive-maintenance.json +0 -24
  363. package/dist/assets/improve-strategies/quick.json +0 -17
  364. package/dist/assets/improve-strategies/reflect-distill.json +0 -29
  365. package/dist/assets/improve-strategies/thorough.json +0 -49
  366. package/dist/assets/prompts/retrieval-relevance-judge.md +0 -6
  367. package/dist/assets/tasks/improve/akm-improve-catchup.yml +0 -6
  368. package/dist/assets/tasks/improve/akm-improve-frequent.yml +0 -4
  369. package/dist/assets/tasks/improve/akm-improve-nightly.yml +0 -4
  370. package/dist/cli/retired-commands.js +0 -118
  371. package/dist/commands/improve/retrieval-gate.js +0 -132
  372. package/dist/commands/tasks/validate.js +0 -176
  373. package/dist/core/config/legacy-source-shape-shim.js +0 -117
  374. package/dist/indexer/feedback/utility-policy.js +0 -75
  375. package/dist/integrations/harnesses/ids.js +0 -28
  376. package/dist/tasks/source/task-source-v3-frozen.js +0 -424
  377. package/dist/tasks/source/task-to-v4.js +0 -863
  378. package/dist/workflows/exec/worktree.js +0 -372
  379. package/dist/workflows/freeze/child-output-references.js +0 -83
  380. package/dist/workflows/freeze/identity.js +0 -22
  381. package/dist/workflows/freeze/targets/script.js +0 -50
  382. package/dist/workflows/freeze/targets/task.js +0 -124
  383. package/dist/workflows/github-yaml.js +0 -506
  384. package/dist/workflows/runtime/run-outputs.js +0 -80
package/CHANGELOG.md CHANGED
@@ -6,6 +6,440 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.10.261001] - 2026-10-12
10
+
11
+ ### Changed
12
+
13
+ - **0.10 release numbers are monthly, `0.10.YYMMNN`, not daily (#1089).** The patch is the UTC year, the month and the
14
+ release within that month (`NN`, `01` to `99`), two digits each. Every release takes the next `NN`, whatever its
15
+ stage (`0.10.261001-alpha`, then `0.10.261002-beta`, then `0.10.261003`); a build is no longer promoted through
16
+ `-alpha`, `-beta` and `-rc` under one number. `bun scripts/release-version.ts next` now counts the month's releases on
17
+ npm, and the Release workflow rejects the old 8-digit `YYMMDDNN` form for a new release. **Known, accepted break:**
18
+ semver compares the patch numerically, so every `0.10.YYMMNN` sorts below the 0.10 daily alphas
19
+ (`0.10.26101001-alpha` to `0.10.26101202-alpha`), and `akm upgrade` will not offer it from one. The next release is
20
+ `0.10.261001-beta`; if you are on a 0.10 daily alpha, install it explicitly once
21
+ (`npm install -g akm-cli@0.10.261001-beta`), after which `akm upgrade` works as before.
22
+
23
+ ### Deprecated
24
+
25
+ - **The `opencode` CLI dispatch path.** An agent engine with `platform: "opencode"`, which runs `opencode run` for each
26
+ call, still works on OpenCode 1 and 2 throughout 0.10, but is deprecated: use an `opencode-sdk` engine, which covers
27
+ it, including a default agent (#1098). It may be removed in 0.11 or later (STABILITY.md).
28
+
29
+ ## [0.10.26101202] - 2026-10-12
30
+
31
+ ### Fixed
32
+
33
+ - **A signal to `akm agent` no longer leaves the CLI harness running (#1049).** `akm agent` on the `opencode`,
34
+ `claude` and `codex` CLI engines runs the harness in its own process group, so SIGTERM or SIGINT to akm ended akm and
35
+ left `opencode run` (and, on OpenCode 2, its `serve --stdio` child) running. The managed-subprocess primitive now runs
36
+ the timeout kill ladder on every live group child when akm gets such a signal with no handler of its own, then
37
+ re-raises it so akm still ends by the signal.
38
+ - **An OpenCode 2 SDK dispatch ends when akm rejects a permission request (#1049).** OpenCode 2 interrupts the step
39
+ (`aborted`, "Step interrupted") and goes idle without writing the closing `idle` message, so the dispatch waited out
40
+ its whole deadline. It now returns at once with `reason: "aborted"` and the declined tool call in `error`.
41
+ - **Documented: OpenCode permission defaults in a dispatch (#1049).** OpenCode 1 asks before reading or writing outside
42
+ the project directory; OpenCode 2 does not unless its config says `ask`, so akm's permission rejection only happens
43
+ on OpenCode 2 once you add that rule. akm changes no default. See [Configuration](docs/reference/configuration.md#engines).
44
+
45
+ ## [0.10.26101201] - 2026-10-12
46
+
47
+ ### Removed
48
+
49
+ - **Reflect's retrieval regression gate (#1171).** After the quality judge passed a revision, reflect graded the old and the new text against up to five of the asset's own retrieval queries and refused the revision (`quality_rejected`, a 14-day window) when the mean grade fell at all. Re-measured on 0.10 it refused 12-17% of the revisions the judge had passed and lowered defects fixed from 84 to 77 (35B) and from 92 to 77 (27B) of 96, now that reflect edits frontmatter only. A judge-passed revision is now minted as a proposal with no further check. This also removes the `retrieval-ungraded` review reason, the `retrievalRegression`/`retrievalUngraded` event metadata and the `retrieval-relevance-judge.md` prompt. No config key existed for the gate, so no config changes.
50
+
51
+ ## [0.10.26101101] - 2026-10-11
52
+
53
+ ### Changed
54
+
55
+ - **A manual fix to an asset applies at once.** `akm feedback --negative ... --replace/--with/--source`, `--superseded-by` and `--outdated` used to queue a `feedback` proposal that waited for `akm proposal accept` and expired after 90 days. The command now files the proposal and accepts it in the same run, through the ordinary accept (a git-backed bundle gets the usual commit; `akm proposal revert` undoes it), with gate decision `manual-fix` and no judge. If the accept refuses, the proposal is rejected, the file is untouched and the command fails. The edited asset stays eligible for every improve process.
56
+ - **`akm improve` syncs before it runs, not only after (#1091).** A live run on a git-backed bundle now does the same
57
+ fetch / fast-forward-or-merge / commit / push as `akm sync` right after taking its lock and before the index and plan
58
+ stages, so it plans from what other hosts pushed. It honours `--no-sync` and `--no-push`. A conflict or fetch failure
59
+ warns and the run continues on the local state; the outcome is `preRunSync` on the result and a `stash_synced` event
60
+ with `phase: "pre-run"`. Pending hand edits in the managed paths are committed by it, as `akm sync` would.
61
+ - **Reflect no longer locks an asset for 14 days over an uncertain verdict; it asks a person.** A reflect revision the
62
+ quality judge does not pass but scores 3.5 or more (the judge's own review label begins at 2.5) is now queued as a
63
+ pending proposal for a person (`judge-uncertain`, with the per-criterion scores and the judge's reason) and records
64
+ no `quality_rejected` window; a lower score is refused as before. Likewise a retrieval check that cannot grade a
65
+ revision (transport error, timeout, unreadable reply) queues it for a person (`retrieval-ungraded`) instead of
66
+ refusing it as a regression, and a distill lesson or promotion whose judge is missing at judge time is queued for
67
+ review instead of recording a 30-day `quality_rejected` window. Triage never accepts any of these. `akm proposal
68
+ list` shows the reason as `gate=deferred:<reason>`.
69
+ - **Feedback now changes `akm search` and `akm curate` ranking, as `akm feedback` always said it did.** The fused
70
+ score is scaled by `1 + 0.03 x (ln(1 + positives) - ln(1 + negatives))`, counting the user's recorded feedback
71
+ events for the asset (improve, task and audit feedback does not count). The rule is the same for every asset, rises
72
+ with each positive and falls with each negative, and gains less per vote as votes pile up: about +2% / +3% / +5% /
73
+ +9% for 1 / 2 / 5 / 20 positives, so an asset with 5 positives outranks one with 2, and the effect reorders close
74
+ matches without overriding relevance. The counts are read from `state.db` in one query per search. `utility_scores`
75
+ is still written and read by improve and metrics, but search does not use it.
76
+ - **`akm feedback` reports the real ranking effect.** `rankingUpdate.applied` in its output used to mean the utility
77
+ EMA write succeeded, which no longer has anything to do with ranking. It is now `true` exactly when the recorded
78
+ event is user-attributed (the events search counts) and `false` with a reason for improve, task, audit or unknown
79
+ attribution; a utility-write failure only warns and no longer flips it.
80
+ - **Utility has one formula and one implementation.** `akm feedback` used to move utility with its own bounded step
81
+ toward the cumulative positive share while `akm index` recomputed the same table with a different formula, so the
82
+ stored value depended on which ran last. `akm feedback` now calls the indexer's `recomputeUtilityScores` for the one
83
+ entry (user-attributed events only), so the value it stores is the one `akm index` would compute at that moment; the
84
+ bounded-step code (`utility-policy.ts`) is removed. A first positive on an entry with no utility row now gives 0.3
85
+ (the old start was 0.5). Search still does not read utility.
86
+
87
+ ### Fixed
88
+
89
+ - **The 02:00 nightly `akm improve` can no longer lose its night to the consolidate task's lock.** The shipped
90
+ `akm-improve-consolidate` task (`20 */4 * * *`) kept the default 2-hour budget, so a 00:20 run could still hold
91
+ `improve.lock` at 02:00 and the nightly (deliberately without `--skip-if-locked`) failed with `IMPROVE_LOCK_HELD`.
92
+ The consolidate task now passes `--timeout-ms 3600000`; the nightly is unchanged.
93
+ - **Scheduled command tasks (`uses: commands/…`) get the 6-hour unattended default timeout.** Only workflow and native
94
+ shell/script tasks had it, so a wedged engine call could hold a command task forever. An explicit task `timeout:`,
95
+ an engine timeout, or `timeout: null` still wins.
96
+ - **`akm search` no longer warns "no embedding provider is configured" on a default install.** With
97
+ `semanticSearchMode: auto` and no embedding settings, search uses the built-in local model, so the warning was
98
+ false on every query. It now fires only for a remote `embedding.endpoint` set without `embedding.model` (the one
99
+ config that cannot work), and the remedy names that field.
100
+ - **`akm sync` fetches the remote and brings other hosts' changes in before it pushes.** It used to check the stale
101
+ local tracking ref, so once another host had pushed, the lease push failed and `akm sync` exited 70 instead of
102
+ committing, and a two-host filesystem bundle never converged. A writable bundle with a remote now fetches, then
103
+ fast-forwards (or merges with git's default merge) the upstream, then pushes; a host with nothing to commit still
104
+ receives the upstream. A merge that conflicts is aborted, your commit stays, the push is skipped, and
105
+ `reason` reads `not pushed: merging upstream conflicts in <files> ...`. A failed fetch likewise only skips the push.
106
+ `--no-push` and read-only bundles never touch the network.
107
+ - **The end-of-run improve sync reports `committed: true` when only the push failed.** The commit had landed, but the
108
+ result and the `stash_synced` event said `committed: false`.
109
+ - **The extract per-session lock no longer reclaims a live holder.** It was reclaimed once its file was five minutes
110
+ old, but one session can hold it across two extraction attempts and the summary call, so a session-end hook racing
111
+ the improve run processed the session twice. Only a lock whose holder process is dead is reclaimed, as with the
112
+ improve run lock.
113
+ - **Memory inference writes to the default bundle, not the first bundle in the list.** The pass took `sources[0]`, so
114
+ it relied on list order and did nothing, silently, when that entry was not an akm bundle. It now selects the source
115
+ flagged as the default bundle and warns when there is none or when it is not an akm bundle.
116
+ - **Memory inference no longer reverts a parent memory's frontmatter edit.** The `inferenceProcessed` stamp rewrote
117
+ frontmatter parsed before the model call, so an edit made to the memory in the meantime (accepted proposal,
118
+ feedback hash) was lost. The stamp now adds its key to the file's current frontmatter.
119
+ - **The session summary prompt fences the transcript as untrusted.** Extract's summary call sent the raw, unfiltered
120
+ event stream with no boundary, so a crafted session could steer the text written into the session asset. It now
121
+ uses the same pre-filter and the same `UNTRUSTED SESSION TRANSCRIPT` fence, with forged fence markers neutralised,
122
+ as the extraction call.
123
+ - **`akm proposal revert` of a retirement still works after the 30-day archive purge.** When the graced purge has
124
+ deleted the archived copy, the primary is restored byte for byte from the proposal's recorded `backupContent`
125
+ instead of the revert refusing. A file that now occupies the path is still never overwritten.
126
+ - **Retire proposals can no longer become permanent.** They now expire by age like every other proposal (`akm proposal
127
+ reopen` brings one back, so the old "never expires" rationale is gone), a staged one whose file or successor is gone
128
+ or changed is auto-rejected once as `stale-target` instead of failing every drain run, and an expired or stale-target
129
+ retire proposal no longer counts as a person's rejection that settles its pair.
130
+ - **The consolidate pair pass no longer marks assets judged when they have no stored embedding.** With
131
+ `semanticSearchMode: off` (or before an asset is embedded) the neighbour query could not run, yet the pass wrote a
132
+ `judged_no_action` row that held the asset until its body changed. It now writes no row for such an asset, so
133
+ enabling embeddings reconsiders it, and warns once per run that the pair pass needs stored embeddings.
134
+ - **A transient reflect failure no longer consumes the feedback that planned it.** A transport error, parse error,
135
+ timeout, budget abort or crash wrote a `failed` ledger row that advanced the signal cursor, so the ref was not
136
+ retried until new feedback arrived. Like distill, these now write no row; guard rejections and quality rejections
137
+ are unchanged.
138
+ - **The per-run `akm improve` and `akm index` log files are now purged by the retention pass.**
139
+ `$CACHE/logs/improve/<ISO>.log` and `$CACHE/logs/index/<ISO>.log` were outside the purge and grew without bound;
140
+ they now follow `improve.eventRetentionDays` like the task log files.
141
+ - **A run hard-killed by the budget watchdog now leaves a record and banks its writes.** The forced `process.exit(0)`
142
+ (exit code unchanged) skipped every finally block, so the run left no `improve_runs` row and the files it had
143
+ written were never committed. Before exiting, the watchdog now records the run as terminated
144
+ (`budget_exhausted`) and makes the same provenance-scoped auto-sync commit, without pushing.
145
+
146
+ ### Changed
147
+
148
+ - **`captureMode: hot` memories are consolidated like any other memory.** The pair pass may now retire one, the promote
149
+ pass may promote one (accepting archives the source, as for any memory), and a chunk of only hot memories goes to the
150
+ model instead of being skipped as judged no-action. The hot-specific retire guard, chunk skip and promote-prompt
151
+ annotation are gone; `akm remember` still writes `captureMode: hot`.
152
+
153
+ ## [0.10.26101002] - 2026-10-10
154
+
155
+ ### Changed
156
+
157
+ - **Triage accepts up to 200 proposals per run by default, up from 25.** The consolidate pair pass stages about 90
158
+ pairs a night on a real stash, so a lower cap let the review queue grow every night. `maxAcceptsPerRun` still bounds
159
+ a run, and `akm proposal drain` uses the same default.
160
+ - **`akm improve <scope>` warns when the scope matches no asset.** A type scope that matches nothing in the stash
161
+ (`akm improve typo`, `improve skills`, `improve memorys`) prints one warning on stderr naming the scope and, for a
162
+ near-miss of a real type, the likely intended one. The exit code and the empty plan are unchanged, and a valid scope
163
+ with nothing eligible does not warn.
164
+
165
+ ## [0.10.26101001] - 2026-10-10
166
+
167
+ ### Added
168
+
169
+ - **OpenCode 2 is the primary OpenCode integration; OpenCode 1 keeps working (#1049).** akm detects the major from
170
+ the engine's binary (`<bin> --version`, once per binary per process; `opencode2` is preferred when it is on PATH)
171
+ and drives it through a per-major adapter for SDK dispatch (`opencode-sdk`, on `@opencode/client` 2.0.26 or
172
+ `@opencode-ai/sdk` 1.2.20), CLI dispatch (`opencode run`, which adds `--standalone` on OpenCode 2 so no background
173
+ service is left running), session history (chosen from `opencode.db`'s own tables, read-only, with retained
174
+ OpenCode 1 rows still readable after a native upgrade) and native config import. OpenCode 1 warns once that
175
+ upgrading is recommended; a binary of an unknown major is driven as OpenCode 2 with a warning, never refused.
176
+ `akm upgrade` and `akm health` know the `akm-opencode-v2` plugin beside `akm-opencode`.
177
+ - **`akm-cli/api`: the one supported programmatic entry point.** `curate(query, { limit, type, format })` returns
178
+ exactly the stdout of `akm --detail agent -q curate …`, computed in-process, and rejects with the CLI's message and
179
+ `code`. It is for in-process recall by the akm plugins; everything else stays CLI-only. `package.json` gains an
180
+ `exports` map (`./api`, `./package.json`, `./dist/*`); `bin` and `files` behave as before. See
181
+ [`docs/reference/api.md`](docs/reference/api.md).
182
+ - **Distill extends an existing lesson that a memory repeats (#1090).** When the writer's lesson repeats one the library
183
+ holds (the judge scores its non-redundancy 2 or below), or the writer answers `NONE` with a lesson nearby, distill
184
+ asks for that lesson's body again with the lines the memory adds. If every existing line is kept, and the judge
185
+ passes the added lines against the lesson and the memory, the update is a pending proposal on the lesson's own
186
+ ref (reason `distill-update`, with the lesson's before-hash), left for a person: the triage drain does not accept
187
+ it. Otherwise nothing is proposed and the outcome is what it was. The result and the `distill_invoked` event carry
188
+ `updatesExisting: true`. No new setting; it needs the quality gate.
189
+
190
+ ### Removed
191
+
192
+ - **The GitHub-shaped YAML workflow format (#1096).** A `.yml` workflow (`name`/`on`/`jobs`, one job, `uses:` and `run:`
193
+ steps) is gone, with everything that existed only to carry it: workflow-step `uses: tasks/<ref>` (task composition),
194
+ `uses: scripts/<ref>` and `uses: commands/<ref>` targets, the `with:` rejection classifier for them, YAML `on.schedule`
195
+ triggers (and the scheduler sync of them), and the `script` frozen target. `.yml` under `workflows/` is skipped at
196
+ index time with a message saying it must use `.md`. Nothing in the owner's bundle or in OpenPalm used it. **Kept:** a
197
+ task that runs a workflow (`uses: workflows/<ref>`, or a `run:` calling `akm workflow run`) is a task feature and is
198
+ unchanged. A stored run whose plan has a `script` target can no longer be decoded and is abandoned like any other
199
+ undecodable plan.
200
+ - **Top-level workflow `outputs:` (#1096).** Its only consumer was a parent reading a child's exports. A completed
201
+ child workflow now returns the output of its last step, so `outputs:` is a lint error and the child-output reference
202
+ check at freeze is gone; a parent reads `steps.<composing-step>.output`. The `outputs_json` column stays readable.
203
+ - **Workflow `route` steps (#1096).** A step can no longer declare `route:` (branch on a value to a later step). It was
204
+ unused by any workflow found, and its cost was the replay journal for route decisions and cascaded skips. Branching is
205
+ an `exec` step or an agent step that reads its inputs, plus a gate for "go back and fix it". `route` is now an
206
+ unknown-key lint error; a stored plan that still has a route step cannot be decoded, so that run is abandoned.
207
+ - **`unit.isolation: worktree` (#1096).** A workflow unit can no longer declare per-attempt git-worktree isolation
208
+ (`exec/worktree.ts` and the attempt prepare/cleanup in the native executor). It was unused by any workflow found, and
209
+ the largest standalone block in the engine. `unit.isolation` is now an unknown-key lint error; a stored plan that
210
+ still carries it decodes and runs the unit in the engine's working directory. The `worktree_path` columns stay readable.
211
+ - **Runtime conversion of config older than 0.9.15 (#1091).** 0.10 reads what 0.9.15 and later wrote; an install on an
212
+ earlier release runs `akm migrate apply` under akm 0.9.x first. Removed: the in-memory `stashDir`/`sources[]`/
213
+ `installed[]` to `bundles` conversion (`legacy-source-shape-shim.ts`), the `engines.*.extraParams` lift onto
214
+ `temperature`/`maxTokens`/`enableThinking`/`reasoningEffort`, and the `{kind, ref, sourceId}` write-back of
215
+ `scheduler.enabled` that kept 0.9.16 able to read what a newer release wrote (0.10 writes plain refs, still reads the
216
+ object form). A config with a retired source key now fails to load with one message naming `akm migrate apply` under
217
+ akm 0.9.x; a legacy `extraParams` key is refused with the first-class field to set. Kept, because 0.9.15 or 0.9.16
218
+ wrote them: scheduler adoption for a config with no `scheduler.enabled`, the `{kind, ref, sourceId}` reader, and the
219
+ irVersion 5 frozen-plan reader (there was no separate irVersion 4 reader to remove). `akm migrate apply` and
220
+ `akm migrate status` are unchanged for 0.9.15 and later data; the task-source migrator moved to
221
+ `scripts/akm-migrate/migrate/`. See `STABILITY.md` and `docs/architecture/persisted-data-compat.md`.
222
+ - **The `quick`, `reflect-distill`, `thorough` and `catchup` built-in improve strategies, and the `akm-improve-frequent`
223
+ and `akm-improve-catchup` task templates (#1130).** Measured (nightly eval, n=3, `gpt-5.6-terra` and `qwen3.8-27b`):
224
+ `quick` solved 0.76 / 0.75 items against `default`'s 0.92 / 0.89, `reflect-distill` 0.78 / 0.77, and `thorough` (the
225
+ judged triage drain) 0.67 / 0.70 with harmed items at 9 / 6.3 (unsafe retirements accepted, an exact fix applied
226
+ unreviewed); `catchup` was identical to `consolidate` on the pool (it differed only in the judged triage drain, `maxChunkSize` 50 instead of 25, and `minPoolSize: 0`, which is already the default). An `improve.strategies.<name>` block with one of
227
+ these names stays valid as an ordinary user-defined strategy, but it now inherits `default` and no longer carries the
228
+ old built-in's settings (for example the triage drain). `--strategy` or `defaults.improveStrategy` naming one with no
229
+ such block fails at resolution with an error that names `default`; config load still succeeds. The shipped
230
+ `akm-improve-nightly` task would now run `default` at 02:15, the same as the `core/improve` task at 02:00, and the
231
+ hourly `akm-improve-frequent` task would only repeat that pass; `akm-improve-catchup` ran the same `consolidate` as
232
+ `akm-improve-consolidate`. All three are gone, and setup's server-install preselection now suggests `core/improve`. A task copied from
233
+ any of them into a bundle keeps its `--strategy` and must be changed to `default` or `consolidate`. (#1130)
234
+ - **The high-salience improve lane and `improve.salience.salienceThreshold` (#1129).** The lane admitted nothing in
235
+ the measurement and was reachable only by back-dating feedback. The key still loads from an old config with a
236
+ warning and does nothing; `akm migrate apply` drops it. The `high-salience` lane name stays valid on rows older releases wrote.
237
+ - **The `proactive-maintenance` built-in improve strategy (#1129).** The lane now lives in `default`. A
238
+ `improve.strategies.proactive-maintenance` block in your config keeps working as a user-defined strategy, merged
239
+ onto `default`; `defaults.improveStrategy: "proactive-maintenance"` without such a block still loads and fails
240
+ when improve runs, with the same "removed in 0.10" error as `quick` and the other removed strategies (#1130).
241
+ - **`BundleAdapter.placeNew()` (internal, #1091).** The optional adapter method, its nine implementations and their
242
+ tests were never called: every write already resolves through the fixed type-to-directory table. No behaviour
243
+ change. Writable bundles in a layout other than akm's own would need it back; see #1163.
244
+
245
+ ### Changed
246
+
247
+ - **Child workflows are kept in a simple form (#1096).** A markdown step declares `unit: { workflow: workflows/<name>,
248
+ with: { <param>: <literal or { from: <reference> }> } }` and the engine starts the child as its own run and drives it
249
+ to completion; the child's last step output is the composing step's output. The form is Experimental. The freeze,
250
+ idempotent publish, resume, blocked-child recovery, cycle check and `workflow list --children` behaviour of the existing
251
+ child executor is unchanged.
252
+ - **`default` drains the proposal queue through the deterministic gates (#1143).** The `default` strategy now runs
253
+ triage in `promote` mode with judgment off, up to `maxAcceptsPerRun: 25` accepts per run, so the backlog drains
254
+ without `experimental.improveAutonomy`. The nightly eval's baseline is exactly this path (`proposal drain --promote`
255
+ without judgment): 0.91 (terra) and 0.89 (qwen) of items solved, 0 to 1 harmed; the judged drain is what caused
256
+ harm (#1132). The autonomy gate's `triagePromote` lane is now gated only when the triage stage has judgment on: a
257
+ promote with judgment on and no opt-in is still downgraded to `queue` and reported (`improve_skipped`,
258
+ `akm task doctor`). Memory inference and memory cleanup stay gated. No new setting. (#1143)
259
+ - **`akm improve` plans the proactive-maintenance lane's picks again, and the lane is on in `default` (#1129).**
260
+ Measured on assets with silent defects and no feedback (8 planted): 0 fixed with the picks scored only, 6 to 7 with
261
+ them planned, no harm, about five times the model calls. The picks carry the `proactive` lane on their
262
+ proposals. The cap against a proposal flood already existed and is now consistent: `maxPerRun` limits the picks per
263
+ run, `dueDays` (30) admits only an asset not reflected or distilled for 30 days, and reflect's `limit` (25) bounds
264
+ the run. The code fallback for `maxPerRun` is 15, the shipped value, where it was 25. No new setting.
265
+ `--require-feedback-signal` turns the lane off for a run.
266
+ - **The judged drain accepts only consolidate promotions, and no built-in strategy turns judgment on (#1132).** On the
267
+ nightly eval, judging every proposal kind with `experimental.improveAutonomy` solved about half the items
268
+ (0.49 gpt-5.6-terra, 0.53 qwen3.8-27b) and harmed 14 and 11, changing 18 and 21 notes outside the planted set: it
269
+ accepted unsafe retirements and applied exact fixes unreviewed. Judging promotions alone was reasonable. The judgment
270
+ tier now accepts only a consolidate promotion; any other kind it would accept (a retirement, an exact fix, a reflect
271
+ revision) is left for a person with reason `judgment-not-promotion`, whatever the strategy says. `thorough`, `catchup`,
272
+ `reflect-distill` and `proactive-maintenance` no longer enable triage judgment. Deterministic promote gates are
273
+ unchanged. (#1132)
274
+ - **Built-in improve strategies are patches onto `default`, not "complete presets" (#1130).** `docs/reference/configuration.md`
275
+ said otherwise; the strategy list in the docs, the `--strategy` help and the hints now name only `default`
276
+ and `consolidate`. (#1130)
277
+ - **A proposal from the proactive lane waits for a person (#1147).** With the lane on in `default` and the default
278
+ drain promoting through the deterministic gates, a reflect edit on an asset with no feedback was accepted unattended
279
+ once reflect's judge passed it (the nightly eval showed `when_to_use`, `type` and provenance stamps and a title
280
+ heading added to assets no one had asked about). `proposal drain` now never accepts a proposal whose
281
+ `eligibilitySource` is `proactive`, through a deterministic gate, the judgment tier or an earlier staged accept: it is
282
+ left for review with reason `proactive-needs-review` (and is not sent to the judgment tier). Feedback-driven
283
+ proposals (`signal-delta`, `scope`) are unchanged. No new setting. (#1147)
284
+ - **0.10 releases are daily builds, `0.10.YYMMDDNN`, with `-alpha`, `-beta` and `-rc` stages (#1089).** The patch
285
+ number is the UTC year, month and day plus the build that day (`NN`, `01` to `99`), two digits each: the first build
286
+ on 2026-10-10 is `0.10.26101001`. A prerelease carries its stage only (`0.10.26101001-alpha`, no `.N`), so one build
287
+ is promoted `-alpha` < `-beta` < `-rc` < `0.10.26101001`; prereleases publish to the npm `next` tag and stable builds
288
+ to `latest`. The Release workflow validates the format and takes a new `stage` input (`scripts/release-version.ts`);
289
+ `bun scripts/release-version.ts next` prints the next free build number for today from the versions on npm. Versions
290
+ sort by date across months and years, so `akm upgrade` and semver ranges order them correctly. The 0.9 line keeps
291
+ `0.9.N`. See `STABILITY.md`. (#1089)
292
+
293
+ ### Removed
294
+
295
+ - **Six improve knobs that measured no effect (#1131).** Each is removed with the code that served only it; a config
296
+ that still sets one loads (named once by the unknown-key warning, dropped by `akm migrate apply`).
297
+ - `processes.consolidate.antiCollapse`: the random cluster-member injection. Identical results with it off on an
298
+ 80-memory pool.
299
+ - `processes.consolidate.p90ChunkSecondsDefault`: the up-front budget cap on the consolidation pool keeps its
300
+ behaviour with a fixed 30 s per chunk. Identical at 10, 30 and 90 s under a 180 s budget.
301
+ - `processes.consolidate.minPoolSize`: the minimum-pool skip, its `pool_below_min_size` `improve_skipped` reason and
302
+ the `minPoolSize` / `gates.minimumPool` fields of the consolidation plan. It was bypassed by `--strategy`, and the
303
+ documented default (500) differed from the code's (0). `improve_runs` rows that carry the plan fields still read.
304
+ - `processes.distill.fidelityCheck`: the negation-pattern contradiction check. No difference at n=3.
305
+ - `processes.reflect.lowValueFilter`: the low-value tier of the reflect noise classifier. Reflect edits only
306
+ frontmatter, which the filter always passes. No-op and cosmetic edits are still refused.
307
+ - `improve.salience.outcomeWeightEnabled`: the toggle and its parity weights. The outcome term stays on
308
+ (w_e 0.25, w_o 0.15, w_r 0.60), as it was by default.
309
+
310
+ - **`akm workflow create --reset` (#1091).** Declared since 0.9.12 as a deprecated alias of `--force`, never read.
311
+ `--force` alone replaces a workflow with a fresh template; `--force --from <file>` replaces it from the file.
312
+ - **`akm improve --plan` (#1091).** An exact alias of `--dry-run` with no other callers. Use `--dry-run`; it prints the
313
+ same `plan.processes` routing table.
314
+ - **`akm task list` (#1091).** A delegating alias of `akm search --type task` (added in 0.9.15, #951) with no callers
315
+ in the plugins, akm-eval or OpenPalm. Use `akm search --type task`.
316
+ - **Improve config keys nothing read (#1091).** `processes.distill.limit`, `processes.memoryInference.cls`,
317
+ `processes.proactiveMaintenance.limit` (an alias of `maxPerRun`) and `triage.policy` (set in the shipped `default`
318
+ strategy, read by no code) are gone from the schema and the shipped strategy. A config that still sets one loads
319
+ (named once by the unknown-key warning). `plan.triage.maxDiffLines` leaves the plan type; stored runs that carry it,
320
+ or `plan.proactive.configured.limit`, still decode. `processes.distill.cls` is read and stays. OpenPalm's improve
321
+ editor writes the strategy-level `limit`, not per-process ones, so the process `limit` of reflect and consolidate
322
+ stays.
323
+ - **The `targetVocab: 2` marker on `task_history` rows, and the `"mcp"` package keyword (#1091).** Nothing read the
324
+ marker since migration 025 backfilled the old result vocabulary, so new rows no longer carry it and a stored one is
325
+ ignored; its newer-than-2 warning is gone. akm has no MCP code left, so `package.json` no longer lists `mcp`.
326
+ - **The hard-error and bespoke-warning hints for old config keys (#1091).** `defaults.llm`, `defaults.agent` and
327
+ `defaults.improve` (rejected since 0.9), the `feedbackDistillation` process (rejected since 0.8.0), and the engine
328
+ settings under `index.<pass>` and `index.stalenessDetection` (dropped with a bespoke message) now load like any other
329
+ unknown key: named once by the unknown-key warning, ignored, and dropped by `akm migrate apply`.
330
+ - **`akm improve --auto-accept` is a hard error (#1091).** It was removed in 0.9.0 and has been accepted-and-warned
331
+ since; it is now an unknown flag like any other (exit 2), and `--auto-accept 90` no longer reaches the scope. Use
332
+ `akm improve && akm proposal drain --promote --yes`, or a `triage` block with `applyMode: "promote"`.
333
+ - **The hint tables for the 0.9.0 renames (#1091).** `RETIRED_COMMAND_HINTS` (39 entries), `RETIRED_FLAG_HINTS` (5) and
334
+ `SELF_DIAGNOSED_FLAGS` (`src/cli/retired-commands.ts` is gone), the per-command `--target`, `--source`, `--scope`,
335
+ `--enrich`/`--re-enrich` and `proposal drain --profile` rejections, the `akm improve canary` scope rejection, the
336
+ `akm show` colon-ref tip and the `<type>:` search tip. A retired command is now an ordinary `UNKNOWN_COMMAND` (with a
337
+ did-you-mean when one is close, within a third of the name's length) and a retired flag an ordinary `UNKNOWN_FLAG`
338
+ (exit 2), with no migration pointer. The same goes for the `--from stash|both` rename error (a bundle may now be named
339
+ `stash`), the `vault:`/`env:`/`secret:` ref rejections (`env/`, `secrets/`, `secret://` and `${secret:NAME}` are
340
+ unchanged), the `config get` replacement hints for `stashDir`, `sources`, `installed`, `wiki`, `wikiName` and `llm`,
341
+ and the retired-spelling notes in the agent hints.
342
+ `task run`/`task explain` no longer reserve the input name `target`, so a task may declare an input of that name.
343
+ `akm improve canary` is now an asset-type scope that matches nothing.
344
+ - **`akm help agents` (#1091).** It printed the same two guides as `akm hints` with the opposite default (short, with
345
+ `--full` for the complete one). `akm hints` is the one command: the complete guide by default, `--detail brief` for the
346
+ short one (`akm help agents >> AGENTS.md` becomes `akm hints --detail brief >> AGENTS.md`). `akm help agents` is now an
347
+ ordinary unknown command.
348
+ - **`--shape` (#1091).** It acted on three commands (`search`, `curate`, `show`; `summary` only on `show`) while about 55
349
+ others ignored it and `--detail`. `--detail agent` replaces `--shape agent`, and `--detail` now takes
350
+ `brief|normal|full|agent`. `--shape summary` had no caller; use `--detail brief` on `show`. `--shape` is an unknown flag
351
+ (exit 2, `UNKNOWN_FLAG`) with no alias, so callers must change in step: the akm plugins, akm-eval's retrieval,
352
+ skillret and longmemeval benchmarks, and `akm help agents`-style scripts. `INVALID_SHAPE_VALUE` is gone, and
353
+ `INVALID_DETAIL_VALUE` now lists `agent`. The CLI reference no longer claims `--shape summary` errors outside `show`
354
+ (it warned and fell back to `agent`).
355
+ - **`--target` on `import`, `env create`, `env remove`, `secret set` and `proposal accept`/`diff`/`revert` (#1091).**
356
+ `--bundle` is the one write-destination flag, as on `remember`, `clone`, `improve` and `task`; `--target` is an
357
+ unknown flag (exit 2) with no alias. The plugins, akm-eval and OpenPalm pass no `--target`. Errors and hints that said
358
+ `--target` now say `--bundle`.
359
+ - **`akm task validate` (#1091).** Folded into `akm lint --type tasks`, as `akm workflow validate` was. Lint already parsed
360
+ every task file through the same version router; it now also runs the two gates `akm task sync` runs before it installs
361
+ a schedule (the cron suits the local scheduler backend; each schedule entry's `inputs` satisfy the declared contract),
362
+ so it never reports clean a task sync would refuse. Gone with the command: the `valid`/`blocked`/`invalid`/`not-a-task`
363
+ outcome, the `resolved` shape and the bare-path argument (point `akm lint --dir` at a bundle root). The
364
+ owner's crontab and tasks, the plugins, akm-eval and OpenPalm do not call it.
365
+ - **`akm config path --all` (#1091).** `akm info` already reports the bundle, config, data, cache and state directories
366
+ (the index is `<dataDir>/index.db`), and `--all` was the one place `config path` printed an envelope instead of a bare
367
+ path. `akm config path` still prints the config file path and still runs when the config itself fails to load; `--all`
368
+ is an unknown flag (exit 2). Hints that sent you to `config path --all` now say `akm info`.
369
+ - **`akm improve report` and `akm improve judge` are real subcommands (#1091).** They were magic values of the `scope`
370
+ positional. Both spellings keep working. `--run` and `--since` are now flags of `report` alone, so `akm improve --run x`
371
+ and `akm improve skills --since 7d` are unknown flags (exit 2) instead of a usage error from a hand-written check;
372
+ `--strategy` is `judge`'s own flag too. `akm improve [scope]` is unchanged, and `akm-eval`'s judge-gate keeps calling
373
+ `akm improve judge`.
374
+
375
+ ### Fixed
376
+
377
+ - **A workflow param's `default:` is now applied (#1096).** An omitted param was absent from the run and the unit
378
+ prompt said `Run parameters: {}`, so workflows restated their defaults in prose. A run now starts with each declared
379
+ default for the params it was not given; explicit values still win.
380
+ - **A call recovered by the retry without the schema is one successful call in the usage rows.** The failed schema
381
+ attempt (`format_ignored` or a 4xx schema rejection) was recorded as a failed call with 0 tokens next to the retry's
382
+ success, so `akm improve` usage showed e.g. `distill freellm/gpt-oss:120b calls 1 failures 1` beside 17 successes. Only
383
+ the retry is recorded now; a retry that also fails is still one failure.
384
+ - **Distill's lesson update (#1139) is judged as the lesson it makes, and costs a call only for a lesson that is named.**
385
+ The judge read only the added lines as a standalone lesson, so a single added fact failed `reusable` and no update
386
+ passed (0 of 8 on the akm-eval `lesson-update` class, on two models). It now reads the extended lesson (old body plus
387
+ added lines) as one lesson, in the same single call: reusable and grounded as a whole (a line is grounded when the
388
+ memory or the lesson states it), and each added line must state something the lesson does not already hold. An update is also tried only for a related lesson that the writer's NONE reason, or the judge's
389
+ non-redundancy finding, names, or for the only related lesson, not for every lesson among the nearest three. The
390
+ update writer lists the memory's new facts before the body, and an update that lists none is not proposed. (#1090)
391
+ - **consolidate's pair judge no longer lets a later date alone make one note replace another (#1134).** After the
392
+ same-age fix (#1146), `gpt-oss:120b` retired notes about a different named thing (two partners on one template:
393
+ "B is newer and replaces Alder with Birch") as `supersedes`, 1 to 2 unsafe retirements of 60 per run where the build
394
+ before it had none. The pair prompt now says a note replaces another only when both are about the same named thing
395
+ (service, integration, partner, component, region, file), and that notes about different named things never replace
396
+ each other whatever their dates; `unrelated` covers different named things written to one layout. Measured with
397
+ akm-eval `evals/consolidate`, per-case n=3: `gpt-oss:120b` unsafe retirements 1, 2, 1 -> 0, 0, 0 with recall
398
+ 0.97 -> 0.99; qwen3.8-27b stays at 0 unsafe, recall 0.70.
399
+ - **A gateway that answers 5xx `format_ignored` no longer fails every schema call (#1150).** A `provider_error` 5xx whose
400
+ body names the response format (`format_ignored`, `response_format` or `json_schema`) is now answered like the 4xx
401
+ schema rejection: one retry without the schema, remembered for the connection. `gpt-oss:120b` through the lab
402
+ gateway needed `supportsJsonSchema: false` set by hand. Other 5xx answers keep the transient-retry path. (#1150)
403
+
404
+ ## [0.9.31] - 2026-10-09
405
+
406
+ A patch release: concurrent config writes no longer lose a change, OpenAI's reasoning models work as `llm`
407
+ engines, `akm improve --require-engines` probes send API keys, and the npm package's docs links resolve.
408
+
409
+ ### Fixed
410
+
411
+ - **consolidate's pair judge no longer reads two same-age notes with different values as an update (#1134).** On the
412
+ 60 labelled pairs `gpt-5.6-terra` retired 10 notes that held a claim the kept note lacked, in every run, always
413
+ from the ten `contradicts` pairs: it labelled them `supersedes`, because the prompt called B "newer" although both
414
+ notes had the same file time, and listed no claim for the old value because "updates" were left out of the lists.
415
+ The judge now sees "A (same age as B)" / "B (same age as A)" when the dates tie, and a different value counts as a
416
+ replacement only when B says so or is created later; otherwise both values are listed and the pair is
417
+ `contradicts`. Measured with akm-eval `evals/consolidate`, n=3 per-case: terra unsafe retirements 10 of 60 ->
418
+ 1 to 3 (first prompt) and 0 on the final build's first run; qwen3.8-27b stays at 0 unsafe, recall 0.69 -> 0.71.
419
+ Pool (80 memories): terra 2 unsafe per run -> 0 to 2; qwen 0, recall 0.77 -> 0.79.
420
+
421
+ - **`akm improve --require-engines` sends each engine's API key with its probe.** The probe used the engine's
422
+ connection as resolved, where the key is still a symbolic reference that a dispatch reads only when it sends a
423
+ request, so every keyed endpoint (OpenAI, a gateway that enforces auth) answered 401 and the run stopped with
424
+ "engine completion path is not reachable". The probe now builds the connection as a dispatch does; a required key
425
+ that is missing is reported as that engine's failure.
426
+ - **OpenAI's reasoning models (gpt-5.x) work as `llm` engines.** They answer 400 to any `temperature` but the
427
+ default and to `max_tokens`, so every akm model call failed on them. Like the existing fallback for the
428
+ thinking-control fields, a 400 that names `temperature` is retried once without it, and one that asks for
429
+ `max_completion_tokens` is retried with the cap under that name; the connection keeps the working shape for
430
+ the rest of the process.
431
+ - **Every relative link in the npm package's docs resolves again.** #1118 made `docs/README.md`,
432
+ `docs/migration/README.md` and `docs/reference/cli.md` link by relative path to guides and pages the package did
433
+ not ship. npm always ships a folder's `README.md`, so those links were dead for npm users. The package now ships
434
+ the user-facing `docs/` folders (`agents`, `architecture`, `guides`, `integration`, `maintainers`, `migration`,
435
+ `posts`, `reference`), `docs/product-surface.md`, the one plan they link to, and `ROADMAP.md`. `docs/plans` stays
436
+ out. The link check skips link syntax inside code, which is an example, not a link.
437
+ - **Concurrent `akm config set` runs no longer lose each other's changes.** A lock file was created empty and its
438
+ owner's PID written a moment later; a process that looked in that gap read no PID, took the live lock for an
439
+ abandoned one and removed it, so two writers ran at once and one change was lost. A lock now appears with its
440
+ owner's PID already in it. Every akm lock file (config, index writer, scheduler, `akm.lock`, run, extract, secret)
441
+ is created this way.
442
+
9
443
  ## [0.9.30] - 2026-10-09
10
444
 
11
445
  A patch release: `akm upgrade` acts only on the `akm-opencode` spec OpenCode's config names.
@@ -27,6 +461,10 @@ plugin on a host that follows `akm-opencode@next`.
27
461
 
28
462
  - **`akm upgrade` is Stable**, including its plugin step and `--next`, after real-host, empty-container and
29
463
  failure-path runs on 0.9.28 (#1099).
464
+ - **`akm proposal extract` and the improve `extract` process move from Experimental to Evolving.** The extract eval
465
+ (akm-eval `evals/extract`, n=3) measured insights saved 1.00 (terra) / 0.97 (qwen), routine sessions left empty
466
+ 1.00, and planted instructions saved 0. Evolving rather than Stable because 0.10 is still settling the improve
467
+ defaults; the eval stays its gate (#1133).
30
468
 
31
469
  ### Fixed
32
470
 
package/README.md CHANGED
@@ -55,7 +55,7 @@ akm show scripts/deploy.sh # View details and run command
55
55
  - **One library for every agent** -- Use the same capability library from Claude Code, OpenCode, Cursor, Aider, Windsurf, or any assistant that can run shell commands.
56
56
  - **Load only what the task needs** -- Search or curate a shortlist, then load full content by ref. No giant startup prompt is required.
57
57
  - **Package complete capabilities** -- Install and share bundles containing skills, scripts, workflows, agents, instructions, memories, and knowledge -- not just prompt snippets.
58
- - **Improve through evidence, with review** -- Feedback influences retrieval and produces diffable proposals. Changes remain reviewable and target only writable bundles.
58
+ - **Improve through evidence, with review** -- Feedback re-ranks assets right away. A negative report can carry an exact text fix, and `akm improve` repairs metadata; every edit lands as a diffable proposal you accept, reject or revert, and only writable bundles are changed.
59
59
  - **Turn knowledge into repeatable work** -- Run persisted workflows with dispatch, gates, retries, budgets, and resume instead of reconstructing a process from prose every session.
60
60
 
61
61
  akm retrieves every supported capability type. It directly orchestrates
@@ -80,16 +80,16 @@ Or generate it directly: `akm help agents >> AGENTS.md`
80
80
 
81
81
  ## Documentation
82
82
 
83
- Full docs, CLI reference, and guides are available on [GitHub](https://github.com/itlackey/akm):
83
+ Full docs, CLI reference, and guides are at **[akm.fwdslsh.dev](https://akm.fwdslsh.dev/)**:
84
84
 
85
- - [Getting Started](https://github.com/itlackey/akm/blob/main/docs/guides/getting-started.md)
86
- - [Supported Formats](https://github.com/itlackey/akm/blob/main/docs/reference/supported-formats.md)
87
- - [CLI Reference](https://github.com/itlackey/akm/blob/main/docs/reference/cli.md)
88
- - [Task v3 Reference](https://github.com/itlackey/akm/blob/main/docs/reference/tasks.md)
89
- - [0.9.2 Migration Guide](https://github.com/itlackey/akm/blob/main/docs/migration/v0.9.1-to-v0.9.2.md)
90
- - [Configuration](https://github.com/itlackey/akm/blob/main/docs/reference/configuration.md)
91
- - [Bundle Authoring Guide](https://github.com/itlackey/akm/blob/main/docs/guides/author-bundles.md)
92
- - [Registry](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md)
85
+ - [Getting Started](https://akm.fwdslsh.dev/docs/guides/getting-started/)
86
+ - [Supported Formats](https://akm.fwdslsh.dev/docs/reference/supported-formats/)
87
+ - [CLI Reference](https://akm.fwdslsh.dev/docs/reference/cli/)
88
+ - [Task v3 Reference](https://akm.fwdslsh.dev/docs/reference/tasks/)
89
+ - [0.9.2 Migration Guide](https://akm.fwdslsh.dev/docs/migration/v0.9.1-to-v0.9.2/)
90
+ - [Configuration](https://akm.fwdslsh.dev/docs/reference/configuration/)
91
+ - [Bundle Authoring Guide](https://akm.fwdslsh.dev/docs/guides/author-bundles/)
92
+ - [Registry](https://akm.fwdslsh.dev/docs/reference/registry/)
93
93
 
94
94
  ## License
95
95
 
package/ROADMAP.md ADDED
@@ -0,0 +1,112 @@
1
+ # Roadmap
2
+
3
+ This page outlines the high-level focus for the next two releases.
4
+
5
+ It is intentionally directional rather than exhaustive. Detailed command,
6
+ schema, and migration behavior still lives in the release notes, the
7
+ migration guides, and [STABILITY.md](STABILITY.md), which classifies
8
+ today's public contract by surface. The internal design specs behind the
9
+ 0.9.0 architecture consolidation live under
10
+ [`docs/architecture/specs/`](docs/architecture/specs/).
11
+
12
+ ## 0.8 Foundation
13
+
14
+ Release `0.8.0` already established much of the product shape that `0.9` and
15
+ `1.0` build on.
16
+
17
+ - The CLI and config surface were substantially redesigned.
18
+ - `akm improve` became the main self-improvement and maintenance entry point.
19
+ - Task assets, proposal workflows, health reporting, and agent command-building
20
+ all landed as first-class capabilities.
21
+ - Storage, indexing, graph extraction, and migration paths were tightened to
22
+ support the v1 contract freeze.
23
+
24
+ That means the next two releases are less about inventing a new direction and
25
+ more about hardening, simplifying, and freezing what `0.8.0` put in place.
26
+
27
+ ## 0.9
28
+
29
+ Release `0.9` is the architecture-consolidation release ahead of the `1.0`
30
+ contract freeze. It replaces the flat asset-type registry with a
31
+ **bundle / adapter** model and settles the durable contracts `1.0` will freeze.
32
+
33
+ - **One canonical ref grammar.** Refs are `[bundle//]conceptId` — a
34
+ subdir-qualified concept id such as `skills/code-review` or `memories/vpn-note`
35
+ — replacing the pre-`0.9` `type:name` spelling. Durable state stores the
36
+ fully-qualified form; the short bundle-omitted form is input sugar. This is a
37
+ deliberate, one-time break, taken pre-`1.0` while it is still cheap.
38
+ - **Format-neutral bundles.** Installed sources are bundles, each recognized by
39
+ a built-in adapter (Agent Skills, Claude/OpenCode commands and agents,
40
+ knowledge, YAML workflows, tasks, env/secret files, scripts, OKF and LLM-wiki
41
+ knowledge bases) instead of a closed asset-type list.
42
+ - **Storage consolidation.** The durable databases collapse from four to three
43
+ (`state.db` / `index.db` / a separate `logs.db`); config migrates from the
44
+ flat `stashDir` / `sources` / `installed` keys to `bundles` / `defaultBundle`.
45
+ The one-time cutover is journaled and crash-resumable via `akm migrate apply`,
46
+ with a verified backup taken first.
47
+ - **Debt paydown.** The improve / proposal / workflow internals are decomposed
48
+ onto one file-change transaction model and an ambient run context, the
49
+ deprecated `0.8` CLI aliases are removed, and the `vault` asset type is
50
+ retired in favor of `env` / `secret`.
51
+
52
+ In short: `0.9` reduces ambiguity, pays down pre-`1.0` debt, and arrives at a
53
+ small, durable core ready for the `1.0` freeze.
54
+
55
+ ### The 0.9.x series
56
+
57
+ `0.9.x` is a series of refactoring and clean-up releases. The intent is to
58
+ have **all technical debt paid off and all planned breaking changes handled
59
+ before the 0.10.x series begins**. To get there quickly, 0.9.x patch releases
60
+ may include breaking changes (see [STABILITY.md](STABILITY.md)); every
61
+ break ships with a CHANGELOG migration note.
62
+
63
+ Alongside the bug fixes and compatibility improvements, `0.9.x` also focuses
64
+ on **tuning the improve processes** — reflect, distill, consolidate, memory
65
+ inference, graph extraction, and proactive maintenance — and **settling the
66
+ final design of those features** so the `0.10.0` release starts from a
67
+ finished improve surface rather than one still being reshaped.
68
+
69
+ ## 0.10
70
+
71
+ The `0.10.x` series is focused on **bug fixes and tuning** on top of the
72
+ debt-free 0.9 core — no new architecture. With the clean-up done, 0.10.x
73
+ attempts to return to the normal semver discipline: breaking changes only in
74
+ major and minor releases, never in patches.
75
+
76
+ ## 0.X
77
+
78
+ There may be other minor releases between 0.10.x and 1.0.0. The goal is to minimize the number of minor releases after 0.10.x, and they will only be used for addressing breaking changes that are justifiable before the 1.0.0 release.
79
+
80
+ ## 1.0
81
+
82
+ Release `1.0` is focused on freezing the public contract and shipping the first
83
+ stable ecosystem layer around that core.
84
+
85
+ - Freeze the supported source model, the `[bundle//]conceptId` ref format,
86
+ search behavior, and write-target rules — the surfaces
87
+ [STABILITY.md](STABILITY.md)'s own 1.0 contract-freeze section
88
+ already names — and settle the surfaces it currently classifies as
89
+ Evolving or Experimental.
90
+ - Carry the `0.8` agent and improvement workflow forward as a stable,
91
+ documented product surface rather than a collection of pre-release features.
92
+ - Ship an official akm SDK for building integrations against the stable v1
93
+ contract instead of reverse-engineering CLI behavior.
94
+ - Ship in-process akm plugins for Claude Code and OpenCode, built on that SDK,
95
+ so those tools can integrate more deeply without changing the CLI-first core
96
+ model that akm itself relies on.
97
+ - Keep the CLI as the canonical foundation so the SDK and plugin story extends
98
+ the existing system rather than forking it into separate integration models.
99
+
100
+ In short: `1.0` is where akm stops being only a strong CLI and becomes a stable
101
+ platform for both direct use and deeper tool integration.
102
+
103
+ ## Scope Notes
104
+
105
+ - The CLI remains the foundation in both releases.
106
+ - `0.9` prioritizes hardening over expansion.
107
+ - `1.0` adds the SDK and in-process plugin story on top of a frozen core, not
108
+ instead of it.
109
+ - The roadmap assumes the `0.8.0` redesign is the baseline; later releases are
110
+ about stabilizing and extending that baseline, not replacing it.
111
+ - Specific features may move between releases as implementation and testing
112
+ shake out, but the themes above are the intended direction.