Fair Copy

§ AI agents you actually own  ·  v2.0.0  ·  MIT

Your agents live in someone else’s platform. a folder you own.

Fair Copy runs your AI agents as plain markdown files, in a folder on your machine. Readable in any editor. Hard cost caps checked before every call. Every run on the record. The runtime is disposable; the agents are yours.

Scaffold your first agent

Built to run a fleet. Perfect for a fleet of one.

fair copy /ˈfɛə ˌkɒp·i/ n. — the clean, final manuscript against which every other version is checked. Your agents are the fair copy: canonical, readable, versioned. This framework just runs them.

This is the entire agent.

~/agents/caldwell/ canonical
caldwell/ ├── persona/ │ ├── IDENTITY.md │ └── SOUL.md ├── memory/ │ ├── INDEX.md │ └── notes/ · 41 files ├── tools.md ├── model.md ├── journal/ └── log/runs.jsonl · every run, on the record
§ 02 · OwnershipLeaf 2 / 13

Kill the runtime. The agent doesn’t notice.

Everything stateful lives in the agent’s folder: markdown and JSONL you can open in any text editor. The runtime only executes. Stop it. Move it to another machine. Swap cron for an MCP server or an HTTP service. When it comes back, it’s the same agent, because the files are the same files.

There’s no export button, because there’s nothing to export. No migration, because there’s nowhere to be trapped. The folder is the agent.

The folder~/agents/caldwell/
persona/ 2 files memory/ 43 files tools.md 6 tools model.md caps set journal/ 118 entries log/runs.jsonl 9,412 lines

tree sha256  9f3c1b…41e2unchanged

The runtimepid 48112
process atomic-run trigger cron · every 15m status running uptime 14d 06:12 last run run_9f21 · ok · $0.031
Restart it as —

runtimes killed: 0 · agents lost: 0

§ 03 · CostLeaf 3 / 13

Never wake up to a bill you didn’t approve.

Every LLM call passes a cost guardrail before it runs, not after it bills. Delegation is tree-capped: a child agent can never spend past what its parent has left, so running an army can’t bankrupt you. Batches reserve their worst case up front. Per-agent caps hold the line. When a call would blow the budget, it’s refused before the money moves, and the refusal goes in the record.

Checked before, not billed after

The guardrail runs ahead of the first token, and again every turn.

Tree-capped delegation

child_cap = MIN(child_remaining, parent_remaining). An army spends one budget.

Worst-case reservations

Parallel helper batches reserve their ceiling before dispatch.

model.md
§ 04 · ProvenanceLeaf 4 / 13

Nothing happens off the record.

Every run writes a JSONL line with a run_id. Every helper, tool call, and delegation writes its own line, linked to its parent. Provenance rolls up automatically: who called what, what it cost, what came back. Six months from now, you answer “why did the agent do that?” with a grep, not a support ticket.

log/runs.jsonl
§ 05 · CompositionLeaf 5 / 13

Layers you can read. Config you can diff.

An agent is composed from layers, and every layer is a file.

Persona

A cascade of identity files. Who the agent is, in prose, under version control.

Tools

A new tool is about ten lines. Registered in markdown, audited like everything else.

Skills

Lazy-loaded by design. The model pays context for knowing a skill exists, not for its whole body.

MCP

Plug in external tool servers with one section in a markdown file.

Memory

Atomic notes plus a wiki, with index-driven recall: load the two notes that matter, not thirty thousand tokens of everything.

Journal

The agent’s own working record, kept in its own folder.

Delegation & helpers

A coordinator hands work to specialists; helpers fan out cheap parallel work. One level deep, on purpose. Auditable beats clever.

All of it is markdown. Edit it in vim, in Obsidian, in Notepad. There is no admin panel, because your file manager already is one.
§ 06 · GrowthLeaf 6 / 13

It gets sharper while you’re away.

Most agents reset to zero every time you close the tab. A Fair Copy agent is built to accumulate: it keeps a memory of you, holds the objectives you set it, and reflects on its own work between runs. The agent you have in three months is not the agent you scaffolded. It’s the one that’s been paying attention.

Goals

Set a standing objective and the agent works toward it across many runs, keeping its own history in a file you can read. Not one prompt: a lasting intent.

Dreams

Between runs, the agent reflects on its own work and memory, and gets sharper on its own. Background passes you never have to trigger. You come back to an agent that spent the quiet hours thinking.

journal/2026-07-05-dream.md while you were away
§ 07 · OrchestrationLeaf 7 / 13

Long work, done properly.

Conductor runs durable, resumable playbooks: multi-stage pipelines that survive restarts. Put a human-approval gate between any two stages and the run suspends until you sign off, then picks up exactly where it left off. Conflicting runs queue instead of colliding. It’s the difference between “the script died at step 7” and “the run is waiting on you.”

Research ✓ Draft ✓ ⏸ Gate: editor approval Publish · queued

resumes where it left off

§ 08 · ScaleLeaf 8 / 13

A Mac mini is not the demo. A fleet is not the upgrade.

One agent on the machine under your desk runs the same framework as a thousand agents across an org. Same files, same code paths. You’re not running the toy version; there isn’t one. The engineering it takes to keep a fleet honest is the engineering that keeps your one agent honest.

