akm-cli 0.10.261012-beta → 0.10.261014-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 (518) hide show
  1. package/CHANGELOG.md +710 -3
  2. package/README.md +15 -0
  3. package/SECURITY.md +11 -10
  4. package/STABILITY.md +47 -51
  5. package/dist/assets/hints/cli-hints-full.md +21 -19
  6. package/dist/assets/hints/cli-hints-short.md +3 -4
  7. package/dist/assets/opencode/akm-plugin.js +177 -0
  8. package/dist/assets/stash-skeleton/README.md +1 -1
  9. package/dist/assets/tasks/core/improve.yml +1 -1
  10. package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
  11. package/dist/assets/ui/config.js +27 -10
  12. package/dist/assets/workflows/workflow-template.md +2 -2
  13. package/dist/cli/clack.js +3 -1
  14. package/dist/cli/selection.js +33 -0
  15. package/dist/cli/shared.js +14 -1
  16. package/dist/cli/unknown-flags.js +6 -37
  17. package/dist/cli.js +69 -48
  18. package/dist/commands/agent/agent-dispatch.js +17 -25
  19. package/dist/commands/agent/contribute-cli.js +9 -8
  20. package/dist/commands/command/command-cli.js +4 -8
  21. package/dist/commands/command/command-execution.js +25 -39
  22. package/dist/commands/command/execution-source-loader.js +10 -14
  23. package/dist/commands/completions.js +1 -1
  24. package/dist/commands/config-cli.js +14 -5
  25. package/dist/commands/env/child-env.js +12 -14
  26. package/dist/commands/env/env-binding.js +47 -58
  27. package/dist/commands/env/env-cli.js +22 -24
  28. package/dist/commands/env/env.js +10 -58
  29. package/dist/commands/env/secret-cli.js +11 -29
  30. package/dist/commands/env/secret.js +3 -10
  31. package/dist/commands/health/checks.js +10 -849
  32. package/dist/commands/health/connections-and-harnesses-check.js +109 -0
  33. package/dist/commands/health/egress.js +3 -3
  34. package/dist/commands/health/html-report.js +9 -10
  35. package/dist/commands/health/plugin-staleness.js +18 -11
  36. package/dist/commands/health/report-view-model.js +16 -12
  37. package/dist/commands/health/scheduler-binary.js +1 -1
  38. package/dist/commands/health/semantic-search-check.js +85 -0
  39. package/dist/commands/health/type-directory-check.js +0 -3
  40. package/dist/commands/health.js +30 -42
  41. package/dist/commands/improve/consolidate/pair-pass.js +10 -25
  42. package/dist/commands/improve/consolidate.js +10 -15
  43. package/dist/commands/improve/distill.js +5 -17
  44. package/dist/commands/improve/eligibility.js +1 -3
  45. package/dist/commands/improve/execution.js +37 -40
  46. package/dist/commands/improve/extract-cli.js +6 -11
  47. package/dist/commands/improve/extract-prompt.js +2 -2
  48. package/dist/commands/improve/extract.js +67 -97
  49. package/dist/commands/improve/improve-cli.js +22 -128
  50. package/dist/commands/improve/improve-report.js +1 -1
  51. package/dist/commands/improve/improve-strategies.js +25 -108
  52. package/dist/commands/improve/improve.js +10 -14
  53. package/dist/commands/improve/loop-stages.js +3 -0
  54. package/dist/commands/improve/memory/memory-improve.js +1 -1
  55. package/dist/commands/improve/preparation.js +8 -13
  56. package/dist/commands/improve/reflect.js +203 -332
  57. package/dist/commands/improve/retrieval-scope.js +1 -1
  58. package/dist/commands/improve/session-asset.js +3 -2
  59. package/dist/commands/improve/stage.js +87 -115
  60. package/dist/commands/lint/base-linter.js +3 -3
  61. package/dist/commands/lint/env-key-rules.js +7 -6
  62. package/dist/commands/lint/index.js +3 -3
  63. package/dist/commands/models-cli.js +103 -63
  64. package/dist/commands/proposal/drain.js +26 -39
  65. package/dist/commands/proposal/proposal-cli.js +14 -18
  66. package/dist/commands/proposal/propose-cli.js +4 -2
  67. package/dist/commands/proposal/propose.js +37 -64
  68. package/dist/commands/proposal/repository.js +17 -17
  69. package/dist/commands/proposal/validators/proposal-validators.js +3 -6
  70. package/dist/commands/read/curate.js +10 -6
  71. package/dist/commands/read/registry-search.js +2 -48
  72. package/dist/commands/read/search-cli.js +1 -8
  73. package/dist/commands/read/search.js +5 -6
  74. package/dist/commands/read/show.js +6 -29
  75. package/dist/commands/remember.js +25 -40
  76. package/dist/commands/sources/add-cli.js +8 -63
  77. package/dist/commands/sources/bundle-cli.js +8 -9
  78. package/dist/commands/sources/bundle-config-ops.js +2 -2
  79. package/dist/commands/sources/info.js +12 -1
  80. package/dist/commands/sources/init.js +1 -1
  81. package/dist/commands/sources/installed-stashes.js +119 -63
  82. package/dist/commands/sources/migration-help.js +1 -1
  83. package/dist/commands/sources/plugin-upgrade.js +8 -15
  84. package/dist/commands/sources/schema-repair.js +4 -10
  85. package/dist/commands/sources/source-add.js +2 -2
  86. package/dist/commands/sources/source-clone.js +31 -7
  87. package/dist/commands/sources/source-manage.js +4 -4
  88. package/dist/commands/targets.js +175 -0
  89. package/dist/commands/tasks/explain.js +104 -69
  90. package/dist/commands/tasks/tasks-cli.js +9 -11
  91. package/dist/commands/tasks/tasks.js +75 -97
  92. package/dist/commands/ui/api.js +11 -3
  93. package/dist/commands/ui/redact.js +5 -31
  94. package/dist/commands/ui/workspace-actions.js +1 -1
  95. package/dist/commands/workflow/plan.js +48 -9
  96. package/dist/commands/workflow-cli.js +40 -45
  97. package/dist/core/adapter/adapters/agent-skills-adapter.js +10 -11
  98. package/dist/core/adapter/adapters/akm-adapter.js +36 -41
  99. package/dist/core/adapter/adapters/akm-lint.js +10 -12
  100. package/dist/core/adapter/adapters/akm-metadata.js +2 -2
  101. package/dist/core/adapter/adapters/akm-task-adapter.js +8 -9
  102. package/dist/core/adapter/adapters/akm-workflow-adapter.js +5 -5
  103. package/dist/core/adapter/adapters/claude-adapter.js +1 -1
  104. package/dist/core/adapter/adapters/dotenv-adapter.js +7 -6
  105. package/dist/core/adapter/adapters/generic-files-adapter.js +5 -5
  106. package/dist/core/adapter/adapters/index.js +3 -4
  107. package/dist/core/adapter/adapters/llm-wiki-adapter.js +12 -14
  108. package/dist/core/adapter/adapters/okf-adapter.js +8 -10
  109. package/dist/core/adapter/adapters/opencode-adapter.js +1 -1
  110. package/dist/core/adapter/adapters/shared.js +3 -3
  111. package/dist/core/adapter/adapters/tool-dir-shared.js +7 -25
  112. package/dist/core/adapter/adapters/website-snapshot-adapter.js +3 -3
  113. package/dist/core/adapter/detect-adapter.js +1 -1
  114. package/dist/core/adapter/execution-source.js +13 -35
  115. package/dist/core/adapter/registry.js +1 -1
  116. package/dist/core/adapter/validate-context.js +2 -4
  117. package/dist/core/asset/asset-placement.js +1 -1
  118. package/dist/core/asset/asset-ref.js +3 -3
  119. package/dist/core/asset/resolve-ref.js +5 -0
  120. package/dist/core/bundle-rename.js +12 -4
  121. package/dist/core/closest-match.js +37 -0
  122. package/dist/core/common.js +37 -57
  123. package/dist/core/config/config-io.js +26 -18
  124. package/dist/core/config/config-schema.js +19 -106
  125. package/dist/core/config/config-sources.js +3 -3
  126. package/dist/core/config/config-types.js +4 -4
  127. package/dist/core/config/config-walker.js +50 -77
  128. package/dist/core/config/config.js +438 -109
  129. package/dist/core/config/convert-engine-references.js +114 -0
  130. package/dist/core/config/convert-engines-shared.js +40 -0
  131. package/dist/core/config/convert-engines.js +300 -0
  132. package/dist/core/config/convert-models-overlay.js +137 -0
  133. package/dist/core/config/credentials.js +304 -0
  134. package/dist/core/config/engine-semantics.js +3 -3
  135. package/dist/core/config/migrate-keys.js +222 -0
  136. package/dist/core/config/model-aliases.js +37 -0
  137. package/dist/core/config/models-file.js +34 -0
  138. package/dist/core/config/retired-engines.js +53 -0
  139. package/dist/core/config/schema/connections.js +41 -0
  140. package/dist/core/config/schema/embedding.js +2 -2
  141. package/dist/core/config/schema/harnesses.js +41 -0
  142. package/dist/core/config/schema/improve-processes.js +9 -28
  143. package/dist/core/config/schema/improve.js +36 -1
  144. package/dist/core/config/schema/index-config.js +18 -20
  145. package/dist/core/config/schema/primitives.js +42 -17
  146. package/dist/core/config/schema/search.js +6 -11
  147. package/dist/core/config/schema/sources-bundles.js +9 -9
  148. package/dist/core/config/schema/workflow.js +2 -6
  149. package/dist/core/config/unusable-entries.js +66 -0
  150. package/dist/core/content-safety.js +3 -6
  151. package/dist/core/endpoint-url.js +47 -0
  152. package/dist/core/env-secret-ref.js +84 -73
  153. package/dist/core/errors.js +10 -16
  154. package/dist/core/extra-params.js +3 -3
  155. package/dist/core/improve-result.js +8 -9
  156. package/dist/core/json-schema.js +1 -1
  157. package/dist/core/lesson-lint.js +1 -1
  158. package/dist/core/llm-inference.js +80 -0
  159. package/dist/core/parse.js +2 -2
  160. package/dist/core/paths.js +33 -10
  161. package/dist/core/recognition-util.js +8 -10
  162. package/dist/core/redaction.js +94 -55
  163. package/dist/core/ref-token.js +82 -0
  164. package/dist/core/secret-value.js +14 -0
  165. package/dist/core/state/migrations.js +17 -22
  166. package/dist/core/structured.js +2 -68
  167. package/dist/core/subprocess.js +63 -22
  168. package/dist/core/type-presentation.js +10 -14
  169. package/dist/core/write-source.js +20 -4
  170. package/dist/execution/input-contract.js +3 -6
  171. package/dist/execution/notices.js +49 -0
  172. package/dist/execution/resolved-request.js +24 -40
  173. package/dist/execution/source.js +21 -45
  174. package/dist/execution/target-ref.js +2 -2
  175. package/dist/indexer/bundle-identity-guard.js +6 -5
  176. package/dist/indexer/ensure-index.js +1 -1
  177. package/dist/indexer/index-writer-lock.js +1 -1
  178. package/dist/indexer/indexer.js +46 -42
  179. package/dist/indexer/installations.js +12 -22
  180. package/dist/indexer/lookup/adapter-concept-owner.js +40 -14
  181. package/dist/indexer/materialize-embeddings.js +20 -16
  182. package/dist/indexer/passes/memory-inference.js +21 -50
  183. package/dist/indexer/passes/metadata.js +5 -5
  184. package/dist/indexer/scan/doc-to-entry.js +1 -1
  185. package/dist/indexer/scan/drain-dir.js +9 -11
  186. package/dist/indexer/search/db-search.js +9 -7
  187. package/dist/indexer/search/search-source.js +42 -22
  188. package/dist/indexer/usage/usage-events.js +2 -3
  189. package/dist/indexer/walk/index-context.js +2 -1
  190. package/dist/indexer/walk/matchers.js +3 -11
  191. package/dist/indexer/walk/path-resolver.js +13 -68
  192. package/dist/indexer/walk/walker.js +32 -26
  193. package/dist/integrations/agent/akm-read-tools.js +81 -0
  194. package/dist/integrations/agent/config.js +1 -1
  195. package/dist/integrations/agent/detect.js +32 -36
  196. package/dist/integrations/agent/execution.js +130 -428
  197. package/dist/integrations/agent/index.js +1 -1
  198. package/dist/integrations/agent/profiles.js +24 -28
  199. package/dist/integrations/agent/prompts.js +17 -30
  200. package/dist/integrations/agent/request-lowering.js +67 -101
  201. package/dist/integrations/agent/resolution.js +332 -0
  202. package/dist/integrations/agent/runner-dispatch.js +156 -181
  203. package/dist/integrations/agent/runner.js +20 -70
  204. package/dist/integrations/agent/runtime-port.js +4 -0
  205. package/dist/integrations/agent/runtime.js +10 -0
  206. package/dist/integrations/agent/spawn.js +65 -190
  207. package/dist/integrations/harnesses/aider/index.js +19 -39
  208. package/dist/integrations/harnesses/amazonq/index.js +17 -32
  209. package/dist/integrations/harnesses/claude/index.js +59 -28
  210. package/dist/integrations/harnesses/claude/session-log.js +7 -5
  211. package/dist/integrations/harnesses/codex/index.js +19 -31
  212. package/dist/integrations/harnesses/copilot/index.js +17 -35
  213. package/dist/integrations/harnesses/gemini/index.js +18 -34
  214. package/dist/integrations/harnesses/harness.js +36 -0
  215. package/dist/integrations/harnesses/index.js +20 -51
  216. package/dist/integrations/harnesses/opencode/agent-builder.js +132 -100
  217. package/dist/integrations/harnesses/opencode/index.js +11 -33
  218. package/dist/integrations/harnesses/opencode/roots.js +50 -0
  219. package/dist/integrations/harnesses/opencode/runtime/binary.js +206 -0
  220. package/dist/integrations/harnesses/opencode/runtime/command.js +152 -0
  221. package/dist/integrations/harnesses/opencode/runtime/index.js +177 -0
  222. package/dist/integrations/harnesses/opencode/runtime/tar.js +107 -0
  223. package/dist/integrations/harnesses/opencode/session-log-v1.js +15 -7
  224. package/dist/integrations/harnesses/opencode/session-log-v2.js +72 -48
  225. package/dist/integrations/harnesses/opencode/session-log.js +58 -137
  226. package/dist/integrations/harnesses/opencode/version.js +34 -53
  227. package/dist/integrations/harnesses/openhands/index.js +13 -37
  228. package/dist/integrations/harnesses/pi/index.js +21 -32
  229. package/dist/integrations/lockfile.js +1 -1
  230. package/dist/integrations/session-logs/index.js +11 -31
  231. package/dist/llm/client.js +93 -111
  232. package/dist/llm/embedder.js +19 -34
  233. package/dist/llm/embedders/connection.js +31 -0
  234. package/dist/llm/embedders/local-model-files.js +56 -0
  235. package/dist/llm/embedders/local.js +146 -115
  236. package/dist/llm/embedders/remote.js +26 -23
  237. package/dist/llm/embedders/types.js +1 -1
  238. package/dist/llm/index-passes.js +33 -39
  239. package/dist/llm/memory-infer.js +67 -77
  240. package/dist/llm/model-list.js +35 -0
  241. package/dist/llm/rerank-client.js +8 -14
  242. package/dist/llm/structured-call.js +45 -99
  243. package/dist/llm/structured.js +60 -0
  244. package/dist/output/renderers.js +2 -8
  245. package/dist/output/shapes/helpers.js +18 -44
  246. package/dist/output/shapes/passthrough.js +1 -0
  247. package/dist/output/shapes.js +1 -7
  248. package/dist/output/text/command-format.js +41 -39
  249. package/dist/output/text/health-format.js +8 -2
  250. package/dist/output/text/helpers.js +1 -1
  251. package/dist/output/text/migrate.js +12 -0
  252. package/dist/output/text/models.js +3 -2
  253. package/dist/output/text/registry-commands.js +1 -2
  254. package/dist/output/text/show-directives.js +16 -28
  255. package/dist/output/text/show-format.js +0 -2
  256. package/dist/output/text/targets-table.js +70 -0
  257. package/dist/output/text/workflow-format.js +44 -15
  258. package/dist/output/text.js +1 -1
  259. package/dist/registry/providers/skills-sh.js +1 -28
  260. package/dist/registry/providers/static-index.js +1 -71
  261. package/dist/runtime.js +6 -2
  262. package/dist/scripts/akm-migrate-node.js +47095 -44905
  263. package/dist/scripts/akm-migrate.js +46946 -44755
  264. package/dist/setup/detect.js +28 -273
  265. package/dist/setup/endpoint.js +36 -0
  266. package/dist/setup/semantic-assets.js +13 -19
  267. package/dist/setup/setup-flags.js +77 -0
  268. package/dist/setup/setup-plan.js +144 -0
  269. package/dist/setup/setup.js +134 -358
  270. package/dist/setup/steps/connection-shared.js +49 -101
  271. package/dist/setup/steps/connection.js +121 -524
  272. package/dist/setup/steps/embeddings.js +151 -0
  273. package/dist/setup/steps/harnesses.js +118 -0
  274. package/dist/setup/steps/platforms.js +2 -81
  275. package/dist/setup/steps/tasks.js +1 -2
  276. package/dist/setup/steps.js +10 -0
  277. package/dist/setup/summary.js +67 -0
  278. package/dist/sources/freshness.js +16 -21
  279. package/dist/sources/providers/git-provider.js +2 -9
  280. package/dist/sources/providers/provider-utils.js +13 -5
  281. package/dist/sources/resolve.js +12 -16
  282. package/dist/sources/snapshot-fetchers/robots.js +11 -12
  283. package/dist/sources/snapshot-fetchers/secret-seam.js +2 -4
  284. package/dist/sources/snapshot-fetchers/website-ingest.js +8 -15
  285. package/dist/sources/snapshot-fetchers/x.js +1 -1
  286. package/dist/standalone/onnxruntime-library.js +52 -0
  287. package/dist/storage/repositories/improve-ledger-repository.js +1 -1
  288. package/dist/storage/repositories/improve-runs-repository.js +0 -13
  289. package/dist/storage/repositories/index-entries-repository.js +2 -2
  290. package/dist/storage/repositories/proposals-repository.js +2 -2
  291. package/dist/storage/repositories/task-history-repository.js +2 -2
  292. package/dist/storage/repositories/workflow-runs-repository.js +44 -129
  293. package/dist/storage/sqlite-read-snapshot.js +33 -29
  294. package/dist/tasks/embedded.js +1 -1
  295. package/dist/tasks/log-redaction.js +7 -119
  296. package/dist/tasks/prepare/prepare-support.js +8 -7
  297. package/dist/tasks/prepare/prepare.js +8 -9
  298. package/dist/tasks/prepare/script-capture.js +9 -25
  299. package/dist/tasks/run/attempt-lifecycle.js +17 -35
  300. package/dist/tasks/run/load-task.js +54 -27
  301. package/dist/tasks/run/run-command-task.js +15 -10
  302. package/dist/tasks/run/run-native-task.js +8 -21
  303. package/dist/tasks/run/run-task.js +5 -8
  304. package/dist/tasks/run/run-workflow-task.js +14 -21
  305. package/dist/tasks/run/task-history.js +9 -17
  306. package/dist/tasks/run/task-log.js +1 -5
  307. package/dist/tasks/scheduler-invocation.js +13 -18
  308. package/dist/tasks/scheduler-sync.js +0 -1
  309. package/dist/tasks/source/bounded-document.js +31 -117
  310. package/dist/tasks/source/parse-task-source.js +0 -1
  311. package/dist/tasks/source/project-v4.js +5 -3
  312. package/dist/tasks/source/task-input-diagnostics.js +3 -4
  313. package/dist/tasks/source/task-source-v4.js +48 -72
  314. package/dist/tasks/source-v3.js +2 -5
  315. package/dist/tasks/task-run-reserved-flags.js +1 -2
  316. package/dist/workflows/authoring/authoring.js +2 -7
  317. package/dist/workflows/compile.js +1 -15
  318. package/dist/workflows/concurrency-policy.js +4 -4
  319. package/dist/workflows/exec/child-workflow.js +1 -4
  320. package/dist/workflows/exec/dispatch-redaction.js +35 -86
  321. package/dist/workflows/exec/environment.js +13 -77
  322. package/dist/workflows/exec/exec-unit.js +14 -55
  323. package/dist/workflows/exec/frozen-judge.js +26 -28
  324. package/dist/workflows/exec/native-executor.js +126 -71
  325. package/dist/workflows/exec/run-workflow.js +38 -42
  326. package/dist/workflows/exec/step-work.js +13 -17
  327. package/dist/workflows/exec/unit-dispatch.js +7 -21
  328. package/dist/workflows/freeze/environment.js +14 -119
  329. package/dist/workflows/freeze/freeze.js +14 -33
  330. package/dist/workflows/freeze/step-values.js +6 -13
  331. package/dist/workflows/freeze/targets/child-workflow.js +3 -5
  332. package/dist/workflows/freeze/targets/command.js +9 -15
  333. package/dist/workflows/freeze/targets/shell.js +0 -3
  334. package/dist/workflows/freeze/task-bindings.js +0 -1
  335. package/dist/workflows/parser.js +50 -59
  336. package/dist/workflows/plan.js +8 -2
  337. package/dist/workflows/renderer.js +83 -9
  338. package/dist/workflows/resource-limits.js +2 -2
  339. package/dist/workflows/runtime/run-plan.js +38 -23
  340. package/dist/workflows/runtime/runs.js +55 -93
  341. package/dist/workflows/runtime/workflow-asset-loader.js +55 -86
  342. package/dist/workflows/source-files.js +7 -19
  343. package/docs/README.md +10 -16
  344. package/docs/architecture/README.md +2 -37
  345. package/docs/architecture/adapters.md +2 -2
  346. package/docs/architecture/akm-core-principles.md +256 -118
  347. package/docs/architecture/architecture.md +283 -99
  348. package/docs/architecture/improvement.md +8 -2
  349. package/docs/architecture/internals/classification.md +1 -3
  350. package/docs/architecture/internals/fresh-host-rebuild-runbook.md +7 -6
  351. package/docs/architecture/internals/health-advisories.md +35 -74
  352. package/docs/architecture/internals/improve-workflow.md +27 -26
  353. package/docs/architecture/internals/indexing.md +3 -3
  354. package/docs/architecture/internals/storage-locations.md +48 -15
  355. package/docs/architecture/persisted-data-compat.md +10 -6
  356. package/docs/architecture/specs/okf-support.md +9 -11
  357. package/docs/architecture/specs/ref.md +7 -9
  358. package/docs/architecture/testing/testing-workflow.md +172 -52
  359. package/docs/architecture/workflow-engine.md +51 -34
  360. package/docs/guides/README.md +0 -1
  361. package/docs/guides/author-bundles.md +15 -20
  362. package/docs/guides/author-workflows.md +93 -71
  363. package/docs/guides/bundles.md +20 -16
  364. package/docs/guides/discover-and-load.md +1 -1
  365. package/docs/guides/getting-started.md +49 -3
  366. package/docs/guides/improve-the-library.md +10 -4
  367. package/docs/guides/recipes/headless-install.md +11 -16
  368. package/docs/guides/run-workflows.md +29 -20
  369. package/docs/guides/scheduling.md +2 -2
  370. package/docs/guides/use-with-any-agent.md +20 -22
  371. package/docs/integration/bundling-akm.md +19 -9
  372. package/docs/maintainers/README.md +2 -6
  373. package/docs/maintainers/release-checklist.md +73 -126
  374. package/docs/migration/README.md +10 -3
  375. package/docs/migration/release-notes/0.10.0.md +81 -16
  376. package/docs/migration/release-notes/0.6.0.md +1 -1
  377. package/docs/migration/release-notes/0.7.0.md +1 -1
  378. package/docs/migration/release-notes/0.9.0.md +1 -1
  379. package/docs/migration/release-notes/README.md +1 -1
  380. package/docs/migration/v0.9-to-v0.10.md +300 -60
  381. package/docs/migration/v0.9.1-to-v0.9.2.md +6 -5
  382. package/docs/posts/config-v2-lessons-16.md +1 -1
  383. package/docs/posts/llm-mode-reflect-13.md +1 -1
  384. package/docs/posts/release-0.6.0.md +11 -11
  385. package/docs/posts/release-0.8.0.md +4 -4
  386. package/docs/posts/workflows-vaults-09.md +1 -1
  387. package/docs/reference/README.md +1 -1
  388. package/docs/reference/asset-types.md +2 -2
  389. package/docs/reference/cli.md +477 -388
  390. package/docs/reference/configuration.md +569 -550
  391. package/docs/reference/data-and-telemetry.md +9 -6
  392. package/docs/reference/env-and-secrets.md +72 -15
  393. package/docs/reference/refs.md +3 -20
  394. package/docs/reference/registry.md +12 -38
  395. package/docs/reference/supported-formats.md +1 -1
  396. package/docs/reference/tasks.md +22 -11
  397. package/docs/reference/ui-api.md +14 -9
  398. package/docs/reference/workflow-schema.md +199 -154
  399. package/docs/reference/workflows.md +4 -6
  400. package/package.json +9 -11
  401. package/schemas/akm-config.json +1696 -2922
  402. package/schemas/akm-task.json +4 -4
  403. package/schemas/akm-workflow.json +36 -9
  404. package/ROADMAP.md +0 -112
  405. package/dist/assets/models.json +0 -35
  406. package/dist/commands/health/engine-usage.js +0 -45
  407. package/dist/commands/sources/dangerous-env-audit.js +0 -134
  408. package/dist/core/activation-policy.js +0 -67
  409. package/dist/core/config/schema/engines.js +0 -160
  410. package/dist/core/config/schema/execution.js +0 -23
  411. package/dist/core/spawn-env.js +0 -268
  412. package/dist/execution/directory-identity.js +0 -78
  413. package/dist/integrations/agent/builder-shared.js +0 -33
  414. package/dist/integrations/agent/builders.js +0 -43
  415. package/dist/integrations/agent/engine-fallback.js +0 -59
  416. package/dist/integrations/agent/engine-resolution.js +0 -333
  417. package/dist/integrations/agent/model-map.js +0 -475
  418. package/dist/integrations/harnesses/aider/agent-builder.js +0 -107
  419. package/dist/integrations/harnesses/aider/result-extractor.js +0 -53
  420. package/dist/integrations/harnesses/amazonq/agent-builder.js +0 -138
  421. package/dist/integrations/harnesses/amazonq/result-extractor.js +0 -48
  422. package/dist/integrations/harnesses/claude/agent-builder.js +0 -106
  423. package/dist/integrations/harnesses/claude/config-import.js +0 -67
  424. package/dist/integrations/harnesses/claude/result-extractor.js +0 -67
  425. package/dist/integrations/harnesses/codex/agent-builder.js +0 -150
  426. package/dist/integrations/harnesses/codex/result-extractor.js +0 -110
  427. package/dist/integrations/harnesses/copilot/agent-builder.js +0 -117
  428. package/dist/integrations/harnesses/copilot/result-extractor.js +0 -178
  429. package/dist/integrations/harnesses/gemini/agent-builder.js +0 -114
  430. package/dist/integrations/harnesses/gemini/result-extractor.js +0 -149
  431. package/dist/integrations/harnesses/opencode/config-import.js +0 -149
  432. package/dist/integrations/harnesses/opencode/model-config.js +0 -33
  433. package/dist/integrations/harnesses/opencode/model-work-agent.js +0 -115
  434. package/dist/integrations/harnesses/opencode/session-log-types.js +0 -12
  435. package/dist/integrations/harnesses/opencode-sdk/index.js +0 -44
  436. package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +0 -1052
  437. package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +0 -199
  438. package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +0 -254
  439. package/dist/integrations/harnesses/opencode-sdk/wire.js +0 -66
  440. package/dist/integrations/harnesses/openhands/agent-builder.js +0 -120
  441. package/dist/integrations/harnesses/openhands/result-extractor.js +0 -135
  442. package/dist/integrations/harnesses/pi/agent-builder.js +0 -89
  443. package/dist/integrations/harnesses/pi/result-extractor.js +0 -168
  444. package/dist/integrations/harnesses/shared.js +0 -18
  445. package/dist/integrations/harnesses/types.js +0 -55
  446. package/dist/llm/feature-gate.js +0 -115
  447. package/dist/output/shapes/models-list.js +0 -16
  448. package/dist/output/shapes/registry-search.js +0 -10
  449. package/dist/setup/detected-engines.js +0 -136
  450. package/dist/setup/engine-config.js +0 -97
  451. package/dist/setup/harness-config-import.js +0 -47
  452. package/dist/setup/providers.js +0 -14
  453. package/dist/setup/steps/semantic.js +0 -39
  454. package/dist/workflows/authoring/scope-key.js +0 -79
  455. package/dist/workflows/exec/lowering-notices.js +0 -23
  456. package/dist/workflows/source-semantics.js +0 -110
  457. package/docs/architecture/0.10-process-rules.md +0 -832
  458. package/docs/architecture/akm-architecture-decision-history.md +0 -2055
  459. package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +0 -550
  460. package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +0 -72
  461. package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +0 -142
  462. package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +0 -189
  463. package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +0 -97
  464. package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +0 -108
  465. package/docs/architecture/decisions/0006-task-source-version-routing.md +0 -124
  466. package/docs/architecture/decisions/0007-workflow-composition-bounds.md +0 -83
  467. package/docs/architecture/decisions/0008-task-binding-normalization.md +0 -88
  468. package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +0 -80
  469. package/docs/architecture/decisions/0010-driver-protocol-cut.md +0 -36
  470. package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +0 -125
  471. package/docs/architecture/decisions/README.md +0 -62
  472. package/docs/architecture/internals/functional-contract-patterns.md +0 -340
  473. package/docs/architecture/internals/registry-network-boundary.md +0 -57
  474. package/docs/architecture/internals/search.md +0 -248
  475. package/docs/architecture/reviews/env-secret-access.md +0 -319
  476. package/docs/architecture/runtime-boundary-design.md +0 -153
  477. package/docs/architecture/specs/0.9.0-close-out-plan.md +0 -361
  478. package/docs/architecture/specs/0.9.0-decisions.md +0 -532
  479. package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +0 -745
  480. package/docs/architecture/specs/0.9.0-open-items-register.md +0 -135
  481. package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +0 -740
  482. package/docs/architecture/specs/0.9.0-release-surface-review.md +0 -636
  483. package/docs/architecture/specs/agent-command-engine-model-design.md +0 -513
  484. package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +0 -501
  485. package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +0 -291
  486. package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +0 -2059
  487. package/docs/architecture/specs/di-seams-plan.md +0 -539
  488. package/docs/architecture/specs/driver-protocol-keep-or-cut.md +0 -275
  489. package/docs/architecture/specs/fact-asset-type.md +0 -142
  490. package/docs/architecture/specs/improve-collapse-churn-detector-design.md +0 -634
  491. package/docs/architecture/specs/reviews/task-workflow-unification/README.md +0 -72
  492. package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +0 -152
  493. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +0 -352
  494. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +0 -300
  495. package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +0 -402
  496. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +0 -758
  497. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +0 -645
  498. package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +0 -602
  499. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +0 -27
  500. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +0 -27
  501. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +0 -74
  502. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +0 -15
  503. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +0 -132
  504. package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +0 -147
  505. package/docs/architecture/specs/stash-conventions-code-spec.md +0 -275
  506. package/docs/architecture/specs/stash-organization-conventions.md +0 -377
  507. package/docs/architecture/specs/task-workflow-format-unification.md +0 -721
  508. package/docs/architecture/specs/workflow-engine-buy-vs-build.md +0 -231
  509. package/docs/architecture/specs/workflow-format-unification.md +0 -432
  510. package/docs/architecture/testing/manual-testing-checklist.md +0 -3411
  511. package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +0 -924
  512. package/docs/architecture/testing/task-workflow-manual-tests.md +0 -1720
  513. package/docs/guides/claude-code-vs-akm-workflows.md +0 -29
  514. package/docs/guides/knowledge-management.md +0 -18
  515. package/docs/maintainers/curate-workmap.md +0 -335
  516. package/docs/migration/v0.5-to-v0.6.md +0 -759
  517. package/docs/migration/v0.7-to-v0.8.md +0 -1378
  518. package/docs/plans/0.9.2-agent-command-workflow-plan.md +0 -423
