Agents are folders and flows are numbered lists, so there is no build step: edit, check, run, deploy. Start on your own machine — none of it needs an account.
npm install -g foldrun
foldrun init my-workspace # a workspace that already runs
foldrun check # validate everything — no model is called
foldrun run publish # run it, locally, for realFrom nothing to an agent running on your own machine.
An agent is a folder. A flow is a numbered list. There is no build step — the files are the program — so the loop is edit, check, run, deploy.
Eight nouns, one reference syntax, and a flow that is a numbered list. Nothing here is a framework you import — every one of these is a markdown file you can open, diff and review.
Every field, on every kind of file. What an agent, a flow, a tool and an eval accept, and what each one does.
agents/<name>/agent.md is the only required file an agent has. Frontmatter for the machine, body for the model — and the body is the prompt, so write it as instructions to a colleague rather than as…
A flow is a numbered list of steps in a markdown file under flows/. Steps run in ascending group order, and each receives the results of every earlier group, oldest first — a group-3 reporter sees…
A tool is one markdown file describing something an agent may call. One noun for capability: transport: says how it connects, and an agent grants it by name in tools:.
An eval is a markdown file under evals/ that runs an agent or a flow against a task and asserts something about the reply. It is how a change to a prompt stops being a guess.
Every command, every route. The things you look up rather than read.
foldrun needs no account. ANTHROPIC_API_KEY (or CLAUDE_CODE_OAUTH_TOKEN) is enough to run agents; init and check need nothing at all.
Every route under /api. Generated by hand from the handlers and kept honest by tests/consistency.test.ts, which fails the build if a route exists and this file does not mention it.
What provider: { name: … } resolves to. Generated from packages/core/src/providers.ts and checked against each provider's own documentation on 2026-09-02; the table below is what the runtime…
Decision records. Written when the decision was made, so they say what was actually traded rather than what sounds good afterwards.
Written 2026-08-29, after counting. This is a limit, not a plan — it says what the format will NOT grow, and why the pressure to grow it will feel reasonable every single time.
Written 2026-08-29. Sequels scaling-adr, which said when to move state off files. This says what moves, where, and in what order — and names the two things that are not a storage problem at all.
Written 2026-08-27, while the design was fresh. This is the plan we execute WHEN a trigger fires — not before.