Skip to content

v0.6.0 — On npm, and building alone

Latest

Choose a tag to compare

@zz-plant zz-plant released this 06 Oct 02:12
· 170 commits to main since this release

The first release on npm and in the MCP registry, and the first that helps someone running a product, not only an agent setup. In short:

  • npx ambit-cli runs it with nothing installed, and its first screen says what it read and what one more step would open.
  • Building alone. Two eras, Product and Operations, hold what running a product needs: hosting, a production database, backups, error tracking, uptime, payments, accounts, email. ambit goal "launch my saas" is the checklist in order, and each node arrives with defaults that read freely, ask before a customer would notice, and refuse what cannot be undone. ambit people add lets someone with no OpenCode config set a budget and approve.
  • The route and the unlock. The map numbers the steps to a node in the order they close, and a seed that reaches something says what, and what came with it.
  • The map from any install. ambit web serves the built page on localhost from npm, and from Homebrew once the formula moves to the npm tarball. The page fetches nothing from another origin, fonts included.
  • Two fixes to authority. A question that names no target is inside no scope, so "autonomous on staging" no longer answers yes for an untargeted call, which every Claude Code tool call is. And a tree overlay, which a cloned repository can ship as .ambit.json, may narrow a curated authority mode and never widen it.

An overlay narrows authority, never widens it

A tree overlay is read from the working directory, so running ambit or the MCP server inside a cloned repository that ships .ambit.json applies it, and the overlay's authority block replaced the curated one whole: an overlay saying a refund was autonomous made ambit can act:payments/issue_refund answer yes where the curated tree refuses. Every curated mode is now kept, the narrower of curated and overlay wins per key (with override: true too), and a mode the curated tree never stated is capped at confirm.

One wording per thing

A pass over every surface closed the places it said one thing two ways: every copy button now answers Copied ✓, the detail panel's history row is a section label like the five beside it, and the guide and proposals dialogs name what their close button closes. Eight passages in the docs that described their own page, where a heading or an outline already did, are gone.

On npm: npx ambit-cli

ambit-cli is on npm, so npx ambit-cli reads every agent config on the machine and prints where you stand, with nothing installed first and Node 22.18 or newer the only requirement. npm install -g ambit-cli keeps it, beside Homebrew. The README, llms.txt, the welcome screen and the Claude Code skill lead with it, and the ambit Claude Code plugin now runs its MCP server and briefing through npx, so installing the plugin needs nothing else. The gate plugin keeps calling an installed ambit, since it runs on every tool call.

Nothing fetched from another origin, and a formula that carries the map

The page took IBM Plex from Google Fonts, so opening the map, the local one included, asked Google for a stylesheet on every visit. The fonts ship with the page now: the latin subset of the weights in use, about 130 KB. A test fails if index.html gains a stylesheet, script or image from another origin. The Homebrew formula is written from the npm tarball from 0.6.0, the same files npx ambit-cli runs, built page included; it installed the GitHub source tarball, which has none, so ambit web from Homebrew had nothing to serve.

The route on the map, the unlock said aloud, and the map from any install

A blocked node's panel lists the steps to it in the order they close, and "Show the steps on the map" numbers them there, each after everything it needs, the way Civ numbers the path to a distant tech. The gap had been a set lit all at once, which said what stood in the way and not where to start. With the panel open, the map now scrolls a simulation out from under it, so Launch Ready's steps in the last two eras are not numbered where nobody can see them.

Reaching something is said when it happens. ambit seed prints what it reached: "↑ Reached Hosting, and with it Error Tracking" when Sentry was waiting on a host. The short ambit screen says what moved since you last looked, once. The map's live reload names what was reached and what became a next step, instead of saying only that it reloaded.

ambit web works from an npm install: the package carries the built page (about 650 KB) and the compiled API server, which serves it on the first free loopback port from 3001 and opens it. The short ambit screen points at it. The package no longer carries the test harness. The release workflow's npm job installs the dev dependencies packing needs, and has the id-token permission --provenance needs.

Building alone: a launch checklist and production defaults

The curated tree knew what agents could do and nothing about running what they build, so ambit goal "take payments" and ambit goal "back up my database" routed nowhere. Two eras now hold what a product needs, detected from the MCP servers people already use: Product (Hosting, Production Database, User Accounts, Payments, Transactional Email) and Operations (Error Tracking, Product Analytics, Uptime Monitoring, Backups, and Launch Ready). Launch Ready is a capstone, reached when hosting, a production database, backups, CI, error tracking and uptime are all in place, so ambit goal "launch my saas" is that checklist in order. A plan now prints as one: each step's time, what to do, the usual ways to do it, and a step already half done (Sentry configured before any host) said as such. Each new capability carries the defaults a careful CTO would set: read freely, ask before a customer would notice (a production deploy, a migration, a payment link), and refuse what cannot be undone (deleting the project, dropping a table, a refund, deleting a user, a broadcast email).