@@ -1,67 +1,32 @@
1
1
  # Architecture Index
2
2
 
3
- How akm is built: system overview, normative specs, decision history, and
4
- subsystem internals.
3
+ How akm is built: system overview, normative specs, and subsystem internals.
5
4
 
6
5
  - [Architecture](architecture.md) -- How akm's bundles, cache, index, and registries fit together
7
- - [Core Principles](akm-core-principles.md) -- Design principles and constraints
6
+ - [Core Principles](akm-core-principles.md) -- How the code, tests and docs in this repo are built: the engineering rules and what enforces each
8
7
  - [Adapters](adapters.md) -- The `BundleAdapter` contract: what a bundle's files *are*, how they're indexed, linted, and written
9
8
  - [Architecture: The Workflow Engine](workflow-engine.md) -- How a workflow compiles to a frozen plan, persists run/unit state, dispatches work, and resumes without replaying completed steps
10
9
  - [Architecture: The Improvement Loop](improvement.md) -- Purpose and boundary of the improvement loop
11
- - [Runtime Boundary Design](runtime-boundary-design.md) -- Isolating `bun:sqlite`/`Bun.*` from the core
12
- - [Architecture Decision History](akm-architecture-decision-history.md) -- ADR-style record of the major architecture rulings
13
10
 
