akm-cli 0.9.31 → 0.10.261001-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +409 -0
- package/STABILITY.md +99 -57
- package/dist/api-node.mjs +20 -0
- package/dist/api.d.ts +23 -0
- package/dist/api.js +45 -0
- package/dist/assets/hints/cli-hints-full.md +15 -29
- package/dist/assets/hints/cli-hints-short.md +2 -2
- package/dist/assets/improve-strategies/default.json +3 -3
- package/dist/assets/prompts/consolidate-pair.md +9 -7
- package/dist/assets/stash-skeleton/README.md +1 -1
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +1 -1
- package/dist/cli/shared.js +31 -48
- package/dist/cli/unknown-flags.js +6 -43
- package/dist/cli.js +8 -34
- package/dist/commands/agent/contribute-cli.js +1 -1
- package/dist/commands/completions.js +1 -2
- package/dist/commands/config-cli.js +5 -28
- package/dist/commands/env/env-cli.js +5 -5
- package/dist/commands/env/secret-cli.js +2 -2
- package/dist/commands/feedback-cli.js +75 -49
- package/dist/commands/health/checks.js +41 -16
- package/dist/commands/health/plugin-staleness.js +52 -22
- package/dist/commands/improve/autonomy-gate.js +5 -3
- package/dist/commands/improve/consolidate/chunking.js +3 -10
- package/dist/commands/improve/consolidate/continuity-check.js +4 -4
- package/dist/commands/improve/consolidate/pair-pass.js +29 -10
- package/dist/commands/improve/consolidate.js +10 -65
- package/dist/commands/improve/distill/lesson-update.js +91 -0
- package/dist/commands/improve/distill-guards.js +1 -43
- package/dist/commands/improve/distill.js +148 -21
- package/dist/commands/improve/eligibility.js +14 -1
- package/dist/commands/improve/extract-cli.js +1 -1
- package/dist/commands/improve/extract-prompt.js +17 -7
- package/dist/commands/improve/extract.js +5 -7
- package/dist/commands/improve/improve-cli.js +92 -106
- package/dist/commands/improve/improve-strategies.js +8 -12
- package/dist/commands/improve/improve.js +134 -52
- package/dist/commands/improve/loop-stages.js +18 -5
- package/dist/commands/improve/planner.js +0 -1
- package/dist/commands/improve/preparation.js +40 -99
- package/dist/commands/improve/proactive-maintenance.js +2 -2
- package/dist/commands/improve/reflect-noise.js +3 -55
- package/dist/commands/improve/reflect.js +29 -34
- package/dist/commands/improve/retrieval-queries.js +37 -0
- package/dist/commands/improve/retrieval-scope.js +2 -2
- package/dist/commands/improve/salience.js +2 -9
- package/dist/commands/improve/session-asset.js +4 -1
- package/dist/commands/improve/stage.js +23 -12
- package/dist/commands/lint/index.js +5 -20
- package/dist/commands/observability-cli.js +3 -9
- package/dist/commands/proposal/drain.js +43 -6
- package/dist/commands/proposal/proposal-cli.js +11 -31
- package/dist/commands/proposal/repository.js +20 -14
- package/dist/commands/proposal/validators/proposal-quality-validators.js +0 -3
- package/dist/commands/read/knowledge.js +3 -3
- package/dist/commands/read/remember-cli.js +0 -13
- package/dist/commands/read/search-cli.js +29 -97
- package/dist/commands/read/search.js +0 -11
- package/dist/commands/read/show.js +0 -19
- package/dist/commands/sources/plugin-upgrade.js +164 -101
- package/dist/commands/sources/sources-cli.js +1 -15
- package/dist/commands/sources/stash-cli.js +6 -14
- package/dist/commands/tasks/tasks-cli.js +4 -115
- package/dist/commands/workflow/plan.js +11 -33
- package/dist/commands/workflow-cli.js +2 -7
- package/dist/core/adapter/adapter-ids.js +1 -2
- package/dist/core/adapter/adapters/agent-skills-adapter.js +0 -4
- package/dist/core/adapter/adapters/akm-adapter.js +9 -48
- package/dist/core/adapter/adapters/akm-lint.js +10 -26
- package/dist/core/adapter/adapters/akm-metadata.js +2 -72
- package/dist/core/adapter/adapters/akm-task-adapter.js +0 -5
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +9 -28
- package/dist/core/adapter/adapters/dotenv-adapter.js +1 -20
- package/dist/core/adapter/adapters/generic-files-adapter.js +0 -10
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +0 -4
- package/dist/core/adapter/adapters/tool-dir-shared.js +0 -24
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +4 -4
- package/dist/core/adapter/recognize-match.js +3 -4
- package/dist/core/common.js +18 -2
- package/dist/core/config/config-schema.js +12 -15
- package/dist/core/config/config-types.js +6 -15
- package/dist/core/config/config-walker.js +6 -23
- package/dist/core/config/config.js +17 -80
- package/dist/core/config/engine-semantics.js +7 -3
- package/dist/core/config/schema/engines.js +7 -7
- package/dist/core/config/schema/improve-processes.js +10 -63
- package/dist/core/config/schema/improve.js +2 -21
- package/dist/core/config/schema/index-config.js +6 -39
- package/dist/core/env-secret-ref.js +2 -45
- package/dist/core/errors.js +1 -2
- package/dist/core/extra-params.js +2 -86
- package/dist/core/file-lock.js +2 -6
- package/dist/core/improve-result.js +13 -1
- package/dist/core/mutation-target.js +2 -2
- package/dist/core/paths.js +4 -0
- package/dist/core/recognition-util.js +4 -5
- package/dist/core/run-lock.js +1 -1
- package/dist/core/subprocess.js +49 -0
- package/dist/core/warn.js +21 -4
- package/dist/core/write-source.js +3 -3
- package/dist/execution/target-ref.js +1 -2
- package/dist/indexer/indexer.js +15 -6
- package/dist/indexer/passes/memory-inference.js +15 -6
- package/dist/indexer/search/db-search.js +49 -36
- package/dist/indexer/search/fts-query.js +0 -19
- package/dist/indexer/search/ranking.js +29 -1
- package/dist/indexer/usage/usage-events.js +21 -16
- package/dist/integrations/agent/engine-resolution.js +5 -2
- package/dist/integrations/agent/index.js +1 -1
- package/dist/integrations/agent/profiles.js +41 -98
- package/dist/integrations/agent/request-lowering.js +3 -3
- package/dist/integrations/harnesses/aider/index.js +5 -0
- package/dist/integrations/harnesses/amazonq/index.js +1 -0
- package/dist/integrations/harnesses/claude/config-import.js +2 -3
- package/dist/integrations/harnesses/claude/index.js +5 -0
- package/dist/integrations/harnesses/codex/index.js +1 -0
- package/dist/integrations/harnesses/copilot/index.js +1 -0
- package/dist/integrations/harnesses/gemini/index.js +1 -0
- package/dist/integrations/harnesses/index.js +18 -39
- package/dist/integrations/harnesses/opencode/agent-builder.js +60 -35
- package/dist/integrations/harnesses/opencode/config-import.js +121 -52
- package/dist/integrations/harnesses/opencode/index.js +22 -0
- package/dist/integrations/harnesses/opencode/plugin-layout.js +68 -0
- package/dist/integrations/harnesses/opencode/session-log-types.js +12 -0
- package/dist/integrations/harnesses/opencode/session-log-v1.js +72 -0
- package/dist/integrations/harnesses/opencode/session-log-v2.js +140 -0
- package/dist/integrations/harnesses/opencode/session-log.js +104 -115
- package/dist/integrations/harnesses/opencode/version.js +98 -0
- package/dist/integrations/harnesses/opencode-sdk/{harness.js → index.js} +5 -17
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +105 -206
- package/dist/integrations/harnesses/opencode-sdk/v1-adapter.js +199 -0
- package/dist/integrations/harnesses/opencode-sdk/v2-adapter.js +254 -0
- package/dist/integrations/harnesses/opencode-sdk/wire.js +66 -0
- package/dist/integrations/harnesses/openhands/index.js +1 -0
- package/dist/integrations/harnesses/pi/index.js +1 -0
- package/dist/integrations/harnesses/shared.js +2 -0
- package/dist/integrations/harnesses/types.js +2 -0
- package/dist/llm/client.js +41 -11
- package/dist/output/cli-hints.js +1 -1
- package/dist/output/context.js +10 -19
- package/dist/output/format-exempt.js +5 -8
- package/dist/output/shapes/helpers.js +1 -22
- package/dist/output/shapes/passthrough.js +0 -1
- package/dist/output/shapes.js +3 -31
- package/dist/output/stdout.js +5 -1
- package/dist/output/text/command-format.js +6 -1
- package/dist/output/text/workflow-format.js +4 -22
- package/dist/scripts/akm-migrate-node.js +15745 -16711
- package/dist/scripts/akm-migrate.js +16318 -17280
- package/dist/setup/detect.js +10 -4
- package/dist/setup/harness-config-import.js +5 -14
- package/dist/setup/setup.js +1 -1
- package/dist/setup/steps/tasks.js +12 -13
- package/dist/sources/providers/git-stash.js +94 -13
- package/dist/storage/repositories/index-utility-repository.js +2 -32
- package/dist/storage/repositories/index-vec-repository.js +4 -0
- package/dist/storage/repositories/task-history-repository.js +0 -5
- package/dist/storage/repositories/workflow-runs-repository.js +5 -15
- package/dist/tasks/embedded.js +2 -1
- package/dist/tasks/run/run-command-task.js +9 -1
- package/dist/tasks/run/run-workflow-task.js +4 -3
- package/dist/tasks/run/task-history.js +0 -2
- package/dist/tasks/run/task-log.js +38 -1
- package/dist/tasks/schedule-gates.js +39 -0
- package/dist/tasks/scheduler-binding.js +0 -16
- package/dist/tasks/scheduler-sync.js +3 -97
- package/dist/tasks/source/bounded-document.js +1 -1
- package/dist/tasks/source/task-source-v4.js +2 -12
- package/dist/tasks/task-run-reserved-flags.js +2 -31
- package/dist/workflows/authoring/authoring.js +6 -6
- package/dist/workflows/compile.js +8 -65
- package/dist/workflows/exec/child-workflow.js +22 -3
- package/dist/workflows/exec/native-executor.js +12 -147
- package/dist/workflows/exec/run-workflow.js +31 -103
- package/dist/workflows/exec/step-work.js +9 -178
- package/dist/workflows/exec/unit-dispatch.js +0 -10
- package/dist/workflows/freeze/environment.js +3 -44
- package/dist/workflows/freeze/freeze.js +8 -41
- package/dist/workflows/freeze/targets/child-workflow.js +27 -63
- package/dist/workflows/freeze/targets/command.js +2 -16
- package/dist/workflows/freeze/targets/shell.js +0 -2
- package/dist/workflows/freeze/task-bindings.js +2 -28
- package/dist/workflows/ir/params.js +12 -2
- package/dist/workflows/parser.js +82 -232
- package/dist/workflows/plan.js +1 -1
- package/dist/workflows/renderer.js +10 -19
- package/dist/workflows/runtime/run-plan.js +11 -53
- package/dist/workflows/runtime/runs.js +4 -27
- package/dist/workflows/source-files.js +12 -16
- package/dist/workflows/source-semantics.js +1 -93
- package/docs/README.md +1 -1
- package/docs/agents/README.md +3 -3
- package/docs/agents/agent-install.md +1 -1
- package/docs/architecture/0.10-process-rules.md +827 -0
- package/docs/architecture/adapters.md +17 -31
- package/docs/architecture/architecture.md +4 -5
- package/docs/architecture/improvement.md +115 -76
- package/docs/architecture/internals/improve-workflow.md +22 -16
- package/docs/architecture/internals/indexing.md +1 -1
- package/docs/architecture/internals/search.md +1 -2
- package/docs/architecture/internals/storage-locations.md +6 -6
- package/docs/architecture/persisted-data-compat.md +13 -4
- package/docs/architecture/specs/0.9.0-decisions.md +6 -2
- package/docs/architecture/specs/improve-collapse-churn-detector-design.md +2 -2
- package/docs/architecture/specs/workflow-format-unification.md +1 -6
- package/docs/architecture/testing/manual-testing-checklist.md +21 -30
- package/docs/architecture/testing/task-workflow-manual-tests.md +106 -203
- package/docs/architecture/testing/testing-workflow.md +1 -1
- package/docs/architecture/workflow-engine.md +5 -56
- package/docs/guides/author-workflows.md +39 -69
- package/docs/guides/bundles.md +3 -1
- package/docs/guides/capture-knowledge.md +1 -1
- package/docs/guides/claude-code-vs-akm-workflows.md +1 -2
- package/docs/guides/discover-and-load.md +4 -4
- package/docs/guides/getting-started.md +1 -1
- package/docs/guides/improve-the-library.md +10 -9
- package/docs/guides/recipes/headless-install.md +2 -2
- package/docs/guides/run-workflows.md +1 -1
- package/docs/guides/scheduling.md +9 -1
- package/docs/guides/use-with-any-agent.md +49 -4
- package/docs/integration/bundling-akm.md +7 -6
- package/docs/maintainers/curate-workmap.md +1 -2
- package/docs/maintainers/release-checklist.md +33 -1
- package/docs/migration/README.md +2 -0
- package/docs/migration/release-notes/0.10.0.md +201 -0
- package/docs/migration/release-notes/README.md +1 -0
- package/docs/migration/v0.9-to-v0.10.md +507 -0
- package/docs/posts/akm-command-tour.md +3 -3
- package/docs/product-surface.md +1 -1
- package/docs/reference/README.md +1 -0
- package/docs/reference/api.md +65 -0
- package/docs/reference/asset-types.md +3 -5
- package/docs/reference/bundle-types.md +2 -4
- package/docs/reference/cli.md +160 -188
- package/docs/reference/configuration.md +101 -20
- package/docs/reference/data-and-telemetry.md +2 -2
- package/docs/reference/env-and-secrets.md +2 -2
- package/docs/reference/supported-formats.md +3 -4
- package/docs/reference/tasks.md +12 -19
- package/docs/reference/website-sources.md +1 -1
- package/docs/reference/workflow-schema.md +89 -317
- package/docs/reference/workflows.md +20 -48
- package/package.json +12 -2
- package/schemas/akm-config.json +2 -243
- package/schemas/akm-task.json +2 -3
- package/schemas/akm-workflow.json +47 -84
- package/dist/assets/improve-strategies/catchup.json +0 -41
- package/dist/assets/improve-strategies/proactive-maintenance.json +0 -24
- package/dist/assets/improve-strategies/quick.json +0 -17
- package/dist/assets/improve-strategies/reflect-distill.json +0 -29
- package/dist/assets/improve-strategies/thorough.json +0 -49
- package/dist/assets/prompts/retrieval-relevance-judge.md +0 -6
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +0 -6
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +0 -4
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +0 -4
- package/dist/cli/retired-commands.js +0 -118
- package/dist/commands/improve/retrieval-gate.js +0 -132
- package/dist/commands/tasks/validate.js +0 -176
- package/dist/core/config/legacy-source-shape-shim.js +0 -117
- package/dist/indexer/feedback/utility-policy.js +0 -75
- package/dist/integrations/harnesses/ids.js +0 -28
- package/dist/tasks/source/task-source-v3-frozen.js +0 -424
- package/dist/tasks/source/task-to-v4.js +0 -863
- package/dist/workflows/exec/worktree.js +0 -372
- package/dist/workflows/freeze/child-output-references.js +0 -83
- package/dist/workflows/freeze/identity.js +0 -22
- package/dist/workflows/freeze/targets/script.js +0 -50
- package/dist/workflows/freeze/targets/task.js +0 -124
- package/dist/workflows/github-yaml.js +0 -506
- package/dist/workflows/runtime/run-outputs.js +0 -80
|
@@ -95,6 +95,23 @@ kebab-case, at most 63 characters, and cannot start with `akm-`.
|
|
|
95
95
|
| `llm` | `endpoint`, `model` | OpenAI-compatible chat completions |
|
|
96
96
|
| `agent` | `platform` | A registered dispatch-capable harness |
|
|
97
97
|
|
|
98
|
+
The registered harnesses (generated from the harness registry; do not edit):
|
|
99
|
+
|
|
100
|
+
<!-- harness-table:start (generated by scripts/gen-config-schema.ts) -->
|
|
101
|
+
| `platform` | Harness | Binary | Session logs | Model work | Native `agent` |
|
|
102
|
+
| --- | --- | --- | --- | --- | --- |
|
|
103
|
+
| `opencode` | OpenCode | `opencode` | yes | yes | yes |
|
|
104
|
+
| `claude` | Claude Code | `claude` | yes | yes | yes |
|
|
105
|
+
| `opencode-sdk` | OpenCode SDK | in-process | no | yes | yes |
|
|
106
|
+
| `codex` | OpenAI Codex CLI | `codex` | yes | no | no |
|
|
107
|
+
| `copilot` | GitHub Copilot CLI | `copilot` | no | no | no |
|
|
108
|
+
| `pi` | Pi | `pi` | no | no | no |
|
|
109
|
+
| `gemini` | Gemini CLI | `gemini` | no | no | no |
|
|
110
|
+
| `aider` | Aider | `aider` | no | no | no |
|
|
111
|
+
| `amazonq` | Amazon Q Developer CLI | `q` | no | no | no |
|
|
112
|
+
| `openhands` | OpenHands | `openhands` | no | no | no |
|
|
113
|
+
<!-- harness-table:end -->
|
|
114
|
+
|
|
98
115
|
LLM endpoints must be complete `http://` or `https://` chat-completions URLs
|
|
99
116
|
ending in `/chat/completions`, without userinfo, query, or fragment. API keys
|
|
100
117
|
are symbolic only: `$VAR` or `${VAR}`. AKM resolves them only at dispatch.
|
|
@@ -141,6 +158,33 @@ the LLM engine used as that SDK engine's fallback connection. With no
|
|
|
141
158
|
provider, model and auth from its own configuration. `defaults.llmEngine` is
|
|
142
159
|
not a substitute.
|
|
143
160
|
|
|
161
|
+
An `opencode` or `opencode-sdk` engine has no setting for the OpenCode major: akm
|
|
162
|
+
detects it. With no `bin`, the engine runs the most recent OpenCode on `PATH`
|
|
163
|
+
(`opencode2`, OpenCode 2's own alias, when present, else `opencode`); with a
|
|
164
|
+
`bin`, it runs that binary. akm runs `<bin> --version` once per binary per
|
|
165
|
+
process and uses the OpenCode 2 or OpenCode 1 adapters to match. OpenCode 1 keeps
|
|
166
|
+
working and logs a warning recommending OpenCode 2. A `--version` akm cannot read
|
|
167
|
+
(or a major it does not know) uses the OpenCode 2 adapters and logs a warning
|
|
168
|
+
with the raw output. To run a particular OpenCode, set the engine's `bin`, e.g.
|
|
169
|
+
`{"kind":"agent","platform":"opencode-sdk","bin":"/opt/opencode1/bin/opencode"}`.
|
|
170
|
+
|
|
171
|
+
**Permissions in a dispatch.** akm answers every OpenCode permission request of a
|
|
172
|
+
dispatch with "reject" (there is no one to approve it), and the rejection reaches
|
|
173
|
+
the model as a tool error. akm changes no OpenCode permission default, so what
|
|
174
|
+
gets asked is OpenCode's own setting:
|
|
175
|
+
|
|
176
|
+
- **OpenCode 1** asks before reading or writing outside the project directory
|
|
177
|
+
(`external_directory`), so akm rejects it.
|
|
178
|
+
- **OpenCode 2** (2.0.26) does not ask: a read or write outside the project
|
|
179
|
+
directory just runs, and akm's rejection never happens, unless your OpenCode
|
|
180
|
+
config says to ask. Add a rule to the global `opencode.json`, e.g.
|
|
181
|
+
`"permissions": [{"action": "external_directory", "resource": "*", "effect": "ask"}]`
|
|
182
|
+
(`"read"` and `"shell"` are actions too).
|
|
183
|
+
|
|
184
|
+
On OpenCode 2 a rejection ends the turn: the dispatch returns `ok: false` with
|
|
185
|
+
`reason: "aborted"` and the declined tool call in `error`. On OpenCode 1 the model
|
|
186
|
+
carries on.
|
|
187
|
+
|
|
144
188
|
On an engine without `timeoutMs`, model work (an improve process, a quality or
|
|
145
189
|
triage judge, or an index pass) stops after 600 seconds, whatever the engine's
|
|
146
190
|
kind; other work on an agent engine runs until it finishes. An improve stage's
|
|
@@ -191,7 +235,7 @@ Reasoning effort has one word in a request, `reasoningEffort`. `effort`, as a
|
|
|
191
235
|
Unattended model work is the work akm hands a model with no one watching:
|
|
192
236
|
- the improve processes (reflect, distill, consolidate, memory inference,
|
|
193
237
|
extract, and validation's repair);
|
|
194
|
-
- the quality
|
|
238
|
+
- the quality and triage judges;
|
|
195
239
|
- index passes;
|
|
196
240
|
- `akm remember --enrich`.
|
|
197
241
|
|
|
@@ -209,7 +253,7 @@ cannot enforce:
|
|
|
209
253
|
| LLM | No tools. |
|
|
210
254
|
| `claude` | Read and Edit inside the working directory, and Bash for `akm search` and `akm show` only. akm runs it with `--restricted`, so your user, project and local settings cannot widen that. |
|
|
211
255
|
| `opencode`, `opencode-sdk` | Read, grep and glob in the working directory and the stash, edit in the working directory only, and `akm_search` and `akm_show`, through an injected `akm-model-work` agent. No bash, because opencode cannot stop a redirect such as `akm show x > file` from writing elsewhere. |
|
|
212
|
-
|
|
|
256
|
+
| Every other `agent` harness | Cannot run model work: akm refuses the request before it starts. |
|
|
213
257
|
|
|
214
258
|
**The one rule.** Every key model work reads its engine from must name an
|
|
215
259
|
LLM engine or a `claude`, `opencode` or `opencode-sdk` agent engine. Those
|
|
@@ -235,7 +279,9 @@ key, the engine and its platform. Other engine keys, `defaults.engine` and
|
|
|
235
279
|
- opencode model work may read the stash and write only its working directory.
|
|
236
280
|
`akm_search` and `akm_show` come from the akm-opencode plugin (0.9.21 or
|
|
237
281
|
later), which akm does not load: put it in your opencode config
|
|
238
|
-
(`"plugin": ["akm-opencode"]`
|
|
282
|
+
(`"plugin": ["akm-opencode"]` for OpenCode 1; for OpenCode 2 install
|
|
283
|
+
`akm-opencode-v2` with `opencode plugin add akm-opencode-v2`, see
|
|
284
|
+
[Use AKM With Any Agent](https://github.com/itlackey/akm/blob/main/docs/guides/use-with-any-agent.md#opencode-plugins-one-package-per-opencode-major)). akm turns off the plugin's curation, learning
|
|
239
285
|
and write gate for these dispatches and keeps its state in akm's state
|
|
240
286
|
directory. The stash is protected from edits only while the temporary
|
|
241
287
|
directory is outside a git repository.
|
|
@@ -442,11 +488,21 @@ can select `engine`, `model`, `timeoutMs`, and LLM request overrides:
|
|
|
442
488
|
|
|
443
489
|
An improve process's engine follows
|
|
444
490
|
[the one rule](#engines-for-unattended-model-work); an explicit invalid or
|
|
445
|
-
incompatible engine never falls back to another engine.
|
|
446
|
-
are
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
491
|
+
incompatible engine never falls back to another engine. The built-in strategies
|
|
492
|
+
are `default` and `consolidate`. `consolidate` is a patch that
|
|
493
|
+
is deep-merged onto `default`, and a user-defined strategy of the same name is
|
|
494
|
+
merged on top of that; so every strategy, built-in or user-defined, inherits
|
|
495
|
+
omitted fields from `default`. `quick`, `reflect-distill`, `thorough`,
|
|
496
|
+
`catchup` were removed in 0.10 (#1130): measured, none beat `default` (`thorough`
|
|
497
|
+
and `catchup` added only a judged triage drain, and `catchup` was identical to
|
|
498
|
+
`consolidate`). `proactive-maintenance` was removed too (#1129): its lane now
|
|
499
|
+
lives in `default`. A `improve.strategies.<name>` block with one of those names is
|
|
500
|
+
now an ordinary user-defined strategy that inherits `default`, so it no longer
|
|
501
|
+
carries the old built-in's settings; `--strategy` or `defaults.improveStrategy`
|
|
502
|
+
naming one with no such block fails with an error that names `default`. To keep
|
|
503
|
+
the old judged drain, set `processes.triage` (`enabled`, `applyMode: "promote"`,
|
|
504
|
+
`judgment: true`) in your own strategy. The built-in strategies other than
|
|
505
|
+
`default` and `consolidate` are Experimental (see [STABILITY.md](../../STABILITY.md)).
|
|
450
506
|
|
|
451
507
|
`processes.triage.judgment` explicitly controls the optional judgment tier.
|
|
452
508
|
Use `true` to enable it, `false` to disable it, or an object with `enabled`,
|
|
@@ -457,6 +513,22 @@ the retired `mode` and `profile` keys continue to report their engine migration
|
|
|
457
513
|
guidance. When enabled, engine selection is judgment → triage → strategy →
|
|
458
514
|
`defaults.llmEngine`, and resolution fails closed if none is available.
|
|
459
515
|
|
|
516
|
+
The `default` strategy runs triage in `promote` mode with judgment off and
|
|
517
|
+
`maxAcceptsPerRun: 200` (#1143), so the proposal backlog drains through the
|
|
518
|
+
deterministic gates without `experimental.improveAutonomy`. Turning judgment on
|
|
519
|
+
in a promote strategy is what that opt-in gates.
|
|
520
|
+
|
|
521
|
+
Judgment is off in every built-in strategy, and the judgment tier may accept
|
|
522
|
+
only a consolidate promotion. Retirements and reflect revisions it
|
|
523
|
+
would accept are left for a person. This is measured, not cautious by habit
|
|
524
|
+
(#1132, #1094): with `experimental.improveAutonomy` and judgment over every
|
|
525
|
+
proposal kind, the nightly eval solved 0.49 (gpt-5.6-terra) and 0.53
|
|
526
|
+
(qwen3.8-27b) of its items while harming 14 and 11, and changed 18 and 21 notes
|
|
527
|
+
outside the planted set; the judge accepted unsafe retirements and applied exact
|
|
528
|
+
fixes unreviewed. Judging promotions alone was reasonable: on qwen3.8-27b it
|
|
529
|
+
had precision 0.87 and recall 0.78 and accepted 4.8% of bad promotions; on
|
|
530
|
+
gpt-5.6-terra it was very cautious (precision 1.0, recall 0.17).
|
|
531
|
+
|
|
460
532
|
```jsonc
|
|
461
533
|
{
|
|
462
534
|
"improve": {
|
|
@@ -557,10 +629,15 @@ off too. Every entry must be a non-empty string, or the config does not load.
|
|
|
557
629
|
```
|
|
558
630
|
|
|
559
631
|
No shipped strategy turns improve-stage session extraction on.
|
|
560
|
-
`proactiveMaintenance` is on
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
632
|
+
`proactiveMaintenance` is on in `default` and off in `consolidate`, the only
|
|
633
|
+
other shipped strategy. It plans stable assets that have had no feedback: at most
|
|
634
|
+
`maxPerRun` (default 15) per run, only assets not reflected or distilled for
|
|
635
|
+
`dueDays` (default 30), so each comes up at most once a month, and reflect's
|
|
636
|
+
`limit` (25) still bounds the run. A preset that omits either process
|
|
637
|
+
inherits the `default` value; set `processes.proactiveMaintenance.enabled: false` in the
|
|
638
|
+
selected strategy to turn the lane off. A proposal from this lane is never
|
|
639
|
+
accepted by `proposal drain`: it waits for a person (reason
|
|
640
|
+
`proactive-needs-review`, #1147). User strategy overrides
|
|
564
641
|
are applied last, so an explicit `enabled: true` still opts the selected
|
|
565
642
|
strategy in.
|
|
566
643
|
|
|
@@ -789,8 +866,7 @@ explicit destination flag is given and the command isn't already scoped to a
|
|
|
789
866
|
specific source. It must name a configured bundle; setting it with no
|
|
790
867
|
`bundles` configured, or naming an unconfigured bundle, is rejected at
|
|
791
868
|
`config set` (or config load) time. The full write-target resolution order
|
|
792
|
-
is the command's destination flag (`--bundle`
|
|
793
|
-
`improve`, `--target` on `env`/`secret create`) -> `defaultWriteTarget` ->
|
|
869
|
+
is the command's destination flag (`--bundle`) -> `defaultWriteTarget` ->
|
|
794
870
|
working bundle (`defaultBundle`) -> `ConfigError`.
|
|
795
871
|
|
|
796
872
|
### Memory scope
|
|
@@ -857,7 +933,8 @@ section, an absent key, and an explicit `false` all read identically as off.
|
|
|
857
933
|
```
|
|
858
934
|
|
|
859
935
|
- **`experimental.improveAutonomy`** — gates only the autonomous
|
|
860
|
-
`memoryInference`, `triagePromote
|
|
936
|
+
`memoryInference`, `triagePromote` (a promote with triage judgment on; a
|
|
937
|
+
deterministic-only promote runs without it), and `memoryCleanup` lanes. `akm improve`
|
|
861
938
|
itself always runs; this only gates mutations without a human in the loop.
|
|
862
939
|
Consolidation is not gated: it remains advisory and emits reviewable
|
|
863
940
|
proposals. `sync.push` is deliberately **not** gated by this key.
|
|
@@ -1034,11 +1111,15 @@ network filesystem for the data directory and falls back to `DELETE`.
|
|
|
1034
1111
|
|
|
1035
1112
|
## Retired Configuration
|
|
1036
1113
|
|
|
1037
|
-
`profiles`, `llm`, `agent`, `features`, `stashes
|
|
1038
|
-
`
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1114
|
+
`profiles`, `llm`, `agent`, `features`, and `stashes` are rejected in 0.9.
|
|
1115
|
+
Recreate the configuration using `engines`, `defaults.engine`,
|
|
1116
|
+
`defaults.llmEngine`, and `improve.strategies`; AKM deliberately does not infer
|
|
1117
|
+
or rename ambiguous profile identities. `defaults.llm`, `defaults.agent`,
|
|
1118
|
+
`defaults.improve`, `index.stalenessDetection`, the engine settings that used to
|
|
1119
|
+
sit under `index.<pass>` (`endpoint`, `provider`, `apiKey`, `baseUrl`,
|
|
1120
|
+
`temperature`, `maxTokens`, `capabilities`) and the `feedbackDistillation`
|
|
1121
|
+
process (use `processes.distill.enabled`) load like any other unknown key: named
|
|
1122
|
+
once by the unknown-key warning, ignored, and dropped by `akm migrate apply`.
|
|
1042
1123
|
|
|
1043
1124
|
`embedding.chunkSize` was never read by anything under `src/` (#954), so a
|
|
1044
1125
|
config that still sets it is simply ignored — it still loads, unvalidated
|
|
@@ -163,7 +163,7 @@ the set of types the code actually emits at HEAD (verified against every
|
|
|
163
163
|
| `sync` | `akm sync` | `name`, `message`, `ok` |
|
|
164
164
|
| `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` |
|
|
165
165
|
| `index_completed` | `akm index`, once when a run finishes | `mode`, `totalMs`, `walkMs`, `llmMs`, `embedMs`, `ftsMs`, `finalizeMs` (phase timings in milliseconds) |
|
|
166
|
-
| `stash_synced` | `akm improve`'s internal
|
|
166
|
+
| `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) |
|
|
167
167
|
| `env_access` | `akm env run <name> -- <command>` (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
|
|
168
168
|
| `secret_access` | `akm secret run <ref> <VAR> -- <command>` (audit trail: var **name** only, value never recorded) | `ref`, `var` |
|
|
169
169
|
|
|
@@ -189,7 +189,7 @@ the set of types the code actually emits at HEAD (verified against every
|
|
|
189
189
|
| `improve_invoked` | Start of an `akm improve` run | `ref` (scope); `strategy`, `scope`, `dryRun`, `eligibleCount` |
|
|
190
190
|
| `improve_completed` | `akm improve` run finished | run stats |
|
|
191
191
|
| `improve_failed` | `akm improve` run errored | error |
|
|
192
|
-
| `improve_skipped` | `akm improve` left a ref, a lane, or a group of refs out | `reason` (`no_new_signal`, `not_retrieved`, `distill_no_new_signal`, `budget_exhausted`, `budget_exhausted_batch`, `asset_missing_on_disk`, `strategy_filtered_all_passes`, `autonomy_gated`, `engine_unavailable`, `
|
|
192
|
+
| `improve_skipped` | `akm improve` left a ref, a lane, or a group of refs out | `reason` (`no_new_signal`, `not_retrieved`, `distill_no_new_signal`, `budget_exhausted`, `budget_exhausted_batch`, `asset_missing_on_disk`, `strategy_filtered_all_passes`, `autonomy_gated`, `engine_unavailable`, `consolidation_no_memory_updates`, `below_min_new_sessions`, `derived_memory_reflect_skipped`, `memory_distill_requires_feedback`, `distill_flagged_wrong`, `distill_positive_without_reason`, `distill_deprecated_or_superseded`); `count`, `remaining`, `strategy`, `lane` or `configKey` where they apply |
|
|
193
193
|
| `improve_lock_recovered` | Stale improve lock cleared at startup | |
|
|
194
194
|
| `improve_review_needed` | `akm feedback` pushed a high-utility asset's utility below the review threshold — a review-needed escalation is recorded (not a proposal, so it can't accidentally overwrite the asset) | `ref`, `previousUtility`, `nextUtility` |
|
|
195
195
|
| `reflect_invoked` | Start of reflect phase in `akm improve` | `ref`, engine |
|
|
@@ -50,7 +50,7 @@ printf '%s' "$TOKEN" | akm secret set secrets/deploy-token
|
|
|
50
50
|
akm secret run secrets/deploy-token GITHUB_TOKEN -- gh release create v1.0.0
|
|
51
51
|
|
|
52
52
|
# Write into a specific source instead of the working bundle:
|
|
53
|
-
akm secret set secrets/deploy-token --
|
|
53
|
+
akm secret set secrets/deploy-token --bundle team --from-file ./token
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
`env export --out <file>` writes a safe, sourceable `export KEY='value'`
|
|
@@ -73,7 +73,7 @@ output and from the search index entirely; the value remains usable via
|
|
|
73
73
|
|
|
74
74
|
Env/secret **mutations** (`env create`, `env remove`, `secret set`) choose
|
|
75
75
|
their write destination like every other write command: an explicit
|
|
76
|
-
`--
|
|
76
|
+
`--bundle <source>` wins, else `defaultWriteTarget`, else the working
|
|
77
77
|
bundle. The chosen source must be writable — a non-writable target fails
|
|
78
78
|
with a `ConfigError` before anything is written — and a git-backed writable
|
|
79
79
|
target commits the mutation at a single operation boundary. Reads (`list`,
|
|
@@ -20,7 +20,7 @@ one explicitly. 0.9.0 recognizes 11 formats.
|
|
|
20
20
|
| `claude` | `CLAUDE.md` as `instruction`; `commands/`, `agents/`, `skills/<name>/SKILL.md` as their matching types | Root `CLAUDE.md` plus at least one of `commands/`, `agents/`, `skills/` | Read-only | Point AKM at an existing Claude Code `.claude` tool directory |
|
|
21
21
|
| `opencode` | Same shape as `claude`, rooted on `AGENTS.md` | `opencode.json`/`opencode.jsonc`, or root `AGENTS.md` plus a canonical plural tool directory | Read-only | Point AKM at an existing OpenCode `.opencode` tool directory |
|
|
22
22
|
| `dotenv` | `env` entries as key names only (never values); `secret` entries as file names only (never content) | Every top-level directory is `env/` and/or `secrets/`, with at least one present | Writable, narrowly — `akm env create`/`env remove`/`secret set` only | A standalone env/secrets-only bundle |
|
|
23
|
-
| `akm-workflow` | Workflow steps, name, description, tags |
|
|
23
|
+
| `akm-workflow` | Workflow steps, name, description, tags | A top-level `.md` file with explicit `type: workflow` frontmatter | Writable — `akm workflow create` only | A standalone workflow bundle, one workflow per file |
|
|
24
24
|
| `akm-task` | Task source v4 (`version: 4`) `.yml` sources as type `task`, including local schedules/manual triggers and the exact authored YAML | A top-level `.yml` file accepted by the task source v4 parser (`version: 4`, one `uses`/`run` executable selector, optional top-level `schedule:`) | Read-only | A standalone scheduled-task bundle; `.yaml` is rejected |
|
|
25
25
|
| `llm-wiki` | `raw/` sources as `wiki-source`; `pages/` as their `pageKind` (default `note`), with resolved cross-reference links | Root `schema.md` plus a `pages/` directory | Read-only (author by writing directly into `pages/`; AKM indexes and serves the result) | [Karpathy's LLM-wiki pattern](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) — agent-authored reference wikis |
|
|
26
26
|
| `akm` (native) | AKM's own 14 native asset types — see [Asset Types](https://github.com/itlackey/akm/blob/main/docs/reference/asset-types.md) | A `.stash` marker directory, or two-plus native subdirectories, or the fallback when nothing else matches | Fully writable — every AKM-native write command | Your working bundle, and any bundle authored as AKM's own format |
|
|
@@ -50,9 +50,8 @@ indexed, scheduled, or executed. See [Tasks](tasks.md).
|
|
|
50
50
|
|
|
51
51
|
## Workflow formats
|
|
52
52
|
|
|
53
|
-
Workflow sources are
|
|
54
|
-
|
|
55
|
-
source IR. Task sources remain `.yml` only, authored as task source v4. See
|
|
53
|
+
Workflow sources are `.md` and compile to source IR. Task sources are `.yml`
|
|
54
|
+
only, authored as task source v4. See
|
|
56
55
|
[Tasks](tasks.md) and [Workflow Schema](workflow-schema.md).
|
|
57
56
|
|
|
58
57
|
## Why this matters
|
package/docs/reference/tasks.md
CHANGED
|
@@ -251,10 +251,9 @@ redact: [TOKEN]
|
|
|
251
251
|
consumer — a native run's status comes from its exit code alone — so
|
|
252
252
|
declaring `output:` on them fails parsing with `TASK_SOURCE_INVALID`
|
|
253
253
|
instead of silently recording a contract nothing enforces.
|
|
254
|
-
- A
|
|
255
|
-
`uses: tasks/<ref>`
|
|
256
|
-
|
|
257
|
-
for how a workflow step's `with:` binds a v4 task's declared `inputs:`.
|
|
254
|
+
- A workflow step cannot target a task: the GitHub-shaped YAML workflow format
|
|
255
|
+
that carried `uses: tasks/<ref>` was removed in 0.10. A task runs a workflow
|
|
256
|
+
(`uses: workflows/<ref>`), not the other way round.
|
|
258
257
|
|
|
259
258
|
### Input flags
|
|
260
259
|
|
|
@@ -280,10 +279,8 @@ workflow step's own composition uses); for every other target — `run:`
|
|
|
280
279
|
shell, `scripts/<ref>`, `commands/<ref>` — the values are validated and then
|
|
281
280
|
**discarded**. `akm task run`'s own flags never populate an
|
|
282
281
|
`AKM_TASK_INPUTS` environment variable or a `## Task inputs` prompt block.
|
|
283
|
-
Those two surfaces
|
|
284
|
-
|
|
285
|
-
`with:` binding, resolved fresh for that step's own dispatch — see
|
|
286
|
-
[`with:` on a task-composed step](workflow-schema.md#github-shaped-yaml-subset).
|
|
282
|
+
Those two surfaces existed only for a workflow step composing a task through
|
|
283
|
+
`uses: tasks/<ref>`, which was removed in 0.10.
|
|
287
284
|
A scheduled run (`schedule[].inputs`, above) reaches the target through this
|
|
288
285
|
same `akm task run` path, so it inherits the identical rule: delivered as
|
|
289
286
|
params for a `workflows/<ref>` target, otherwise validated and discarded.
|
|
@@ -401,21 +398,17 @@ for full before/after examples and recovery guidance.
|
|
|
401
398
|
|
|
402
399
|
## Operations
|
|
403
400
|
|
|
404
|
-
- `akm search --type task`
|
|
401
|
+
- `akm search --type task` and
|
|
405
402
|
`akm show tasks/<id>` inspect task assets.
|
|
406
403
|
- `akm task explain <ref>` prints a task's declared inputs, resolved target,
|
|
407
404
|
effective execution settings, and schedule bindings without running
|
|
408
405
|
anything — see [`akm task explain`](#akm-task-explain) above.
|
|
409
|
-
- `akm
|
|
410
|
-
file
|
|
411
|
-
`
|
|
412
|
-
`akm
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
command-kind task. The envelope's own `sourceVersion` field names the
|
|
416
|
-
file's declared schema version. A version 2/3 file, and a `version: 4`
|
|
417
|
-
file still carrying a retired `schedule[].enabled`, report `blocked`
|
|
418
|
-
(exit 1) naming `akm migrate apply`, which converts them.
|
|
406
|
+
- `akm lint --type tasks` reports what `akm task sync` would refuse for a task
|
|
407
|
+
file: a document that does not parse as task source v4, a version 2/3 file or
|
|
408
|
+
a `version: 4` file still carrying a retired `schedule[].enabled` (the finding
|
|
409
|
+
names `akm migrate apply`, which converts them), a cron the local scheduler
|
|
410
|
+
backend cannot parse, and a schedule entry whose `inputs` leave a required
|
|
411
|
+
input unsatisfied. It is read-only and needs no configured engine.
|
|
419
412
|
- `akm task add` validates a task source v4 document, writes it, adds its ref
|
|
420
413
|
to local scheduler activation, and syncs its bundle. `--params` renders
|
|
421
414
|
typed `inputs:` declarations instead of a `with:` bag; `--schedule` is
|
|
@@ -51,7 +51,7 @@ Drop fetcher modules into:
|
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
`<stashDir>` is the active bundle for the current operation. When a command has a
|
|
54
|
-
resolved write target (for example `akm import --
|
|
54
|
+
resolved write target (for example `akm import --bundle ...`), akm loads
|
|
55
55
|
fetchers from that target bundle before falling back to the built-in website
|
|
56
56
|
scraper.
|
|
57
57
|
|