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
@@ -15,35 +15,45 @@ commands that drive a run, see [Running Workflows](../guides/run-workflows.md).
15
15
 
16
16
  ## Frozen plans
17
17
 
18
- The first `akm workflow run <ref>` compiles either peer source format
19
- (Markdown or GitHub-Actions-style YAML) straight to the one plan type and
20
- stores it as durable plan **`irVersion` 6** on the run row (`plan_json` +
21
- `plan_hash`); a new start never emits an older version. `plan_ir_version` and
22
- `plan_hash` are recorded provenance, not gates: a stored plan is decoded as it
23
- is — irVersion 4 and 5 plans included — and one frozen by an older or newer
24
- akm that still decodes simply runs (with one warning). A newer akm's plan that
25
- does not decode is refused with a message naming "Upgrade akm".
18
+ The first `akm workflow run <ref>` compiles the Markdown source straight to
19
+ the one plan type and stores it as durable plan **`irVersion` 8** on the run row
20
+ (`plan_json` + `plan_hash`); a new start never emits an older version.
21
+ `plan_ir_version` and `plan_hash` are recorded provenance, not gates: a stored
22
+ plan is decoded as it is — irVersion 5, 6 and 7 plans that hold no model step
23
+ included — and one frozen by an older or newer akm that still decodes simply
24
+ runs (with one warning). A plan frozen before 8 with a model step recorded an
25
+ engine where 8 records a connection or harness; it does not decode, and
26
+ `akm workflow run` abandons it and starts afresh. A newer akm's plan that does
27
+ not decode is refused with a message naming "Upgrade akm".
26
28
 
27
29
  The durable plan records `sourceHash`, the sha256 of the workflow source file
28
30
  at freeze. It is used only for the resume warning below, never to refuse a
29
31
  run.
30
32
 
31
- Dispatch-significant material is immutable. The resolved request is frozen,
32
- the resolved target is frozen, and runner selection is frozen.
33
- Working directory (`cwd`) identity is frozen.
34
- Git identity and its commit OID are frozen. The executable a unit runs is
35
- resolved at dispatch, so upgrading a CLI (say, `claude`) never strands a run.
36
- Exact models, inference, tools and authorization,
33
+ **Freeze records identities, never locations.** The resolved request is frozen,
34
+ the resolved target is frozen, and runner selection is frozen. So are the refs
35
+ the engine itself dereferences, qualified with their bundle: the run's
36
+ `workflow_ref`, each unit's `env:` refs (`{ kind: "env-ref", ref, precedence }`)
37
+ and each child workflow's ref. Exact models, inference, tools and authorization,
37
38
  execution limits, parameter snapshots, command/script bytes, and verifier
38
39
  selection therefore cannot drift under an in-flight run.
39
40
 
40
- Workflow environment asset values are the narrow live-value exception within
41
- authored workflow inputs.
42
- The environment owner key set and secret-token topology are frozen.
43
- Literal values remain frozen. Pass-through bindings
44
- materialize at dispatch from the current process, and env/secret references
45
- materialize their current values only after owner/topology checks. Durable
46
- plans never store secret values or enable whole-process `inheritEnv`.
41
+ Everything else is live, found again at dispatch through the one ref lookup
42
+ `akm show` uses (no database is opened):
43
+
44
+ | Frozen | Live at dispatch |
45
+ | --- | --- |
46
+ | argv, `exec.cwd` and `pass_env` names as authored | the owner root of the run's workflow, which every exec unit and agent works in (`exec.cwd` joins it once) |
47
+ | `env:` refs, bundle-qualified | the env file, its keys and every `${ref}` in it, and the secrets they name |
48
+ | `${ref}` tokens in argv and `cwd`, as authored | the secret value or asset path each one names |
49
+
50
+ The executable a unit runs is resolved at dispatch too, so upgrading a CLI (say,
51
+ `claude`) never strands a run, and a `bundle update` that moves a bundle to a
52
+ new revision directory in the middle of a run is harmless: the next step runs
53
+ from the new directory. Plans
54
+ frozen as irVersion 5 or 6 also carry a `cwdIdentity` and env owner paths; the
55
+ decoder drops them and such a run dispatches by ref. Durable plans never store
56
+ secret values.
47
57
 
48
58
  **A run executes the plan compiled at creation; edits to source need a new
49
59
  run.** Resuming a run re-reads its workflow source only to warn, once, when
@@ -107,9 +117,7 @@ decoding the stored plan, taking that run's own lock, and walking its spine
107
117
  through `completeWorkflowStep` are identical to the top-level path. That
108
118
  reuse is what makes child run locks arbitrate two-parent contention with no
109
119
  new mechanism, and what makes a resumed parent skip a completed child step
