Observed since 20 Oct, 21:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Keep agents at capability parity across harnesses (creds, E2E tooling) from one manifest
Keep agents at parity across harnesses. A capability that exists on a
machine — an AD service-account credential, a Playwright browser, a web-search
backend — should be uniformly discoverable and invocable by an agent
regardless of which harness it runs in (Claude Code, opencode, cron, …). Today
it isn't: the same box can have working Chromium browsers that opencode can't
reach (because its Playwright MCP dies on an npx fetch) while Claude Code never
exposes them at all. That asymmetry — capability present, access uneven — is
what this tool closes.
acb is a small deterministic CLI driven by one declarative manifest of the
capabilities an estate's agents should have. From that single source it does two
things:
acb doctor) — diff every harness against the manifest and say,
per capability, whether it is present-and-working, present-but-broken, absent,
or not-applicable. This is discoverability and the parity report. Read-only.acb reconcile, acb exec) — render the correct
per-harness wiring from the manifest so two configs can't drift by hand, and
inject the capability (credentials, a browser endpoint) into a child process at
runtime. Acting; gated, dry-run by default, provenance-emitting.Two real pains, one shape:
.env files — better than plaintext, but still
hand-placed per harness, and a secret in a transcript is a leaked secret.Both are the same problem: a capability the host can provide, that agents can't
find or use the same way across harnesses. acb makes the desired set explicit
and reconciles reality to it.
In:
capabilities.toml): the desired set,
per estate/host, with which harnesses should expose each. It is resolved
independently of the working directory — $ACB_MANIFEST, then the suite
config dir ($AGENT_SUITE_CONFIG → ~/.config/agent-suite/), then
~/.config/acb/capabilities.toml, then ./capabilities.toml for in-repo
dev — so acb works the same from any harness's shell, not only from its own
checkout. In a suite deployment the manifest is the estate's capability
contract: one file, provisioned into every harness by
acb install-harness.cred (Vault-brokered AD/service-account creds) and
e2e (Playwright/browser provisioning, local or remote backend) are the first
two. Adding a provider is the extension point.settings.json + skills; opencode opencode.json MCP/commands). codex is
recognized by the closed suite contract but currently returns explicit,
non-zero unsupported from install-harness until Plan 007 lands. Hermes
remains an explicit component-private target. Direct install-harness all
expands only the currently supported public set (Claude + OpenCode); Codex is
promoted atomically after its adapter and conformance proof land.doctor (read-only parity report), reconcile (generate wiring, dry-run by
default), exec (inject-and-run, never surfacing the secret), install-harness
(bootstrap: provision one harness from the manifest + verify), shims
(read-only shim parity report).Out / non-goals:
acb's cred provider is a client, never
a vault. No secrets are stored at rest in acb's own state.e2e provider targets; acb does not host it.acb is a CLI substrate; an MCP front is a possible
future option, not the mechanism (see Design principles).acb
emits to it and depends on it for nothing in its truth path.doctor/inspect) is
deterministic and read-only — no mutation, no secret ever surfaced. The act
path (reconcile/exec) mutates configs and injects secrets: it is
dry-run by default, backs up before writing, never clobbers an existing
secret, and emits provenance on every action.acb exec cred:svc-bot -- ./script injects the
secret into the child process. ACB never emits the value itself, but the child
inherits stdout/stderr and can emit or transform it. Suite manifests therefore
require an exact absolute trusted_argv, minimal environment, and bounded
process-tree timeout; the purpose-built child remains part of the qualified
trust boundary. Timeout/interruption terminates the owned POSIX session or
Windows process tree; Windows fails closed if its containment tools are absent.source = "suite" maps explicit vault:,
azure:, or windows: refs to named child environment variables through
the optional regista.secrets facade. ACB refuses inherited-variable
collisions and validates provider availability during doctor without reading
a value. Azure and Windows support here reflects adapter wiring only; live
backend/OS conformance remains separately gated validation.ACB_CHECKOUT_RECEIPT JSON envelope with invocation/timing metadata and a
one-entry extensible checkouts list. It contains capability/field names but
no refs or values. It is correlation metadata, not a cryptographic token;
nested inheritance and multi-capability composition remain unsupported.
The receipt maps each semantic field to its injected environment name.doctor's verdicts are
computed, not narrated. Any narration layer imports the core, never the reverse
(enforced by an architecture test)..env → VAULT_TOKEN; source = "suite" delegates explicit
provider refs to Regista's public resolver. ACB brokers credential use
without storing any value itself.acb's provenance events; a brokered
capability check-out becomes an attestable agent action. acb does not store
state there in its truth path.acb follows the same conventions and
composes with them, but owns a distinct concern — capability parity.Charter stage (2026-06-15). Landed through Plan 005: the manifest schema,
provider interface (cred, e2e), harness adapters (Claude Code, opencode),
and five verbs — doctor (read-only parity report), shims (read-only shim
parity), reconcile (gated wiring generation), exec (inject-and-run), and
install-harness (suite bootstrap). See docs/capability-model.md (design
spine) and plans/001–plans/005 for the build sequence.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 20 Jul 2026 | 7 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 21:36 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:eaa43eb9f5390120e56c3b911c6677b5720b11c5c7b783d95e5df0030509759b