v0.1 · BSL 1.1

AgentStateDeveloper

Code-level context and audit overlay for agent-authored code — a decision ledger, an effect declaration, and a call graph for every function, all queryable by the coding agents that write the code, all checked into git.

Rust core · 9 languages · 14+ MCP tools · Git-native sidecar

View on GitLab Quick Start Docs

Coding agents now write, refactor, and review code at human-equivalent rates. The next bottleneck is not throughput — it is knowing what an agent already decided, what it's allowed to touch, and who approved it. AgentStateDeveloper records all of that, at the symbol level, in a sidecar that travels with the repo.

Three moments your agents already need this

These aren't hypotheticals. They're what happens to every team that lets agents touch real code.

Story 1 — The mystery function

"Why does this function exist?"

Six months ago an agent introduced payments.chargeCard with an unusual retry pattern. Today an agent — or a human — needs to refactor it and can't tell if the pattern is load-bearing or vestigial.

Without ASD: read the diff, search Slack, hope the original PR description survived.

With ASD: asd ledger get payments.chargeCard — hazards, rationale, constraints, authority, all checked into git. The reasoning survived the rename, the file move, and the original author leaving.

📝 asd ledger get payments.chargeCard RATIFIED
symbol: payments.chargeCard
kind: hazard
summary: "fails silently above $10,000 — caller must check return value"
author: agent/refactor-bot
time: 2025-11-14 16:22 UTC
authority: approved by alice@ · sig ed25519
previous: decision 2025-09-02
rationale: "Stripe gateway returns 200 on declined >10k; documented at gateway/STRIPE-4421"
Story 2 — The blast radius

"What does this function actually touch?"

An agent is about to refactor processOrder. Before it changes a line, it needs to know: does this read from disk? hit the database? call out to an external API? — including transitively, through everything it calls.

Without ASD: read every function in the call graph by hand and guess.

With ASD: asd effects_of processOrder returns the propagated 17-category effect set — io.fs.read, io.db.write, io.net.out — with each effect annotated by where it was declared. The agent knows the blast radius before it commits.

🎯 asd effects_of processOrder TRANSITIVE
io.db.writevia orders.persistdeclared
Writes to orders table inside a transaction
io.net.outvia payments.chargeCardtransitive
HTTPS POST to Stripe charges endpoint
io.fs.readvia config.loadtransitive
Reads ./config/payments.toml at startup
io.queue.publishvia notify.sendtransitive
Publishes order.placed to NATS
4 effect categories · 3 transitive · policy: pass
Story 3 — The regression

"Who broke billing?"

A regression lands in production. Billing is off by 2% on enterprise plans. The team needs to know: what changed, who changed it, who approved it, what alternatives were considered.

Without ASD: a two-day diff archaeology project.

With ASD: asd audit tail --path billing/* returns the hash-chained log of every ledger mutation and policy decision in that subtree. Tamper-evident, replayable, independently verifiable.

🔎 asd audit tail --path billing/* HASH-CHAINED
9f2a…c1 agent/refactor ledger.append billing.computeProration kind=decision
b71e…88 alice@ ledger.approve billing.computeProration sig=ed25519
3c0d…42 agent/refactor effect.declare billing.computeProration io.db.read
f5b2…17 policy evaluation require-approval → PASS
88a0…91 agent/refactor sync.prune 0 stale
CHAIN VERIFIED · head: 88a0…91 · replayable

Eight primitives, one sidecar

ASD adds eight things to your repo. They live in .asd/v1/, travel with every clone, and are queryable from the CLI, MCP, and HTTP.

ledger
Why does this function exist?
effects
What does it touch?
index
Where is it defined?
call_graph
What calls what?
policy
Who's allowed to change it?
ratification
Who approved this decision?
audit
What happened, in order?
sidecar
Does it travel with the repo?

Nine languages, three surfaces

Python TypeScript Rust Go Java C# Ruby Kotlin Swift CLI (asd) MCP (asd-mcp) HTTP (asd-serve)

Index your repo in 60 seconds

terminal
 

Clear on scope

ASD is a code-level overlay. It's the layer agents query before they read, write, or refactor — not a linter, not a search tool.

NOT a linter
Linters check style. ASD records decisions — why a function exists, what it's allowed to touch, who approved it.
NOT a code-search tool
grep finds strings. ASD answers what does this touch, who decided this, was it approved.

Why BSL 1.1?

AgentStateDeveloper is built to become infrastructure for agent-driven coding. Infrastructure primitives are strip-mining targets: cloud providers offer them as managed services, capture the value, and contribute nothing back. BSL 1.1 closes that gap.

Individuals, startups, and enterprises using ASD internally — including in production — are unaffected.
The restriction covers one specific case: offering ASD as a hosted or managed service to third parties without a commercial agreement.
After four years, each version converts to Apache 2.0 permanently, with no conditions.

Built alongside AgentStateGraph

ASD is the code-level overlay. AgentStateGraph is the underlying state substrate. Together they give agents accountable state across both code and runtime.

Visit agentstategraph.dev GitLab