110
- with zero dispatcher calls. The child drive passes a no-op
111
- `disposeDispatchResources` (the parent's `finally` remains the sole owner of
112
- the process-lifecycle drain for the whole process) and no `maxSteps` or
120
+ with zero dispatcher calls. The child drive passes no `maxSteps` or
113
121
  `maxRetries` (the parent's own budgets count only its own spine steps). The
114
122
  lower-level `driveRun` that `runWorkflowSteps` wraps stays module-private —
115
123
  reaching for it directly, instead of the public entry point, would be
@@ -120,8 +128,7 @@ version prefix mixed into a unit's input hash is 7
120
128
  (`src/workflows/exec/step-work.ts`); 0.9.2 bumped it — a single, durable
121
129
  5 → 7 step, since every released tag on the line carries 5 — when
122
130
  `taskInputs`, the resolved values of a composed task's reference-kind
123
- `inputBindings`, joined the preimage (see [ADR
124
- 0002](decisions/0002-unit-reuse-and-input-hash-scope.md)). Child composition
131
+ `inputBindings`, joined the preimage. Child composition
125
132
  itself contributed nothing to that bump: the parent unit's input-hash
126
133
  preimage already covers everything the child drive depends on — the frozen
127
134
  target carries the child's ref, plan hash, content hash, binding mode, and
@@ -183,10 +190,15 @@ the lock.
183
190
 
184
191
  Native fan-out (`akm workflow run`) uses the minimum of four limits: the
185
192
  map's declared `concurrency`, the run's frozen `workflow.maxConcurrency`, the
186
- selected frozen LLM engine's `concurrency` (including an SDK engine's
187
- fallback LLM), and the current host's CPU-derived safety limit. Reapplying
193
+ selected frozen connection's `concurrency` (a harness has none), and the current host's CPU-derived safety limit. Reapplying
188
194
  host safety keeps a run safe when it resumes on a smaller machine.
189
195
 
196
+ `targetConcurrency` (`src/workflows/freeze/step-values.ts`) freezes the
197
+ connection's value as the target's `concurrency` in the plan, and
198
+ `scheduleUnits` (`src/workflows/exec/scheduler.ts`) applies it as
199
+ `llmConcurrency` to cap `map` and `over` fan-out. The scheduler's own default of
200
+ one is a fail-safe for a caller that names no width, not the `map` default.
201
+
190
202
  - **Unset (default):** the CPU-derived value `min(16, max(1, cores − 2))` — a
191
203
  conservative default that leaves headroom on the host and matches the
192
204
  original Claude-Code cap.