ambit people add <id> declares a person from the terminal, so someone with no OpenCode actors block can set a budget and approve a proposal. It grants nothing, the way the web server's own person grants nothing. Building alone is the page for this reader.

A question that names no target is inside no scope now: "autonomous on staging" answered yes for a call that named no target, which every Claude Code tool call is. A scoped grant may still narrow such a call. The map's hover card opens to the left on the last column instead of running off its edge.

A first run that leads with the next step

Bare ambit, which is what npx ambit-cli runs, now shows a short screen (ambit status --brief): what it read, each runtime with the servers it listed; where the graph was written, and that nothing was sent; the two next steps ambit next ranks, with what each would open; then a failing check and the unproven count; and ambit status for the rest. It used to print the whole status report, single providers and bottlenecks as nested records, ending on a suggestion to run checks. With no config found it now lists where it looked across all eleven runtimes it reads, says the graph holds the curated model only, and stops claiming a reached count. Notes that suggested the telemetry bridge name the file this install carries, not a path only a checkout has; ambit web from an install points at ambit share; the FAQ no longer says npm is coming. src/engine/cli/first-run.test.ts runs the first screen from a fresh home and holds it.

What an agent needs to suggest it

An agent suggests a tool it can see at the moment it would help, can install itself, and can say is safe. Ambit now ships as a Claude Code marketplace in its own repository: claude plugin marketplace add zz-plant/ambit, then claude plugin install ambit@ambit, which registers the MCP server with the agent profile, reads the briefing at session start, and adds a skill Claude loads when someone asks which MCP servers they have, why one is failing, what breaks if one goes, or what to set up next. The gate is a second plugin, ambit-gate@ambit, installed on purpose. A test holds both plugins to the package version and to verbs the CLI has.

llms.txt says when to suggest Ambit as a table of situations, the command for each, and what it shows; what it touches, said before it runs (the agent configs read, one local file written, nothing sent, deleting that file undoes it); and when not to suggest it. The README's "Connect it to your agent" opens with the same safe first command. The issue templates ask, optionally, how someone found Ambit, since there is no telemetry to say. The home page's structured data no longer claims Windows, where Ambit does not read the configs yet.

The gate is binding in Claude Code, and a proposal says what it is for

Ambit's decisions bound only where Ambit itself acts, ambit apply and the control plane, and a runtime had to choose to ask ambit_can. ambit gate is a Claude Code PreToolUse hook that puts the question on every tool call. It finds the capabilities a call exercises with the same matching that attributes failures and fills the unmapped report, and answers by one rule: it can only narrow. Forbidden or over a budget is a deny; asking first, no grant yet, or a failing check is put to the person; allowed, or a tool the graph cannot name, is no answer, so Claude Code's own permissions decide. It never answers allow, prints nothing on any error, and adds about a fifth of a second to a call. ambit gate in a terminal prints the settings entry, and the README's Claude Code section carries it beside the briefing hook. A refusal now carries its reason as a code (forbidden, ungranted, failing, budget, unknown), which is how the gate tells a refusal from a question.

A proposal records the work it is for: ambit propose <cap> --for="…", or purpose on the MCP tool. The Proposals panel shows it under the goal, and the approval binds it, so a purpose changed after the signature is no longer covered; a proposal without one hashes as before, and every earlier approval stays valid. Reach serves a purpose someone named.

Your loadout, from A to B

Ambit described features and claims, and nothing walked one person from a pile of configs to a setup that does a class of work without them. My Setup opens on the seven legs of that walk for the loadout on screen, each read from the graph and the ledger with the one command that moves it, and a page walks them with the demo's numbers, says what changes for the person, and where the journey still has gaps. It frames the loadout as an Eva and you as its pilot, says where that picture stops, and keeps interface labels in the glossary's words.

One claim, and what is new in it

The site stated its central idea five ways. One claim now carries them: what an agent setup can do is not written in any config file; it is composed, it has to be proven, and it differs from what it is allowed to do. A README section and a page say what is new in that, its nearest prior work, and what Ambit does not claim. The glossary gains Ambit, the word a reader meets first, and the frontier is its edge.