akm-cli 0.9.30 → 0.9.31
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 +29 -0
- package/README.md +10 -10
- package/ROADMAP.md +112 -0
- package/dist/commands/improve/improve-cli.js +33 -12
- package/dist/core/file-lock.js +10 -1
- package/dist/llm/client.js +33 -3
- package/dist/scripts/akm-migrate-node.js +5 -1
- package/dist/scripts/akm-migrate.js +5 -1
- package/docs/README.md +42 -41
- package/docs/agents/README.md +15 -0
- package/docs/agents/agent-install.md +14 -0
- package/docs/architecture/README.md +67 -0
- package/docs/architecture/adapters.md +272 -0
- package/docs/architecture/akm-architecture-decision-history.md +2055 -0
- package/docs/architecture/akm-core-principles.md +126 -0
- package/docs/architecture/architecture.md +579 -0
- package/docs/architecture/comparisons/claude-code-vs-akm-workflows-full.md +550 -0
- package/docs/architecture/decisions/0001-no-interpolation-attached-structured-context.md +72 -0
- package/docs/architecture/decisions/0002-unit-reuse-and-input-hash-scope.md +142 -0
- package/docs/architecture/decisions/0003-child-env-allowlist-and-provenance.md +189 -0
- package/docs/architecture/decisions/0004-task-input-contract-and-flag-coercion.md +97 -0
- package/docs/architecture/decisions/0005-task-result-vocabulary-and-legacy-read-mapping.md +108 -0
- package/docs/architecture/decisions/0006-task-source-version-routing.md +124 -0
- package/docs/architecture/decisions/0007-workflow-composition-bounds.md +83 -0
- package/docs/architecture/decisions/0008-task-binding-normalization.md +88 -0
- package/docs/architecture/decisions/0009-child-run-publication-column-parity.md +80 -0
- package/docs/architecture/decisions/0010-driver-protocol-cut.md +36 -0
- package/docs/architecture/decisions/0011-engine-run-loop-invariants.md +125 -0
- package/docs/architecture/decisions/README.md +62 -0
- package/docs/architecture/improvement.md +440 -0
- package/docs/architecture/internals/classification.md +154 -0
- package/docs/architecture/internals/fresh-host-rebuild-runbook.md +40 -0
- package/docs/architecture/internals/functional-contract-patterns.md +340 -0
- package/docs/architecture/internals/health-advisories.md +110 -0
- package/docs/architecture/internals/improve-workflow.md +713 -0
- package/docs/architecture/internals/indexing.md +498 -0
- package/docs/architecture/internals/registry-network-boundary.md +57 -0
- package/docs/architecture/internals/search.md +249 -0
- package/docs/architecture/internals/storage-locations.md +943 -0
- package/docs/architecture/persisted-data-compat.md +59 -0
- package/docs/architecture/reviews/env-secret-access.md +319 -0
- package/docs/architecture/runtime-boundary-design.md +153 -0
- package/docs/architecture/specs/0.9.0-close-out-plan.md +361 -0
- package/docs/architecture/specs/0.9.0-decisions.md +528 -0
- package/docs/architecture/specs/0.9.0-docs-code-drift-register.md +745 -0
- package/docs/architecture/specs/0.9.0-open-items-register.md +135 -0
- package/docs/architecture/specs/0.9.0-public-api-issue-backlog.md +740 -0
- package/docs/architecture/specs/0.9.0-release-surface-review.md +636 -0
- package/docs/architecture/specs/agent-command-engine-model-design.md +513 -0
- package/docs/architecture/specs/akm-0.9.0-bundle-adapter-spec.md +501 -0
- package/docs/architecture/specs/akm-0.9.0-ref-grammar-decision.md +291 -0
- package/docs/architecture/specs/akm-format-neutral-bundle-workspace-spec.md +2059 -0
- package/docs/architecture/specs/di-seams-plan.md +539 -0
- package/docs/architecture/specs/driver-protocol-keep-or-cut.md +275 -0
- package/docs/architecture/specs/fact-asset-type.md +142 -0
- package/docs/architecture/specs/improve-collapse-churn-detector-design.md +634 -0
- package/docs/architecture/specs/okf-support.md +148 -0
- package/docs/architecture/specs/ref.md +329 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/README.md +72 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/findings-consolidated.md +152 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-alternatives.md +352 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-bunqueue.md +300 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/library-eval-openworkflow.md +402 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-1.md +758 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-2.md +645 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/opus-review-3.md +602 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-adversarial.md +27 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-architecture.md +27 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-coverage.md +74 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r1-security.md +15 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-adversarial.md +132 -0
- package/docs/architecture/specs/reviews/task-workflow-unification/panel-r2-verification.md +147 -0
- package/docs/architecture/specs/stash-conventions-code-spec.md +275 -0
- package/docs/architecture/specs/stash-organization-conventions.md +377 -0
- package/docs/architecture/specs/task-workflow-format-unification.md +721 -0
- package/docs/architecture/specs/workflow-engine-buy-vs-build.md +231 -0
- package/docs/architecture/specs/workflow-format-unification.md +437 -0
- package/docs/architecture/testing/manual-testing-checklist.md +3420 -0
- package/docs/architecture/testing/okf-v0.2-conformance-runbook.md +924 -0
- package/docs/architecture/testing/task-workflow-manual-tests.md +1817 -0
- package/docs/architecture/testing/testing-workflow.md +446 -0
- package/docs/architecture/workflow-engine.md +274 -0
- package/docs/guides/README.md +33 -0
- package/docs/guides/author-bundles.md +310 -0
- package/docs/guides/author-workflows.md +520 -0
- package/docs/guides/bundles.md +321 -0
- package/docs/guides/capture-knowledge.md +136 -0
- package/docs/guides/claude-code-vs-akm-workflows.md +30 -0
- package/docs/guides/concepts.md +93 -0
- package/docs/guides/discover-and-load.md +158 -0
- package/docs/guides/getting-started.md +240 -0
- package/docs/guides/improve-the-library.md +246 -0
- package/docs/guides/knowledge-management.md +18 -0
- package/docs/guides/recipes/headless-install.md +97 -0
- package/docs/guides/recipes/website-source.md +28 -0
- package/docs/guides/run-workflows.md +279 -0
- package/docs/guides/scheduling.md +123 -0
- package/docs/guides/use-with-any-agent.md +129 -0
- package/docs/guides/wikis.md +81 -0
- package/docs/maintainers/README.md +19 -0
- package/docs/maintainers/curate-workmap.md +336 -0
- package/docs/maintainers/eval.md +3 -0
- package/docs/maintainers/local-development.md +108 -0
- package/docs/maintainers/release-checklist.md +103 -0
- package/docs/migration/README.md +2 -2
- package/docs/migration/release-notes/0.0.13.md +1 -1
- package/docs/migration/release-notes/0.1.0.md +1 -1
- package/docs/migration/release-notes/0.2.0.md +1 -1
- package/docs/migration/release-notes/0.3.0.md +1 -1
- package/docs/migration/release-notes/0.5.0.md +1 -1
- package/docs/migration/release-notes/0.6.0.md +1 -1
- package/docs/migration/release-notes/0.7.0.md +1 -1
- package/docs/migration/release-notes/0.7.3.md +2 -2
- package/docs/migration/release-notes/0.7.4.md +1 -1
- package/docs/migration/release-notes/0.7.5.md +1 -1
- package/docs/migration/release-notes/0.8.0.md +1 -1
- package/docs/migration/release-notes/0.9.0.md +1 -1
- package/docs/migration/release-notes/0.9.14.md +1 -1
- package/docs/migration/release-notes/0.9.15.md +1 -1
- package/docs/migration/release-notes/0.9.16.md +1 -1
- package/docs/migration/release-notes/0.9.17.md +1 -1
- package/docs/migration/release-notes/0.9.19.md +1 -1
- package/docs/migration/release-notes/0.9.2.md +1 -1
- package/docs/migration/release-notes/README.md +27 -31
- package/docs/migration/v0.5-to-v0.6.md +759 -0
- package/docs/migration/v0.8-to-v0.9.md +1 -1
- package/docs/plans/0.9.2-agent-command-workflow-plan.md +423 -0
- package/docs/posts/README.md +30 -0
- package/docs/posts/akm-command-tour.md +495 -0
- package/docs/posts/akm-logo-sized.webp +0 -0
- package/docs/posts/belief-aware-memory-12.md +139 -0
- package/docs/posts/config-v2-lessons-16.md +191 -0
- package/docs/posts/improve-loop-autonomous-10.md +225 -0
- package/docs/posts/improve-pipeline-debugging-0803.md +179 -0
- package/docs/posts/intro-part-01.md +76 -0
- package/docs/posts/intro-part-02.md +221 -0
- package/docs/posts/intro-part-03.md +190 -0
- package/docs/posts/intro-part-04.md +221 -0
- package/docs/posts/llm-mode-reflect-13.md +166 -0
- package/docs/posts/openpalm-built-on-akm.md +86 -0
- package/docs/posts/progressive-disclosure-06.md +129 -0
- package/docs/posts/proposal-safety-net-15.md +112 -0
- package/docs/posts/release-0.5.0.md +247 -0
- package/docs/posts/release-0.6.0.md +117 -0
- package/docs/posts/release-0.7.0.md +159 -0
- package/docs/posts/release-0.8.0.md +332 -0
- package/docs/posts/scattered-skills-05.md +100 -0
- package/docs/posts/task-assets-persistent-workflows-11.md +222 -0
- package/docs/posts/team-skills-07.md +198 -0
- package/docs/posts/wiki-agent-knowledge-08.md +223 -0
- package/docs/posts/workflows-vaults-09.md +321 -0
- package/docs/product-surface.md +54 -0
- package/docs/reference/README.md +1 -2
- package/docs/reference/asset-types.md +168 -0
- package/docs/reference/cli.md +5 -6
- package/docs/reference/env-and-secrets.md +126 -0
- package/docs/reference/memory.md +124 -0
- package/docs/reference/refs.md +156 -0
- package/docs/reference/registry.md +489 -0
- package/docs/reference/website-sources.md +141 -0
- package/package.json +12 -15
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,35 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.9.31] - 2026-10-09
|
|
10
|
+
|
|
11
|
+
A patch release: concurrent config writes no longer lose a change, OpenAI's reasoning models work as `llm`
|
|
12
|
+
engines, `akm improve --require-engines` probes send API keys, and the npm package's docs links resolve.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **`akm improve --require-engines` sends each engine's API key with its probe.** The probe used the engine's
|
|
17
|
+
connection as resolved, where the key is still a symbolic reference that a dispatch reads only when it sends a
|
|
18
|
+
request, so every keyed endpoint (OpenAI, a gateway that enforces auth) answered 401 and the run stopped with
|
|
19
|
+
"engine completion path is not reachable". The probe now builds the connection as a dispatch does; a required key
|
|
20
|
+
that is missing is reported as that engine's failure.
|
|
21
|
+
- **OpenAI's reasoning models (gpt-5.x) work as `llm` engines.** They answer 400 to any `temperature` but the
|
|
22
|
+
default and to `max_tokens`, so every akm model call failed on them. Like the existing fallback for the
|
|
23
|
+
thinking-control fields, a 400 that names `temperature` is retried once without it, and one that asks for
|
|
24
|
+
`max_completion_tokens` is retried with the cap under that name; the connection keeps the working shape for
|
|
25
|
+
the rest of the process.
|
|
26
|
+
- **Every relative link in the npm package's docs resolves again.** #1118 made `docs/README.md`,
|
|
27
|
+
`docs/migration/README.md` and `docs/reference/cli.md` link by relative path to guides and pages the package did
|
|
28
|
+
not ship. npm always ships a folder's `README.md`, so those links were dead for npm users. The package now ships
|
|
29
|
+
the user-facing `docs/` folders (`agents`, `architecture`, `guides`, `integration`, `maintainers`, `migration`,
|
|
30
|
+
`posts`, `reference`), `docs/product-surface.md`, the one plan they link to, and `ROADMAP.md`. `docs/plans` stays
|
|
31
|
+
out. The link check skips link syntax inside code, which is an example, not a link.
|
|
32
|
+
- **Concurrent `akm config set` runs no longer lose each other's changes.** A lock file was created empty and its
|
|
33
|
+
owner's PID written a moment later; a process that looked in that gap read no PID, took the live lock for an
|
|
34
|
+
abandoned one and removed it, so two writers ran at once and one change was lost. A lock now appears with its
|
|
35
|
+
owner's PID already in it. Every akm lock file (config, index writer, scheduler, `akm.lock`, run, extract, secret)
|
|
36
|
+
is created this way.
|
|
37
|
+
|
|
9
38
|
## [0.9.30] - 2026-10-09
|
|
10
39
|
|
|
11
40
|
A patch release: `akm upgrade` acts only on the `akm-opencode` spec OpenCode's config names.
|
package/README.md
CHANGED
|
@@ -55,7 +55,7 @@ akm show scripts/deploy.sh # View details and run command
|
|
|
55
55
|
- **One library for every agent** -- Use the same capability library from Claude Code, OpenCode, Cursor, Aider, Windsurf, or any assistant that can run shell commands.
|
|
56
56
|
- **Load only what the task needs** -- Search or curate a shortlist, then load full content by ref. No giant startup prompt is required.
|
|
57
57
|
- **Package complete capabilities** -- Install and share bundles containing skills, scripts, workflows, agents, instructions, memories, and knowledge -- not just prompt snippets.
|
|
58
|
-
- **Improve through evidence, with review** -- Feedback
|
|
58
|
+
- **Improve through evidence, with review** -- Feedback re-ranks assets right away. A negative report can carry an exact text fix, and `akm improve` repairs metadata; every edit lands as a diffable proposal you accept, reject or revert, and only writable bundles are changed.
|
|
59
59
|
- **Turn knowledge into repeatable work** -- Run persisted workflows with dispatch, gates, retries, budgets, and resume instead of reconstructing a process from prose every session.
|
|
60
60
|
|
|
61
61
|
akm retrieves every supported capability type. It directly orchestrates
|
|
@@ -80,16 +80,16 @@ Or generate it directly: `akm help agents >> AGENTS.md`
|
|
|
80
80
|
|
|
81
81
|
## Documentation
|
|
82
82
|
|
|
83
|
-
Full docs, CLI reference, and guides are
|
|
83
|
+
Full docs, CLI reference, and guides are at **[akm.fwdslsh.dev](https://akm.fwdslsh.dev/)**:
|
|
84
84
|
|
|
85
|
-
- [Getting Started](https://
|
|
86
|
-
- [Supported Formats](https://
|
|
87
|
-
- [CLI Reference](https://
|
|
88
|
-
- [Task v3 Reference](https://
|
|
89
|
-
- [0.9.2 Migration Guide](https://
|
|
90
|
-
- [Configuration](https://
|
|
91
|
-
- [Bundle Authoring Guide](https://
|
|
92
|
-
- [Registry](https://
|
|
85
|
+
- [Getting Started](https://akm.fwdslsh.dev/docs/guides/getting-started/)
|
|
86
|
+
- [Supported Formats](https://akm.fwdslsh.dev/docs/reference/supported-formats/)
|
|
87
|
+
- [CLI Reference](https://akm.fwdslsh.dev/docs/reference/cli/)
|
|
88
|
+
- [Task v3 Reference](https://akm.fwdslsh.dev/docs/reference/tasks/)
|
|
89
|
+
- [0.9.2 Migration Guide](https://akm.fwdslsh.dev/docs/migration/v0.9.1-to-v0.9.2/)
|
|
90
|
+
- [Configuration](https://akm.fwdslsh.dev/docs/reference/configuration/)
|
|
91
|
+
- [Bundle Authoring Guide](https://akm.fwdslsh.dev/docs/guides/author-bundles/)
|
|
92
|
+
- [Registry](https://akm.fwdslsh.dev/docs/reference/registry/)
|
|
93
93
|
|
|
94
94
|
## License
|
|
95
95
|
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
This page outlines the high-level focus for the next two releases.
|
|
4
|
+
|
|
5
|
+
It is intentionally directional rather than exhaustive. Detailed command,
|
|
6
|
+
schema, and migration behavior still lives in the release notes, the
|
|
7
|
+
migration guides, and [STABILITY.md](STABILITY.md), which classifies
|
|
8
|
+
today's public contract by surface. The internal design specs behind the
|
|
9
|
+
0.9.0 architecture consolidation live under
|
|
10
|
+
[`docs/architecture/specs/`](docs/architecture/specs/).
|
|
11
|
+
|
|
12
|
+
## 0.8 Foundation
|
|
13
|
+
|
|
14
|
+
Release `0.8.0` already established much of the product shape that `0.9` and
|
|
15
|
+
`1.0` build on.
|
|
16
|
+
|
|
17
|
+
- The CLI and config surface were substantially redesigned.
|
|
18
|
+
- `akm improve` became the main self-improvement and maintenance entry point.
|
|
19
|
+
- Task assets, proposal workflows, health reporting, and agent command-building
|
|
20
|
+
all landed as first-class capabilities.
|
|
21
|
+
- Storage, indexing, graph extraction, and migration paths were tightened to
|
|
22
|
+
support the v1 contract freeze.
|
|
23
|
+
|
|
24
|
+
That means the next two releases are less about inventing a new direction and
|
|
25
|
+
more about hardening, simplifying, and freezing what `0.8.0` put in place.
|
|
26
|
+
|
|
27
|
+
## 0.9
|
|
28
|
+
|
|
29
|
+
Release `0.9` is the architecture-consolidation release ahead of the `1.0`
|
|
30
|
+
contract freeze. It replaces the flat asset-type registry with a
|
|
31
|
+
**bundle / adapter** model and settles the durable contracts `1.0` will freeze.
|
|
32
|
+
|
|
33
|
+
- **One canonical ref grammar.** Refs are `[bundle//]conceptId` — a
|
|
34
|
+
subdir-qualified concept id such as `skills/code-review` or `memories/vpn-note`
|
|
35
|
+
— replacing the pre-`0.9` `type:name` spelling. Durable state stores the
|
|
36
|
+
fully-qualified form; the short bundle-omitted form is input sugar. This is a
|
|
37
|
+
deliberate, one-time break, taken pre-`1.0` while it is still cheap.
|
|
38
|
+
- **Format-neutral bundles.** Installed sources are bundles, each recognized by
|
|
39
|
+
a built-in adapter (Agent Skills, Claude/OpenCode commands and agents,
|
|
40
|
+
knowledge, YAML workflows, tasks, env/secret files, scripts, OKF and LLM-wiki
|
|
41
|
+
knowledge bases) instead of a closed asset-type list.
|
|
42
|
+
- **Storage consolidation.** The durable databases collapse from four to three
|
|
43
|
+
(`state.db` / `index.db` / a separate `logs.db`); config migrates from the
|
|
44
|
+
flat `stashDir` / `sources` / `installed` keys to `bundles` / `defaultBundle`.
|
|
45
|
+
The one-time cutover is journaled and crash-resumable via `akm migrate apply`,
|
|
46
|
+
with a verified backup taken first.
|
|
47
|
+
- **Debt paydown.** The improve / proposal / workflow internals are decomposed
|
|
48
|
+
onto one file-change transaction model and an ambient run context, the
|
|
49
|
+
deprecated `0.8` CLI aliases are removed, and the `vault` asset type is
|
|
50
|
+
retired in favor of `env` / `secret`.
|
|
51
|
+
|
|
52
|
+
In short: `0.9` reduces ambiguity, pays down pre-`1.0` debt, and arrives at a
|
|
53
|
+
small, durable core ready for the `1.0` freeze.
|
|
54
|
+
|
|
55
|
+
### The 0.9.x series
|
|
56
|
+
|
|
57
|
+
`0.9.x` is a series of refactoring and clean-up releases. The intent is to
|
|
58
|
+
have **all technical debt paid off and all planned breaking changes handled
|
|
59
|
+
before the 0.10.x series begins**. To get there quickly, 0.9.x patch releases
|
|
60
|
+
may include breaking changes (see [STABILITY.md](STABILITY.md)); every
|
|
61
|
+
break ships with a CHANGELOG migration note.
|
|
62
|
+
|
|
63
|
+
Alongside the bug fixes and compatibility improvements, `0.9.x` also focuses
|
|
64
|
+
on **tuning the improve processes** — reflect, distill, consolidate, memory
|
|
65
|
+
inference, graph extraction, and proactive maintenance — and **settling the
|
|
66
|
+
final design of those features** so the `0.10.0` release starts from a
|
|
67
|
+
finished improve surface rather than one still being reshaped.
|
|
68
|
+
|
|
69
|
+
## 0.10
|
|
70
|
+
|
|
71
|
+
The `0.10.x` series is focused on **bug fixes and tuning** on top of the
|
|
72
|
+
debt-free 0.9 core — no new architecture. With the clean-up done, 0.10.x
|
|
73
|
+
attempts to return to the normal semver discipline: breaking changes only in
|
|
74
|
+
major and minor releases, never in patches.
|
|
75
|
+
|
|
76
|
+
## 0.X
|
|
77
|
+
|
|
78
|
+
There may be other minor releases between 0.10.x and 1.0.0. The goal is to minimize the number of minor releases after 0.10.x, and they will only be used for addressing breaking changes that are justifiable before the 1.0.0 release.
|
|
79
|
+
|
|
80
|
+
## 1.0
|
|
81
|
+
|
|
82
|
+
Release `1.0` is focused on freezing the public contract and shipping the first
|
|
83
|
+
stable ecosystem layer around that core.
|
|
84
|
+
|
|
85
|
+
- Freeze the supported source model, the `[bundle//]conceptId` ref format,
|
|
86
|
+
search behavior, and write-target rules — the surfaces
|
|
87
|
+
[STABILITY.md](STABILITY.md)'s own 1.0 contract-freeze section
|
|
88
|
+
already names — and settle the surfaces it currently classifies as
|
|
89
|
+
Evolving or Experimental.
|
|
90
|
+
- Carry the `0.8` agent and improvement workflow forward as a stable,
|
|
91
|
+
documented product surface rather than a collection of pre-release features.
|
|
92
|
+
- Ship an official akm SDK for building integrations against the stable v1
|
|
93
|
+
contract instead of reverse-engineering CLI behavior.
|
|
94
|
+
- Ship in-process akm plugins for Claude Code and OpenCode, built on that SDK,
|
|
95
|
+
so those tools can integrate more deeply without changing the CLI-first core
|
|
96
|
+
model that akm itself relies on.
|
|
97
|
+
- Keep the CLI as the canonical foundation so the SDK and plugin story extends
|
|
98
|
+
the existing system rather than forking it into separate integration models.
|
|
99
|
+
|
|
100
|
+
In short: `1.0` is where akm stops being only a strong CLI and becomes a stable
|
|
101
|
+
platform for both direct use and deeper tool integration.
|
|
102
|
+
|
|
103
|
+
## Scope Notes
|
|
104
|
+
|
|
105
|
+
- The CLI remains the foundation in both releases.
|
|
106
|
+
- `0.9` prioritizes hardening over expansion.
|
|
107
|
+
- `1.0` adds the SDK and in-process plugin story on top of a frozen core, not
|
|
108
|
+
instead of it.
|
|
109
|
+
- The roadmap assumes the `0.8.0` redesign is the baseline; later releases are
|
|
110
|
+
about stabilizing and extending that baseline, not replacing it.
|
|
111
|
+
- Specific features may move between releases as implementation and testing
|
|
112
|
+
shake out, but the themes above are the intended direction.
|
|
@@ -16,7 +16,8 @@ import { clearLogFile, setLogFile, warn } from "../../core/warn.js";
|
|
|
16
16
|
import { resolveWriteTarget } from "../../core/write-source.js";
|
|
17
17
|
import { DEFAULT_LLM_TIMEOUT_MS } from "../../integrations/agent/config.js";
|
|
18
18
|
import { defaultWhich } from "../../integrations/agent/detect.js";
|
|
19
|
-
import { collectEngineCredentialValues } from "../../integrations/agent/engine-resolution.js";
|
|
19
|
+
import { collectEngineCredentialValues, materializeLlmConnection, } from "../../integrations/agent/engine-resolution.js";
|
|
20
|
+
import { llmUseFromRunner, sdkFallbackUseFromRunner } from "../../integrations/agent/runner.js";
|
|
20
21
|
import { probeLlmReachable } from "../../llm/client.js";
|
|
21
22
|
import { getOutputMode } from "../../output/context.js";
|
|
22
23
|
import { deliverRendered } from "../../output/html-render.js";
|
|
@@ -81,18 +82,36 @@ function collectRequiredEngineTargets(plan) {
|
|
|
81
82
|
const runners = Object.entries(plan.processes)
|
|
82
83
|
.flatMap(([processName, process]) => (process.runner ? [[processName, process.runner]] : []))
|
|
83
84
|
.concat(plan.triageJudgment ? [["triage.judgment", plan.triageJudgment]] : []);
|
|
84
|
-
return runners.map(([processName, runner]) =>
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
return runners.map(([processName, runner]) => {
|
|
86
|
+
// The runner's own timeout, else the connection's (sdkFallbackUseFromRunner already does this).
|
|
87
|
+
const use = runner.kind === "llm"
|
|
88
|
+
? {
|
|
89
|
+
...llmUseFromRunner(runner),
|
|
90
|
+
timeoutMs: runner.timeoutMs !== undefined ? runner.timeoutMs : (runner.connection.timeoutMs ?? null),
|
|
91
|
+
}
|
|
92
|
+
: runner.kind === "sdk"
|
|
93
|
+
? sdkFallbackUseFromRunner(runner)
|
|
94
|
+
: undefined;
|
|
95
|
+
return {
|
|
96
|
+
process: processName,
|
|
97
|
+
engine: runner.engine,
|
|
98
|
+
...(runner.kind === "llm" ? {} : { bin: runner.profile.bin }),
|
|
99
|
+
...(use ? probeConnection(use) : {}),
|
|
100
|
+
};
|
|
101
|
+
});
|
|
92
102
|
}
|
|
93
|
-
/**
|
|
94
|
-
|
|
95
|
-
|
|
103
|
+
/**
|
|
104
|
+
* The connection the probe sends, built as a dispatch builds it: the runner
|
|
105
|
+
* keeps its credential symbolic, so the key is read and injected here, or the
|
|
106
|
+
* probe would go out without one.
|
|
107
|
+
*/
|
|
108
|
+
function probeConnection(use) {
|
|
109
|
+
try {
|
|
110
|
+
return { connection: materializeLlmConnection(use) };
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
return { connection: use.connection, error: err instanceof Error ? err.message : String(err) };
|
|
114
|
+
}
|
|
96
115
|
}
|
|
97
116
|
/**
|
|
98
117
|
* The bound on `--require-engines`' probe: the connection's own request
|
|
@@ -133,6 +152,8 @@ export async function assertRequiredEnginesReachable(plan, probeReachable = (con
|
|
|
133
152
|
}
|
|
134
153
|
if (!target.connection)
|
|
135
154
|
return { ...target, reach: { reachable: true }, latencyMs: 0 };
|
|
155
|
+
if (target.error)
|
|
156
|
+
return { ...target, reach: { reachable: false, error: target.error }, latencyMs: 0 };
|
|
136
157
|
return { ...target, ...(await probeConnectionOnce(target.connection)) };
|
|
137
158
|
}));
|
|
138
159
|
const unreachable = probed.filter((item) => !item.reach.reachable);
|
package/dist/core/file-lock.js
CHANGED
|
@@ -51,14 +51,23 @@ function releaseLockRaw(lockPath) {
|
|
|
51
51
|
}
|
|
52
52
|
/** Create the lock file atomically; `undefined` when another holder already has it. */
|
|
53
53
|
export function tryAcquireLockSync(lockPath, payload) {
|
|
54
|
+
// Write the payload under a private name, then hard-link it into place: the
|
|
55
|
+
// link is the exclusive step and the lock never exists without its payload.
|
|
56
|
+
// A `wx` write creates the file empty and fills it in afterwards; a contender
|
|
57
|
+
// probing in that gap reads no pid, calls the live lock stale and reclaims it.
|
|
58
|
+
const tmpPath = `${lockPath}.tmp-${process.pid}-${randomUUID()}`;
|
|
59
|
+
fs.writeFileSync(tmpPath, payload, { flag: "wx" });
|
|
54
60
|
try {
|
|
55
|
-
fs.
|
|
61
|
+
fs.linkSync(tmpPath, lockPath);
|
|
56
62
|
}
|
|
57
63
|
catch (err) {
|
|
58
64
|
if (err.code === "EEXIST")
|
|
59
65
|
return undefined;
|
|
60
66
|
throw err;
|
|
61
67
|
}
|
|
68
|
+
finally {
|
|
69
|
+
releaseLockRaw(tmpPath);
|
|
70
|
+
}
|
|
62
71
|
let snapshot;
|
|
63
72
|
try {
|
|
64
73
|
snapshot = readLockSnapshot(lockPath);
|
package/dist/llm/client.js
CHANGED
|
@@ -227,6 +227,12 @@ const jsonSchemaUnsupportedConnections = new Set();
|
|
|
227
227
|
* `enable_thinking`): a strict hosted API answers 400 `Unknown parameter`.
|
|
228
228
|
*/
|
|
229
229
|
const thinkingControlRejectedConnections = new Set();
|
|
230
|
+
/**
|
|
231
|
+
* And for OpenAI's reasoning models: they answer 400 to any `temperature` but
|
|
232
|
+
* the default, and to `max_tokens`, naming `max_completion_tokens` instead.
|
|
233
|
+
*/
|
|
234
|
+
const temperatureRejectedConnections = new Set();
|
|
235
|
+
const maxCompletionTokensConnections = new Set();
|
|
230
236
|
function connectionKey(config) {
|
|
231
237
|
return `${config.endpoint}|${config.model}`;
|
|
232
238
|
}
|
|
@@ -234,6 +240,8 @@ function connectionKey(config) {
|
|
|
234
240
|
export function _resetEndpointSupportTrackersForTests() {
|
|
235
241
|
jsonSchemaUnsupportedConnections.clear();
|
|
236
242
|
thinkingControlRejectedConnections.clear();
|
|
243
|
+
temperatureRejectedConnections.clear();
|
|
244
|
+
maxCompletionTokensConnections.clear();
|
|
237
245
|
}
|
|
238
246
|
/**
|
|
239
247
|
* Whether this connection has already been proven, this process, not to
|
|
@@ -263,6 +271,10 @@ function isRejectedRequest(err) {
|
|
|
263
271
|
}
|
|
264
272
|
/** A strict API names the field it does not know: `Unknown parameter: 'chat_template_kwargs'.` */
|
|
265
273
|
const THINKING_FIELD_NAMED = /chat_template_kwargs|enable_thinking/;
|
|
274
|
+
/** `Unsupported value: 'temperature' does not support 0 with this model. Only the default (1) value is supported.` */
|
|
275
|
+
const TEMPERATURE_NAMED = /'temperature'/;
|
|
276
|
+
/** `Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.` */
|
|
277
|
+
const MAX_TOKENS_REPLACED = /max_completion_tokens/;
|
|
266
278
|
/**
|
|
267
279
|
* A single chat-completion attempt: one HTTP request/response cycle, with an
|
|
268
280
|
* inline fallback-once when a schema was requested and the provider 4xx's
|
|
@@ -275,7 +287,10 @@ const THINKING_FIELD_NAMED = /chat_template_kwargs|enable_thinking/;
|
|
|
275
287
|
*
|
|
276
288
|
* The thinking-control fields get the same treatment (#1045): a 4xx that
|
|
277
289
|
* names `chat_template_kwargs` or `enable_thinking` is answered by one retry
|
|
278
|
-
* without them, which may in turn fall back without the schema.
|
|
290
|
+
* without them, which may in turn fall back without the schema. A 4xx that
|
|
291
|
+
* names `temperature`, or asks for `max_completion_tokens`, is answered the
|
|
292
|
+
* same way: the connection stops sending `temperature`, or sends the token cap
|
|
293
|
+
* as `max_completion_tokens`, for the rest of the process.
|
|
279
294
|
*/
|
|
280
295
|
async function chatCompletionAttempt(config, messages, options, timeoutMs, includeThinking = (options?.enableThinking ?? config.enableThinking) !== undefined &&
|
|
281
296
|
!isThinkingControlKnownRejected(config)) {
|
|
@@ -286,6 +301,17 @@ async function chatCompletionAttempt(config, messages, options, timeoutMs, inclu
|
|
|
286
301
|
catch (err) {
|
|
287
302
|
if (!isRejectedRequest(err))
|
|
288
303
|
throw err;
|
|
304
|
+
const key = connectionKey(config);
|
|
305
|
+
if (TEMPERATURE_NAMED.test(err.message) && !temperatureRejectedConnections.has(key)) {
|
|
306
|
+
warnVerbose(`[akm] LLM rejected temperature (${err.statusCode}); retrying once without it: ${err.message}`);
|
|
307
|
+
temperatureRejectedConnections.add(key);
|
|
308
|
+
return chatCompletionAttempt(config, messages, options, timeoutMs, includeThinking);
|
|
309
|
+
}
|
|
310
|
+
if (MAX_TOKENS_REPLACED.test(err.message) && !maxCompletionTokensConnections.has(key)) {
|
|
311
|
+
warnVerbose(`[akm] LLM rejected max_tokens (${err.statusCode}); retrying once with max_completion_tokens: ${err.message}`);
|
|
312
|
+
maxCompletionTokensConnections.add(key);
|
|
313
|
+
return chatCompletionAttempt(config, messages, options, timeoutMs, includeThinking);
|
|
314
|
+
}
|
|
289
315
|
if (includeThinking && THINKING_FIELD_NAMED.test(err.message)) {
|
|
290
316
|
warnVerbose(`[akm] LLM rejected chat_template_kwargs/enable_thinking (${err.statusCode}); retrying once without them: ${err.message}`);
|
|
291
317
|
const fallback = await chatCompletionAttempt(config, messages, options, timeoutMs, false);
|
|
@@ -344,11 +370,15 @@ async function chatCompletionAttemptOnce(config, messages, options, timeoutMs, i
|
|
|
344
370
|
? {}
|
|
345
371
|
: { chat_template_kwargs: { enable_thinking: resolvedEnableThinking }, enable_thinking: resolvedEnableThinking };
|
|
346
372
|
const reasoningEffortParams = config.reasoningEffort === undefined ? {} : { reasoning_effort: config.reasoningEffort };
|
|
373
|
+
const key = connectionKey(config);
|
|
374
|
+
const maxTokensField = maxCompletionTokensConnections.has(key) ? "max_completion_tokens" : "max_tokens";
|
|
347
375
|
const requestBody = JSON.stringify({
|
|
348
376
|
model: config.model,
|
|
349
377
|
messages,
|
|
350
|
-
|
|
351
|
-
|
|
378
|
+
...(temperatureRejectedConnections.has(key)
|
|
379
|
+
? {}
|
|
380
|
+
: { temperature: options?.temperature ?? config.temperature ?? 0.3 }),
|
|
381
|
+
...(resolvedMaxTokens !== undefined ? { [maxTokensField]: resolvedMaxTokens } : {}),
|
|
352
382
|
...config.extraParams,
|
|
353
383
|
...responseFormat,
|
|
354
384
|
...thinkingParams,
|
|
@@ -36842,12 +36842,16 @@ function releaseLockRaw(lockPath) {
|
|
|
36842
36842
|
} catch {}
|
|
36843
36843
|
}
|
|
36844
36844
|
function tryAcquireLockSync(lockPath, payload) {
|
|
36845
|
+
const tmpPath = `${lockPath}.tmp-${process.pid}-${randomUUID()}`;
|
|
36846
|
+
fs7.writeFileSync(tmpPath, payload, { flag: "wx" });
|
|
36845
36847
|
try {
|
|
36846
|
-
fs7.
|
|
36848
|
+
fs7.linkSync(tmpPath, lockPath);
|
|
36847
36849
|
} catch (err) {
|
|
36848
36850
|
if (err.code === "EEXIST")
|
|
36849
36851
|
return;
|
|
36850
36852
|
throw err;
|
|
36853
|
+
} finally {
|
|
36854
|
+
releaseLockRaw(tmpPath);
|
|
36851
36855
|
}
|
|
36852
36856
|
let snapshot;
|
|
36853
36857
|
try {
|
|
@@ -36170,12 +36170,16 @@ function releaseLockRaw(lockPath) {
|
|
|
36170
36170
|
} catch {}
|
|
36171
36171
|
}
|
|
36172
36172
|
function tryAcquireLockSync(lockPath, payload) {
|
|
36173
|
+
const tmpPath = `${lockPath}.tmp-${process.pid}-${randomUUID()}`;
|
|
36174
|
+
fs7.writeFileSync(tmpPath, payload, { flag: "wx" });
|
|
36173
36175
|
try {
|
|
36174
|
-
fs7.
|
|
36176
|
+
fs7.linkSync(tmpPath, lockPath);
|
|
36175
36177
|
} catch (err) {
|
|
36176
36178
|
if (err.code === "EEXIST")
|
|
36177
36179
|
return;
|
|
36178
36180
|
throw err;
|
|
36181
|
+
} finally {
|
|
36182
|
+
releaseLockRaw(tmpPath);
|
|
36179
36183
|
}
|
|
36180
36184
|
let snapshot;
|
|
36181
36185
|
try {
|
package/docs/README.md
CHANGED
|
@@ -6,16 +6,17 @@ start here, then follow links out to the guides, reference, and architecture
|
|
|
6
6
|
pages as you need more depth. Each subdirectory also has its own README
|
|
7
7
|
indexing everything inside it.
|
|
8
8
|
|
|
9
|
-
Full per-directory indexes: [Guides](
|
|
10
|
-
[Reference](reference/README.md), [Agents](
|
|
11
|
-
[Architecture](
|
|
9
|
+
Full per-directory indexes: [Guides](guides/README.md),
|
|
10
|
+
[Reference](reference/README.md), [Agents](agents/README.md),
|
|
11
|
+
[Architecture](architecture/README.md), [Maintainers](maintainers/README.md),
|
|
12
|
+
[Migration](migration/README.md), [Posts](posts/README.md).
|
|
12
13
|
|
|
13
14
|
## Start
|
|
14
15
|
|
|
15
|
-
- [Product Surface](
|
|
16
|
-
- [Getting Started](
|
|
17
|
-
- [Concepts](
|
|
18
|
-
- [Agent Install Guide](
|
|
16
|
+
- [Product Surface](product-surface.md) -- Every feature and its status
|
|
17
|
+
- [Getting Started](guides/getting-started.md) -- Install akm, connect a source, and pull a curated shortlist in five to seven minutes
|
|
18
|
+
- [Concepts](guides/concepts.md) -- Capabilities, bundles, adapters, asset types, and refs -- the mental model in one page
|
|
19
|
+
- [Agent Install Guide](agents/agent-install.md) -- Step-by-step automated (non-interactive) install for agents
|
|
19
20
|
- `akm help agents` (short guide by default; `akm help agents --full` for the complete guide) -- The CLI reference agents load to use akm; always the embedded corpus at `src/assets/hints/cli-hints-{full,short}.md`
|
|
20
21
|
|
|
21
22
|
## Use
|
|
@@ -23,34 +24,34 @@ Full per-directory indexes: [Guides](https://github.com/itlackey/akm/blob/main/d
|
|
|
23
24
|
One library for every agent: connect what you already have, load only what
|
|
24
25
|
the task needs, and capture what you learn along the way.
|
|
25
26
|
|
|
26
|
-
- [Use AKM With Any Agent](
|
|
27
|
-
- [Discover and Load](
|
|
28
|
-
- [Bundles](
|
|
29
|
-
- [Capture Knowledge](
|
|
30
|
-
- [Wikis](
|
|
31
|
-
- [Environment & Secrets](
|
|
32
|
-
- [Run Workflows](
|
|
33
|
-
- [Scheduling](
|
|
27
|
+
- [Use AKM With Any Agent](guides/use-with-any-agent.md) -- Wire akm into Claude Code, OpenCode, Cursor, and other coding assistants with a three-line system prompt block
|
|
28
|
+
- [Discover and Load](guides/discover-and-load.md) -- Search, curate a shortlist, and load exactly the ref a task needs
|
|
29
|
+
- [Bundles](guides/bundles.md) -- Connect local dirs, git repos, npm packages, and websites; browse the registry
|
|
30
|
+
- [Capture Knowledge](guides/capture-knowledge.md) -- `akm remember`, `akm import`, and how captured material becomes available to every agent
|
|
31
|
+
- [Wikis](guides/wikis.md) -- Multi-wiki knowledge bases (Karpathy-style)
|
|
32
|
+
- [Environment & Secrets](reference/env-and-secrets.md) -- `akm env` and `akm secret`: exact operations, file modes, and the security guarantee
|
|
33
|
+
- [Run Workflows](guides/run-workflows.md) -- Start or continue a run, check on it, resume it, or abandon it
|
|
34
|
+
- [Scheduling](guides/scheduling.md) -- Run akm tasks through the OS scheduler (cron / launchd / schtasks) safely
|
|
34
35
|
- [Migrate to 0.9.2](migration/v0.9.1-to-v0.9.2.md) -- Convert task-v2 sources safely and understand workflow resume compatibility
|
|
35
|
-
- [Improve the Library](
|
|
36
|
-
- Recipes: [Turn a Website into a Searchable Bundle](
|
|
36
|
+
- [Improve the Library](guides/improve-the-library.md) -- Feedback, history, and proposals -- how evidence turns into reviewable changes
|
|
37
|
+
- Recipes: [Turn a Website into a Searchable Bundle](guides/recipes/website-source.md), [Headless Install](guides/recipes/headless-install.md)
|
|
37
38
|
|
|
38
39
|
## Build and operate
|
|
39
40
|
|
|
40
41
|
Package complete capabilities and turn knowledge into repeatable work.
|
|
41
42
|
|
|
42
|
-
- [Bundle Author's Guide](
|
|
43
|
-
- [Author's Guide: Writing Workflows](
|
|
44
|
-
- [Claude Code workflows vs. akm workflows](
|
|
43
|
+
- [Bundle Author's Guide](guides/author-bundles.md) -- Build a bundle, make it discoverable, and share it so others can install it with `akm bundle add`
|
|
44
|
+
- [Author's Guide: Writing Workflows](guides/author-workflows.md) -- Write and test a workflow definition, from a minimal example to gates and outputs
|
|
45
|
+
- [Claude Code workflows vs. akm workflows](guides/claude-code-vs-akm-workflows.md) -- Short decision guide for choosing between a session-native workflow and an akm workflow ([full technical comparison](architecture/comparisons/claude-code-vs-akm-workflows-full.md))
|
|
45
46
|
- [Bundling akm](integration/bundling-akm.md) -- Ship akm inside your own product: the pin/migrate/health boot contract, plan JSON shapes, and exit codes for bundlers
|
|
46
47
|
|
|
47
48
|
### Maintainers
|
|
48
49
|
|
|
49
50
|
Working on akm itself, not just using it.
|
|
50
51
|
|
|
51
|
-
- [Maintainer Docs](
|
|
52
|
-
- [Local Development](
|
|
53
|
-
- [Curate Workmap](
|
|
52
|
+
- [Maintainer Docs](maintainers/README.md) -- Start here: local development, measuring improvement, and the curate contract
|
|
53
|
+
- [Local Development](maintainers/local-development.md) -- Dogfooding akm while editing its own source
|
|
54
|
+
- [Curate Workmap](maintainers/curate-workmap.md) -- The current `akm curate` contract and the highest-value next fixes
|
|
54
55
|
|
|
55
56
|
## Look up details
|
|
56
57
|
|
|
@@ -58,24 +59,24 @@ Working on akm itself, not just using it.
|
|
|
58
59
|
- [Configuration](reference/configuration.md) -- Engines, strategies, bundles, and settings
|
|
59
60
|
- [Supported Formats](reference/supported-formats.md) -- Every bundle format akm recognizes, its detection marker, and current read/write support
|
|
60
61
|
- [Tasks](reference/tasks.md) -- Task-v3 files, targets, triggers, and fail-closed migration
|
|
61
|
-
- [Asset Types](
|
|
62
|
-
- [Refs](
|
|
63
|
-
- [Memory](
|
|
62
|
+
- [Asset Types](reference/asset-types.md) -- The capability taxonomy, directory conventions, and per-type examples
|
|
63
|
+
- [Refs](reference/refs.md) -- The ref grammar `akm search` emits and `akm show` consumes
|
|
64
|
+
- [Memory](reference/memory.md) -- The `memory` asset type: capture, belief states, and derived memories
|
|
64
65
|
- [Workflow Schema](reference/workflow-schema.md) -- Authoritative frontmatter/body syntax for a workflow asset
|
|
65
66
|
- [Workflows (overview)](reference/workflows.md) -- Short map across the workflow schema, engine, and how-to guides
|
|
66
|
-
- [Registry](
|
|
67
|
-
- [Website Sources](
|
|
67
|
+
- [Registry](reference/registry.md) -- Registries, search, hosting, and managing sources
|
|
68
|
+
- [Website Sources](reference/website-sources.md) -- The pluggable fetcher API for URL-based knowledge reads
|
|
68
69
|
- [Data & Telemetry](reference/data-and-telemetry.md) -- Exactly what akm reads and writes on your machine (no remote telemetry)
|
|
69
|
-
- [Architecture](
|
|
70
|
-
- [Core Principles](
|
|
71
|
-
- [Adapters](
|
|
72
|
-
- [The Workflow Engine](
|
|
73
|
-
- [The Improvement Loop](
|
|
74
|
-
- [Runtime Boundary Design](
|
|
75
|
-
- [Architecture Decision History](
|
|
76
|
-
- [Specs](
|
|
77
|
-
- [Internals](
|
|
78
|
-
- [Testing](
|
|
70
|
+
- [Architecture Overview](architecture/architecture.md) -- How akm's bundles, cache, index, and registries fit together
|
|
71
|
+
- [Core Principles](architecture/akm-core-principles.md) -- Design principles and constraints
|
|
72
|
+
- [Adapters](architecture/adapters.md) -- How akm picks an adapter, indexes, validates, and writes into a bundle
|
|
73
|
+
- [The Workflow Engine](architecture/workflow-engine.md) -- How a frozen plan is stored, dispatched, and resumed without replaying completed units
|
|
74
|
+
- [The Improvement Loop](architecture/improvement.md) -- How a feedback signal becomes a ranking change, and how evidence becomes a proposal
|
|
75
|
+
- [Runtime Boundary Design](architecture/runtime-boundary-design.md) -- Isolating `bun:sqlite`/`Bun.*` from the core
|
|
76
|
+
- [Architecture Decision History](architecture/akm-architecture-decision-history.md) -- ADR-style record of the major architecture rulings
|
|
77
|
+
- [Specs](architecture/README.md#specs-specs) -- Normative specifications (bundle/adapter model, ref grammar, bundle conventions)
|
|
78
|
+
- [Internals](architecture/README.md#internals-internals) -- Current-truth subsystem references (storage, search, indexing, improve, health)
|
|
79
|
+
- [Testing](architecture/README.md#testing-testing) -- Testing workflow and pre-release checklist
|
|
79
80
|
- [Migration](migration/README.md) -- Upgrade guides and per-release migration notes
|
|
80
81
|
- [Roadmap](https://github.com/itlackey/akm/blob/main/ROADMAP.md) -- High-level focus for the releases from here through 1.0
|
|
81
82
|
|
|
@@ -85,14 +86,14 @@ AKM retrieves every supported capability type. It directly orchestrates
|
|
|
85
86
|
defined execution surfaces such as workflows, agent dispatch, tasks, and
|
|
86
87
|
guarded subprocess injection. It does not blindly execute arbitrary indexed
|
|
87
88
|
content merely because that content appears in search results. See
|
|
88
|
-
[Core Principles](
|
|
89
|
-
and [The Improvement Loop](
|
|
89
|
+
[Core Principles](architecture/akm-core-principles.md) for the full boundary,
|
|
90
|
+
and [The Improvement Loop](architecture/improvement.md) for how that boundary
|
|
90
91
|
applies to akm's own self-generated changes.
|
|
91
92
|
|
|
92
93
|
## Posts
|
|
93
94
|
|
|
94
95
|
Source articles for the dev.to publishing pipeline (historical record). See
|
|
95
|
-
[
|
|
96
|
+
[posts index](posts/README.md).
|
|
96
97
|
|
|
97
98
|
## Official Ecosystem Repositories
|
|
98
99
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Agents
|
|
2
|
+
|
|
3
|
+
Documentation for wiring AI agents into akm.
|
|
4
|
+
|
|
5
|
+
Run `akm hints` for the complete CLI reference agents should load into a
|
|
6
|
+
system prompt, or `akm help agents` for the compact guide.
|
|
7
|
+
(the short form is the default; pass `--full` for the complete guide). It always prints the embedded
|
|
8
|
+
corpus at `src/assets/hints/cli-hints-full.md` / `cli-hints-short.md` --
|
|
9
|
+
browse those files directly if you want to read the reference without running
|
|
10
|
+
the CLI. There used to be a separate `docs/agents/AGENTS.md` /
|
|
11
|
+
`AGENTS.full.md` pair here; it fed nothing at runtime after R-006 and kept
|
|
12
|
+
re-diverging from the embedded copy with no test to catch it, so it was
|
|
13
|
+
deleted and its still-true unique content was merged into the embedded files.
|
|
14
|
+
|
|
15
|
+
- [Agent Install Guide](agent-install.md) -- Short redirect covering the install shape (binary, `akm setup --yes`, a source, an index, `akm help agents`); for the exact no-prompts command sequence, see the [headless install recipe](../guides/recipes/headless-install.md)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Agent Install Guide
|
|
2
|
+
|
|
3
|
+
`akm` is a portable capability library agents install and configure without
|
|
4
|
+
interactive prompts: install the binary, run `akm setup --yes`, add a source,
|
|
5
|
+
build the index, then expose `akm help agents` output to the agent so it
|
|
6
|
+
knows how to search and load bundle content. Configuration lives in
|
|
7
|
+
top-level keys validated against the config schema, and semantic search can
|
|
8
|
+
run on local embeddings or a remote endpoint depending on what the host
|
|
9
|
+
supports.
|
|
10
|
+
|
|
11
|
+
For the exact command sequence — install, setup, semantic-search
|
|
12
|
+
configuration, adding sources, indexing, verification, and installing agent
|
|
13
|
+
guidance into `AGENTS.md` — see the
|
|
14
|
+
[headless install recipe](../guides/recipes/headless-install.md).
|