And if one agent someday becomes ten, or becomes a business: you register different backends, and that is the entire difference. Nothing to rewrite, because there’s nothing to rewrite.

One agent · Mac mini
caldwell/ ├── persona/ │ ├── IDENTITY.md │ └── SOUL.md ├── memory/ │ ├── INDEX.md │ └── notes/ · 41 files ├── tools.md ├── model.md ├── journal/ └── log/runs.jsonl

Backends: filesystem. Config: none.

1,000 agents · your org
caldwell/ ├── persona/ │ ├── IDENTITY.md │ └── SOUL.md ├── memory/ │ ├── INDEX.md │ └── notes/ · 41 files ├── tools.md ├── model.md ├── journal/ └── log/runs.jsonl

Backends: Postgres, Redis, cloud secrets. Agents: unchanged.

§ 09 · The engineLeaf 9 / 13

Swap the engine. Keep the agent.

Twenty-two backend protocols stand between your agents and the machinery that runs them. Start on the filesystem with zero configuration; everything works on one machine, out of the box. If you outgrow it, register Postgres, pgvector, Redis, or a cloud store, and change nothing about your agents. Not a line. Not a file.

22 protocols · 0 config to start · 0 agent changes to scale

The 22 backend protocols: what each governs, what it starts as, and what it scales to.
ProtocolWhat it governsStarts asScales to
01MemoryFilesystem → Postgres + pgvectorWhat the agent knows and recallsFilesystemPostgres + pgvector
02LLMAnthropic → OpenAI · Vertex · moreThe model behind the agentAnthropicOpenAI · Vertex · more
03EmbeddingsOpenAI → pgvectorSemantic recallOpenAIpgvector
04JudgePolicy rules → LLM judgeQuality evaluation of outputsPolicy rulesLLM judge
05LogJSONL files → SQLite · PostgresThe run ledgerJSONL filesSQLite · Postgres
06LockFilesystem → RedisConcurrency controlFilesystemRedis
07SecretsFilesystem → GCP Secret ManagerCredentials, out of your filesFilesystemGCP Secret Manager
08QueueFilesystem → your queue storeWork waiting its turnFilesystemYour queue store
09IdempotencyFilesystem ledger → shared storeNever run the same job twiceFilesystem ledgerShared store
10ConversationFilesystem → PostgresMulti-turn stateFilesystemPostgres
11IdentityLocal principal → claims-based authWho’s calling, fail-closedLocal principalClaims-based auth
12GoalFilesystem → shared storeLong-running objectivesFilesystemShared store
13OutcomeFilesystem → shared storeResults of dispatched workFilesystemShared store
14JournalFilesystem → shared storeThe agent’s own recordFilesystemShared store
15PersonaFilesystem → central storeIdentity files, cascadedFilesystemCentral store
16Agent ProfileFilesystem → SQLitePer-agent configurationFilesystemSQLite
17Tool RegistryFilesystem → SQLiteWhat the agent may doFilesystemSQLite
18CorpusFilesystem → SQLite FTS · pgvectorReference documents, full-text searchFilesystemSQLite FTS · pgvector
19PolicyFilesystem → central storeRules of engagementFilesystemCentral store
20MandateFilesystem → central storeSpend authorityFilesystemCentral store
21MCP RegistryFilesystem → HTTP registryExternal tool serversFilesystemHTTP registry
22Agent RegistryFilesystem → central storeThe fleet roster + governanceFilesystemCentral store

Every protocol ships with a reference implementation, a conformance test suite, and a locked spec document. Build your own backend against the spec; the framework can’t tell the difference. Not a feature you rent: a contract you hold.

§ 10 · ObservabilityLeaf 10 / 13

See the whole shelf.

The Fleet Console is one screen for everything you run, whether that’s three agents or three hundred. An attention queue surfaces the agents that actually need you. Cost, quality, and reliability trends, per agent and across the fleet. A health score from 0 to 100 you can put on a wall. And a recommendations engine that reads your own telemetry and tells you where you’re overspending, where quality is slipping, and where governance has gaps. With receipts.

Fleet health 87/100

12 agents tracked
3 flagged · as of today

7-day trend

Attention queue

  • researcher-2 · cost spike · +38% w/w
  • summarizer-1 · quality dip · -12% w/w
  • archivist-3 · governance gap · owner unset

REC · move summarizer to a cheaper model. Est. save $41/mo.

Running this for a team, or for clients? That’s what we do at DPIC. →

§ 11 · The specLeaf 11 / 13

Lock-in dies at the spec layer.

Fair Copy is an open specification first: fifty-plus locked spec documents that define exactly how agents, memory, provenance, and every backend protocol behave. The Python package is one conforming implementation. Build your own in Rust, in Go, in whatever comes next; your agents won’t care. That’s what “no lock-in” means when you say it all the way down.

50+ locked spec docs · 22 protocol contracts · 1 reference implementation · 0 proprietary formats

§ 12 · BeginLeaf 12 / 13

Make the fair copy.

Your agents, in your folder, on the record. Two commands from here to your first one.

Read the spec

v2.0.0 stable · MIT license · 22 protocols · 50+ spec docs · 6,000+ tests