Getting agents to understand you
Agents do what you say, not what you mean.
- Prompt Engineering
- Context Engineering
- Reasoning-Effort Allocation
- Spec Writing for Agents
- Task Decomposition
A working catalog of the systems, harnesses, and methods I run.
Running agents dependably, and more than one at a time, takes five capabilities.
Agents do what you say, not what you mean.
You can't improve what you can't measure.
One-off prompts don't scale.
Production requires more than a demo.
One agent at a time is the bottleneck.
I split the work into claims with explicit dependencies. The system takes one unblocked claim at a time, builds it, tests it, reviews it, and records the result.
Human steeringOptional, and normally idle. A person sets the definition of done and steps in only to re-steer; the correction lands in the spec of record or Beads.
AutoreviewAfter each change, a fresh model reviews the current diff against the written requirements. I verify each finding, fix accepted problems, and repeat until one full review finds nothing actionable.
ProvenanceEvery closed claim and every checkpoint leaves an evidence record. The trail is append-only and auditable.
It is a graph because slices depend on each other. Where they do not, they can run at the same time. The loop is not a node in it: it walks the graph from outside and only ever enters at the frontier.
The sections below show the files, tools, checks, and runtimes that implement those five capabilities.
How the parts sit together, and where the real cut runs: what the system knows, and what makes it behave.
Every box opens that part of the work. Green dot marks the AI-OS, solid arrows are the build path, left to right. The path forks after Skills: most work is a workflow with a fixed order, the agent is the exception you escalate to. Both land in Projects.
The files and folders the work actually happens in. The names are business-specific; the shape is not. Everything else on this page is depth layered on top of it.
Plain files in a git repo. Your agent reads exactly the files you read.
The AI-OS stores context in files. The harness reads those files, chooses the right tools, checks each result, records what happened, and keeps working until the written checks pass. The folders still work without the harness.
Green dot marks the work loop, the center of gravity. Dashed lines are the trust boundary around every tool edge and the capture path back into memory.
A request never searches the skills. The model picks one on its description alone, before reading a line of it. Only the skill it picks is ever loaded.
Triangle = a trigger. Plain box = a step the model reads in order. Green dot = a model call. Dashed frame = a zone. The door routes on the description alone, before the skill is read; the skill it picks is the only one ever loaded.
Each skill has a short description, written instructions, and any scripts it needs. The model reads the descriptions, chooses one skill, loads its instructions, and runs its scripts.
One group turns the request into testable requirements. Other groups generate options, build the result, test it, challenge it, gather information, or remove obsolete instructions.
A coordinating agent reads a markdown workflow and calls one-job tools. On deploy the workflow and the tools ship; the coordinator stays behind. That is where the fixed order comes from, not from the hosting.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. The coordinator is the only agent at build time and it never ships. A runtime agent earns its place only when the control flow cannot be drawn in advance.
The individual context layer: plain files holding who I am, what I am building toward, what the system can reach, and what has been decided. The structure transfers to anyone; the content is what makes an AI system yours, or your business's. The principle is the same at every scale.
The layer on top of the files that makes a model act on them as intended: a work loop that writes done down first and works until every check passes, memory that compounds across sessions, and rules enforced as code where it matters.
A skill is a folder of instructions and scripts for one repeatable task. The model selects a skill by name, loads its instructions, and follows its workflow. Each card links to a real skill directory I run.
These cards show how I design automations: remove unnecessary steps, keep fixed operations in code, test model outputs, and run deployed jobs on an always-on service. The final four cards show automations I have built and state how far each has run.
Most tasks use a workflow whose order is fixed in code. These cards cover the exceptions, where a model chooses the next step while limits on tools, cost, iterations, and live actions keep the run bounded. The final card shows the one runtime agent I run and why it needs that freedom.
Who I am, the business, and the current goals, in dated plain files. Every other layer reads from here; an assistant without this layer starts every session from zero.
One registry of every system the OS can reach: revenue, calendar, mail, tasks, files, any API or local data. What is not listed here, the OS treats as unreachable.
The reference store the OS draws from: doctrine, repeatable playbooks, research digests, each pinned to its source. An answer traces back to a document I can open.
Append-only log of what was decided and why. Entries are never edited, only superseded, so the record cannot be rewritten to agree with the present.
Each initiative is a self-contained folder with its own docs, references, and scope. Any session can pick it up cold, because everything the work needs is inside.
Routing lives in the tree. A file at each level says what that branch is for, so the file tree is the program and the agent is the interpreter.
One file per piece of work. It holds the problem, done as numbered checks, every decision, and the evidence for each check. It is the spec of record, and it outlives the session that wrote it.
Before an agent runs, done gets written down as checks a tool call can answer. The loop takes one ready slice, builds it, tests it, reviews it, then records the outcome where it belongs, and repeats until every check has passed with the output that proves it.
The work is a graph of claims with explicit dependencies, and the loop walks only the ready frontier, the claims whose dependencies are already met. The graph shows which claims could run at the same time. What actually runs in parallel is whatever can be kept apart, in files and in everything else it touches, and where keeping them apart costs more than going in order, it goes in order. A claim stays a candidate until its evidence is reconciled; a gap found later can reopen a claim and lower the verified count.
inspectEach repeatable task has its own folder with a description, instructions, and scripts. The model chooses a folder from its description and loads it only when the current request matches.
Independent work fans out to specialist agents (research, build, cross-vendor audit), each in its own clean context, and merges back in one place.
An action does one thing, a pipeline chains actions, and a flow puts a source, a pipeline and a destination on a schedule. Each level deploys on its own.
Every capability is a deterministic CLI tool first, wrapped by a prompt second. The tool is the part that gets tested.
Deterministic scripts that fire on session events: start, tool call, stop. They run whether or not I remember to ask.
Everything external is data to read, never commands to obey. Commands come only from me and the core config, so a hostile page or tool output cannot steer an agent.
Forty commands are blocked before a model is consulted, and forty-five more stop and ask me first. A secret in a file being written is refused at the write.
Every piece of data has one of four sensitivity levels. Each model provider has a maximum level it may receive. Code compares the two and blocks the call when the data is too sensitive for that provider.
What each session taught is extracted, filed by how long it stays true, and retrieved by relevance. It proposes edits to its own rules and waits for my yes.
One command captures anything (a note, a link, a clip) and queries across every store. Each capture lands as a raw, timestamped envelope and is processed into knowledge on demand.
Parses a source, extracts the fields, and emits schema-valid JSON plus a deduplicated entity graph. What does not fit the schema is rejected before it can land.
Every incoming item is scored one to a hundred. Scoring is live. The routing rules remain disabled until their proposed actions have been reviewed against real items.
A git-native issue ledger. Agents claim work, declare dependencies, close, and sync across sessions against one shared source of truth.
Every tool call, agent, and failure emits an append-only event, read by both the dashboard and the ledger.
One always-on local dashboard puts voice, chat, observability, and live status in one place. Work the OS does off-screen is visible there.
State the goal, force at least three competing hypotheses, design an experiment that can fail, then measure.
Deconstruct to parts, classify each as hard constraint, soft constraint, or unvalidated assumption, then rebuild from the fundamentals.
Groups repeated incidents, identifies the process that keeps producing them, and chooses a change to that process instead of fixing each incident separately.
Reconstructs the timeline, asks why each failure was possible, and changes the system that allowed the mistake instead of blaming the person who made it.
Two to eight passes through the same problem, each from a different lens, stopping when the passes stop yielding.
A five-level hierarchy decides what gets loaded, and starvation and flooding are diagnosed as two separate failures.
A standard library of prompts that write prompts. Structure is code in a Handlebars template, content is data passed in at render time.
Evals grade the transcript, the tool calls and the turns. Each case runs at least three times: can it do this at all, and does it do it every time.
Generated inputs run against a stated invariant, and a failure is shrunk to the smallest input that still breaks it.
A fresh model reviews the current diff before commit. I verify and fix accepted findings, then repeat until a full review returns no actionable finding.
The argument breaks into twenty-four atomic claims, and thirty-two agents work them over from four expert angles. Findings come back severity-ranked.
Four to six composed experts debate in rounds, each seat carrying its own stake, and the whole transcript is kept.
Six patterns for splitting work across agents, from one-shot subagents to worktree isolation to multi-turn teams.
Four depth modes, from one quick lookup to seven parallel explorers, with independent verifier agents that re-check the claims before anything ships.
An autonomous loop changes the target, measures, keeps what wins and reverts what does not, until it stops climbing.
Every rule in an instruction set meets one test, would a smarter model still need it, and is then cut, merged, sharpened or kept.
A new skill runs against a no-skill baseline, same prompt, two agents, and the comparison decides whether it changed anything.
Most processes exist because they always have. A report nobody reads. An approval that changes nothing. Ask what breaks if it simply stops, and if nothing breaks, kill it.
Before any tool is open, the map answers three questions: where AI actually belongs, whether each step is a fixed workflow or a judging agent, and what data it touches. Catch the broken step on paper, where it is cheap.
concept: WorkflowAutonomy has rungs. Human does it. Model suggests, human picks. Model drafts, human edits. Model runs, human checks. Model runs alone. Take the lowest rung that clears the bar.
concept: Autonomy LadderAn automation earns its keep on one specific number, named before the build starts and measured after it runs.
Every automation is the same three layers: a markdown workflow that fixes the steps, an agent that reads it and coordinates, and single-purpose tools that do the work.
concept: WorkflowUnder the three roles, an automation is a trigger and a chain of steps, each of a few kinds: fetch or reshape data, call a tool to act, ask a model to read or classify, branch on a decision. Canvas or code, the kinds are the same.
concept: Workflow vs AgentThe workflow is markdown the agent reads and follows. The code underneath is the tools it calls. A capability written as files can be read in a diff and corrected by editing a paragraph.
concept: WorkflowA tool is one function with one job: a name, a schema for its arguments, and a description the model reads as its contract. The arguments are validated before it runs.
concept: Tool CallingAgent means two things. At build time it is the assistant that writes the automation. At runtime it is a model choosing what to call as it runs. Most automations need only the first.
concept: Agent LoopIf the complete process can be drawn before execution, build a workflow with that fixed order. Code chooses the next step; a model may classify or extract data inside one step.
concept: Workflow vs AgentWhen the order cannot be fixed in advance, an agent loops toward a target. It gets the goal and a success test, not the steps. Step-by-step instructions turn it into a slow typist.
concept: Loop FreedomDuring development, each failed run leads to a tool fix, a workflow update, and another test. Deployment starts only after repeated runs reveal no new failure class.
concept: EvalsThe build-time agent froze the steps and hardened the tools. Deploy locks that in: the workflow and the tools go to the runtime, and the coordinating agent stays behind.
concept: WorkflowThe flow is full of model calls, but you fixed their order, so it is a workflow, not an agent. The order is deterministic; the steps stay probabilistic, and evals prove the variance is low.
concept: Workflow vs AgentChain model calls and the error multiplies down the chain: five steps at ninety percent each land at fifty-nine. The fix is to let the model decide and let code do the steps.
concept: Compounding ErrorDecompose the job into steps small enough to stand alone, one input and one output each. Build the deterministic ones first, fetch, format, route, and give each model call a single job.
concept: Task DecompositionBuild step one, run it on real data, and read the output it actually produced. Build step two against that, not against the output you imagined it would return.
concept: EvalsA framework and a durable runtime get compared as rivals, but they sit at different layers. The framework runs the model-and-tool loop. The runtime underneath survives the crash and the long wait.
concept: Workflow vs AgentA runtime snapshots a job where it waits, and nowhere else. So durability is really decomposition: split the job at its waits, and a retry skips whatever already ran.
concept: Durable ExecutionTwo things a local run cannot give you. A crash resumes instead of losing the run. And the job can pause for hours or days at a human decision, then resume when the answer arrives.
concept: Durable ExecutionRun it by hand and watch, then let it draft while a human sends, then let it send while a human samples. Start at a tenth of the volume.
concept: Human in the LoopTreat it like someone who started this morning. Its own identity, never yours. Read access until write access is justified. Keys scoped to exactly the job.
concept: GuardrailsExternal content is read by the model as instruction, not just data. A tool description, a fetched page, a config file: anything the model reads can carry an instruction it was never meant to obey.
concept: Prompt InjectionA person needs to see what happened. A machine needs to prove it. The two are built differently, and a requirement names one of them.
concept: ObservabilityAn automation is a background job: a trigger fires it, it runs unattended, it reaches the services it acts on. The runtime that holds it has to be always on.
concept: WorkflowStart at the lowest ownership level that fits: bundled canvas, own database, own frontend, own API, or full deploy stack. Every step is optional. The future maintainer, testing, UX, scale, compliance, and operations decide where to stop.
concept: Workflow vs AgentAn automation that needs a patch every week is not an asset. Neither is one costing more attention than it returns.
concept: ObservabilityA workflow is the default: predictable, testable, cheap. An agent is earned only where the path through the task cannot be written down in advance and flexibility is worth its cost in latency and tokens.
concept: Workflow vs AgentAn agent is a model directing its own process: it picks a tool, reads the real result, and decides the next step from what came back, looping toward the goal until a success test passes or a stop rule fires.
concept: Agent LoopBetween one augmented model call and a free-running agent sits a ladder of fixed patterns: chain the calls, route by kind, run parts in parallel, let one model dispatch to workers, loop a generator against a judge. Take the lowest rung that solves it.
concept: Workflow vs AgentOne coordinating model splits work it cannot enumerate in advance and hands each piece to a worker running in its own clean context. The pieces come back to one place; the contexts never mix.
concept: Sub-agentAn agent trades latency, tokens, and compounding error for its flexibility. So it runs bounded: sandboxed first, tool results as ground truth, a pause at a human checkpoint, and a hard cap on iterations.
concept: GuardrailsEvery agent is the same three parts: instructions the model follows, the model itself, and the tools it may call. A name, a persona, an employee framing: packaging around the same anatomy. Frameworks differ in what they hand you, not in what an agent is.
concept: Agent AnatomyOne option is a definition file containing instructions and allowed tools; an existing host runs the model-tool loop. The other is application code built on a framework; my program runs the loop and controls its state, deployment, and results.
concept: Agent WiringAn agent runs unattended only when its host starts it on an event, stays available between runs, provides separate credentials, and enforces limits on tools, cost, iterations, and live actions.
concept: Durable ExecutionA session runs while its terminal stays open. A gateway keeps the agent reachable through chat or webhooks and can wake it on a schedule. A job runtime starts one bounded run per event, saves progress while it waits, and ends afterward.
concept: Agent HostsMCP is how an agent reaches the outside world through one shared protocol. A server declares its tools once, and any AI app can call them over JSON-RPC, so a tool is not locked to the coordinator that built it.
concept: Tool CallingInbound-lead rapid response, the largest automation here by code. Built and tested against my own intake; it has not yet run against live lead volume.
A research pipeline that decomposes a question, runs bounded searches, evaluates sources, and synthesizes.
Inbox triage that classifies, drafts, and files, surfacing only what needs a human decision.
An inbound-inquiry agent that reasons and iterates inside a durable task. Synthetic and offline: it drafts, and nothing is sent. The logged exception to the no-runtime-agent default.
Drafts a structured offer from the intake, ready for review.
A self-hosted question-answering system over a fixed document collection. It rejects answers without supporting passages, verifies each citation against retrieved text, and records the inputs and model version so later runs can expose changes.
RAG over 497 near-identical MOSFET datasheets, graded on 2,718 questions. Dense retrieval alone finds the right one about two times in three. Fusing in the part number fixes it.
A read-only MCP server that lets an agent query an agent-commerce standard by section. It serves a committed index built at a pinned commit, hash-locked so it cannot drift.
Five agent patterns on the Claude Agent SDK, from one one-shot agent up to an orchestrator with parallel sub-agents and a plan-execute-reflect flow that splits roles by model cost.
A published n8n community node that swaps many per-tool model calls for one. Where the agent node grows calls quadratically as the pipeline lengthens, code-mode stays at a single execution.
Messy documents to schema-validated JSON: OCR, model extraction, and a labelled golden corpus to score accuracy against, each number naming its provider and model. The corpus runs the real extraction path, so the score is measured, not asserted.
A six-layer prompt-injection defense for a self-hosted AI agent, run as a native plugin across five gateway hooks. The runtime is external and the config auditor is a third-party plugin; my contribution is the hardening.
An implementation-architecture reference for a Storj storage-node cluster: topology, monitoring, hardening, and an operations runbook. The architecture is the deliverable, with no earnings or runtime claims.
Three infrastructure references for solo operators in Germany: storage, compute, and validation. I selected activities where the operator does not hold or manage another person's funds, because custodial work may require financial licensing.
A SIEM alert enters, a scored and MITRE-mapped triage decision comes out. Every threat-intel lookup fires in parallel inside one sandboxed call, so the model reads the result once.
An independent verifier for an agent-commerce standard. It rebuilds each specified result byte for byte and reports mismatches with the relevant section of the standard. It is read-only and holds no wallet or keys.
A German phone agent for medical practices: booking against a real availability API, emergency detection, call transfer, holiday-aware greetings. 156 tests. It has never run against a live practice.
Invoice PDFs into structured JSON: text extraction, schema-constrained model output, a low-confidence review queue, and accuracy reported against a small ground-truth corpus rather than asserted.
An MCP server that hands any client a sandbox: the model writes TypeScript that chains tool calls, runs once, and returns. Published to npm, forty-four tests.
Agents that can read blockchain state but cannot publish a transaction without explicit permission for that action. When an authorized action runs, the system records the request, decision, transaction, and result.
Claude Code as an always-on agent I reach from my own phone: a bridge to the CLI, persistent memory, guardrails, and an agent-to-agent pipeline. 460 tests.
The operator layer around an upstream node runtime I did not write: setup, preflight, verification, burn-in, recovery, and a harness that detects a dirty host. No tenant data, no live fleet data.
Five POC workflows proving the n8n lifecycle can run without clicking, authored from the terminal. A measured run collapses eleven model calls into one, five times faster.
Minimal to rebuildWrite success first. Generate at least three competing explanations: one hypothesis has no competitor, so any measurement reads as support, unless it makes a prediction the measurement can flatly kill. Design a single test whose outcome would kill one of them. Measure against the goal written down before the run, not against the last run.
Plain box = a step. Green dot = the one step a model performs. Dashed arrow = the loop back when the measurement settled nothing, which is a result and not a failure.
Minimal to rebuildDeconstruct to constituent parts and their real values. Classify each one: physics, policy, or guess. Most constraints turn out to be guesses, decided once by someone who never wrote down why. Rebuild from the physics alone, and never reason by analogy: it copies a shape and inherits its assumptions unexamined.
Plain box = a step or a class of element. Solid arrow into the rebuild = the element survives untouched because physics holds it there, and dashed arrow = the element is movable, which covers most of what gets called a constraint and turns out to be a choice made once by someone who never wrote down why.
Minimal to rebuildTake something that recurred: a problem that keeps returning is produced by a structure that keeps producing it. Write the events, then the pattern over time, then the loop producing it, then the belief that keeps the loop acceptable. Act on the deepest level actually reachable; an event with no generator behind it needs none of this.
Plain box = a level of explanation. Dashed line = the waterline: only the top level is visible, and every level below it explains the one above. Fixing an event leaves the generator running.
Minimal to rebuildWrite the timeline first, before the story can rearrange itself. Ask why until the answer is a system rather than a person: if a person could make the mistake, the system allowed it, and blame ends the inquiry. Ship the change that would have caught it.
Read the boxes from right to left. Each box answers why the event in the box to its right was possible. The dashed branch and its box = the point an investigation reaches when it lands on a person, which is a stopping point above the system that allowed it, so the chain runs left past it. The dashed frame = the five workflows the skill runs.
Minimal to rebuildPick two to eight lenses that differ structurally, not in wording: a blind spot is not visible from the direction that produced it, so each pass changes the lens, never just the effort. Run the same problem through each and write down what it surfaces. Stop when a pass repeats the one before it; the stopping rule is empirical, not a count.
Plain box = one pass, reading the single problem on the left through one lens; the dashed frame is the lens bank, and the green dot marks that the passes are model calls. The new criteria each pass yields taper as later passes repeat earlier ones, and that taper is the stopping rule: the run ends at the first pass that surfaces nothing the earlier passes missed.
Minimal to rebuildLoad permanent rules first, project files only for the active project, and task material only when the current step needs it. Remove stale tool output and superseded instructions before the next model call. Too little context leaves gaps; too much buries the relevant constraints.
Plain box = a state of the loaded context, and the two arrows converge on one box because both edges of the band degrade the answer, by different failures: too little context and the agent hallucinates, too much and it loses focus. Nothing drawn here is a step a model performs, so there is no green dot in this diagram.
Minimal to rebuildTemplates in files, content as data, one renderer, so the same template composes agents, evals, and workflows from one place. Be explicit, give a rule its motivation and not just the rule, say what to do rather than what to avoid, and treat context as finite.
Plain box = a step or an input. Dashed frame = the render pipeline, which is deterministic, so there is no green dot anywhere in this diagram; the dashed arrow marks the rendered prompt leaving that pipeline to be run somewhere else.
Minimal to rebuildA frozen case set with the expected behaviour written down. Run each case at least three times. Report can-it-at-all and does-it-every-time separately, and gate only on the suite that already passed.
Plain box = a step, and the green dot marks the one step a model performs, the rubric grader. Whichever graders a case calls for read the same transcript and feed both result boxes, so one set of runs answers the capability question and the reliability question separately.
Each run is read through four lenses.
The evaluation categories come from failures observed in my own runs. I test them on repeated cases before using the result as a release gate.
Minimal to rebuildFor pure functions, write the invariant, not three examples: a hand-picked suite records which inputs occurred to the author, not how the code behaves. Generate inputs against the invariant and shrink the counterexample. Some behaviour has no invariant, only a table of cases the spec fixes; that table stays. Then break the code on purpose: if the suite still passes, it was never testing the code.
Plain box = a deterministic step. Dashed frame = the check on the checks: a suite that survives an injected bug proved nothing about the code, only about itself. The generator half ships as a workflow. The mutation half is the principle here, not yet a built workflow.
Minimal to rebuildBundle exactly the diff being landed. Hand it to a fresh agent from a different model family, no session context, fixed schema for findings: a reviewer that watched the code being written inherits its assumptions. It exits nonzero while a finding stands. Fix, rerun, until clean, all before the commit. Widen the bundle only when the change makes sense only against code outside the diff.
Plain box = a step, green dot = the one step a model performs (the review pass), dashed arrow = the return path taken while an accepted finding still stands. Running it before the commit rather than after is a discipline the engineer holds, because the script itself is advisory and blocks nothing.
Minimal to rebuildDecompose the argument into atomic claims. Spread agents of different expertise across all of them, and have each weigh strengths as well as weaknesses. Rank what they find by severity. Then steelman the argument at its strongest and answer it, or concede the point.
Plain box = a step, and the dashed frame = the parallel attack bank, drawn as five boxes standing in for 32 agents. The single green dot = the one step a model performs, which is the attack itself.
Minimal to rebuildFour to six seats, each with a named expertise and something at stake: generic reviewers converge on agreement that reads like consensus and carries nothing. Three rounds, parallel within a round. Keep the transcript, then synthesize from it. A decision with one axis needs no council, and a thing that needs attacking goes to RedTeam instead.
Plain box = a seat or a step, and a cell in a round column is one seat's turn in that round. The green dot on the seat column marks the seats as model calls, and every round is carried into the transcript, which the synthesis reads for the places the seats diverged.
Minimal to rebuildTwo questions. Are the workstreams independent? Then fan out. Does the job need tools and iteration, or one answer? Cap the one-shot worker. Two writers on one repository get separate worktrees. Anything else is coordination overhead with nothing using it.
Plain box = a routing step, a question, or the pattern the work lands in. Green dot = a model call, and both an agent team and the fan-out bank are made of them. Two agents writing one checkout overwrite each other quietly, which is what the worktree branch exists to prevent.
Minimal to rebuildSplit the search across agents with different angles. Collect claims with their sources. Then hand the claims to verifier agents who did not do the search: a model asked to double-check its own source confirms it. Ship the conflicts instead of resolving them quietly.
Plain box = a step, green dot = a model call. It sits on the explorer bank and on the independent verifier agents, which are model-driven too. Dashed frame = the separate verification stage, whose agents did not do the search, and a dashed arrow is a claim that failed verification and was dropped.
Minimal to rebuildName the objective function: manual tuning stops at the first change that feels good enough, a measured loop does not. For code, a shell command that prints a number. For a prompt or a skill, a judge with binary pass criteria. Then loop: change, measure, keep only what wins, revert everything else. Stop when it stops climbing.
Plain box = a step, green dot = a model call. The agent proposes each edit, and in eval mode a judge scores a target with no natural number. Dashed arrow = a change that failed to improve the number and is reverted. Eval mode is what lets a skill, a prompt, or an agent be climbed at all.
Minimal to rebuildInstruction sets grow because each rule was true once and nothing removes it, and a rule written for a weaker model teaches a capable one to behave like it. Put every rule to one question, would a better model need it, plus five checks: already done, contradicts another rule, redundant, a one-off fix, vague. Then cut, merge, sharpen or keep. Safety gates, tool contracts, verified gotchas, and specific non-default rules like tool preferences and routing always stay.
Plain box = a rule on the left or an outcome bucket on the right, and the green dot = the one step a model performs, the judgement at the gate. Every rule enters the gate on its own. Keep rules that define required checks, tool choices, routing behavior, or other project-specific constraints a model would not infer correctly.
Minimal to rebuildTwo to four realistic prompts. For each, two agents in parallel, one reading the skill and one blind to it, both returning an output and their approach: from the inside, a skill that helps and one that does nothing look identical, because the author reads it and its instructions feel like they must be working. Compare the pairs. If they match, the skill is decoration, and the honest move is to delete it.
Plain box = a step, green dot = the fork where one prompt becomes two model runs, one reading the skill and one held away from it. The comparison has four honest verdicts, from a real improvement down to the baseline beating the skill, and the ones where the skill did not win are what make this a test rather than a rubber stamp.
Minimal to rebuildBefore starting, write done as a numbered list of criteria, each one a single yes or no that a tool can answer. At least one has to name what must not happen, because a goal with no nameable failure mode has checks that all pass. Nothing exits until every check passes, with the output that proves it.
Plain box = a deterministic step. Green dot = a model call, on the build step where the model closes the gap. Verification is not a model call: it is the tool-evidence gate, and nothing exits the loop unverified.
Minimal to rebuildA trigger, a step that runs code or a model, a way to chain steps, and a cloud runtime. Each level deploys on its own, which is what makes an action reusable across pipelines instead of copied into them. Every flow reports what it did, because a dead job sits behind a dashboard that reports nothing wrong.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a pipeline; the same composition nests up into flows.
Minimal to rebuildTwo edges, both in code. Inbound: outside content is quoted as data, never executed as instructions. Outbound: refuse a command that pairs a credential with anything that leaves the machine, and refuse a download piped into a shell. The second edge exists because treating outside text as data covers the way in and nothing on the way out.
Dashed frame = a zone. Untrusted content crosses only as data. Instructions cross only from the trusted core. Green dot = the model.
Minimal to rebuildForty commands blocked outright and forty-five that stop and ask me first, evaluated before the model is even consulted: a rule the model cannot reinterpret, because it is not addressed to it. A scan of what a write would contain, not only of the command that writes it. And a check that my address and my paths cannot end up in anything published.
Minimal to rebuildEvery piece of data gets a secrecy grade, one of four. Every vendor gets a maximum grade it may see. A check before each outgoing call blocks data graded above the vendor's maximum.
Minimal to rebuildA schema. A model call that fills it. A validator that rejects what does not fit. Then a merge against the entities already held, in the same transaction as the write: a half-merged source would land one company as a hundred separate records.
Plain box = a deterministic step. Green dot = a model call. Unstructured input becomes schema JSON plus a deduplicated graph of entities.
Minimal to rebuildA score per item against my stated goals, since a general-quality score sends the reader back to the archive anyway. Then a rule that acts on it: reach me now, wait for the digest, or be filed where I can still find it. Mine are built and switched off. Score first and route later, because an untrusted routing rule is worse than no routing at all: what it removed is invisible.
Green dot = a model call. Plain box = a deterministic step. The score decides the route: notify now, hold for the digest, or archive. Scoring runs today; the routing rules are built and not yet switched on.
Minimal to rebuildExtract rather than replay: handing the raw transcript back costs more every session and remembers nothing. As a session runs, on a cadence, extract the few things worth keeping and drop the rest. File each one by how long it stays true: this task, this lesson, this fact. On session start, retrieve by relevance to the request. For the write-back, give every file a permission level: one the system may overwrite alone, one it may only append to with an audit row, one where it may propose a change and wait for a yes, and one it may never touch. Default everything to the last.
Green dot = the review that types each memory, a model call. Plain box = a deterministic step, and retrieval is one: a ranked read, not a model call. The loop closes back into the store, so each session starts from what the last one learned.
Minimal to rebuildA spawn primitive that returns a result and discards the worker. A registry for the agents that need a name. A second vendor credential for the auditor, and a router that will not hand it its own output.
Green dot = a model call. Plain box = a deterministic step. Independent branches run at once, then merge; wall-clock is the slowest branch, not the sum.
Minimal to rebuildOne append-only file per event class, written by every component, never rewritten, merged into one ordered read: two things running at once have no order you can read from separate logs. Tool calls, failures, agent lifecycle. Failures are events too: an error that only reaches the screen never gets counted.
Plain box = a deterministic step. Append-only JSONL logs, one per event class, merged at read time, feed the dashboard and the ledger, so the loop has a visible surface.
Minimal to rebuildOne file per layer, checked into version control, each entry dated. The agent loads them before the first prompt of the session.
Minimal to rebuildA list of every reachable system with its auth method and last-verified date, because a token expires and nothing reports it unless something is checking. An entry past its freshness window is treated as unreachable until a probe says otherwise.
Minimal to rebuildOne folder per initiative; its docs, references, and scope live inside it. An agent working on it reads that folder and the routing file above it, nothing else. The boundary doubles as a test: two folders that keep reaching into each other are one initiative, or the boundary is misplaced.
Minimal to rebuildA folder of source-pinned notes and playbooks the agent reads before writing, never after: a model asked to check its own draft against a source finds agreement. Every note carries the source it came from; a note without one cannot be told apart from model output.
Minimal to rebuildOne append-only file: date, what was decided, what was rejected, and why. The rejected half earns its place because the alternative raised three weeks later has usually already been ruled out. Rows are added, never edited.
Minimal to rebuildOne document per unit of work. Fixed sections: the problem, done as numbered criteria, the decisions, and the evidence for each criterion. Numbers are assigned once and never reused: renumber on edit and criterion four means two different things in two sessions, and nobody notices, because both lists still look complete. Sessions end, the file stays.
Minimal to rebuildA folder per skill, a one-line trigger for routing, and the full body loaded on invocation. Loading on demand is what makes a large library free. The design work is in the trigger names and the boundaries: overlapping triggers make the model coin-flip, and neither owner notices.
Minimal to rebuildA hook is a script the runtime runs on its own at a fixed point in a session, without the model asking. That is deterministic control over the whole lifecycle: load context when a session starts, allow or refuse a tool call before it runs, record the result after, end the turn or keep it going, clean up when the session ends. A rule that must hold is written as a hook, because a hook is code and can refuse; the same rule in a prompt is only a suggestion the model can reason past.
Boxed points are hook events, fired by the runtime on the event itself, not by the model; "the tool runs" and "skipped" are outcomes, not hooks. Several events can block their step: PreToolUse denies a tool so it never runs, UserPromptSubmit rejects a prompt, Stop keeps the turn going.
Minimal to rebuildA local server reads the event files and renders them live. It stores nothing of its own, because a second copy would create a second source of truth. The dashboard shows current work and failures without requiring the operator to read raw event logs.
Minimal to rebuildOne raw, timestamped envelope per captured item, never edited; shape comes later, because capturing into a schema decides what mattered before the question exists. Processing reads the envelope and writes derived files elsewhere. One document says, for each kind of input, where it lands and how to read it back.
Minimal to rebuildEach capability starts as a CLI tool with flags, and the prompt only calls it. Keep deterministic behaviour in tested CLI code. When a fixed option moves into free-form prompt text, the behaviour can no longer be tested directly. Judgment stays in the model only where code cannot decide.
Minimal to rebuildIssues in a local database, a claim and close flow, and sync over the git remote on its own ref. The file checked into the repo is an export, not the source of truth.
Minimal to rebuildA trigger (cron, webhook, queue). A runtime that outlives the session. Credentials scoped to the services the job touches. Structured logs and a health check that alerts on failure. Provisioning in code, so the plane is reproducible rather than a pet.
Triangle = a trigger. Dashed frame = the always-on plane. Faded box with an X = the local session it cannot run on. The runtime, its health checks, and its provisioning are all code, so the plane is reproducible rather than a pet.
Minimal to rebuildMarkdown instructions, a coordinating agent host, and single-purpose scripts with one job each. Impose the shape on purpose, or twenty automations grow twenty shapes and none of the work on one carries to the next.
Plain box = a deterministic step. Green dot = a model call. The agent coordinates and never does the granular work. Any agent host can fill that role, because the interface is the filesystem.
Minimal to rebuildOne job per tool. A name, a typed schema for the arguments, and a description written as a contract, since the model chooses the tool from that one sentence. Validate the arguments before running, never after.
Green dot = the one model call. The model only ever asks; the arguments are validated before the body runs, never after. The body can be any language, and because the runtime runs JavaScript a TypeScript tool drops in with no seam.
Minimal to rebuildIdentify what broke, fix the tool, verify the fix, update the workflow, and repeat while nothing depends on it yet. Run representative inputs until further tests reveal no new failure class. Only then deploy. The deployed automation reports failures; it does not rewrite itself.
Green dot = the agent's model call. Every loop names one tool to fix and one workflow line to harden, while nothing depends on it yet. Deployment starts after repeated test runs reveal no new failure class.
Minimal to rebuildFreeze the workflow and lock the tools, then ship those to the runtime. The build-time agent stays behind, its coordinating judgment spent. What runs is a fixed order of bounded tool calls, supervised by the runtime, not by a model deciding live.
Green dot = the build-time agent's model call. Only the Workflow and the Tools cross the seam, as locked artifacts. The agent does not: its coordinating judgment was a build-time role, and the runtime supervises what runs instead.
Minimal to rebuildThe order is deterministic; the steps are not, because fixing their order does not make any single model call exact. Evals score each step against known answers and prove the variance is low enough, and structured output with validation catches the rest. Fixed shape, bounded steps, measured: reliable, not deterministic.
Green dot = a model call. The arrows are the order you fixed, so the shape is deterministic. The steps inside stay probabilistic, and the eval under each one proves the variance is low enough. Fixed shape, bounded steps, measured: reliable, not deterministic.
Minimal to rebuildTwo things share one word: the build-time assistant that writes the automation, and a model choosing tools live inside it. Before arguing whether an agent is needed, say which you mean. The runtime kind picks its tools while it runs, so no test pins the path down and every run bills a model; it is earned only when the flow is genuinely unpredictable. Most automations need only the first.
Green dot = a model call. Dashed line = the deploy seam. Only the workflow and the tools cross it. The runtime agent is optional and earns its place only when the control flow cannot be drawn in advance.
Minimal to rebuildDraw the complete process before opening the builder. If it can be drawn as a flowchart before execution, build a workflow with that fixed order. Code chooses the next step; a model may classify or extract data inside one step. Use an agent only when an input creates branches that cannot be named in advance.
Green dot = a model call. Plain box = a deterministic step. The branch is the whole test: a flow you can draw in advance is a workflow, and only control flow discovered at run time earns the agent.
Minimal to rebuildPut a durable runtime on the outside and the thinnest agent loop you can own on the inside. Durability is a property of the frame, not of the loop, which is why the runtime is the layer to choose deliberately rather than inherit from whichever framework you started with.
Green dot = a model call. Dashed frame = the durable runtime. What decides is where the durability boundary sits. A framework can suspend a workflow; a managed durable runtime checkpoints a job at its waits and resumes from there after a crash, though a self-hosted runtime trades that away.
Minimal to rebuildChoose the lowest ownership level that meets the requirement. Keep the bundle, then take back the database, frontend, API, or deploy stack only when the future maintainer, tests, UX, scale, compliance, or operating model requires it.
Dashed arrows mark optional transitions. Keep the bundle, then take back only the layer whose requirements justify the added ownership.
Minimal to rebuildWrite the instructions as markdown the agent reads. Keep the code underneath as tools it calls. A capability that lives only in code cannot be handed to a colleague, read in a diff, or corrected by editing a paragraph.
Plain box = a file the agent reads. Dashed frame = the directory boundary. The skill is the container and the workflow is one file within it, which is why promoting a workflow means giving it siblings, a description, and somewhere for its tools to live.
Minimal to rebuildA map file under two hundred lines, a router per stage with an inputs and outputs table, reference material apart from output.
The dashed line separates reusable configuration from files produced by individual runs. Otherwise each run reprocesses stable inputs and temporary output is loaded as permanent context.
Minimal to rebuildSplit the job at its natural waits and key each piece. A crash between waits has no snapshot to resume from, so the only thing a retry can actually use is the seams you cut. The decomposition is the durability.
Triangle = a trigger. Plain box = a deterministic step. Dashed arrow = what a retry actually does. No runtime saves the top track; a retry can only skip what the job was split into.
Minimal to rebuildA skill on your machine runs once, start to finish, while you watch. A durable runtime buys two things a local run cannot: a crash resumes instead of restarting, and the job can pause for days at a human decision. That pause is what real human-in-the-loop needs.
Triangle = a trigger. Plain box = a step. Dashed frame = the durable pause. A local run goes start to finish in one pass. A durable runtime checkpoints at the wait, holds for a human decision across hours or days, and resumes when the answer arrives.
Minimal to rebuildA human-followable audit is a visual trail someone opens and reads. A machine-correctness audit is exactly-once, crash survival, idempotent side effects. Read the requirement, decide which of the two it names, and build for that one.
Dashed frame = a zone of guarantees. No model runs in this picture, so no accent dot appears. Read the compliance requirement and decide which of the two it names before building for either.
Minimal to rebuildDeclare the tools, translate each call to a request, and keep the adapter empty. A capability the service lacks is a change to the service, not to the adapter; the moment the adapter grows a rule of its own, the behaviour lives in two places.
Green dot = a model call. Dashed frame = the adapter, which must stay empty. The moment it grows a rule of its own, you have two places where the behaviour lives.
Minimal to rebuildKeep descriptions factual, scan the config before wiring it, and treat every external declaration as data. Reading a config can mean running it, because a local server entry is a command line, though a remote server reached over HTTP starts nothing locally.
Dashed arrow = an untrusted path into the context. External content is data, never instruction. Descriptions stay factual, and a config is scanned before it is wired in.
Minimal to rebuildWrite the flowchart first. If every branch can be named before the model runs, build the workflow. Reach for an agent only when naming the branches is the part you cannot do, and price the swap: latency, tokens, and error that compounds each pass.
One decision picks the branch. The green dot marks a model call: the workflow has them too, but you fixed their order. The agent zone is drawn smaller because it is the exception, taken only when the order cannot be written down.
Minimal to rebuildA goal, a success test, a bounded tool set, and a stop rule. The model picks a tool, the tool returns a real result, and the result feeds the next decision. Without the success test the loop has no exit; without the stop rule it has no ceiling.
The green dot is the one deciding model call; tools and results are deterministic. The dashed arrow is the loop: each pass decides from what actually came back, and the success test or the stop rule ends it.
Minimal to rebuildChain when the steps are known. Route when inputs differ in kind. Parallelize when pieces are independent. Orchestrate when the split itself needs judgment. Add a judge loop when quality has to be checked. Every rung keeps the order yours; only the agent takes it.
Every rung inside the dashed zone is a fixed pattern: you still wrote the order. Only the top rung leaves the zone and hands the order to the model. The rule reads along the ladder: take the lowest rung that solves it.
Minimal to rebuildOne coordinator splits the work; each worker runs in its own clean context, so the pieces cannot contaminate each other and a dead end stays local to its worker. The merge point is the only place results meet.
Each dashed zone is one worker's own context; the zones never connect to each other. One green dot per model call: the coordinator decides the split, a worker decides only inside its piece, and the results meet in one place.
Minimal to rebuildSandbox first, so a mistake costs nothing real. Tool results as ground truth, so each pass decides from what actually happened. A human checkpoint before anything live. A hard cap on passes bounds what a stuck loop can spend.
The loop lives inside the dashed sandbox with a hard cap on passes. The only arrow out runs through a human checkpoint. What autonomy costs (latency, tokens, compounding error) is paid inside the zone, never on the live system.
Minimal to rebuildStrip any agent product to its parts and the same three remain: instructions, a model, a tool surface. Compare frameworks on what they hand you around those parts: who runs the loop, what stays on, what ships. The parts themselves are never the difference.
The dashed shell is the only part that varies. Instructions, a model, and a tool surface are the whole anatomy; a framework hands you these parts differently, it does not change them.
Minimal to rebuildThe file wiring is fastest to stand up and the harness carries state, permissions, and recovery for you. The code wiring costs more and returns ownership of the surroundings: your program decides where it deploys, what wraps each run, and what happens with the result. Pick by who has to own the thing, not by which demo runs first.
The definition is the agent. Hand it to a harness as a file, or embed it in your own program through a framework: both paths converge on the same loop. The difference is whose process it runs in, and who owns the state, deployment, and code around each run.
Minimal to rebuildFour supplies, all from the host: a trigger, an always-on plane, an identity with its own credentials, and bounds. A definition file in a repository names all three anatomy parts and has none of these. That gap is why an agent that works in a session is not yet an agent that runs alone.
Nothing in the anatomy runs by itself. The host supplies the trigger that starts a turn, the plane that stays on, the identity with its own credentials, and the bounds. Move the same agent to a host without these and it is a tool waiting to be called.
Minimal to rebuildA session is for building and driving. A gateway is for a standing presence: reachable on your channels, acting on a heartbeat if wanted. A job runtime is for unattended work in bounded runs. The same definition moves between all three; what changes is what alive means.
The session is where an agent is built and driven. The gateway holds a standing presence: it answers on the channels you already use, and a heartbeat lets it act unprompted. The job runtime wakes it per trigger and reclaims it after. Same definition on all three; the host decides what alive means.
Minimal to rebuildOne question per process: what breaks if this stops. If the answer is nothing, delete it and move on.
One question decides it. Deleting returns the time and leaves nothing to maintain. Automating is the branch that commits you to owning the thing forever, which is why it is the last resort, not the first.
Minimal to rebuildFive headings on one page, filled in before any tool is opened: trigger, sources, transformations, branches, destination.
The five headings you fill in before opening any tool. Nothing here runs a model; it is a paper exercise. If the process will not fit these boxes, it is not yet understood well enough to build.
Minimal to rebuildTag each step with its kind. The model call is the expensive one, earned only for reading or classifying; if a rule or a filter does the step, it is not a model step. The rest are code.
Triangle = a trigger. Each box is a kind of step; the green dot marks the model call, the one paid step, earned only for reading or classifying. Canvas or code, the kinds are the same.
Minimal to rebuildLabel each step with who decides. Say up front what runs alone, what a human reviews, and what nobody automates. Pick the lowest rung that still clears the requirement.
Green dot = a model call. Each rung up hands the model more of the decision, so the dots climb with it. Take the lowest rung that still clears the requirement; the top rung, full autonomy, is rarely the goal.
Minimal to rebuildOne number, measured before and after, written down before the first line of code.
The number is named before the first line of code and measured against itself after the run. A number that never moves is the signal the automation was not worth building, and with no number there is no such signal at all.
Minimal to rebuildCount the model calls on the critical path. Every extra one multiplies its error into the result, so keep the model for the single judgment only it can make and hand the rest to code that scores a hundred percent every time.
Green dot = a model call. Plain box = a deterministic step. The top row lets the model perform every step. The bottom row lets it orchestrate one and executes the rest in code.
Minimal to rebuildEvery step takes one input and returns one output. Build the deterministic pieces first and add a model call only where nothing else works, one job per call. A broken step then holds its own bad output, and nothing else has to be read to find it.
Green dot = a model call. Plain box = a deterministic step. One generalist call degrades on every job at once. Split the work into small steps and only classify needs the model; a break is contained to the step that holds the bad output.
Minimal to rebuildNever wire the whole chain and test it at the end, where a failure has no single address. Run each step on real input, read what it actually returns, and only then write the step that consumes it.
Green dot = a model call. Each step is built, run on real input, and its actual output read before the next step is written against it. Wire the whole chain first and the failure surfaces only at the end, with no single address.
Minimal to rebuildEach stage widens only on evidence from the one before it, because a demo proves the happy path exists and says nothing about the tail. Start at a tenth of the volume, review every output, and route the uncertain cases to a human instead of guessing.
Plain box = a stage. No model call is drawn here, so no accent dot appears. Start at a tenth of the volume, review every output, and route the uncertain cases to a human. Each riser opens only on evidence from the stage below it.
Minimal to rebuildIts own identity makes an action attributable, and a scoped key makes a mistake bounded. Give it separate credentials, read-only until write is justified, minimal scopes, and a log of everything it did.
Plain box = a scope. Dashed box = a scope opened only when justified. Faded box with an X = the account it must never borrow. Read access is the default, write is earned, and every action is logged under the agent's own name.
Minimal to rebuildThe work already spent on it is not part of the decision. An automation demanding weekly repair has moved from asset to liability. Track what it costs to keep running, and dismantle it when that exceeds what it returns.
Plain box = a factor in the decision. Faded box with an X = the sunk cost that stays out of it. An automation that needs a patch every week, or costs more attention than it returns, has moved from asset to liability.
Minimal to rebuildA webhook trigger, an enrichment step, a scored route, and a drafted reply.
Minimal to rebuildA presets file that fixes how many queries and how many sources each depth level gets, and a verifier that holds the rules for judging a source. The steps around those two move data between them.
Minimal to rebuildRules first, a model on the fall-through, then a draft. Surface only what needs a decision.
Minimal to rebuildAn agent loop with tools and memory runs inside a durable task that handles retries and waits. I record why this automation uses a runtime agent, because my default is a workflow with a fixed order.
Minimal to rebuildA schema strict enough that a filled instance is either valid or rejected, and a renderer with no model in it.
Minimal to rebuildGive a looping agent the target and how success is checked, plus what must not change, then leave the path open. It is weaker than its operator at what to build and stronger at how, so scripting the steps turns it into a slow typist.
Green dot = the model call. Dashed line = the loop that runs until the test passes. The agent receives the goal, success test, allowed tools, and stop rule. It chooses the intermediate steps because those steps cannot be fixed before the run.
Minimal to rebuildAn append-only ledger with each row hashed onto the row before it, and a claim validator that rejects an answer whose citations do not resolve to the snapshot that was retrieved. Build those two first, because the signing and the report bundles that sit on top of them are only worth as much as they are. Low-evidence retrieval refuses before the model is ever called.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Dashed arrow = a read-back. Only one box in this picture is a model, and it is the only one that cannot be replayed exactly. Everything the replay compares was recorded before it ran.
Minimal to rebuildOne route ingests the datasheets, one answers queries, and one runs the evaluation. A separate parser derives the test questions and expected answers. The retrieval system never sees that parser, so its answers are graded against an independently produced reference. Another 183 parts stay outside the index to test whether the system refuses instead of using a neighbouring part. The fused primary-key lookup scores 1.000; dense retrieval alone scores 0.643.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Embedding is the only model call; the fusion is plain code. The questions are generated from the datasheets by a parser the system under test never sees, so the label and the answer come from different mechanisms, which is the only reason grading one against the other means anything.
Minimal to rebuildOne node that gathers every intel source in a single Promise.allSettled, and one model read over the combined result. A seventh source then costs a hundred milliseconds of parallel HTTP and no model overhead. Split enrichment back into per-source turns and the token curve bends the wrong way again.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. The top rail is the cost being avoided; the bottom rail is the workflow. The whole idea is one line of code: replace four model round-trips with one Promise.allSettled and a single read.
Minimal to rebuildA canonicalizer, a hash over the signed scope, and a signature check against a fixed registry. Then the part that earns its keep: when an expected byte does not reproduce, write the section number, not just a failing assertion. When bytes differ, I first check whether the verifier is wrong. I report a specification problem only after the verifier itself reproduces correctly. It holds no wallet and no keys, because a verifier that can transact is one that has to be trusted.
Triangle = a trigger. Plain box = a deterministic step. Dashed frame = a zone. Dashed arrow = a read-back. No model runs here, so no accent dot. The output that earns its keep is the section-referenced disagreement, written back to the standard in its own numbering.
Minimal to rebuildA voice provider that emits tool calls, and a server that verifies the webhook signature before doing anything. Everything a wrong answer would cost, booking and escalation, lives on the server side of that boundary, where a test can reach it.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. The one accent dot is the whole voice stack, and it is the only part that guesses. Booking, transfer and signature checks are code, which is what puts them inside the reach of the 156 tests.
Minimal to rebuildExtraction, schema validation, and a confidence threshold that sends the uncertain parses to a queue instead of passing them through. The correction is stored back, so a later invoice from the same vendor retrieves it as a prior. The pipeline improves because a human closed the loop, not because the model got better.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Dashed arrow = a read-back. Remove the gate and the pipeline still runs, but it stops reporting which answers it was unsure about.
Minimal to rebuildA sandbox with a timeout and a memory limit, a way to register tools as typed interfaces, and one entry point that runs a model-written chain and returns a single result. Isolation is not optional: the model is writing the code that runs, so the sandbox boundary is the security model.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. The model call is authoring, not orchestration. The saving is not fewer tools, it is the model reading their combined output once instead of replaying it after every call.
Minimal to rebuildA generator that reads the spec once at a pinned commit and emits a committed index, which the running server loads by static import. Every response is stamped with the spec commit, so a caller knows which words they got.
Triangle = a trigger. Plain box = a deterministic step. Dashed frame = a zone. No model runs here, so no accent dot. Drift is caught by a blocking job that re-derives the hash, which is what makes the pin a lock rather than a label.
Minimal to rebuildA planner, an executor, and a reflector, run once in a line. The saving is assigning the strong model to exactly one of the three roles, not to all of them. The reflection has to score plan coverage, source quality and contradictions, or it is a rubber stamp.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Three model calls, and only the middle one needs to be strong. The reflection is a final self-critique that flags gaps in the draft; the three phases run once, in a line, not as a loop back into execution.
Minimal to rebuildOne layer that blocks the obvious injection, hooked into the gateway so it runs on every inbound message. Then add layers for the classes the first one misses. The install-time validate check is what stops the whole thing from being decorative.
Triangle = a trigger. Plain box = a deterministic step. Dashed frame = a zone. The runtime is external, so no accent dot marks it. With six independent layers across the agent's lifecycle, defeating one still leaves five.
Minimal to rebuildA reproducible topology, a hardening checklist, and a scope statement that names what the artifact does not claim: not a turnkey runtime, no earnings, never run under sustained load. The scope statement is what makes the rest safe to publish under a real name.
Plain box = a documented component. Dashed frame = a zone. No model runs here, so no accent dot. The right column is drawn at the same size as the left, because what the artifact does not claim is part of the artifact.
Minimal to rebuildPick the boundary first, then the projects. Name the regulatory line explicitly, place each reference on the safe side of it, and write down what the templates refuse to claim. The boundary is the design input, not an afterthought.
Plain box = a documented option. Dashed line = the boundary. No model runs here, so no accent dot. The interesting decision was made before any code: the three references exist because they are the infrastructure a solo operator can run without stepping over the licensing line.
Minimal to rebuildA read path that is always open, and a write path that is closed until a specific grant opens one action. The act path leaves a proof packet; the preview simply spends nothing.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. The model decides, but the decision does not reach the chain without a grant. The proof packet is written when the agent acts; the no-spend preview returns no record.
Minimal to rebuildAn always-on process that relays messages to the CLI and back, plus a memory store so a new session is not a blank one. Guardrails come next: once it is reachable from a phone, refusing the wrong action stops being optional.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Dashed arrow = a read-back. The CLI is the same tool it always was. What changed is where it lives: the bridge keeps it up, the memory survives the session, and the guardrails gate the bridge's own operations, though not the CLI's native tools, while you are away.
Minimal to rebuildA verifier that proves a host is healthy and a harness that detects when it has drifted. Setup and recovery wrap those. It holds no tenant inventory and no live fleet data, because an operator kit that carries a customer's secrets is a liability.
Triangle = a trigger. Plain box = a deterministic step. Dashed frame = a zone. The runtime is upstream, so no accent dot claims it. The deliverable is the operations layer, and the dirty-host detection is the part a naive kit skips.
Minimal to rebuildA labelled corpus of synthetic German cases, scored field by field and cell by cell, with every number naming its provider and model. The corpus now runs the real extraction path, so the score is a measurement: 264 of 264 fields, 161 scalar and 103 table cells.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Dashed arrow = the corpus feeding the same extraction path. Every accuracy result is compared with a labelled set of expected fields and table cells. The corpus runs through the real extraction path, so the number is measured, not asserted. A headline accuracy figure still means nothing until it names the provider and model that produced it.
Minimal to rebuildOne node lets the model write a tool chain that runs once instead of calling each tool through another model turn. In the measured five-tool workflow, eleven model calls fell to one. The difference grows when more tools would otherwise require more model round-trips.
Plain box = a measured value. Green dot = a model call, marked at every pipeline size on the code-mode row. The accent stays flat across all four columns while the traditional row climbs, because each traditional tool replays the whole conversation and code-mode does not.
Minimal to rebuildA terminal-based loop writes, deploys, tests, and debugs the workflow. The verification writes a workflow from the terminal, deploys it, and runs that same workflow on the runtime without opening the visual editor.
Triangle = a trigger. Plain box = a deterministic step. Green dot = a model call. Dashed frame = a zone. Dashed arrow = a read-back. The one accent dot is the runtime model call, now singular. The debug arrow loops to write, because code-first means the fix is an edit, not a drag.