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,6 +1,6 @@
1
1
  # AKM Data & Telemetry
2
2
 
3
- AKM stores your data locally on your machine and has **no telemetry**: it does not send usage data, analytics, or crash reports to Anthropic or to the AKM project, and it has no servers of its own that receive your data. It does, however, make network requests to the endpoints **you** configure — your LLM/embedding provider, the registries and source hosts you install from, and GitHub for upgrades — and those endpoints necessarily receive whatever those requests contain. This document describes exactly what AKM reads, writes, and sends.
3
+ AKM stores your data locally on your machine and has **no telemetry**: it does not send usage data, analytics, or crash reports to Anthropic or to the AKM project, and it has no servers of its own that receive your data. It does, however, make network requests to the endpoints **you** configure — your model connections and embedding provider, the harness programs you enable, the registries and source hosts you install from, and GitHub for upgrades — and those endpoints necessarily receive whatever those requests contain. This document describes exactly what AKM reads, writes, and sends.
4
4
 
5
5
  ## No Telemetry
6
6
 
@@ -12,10 +12,11 @@ AKM does not:
12
12
 
13
13
  AKM adds no network destinations of its own. The requests it *does* make all go to endpoints you chose or invoked, and those third parties receive whatever the request contains:
14
14
 
15
- 1. **Your configured LLM/embedding provider** (e.g. Anthropic, OpenAI, a local Ollama, or any OpenAI-compatible endpoint) receives the prompts and asset content sent for reflect/propose/distill/embedding when you enable those features. If you point AKM at Anthropic, Anthropic receives those requests.
15
+ 1. **Your configured connections and embedding provider** (e.g. Anthropic, OpenAI, a local Ollama, or any OpenAI-compatible endpoint) receive the prompts and asset content sent for reflect/propose/distill/embedding when you enable those features, and `akm setup`, `akm models` and `akm health` ask each endpoint which models it serves. If you point AKM at Anthropic, Anthropic receives those requests. Your API key is sent only to the endpoint of the connection it belongs to.
16
+ **A harness you enable** (Claude Code, Codex, OpenCode, ...) is a program akm runs on your machine, and what akm hands it reaches whatever that harness is configured for: its own provider, its own tools, its own MCP servers. It runs with your environment as it is ([How akm runs a harness](configuration.md#how-akm-runs-a-harness)). akm's own agent runtime (used when no harness is enabled) sends to your connection only.
16
17
  2. **Registry metadata and bundle packages** from sources you explicitly configure (GitHub, npm, git remotes, websites) — those hosts receive the fetch/clone/crawl requests, and website sources receive requests for the pages you crawl.
17
18
  3. **`akm upgrade`** — fetches the latest release from GitHub releases (GitHub sees the request).
18
- 4. **`akm setup`** — a single DNS lookup for `github.com` to decide whether to skip network-dependent steps (Ollama detection, remote embedding probes) when offline. No HTTP request is made by this probe; if it succeeds, akm proceeds with the network-dependent steps you already configured.
19
+ 4. **`akm setup`** — looks for an OpenAI-compatible server on `localhost` (ports 11434, 1234 and 8080) with one `GET /v1/models` each, and asks the endpoint you give it (and the embedding endpoint, if you pick another) for its model list. `--no-probe` contacts none of them.
19
20
  5. **`akm improve` dead-link checks** — a full-scope improve run (the default for a bare `akm improve`) sends best-effort `HEAD` requests (following redirects, with a short per-request timeout, checked at a bounded concurrency rather than all at once) to every URL found in the bodies of the knowledge assets it is improving, to flag dead links. The hosts of those URLs see a `HEAD` request; no asset content is sent. Keep URLs you don't want probed out of knowledge-asset bodies, or run improve with an explicit narrower scope.
20
21
 
21
22
  In every case the receiving endpoint is one you configured or invoked; the data leaving your machine is the data you directed AKM to send there.
@@ -48,7 +49,8 @@ AKM writes to these locations on your machine. All paths follow [XDG Base Direct
48
49
 
49
50
  | Path | Contents | Safe to delete? |
50
51
  |---|---|---|
51
- | `config.json` | Your AKM configuration: engines, improve strategies, bundles (bundle sources), and experimental opt-ins — see [Configuration](configuration.md) | **No** — deleting resets all settings |
52
+ | `config.json` | Your AKM configuration: connections, harnesses, improve strategies, bundles (bundle sources), and experimental opt-ins — see [Configuration](configuration.md) | **No** — deleting resets all settings |
53
+ | `credentials.json` | The API keys akm holds for your connections and for the `embedding` and `search.curateRerank` services, each with the endpoint it was stored for, written with mode 0600 (see [Credentials](configuration.md#credentials)) | **No** — deleting it removes those keys; akm sends requests without them |
52
54
 
53
55
  Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
54
56
 
@@ -62,6 +64,7 @@ Override: set `AKM_CONFIG_DIR` or `XDG_CONFIG_HOME`.
62
64
  | `akm.lock` | Inter-process write lock | Yes — recreated automatically |
63
65
  | `backups/tasks/` | Copies of task files taken by `akm migrate apply` before it rewrites them, one timestamped directory per run that rewrote a file | Yes — once the migrated tasks are verified |
64
66
  | `akm.lock.lck` | Lock write sentinel | Yes — recreated automatically |
67
+ | `opencode-runtime/` | Everything akm's own agent runtime keeps: OpenCode's `config/` (with akm's plugin), `data/` (logs, repositories, shell output, and `data/opencode/opencode.db`, the runtime's sessions, which `akm proposal extract --type opencode` reads back, read-only), `cache/`, `state/` and `tmp/` (the binary's own native pieces) | Yes — recreated on next use; deleting it loses the runtime's session history |
65
68
 
66
69
  Override: set `AKM_DATA_DIR` or `XDG_DATA_HOME`.
67
70
 
@@ -101,10 +104,10 @@ Everything in the cache is regenerable. It is safe to delete the entire cache di
101
104
  | `config-backups/config.latest.json` | Latest backup alias (owner-only `0600`) | Yes |
102
105
  | `registry/` | Downloaded registry tarballs (bundle packages from npm, GitHub, etc.) | Yes — re-downloaded on next `akm bundle add` or `akm bundle update` |
103
106
  | `registry-index/` | Legacy per-URL JSON cache (v0.7 artifact) | Yes — fully replaced by `index.db` in 0.8.0 |
104
- | `semantic-status.json` | Semantic index build status marker | Yes |
105
107
  | `bin/` | Downloaded AKM binary cache (used by `akm upgrade`) | Yes |
106
108
  | `tasks/logs/` | Scheduled task log files. Written at your umask; they hold captured command/agent output, so tighten the directory yourself if the machine is shared | Yes — ephemeral logs |
107
109
  | `tasks/history/` | Legacy task history JSONL (v0.7 migration artifact) | Yes |
110
+ | `opencode/<version>/` | The OpenCode binary akm's own agent runtime runs (about 240 MB), fetched from the npm registry on the runtime's first use | Yes — fetched again on next use |
108
111
 
109
112
  Override: set `AKM_CACHE_DIR` or `XDG_CACHE_HOME`.
110
113
 
@@ -170,7 +173,7 @@ the set of types the code actually emits at HEAD (verified against every
170
173
  | `index_db_vacuumed` | `akm index` VACUUMed index.db, after an index layout migration or because more than half its pages were free | `pagesBefore`, `pagesAfter`, `freelistRatioBefore` |
171
174
  | `index_completed` | `akm index`, once when a run finishes | `mode`, `totalMs`, `walkMs`, `llmMs`, `embedMs`, `ftsMs`, `finalizeMs` (phase timings in milliseconds) |
172
175
  | `stash_synced` | `akm improve`'s internal sync passes (the `sync.push` feature), before the run and at its end, **distinct from** the `akm sync` command above | `phase` (`pre-run` or `end-of-run`), `committed`, `pushed`, `skipped`, `reason`, `attributed` (paths the run wrote and staged), `unattributed` (in-scope paths that went dirty during the run without the run writing them — left for their author) |
173
- | `env_access` | `akm env run <name> -- <command>` (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
176
+ | `env_access` | `akm env run <ref> -- <command>`, and a workflow unit's `env:` binding at each dispatch (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
174
177
  | `secret_access` | `akm secret run <ref> <VAR> -- <command>` (audit trail: var **name** only, value never recorded) | `ref`, `var` |
175
178
 
176
179
  *Proposals*
@@ -19,6 +19,16 @@ command; use `env` or `secret`.
19
19
  | Discoverable | key *names* (not values) | name only (the whole file is the value) |
20
20
  | Injects | many vars at once (`env run`) | one var (`secret run <ref> <VAR>`) |
21
21
 
22
+ ## Addressing: the akm ref
23
+
24
+ `env` and `secret` assets are addressed like every other asset, by their akm
25
+ ref `[bundle//]conceptId`: `env/prod`, `secrets/gitea_token`,
26
+ `team//secrets/discord_bot_token`. There is no bare-name form. `akm secret
27
+ run gitea_token ...` and `akm env run prod -- ...` are usage errors that name
28
+ the full ref (`secrets/<name>`, `env/<name>`). An unqualified ref resolves the
29
+ way every unqualified ref does: the default bundle first, then installation
30
+ priority.
31
+
22
32
  ## Core security guarantee
23
33
 
24
34
  Values never appear in akm's structured output. `env list` and `akm show
@@ -31,8 +41,8 @@ the child process — never through akm's own stdout, the index, or `akm
31
41
  show`.
32
42
 
33
43
  ```sh
34
- akm env create prod # create an empty .env group
35
- akm env create prod --from-file ./.env # or ingest an existing .env
44
+ akm env create env/prod # create an empty .env group
45
+ akm env create env/prod --from-file ./.env # or ingest an existing .env
36
46
 
37
47
  # akm does not manage individual keys — edit the whole file with your own editor:
38
48
  $EDITOR "$(akm env path env/prod --quiet)"
@@ -58,17 +68,57 @@ script (re-serialised single-quoted, so shell substitutions in the source
58
68
  `.env` become literal strings) — it requires `--out` and never prints values
59
69
  to stdout.
60
70
 
61
- An env value can be a `${secret:<name>}` token, such as
62
- `DISCORD_BOT_TOKEN=${secret:discord_bot_token}`. `akm env run` and a workflow
63
- unit's `env:` binding both replace it with the secret at `secrets/<name>` in
64
- the env asset's own bundle; `env export` writes the token verbatim. `<name>` is
65
- a path under that `secrets/` directory, so `bundle//name` inside the token is
66
- not a bundle qualifier. A missing secret is an error and nothing is injected.
67
- In a workflow, every value of a bound env asset is redacted from the run's
68
- output and each read records an `env_access` event, so keep non-secret ids out
69
- of env assets used there. See
71
+ ## The `${ref}` token
72
+
73
+ Wherever akm substitutes a reference into a string it hands to a process or a
74
+ provider, the token is `${[bundle//]conceptId}`:
75
+
76
+ - an env value: `DISCORD_BOT_TOKEN=${team//secrets/discord_bot_token}`;
77
+ - a git bundle's config `credential`: `"${secrets/gitea_token}"`.
78
+
79
+ Where the token may appear decides what it may name:
80
+
81
+ - **In an env value**, any asset ref substitutes. A `secrets/...` ref stands for
82
+ the secret's value; any other asset ref (for example
83
+ `${scripts/lab/fetch.sh}`) stands for the asset's absolute path.
84
+ - **In a git bundle's `credential`**, only a `secrets/...` ref is accepted. A `${...}`
85
+ naming any other kind of asset is rejected when the config loads.
86
+
87
+ The ref is resolved with the one ref walk, so it may name any bundle and any
88
+ asset its owner holds. A `${...}` body is a ref when it leads with a native type
89
+ directory, qualified or not (`${secrets/x}`, `${scripts/run.sh}`,
90
+ `${team//secrets/x}`), or when it is bundle-qualified and that bundle is
91
+ installed (`${docs//tables/customers}`, whatever adapter owns it). `akm env
92
+ run` and a workflow unit's `env:` binding replace the tokens in an env file's
93
+ values; `env export` writes them verbatim. A `${...}` body that is not an akm
94
+ ref (`${HOME}`, `${PATH//:/ }`, and shell substitution such as `${v//-/_}`
95
+ unless a bundle named `v` is installed) is plain text: it is left untouched in an env
96
+ value, and in a git bundle's `credential` a `${NAME}` that is a valid variable name is
97
+ expanded from the process environment. A ref no bundle owns is an error and
98
+ nothing is injected. Each read records an `env_access` event. See
70
99
  [Workflow Schema: Binding a secret to a unit](workflow-schema.md#binding-a-secret-to-a-unit).
71
100
 
101
+ The API keys of model connections, `embedding` and `search.curateRerank` are
102
+ not secrets-store references: they are a `$VAR` environment reference or an
103
+ entry of `credentials.json` stored for the endpoint, and a `${secrets/...}` in an `apiKey` is ignored
104
+ with a warning (see [Configuration: Credentials](configuration.md#credentials)).
105
+ The `secrets/` store is for the secrets your own agents, tasks and bundle
106
+ sources need.
107
+
108
+ A secret's value is its file content with surrounding whitespace trimmed. That
109
+ one read is used by `akm secret run`, env tokens, bundle credentials and the
110
+ website fetchers, so a hand-written file's trailing newline never lands in an
111
+ HTTP header.
112
+
113
+ `${secret:NAME}` was the old env-value spelling, meaning the secret `NAME` in the
114
+ env file's own bundle. akm still reads it that way, as `${<bundle>//secrets/NAME}`
115
+ with the bundle that owns the env file, and warns once naming the env ref. The
116
+ env file is bundle content and is not rewritten; write the full ref.
117
+
118
+ `secret://name` was the config spelling of the same thing. It is retired:
119
+ config still reads it as `${secrets/name}` and names the key once, and `akm
120
+ migrate apply` rewrites the file.
121
+
72
122
  ## File modes and storage
73
123
 
74
124
  `.env` files are stored at mode 0600 under `env/` in the target bundle;
@@ -80,6 +130,12 @@ secret can carry a sibling `.sensitive` marker that excludes it from `list`
80
130
  output and from the search index entirely; the value remains usable via
81
131
  `run`.
82
132
 
133
+ An env file or secret may be a symlink to a file anywhere else, such as a
134
+ container's `/run/secrets/<name>`: `akm env`, `akm secret`, `${secrets/name}`
135
+ substitution and a workflow `env:` binding follow it. A name still cannot climb
136
+ out of `env/` or `secrets/` with `..` or an absolute path. Writes never follow
137
+ a symlink out of the bundle.
138
+
83
139
  ## Write-target resolution
84
140
 
85
141
  Env/secret **mutations** (`env create`, `env remove`, `secret set`) choose
@@ -108,10 +164,11 @@ subprocess the child spawns.
108
164
  - Avoid running commands that print the environment (`env`, `printenv`,
109
165
  shell tracing, verbose diagnostics) in agent contexts unless you
110
166
  explicitly intend to expose the child environment.
111
- - Before spawning, injected key names are scanned for known
112
- process-hijacking variables (`LD_PRELOAD`, `PATH`, `GIT_CONFIG_*`, ...): a
113
- first-party bundle warns and proceeds, a third-party-sourced bundle is
114
- refused.
167
+ - Installing a bundle is the trust decision: `env run`, `secret run` and
168
+ workflow `env:` bindings inject what the bundle's files define, including
169
+ keys such as `PATH` or `LD_PRELOAD`, from any bundle, with no warning, block
170
+ or flag. `akm lint` still reports such keys (`dangerous-env-key`,
171
+ non-blocking) so an author can review their own files.
115
172
 
116
173
  ## Stability
117
174
 
@@ -87,20 +87,6 @@ for retrieval — ship as the `facts/conventions/organization`,
87
87
  facts in the bundle skeleton, and are surfaced to agents automatically at
88
88
  authoring time.
89
89
 
90
- ### Planned
91
-
92
- Not part of the current stability contract; see
93
- [ROADMAP.md](../../ROADMAP.md) for what's committed:
94
-
95
- - A `--namespace <ns>` flag to provide a thin name-prefix normalizer on
96
- `search`, `remember`, `improve`, and `feedback` so the same prefix doesn't
97
- have to be typed every time.
98
- - A `::` delimiter (for example `projectA::memories/auth-tip`) to provide
99
- strict isolation so refs from different namespaces never collide in
100
- ranking or recall.
101
-
102
- Until those land, physical subdirectories remain the recommended pattern.
103
-
104
90
  ## Renames and moves
105
91
 
106
92
  **Treat a ref as permanent.** A rename is **delete plus create**: the new
@@ -125,8 +111,7 @@ real refs dangling. The procedure above is the only supported path today.
125
111
  To carry an asset's earned signal (feedback, usage, salience/outcome
126
112
  history) across a rename, the maintainer script `scripts/rekey-asset-ref.ts`
127
113
  re-keys those rows onto the new ref before `akm index` runs; it is Internal
128
- tooling, not a supported command surface. See
129
- [the decision record](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/0.9.0-decisions.md#d3--renames-are-delete--create-akm-mv-ships-experimental).
114
+ tooling, not a supported command surface.
130
115
 
131
116
  ## Refs in prose
132
117
 
@@ -143,9 +128,8 @@ fully-qualified `bundle//conceptId`; the short form is accepted input only),
143
128
  conceptId-prefix enumeration, and the rename-is-delete-plus-create procedure
144
129
  are all named explicitly in the Stable tier, and the ref grammar is called
145
130
  out as frozen at 1.0 alongside the supported source model, search behavior,
146
- and write-target rules. The `--namespace` flag and `::` delimiter above are
147
- On the horizon, not yet part of the contract. See `STABILITY.md` for the
148
- full command- and surface-level tier index.
131
+ and write-target rules. See `STABILITY.md` for the full command- and
132
+ surface-level tier index.
149
133
 
150
134
  ## See also
151
135
 
@@ -153,4 +137,3 @@ full command- and surface-level tier index.
153
137
  - [Asset Types](asset-types.md) — how a conceptId's subdirectory maps to an asset type
154
138
  - [Memory](memory.md) — parent/derived-memory provenance backrefs
155
139
  - [`docs/architecture/specs/ref.md`](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/ref.md) — the normative ref grammar spec
156
- - [ROADMAP.md](../../ROADMAP.md) — planned ref-syntax additions
@@ -95,8 +95,6 @@ is no longer reachable in 0.9.2; publish it at a publicly routable HTTPS
95
95
  endpoint. The only private-network compatibility exception is an npm mirror
96
96
  explicitly selected with `AKM_NPM_REGISTRY`; metadata and tarball requests may
97
97
  reach that configured mirror, but not link-local or cloud-metadata addresses.
98
- See [Registry network boundary](../architecture/internals/registry-network-boundary.md)
99
- for the complete policy and DNS guarantee.
100
98
 
101
99
  ## Searching Registries
102
100
 
@@ -108,9 +106,6 @@ akm search "deploy" --from registry
108
106
 
109
107
  # Search both the local bundle library and registries
110
108
  akm search "deploy" --from all
111
-
112
- # Include asset-level results from v3 indexes
113
- akm search "deploy" --from registry --assets
114
109
  ```
115
110
 
116
111
  ### Search Results
@@ -124,24 +119,11 @@ Each registry hit includes:
124
119
  | `id` | Unique identifier (e.g. `npm:@scope/bundle`) |
125
120
  | `description` | Summary from the registry |
126
121
  | `action` | Ready-to-run next step such as `akm bundle add ... -> then search again` |
122
+ | `installRef` | The ref to pass to `akm bundle add` to install the bundle. Present at every `--detail` level |
127
123
  | `quality` | Optional provenance marker — `"generated"`, `"curated"`, or `"proposed"`. Replaces the legacy `curated` boolean removed in 0.7.0 |
128
124
 
129
125
  Use `--detail full` to include ranking metadata like `score`.
130
126
 
131
- ### The `--assets` Flag
132
-
133
- When a registry publishes a v3 index (see below), `akm search --from
134
- registry` can return individual asset-level hits in addition to bundle-level
135
- hits. Pass `--assets` to enable this:
136
-
137
- ```bash
138
- akm search "code review" --from registry --assets
139
- ```
140
-
141
- Asset hits include `assetType`, `assetName`, `description`, and the parent
142
- `stash` information, so you can install the right bundle and immediately know
143
- which asset to use.
144
-
145
127
  ## Discovery Filtering
146
128
 
147
129
  Not every npm package or GitHub repo is an akm bundle. To keep results
@@ -153,9 +135,7 @@ relevant, the registry enforces tag-based filtering:
153
135
  > **0.6.0 breaking change:** `akm-cli >= 0.6.0` indexes only the
154
136
  > `akm-stash` keyword / topic. The pre-0.6.0 `akm-kit` and `agentikit`
155
137
  > keywords/topics are **not** honored as fallbacks. Publishers migrating
156
- > from 0.5.x must add the new tag — see the
157
- > [migration guide](../migration/v0.5-to-v0.6.md) for the step-by-step
158
- > publisher checklist.
138
+ > from 0.5.x must add the new tag.
159
139
 
160
140
  If you are publishing a bundle, add these tags so it can be discovered:
161
141
 
@@ -215,17 +195,12 @@ akm bundle add file:///absolute/path/to/bundle
215
195
  3. **Download and extract** -- The tarball is downloaded (or repo cloned) to a
216
196
  cache directory under `~/.cache/akm/registry/` and extracted securely
217
197
  (path traversal is rejected).
218
- 4. **Security audit** -- Before install completes, the extracted bundle's
219
- `env`/`secret` asset **key names** are checked against a denylist of
220
- process-execution-hijacking variables -- dynamic-linker hooks
221
- (`LD_PRELOAD`, `DYLD_INSERT_LIBRARIES`, ...), `PATH`, shell/runtime startup
222
- hooks (`BASH_ENV`, `PROMPT_COMMAND`, `NODE_OPTIONS`, `PYTHONSTARTUP`, ...),
223
- and interactive-tool overrides (`EDITOR`, `PAGER`, `GIT_SSH_COMMAND`, ...).
224
- `akm bundle add` **blocks the install** when a dangerous key is present unless
225
- `--allow-dangerous-env-keys` is set (or you confirm at an interactive prompt).
226
- This is a **key-name audit only** (plus the path-traversal rejection in step
227
- 3) -- akm does **not** scan source files, prompts, metadata, or install
228
- scripts for prompt-injection phrases, shell pipes, or lifecycle hooks.
198
+ 4. **No content audit** -- Installing a bundle is the trust decision. akm does
199
+ **not** scan the extracted bundle's source files, prompts, metadata, env
200
+ files or install scripts (beyond the path-traversal rejection in step 3), and
201
+ `akm bundle add` never blocks or prompts over the keys an env file sets.
202
+ `akm lint` reports env keys that can hijack a process (`dangerous-env-key`)
203
+ for authors who want to review their own bundle.
229
204
  5. **Bundle root detection** -- The extracted contents are scanned for asset
230
205
  type directories (`scripts/`, `skills/`, etc.) or a `.stash/` marker. If the
231
206
  bundle nests its bundle under an `opencode/` subdirectory, that is detected
@@ -428,9 +403,9 @@ official registry.
428
403
  ## Registry Index v3
429
404
 
430
405
  Version 3 of the registry index schema is the only format `akm-cli >=
431
- 0.6.0` parses. It carries an `assets` array on each bundle entry so
432
- clients can perform asset-level search without installing the bundle
433
- first.
406
+ 0.6.0` parses. It carries an `assets` array on each bundle entry that
407
+ describes the assets the bundle contains. `akm search --from registry` matches
408
+ bundles; it does not return asset-level hits.
434
409
 
435
410
  ```json
436
411
  {
@@ -466,8 +441,7 @@ Each asset entry supports:
466
441
  The 0.6.0 release dropped support for the legacy v1 / v2 indexes;
467
442
  publishers must regenerate `index.json` with the
468
443
  `scripts/build-registry-index.ts` maintainer script
469
- or the [akm-registry](https://github.com/itlackey/akm-registry) tooling
470
- (see the [v0.5 → v0.6 migration guide](../migration/v0.5-to-v0.6.md)). akm
444
+ or the [akm-registry](https://github.com/itlackey/akm-registry) tooling. akm
471
445
  treats unknown fields inside a v3 entry as forward-compatible.
472
446
 
473
447
  ## Cache Layout
@@ -68,6 +68,6 @@ formats are writable today and why.
68
68
 
69
69
  - [Asset Types](https://github.com/itlackey/akm/blob/main/docs/reference/asset-types.md) — the 14 native asset types AKM's own format recognizes
70
70
  - [Adapters](https://github.com/itlackey/akm/blob/main/docs/architecture/adapters.md) — how AKM picks a format, the write-path internals, and current caveats
71
- - [Agent, Command, Engine, and Model Resolution](https://github.com/itlackey/akm/blob/main/docs/architecture/specs/agent-command-engine-model-design.md) — approved runtime semantics for translated native agents and commands
71
+ - [Architecture: Connections and Harnesses](https://github.com/itlackey/akm/blob/main/docs/architecture/architecture.md#connections-and-harnesses) — how translated native agents and commands are executed
72
72
  - [Concepts](https://github.com/itlackey/akm/blob/main/docs/guides/concepts.md) — the retrieval loop these formats feed
73
73
  - [Wikis](https://github.com/itlackey/akm/blob/main/docs/guides/wikis.md) — the `llm-wiki` authoring workflow
@@ -116,25 +116,36 @@ Script refs use this closed table; any other extension fails before dispatch:
116
116
  `run` is one non-empty shell string. It may specify `shell` from the closed host
117
117
  shell table `bash`, `sh`, `zsh`, `pwsh`, `powershell`, or `cmd`. Shell expansion
118
118
  is runtime behavior for an explicitly authored task `run`; AKM does not infer a
119
- shell from `uses`. `working-directory` must be a relative, contained path under
120
- the task's workspace root. Absolute paths, traversal, dangling links, and
121
- symlink escapes fail before execution.
119
+ shell from `uses`. `working-directory` is a non-empty string, relative to the
120
+ task's bundle root or absolute, like a workflow's `exec.cwd`. akm does not
121
+ keep it inside the bundle or check it when the task source is parsed, so a
122
+ symlink that resolves outside the bundle works. The task runs in
123
+ `<bundle root>/<working-directory>` (or the absolute path as written): akm does
124
+ not capture the directory's identity or re-check it when the task runs. A
125
+ `uses: scripts/<file>` target may itself be a symlink to a file outside the
126
+ bundle; the task freezes that file's bytes, not its location. The interpreter
127
+ comes from the name the script has in the bundle, not from the file the link
128
+ points to, so `scripts/deploy.sh` linked to `real-script.txt` runs under the
129
+ shell.
122
130
 
123
131
  Every field that used to live under v3's `akm:` options bag is a top-level
124
- key in task source v4: `agent`, `engine`, `model`, `inference`, `tools`,
125
- `timeout`, `redact`, `maxSteps`, and `maxRetries`, plus `description`,
126
- `when_to_use`, and `tags`. Environment entries (`env`) are literal string,
132
+ key in task source v4: `agent`, `connection`, `harness`, `model`, `inference`, `timeout`,
133
+ `redact`, `maxSteps`, and `maxRetries`, plus `description`, `when_to_use`, and
134
+ `tags`. A v3 `akm.tools` is dropped by the migration, and a v4 `tools` is
135
+ ignored with a warning. Environment entries (`env`) are literal string,
127
136
  number, or boolean values. Keep credentials out of task source; `redact`
128
137
  contains environment variable names, never secret values.
129
138
 
130
139
  `timeout:` (milliseconds) means a different mechanism depending on the
131
140
  target. For `run:` (native shell/script) and `workflows/<name>` targets it is
132
- an outer supervisory deadline: the runner kills the child process, or aborts
133
- the workflow run at its next step boundary, when it fires. For `uses:
141
+ an outer supervisory deadline: the runner stops the child process (SIGINT, then
142
+ SIGTERM, then SIGKILL; see [How akm runs a
143
+ harness](configuration.md#how-akm-runs-a-harness)), or aborts the workflow run at
144
+ its next step boundary, when it fires. For `uses:
134
145
  akm/command`, `commands/<name>`, and any other agent/LLM dispatch target
135
146
  there is no outer process kill — `timeout:` instead resolves through the
136
147
  execution cascade (config/persona/command/task layers) into the dispatch's
137
- own deadline, and the SDK/CLI runner races each phase against it internally.
148
+ own deadline, and the runner (a harness's process, or akm's own runtime) enforces it.
138
149
  Either way, a dispatch that times out is recorded as `status: failed` with
139
150
  `detail.reason: "timeout"` in `task_history` — not a silent `completed` — and
140
151
  `akm task run` exits non-zero for it; see [health-advisories.md's
@@ -211,7 +222,7 @@ schedule:
211
222
  - cron: "0 8 * * 1"
212
223
  inputs: { scope: all, ticket: OPS-1234 }
213
224
  timeout: 45000
214
- engine: reviewer
225
+ harness: reviewer
215
226
  redact: [TOKEN]
216
227
  ```
217
228
 
@@ -408,7 +419,7 @@ for full before/after examples and recovery guidance.
408
419
  a `version: 4` file still carrying a retired `schedule[].enabled` (the finding
409
420
  names `akm migrate apply`, which converts them), a cron the local scheduler
410
421
  backend cannot parse, and a schedule entry whose `inputs` leave a required
411
- input unsatisfied. It is read-only and needs no configured engine.
422
+ input unsatisfied. It is read-only and needs no configured connection or harness.
412
423
  - `akm task add` validates a task source v4 document, writes it, adds its ref
413
424
  to local scheduler activation, and syncs its bundle. `--params` renders
414
425
  typed `inputs:` declarations instead of a `with:` bag; `--schedule` is
@@ -32,7 +32,7 @@ release, and nothing outside the page should script against them. Use the CLI's
32
32
  `ORIGIN_NOT_ALLOWED`, `METHOD_NOT_ALLOWED`, `UNSUPPORTED_MEDIA_TYPE`, `BODY_TOO_LARGE`, `INVALID_JSON_ARGUMENT`,
33
33
  `NOT_FOUND`, `INTERNAL_ERROR`.
34
34
  - **Redaction.** Config values under secret-like keys (`apiKey`, `token`, `password`, `secret`, `credential`,
35
- `authorization`, anything under `env` or `secrets`) are `"[redacted]"`; symbolic references (`$VAR`, `secret://name`)
35
+ `authorization`, anything under `env` or `secrets`) are `"[redacted]"`; symbolic references (`$VAR`, `${secrets/name}`)
36
36
  are kept. Credentials inside any URL in any response (userinfo, `token=`, `api_key=`, `sig=`, ...) are masked. Env and
37
37
  secret assets are never read; see `/api/asset`.
38
38
  - **Timestamps** are ISO 8601 UTC unless noted. Counts that cannot be computed are `null`, never `NaN`.
@@ -75,7 +75,7 @@ Everything on the overview page in one call. Query parameters:
75
75
  | --- | --- | --- |
76
76
  | `since` | `24h` | Health window start (ISO, date, epoch ms, or `24h` / `7d`). A duration also turns on the prior-window comparison, as `akm health --report --since` does. |
77
77
  | `metricsSince` | `30d` | Metrics window start, as `akm metrics --since`. |
78
- | `probe` | off | `1` probes engine reachability and checks for a newer akm release (network). Off by default so loading the page makes no outbound calls. |
78
+ | `probe` | off | `1` probes whether each connection's endpoint answers and what each harness's `--version` prints, and checks for a newer akm release (network). Off by default so loading the page makes no outbound calls. |
79
79
 
80
80
  ```json
81
81
  {
@@ -210,14 +210,16 @@ The effective configuration, as `akm config list` shows it, with where each valu
210
210
  "exists": true,
211
211
  "config": {
212
212
  "semanticSearchMode": "off",
213
- "engines": { "default": { "kind": "llm", "endpoint": "https://llm.example.test/v1/chat/completions?token=%5Bredacted%5D", "model": "chat-model" } },
213
+ "connections": { "default": { "endpoint": "https://llm.example.test/v1?token=%5Bredacted%5D", "models": { "fast": "chat-model" } } },
214
+ "harnesses": { "claude": {} },
214
215
  "defaultBundle": "stash"
215
216
  },
216
217
  "entries": [
217
218
  { "path": "semanticSearchMode", "value": "off", "source": "file" },
218
219
  { "path": "output.format", "value": "json", "source": "default" }
219
220
  ],
220
- "engines": [{ "name": "default", "kind": "llm", "endpoint": "https://llm.example.test/v1/chat/completions?token=%5Bredacted%5D", "model": "chat-model" }],
221
+ "connections": [{ "name": "default", "endpoint": "https://llm.example.test/v1?token=%5Bredacted%5D", "models": { "fast": "chat-model" } }],
222
+ "harnesses": [{ "name": "claude" }],
221
223
  "env": [{ "name": "AKM_BUNDLE_DIR", "value": "/home/me/akm" }]
222
224
  }
223
225
  }
@@ -226,8 +228,11 @@ The effective configuration, as `akm config list` shows it, with where each valu
226
228
  - `config` is the redacted effective config tree. `entries` is the same data flattened to one row per leaf (arrays are
227
229
  leaves) with `source`: `default` (no config file sets it), `file` (this install's `config.json`),
228
230
  `extends:<ref>` (a config it extends), or `null` when the key cannot be traced (a key containing a `.`).
229
- - `engines` is `config.engines` as a list. Reachability is a health probe, not config: use `/api/overview?probe=1`.
230
- - `env` lists the `AKM_*` environment variables set for the server, which override paths and credentials. A
231
+ - `connections` and `harnesses` are `config.connections` and `config.harnesses` as lists, each entry with its `name`
232
+ and the entry's own keys (a connection's `endpoint` and `models`, a harness's `platform`, ...); keys are never
233
+ included (`apiKey` shows as `[redacted]` or its `$VAR` reference). Reachability is a health probe, not config: use
234
+ `/api/overview?probe=1`.
235
+ - `env` lists the `AKM_*` environment variables set for the server, which override paths and other settings. A
231
236
  secret-like name (`...KEY`, `...TOKEN`, ...) has `value: "[redacted]"`.
232
237
 
233
238
  ## `GET /api/proposals`
@@ -570,7 +575,7 @@ Recent commits of the write-target stash (`defaultWriteTarget`, else the default
570
575
  }
571
576
  ```
572
577
 
573
- - `asset` is the show response in full (frontmatter fields such as `description`, `tags`, `toolPolicy`, the
578
+ - `asset` is the show response in full (frontmatter fields such as `description`, `tags`, `modelHint`, the
574
579
  `content`, workflow `steps`, and so on depending on the type), and `links` groups declared links by kind
575
580
  (`outgoing`, `incoming`, `unresolved`). A missing ref is a `404` `ASSET_NOT_FOUND`.
576
581
  - `feedback.counts` are all-time totals by signal across every source; `history` is the latest 50 events, newest
@@ -616,7 +621,7 @@ general config editor or command-execution endpoint.
616
621
  | `POST` route | Body and existing operation |
617
622
  | --- | --- |
618
623
  | `/api/feedback` | `{ref, signal: "positive"\|"negative", reason?, tags?: string[]}` → `akm feedback`. The ref is passed to `akm feedback` as given, which resolves it as the CLI does; tags follow existing `key:value` validation. Negative feedback requires a reason when `feedback.requireReason` is enabled. Submissions are recorded with source `user` unless the server runs with an `AKM_EVENT_SOURCE` already set (for example under an improve or task run), which wins as it does for every akm child; they retain existing ranking/utility/event effects. Feedback does not save config, so it works under a config that still holds a literal API key. No fix, supersession or model flags are exposed. |
619
- | `/api/bundles/add` | `{source, name?, writable?}` → `akm bundle add`, including source validation and installation audit. Existing provider restrictions apply; no dangerous-key or insecure-transport bypass is exposed. |
624
+ | `/api/bundles/add` | `{source, name?, writable?}` → `akm bundle add`, including source validation. Existing provider restrictions apply; no insecure-transport bypass is exposed. |
620
625
  | `/api/bundles/update` | `{bundle}` → `akm bundle update -- <bundle>`. Fetches/reindexes only on explicit submission. A rare update requiring destructive confirmation remains refused; the UI does not silently pass `--yes`. |
621
626
  | `/api/bundles/remove` | `{bundle, confirm: true}` → `akm bundle remove --yes -- <bundle>`. The UI requires an inline confirmation before this call. Managed installs may be deleted; local filesystem source files remain on disk. |
622
627
  | `/api/bundles/settings` | `{bundle?, enabled?, writable?, componentWritability?: {existingComponent: boolean}, defaultBundle?, defaultWriteTarget?}` → existing schema-walking config setters inside `mutateConfig`. Only changed controls are submitted. Defaults take existing names or `""` to unset a local value; inherited values cannot be unset locally. Existing validation rejects invalid defaults, disabled targets and writable npm/website sources. |
@@ -624,7 +629,7 @@ general config editor or command-execution endpoint.
624
629
  | `/api/asset/save` | `{ref, revision, content}` → the existing shared Markdown writer with `force` and the expected raw-content hash. Only indexed writable AKM knowledge/memory documents accepted by `/api/asset/source` can be edited. The writer takes the asset-mutation lease and compares the live source with `revision` inside it, immediately before writing. While another writer holds the lease the save fails fast with `409 ASSET_MUTATION_LEASE_HELD` instead of waiting. A stale revision returns `409 ASSET_CONTENT_CHANGED` without writing; a source deleted after it was loaded is refused (`404 ASSET_NOT_FOUND`) rather than recreated. The browser keeps the draft after a rejected save. An identical save returns `unchanged: true` without rewriting, reindexing or recording an event. Changed saves retain normal writer validation, indexing and Git effects. |
625
630
 
626
631
  Configuration-affecting actions do not round-trip the redacted API configuration. Existing mutation helpers retain
627
- unknown/unrelated fields, local overrides and supported `$VAR`/`secret://` credential references. If the existing
632
+ unknown/unrelated fields, local overrides and supported `$VAR`/`${ref}` credential references. If the existing
628
633
  config sanitizer would remove unrelated legacy literal credentials, a bundle add or remove, or a settings change that
629
634
  would write config, is refused with `400 INVALID_FLAG_VALUE` and the user is asked to correct those settings through
630
635
  the CLI first. A settings request that changes nothing writes nothing and is not refused. It never writes