14
11
  ## Specs (`specs/`)
15
12
 
16
13
  Normative specifications and binding conventions.
17
14
 
18
15
  - [OKF format support](specs/okf-support.md) -- OKF is a first-class format supported through the built-in `okf` adapter
19
- - [0.9.0 surface decisions](specs/0.9.0-decisions.md) -- The decision record (D1-D12) behind the 0.9.0 breaking changes
20
- - [Bundle & Adapter Spec (0.9.0)](specs/akm-0.9.0-bundle-adapter-spec.md) -- Normative spec for bundles, adapters, and bundle recognition
21
- - [Ref Grammar Decision (0.9.0)](specs/akm-0.9.0-ref-grammar-decision.md) -- The `[bundle//]conceptId` ref grammar
22
16
  - [Ref Format](specs/ref.md) -- Wire format for asset references
23
- - [Format-Neutral Bundle Workspace Spec](specs/akm-format-neutral-bundle-workspace-spec.md) -- The format-neutral workspace model
24
- - [Agent, Command, Engine, and Model Resolution](specs/agent-command-engine-model-design.md) -- Approved target semantics for native agent/command bundles, configuration cascading, model maps, and dispatch
25
- - [0.9.2 Agent/Command/Task/Workflow Implementation Plan](../plans/0.9.2-agent-command-workflow-plan.md) -- Sequenced work packages, [GitHub milestone tracker](https://github.com/itlackey/akm/issues/801), migration rules, support boundaries, and release evidence for the coherent execution MVP
26
- - [Fact Asset Type](specs/fact-asset-type.md) -- The `fact` asset type
27
- - [Bundle Conventions Code Spec](specs/stash-conventions-code-spec.md) -- Code-level bundle conventions
28
- - [Bundle Organization Conventions](specs/stash-organization-conventions.md) -- How a bundle is laid out
29
- - [DI Seams Plan](specs/di-seams-plan.md) -- Dependency-injection seams used by the test suite
30
- - [Improve Collapse/Churn Detector](specs/improve-collapse-churn-detector-design.md) -- Longitudinal collapse/churn detection design (§6.3 is the operator runbook referenced by `akm health`)
31
-
32
- Historical review registers (0.9.0 release-review audit trail, kept for provenance, not normative going forward):
33
-
34
- - [0.9.0 Docs–Code Drift Register](specs/0.9.0-docs-code-drift-register.md) -- Ruled record of places documentation and code disagreed, and open-intent questions (Q-01..Q-19)
35
- - [0.9.0 Public API Issue Backlog](specs/0.9.0-public-api-issue-backlog.md) -- Implementation-only findings from the CLI surface review
36
- - [0.9.0 Release Surface Review](specs/0.9.0-release-surface-review.md) -- Reconciled action list from the end-to-end user-facing surface sweep
37
17
 
38
18
  ## Internals (`internals/`)
39
19
 
40
20
  Current-truth subsystem references.
41
21
 
42
22
  - [Storage Locations](internals/storage-locations.md) -- Authoritative inventory of every on-disk read/write path
43
- - [Search](internals/search.md) -- Hybrid search architecture and scoring
44
23
  - [Indexing](internals/indexing.md) -- How the search index is built
45
24
  - [Classification](internals/classification.md) -- Matcher and renderer behavior
46
25
  - [Improve Workflow](internals/improve-workflow.md) -- `akm improve` command surface and pipeline reference
47
26
  - [Health Advisories](internals/health-advisories.md) -- `akm health` advisory-to-action map for operators
48
- - [Registry Network Boundary](internals/registry-network-boundary.md) -- Outbound registry request inventory, destination policy, redirects, and DNS guarantees
49
- - [Functional Contract Patterns](internals/functional-contract-patterns.md) -- Quick reference for contributor pipelines and small process contracts
50
27
  - [Fresh-Host Rebuild Runbook](internals/fresh-host-rebuild-runbook.md) -- Rebuild an akm install on a new machine
51
28
  - [Persisted-Data Compatibility Contract](persisted-data-compat.md) -- What a reader owes data an earlier release wrote, per persisted format
52
29
 
53
- ## Reviews (`reviews/`)
54
-
55
- Point-in-time architecture reviews of a specific subsystem question.
56
-
57
- - [Runtime secret resolution for in-process source fetchers](reviews/env-secret-access.md) -- Why secret reads are injected as a `SecretResolver` capability instead of imported inside the fetcher subgraph
58
-
59
- ## Comparisons (`comparisons/`)
60
-
61
- - [Workflow architecture: Claude Code workflows vs. akm workflows](comparisons/claude-code-vs-akm-workflows-full.md) -- Full technical comparison of the Claude Code `Workflow` tool and akm workflows; see [the short vendor-neutral guide](../guides/claude-code-vs-akm-workflows.md) for the decision-level version
62
-
63
30
  ## Testing (`testing/`)
64
31
 
65
32
  - [Testing Workflow](testing/testing-workflow.md) -- End-to-end, Docker, deployment, and upgrade validation, plus the coverage gap guide
66
- - [Manual Testing Checklist](testing/manual-testing-checklist.md) -- Pre-release manual QA checklist
67
- - [OKF v0.2 Conformance Re-Evaluation Runbook](testing/okf-v0.2-conformance-runbook.md) -- Acceptance procedure to re-run after changing adapters, indexing, refs, writes, or lint behavior
@@ -11,8 +11,8 @@ For read-only native tool bundles, recognition is runtime translation, not
11
11
  conversion: the adapter projects native files into AKM's index/runtime shapes
12
12
  while the source file remains authoritative. AKM does not synchronize native
13
13
  formats, maintain translated canonical copies, or write agent/command assets
14
- back through the Claude/OpenCode adapters. See
15
- [Agent, Command, Engine, and Model Resolution](specs/agent-command-engine-model-design.md).
14
+ back through the Claude/OpenCode adapters. Execution of agent and command
15
+ assets is described in [Architecture: Connections and Harnesses](architecture.md#connections-and-harnesses).
16
16
 
17
17
  > **Stability note.** The adapter set, bundle-recognition rules, and the
18
18
  > `bundles` config shape are still evolving — see [STABILITY.md](../../STABILITY.md).
@@ -1,126 +1,264 @@
1
1
  # akm Core Principles
2
2
 
3
- akm is a portable capability library for AI agents — give every coding agent
4
- the capabilities your team has already built. It indexes existing agent
5
- assets in place, loads only what a task needs, packages capabilities into
6
- shareable bundles, improves the library through reviewable proposals, and
7
- runs durable workflows, locally and without tying the library to one
8
- assistant.
3
+ How akm is built. These are the rules the code, the tests and the
4
+ documentation in this repository follow. What akm does for a user is
5
+ described in [Architecture](architecture.md), whose "Invariants" section
6
+ lists the behaviors every command keeps.
9
7
 
10
- This document lists the design constraints that keep that library
11
- predictable.
8
+ Each principle states the rule, why it exists, and what enforces it. A rule
9
+ with nothing enforcing it is held by review, and says so.
12
10
 
13
- ## What akm Does
11
+ ## Precedence
14
12
 
15
- An agent has a task. Across configured sources (local filesystem paths and
16
- cache-backed git/website/npm mirrors) and registry catalogs, akm helps it
17
- discover assets such as scripts, skills, commands, agents, knowledge docs,
18
- workflows, env files, secrets, and wiki pages.
19
-
20
- Core flow:
21
-
22
- ```text
23
- connect -> index -> curate -> show -> use/run -> feedback -> proposal
24
- ```
25
-
26
- Not every task uses every stage.
13
+ When two principles pull against each other: a user's data comes first,
14
+ then honesty (code and documentation that do what they say), then
15
+ simplicity, then convenience.
27
16
 
28
17
  ## Principles
29
18
 
30
- ### 1. Capabilities remain portable files
31
-
32
- Capabilities are ordinary files on disk — skills, scripts, workflows, agent
33
- definitions, instructions, memories, knowledge docs. akm indexes what's
34
- already there; the source files remain the source of truth, and akm's index
35
- is a derived, rebuildable view rather than a copy of record.
36
-
37
- ### 2. Materialize sources locally and use one retrieval layer
38
-
39
- Local filesystem paths and cache-backed git/website/npm mirrors all
40
- materialize into one local index, so `search`, `curate`, and `show` work the
41
- same way regardless of where a capability originated. Registries stay a
42
- conceptually separate, read-only catalog of installable bundles: registry
43
- results live in `registryHits`, never merged into source `hits`.
44
-
45
- ### 3. Every token must earn its place
46
-
47
- Default output should stay lean. Search and curate are for choosing; show is
48
- for using.
49
-
50
- - **Search is a menu.** Default search output should expose only enough to
51
- choose the next asset. In the current CLI that usually means:
52
- - `brief`: `type`, `name`, `ref`, `action`, `estimatedTokens`, `keys` —
53
- `ref` is deliberately present at the leanest level so an agent can run
54
- `akm show <ref>` without asking for fuller detail
55
- - `normal`: adds `description` and `score`
56
-
57
- Richer provenance/debug fields belong behind fuller detail modes.
58
-
59
- - **Show is a dispatch envelope.** Show should return the payload that lets
60
- the consumer act:
61
- - script execution hints
62
- - skill instructions
63
- - command templates
64
- - agent prompts
65
- - knowledge/wiki content
66
- - workflow steps and parameters
67
- - env key names without secret values
68
- - secret metadata without the secret value
69
-
70
- ### 4. Discovery chooses; show delivers
71
-
72
- Search and curate should not accumulate show-level detail. `full` detail
73
- modes can expose more metadata, but the base mental model stays:
74
-
75
- ```text
76
- search/curate decide
77
- show delivers
78
- filesystem is optional depth
79
- ```
80
-
81
- ### 5. Refs are opaque durable handles
82
-
83
- Consumers should treat refs as opaque lookup handles. The current wire
84
- format is `[bundle//]conceptId[#fragment]`, but agents should pass refs
85
- through rather than parse them. See `docs/architecture/specs/ref.md`.
86
-
87
- ### 6. Execution requires an explicit supported surface
88
-
89
- akm retrieves every supported capability type. It directly orchestrates
90
- defined execution surfaces such as workflows, agent dispatch, tasks, and
91
- guarded subprocess injection. It does not blindly execute arbitrary indexed
92
- content merely because that content appears in search results.
93
-
94
- ### 7. Improvement is evidence-driven and reviewable
95
-
96
- Feedback and usage signal drive `akm improve`, which produces reviewable,
97
- diffable proposals rather than silent rewrites. Accept, reject, and revert
98
- stay human- or policy-gated, and proposals target only writable bundles.
99
-
100
- ### 8. Writes are destination-aware and fail closed
101
-
102
- Writes target only writable bundles/adapters. Read-only adapters and
103
- protected env/secret values are never silently written through — a write
104
- aimed at a non-writable destination fails rather than falling back to an
105
- unintended target.
106
-
107
- ### 9. Output serves agents first
108
-
109
- The default consumer is structured-output automation. JSON-first and
110
- concise detail levels are the right defaults.
111
-
112
- ### 10. Complexity belongs behind indexing and source management
113
-
114
- The hard parts should stay inside indexing, source resolution, registry
115
- install, and provider plumbing, not in the hot path from `search`/`curate`
116
- to `show`/`use`.
117
-
118
- ## What akm Does Not Do
119
-
120
- - blindly execute arbitrary indexed content just because it appears in
121
- search results — akm orchestrates only defined execution surfaces
122
- (workflows, agent dispatch, tasks, guarded subprocess injection)
123
- - expose secret/env values through `show`
124
- - replace live-service integrations such as MCP — akm complements MCP and
125
- assistant-native skills rather than replacing them
126
- - require agents to understand source layouts or provider internals
19
+ ### 1. Delete before you add
20
+
21
+ The default answer to a new guard, cap, version gate, option, mode or layer
22
+ is no. A guard, cap, version gate, or fencing check survives only if it
23
+ passes **all three** tests:
24
+
25
+ 1. **It has demonstrably helped a real user.** Check the local evidence before defending it — the `events` table in `state.db`, task logs, issue history. A guard that has never fired in production is a candidate for deletion, not preservation.
26
+ 2. **Its failure mode costs less than the hazard it prevents.** A cap whose trip makes the CLI unusable is worse than the slowness it was guarding against.
27
+ 3. **The operation is not already gated behind a deliberate human command.** Anything a person explicitly typed does not get a second machine-level gate. The operator is not racing themselves.
28
+
29
+ "This hazard is conceivable" is not a justification — that always answers yes,
30
+ and it is how this codebase accumulated footguns. When in doubt, delete.
31
+
32
+ Preference order when something must change: **remove the limit** > degrade
33
+ with a warning > abort. Aborting is the last resort, not the default.
34
+
35
+ What this does not apply to: machinery that prevents **data loss or
36
+ corruption** passes test 2 on its own merits and stays: backups, atomic
37
+ writes, write-path validation that keeps malformed data out of the database,
38
+ and path-containment checks that stop writes outside the bundle. The target is
39
+ machinery that makes the tool refuse to do its job.
40
+
41
+ The same rule applies to code that is not a guard: build what the current
42
+ design needs and nothing for a future one (YAGNI). No speculative option,
43
+ abstraction, extension point or "flexibility" goes in until a real caller
44
+ needs it, and a mechanism nothing calls any more comes out.
45
+
46
+ Why: every footgun this codebase has removed was a guard added because a
47
+ hazard was conceivable; the limits made the tool refuse to do its job
48
+ more often than they protected anyone.
49
+
50
+ Worked examples, which are the precedent:
51
+
52
+ - **#857** — single-ref lookup walked the entire bundle tree, capped at 16,384 files, and aborted when tripped. Zero useful firings in months of local event history; its only production behavior was making the CLI unusable on a large bundle. Walk and cap deleted, replaced with closed-form candidate enumeration. Net −13 lines of source, every collision guarantee intact.
53
+ - **`extra-params` (#815/#816)** — hard-rejected legacy keys. Degraded to warn-and-auto-lift; only genuinely conflicting keys still reject. This is the template for a guard that had to stay but had the wrong failure mode.
54
+ - **`guarded-source` 1MiB cap** — kept once on the argument that the bytes are hashed, so a truncated read would be silently wrong. That argument rejects *truncation*; it never justified a *cap*. Correct answer was no truncation and no cap.
55
+ - **Migrator TOCTOU fencing** — inode/device/ctime identity checks defending a window inside a human-typed `akm migrate apply` that already holds a cross-process lock and writes backups. A multi-tenant-daemon threat model applied to a single-user CLI.
56
+
57
+ Enforced by: review.
58
+
59
+ ### 2. One place per policy
60
+
61
+ A rule lives in exactly one module and everything else calls it. Write
62
+ destinations branch on source kind only in `src/core/write-source.ts`.
63
+ Fan-out widths are decided once in `src/workflows/concurrency-policy.ts`.
64
+ A call's timeout is resolved once in `src/integrations/agent/resolution.ts`,
65
+ and no other layer adds one.
66
+ A child process's environment is built in `childProcessEnv`
67
+ (`src/core/paths.ts`): akm's own, with the directories this akm resolved set
68
+ over it.
69
+ Every agent harness registers once in `HARNESS_REGISTRY`
70
+ (`src/integrations/harnesses/index.ts`) and core imports the registry, not
71
+ a harness. Runtime-specific APIs (`bun:sqlite`, `Bun.*`) are reached only
72
+ through `src/storage/database.ts` and `src/runtime.ts`.
73
+
74
+ Why: a policy copied into three places drifts into three policies, and
75
+ the drift is invisible until a user hits the one that differs.
76
+
77
+ Enforced by: `tests/harnesses-registry.test.ts` for the registry;
78
+ `scripts/lint-secret-resolver-boundary.ts` for secret reads;
79
+ `tests/contracts/module-boundaries.test.ts` for the module table;
80
+ `tests/contracts/runtime-port-boundary.test.ts` for akm's own runtime, which
81
+ lowering and dispatch reach only through the `AgentRuntime` port
82
+ (`src/integrations/agent/runtime-port.ts`), composed in
83
+ `src/integrations/agent/runtime.ts`. The write chokepoint and the
84
+ no-direct-harness-imports rule are held by review; the OpenCode plugin upgrade
85
+ and staleness checks still import the OpenCode folder's installation helpers
86
+ directly, which is open work.
87
+
88
+ ### 3. One current shape per format, one converter
89
+
90
+ Each stored format has one current shape in code and one converter from older
91
+ shapes. A reader uses the converter and keeps no tolerance of its own. A user's
92
+ file (`config.json`, a task source, bundle content) is rewritten only by
93
+ `akm migrate apply`, with a backup, running that same converter; akm's own
94
+ stores (`state.db`, `index.db`) migrate forward when opened, with a backup
95
+ before any destructive step. Reads reach back to the 0.9.15 floor: above it a
96
+ reader converts in memory, warns once and names `akm migrate apply`; below it,
97
+ and for an older task source (the one named exception), the command stops and
98
+ names the migrator. What happens to data from a newer release differs by
99
+ format (a newer index layout or frozen plan is refused with "upgrade akm";
100
+ `state.db` and `config.json` warn and continue, and `akm health` reports the
101
+ config skew), so [Persisted-Data Compatibility](persisted-data-compat.md)
102
+ states the rule per format. Readers that still carry their own conversion, such
103
+ as the frozen-plan decoder, are listed there and move to the converter as they
104
+ are touched.
105
+
106
+ Why: tolerance scattered through readers is a shim nobody can delete. A
107
+ converter that the readers and the migrator share is written once, tested once
108
+ and leaves one shape behind.
109
+
110
+ Enforced by: `tests/integration/upgrade-rehearsal/`, which installs the
111
+ previous release, builds real state and runs the current build against it, and
112
+ `tests/integration/previous-release-corpus.test.ts`, which pins each older
113
+ shape as refused or converted. The compat page lists each format with its test;
114
+ a change to a format adds its old shape to the rehearsal.
115
+
116
+ ### 4. Sane defaults, flexible overrides
117
+
118
+ Every default works out of the box for the common case, which for anything
119
+ touching a model means a slow local model on a single-threaded server: no
120
+ `max_tokens` sent unless asked, one timeout, concurrency one against a
121
+ loopback endpoint. Every default is overridable where it applies, per
122
+ connection or harness under `connections.<name>.*` and `harnesses.<name>.*`, per workflow step, per command flag, and
123
+ the override is honored as given. The tool never second-guesses a value
124
+ the user set; the one place it still does, clamping a workflow fan-out width
125
+ above 64, is debt rather than policy.
126
+
127
+ Why: defaults that need tuning before the first useful result lose the
128
+ user; overrides that are ignored or capped behind the user's back lose
129
+ their trust.
130
+
131
+ Enforced by: `tests/workflows/concurrency-defaults.test.ts` and
132
+ `tests/resolution.test.ts`; the rest is review.
133
+
134
+ ### 5. If it matters, a test or lint checks it
135
+
136
+ Any rule we want to hold is pinned: output shapes and exit codes, the ref
137
+ grammar, the module table, the execution transport contract, that every command and
138
+ flag named in a doc exists, that shipped assets carry no dead refs. The pin
139
+ is a test under `tests/contracts/`, a unit test, or a script in the `lint`
140
+ chain. A rule nobody pinned is a preference, and may change without
141
+ ceremony.
142
+
143
+ Why: the documentation drifted from the code for months because the pages
144
+ said "normative" and nothing checked.
145
+
146
+ Enforced by: `bun run lint` (`scripts/lint-doc-examples.ts`,
147
+ `scripts/lint-shipped-assets.ts`, `scripts/lint-secret-resolver-boundary.ts`),
148
+ `tests/contracts/`, `tests/output-shapes-unit.test.ts`.
149
+
150
+ ### 6. The suite is green by default and sandboxed through the environment
151
+
152
+ `test:unit` and `test:integration` report zero failures at all times. A
153
+ red run is a real break, never noise to route around; a test that must be
154
+ disabled is disabled explicitly with a linked issue.
155
+
156
+ No test reads or writes a developer's real files: the runner scripts and the
157
+ preload point everything a test can resolve from the environment at a
158
+ sandbox, and a test that leaks fails.
159
+ [Testing Workflow](testing/testing-workflow.md) states the two targets, where
160
+ a test belongs, how the sandbox works and what it cannot cover.
161
+
162
+ Why: a suite that is "usually green" is a suite nobody trusts, and a test
163
+ that reads a developer's real config passes on one machine and fails on
164
+ the next.
165
+
166
+ Enforced by: `tests/_preload.ts` (the sandbox and the tripwire),
167
+ `scripts/test-unit.sh` and `scripts/test-integration.sh` (the split and the
168
+ per-shard `HOME`), `TEST_ISOLATION_MISSING` in `src/core/paths.ts`. Reads
169
+ through `os.homedir()` outside the runner scripts are held by review.
170
+
171
+ ### 7. Prose lives in files; comments say why
172
+
173
+ Multi-line markdown, XML or prose belongs in a standalone file next to the
174
+ module that uses it, imported as text
175
+ (`import x from "./x.md" with { type: "text" }`) and filled with
176
+ `{{PLACEHOLDER}}` tokens through `.replace` or `.replaceAll` at call time.
177
+ `src/tasks/backends/schtasks.ts` (which imports
178
+ `src/assets/backends/schtasks-template.xml`), `src/output/cli-hints.ts` and
179
+ `scripts/copy-assets.ts` are the established pattern.
180
+
181
+ A code comment explains a constraint or a decision the code cannot show; it
182
+ does not cite plans, specs, review rounds or history, and it does not restate
183
+ the line beneath it.
184
+
185
+ Why: templates inside template literals cannot be edited without touching
186
+ source, and a comment that points at a document nobody can find is noise
187
+ that looks like information.
188
+
189
+ Enforced by: review.
190
+
191
+ ### 8. Documentation describes the product that exists
192
+
193
+ One current-truth document per subsystem; no second one is forked. Plans,
194
+ decision records, review registers and future-work promises do not live
195
+ under `docs/`. Code is cited by file and symbol, not line number. A
196
+ document claims no guarantee the code does not enforce, and names no
197
+ command, flag or file that does not exist. When code and documentation
198
+ disagree, one of them is fixed in the same change.
199
+
200
+ Why: a user who reads a stale page loses more time than if the page had
201
+ not existed, and a "normative" document the code ignores teaches
202
+ contributors that documents do not matter.
203
+
204
+ Enforced by: `scripts/lint-doc-examples.ts`, which reads the fenced examples
205
+ in `docs/`, `src/assets/hints/`, `README.md`, `AGENTS.md` and `STABILITY.md`
206
+ and checks that every command and flag in them exists (the migration documents
207
+ of earlier releases, named in `HISTORICAL_MIGRATION_DOCS`, are exempt; the
208
+ current migration guide and release note are read), and the npm pack check in
209
+ `tests/integration/install/npm-pack-contents.test.ts` (no dead link ships).
210
+ Whether a statement is true of the product is held by review.
211
+
212
+ ### 9. CLI-first, Bun-first
213
+
214
+ This package is a command-line tool. `src/cli.ts` dispatches and commands
215
+ live under `src/commands/`. The one programmatic entry point is `akm-cli/api`
216
+ (`src/api.ts`, which exports only `curate`), so the akm plugins can recall
217
+ in-process; the `exports` map in `package.json` lists only `./api`,
218
+ `./package.json` and `./dist/*`, and there are no barrel exports. Bun is the
219
+ preferred runtime and the toolchain. Node 22 is the floor (`engines.node`):
220
+ the npm package bootstraps through Node, and its launcher falls back to Node
221
+ when no usable Bun is on `PATH`. Anything that would become another API for
222
+ other programs is a separate decision, not an incidental export.
223
+
224
+ Why: an accidental API is a compatibility promise nobody agreed to make.
225
+
226
+ Enforced by: `tests/contracts/api-surface.test.ts` (the export list),
227
+ `tests/integration/install/package-exports.test.ts` (the `exports` map),
228
+ `package.json` (`engines.node` and the `preinstall` check), and the
229
+ `node-smoke` job in `.github/workflows/ci.yml` (Node 22 and 24).
230
+
231
+ ### 10. Agent harnesses are thin, replaceable internals
232
+
233
+ akm is simple, lightweight tooling for agents and automated processes. A
234
+ harness such as OpenCode (pi or another later) is an internal detail akm
235
+ uses to enable agentic work. It sits behind one thin seam, is not woven into
236
+ akm core, and can be replaced without touching the rest of akm. What akm adds
237
+ to a harness run, for agent work and for model work, is stated once in
238
+ [Configuration](../reference/configuration.md#how-akm-runs-a-harness).
239
+
240
+ Why: heavy machinery and tight coupling are the opposite of akm's goals.
241
+
242
+ Enforced by: review. The seam is `HARNESS_REGISTRY` (principle 2); akm's own
243
+ runtime sits behind the `AgentRuntime` port (pinned by
244
+ `tests/contracts/runtime-port-boundary.test.ts`), and only the OpenCode plugin
245
+ checks still bypass the seam.
246
+
247
+ ### 11. Simple is not sloppy
248
+
249
+ Principle 1 removes machinery that is not justified; it does not lower the
250
+ standard of what remains. Code is kept simple with SOLID structure, not
251
+ instead of it: a module has one responsibility and one reason to change;
252
+ behaviour is extended by adding a case in its one place (principle 2), not
253
+ by editing every caller; a caller depends on the narrow interface it uses,
254
+ not on the internals behind it; types say what a value is. Shrinking a diff
255
+ by merging unrelated concerns, dropping the error handling the design calls
256
+ for, or flattening clear structure into one long function is not
257
+ simplification and is reverted in review.
258
+
259
+ Why: the layers this codebase has removed were added without need, but the
260
+ remedy for over-engineering is a small clean design, not a monolith. Both
261
+ cost the next reader.
262
+
263
+ Enforced by: review; `tests/contracts/module-boundaries.test.ts` for the
264
+ module seams it pins.