@@ -204,14 +216,19 @@ A workflow that fans out is authorizing **N parallel agents**, not one — see
204
216
  [Running Workflows: workflow sources are executed code](../guides/run-workflows.md#security-workflow-sources-are-executed-code)
205
217
  for what that means for trust.
206
218
 
207
- ## Run scope and persistence
219
+ ## Run identity and persistence
208
220
 
209
221
  Run state (`plan_json`, `plan_hash`, step statuses, and the unit journal)
210
- persists in the project's `state.db`; the per-run lock file sits beside it. Run state is scoped to
211
- the current project directory — the nearest `.akm/config.json`, git root,
212
- bundle root, or current directory — so the same workflow can run
213
- independently in separate projects, and `akm workflow list`/`status` without
214
- an explicit run id only ever see runs in that scope.
222
+ persists in the host's `state.db`; the per-run lock file sits beside it. A run
223
+ is identified by its run id and a workflow by its bundle-qualified ref. Run
224
+ state is not scoped to a directory: `akm workflow run <ref>` always starts a
225
+ new run, `akm workflow run <run-id>` drives an existing one,
226
+ `akm workflow resume <run-id>` re-activates a blocked or failed one, and
227
+ `akm workflow list`/`status` show every run on the host from any working
228
+ directory. Starting a ref that already has active runs warns
229
+ and names them; it is never refused. `akm workflow run <ref> --skip-if-locked`
230
+ skips (exit 0) instead of starting when an active run of that ref is held by a
231
+ live process.
215
232
 
216
233
  ## See also
217
234
 
@@ -25,7 +25,6 @@ Task-oriented guides and command tours for using akm.
25
25
 
26
26
  - [Bundle Author's Guide](author-bundles.md) -- Build and share a bundle on GitHub, npm, or a network directory
27
27
  - [Wikis](wikis.md) -- Multi-wiki knowledge bases (Karpathy-style)
28
- - [Claude Code workflows vs. akm workflows](claude-code-vs-akm-workflows.md) -- Comparing the two things that share a name
29
28
 
30
29
  ## Recipes
31
30
 
@@ -52,9 +52,7 @@ sync with the code:
52
52
  metadata when `akm index` runs.
53
53
 
54
54
  If you still have a legacy `.stash.json` sidecar, migrate its fields into
55
- inline metadata before publishing — see the
56
- [v0.7 → v0.8 migration guide](../migration/v0.7-to-v0.8.md) for the full
57
- field mapping and a worked example.
55
+ inline metadata before publishing.
58
56
 
59
57
  **Keep `show` payloads focused.** `akm show` returns the whole asset body by
60
58
  default (the whole document for a knowledge asset, the whole `SKILL.md` for a
@@ -110,7 +108,7 @@ renaming the file to match the query.
110
108
 
111
109
  Run `akm lint` before you publish. It catches structural problems (missing
112
110
  `name`/`type` on commands and agents, broken refs, malformed workflow
113
- structure, invalid task YAML) as well as the dangerous-env-key scan described
111
+ structure, invalid task YAML) as well as the dangerous-env-key findings described
114
112
  in [Env Security](#env-security) below.
115
113
 
116
114
  ```sh
@@ -242,24 +240,21 @@ when a push happens.
242
240
  > [0.8 → 0.9 migration guide](../migration/v0.8-to-v0.9.md).
243
241
 
244
242
  If your bundle includes env files under `env/`, be aware of how `akm` handles
245
- them during install.
243
+ them.
246
244
 
247
- **Dangerous key detection.** `akm bundle add` and `akm lint` scan env files for
248
- environment variable names that can be used to hijack process execution when
249
- the file is loaded via `akm env run`. The flagged names include `LD_PRELOAD`,
245
+ **Dangerous key findings.** `akm lint` reports env files that set environment
246
+ variable names which can be used to hijack process execution when the file is
247
+ loaded via `akm env run`. The flagged names include `LD_PRELOAD`,
250
248
  `PATH`, `DYLD_INSERT_LIBRARIES`, `NODE_OPTIONS`, and 37 others (41 literal
251
249
  keys total), plus two pattern-based families (`BASH_FUNC_*`, Shellshock-class
252
- injection; `GIT_CONFIG_*`, git config override injection). When these keys
253
- are found, `akm bundle add` pauses in interactive mode and asks the user to confirm
254
- before continuing. In non-interactive (CI) mode the install fails unless the
255
- user passes `--allow-dangerous-env-keys`. `akm env run` applies the same scan at
256
- run time: a third-party-sourced bundle is refused unless that reviewed run
257
- explicitly passes `--allow-dangerous-env-keys`; a first-party bundle warns and
258
- proceeds.
259
-
260
- This is not a ban — it is a speed bump. If your bundle legitimately needs one
261
- of these keys (for example, a `PATH` override for a hermetic toolchain), do
262
- the following before publishing:
250
+ injection; `GIT_CONFIG_*`, git config override injection). The finding is
251
+ advice for you as the author, not a gate: installing a bundle is the user's
252
+ trust decision, so `akm bundle add`, `akm bundle update`, `akm env run`,
253
+ `akm secret run` and workflow `env:` bindings never scan, prompt for or block
254
+ these keys, whichever bundle the file comes from.
255
+
256
+ If your bundle legitimately needs one of these keys (for example, a `PATH`
257
+ override for a hermetic toolchain), do the following before publishing:
263
258
 
264
259
  1. Document the reason clearly in your `README.md`. Explain which key is set,
265
260
  why it is needed, and what the value does.
@@ -273,7 +268,7 @@ the following before publishing:
273
268
 
274
269
  3. Consider whether the value can be set by the user after install rather than
275
270
  shipped in the env file. Env files that ship without values — just key names
276
- and comments — do not trigger the audit.
271
+ and comments — produce no findings.
277
272
 
278
273
  **Key names are metadata, not secrets.** Env key names appear in `akm env list`
279
274
  and search results by design. Only values are protected. The `--sensitive` flag
@@ -204,15 +204,10 @@ path, a commit id) that the agent can only fill by doing it.
204
204
 
205
205
  ### What the command can see
206
206
 
207
- The child does **not** inherit your environment. It starts empty and gets a
208
- small default allowlist — `PATH`, `HOME`, the locale/temp/identity variables,
209
- and the Windows essentials (`SystemRoot`, `COMSPEC`, `PATHEXT`, …) that
210
- process creation itself needs — then your `env:` bindings, then the `AKM_*`
211
- context variables. Ordinary commands (`bun`, `git`, `make`, `cargo`) work
212
- unchanged; an unrelated `SOME_OTHER_SERVICE_TOKEN` sitting in the shell that
213
- ran `akm workflow run` does not reach them.
214
-
215
- Widen it only by naming what the unit needs:
207
+ The command inherits your environment, as it would typed in your shell: `PATH`,
208
+ `HOME`, the toolchain variables and any credential of the process that ran `akm
209
+ workflow run` reach it. Then come your `env:` bindings, then the `AKM_*` context
210
+ variables. Ordinary commands (`bun`, `git`, `make`, `cargo`) work unchanged.
216
211
 
217
212
  ```yaml
218
213
  - id: build
@@ -220,25 +215,54 @@ Widen it only by naming what the unit needs:
220
215
  env: [env/build]
221
216
  exec:
222
217
  command: ["cargo", "build", "--release"]
223
- pass_env: [CARGO_HOME, SCCACHE_DIR] # a few extra names
224
218
  ```
225
219
 
226
- `pass_env:` is for a **per-machine** variable an `env:` binding cannot express
227
- (an env asset stores a committed value; `CARGO_HOME` differs per build agent).
228
- Secrets and fixed values belong in exact named `env:` bindings: those values
229
- are redacted out of everything journaled, and `pass_env:` values are not.
220
+ Fixed values belong in exact named `env:` bindings, and they reach the journal as
221
+ they are. A credential belongs in `secrets/`, bound by a `${secrets/name}` token
222
+ inside the env asset; only values substituted from such a ref are redacted out of
223
+ everything journaled (see [Binding a secret to a
224
+ unit](../reference/workflow-schema.md#binding-a-secret-to-a-unit)). A value the
225
+ command inherited is not redacted.
226
+
227
+ `exec.pass_env:`, the list of names an earlier release copied into an otherwise
228
+ empty environment, still parses and selects nothing. Workflow starts freeze the
229
+ durable plan v4 family's current executable format (`irVersion: 8`), which
230
+ rejects `inherit_env`; the command inherits the environment without it.
231
+ Pre-`irVersion`-5 stored plans do not execute; start a new run after updating the
232
+ source.
233
+
234
+ Named bindings are part of the unit's input hash, so changing them re-runs the
235
+ command instead of reusing a row recorded under another scope. What the command
236
+ sees is described under [Workflow Schema: The child's
237
+ environment](../reference/workflow-schema.md#the-childs-environment).
230
238
 
231
- Workflow starts freeze the durable plan v4 family's current executable format
232
- (`irVersion: 5`), which rejects `inherit_env` instead of persisting an
233
- unbounded ambient environment. Pre-`irVersion`-5 stored plans do not execute;
234
- start a new run after updating the source.
239
+ ### Using scripts, env and secrets from other bundles
240
+
241
+ A workflow in one bundle can run a script from a second bundle, with an env
242
+ asset from a third that names a secret in a fourth. Each is addressed by its akm
243
+ ref, `[bundle//]conceptId`, inside a `${...}` token:
244
+
245
+ ```yaml
246
+ - id: status
247
+ unit:
248
+ env: [ci//env/status] # env/status.env in bundle ci
249
+ exec:
250
+ command: ["bun", "${tools//scripts/lab-status/fetch.ts}"]
251
+ ```
235
252
 
236
- Named bindings and `pass_env:` are part of the unit's input hash, so changing
237
- either re-runs the command instead of reusing a row recorded under another
238
- scope.
253
+ ```sh
254
+ # env/status.env in bundle ci
255
+ REGION=east
256
+ TOKEN=${vault//secrets/status_token}
257
+ ```
239
258
 
240
- Full list of allowlisted names:
241
- [Workflow Schema: The child's environment is an allowlist](../reference/workflow-schema.md#the-childs-environment-is-an-allowlist).
259
+ `${tools//scripts/...}` becomes the script's absolute path when the unit
260
+ dispatches, `${vault//secrets/status_token}` becomes the secret's value, and
261
+ `REGION` reaches the child as it is. Nothing in the plan records where any of
262
+ them lives, so updating a bundle in the middle of a run is harmless. The unit
263
+ runs in the root of the bundle that holds the workflow (`cwd:` is relative to
264
+ it, or absolute). See [Workflow Schema: The exec
265
+ contract](../reference/workflow-schema.md#the-exec-contract).
242
266
 
243
267
  ### Things to get right
244
268
 
@@ -246,20 +270,20 @@ Full list of allowlisted names:
246
270
  never `"bun run test"`. Nothing is shell-parsed, which is what makes it safe;
247
271
  if you truly need a pipeline, write `["bash", "-lc", "a | b"]` and own that
248
272
  choice explicitly.
249
- - **No interpolation.** The argv is frozen. A `map` step's item reaches the
250
- command as `AKM_ITEM` (canonical JSON) and the run params as `AKM_PARAMS` —
273
+ - **No interpolation of run data.** The argv is frozen as authored; the only
274
+ substitution is a `${ref}` token naming an asset. A `map` step's item reaches
275
+ the command as `AKM_ITEM` (canonical JSON) and the run params as `AKM_PARAMS` —
251
276
  read them from the environment, do not try to splice them into `command:`.
252
- - **Secrets go in `env:`, never in `command:`.** `command:` is stored verbatim in
253
- the frozen plan; `env:` bindings are carried by name and their values are
254
- redacted out of everything journaled.
277
+ - **Secrets go in `secrets/`, bound through `env:`, never as literals in
278
+ `command:`.** `command:` is stored as authored in the frozen plan; `env:` bindings are carried
279
+ by name, and values substituted from a `${secrets/name}` ref are redacted out
280
+ of everything journaled.
255
281
  - **Long commands need a `timeout:`.** An exec unit defaults to 10 minutes. Use
256
282
  `timeout: "30m"` for a slow suite, or `timeout: "none"` only when you really
257
283
  mean unbounded.
258
- - **Don't assume your shell's environment.** The child gets an allowlist, not
259
- an inheritance. If a command fails with "not found" or reads a missing
260
- toolchain variable, name it in `pass_env:`; use a named `env:` binding for a
261
- fixed or secret value. The durable v4 family (`irVersion: 5`) deliberately
262
- has no whole-process fallback.
284
+ - **The command has your shell's environment, so a credential in it reaches
285
+ it.** Use a named `env:` binding for a fixed or secret value you want redacted
286
+ from the journal; a value the command inherited is not redacted.
263
287
  - **A very chatty command still passes; its artifact just says so.** akm retains
264
288
  8 MiB of stdout and 8 MiB of stderr. Past that it keeps draining and discards,
265
289
  so the command runs to completion and its exit code decides the step. The
@@ -302,10 +326,8 @@ Full reference: [Workflow Schema: Exec (shell) units](../reference/workflow-sche
302
326
  - **Writing `exec.command` as a shell string.** `command: "bun run test"` is
303
327
  rejected; it must be an argv array (`["bun", "run", "test"]`). Nothing is
304
328
  ever shell-parsed, so metacharacters inside an argument stay literal.
305
- - **Expecting an exec command to inherit your environment.** It gets a default
306
- allowlist (`PATH`, `HOME`, locale/temp/identity, the Windows essentials) plus
307
- your `env:` bindings and the `AKM_*` context — nothing else. Widen it with
308
- `exec.pass_env:` (a few non-secret names). `pass_env` lives inside `exec:`;
329
+ - **Listing names in `exec.pass_env:`.** It parses and selects nothing: the
330
+ command already inherits your environment. `pass_env` lives inside `exec:`;
309
331
  the unit-level `env:` key is a list of exact env asset binding refs. A new v4
310
332
  start rejects `inherit_env`.
311
333
  - **Asking a model to do deterministic work.** "Run the test suite and tell me
@@ -361,14 +383,20 @@ If lint reports a very broken workflow, note that its errors are sorted by
361
383
  line, so fix from the top and re-run — the later ones are usually fallout from
362
384
  the first.
363
385
 
364
- ## Choosing engines and models
365
-
366
- Set `defaults.engine`/`defaults.model` (or per-unit `unit.engine`/`unit.model`)
367
- rather than hardcoding an exact model id, so the workflow stays
368
- harness-agnostic. Reference semantic aliases — `fast`, `balanced`, `reasoning`,
369
- or aliases defined in the installed/user `models.json` files — in `model:` fields; see
386
+ ## Choosing where a step runs and which model
387
+
388
+ A step that dispatches a model runs on your default harness, or on akm's own
389
+ runtime over your default connection when you have no harness. Leave that to
390
+ the machine the workflow runs on. Name one only when a step needs it:
391
+ `harness:` or `connection:` in `defaults` (or per-unit `unit.harness` /
392
+ `unit.connection`), where a name the machine has not configured is an error that
393
+ names it and lists what the machine has, so a workflow shared across machines
394
+ should name a program only when it needs that one. Set `defaults.model`/`unit.model` to an alias rather
395
+ than hardcoding an exact model id, so the workflow stays portable. The aliases
396
+ are `fast`, `balanced`, `reasoning` and any a connection or harness maps in its
397
+ `models`; see
370
398
  [Workflow Schema: Model references](../reference/workflow-schema.md#model-references)
371
- for the exact resolution order and config shape.
399
+ for the exact resolution order.
372
400
 
373
401
  Point `reasoning` work at a capable model and keep high-volume fan-out units
374
402
  on `fast`/`balanced`. The richer example's `review` map step is a good template: `reasoning` on the
@@ -400,13 +428,13 @@ serial behavior wholesale — set
400
428
  `akm config set workflow.defaultMapConcurrency 1`.
401
429
 
402
430
  The declared width is a **ceiling, not a promise**. Three other limits clamp it
403
- and the smallest wins: `workflow.maxConcurrency`, the selected engine's
404
- `engines.<name>.concurrency`, and the host's CPU cap. The engine limit is the
405
- one that surprises people: an LLM engine pointed at **localhost defaults to 1**,
406
- because local model servers hold a single loaded model and fall over under
407
- concurrent requests — so a `map` against a local model stays serial no matter
408
- what the step declares, until you raise that engine's own `concurrency`. Remote
409
- LLM endpoints default to 4. See
431
+ and the smallest wins: `workflow.maxConcurrency`, the selected connection's
432
+ `concurrency`, and the host's CPU cap. The connection limit is the one that
433
+ surprises people: a connection pointed at **localhost defaults to 1**, because
434
+ local model servers hold a single loaded model and fall over under concurrent
435
+ requests — so a `map` against a local model stays serial no matter what the step
436
+ declares, until you raise that connection's own `concurrency`. Remote endpoints
437
+ default to 4, and a step on a harness has no limit of this kind. See
410
438
  [Workflow Schema: Fan-out and concurrency](../reference/workflow-schema.md#fan-out-and-concurrency)
411
439
  for the full table.
412
440
 
@@ -456,8 +484,8 @@ blast radius before running it.
456
484
 
457
485
  4. **Deliberately break a gate once.** Run the workflow with params you
458
486
  expect to fail validation, and confirm the gate actually rejects rather
459
- than silently passing — a missing `workflow.judgeEngine` or a malformed
460
- verdict rejects the gate rather than bypassing it (see
487
+ than silently passing — a missing judge (no connection or harness to run
488
+ it) or a malformed verdict rejects the gate rather than bypassing it (see
461
489
  [Workflow Schema: Gates and verification](../reference/workflow-schema.md#gates-and-verification)),
462
490
  so this is worth confirming once per workflow rather than assuming.
463
491
 
@@ -504,28 +532,22 @@ for blocked-child recovery and the limits.
504
532
 
505
533
  ## Troubleshooting
506
534
 
507
- **Every workflow run needs a selected engine.** Freezing resolves an engine
508
- for each unit. With no `defaults.engine`, akm falls back to a config-free
509
- `opencode-sdk` engine — provider, model, and auth come from opencode's own
510
- configuration — and announces it once in the run's `warnings`. The fallback
511
- needs the **`opencode` binary on PATH**: the bundled `@opencode-ai/sdk`
512
- package is an HTTP client only and spawns `opencode serve` to have something
513
- to talk to, so installing the npm package alone is not enough. With no
514
- binary, freezing fails with `INVALID_CONFIG_FILE` and exit 78.
535
+ **A step that dispatches a model needs a harness or a connection.** Freezing
536
+ resolves where each unit runs: its `unit.harness` or `unit.connection`, else the
537
+ document's `defaults`, else your default harness, else akm's own runtime over
538
+ your default connection. With none of those, freezing fails and the error points
539
+ at `akm setup`. A workflow made only of exec steps needs neither.
515
540
 
516
- A workflow with a non-empty `### gate` additionally requires
517
- `workflow.judgeEngine` to name a configured LLM or agent engine — the gate
518
- judge is not covered by the fallback.
541
+ A workflow with a non-empty `### gate` also needs one for the gate judge, which
542
+ runs where model work runs: your default connection, else your default harness.
543
+ An exec-only workflow with a gate still needs it.
519
544
 
520
- `akm setup` normally selects a default execution engine. On a bare container
521
- or CI image, either install opencode and let the fallback apply, or choose an
522
- engine explicitly:
545
+ `akm setup` normally configures both. On a bare container or CI image, run it
546
+ with the answers as flags, or add one by hand:
523
547
 
524
548
  ```sh
525
- npm i -g opencode-ai # fallback route: puts `opencode` on PATH
526
- # ...or pick an engine yourself:
527
- akm config set engines.claude '{"kind":"agent","platform":"claude"}'
528
- akm config set defaults.engine claude
549
+ akm setup --yes --endpoint http://localhost:11434/v1 # a model endpoint
550
+ akm setup --yes --harness claude # or an agent program you have
529
551
  ```
530
552
 
531
553
  ## See also
@@ -59,7 +59,7 @@ akm bundle add github:owner/team-bundle --name team --before community
59
59
  | `filesystem` | local path | Indexed in place, writable by default |
60
60
  | `git` | `github:`, known git-host URL, or URL ending in `.git` | Cloned into `~/.cache/akm/registry/`, read-only by default |
61
61
  | `npm` | `@scope/pkg` | Installed into cache, read-only |
62
- | `website` | Other HTTP/HTTPS URL | Crawled, converted to markdown, refreshed every 12 hours |
62
+ | `website` | Other HTTP/HTTPS URL | Crawled and converted to markdown when added; re-crawled by `akm bundle update` |
63
63
 
64
64
  `akm bundle add` materializes and indexes Git install refs before it reports
65
65
  success. A declarative `--provider git` add does the same, including writable
@@ -80,8 +80,8 @@ back out of `sourceAdded`/`installed`. Without `--name`, akm derives one
80
80
  a `-<hash>` suffix only on a collision — that forgiving fallback applies
81
81
  solely to a derived name, never to an explicit `--name`.
82
82
 
83
- Git credentials must be symbolic references: `$VAR`, `${VAR}`, or
84
- `secret://name`. AKM resolves the reference only at the Git subprocess boundary
83
+ Git credentials must be symbolic references: `$VAR`, `${VAR}`, or an akm ref
84
+ such as `${secrets/gitea_token}`. AKM resolves the reference only at the Git subprocess boundary
85
85
  and sends it as an HTTPS bearer header; it does not put the token in the remote
86
86
  URL or `config.json`.
87
87
 
@@ -136,12 +136,14 @@ Valid `--kind` values are the four bundle providers: `filesystem`, `git`,
136
136
  ## akm bundle update / akm bundle remove
137
137
 
138
138
  `akm bundle update` refreshes git, npm, and website bundles. Each candidate is
139
- staged outside its active root, audited for dangerous environment keys, and
140
- only then published and indexed. `akm bundle remove` disconnects a bundle and
139
+ staged outside its active root and only then published and indexed. Installing
140
+ a bundle is the trust decision: neither `add` nor `update` inspects its `env/`
141
+ files, so a bundle that sets `PATH` in an env file installs and refreshes
142
+ unattended with no flag. `akm bundle remove` disconnects a bundle and
141
143
  re-indexes without it.
142
144
 
143
- Bundle refresh is deliberately explicit: Git bundles do not poll upstream on
144
- their own. Consumers that want automatic refresh should schedule
145
+ Bundle refresh is deliberately explicit: git, npm and website bundles do not
146
+ poll upstream on their own, and `akm index` never re-fetches one. Consumers that want automatic refresh should schedule
145
147
  `akm bundle update <name>` or `akm bundle update --all`. Scheduled invocations
146
148
  should pass `--skip-if-locked` so concurrent index or improve activity becomes
147
149
  a successful skip instead of exit 75.
@@ -152,7 +154,6 @@ akm bundle update @scope/bundle # One managed bundle
152
154
  akm bundle update --all # All managed bundles
153
155
  akm bundle update --all --force # Force fresh download even if version unchanged
154
156
  akm bundle update --all --skip-if-locked # Scheduled refresh: exit 0 on DB contention
155
- akm bundle update @scope/bundle --allow-dangerous-env-keys # Approve reviewed dangerous env keys
156
157
 
157
158
  # Remove
158
159
  akm bundle remove @scope/bundle # By npm id
@@ -161,12 +162,16 @@ akm bundle remove ~/.claude/skills # By path
161
162
  akm bundle remove my-provider # By name
162
163
  ```
163
164
 
164
- Dangerous keys prompt in a terminal (default: No) and block non-interactive
165
- updates unless `--allow-dangerous-env-keys` is explicit. `--yes` is a deprecated
166
- no-op on update; it never approves security findings.
167
- For `--all`, blocked and failed bundles are reported separately and later
168
- bundles continue. A rejected or failed bundle keeps its prior bytes, lock/config
169
- state, and search-index generation.
165
+ A read-only git or npm bundle whose upstream revision is unchanged is not
166
+ fetched or replaced again (`--force` fetches it anyway), so a task or workflow
167
+ running from it keeps its directory. When the revision does change, the
168
+ previous revision directory is kept and older ones are removed.
169
+
170
+ `--allow-dangerous-env-keys` and `--yes` are deprecated no-ops on update,
171
+ accepted through 0.10 so existing scripts keep working.
172
+ For `--all`, failed bundles are reported separately and later bundles continue.
173
+ A failed bundle keeps its prior bytes, lock/config state, and search-index
174
+ generation.
170
175
 
171
176
  Private bundles that intentionally version every file under `env/` and
172
177
  `secrets/` can place this documented marker anywhere in their root
@@ -307,7 +312,6 @@ don't know about yet. The official registry ships pre-configured.
307
312
  ```sh
308
313
  akm registry list # See configured registries
309
314
  akm search "deploy" --from registry # Search registry bundles by topic
310
- akm search "code review" --from registry --assets # Include asset-level hits
311
315
  akm registry add https://example.com/registry/index.json --name my-team
312
316
  akm registry remove my-team
313
317
  ```
@@ -326,7 +330,7 @@ get discovered, see [Registry](../reference/registry.md).
326
330
  ## See also
327
331
 
328
332
  - [Discover & Load](discover-and-load.md) — querying the index after bundles are connected
329
- - [Knowledge Management](knowledge-management.md) — writing your own assets
333
+ - [Capture Knowledge](capture-knowledge.md) — writing your own assets
330
334
  - [Use akm With Any Agent](use-with-any-agent.md) — using refs across bundles in prompts
331
335
  - [Website Source Recipe](recipes/website-source.md) — walkthrough for adding a crawled website bundle
332
336
  - [Website Sources](../reference/website-sources.md) — fetcher reference, X credentials, crawl options
@@ -151,7 +151,7 @@ its ranking) and does not trigger a rewrite.
151
151
  - [Architecture](../architecture/architecture.md) — ranking and search
152
152
  implementation detail (Search Pipeline, Show Resolution, Utility Scoring)
153
153
  - [Bundles](bundles.md) — where indexed assets come from
154
- - [Knowledge Management](knowledge-management.md) — capturing and importing
154
+ - [Capture Knowledge](capture-knowledge.md) — capturing and importing
155
155
  assets before they're discoverable
156
156
  - [Use akm with any agent](use-with-any-agent.md) — how agents reference
157
157
  assets by ref in practice
@@ -34,6 +34,45 @@ Or download a standalone binary directly from the
34
34
  Hitting a PowerShell execution-policy error on Windows? See
35
35
  [Troubleshooting](#troubleshooting) at the end of this guide.
36
36
 
37
+ ### Standalone binary and semantic search
38
+
39
+ Local semantic search (`semanticSearchMode: auto`) runs its embedding model on
40
+ ONNX Runtime. A standalone binary carries the library for its platform. The
41
+ first time it embeds, it copies that library once into akm's cache directory,
42
+ under `onnxruntime/<version>-<platform>-<arch>/` (18 to 34 MB depending on the
43
+ platform; `akm info` prints the cache directory), and loads it from there. Two
44
+ limits follow:
45
+
46
+ - A standalone binary writes its native addon to the system temp directory and
47
+ loads it from there, so a temp directory mounted `noexec` blocks semantic
48
+ search (`akm index` reports it `blocked`; keyword search works). Set `TMPDIR`
49
+ to a writable, executable directory. The cache directory must be on
50
+ an executable mount too.
51
+ - Alpine/musl and Intel macOS have no native ONNX Runtime library. Semantic
52
+ search is unavailable there: `akm index` reports it `blocked` with the reason
53
+ and search stays keyword-only. A remote `embedding.endpoint` still works.
54
+
55
+ ### akm's own agent runtime
56
+
57
+ With a connection and no harness, `akm agent` and the other agent work run on
58
+ akm's own runtime, a pinned OpenCode 2 binary that akm runs as a process. This
59
+ is the same for the npm package and the standalone binary: nothing of OpenCode
60
+ is installed with akm, and the first time the runtime runs, akm downloads the
61
+ OpenCode binary for your platform from the npm registry (one package, about
62
+ 114 MB, 240 MB on disk), checks it against the registry's integrity hash and
63
+ keeps it in the cache directory under `opencode/<version>/`. It is fetched once.
64
+ Three limits follow:
65
+
66
+ - That step needs the npm registry. Without network access for it, enable the
67
+ `opencode` harness with an OpenCode 2 you have installed instead; no setting
68
+ points akm's runtime at a binary of your own.
69
+ - Alpine/musl runs the musl build of that binary, which needs `libstdc++` and
70
+ `libgcc`. The Alpine Node image already has them; on a bare Alpine install them
71
+ with `apk add libstdc++ libgcc`.
72
+ - The binary runs from the cache directory and unpacks its own native pieces
73
+ into `opencode-runtime/tmp/` in the data directory, so neither may be mounted
74
+ `noexec`.
75
+
37
76
  **Success check:**
38
77
 
39
78
  ```sh
@@ -48,17 +87,24 @@ Guided, interactive setup is the default:
48
87
  akm setup
49
88
  ```
50
89
 
51
- `akm setup` walks through bundle location, embedding/LLM settings, semantic
52
- search asset preparation, registries, sources, and task definitions. It also
90
+ `akm setup` walks through the bundle location, the agent programs akm may use
91
+ (Claude Code, Codex, OpenCode, ...), a model connection (an OpenAI-compatible
92
+ endpoint, and which of its models answers each of `fast`, `balanced` and
93
+ `reasoning`), embeddings, semantic search asset preparation, registries,
94
+ sources, and task definitions. The model steps are optional: with no connection
95
+ and no agent program, everything that needs no model still works. Setup also
53
96
  reviews your scheduled task definitions and asks whether to activate them in
54
97
  the OS scheduler — that part of the flow, plus how to migrate or repair
55
98
  scheduler bindings later, is covered in [Scheduling](scheduling.md).
56
99
 
57
100
  For non-interactive use — scripting, CI, or when you just want a working
58
- bundle fast — use `--yes`:
101
+ bundle fast — use `--yes`. A flag answers one question, so
102
+ `--endpoint` adds a model connection without prompting (see the
103
+ [CLI reference](../reference/cli.md#setup) for the rest):
59
104
 
60
105
  ```sh
61
106
  akm setup --yes
107
+ akm setup --endpoint http://localhost:11434/v1 --yes # also add a model endpoint
62
108
  akm setup --dir ~/custom-bundle # optional: a non-default bundle location
63
109
  ```
64
110