akm-cli 0.9.1 → 0.9.2-alpha.2
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 +103 -28
- package/README.md +3 -1
- package/SECURITY.md +1 -1
- package/STABILITY.md +1 -1
- package/dist/akm +2 -2
- package/dist/akm-migrate +2 -2
- package/dist/assets/hints/cli-hints-full.md +14 -9
- package/dist/assets/improve-strategies/proactive-maintenance.json +1 -1
- package/dist/assets/improve-strategies/reflect-distill.json +1 -1
- package/dist/assets/models.json +35 -0
- package/dist/assets/stash-skeleton/facts/conventions/backlinks.md +3 -4
- package/dist/assets/stash-skeleton/facts/conventions/organization.md +1 -3
- package/dist/assets/tasks/core/extract.yml +6 -5
- package/dist/assets/tasks/core/improve.yml +6 -5
- package/dist/assets/tasks/core/index-refresh.yml +6 -5
- package/dist/assets/tasks/core/sync.yml +6 -5
- package/dist/assets/tasks/core/version-check.yml +6 -5
- package/dist/assets/tasks/improve/akm-graph-refresh-weekly.yml +6 -5
- package/dist/assets/tasks/improve/akm-improve-catchup.yml +6 -5
- package/dist/assets/tasks/improve/akm-improve-consolidate.yml +6 -5
- package/dist/assets/tasks/improve/akm-improve-frequent.yml +6 -5
- package/dist/assets/tasks/improve/akm-improve-nightly.yml +6 -5
- package/dist/cli/confirm.js +2 -2
- package/dist/cli/parse-args.js +3 -24
- package/dist/cli/retired-commands.js +1 -1
- package/dist/cli/shared.js +2 -2
- package/dist/cli.js +11 -9
- package/dist/commands/agent/agent-dispatch.js +55 -89
- package/dist/commands/agent/contribute-cli.js +12 -45
- package/dist/commands/command/builtin-action.js +32 -0
- package/dist/commands/command/command-cli.js +99 -0
- package/dist/commands/command/command-execution.js +308 -0
- package/dist/commands/command/execution-source-loader.js +176 -0
- package/dist/commands/command/portable-template.js +60 -0
- package/dist/commands/config-cli.js +10 -4
- package/dist/commands/env/env.js +4 -2
- package/dist/commands/feedback-cli.js +1 -1
- package/dist/commands/health/checks.js +241 -29
- package/dist/commands/health/html-report.js +0 -14
- package/dist/commands/health/report-view-model.js +0 -1
- package/dist/commands/health/surfaces.js +6 -7
- package/dist/commands/health/types.js +0 -2
- package/dist/commands/health.js +63 -18
- package/dist/commands/improve/collapse-detector.js +5 -6
- package/dist/commands/improve/consolidate.js +251 -214
- package/dist/commands/improve/distill/promote-memory.js +71 -34
- package/dist/commands/improve/distill/quality-gate.js +17 -5
- package/dist/commands/improve/distill.js +232 -155
- package/dist/commands/improve/eligibility.js +112 -79
- package/dist/commands/improve/execution.js +57 -0
- package/dist/commands/improve/extract-cli.js +5 -5
- package/dist/commands/improve/extract-prompt.js +64 -22
- package/dist/commands/improve/extract.js +608 -360
- package/dist/commands/improve/improve-strategies.js +43 -14
- package/dist/commands/improve/improve.js +249 -29
- package/dist/commands/improve/loop-stages.js +11 -17
- package/dist/commands/improve/memory/memory-contradiction-detect.js +90 -66
- package/dist/commands/improve/outcome-loop.js +22 -38
- package/dist/commands/improve/planner.js +134 -0
- package/dist/commands/improve/preparation.js +730 -409
- package/dist/commands/improve/reflect.js +386 -223
- package/dist/commands/improve/run-context.js +3 -4
- package/dist/commands/improve/salience.js +6 -58
- package/dist/commands/improve/session-asset.js +12 -12
- package/dist/commands/lint/index.js +101 -29
- package/dist/commands/migrate-cli.js +11 -69
- package/dist/commands/migration-tool.js +6 -9
- package/dist/commands/models-cli.js +27 -0
- package/dist/commands/proposal/drain.js +258 -186
- package/dist/commands/proposal/proposal-cli.js +32 -10
- package/dist/commands/proposal/proposal.js +2 -5
- package/dist/commands/proposal/propose.js +192 -172
- package/dist/commands/proposal/repository.js +54 -91
- package/dist/commands/proposal/validators/proposal-validators.js +9 -7
- package/dist/commands/read/curate.js +53 -22
- package/dist/commands/read/registry-search.js +25 -9
- package/dist/commands/read/remember-cli.js +14 -2
- package/dist/commands/read/search.js +10 -4
- package/dist/commands/read/show.js +139 -153
- package/dist/commands/registry-cli.js +16 -7
- package/dist/commands/remember.js +33 -18
- package/dist/commands/sources/add-cli.js +19 -178
- package/dist/commands/sources/bundle-cli.js +15 -3
- package/dist/commands/sources/dangerous-env-audit.js +135 -0
- package/dist/commands/sources/info.js +2 -1
- package/dist/commands/sources/installed-stashes.js +901 -177
- package/dist/commands/sources/schema-repair.js +174 -95
- package/dist/commands/sources/self-update.js +30 -74
- package/dist/commands/sources/source-add.js +3 -5
- package/dist/commands/sources/sources-cli.js +2 -15
- package/dist/commands/sources/update-transaction.js +220 -0
- package/dist/commands/tasks/tasks-cli.js +3 -3
- package/dist/commands/tasks/tasks.js +736 -317
- package/dist/commands/workflow-cli.js +2 -2
- package/dist/core/adapter/adapters/agent-skills-adapter.js +3 -0
- package/dist/core/adapter/adapters/akm-adapter.js +85 -35
- package/dist/core/adapter/adapters/akm-lint.js +54 -39
- package/dist/core/adapter/adapters/akm-metadata.js +45 -45
- package/dist/core/adapter/adapters/akm-task-adapter.js +32 -49
- package/dist/core/adapter/adapters/akm-workflow-adapter.js +38 -23
- package/dist/core/adapter/adapters/dotenv-adapter.js +30 -1
- package/dist/core/adapter/adapters/generic-files-adapter.js +11 -0
- package/dist/core/adapter/adapters/index.js +0 -9
- package/dist/core/adapter/adapters/llm-wiki-adapter.js +4 -0
- package/dist/core/adapter/adapters/okf-adapter.js +4 -0
- package/dist/core/adapter/adapters/opencode-adapter.js +5 -8
- package/dist/core/adapter/adapters/tool-dir-shared.js +63 -6
- package/dist/core/adapter/adapters/website-snapshot-adapter.js +4 -0
- package/dist/core/adapter/execution-source.js +308 -0
- package/dist/core/adapter/recognize-match.js +36 -13
- package/dist/core/adapter/registry.js +0 -9
- package/dist/core/asset/stash-meta.js +94 -4
- package/dist/core/common.js +6 -11
- package/dist/core/config/config-io.js +3 -3
- package/dist/core/config/config-schema.js +18 -40
- package/dist/core/config/config-sources.js +11 -21
- package/dist/core/config/config-walker.js +31 -13
- package/dist/core/config/config.js +23 -26
- package/dist/core/config/schema/engines.js +8 -7
- package/dist/core/config/schema/improve-processes.js +29 -5
- package/dist/core/config/schema/index-config.js +0 -27
- package/dist/core/config/schema/primitives.js +1 -23
- package/dist/core/config/schema/sources-bundles.js +13 -16
- package/dist/core/errors.js +2 -0
- package/dist/core/events.js +68 -32
- package/dist/core/extra-params.js +1 -0
- package/dist/core/improve-result.js +315 -0
- package/dist/core/lesson-lint.js +0 -6
- package/dist/core/maintenance-barrier.js +4 -4
- package/dist/core/network-policy.js +152 -0
- package/dist/core/paths.js +1 -1
- package/dist/core/recognition-util.js +4 -4
- package/dist/core/registry-url.js +456 -0
- package/dist/core/state/migrations.js +161 -47
- package/dist/core/state-db.js +453 -80
- package/dist/core/system-error.js +32 -0
- package/dist/core/time.js +2 -12
- package/dist/core/write-source.js +0 -18
- package/dist/execution/directory-identity.js +52 -0
- package/dist/execution/executable-identity.js +107 -0
- package/dist/execution/guarded-source.js +398 -0
- package/dist/execution/json.js +95 -0
- package/dist/{commands/health/types-session-log.js → execution/limits.js} +2 -1
- package/dist/execution/record.js +55 -0
- package/dist/execution/resolved-request.js +730 -0
- package/dist/execution/source.js +320 -0
- package/dist/indexer/bundle-identity-guard.js +5 -4
- package/dist/indexer/db/graph-db.js +33 -0
- package/dist/indexer/graph/graph-boost.js +3 -4
- package/dist/indexer/graph/graph-extraction.js +562 -373
- package/dist/indexer/index-written-assets.js +78 -39
- package/dist/indexer/indexer.js +471 -432
- package/dist/indexer/installations.js +6 -0
- package/dist/indexer/lookup/adapter-concept-owner.js +283 -0
- package/dist/indexer/materialize-embeddings.js +155 -0
- package/dist/indexer/passes/memory-inference.js +227 -174
- package/dist/indexer/passes/metadata.js +263 -118
- package/dist/indexer/scan/doc-to-entry.js +7 -10
- package/dist/indexer/scan/drain-dir.js +51 -23
- package/dist/indexer/search/db-search.js +156 -50
- package/dist/indexer/search/fts-query.js +40 -40
- package/dist/indexer/search/ranking.js +36 -1
- package/dist/indexer/search/search-attribution.js +3 -1
- package/dist/indexer/search/search-fields.js +23 -14
- package/dist/indexer/search/search-hit-enrichers.js +1 -1
- package/dist/indexer/search/search-source.js +7 -16
- package/dist/indexer/search/semantic-status.js +10 -1
- package/dist/indexer/usage/show-usage.js +105 -0
- package/dist/indexer/usage/usage-events.js +7 -2
- package/dist/indexer/walk/matchers.js +40 -10
- package/dist/indexer/walk/path-resolver.js +5 -2
- package/dist/indexer/walk/walker.js +20 -2
- package/dist/integrations/agent/builder-shared.js +3 -6
- package/dist/integrations/agent/conversation-fallback.js +16 -0
- package/dist/integrations/agent/engine-resolution.js +87 -87
- package/dist/integrations/agent/execution-cascade.js +566 -0
- package/dist/integrations/agent/execution-definitions.js +211 -0
- package/dist/integrations/agent/execution-lowering.js +811 -0
- package/dist/integrations/agent/execution-preparation.js +67 -0
- package/dist/integrations/agent/index.js +0 -2
- package/dist/integrations/agent/inline-execution.js +74 -0
- package/dist/integrations/agent/model-map.js +515 -0
- package/dist/integrations/agent/persona-fallback.js +30 -0
- package/dist/integrations/agent/request-lowering.js +186 -0
- package/dist/integrations/agent/runner-dispatch.js +230 -37
- package/dist/integrations/agent/runner.js +12 -83
- package/dist/integrations/harnesses/aider/agent-builder.js +8 -0
- package/dist/integrations/harnesses/aider/index.js +0 -1
- package/dist/integrations/harnesses/amazonq/agent-builder.js +8 -0
- package/dist/integrations/harnesses/amazonq/index.js +0 -1
- package/dist/integrations/harnesses/claude/agent-builder.js +14 -1
- package/dist/integrations/harnesses/claude/index.js +1 -5
- package/dist/integrations/harnesses/claude/session-log.js +3 -33
- package/dist/integrations/harnesses/codex/agent-builder.js +8 -0
- package/dist/integrations/harnesses/codex/index.js +0 -1
- package/dist/integrations/harnesses/copilot/agent-builder.js +8 -0
- package/dist/integrations/harnesses/copilot/index.js +0 -1
- package/dist/integrations/harnesses/gemini/agent-builder.js +8 -0
- package/dist/integrations/harnesses/gemini/index.js +0 -1
- package/dist/integrations/harnesses/index.js +4 -44
- package/dist/integrations/harnesses/opencode/agent-builder.js +16 -9
- package/dist/integrations/harnesses/opencode/index.js +0 -2
- package/dist/integrations/harnesses/opencode/session-log.js +14 -204
- package/dist/integrations/harnesses/opencode-sdk/harness.js +12 -1
- package/dist/integrations/harnesses/opencode-sdk/sdk-runner.js +40 -42
- package/dist/integrations/harnesses/openhands/agent-builder.js +8 -0
- package/dist/integrations/harnesses/openhands/index.js +0 -1
- package/dist/integrations/harnesses/pi/agent-builder.js +8 -0
- package/dist/integrations/harnesses/pi/index.js +0 -1
- package/dist/integrations/harnesses/shared.js +0 -1
- package/dist/integrations/harnesses/types.js +1 -3
- package/dist/integrations/lockfile.js +82 -79
- package/dist/integrations/session-logs/index.js +6 -17
- package/dist/integrations/session-logs/provider-base.js +1 -29
- package/dist/llm/client.js +10 -5
- package/dist/llm/embedder.js +6 -7
- package/dist/llm/embedders/local.js +37 -88
- package/dist/llm/embedders/types.js +1 -1
- package/dist/llm/graph-extract.js +75 -50
- package/dist/llm/index-passes.js +43 -5
- package/dist/llm/memory-infer.js +8 -6
- package/dist/llm/metadata-enhance.js +5 -3
- package/dist/llm/structured-call.js +122 -25
- package/dist/output/format-exempt.js +1 -1
- package/dist/output/render-registry.js +0 -16
- package/dist/output/renderers.js +12 -7
- package/dist/output/shapes/curate.js +1 -0
- package/dist/output/shapes/helpers.js +10 -2
- package/dist/output/shapes/passthrough.js +2 -0
- package/dist/output/text/command-format.js +31 -33
- package/dist/output/text/health-format.js +1 -29
- package/dist/output/text/migrate.js +6 -56
- package/dist/output/text/proposal-format.js +16 -1
- package/dist/output/text/workflow-format.js +16 -0
- package/dist/registry/network.js +279 -0
- package/dist/registry/pinned-request-helper.js +247 -0
- package/dist/registry/pinned-transport.js +717 -0
- package/dist/registry/providers/skills-sh.js +18 -6
- package/dist/registry/providers/static-index.js +20 -7
- package/dist/registry/resolve.js +53 -28
- package/dist/scripts/akm-migrate-node.js +19334 -52269
- package/dist/scripts/akm-migrate.js +19270 -51612
- package/dist/setup/registry-stash-loader.js +64 -20
- package/dist/setup/semantic-assets.js +9 -34
- package/dist/setup/setup.js +12 -30
- package/dist/setup/source-identity.js +17 -0
- package/dist/setup/steps/sources.js +36 -15
- package/dist/setup/steps/tasks.js +39 -11
- package/dist/sources/providers/git-provider.js +3 -3
- package/dist/sources/providers/npm.js +2 -2
- package/dist/sources/providers/provider-utils.js +4 -3
- package/dist/sources/providers/website.js +11 -7
- package/dist/sources/snapshot-fetchers/host-guard.js +9 -136
- package/dist/sources/snapshot-fetchers/website-ingest.js +25 -109
- package/dist/sources/website-url.js +73 -0
- package/dist/storage/engines/sqlite-migrations.js +81 -26
- package/dist/storage/managed-db.js +27 -24
- package/dist/storage/repositories/events-repository.js +3 -0
- package/dist/storage/repositories/index-connection.js +42 -10
- package/dist/storage/repositories/index-entries-repository.js +203 -229
- package/dist/storage/repositories/index-entry-mapper.js +8 -12
- package/dist/storage/repositories/index-entry-schema.js +255 -0
- package/dist/storage/repositories/index-fts-repository.js +64 -71
- package/dist/storage/repositories/index-llm-cache-repository.js +8 -13
- package/dist/storage/repositories/index-meta-repository.js +0 -11
- package/dist/storage/repositories/index-schema.js +74 -350
- package/dist/storage/repositories/index-utility-repository.js +12 -17
- package/dist/storage/repositories/index-vec-repository.js +56 -7
- package/dist/storage/repositories/proposals-repository.js +4 -127
- package/dist/storage/repositories/registry-cache.js +2 -1
- package/dist/storage/repositories/task-history-repository.js +20 -40
- package/dist/storage/repositories/workflow-runs-repository.js +228 -129
- package/dist/storage/sqlite-read-snapshot.js +148 -0
- package/dist/tasks/backends/cron.js +170 -42
- package/dist/tasks/backends/index.js +1 -1
- package/dist/tasks/backends/launchd.js +787 -202
- package/dist/tasks/backends/schtasks.js +282 -83
- package/dist/tasks/embedded.js +7 -7
- package/dist/tasks/frozen-script.js +50 -0
- package/dist/tasks/resolve-akm-bin.js +5 -1
- package/dist/tasks/runner.js +239 -251
- package/dist/tasks/runtime-v3.js +281 -0
- package/dist/tasks/scheduler-binding.js +272 -0
- package/dist/tasks/scheduler-invocation.js +57 -43
- package/dist/tasks/scheduler-sync.js +654 -0
- package/dist/tasks/source-v3.js +752 -0
- package/dist/tasks/standalone-script-entry.js +5 -0
- package/dist/tasks/task-id.js +29 -0
- package/dist/workflows/authoring/authoring.js +15 -32
- package/dist/workflows/exec/dispatch-redaction.js +14 -8
- package/dist/workflows/exec/exec-unit.js +7 -28
- package/dist/workflows/exec/frozen-judge.js +57 -89
- package/dist/workflows/exec/lowering-notices.js +23 -0
- package/dist/workflows/exec/native-executor.js +301 -458
- package/dist/workflows/exec/param-secrets.js +4 -3
- package/dist/workflows/exec/run-workflow.js +26 -32
- package/dist/workflows/exec/step-work.js +105 -109
- package/dist/workflows/exec/unit-dispatch.js +103 -27
- package/dist/workflows/exec/unit-writer.js +3 -3
- package/dist/workflows/exec/worktree.js +2 -2
- package/dist/workflows/ir/compile.js +86 -72
- package/dist/workflows/ir/environment-v4.js +328 -0
- package/dist/workflows/ir/freeze-v4.js +122 -0
- package/dist/workflows/ir/plan-hash.js +13 -7
- package/dist/workflows/ir/schema-v4.js +525 -0
- package/dist/workflows/ir/schema.js +25 -284
- package/dist/workflows/ir/source-freeze-v4.js +506 -0
- package/dist/workflows/parser.js +27 -24
- package/dist/workflows/program/schema.js +1 -2
- package/dist/workflows/renderer.js +42 -29
- package/dist/workflows/resource-limits.js +4 -5
- package/dist/workflows/runtime/agent-identity.js +11 -13
- package/dist/workflows/runtime/plan-classifier.js +8 -8
- package/dist/workflows/runtime/runs.js +27 -43
- package/dist/workflows/runtime/workflow-asset-loader.js +45 -205
- package/dist/workflows/source-files.js +373 -0
- package/dist/workflows/source-ir/compile.js +196 -0
- package/dist/workflows/source-ir/github-yaml.js +577 -0
- package/dist/workflows/source-ir/ordering.js +38 -0
- package/dist/workflows/source-ir/program.js +50 -0
- package/dist/workflows/source-ir/result.js +26 -0
- package/dist/workflows/source-ir/schema.js +772 -0
- package/dist/workflows/source-ir/semantics.js +242 -0
- package/dist/workflows/source-ir/uses.js +14 -0
- package/docs/README.md +2 -0
- package/docs/migration/README.md +3 -1
- package/docs/migration/release-notes/0.9.2.md +55 -0
- package/docs/migration/release-notes/README.md +5 -0
- package/docs/migration/v0.8-to-v0.9.md +76 -1077
- package/docs/migration/v0.9.0-troubleshooting.md +104 -516
- package/docs/migration/v0.9.1-to-v0.9.2.md +150 -0
- package/docs/reference/README.md +1 -0
- package/docs/reference/cli.md +230 -98
- package/docs/reference/configuration.md +159 -36
- package/docs/reference/data-and-telemetry.md +19 -1
- package/docs/reference/supported-formats.md +23 -3
- package/docs/reference/tasks.md +182 -0
- package/docs/reference/workflow-schema.md +91 -40
- package/docs/reference/workflows.md +33 -6
- package/package.json +10 -6
- package/schemas/akm-config.json +372 -224
- package/schemas/akm-task.json +324 -80
- package/schemas/akm-workflow.json +6 -9
- package/dist/core/migration-operation.js +0 -75
- package/dist/integrations/agent/model-aliases.js +0 -74
- package/dist/tasks/parser.js +0 -380
- package/dist/tasks/schema.js +0 -123
- package/dist/tasks/validator.js +0 -80
- package/dist/workflows/ir/freeze.js +0 -320
- package/dist/workflows/runtime/document-cache.js +0 -13
|
@@ -9,22 +9,10 @@ directory. Project `.akm/config.json` files are not merged.
|
|
|
9
9
|
|
|
10
10
|
A present configuration file must set `configVersion` to exactly `"0.9.0"`.
|
|
11
11
|
Missing, older, newer, numeric, and malformed versions are rejected by ordinary
|
|
12
|
-
commands without rewriting the file.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
migration guide](../migration/v0.8-to-v0.9.md) before editing an existing
|
|
17
|
-
installation.
|
|
18
|
-
|
|
19
|
-
Canonical config and durable database access fail closed while a restore or
|
|
20
|
-
migration-apply operation is incomplete. Use `akm migrate status` to inspect it
|
|
21
|
-
and `akm migrate apply` to retry; do not delete migration control files manually.
|
|
22
|
-
|
|
23
|
-
AKM 0.8 does not provide these migration commands. To cross from 0.8 to 0.9,
|
|
24
|
-
prepare the target and an independent filesystem backup first, install or stage
|
|
25
|
-
the 0.9 binary manually, then invoke that new binary with `migrate apply
|
|
26
|
-
--config`. Do not use `upgrade --migration-config` from 0.8; that installed 0.8
|
|
27
|
-
code cannot enforce safeguards introduced by 0.9.
|
|
12
|
+
commands without rewriting the file. Pre-0.9 config and database layouts are
|
|
13
|
+
not runtime inputs and are not migrated by `akm upgrade`. Configure the current
|
|
14
|
+
schema directly. The standalone migrator exists only for explicit task v2 to
|
|
15
|
+
task v3 conversion.
|
|
28
16
|
|
|
29
17
|
```jsonc
|
|
30
18
|
{
|
|
@@ -80,8 +68,17 @@ LLM endpoints must be complete `http://` or `https://` chat-completions URLs
|
|
|
80
68
|
ending in `/chat/completions`, without userinfo, query, or fragment. API keys
|
|
81
69
|
are symbolic only: `$VAR` or `${VAR}`. AKM resolves them only at dispatch.
|
|
82
70
|
|
|
83
|
-
An
|
|
84
|
-
|
|
71
|
+
An LLM engine may set `reasoningEffort` to a non-empty provider-supported
|
|
72
|
+
value such as `"none"`, `"low"`, or `"high"`. AKM sends it as the top-level
|
|
73
|
+
OpenAI-compatible `reasoning_effort` parameter alongside the existing
|
|
74
|
+
`enableThinking` control, because providers do not all honor the same thinking
|
|
75
|
+
switch. `reasoning_effort` is AKM-owned and cannot be set through
|
|
76
|
+
`extraParams`. If a response reports reasoning tokens despite
|
|
77
|
+
`enableThinking: false`, AKM emits a runtime warning so an ineffective provider
|
|
78
|
+
control is visible.
|
|
79
|
+
|
|
80
|
+
An agent engine may set `bin`, `args`, `workspace`, `model`, and `timeoutMs`.
|
|
81
|
+
Only `platform: "opencode-sdk"` may set `llmEngine`; it names
|
|
85
82
|
the LLM engine used as that SDK engine's fallback connection.
|
|
86
83
|
|
|
87
84
|
`platform: "opencode-sdk"` needs the **`opencode` binary** on PATH (or a `bin`
|
|
@@ -90,10 +87,102 @@ client with no dependencies — it spawns `opencode serve` and talks to it — s
|
|
|
90
87
|
the npm dependency alone does not make the platform usable. Install the binary
|
|
91
88
|
with `npm i -g opencode-ai` or opencode's own installer.
|
|
92
89
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
90
|
+
### Model-map files
|
|
91
|
+
|
|
92
|
+
AKM ships an immutable `models.json` package asset with three intent aliases:
|
|
93
|
+
`fast`, `balanced`, and `reasoning`. The installed starter has separate
|
|
94
|
+
columns for Claude Code, OpenCode, and OpenCode SDK only. A provider-specific
|
|
95
|
+
identifier is not pretended to work on unrelated engines. Add mappings for
|
|
96
|
+
Gemini, Codex, named direct LLM engines, or other harnesses in your user file.
|
|
97
|
+
Config-root and per-engine `modelAliases` are rejected; this file is the only
|
|
98
|
+
alias definition surface.
|
|
99
|
+
|
|
100
|
+
An optional operator-owned file lives beside `config.json` at
|
|
101
|
+
`$XDG_CONFIG_HOME/akm/models.json` (or `<AKM_CONFIG_DIR>/models.json`). It uses
|
|
102
|
+
the same version-1 schema as the installed file:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"version": 1,
|
|
107
|
+
"aliases": {
|
|
108
|
+
"fast": {
|
|
109
|
+
"gemini": "gemini-2.5-flash"
|
|
110
|
+
},
|
|
111
|
+
"reasoning": {
|
|
112
|
+
"claude": {
|
|
113
|
+
"inference": {
|
|
114
|
+
"effort": "medium"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"local-reasoner": {
|
|
118
|
+
"model": "qwen3:30b",
|
|
119
|
+
"inference": {
|
|
120
|
+
"effort": "high"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Each engine mapping is either a non-empty exact model string or a structured
|
|
129
|
+
profile with the documented fields `model` and `inference`. A user profile may
|
|
130
|
+
omit `model` when the installed layer already supplies it, as the partial
|
|
131
|
+
Claude override above does. After overlay, every alias/engine entry must have a
|
|
132
|
+
usable model. Unknown profile fields are rejected; JSON-safe fields inside
|
|
133
|
+
`inference` are preserved for engine adapters to lower optimistically.
|
|
134
|
+
|
|
135
|
+
The user file overlays the installed file by alias, engine, and nested object
|
|
136
|
+
field. Objects merge recursively. Arrays, scalars, and explicit `null` replace
|
|
137
|
+
the lower value; omitted fields preserve it. Alias and engine keys are
|
|
138
|
+
case-normalized, and case-colliding definitions are rejected. Unknown model
|
|
139
|
+
inputs still pass through byte-for-byte as exact identifiers. Once a name is a
|
|
140
|
+
known merged alias, selecting an engine with no mapping is an actionable
|
|
141
|
+
configuration error rather than silently sending the alias as a model ID.
|
|
142
|
+
|
|
143
|
+
The common execution cascade reads these files for current direct command and
|
|
144
|
+
non-interactive agent calls, task-v3 runs, and improve/proposal/index
|
|
145
|
+
model work routed through that resolver. A structured alias expands as
|
|
146
|
+
defaults at the layer that selected it; explicit sibling fields and nearer
|
|
147
|
+
layers still win. The resulting request carries the exact model ID and merged
|
|
148
|
+
inference object. Engine lowerers consume that exact selection and never run
|
|
149
|
+
alias resolution again. New workflow starts persist the exact request and
|
|
150
|
+
symbolic runner selection in durable plan v4; resume consumes that frozen
|
|
151
|
+
material without resolving aliases again.
|
|
152
|
+
|
|
153
|
+
Copy the complete installed starter into the user configuration directory when
|
|
154
|
+
you want to customize all fields:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
akm models copy-defaults
|
|
158
|
+
akm models copy-defaults --overwrite # explicit replacement confirmation
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The command validates the installed asset, creates the config directory, and
|
|
162
|
+
writes a fully synced sibling before publication. Without `--overwrite`, a
|
|
163
|
+
hard-link/no-replace operation makes publication atomic: a racing creator wins
|
|
164
|
+
without losing its bytes. A filesystem that cannot provide that operation
|
|
165
|
+
fails safely instead of falling back to a clobbering rename.
|
|
166
|
+
|
|
167
|
+
With `--overwrite`, the portable guarantee is an atomic pathname replacement
|
|
168
|
+
that never follows the target when it is a symlink. AKM verifies the observed
|
|
169
|
+
regular-file identity again immediately before rename, but the portable
|
|
170
|
+
filesystem APIs do not provide a conditional compare-and-swap rename. Another
|
|
171
|
+
process can still change the directory entry after that check; AKM replaces
|
|
172
|
+
the entry at the pathname without dereferencing it. Consequently,
|
|
173
|
+
`overwritten: true` means overwrite was requested for an entry AKM observed,
|
|
174
|
+
not that an inode identity was transactionally locked. Symlinks and other
|
|
175
|
+
non-regular targets observed at either check are refused.
|
|
176
|
+
|
|
177
|
+
AKM does not auto-create or sync this file, and authoritative defaults never
|
|
178
|
+
live in the cache. npm/Node and normal Bun installs read the packaged
|
|
179
|
+
`dist/assets/models.json` lazily, so `akm health` can report a missing or
|
|
180
|
+
malformed package asset as a `model-map-files` failure. A standalone binary has
|
|
181
|
+
the same authoritative bytes embedded at compile time and therefore has no
|
|
182
|
+
external model-map asset that can later disappear; its health check validates
|
|
183
|
+
the embedded copy, and release tests pin copied bytes to `src/assets/models.json`.
|
|
184
|
+
The health check passes when the optional user file is absent and warns with
|
|
185
|
+
its path and JSON location when the user file is unreadable or invalid.
|
|
97
186
|
|
|
98
187
|
`defaults.engine` names an LLM or agent engine. `defaults.llmEngine` must name
|
|
99
188
|
an LLM engine. There is no first-engine fallback: an unset `defaults.engine`
|
|
@@ -157,6 +246,32 @@ incompatible engine never falls back to another engine. Built-in strategies
|
|
|
157
246
|
are complete presets. User-defined strategies inherit omitted fields from the
|
|
158
247
|
built-in `default` strategy before applying their own overrides.
|
|
159
248
|
|
|
249
|
+
`processes.triage.judgment` explicitly controls the optional judgment tier.
|
|
250
|
+
Use `true` to enable it, `false` to disable it, or an object with `enabled`,
|
|
251
|
+
`engine`, `model`, `timeoutMs`, and/or `llm` overrides. Existing object values
|
|
252
|
+
such as `{}` and `{ "engine": "reviewer" }` remain enabled by default. Unknown
|
|
253
|
+
object keys are rejected so misspellings cannot silently change execution;
|
|
254
|
+
the retired `mode` and `profile` keys continue to report their engine migration
|
|
255
|
+
guidance. When enabled, engine selection is judgment → triage → strategy →
|
|
256
|
+
`defaults.llmEngine`, and resolution fails closed if none is available.
|
|
257
|
+
|
|
258
|
+
```jsonc
|
|
259
|
+
{
|
|
260
|
+
"improve": {
|
|
261
|
+
"strategies": {
|
|
262
|
+
"nightly": {
|
|
263
|
+
"processes": {
|
|
264
|
+
"triage": {
|
|
265
|
+
"enabled": true,
|
|
266
|
+
"judgment": { "enabled": true, "engine": "reviewer" }
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
160
275
|
The shipped `default` and `frequent` strategies keep improve-stage session
|
|
161
276
|
extraction off. `proactiveMaintenance` is off in `default` and
|
|
162
277
|
`reflect-distill`; run `akm improve --strategy proactive-maintenance` to use the
|
|
@@ -173,15 +288,12 @@ bundled.
|
|
|
173
288
|
|
|
174
289
|
## Indexing
|
|
175
290
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
toggling it so all entries and embeddings are rebuilt consistently. If the
|
|
183
|
-
setting differs from the state used to build the current index, AKM warns until
|
|
184
|
-
that full rebuild completes.
|
|
291
|
+
AKM-native Markdown contributes a normalized body projection to the
|
|
292
|
+
lowest-weight `content` search field. The projection is capped at 16,384
|
|
293
|
+
characters, removes frontmatter, comments, fenced code, and link destinations,
|
|
294
|
+
and is never produced for secret, env, session, or session-checkpoint assets.
|
|
295
|
+
Embedding input is separately capped at 8,192 characters with structured
|
|
296
|
+
metadata placed before body content.
|
|
185
297
|
|
|
186
298
|
## Semantic search
|
|
187
299
|
|
|
@@ -190,6 +302,17 @@ embedding-based search. `"auto"` lets AKM set up embeddings (which downloads
|
|
|
190
302
|
a local model unless you point `embedding` at a remote provider) and falls
|
|
191
303
|
back to keyword-only FTS if the embedding runtime is unavailable; `"off"`
|
|
192
304
|
disables semantic search outright and search is always keyword-only FTS.
|
|
305
|
+
If a backend marked ready cannot serve a query, search still returns the FTS
|
|
306
|
+
results but reports `searchMode: "fts-fallback"` and one sanitized warning.
|
|
307
|
+
This is distinct from `searchMode: "keyword"`, which is the normal result when
|
|
308
|
+
semantic search is disabled or has not been built. A read-only sandbox that
|
|
309
|
+
cannot record best-effort usage telemetry does not by itself mark search as
|
|
310
|
+
degraded.
|
|
311
|
+
The npm/Bun package declares `@huggingface/transformers` as a normal dependency.
|
|
312
|
+
AKM imports that external package directly; it does not carry a copied runtime
|
|
313
|
+
under `src/` or `dist/`. If the dependency is unavailable, reinstall `akm-cli`
|
|
314
|
+
or configure a remote `embedding.endpoint`. Setup does not mutate a global
|
|
315
|
+
installation to add runtime packages.
|
|
193
316
|
The default is `"off"` so a bare or headless install (`akm bundle create`, `--yes`,
|
|
194
317
|
`--config`) never silently downloads the local embedding model on first
|
|
195
318
|
index.
|
|
@@ -284,6 +407,10 @@ Each entry is `{ url, name?, enabled?, provider?, options? }`; `provider`
|
|
|
284
407
|
defaults to `"static-index"`. See [Registries](https://github.com/itlackey/akm/blob/main/docs/reference/registry.md) for the full
|
|
285
408
|
field reference and provider list.
|
|
286
409
|
|
|
410
|
+
Registry `url` values must not contain username/password userinfo. The built-in
|
|
411
|
+
providers do not currently support authenticated registry requests; `options`
|
|
412
|
+
does not add an authentication mechanism. Use a credential-free HTTPS endpoint.
|
|
413
|
+
|
|
287
414
|
## Output defaults
|
|
288
415
|
|
|
289
416
|
`output.format` (one of `json`\|`yaml`\|`text`\|`jsonl`\|`md`\|`html`,
|
|
@@ -327,10 +454,6 @@ akm config get engines.fast
|
|
|
327
454
|
akm config set engines.fast '{"kind":"llm","endpoint":"http://localhost:11434/v1/chat/completions","model":"qwen3"}'
|
|
328
455
|
akm config set engines.fast.apiKey '$LOCAL_LLM_API_KEY'
|
|
329
456
|
akm config unset engines.old
|
|
330
|
-
akm migrate status
|
|
331
|
-
akm migrate status --config ./prepared-0.9.json
|
|
332
|
-
akm migrate apply --config ./prepared-0.9.json --dry-run
|
|
333
|
-
akm migrate apply --config ./prepared-0.9.json
|
|
334
457
|
```
|
|
335
458
|
|
|
336
459
|
Object values passed to `config set` deep-merge with their current value.
|
|
@@ -347,7 +470,7 @@ generic walker.
|
|
|
347
470
|
| `AKM_LLM_API_KEY` | Fallback only for the selected `defaults.llmEngine` |
|
|
348
471
|
| `AKM_EMBED_API_KEY` | Embedding credential |
|
|
349
472
|
| `AKM_BUNDLE_DIR` | Override the bundle directory |
|
|
350
|
-
| `AKM_DATA_DIR` | Override the data directory —
|
|
473
|
+
| `AKM_DATA_DIR` | Override the data directory — `index.db`, durable `state.db`, and `akm.lock` (or set `XDG_DATA_HOME`) |
|
|
351
474
|
| `AKM_CACHE_DIR` | Override the cache directory — regenerable caches (or set `XDG_CACHE_HOME`) |
|
|
352
475
|
| `AKM_STATE_DIR` | Override the state directory — task-scheduler invocation state (or set `XDG_STATE_HOME`) |
|
|
353
476
|
| `AKM_SQLITE_JOURNAL_MODE` | SQLite journal mode: `WAL` (default), `DELETE`, or `TRUNCATE` |
|
|
@@ -22,6 +22,24 @@ In every case the receiving endpoint is one you configured or invoked; the data
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## Dry runs and diagnostic output
|
|
26
|
+
|
|
27
|
+
Command dry-run is an intentionally zero-write diagnostic.
|
|
28
|
+
A command dry-run does not mutate or write authored source.
|
|
29
|
+
A command dry-run does not mutate or write durable state.
|
|
30
|
+
A command dry-run records no usage.
|
|
31
|
+
A command dry-run emits no events.
|
|
32
|
+
A command dry-run performs no accounting.
|
|
33
|
+
|
|
34
|
+
`akm command run --dry-run` still reads the selected source and configuration,
|
|
35
|
+
performs authorization, and lowers a request. It does not dispatch or
|
|
36
|
+
materialize credentials. Its output contains only safe field provenance and
|
|
37
|
+
fixed lowering notices; resolved prompt, command, environment, endpoint,
|
|
38
|
+
model, and credential values are excluded. Live `--verbose` writes the same
|
|
39
|
+
safe diagnostic metadata to stderr while preserving normal stdout.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
25
43
|
## Local On-Disk Surface
|
|
26
44
|
|
|
27
45
|
AKM writes to these locations on your machine. All paths follow [XDG Base Directory](https://specifications.freedesktop.org/basedir-spec/latest/) conventions on Linux/macOS and Windows conventions on Windows.
|
|
@@ -141,7 +159,7 @@ the set of types the code actually emits at HEAD (verified against every
|
|
|
141
159
|
| `show` | `akm show <ref>` | `ref`, `type`, `name` |
|
|
142
160
|
| `select` | `akm show` after a search returning the same ref | `ref`, `entryId` |
|
|
143
161
|
| `feedback` | `akm feedback <ref>` | `signal` (positive/negative) |
|
|
144
|
-
| `sync` | `akm sync`
|
|
162
|
+
| `sync` | `akm sync` | `ref` |
|
|
145
163
|
| `stash_synced` | `akm improve`'s internal auto-sync pass (the `sync.push` feature), **distinct from** the `akm sync` command above | `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) |
|
|
146
164
|
| `env_access` | `akm env run <name> -- <command>` (audit trail: key **names** only, values never recorded) | `ref`, `keys` |
|
|
147
165
|
| `secret_access` | `akm secret run <ref> <VAR> -- <command>` (audit trail: var **name** only, value never recorded) | `ref`, `var` |
|
|
@@ -18,10 +18,10 @@ one explicitly. 0.9.0 recognizes 11 formats.
|
|
|
18
18
|
| `website-snapshot` | Crawled pages tagged `website` (name, description, full body, original crawl URL) | Root `manifest.json` with `url` + `fetchedAt` | Read-only | A website materialized locally via `akm bundle add <url>` |
|
|
19
19
|
| `agent-skills` | Standalone Agent Skills packages as type `skill` (name, description, tags, body) | A direct child directory containing `SKILL.md` | Read-only | The [github.com/anthropics/skills](https://github.com/anthropics/skills) layout — one `<name>/SKILL.md` per package at the bundle root |
|
|
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
|
-
| `opencode` | Same shape as `claude`, rooted on `AGENTS.md` | `opencode.json`/`opencode.jsonc`, or root `AGENTS.md` plus a
|
|
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 |
|
|
24
|
-
| `akm-task` |
|
|
23
|
+
| `akm-workflow` | Workflow steps, name, description, tags | Either a top-level `.md` file with explicit `type: workflow` frontmatter or a peer top-level GitHub-shaped `.yml` workflow | Writable — `akm workflow create` only | A standalone workflow bundle, one workflow per file |
|
|
24
|
+
| `akm-task` | Strict task-v3 `.yml` sources (`version: 3`) as type `task`, including local schedules/manual triggers and the exact authored YAML | A top-level `.yml` file accepted by the task-v3 source probe (`akm.schedule` or supported `on`) | 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 |
|
|
27
27
|
| `okf` | Frontmatter `type` (defaults to `knowledge`); name, description, tags, links, body | A root `index.md`, or any `.md` file anywhere carrying a non-empty frontmatter `type` | Read-only | The [Open Knowledge Format](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/main/okf/SPEC.md) — the portable baseline every markdown-based format here is a superset of |
|
|
@@ -32,6 +32,25 @@ import`, `proposal accept`, and similar) won't create or edit files in a
|
|
|
32
32
|
bundle of that format. Reading, searching, and `akm lint` validation work
|
|
33
33
|
against every format in the table above regardless of write support.
|
|
34
34
|
|
|
35
|
+
For native tool formats such as `claude` and `opencode`, the adapter translates
|
|
36
|
+
recognized native agents and commands into AKM's indexed/runtime representation
|
|
37
|
+
when the bundle is read. AKM does not create a canonical copy, synchronize tool
|
|
38
|
+
directories, or write translated assets back into those native bundles. The
|
|
39
|
+
native files remain authoritative.
|
|
40
|
+
|
|
41
|
+
## Task format
|
|
42
|
+
|
|
43
|
+
The `akm-task` adapter and native AKM task directory use the same strict
|
|
44
|
+
`version: 3` task-v3 contract. An `akm-task` source is `.yml` only; `.yaml` is
|
|
45
|
+
diagnosed but never indexed, scheduled, or executed. See [Tasks](tasks.md).
|
|
46
|
+
|
|
47
|
+
## Workflow formats
|
|
48
|
+
|
|
49
|
+
Workflow sources are the one intentional peer-format case inside the native
|
|
50
|
+
AKM workspace: workflows may be `.md` or `.yml`, and both compile to the same
|
|
51
|
+
source IR. Task sources remain `.yml` only and require task v3. See
|
|
52
|
+
[Tasks](tasks.md) and [Workflow Schema](workflow-schema.md).
|
|
53
|
+
|
|
35
54
|
## Why this matters
|
|
36
55
|
|
|
37
56
|
This table is the proof of the first pillar: **one library for every agent**.
|
|
@@ -46,5 +65,6 @@ formats are writable today and why.
|
|
|
46
65
|
|
|
47
66
|
- [Asset Types](https://github.com/itlackey/akm/blob/main/docs/reference/asset-types.md) — the 14 native asset types AKM's own format recognizes
|
|
48
67
|
- [Adapters](https://github.com/itlackey/akm/blob/main/docs/architecture/adapters.md) — how AKM picks a format, the write-path internals, and current caveats
|
|
68
|
+
- [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
|
|
49
69
|
- [Concepts](https://github.com/itlackey/akm/blob/main/docs/guides/concepts.md) — the retrieval loop these formats feed
|
|
50
70
|
- [Wikis](https://github.com/itlackey/akm/blob/main/docs/guides/wikis.md) — the `llm-wiki` authoring workflow
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Tasks
|
|
2
|
+
|
|
3
|
+
Task assets are strict, local automation sources. They live at
|
|
4
|
+
`<bundle>/tasks/<id>.yml`, use task schema `version: 3`, and can be run directly
|
|
5
|
+
or reconciled to cron, launchd, or Windows Task Scheduler with `akm task sync`.
|
|
6
|
+
The task file is authored source; scheduler entries are derived OS state.
|
|
7
|
+
|
|
8
|
+
## Files and schema
|
|
9
|
+
|
|
10
|
+
The only recognized task extension is `.yml`. A `.yaml` near miss is never
|
|
11
|
+
indexed, scheduled, or run. Every task must declare `version: 3`; unknown keys
|
|
12
|
+
and older versions fail closed. The published [task schema](../../schemas/akm-task.json)
|
|
13
|
+
describes the hand-authored contract, while `src/tasks/source-v3.ts` remains the
|
|
14
|
+
authoritative bounded parser.
|
|
15
|
+
|
|
16
|
+
At the top level a task can use `name`, exactly one executable selector, common
|
|
17
|
+
step fields, and exactly one trigger source:
|
|
18
|
+
|
|
19
|
+
```yaml
|
|
20
|
+
version: 3
|
|
21
|
+
name: Nightly review
|
|
22
|
+
uses: workflows/nightly-review
|
|
23
|
+
with:
|
|
24
|
+
strict: true
|
|
25
|
+
akm:
|
|
26
|
+
schedule: "0 4 * * *"
|
|
27
|
+
enabled: true
|
|
28
|
+
timeout: 30m
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Task YAML is bounded before expansion: source size, YAML depth, aggregate node
|
|
32
|
+
count, mapping width, string size, and collection sizes all have finite limits.
|
|
33
|
+
Aliases, merge keys, custom tags, duplicate keys, accessors, and non-plain data
|
|
34
|
+
are rejected rather than normalized.
|
|
35
|
+
|
|
36
|
+
## Executable targets: `uses` or `run`
|
|
37
|
+
|
|
38
|
+
A task selects exactly one of `uses` or `run`; the two fields are mutually
|
|
39
|
+
exclusive.
|
|
40
|
+
|
|
41
|
+
`uses` accepts these 0.9.2 target shapes:
|
|
42
|
+
|
|
43
|
+
- `akm/command`, the built-in inline/referenced command action. Its `with`
|
|
44
|
+
object requires exactly one of `with.ref` or `with.content`; they are
|
|
45
|
+
mutually exclusive. `with.arguments` is one optional portable string, used
|
|
46
|
+
for the single, one-pass `$ARGUMENTS` substitution.
|
|
47
|
+
- Asset refs rooted at `commands/`, `workflows/`, or `scripts/`, optionally
|
|
48
|
+
qualified with a bundle such as `team//commands/review`.
|
|
49
|
+
- A revision-qualified GitHub action spelling such as `owner/repo@ref` or
|
|
50
|
+
`owner/repo/path@revision`. That syntax is recognized so it cannot be
|
|
51
|
+
mistaken for an AKM ref, but remote action acquisition and execution are
|
|
52
|
+
unsupported in 0.9.2 and fail before dispatch.
|
|
53
|
+
|
|
54
|
+
Agent refs such as `agents/reviewer` are personas and are not executable.
|
|
55
|
+
Task refs such as `tasks/nightly` are also not executable. Local actions
|
|
56
|
+
(`./action`) are rejected and Docker actions (`docker://image`) are unsupported.
|
|
57
|
+
GitHub expressions are unsupported and rejected before dispatch. Unqualified
|
|
58
|
+
remote actions are rejected too.
|
|
59
|
+
|
|
60
|
+
The runtime applies this target-by-target field matrix. Validation is strict;
|
|
61
|
+
fields are not silently discarded.
|
|
62
|
+
For `scripts/` asset refs, `with` is rejected before dispatch.
|
|
63
|
+
|
|
64
|
+
| Target | `with` | task `env` | Interpreter / execution |
|
|
65
|
+
|---|---|---|---|
|
|
66
|
+
| `run` | Rejected; `with` is legal only with `uses` | Allowed | One authored string through the selected closed host `shell` |
|
|
67
|
+
| `akm/command` | Required action object: exactly one of `ref` or `content`, plus optional portable `arguments` | Allowed and passed through the command resolver | Shared command authorization and lowering |
|
|
68
|
+
| `commands/<name>` | Direct command refs: `with` is rejected; use `akm/command` for portable arguments | Allowed and passed through the command resolver | Shared command authorization and lowering |
|
|
69
|
+
| `workflows/<name>` | Of asset refs, workflow refs alone consume `with` as workflow params | A nonempty task `env` is rejected because the durable workflow runtime cannot consume it in 0.9.2 | Fresh durable workflow start |
|
|
70
|
+
| `scripts/<name>.<ext>` | Script refs: `with` is rejected | Allowed for the child process | Closed extension-to-interpreter table below |
|
|
71
|
+
| `owner/repo[/path]@ref` | Not consumed | Not consumed | Recognized spelling, but remote acquisition is rejected in 0.9.2 |
|
|
72
|
+
|
|
73
|
+
Script refs use this closed table; any other extension fails before dispatch:
|
|
74
|
+
|
|
75
|
+
| Extensions | Interpreter |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `.sh` | `sh` |
|
|
78
|
+
| `.ts`, `.js` | Bun; JavaScript and TypeScript script targets require Bun (the standalone binary uses its embedded Bun runtime) |
|
|
79
|
+
| `.ps1` | `powershell -NoProfile -NonInteractive -File` |
|
|
80
|
+
| `.cmd`, `.bat` | `cmd /d /s /c` |
|
|
81
|
+
| `.py` | `python` |
|
|
82
|
+
| `.rb` | `ruby` |
|
|
83
|
+
| `.go` | `go run` |
|
|
84
|
+
| `.pl` | `perl` |
|
|
85
|
+
| `.php` | `php` |
|
|
86
|
+
| `.lua` | `lua` |
|
|
87
|
+
| `.r` | `rscript` |
|
|
88
|
+
| `.swift` | `swift` |
|
|
89
|
+
| `.kt`, `.kts` | Kotlin (`kotlin` for `.kt`, `kotlinc -script` for `.kts`) |
|
|
90
|
+
|
|
91
|
+
`run` is one non-empty shell string. It may specify `shell` from the closed host
|
|
92
|
+
shell table `bash`, `sh`, `zsh`, `pwsh`, `powershell`, or `cmd`. Shell expansion
|
|
93
|
+
is runtime behavior for an explicitly authored task `run`; AKM does not infer a
|
|
94
|
+
shell from `uses`. `working-directory` must be a relative, contained path under
|
|
95
|
+
the task's workspace root. Absolute paths, traversal, dangling links, and
|
|
96
|
+
symlink escapes fail before execution.
|
|
97
|
+
|
|
98
|
+
Common resolver fields live under `akm`: `agent`, `engine`, `model`,
|
|
99
|
+
`inference`, `outputSchema`, `tools`, `timeout`, `redact`, `maxSteps`, and
|
|
100
|
+
`maxRetries`. Environment entries are literal string, number, or boolean
|
|
101
|
+
values. Keep credentials out of task source; `redact` contains environment
|
|
102
|
+
variable names, never secret values.
|
|
103
|
+
|
|
104
|
+
## Scheduling and triggers
|
|
105
|
+
|
|
106
|
+
A task has exactly one scheduling source: either `akm.schedule` or top-level
|
|
107
|
+
`on`. The two sources are mutually exclusive.
|
|
108
|
+
|
|
109
|
+
The compact AKM spelling is:
|
|
110
|
+
|
|
111
|
+
```yaml
|
|
112
|
+
version: 3
|
|
113
|
+
run: akm improve --strategy default
|
|
114
|
+
akm:
|
|
115
|
+
schedule: "@daily"
|
|
116
|
+
enabled: false
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The GitHub-shaped local trigger subset accepts schedule entries and an empty
|
|
120
|
+
manual trigger:
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
version: 3
|
|
124
|
+
uses: commands/review
|
|
125
|
+
on:
|
|
126
|
+
schedule:
|
|
127
|
+
- cron: "0 6 * * *"
|
|
128
|
+
workflow_dispatch: {}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
`workflow_dispatch` accepts no inputs. Service events such as `push` are
|
|
132
|
+
rejected and create no watcher or polling daemon. A source with only
|
|
133
|
+
`workflow_dispatch` is manual-only and is not installed as a time schedule.
|
|
134
|
+
Multiple schedule entries create deterministic scheduler bindings for the one
|
|
135
|
+
source task.
|
|
136
|
+
|
|
137
|
+
`akm task run <id>` executes a task immediately, including a disabled task.
|
|
138
|
+
`akm task sync` validates the complete desired set before atomically
|
|
139
|
+
reconciling scheduler state. Scheduled invocations re-read the guarded current
|
|
140
|
+
task bytes; workflow targets then create a fresh durable workflow freeze.
|
|
141
|
+
|
|
142
|
+
## Migrating task v2 to v3
|
|
143
|
+
|
|
144
|
+
Normal execution rejects task v2 and prints the migration hint. Preview the
|
|
145
|
+
same fail-closed migration plan that apply consumes:
|
|
146
|
+
|
|
147
|
+
```sh
|
|
148
|
+
akm migrate apply --dry-run
|
|
149
|
+
akm migrate apply
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The planner reports every input file as `changed`, `skipped`, or `blocked`.
|
|
153
|
+
Deterministic prompt, command-ref, workflow-ref, and safe command-string cases
|
|
154
|
+
become v3. An argv array or any command whose shell meaning cannot be preserved
|
|
155
|
+
is blocked for manual review and remains untouched. Apply validates a complete
|
|
156
|
+
v3 replacement before writing and backs up each original immediately before
|
|
157
|
+
replacement.
|
|
158
|
+
|
|
159
|
+
See the [0.9.1 to 0.9.2 migration guide](../migration/v0.9.1-to-v0.9.2.md)
|
|
160
|
+
for before/after examples, preserved fields, and recovery guidance.
|
|
161
|
+
|
|
162
|
+
## Operations
|
|
163
|
+
|
|
164
|
+
- `akm search --type task` and `akm show tasks/<id>` inspect task assets.
|
|
165
|
+
- `akm task add` writes a task-v3 source and installs it after validation.
|
|
166
|
+
- `akm task history` reads durable run history from `state.db`.
|
|
167
|
+
- Set `akm.enabled: false` and sync to disable a binding.
|
|
168
|
+
- Delete the `.yml` source and sync to remove its derived binding.
|
|
169
|
+
- Use `akm task sync --rebind` only when deliberately changing the captured
|
|
170
|
+
AKM runtime, then verify with `akm task doctor`.
|
|
171
|
+
|
|
172
|
+
Scheduler execution is at least once. Backends provide a stable invocation
|
|
173
|
+
identity and AKM fences stale attempts, but an ambiguous process crash can be
|
|
174
|
+
observed only after the external work has started. Make scheduled side effects
|
|
175
|
+
idempotent where possible.
|
|
176
|
+
|
|
177
|
+
## See also
|
|
178
|
+
|
|
179
|
+
- [CLI Reference: task](cli.md#task)
|
|
180
|
+
- [Scheduling guide](https://github.com/itlackey/akm/blob/main/docs/guides/scheduling.md)
|
|
181
|
+
- [Workflow source formats](workflow-schema.md)
|
|
182
|
+
- [Data and telemetry](data-and-telemetry.md)
|