Shippers.

shippers ecosystem · field note 01 · rev 2

loop
engineering

revised jul 2026 · the term died in six weeks · the practice didn't

you stop prompting the agent by hand. you build the system that prompts it for you. the leverage moved off the keyboard and into the harness. six weeks after this note shipped, the timeline renamed the whole thing. the funeral is inside.

build it. ship it. move on.

scroll
prompt context loop graph

the shift

prompt → context → loop → graph

  1. 01

    prompt

    write the right words for one turn.

  2. 02

    context

    control what the model sees each turn.

  3. 03

    loop

    design the system that decides the turns and keeps it running.

  4. 04

    graph

    wire the loops into an org and route between them in code.

each wraps the last, and each label sits one layer further from the model. named and renamed 2023 to 2026: osmani, karpathy, cherny, steinberger. the outer ring lasted six weeks before the next one grew round it.

the mechanic

one cycle, repeated

repeat goaldone-when contextwhat it sees acttools, edits observeread result adjustrevise plan theloop
repeat · not donestop · done or blocked

a real loop checks against a done-when, reads its own result, and knows when to quit. if the only verifier is the model grading its own output, you don't have a loop. you have a model complimenting itself with extra steps. the check needs to be external: a test suite, a linter, a human. strip that and it stops being a loop. it becomes a runaway.

anatomy

what separates a loop from a runaway

six parts. miss the last two and you have a token furnace nobody is watching.

/ done-when

the goal

a hard finish line it can test against. no target, no loop.

/ observe

read the result

it reads test output, the diff, the logs. fire-and-forget is not a loop.

/ triage

error sorting

recoverable: bad import, retry. hard blocker: missing creds, hand off.

/ stop

stopping rules

max iterations, a cost cap, or done. the difference between a loop and a runaway.

/ state

memory

it remembers what it already tried, so it does not circle the same wall.

/ heartbeat

liveness

it emits a pulse so you can see it is alive. if it can go quiet, it is not finished.

rev 2 · the funeral

the term died in six weeks

this note shipped in june calling the loop the outer ring. by the 18th of july, steinberger's twelve words asked if we'd shifted to graphs yet, 2.9 million views did the rest, and loop architectures got relabelled legacy debt inside a fortnight. the page you're reading outlived its own vocabulary. good. the vocabulary was never the asset.

~30 months ~12 months 6 wks ? prompt 2023 rip context mid 2025 rip loop jun 2026 rip graph jul 2026 sep?

why six weeks. hype used to die at the speed of deployment: falsifying big data meant buying a hadoop cluster and burning quarters before you learned it didn't help. falsifying loop engineering cost a weekend. the tooling was on every laptop, the model was an api call, a serious attempt cost tens of dollars. thousands of builders ran the same experiment in the same fortnight, hit the same walls, and the reports synced. testing cheap plus a claim crisp enough to kill compresses a decade into six weeks.

the corollary is the useful bit: rag never got a funeral because "retrieval helps" is too vague to falsify. the vaguer the claim, the longer the zombie walks. so read the renames as a map of what the industry keeps admitting it hadn't modelled, and never mistake a rename for a capability. nothing shipped in july that couldn't be built last year.

operating rule: chase the durable layer, let the vocabulary churn. the next rename is due before the invoice clears.

rev 2 · graphs, honestly

every node is still a loop

a graph splits one loop into several smaller ones and routes between them with code instead of model judgment. draft node, review node, veto node, edges deciding what runs next. software engineering has had a name for this since the 1970s: a state machine. langgraph, autogen and google's adk shipped it years before the hashtag. and the honest caveat cuts the other way too: most tasks are one job with one verifier, and that's a loop. reaching for a graph before the work forces you is buying a distributed-systems problem you didn't have.

genuinely new / 01

parallel fan-out

branches run concurrently instead of one agent grinding through everything sequentially. already doctrine here: independent work never queues, fan it out.

genuinely new / 02

routing in code

which agent runs next lives in code you can read, not inside a model's reasoning. when something goes sideways you see which edge fired. this one is the actual gap.

coordinator spec'd · unwired ↑ this edge fired researcherenrich · own memory closersequence · gate conciergerespond · verify long-gamenurture · patient strydeoutreach · shipped may 2026 · a graph before the word existed

so here's the honest score. you shipped one of these in may and called it a fleet: four specialised nodes, own memory each, coordinated rather than chained. the fan-out half of the bundle has been doctrine for months. the half you're missing is the readable routing: coordination between the legs still lives in model judgment and your head. that's not a rebrand problem. that's a debugging problem, the day an edge fires wrong and nothing can tell you which one.

rev 2 · the durable layer

what survives the renames

every paradigm on the map ran on the same baseline and the next one will too. whatever wins in september still needs state that outlives a crash, a record of what the agent did that someone can read afterward, and an identity that isn't borrowed. that trio is the spine while the vocabulary churns. score the fleet on it, not on the hashtag.

/ durable state

outlives the crash

a two-hour run that dies at minute 90 must not evaporate. state lives in supabase and leaf modules, re-entered warm, not re-derived.

have · supabase

/ readable record

run tracing

every pass on the record: what ran, what it cost, which path it took. rev 1 parked this as the tier beyond. wrong call. it's the spine. promoted.

thin · not wired

/ identity

not borrowed

most agents operate on borrowed credentials. yours hold their own inboxes, their own addresses, their own thread history. agentmail did that early.

have · agentmail

and the identity column pays twice: an inbox with persistent threads is a memory the agent already owns. recall before act. search your own history before composing. the memory dial moves without waiting for agentdb.

in your bag already

you shipped three loops and called them agents

nemoclaw

the first one, and it's basic

write, test, fail, fix, green. does its one job, nothing more. kept for what it taught you. the logic-gap-harness is what replaced it.

write → test → fix → green · superseded

strydeoutreach

a fleet, not a pipeline

the four legs are each their own stack-complete agent now, own memory, gate and verify, coordinated rather than chained. more machine than pipeline. see it drawn as a graph above.

researcher · closer · concierge · long-game

sentinel

a monitoring loop, for now

watches the stream, matches the rule, fires the alert to telegram. bespoke, cache-bound, about to be rebuilt as the coordinator.

watch → match → alert · promoting

you had the loops running. you were just out of the loop on the word for them. orchestration over model selection was loop engineering before june gave it a name, and a graph before july gave it another.

the easy version

the coding loop

↩ fail loops back to fix, not back to you

one-shot codegen cannot see its own failure. the loop can. that is the whole point. roots in react: reason, act, observe, repeat.

non-code version, same shape: pull from a few sources, summarise, flag what's off, format, ping telegram, check for replies, loop. six steps, zero re-prompting between them.

the floor

ralph is the floor

ralph is the dumbest loop that works. geoffrey huntley ran a coding agent in a plain while-loop against a written spec. pick one task, do it, loop. no orchestration, no subagents, no cleverness. that is the floor, and you cleared it months ago. nemoclaw, strydeoutreach and sentinel all sit above it. the question was never how to start a loop. it is how good the loop is.

ralph.loop
while not done():
    task = pick_next(spec)      # one task per pass
    implement(task)
    if validate():            # read the result
        commit(task)
    else:
        fix()                  # recoverable
    if blocked() or passes > 10:  # stop rule
        handoff()

caution / branch-safety

never on main

a loop running unsupervised on a live client repo is an agent guessing past a gate. branch off, cap iterations, keep it off trademind main.

caution / cost

loops multiply spend

every pass is a full model call plus context. cap iterations and cost. keep fable for the hard legs, drop to opus or sonnet for routine passes.

the real lever · benchmarking

the model is not the bottleneck. the harness is.

performance = model × harness

the model is rented and fixed. you run the same weights as everyone else. the harness is the part you own, and on identical weights it swings the result up to 2x on its own. that swing is five dimensions. here is where yours actually sits. strydeoutreach is the high-water mark to measure against.

contextstate lives in supabase and leaf modules, not re-derived every turn.doing loads
tool depthdependency-injected adapters: deepgram, supabase, twilio, mcps. real calls, not hallucinated outputs.doing loads
verificationthe end-stage gate refuses "done" without a verify command, and the logic-gap-harness reviews adversarially. live now, hardening.live now
memoryagentdb and obsidian-cli recall are planned, not wired. interim now live in principle: agentmail-bound agents search their own thread history before composing. the rest still restarts cold.thin · moving
coordinationindividual loops run. no coordinator sits above them yet, routing lives in model judgment, and strydeoutreach's agents are still unwired.thin

verdict: model-rich, orchestration-literate, verification gone live. the leak that's left is memory and a coordinator. that's the last stretch to a jarvis.

shippers · the fuel line

the loop that guards the money

your build engine is loud. the billing and distribution behind it is quiet, and quiet on those dials is the failure mode. the highest-value shippers loop is not another build. it is the watchdog. extend sentinel into a 7am brief that patrols the fuel line while you sleep.

sentinel · 7am brief

watchunsent invoices past 24h on a closed milestone, milestone gates with no invoice raised, bark drops and contra leads going cold.
gatea rule fires only when a dial goes red. green stays silent.
actdraft the invoice, surface the blocked gate, queue the dropped follow-up to telegram.
stopnothing red, nothing sent. you wake to signal, not noise.

this is ship one of shippers jarvis. it guards the money before it touches the code.

stryde · ava

the intake loop you already wrote

ava's brain is a confidence-gate loop, and you wrote it last night. the trademind intake-classifier is the same shape: perceive the call, classify the job, gate on confidence, act or escalate, verify the read-back. dependency-injected the whole way, so it drops into spires without touching a line.

↩ below 0.7 it loops to clarify, then escalates to a human

the gap claude code flagged on the build is the same gap here. there is no stopping rule. when the clarify loop fails three times it has to bail to a person, not circle the drain. add the max-turns bailout and ava is loop-complete.

driiva · counsel + misc

case triage, and the personal spine

driiva · counsel

the triage loop

counsel runs on cloudflare workers and supabase. legal cannot skip the gate, so the human sign-off is load-bearing, not optional.

ingest → extract → classify → draft → human gate

misc · the spine

the recall loop

obsidian-cli reads the vault, agentdb holds what you have already done, the loop surfaces the next dropped thread. and the interim is free: every agentmail-bound agent searches its own inbox history before it composes. the memory dimension you are thin on, made real in two layers.

read vault → recall → surface → act

proof · live on strydeos

the verify gate is already yours

while this note was still telling you to add a verify gate, you'd wired one. your end-stage gate caught the agent using "done" language with no verification command run, and refused the claim. that is the stopping rule, live. then you built the logic-gap-harness on top of it.

logic-gap-harness · adversarial review

fanone reviewer per codebase × domain, in parallel.
refutean adversarial verifier attacks every finding. it survives only if it can't be refuted. defaults to "not real".
rankdedup, then sort by severity. signal, not a wall of maybes.
schedulehangs off a cron so gaps surface before you ever see them.

first run surfaced two live liabilities on a clinical app and held 147 of 147 tests green. that is not the apex ahead of you. it is the apex behind you.

the twist · you're ahead of this note

you already wrote the harness

this whole note has been teaching you to engineer the loop. you codified it months ago. agent-stack: eight layers, the enforcement triad, the per-pass loop and the pre-deploy double gate, a paste-ready harness, a canonical config with agentdb and agentmail wired, and a verify_stack.py that returns stack-complete or blocks the ship. it's on agensi. the five dimensions this note scores you on are a section in your own skill.

modelswappable. opus heavy, sonnet mid, haiku handoffs.
harnessrole, context, constraints, done-when. skill-router loads it at boot.
toolsthe mcp surface. the agent cannot act outside it.
commsagentmail bound. it transacts, not just observes.
memoryagentdb, three tiers. continuity across passes.
gateconfidence threshold plus a closer, between intent and action.
loopexplicit done-when, stopping rules, warm handover.
watchdogheartbeat and standup. quiet equals not finished.
youat the gates only. scope, pre-deploy, sign-off.

the note is late to its own subject. verify_stack blocks a hollow pass, the double gate refuses a bare "complete", and the harness question is closed.

what to build next · four buckets

one spine, not four builds

the tier above the harness is the three things agent-stack scopes out: a coordinator over the fleet, memory that compounds, and an eval harness that picks your model with data. you build one of them, in software, not all three at once. the other buckets do not need new builds. they need you to ship, distribute and protect what is already there.

softwarethe coordinator: sentinel promoted to run the gap-harness, reconciler and fuel-line watch. the frontier build, and it guards billing.do now
buildskeep shipping trademind, and run the sandboxed builder loop alongside it as a software bet. the rule that holds: it never blocks the paid milestone.paid · protect
kitsdistribution, not building. lemonsqueezy has zero buyers, that's a reddit problem. package the eval harness only once it has sold twice.distribute
strydeosfix the cross-tenant write, then the reconciler, then clinic one. clinical work is where verification rigour earns its keep.protect · sell

the shiny tier, reasoningbank memory and multi-node agentdb and fancy topologies, is the real technical frontier. you run a fleet now, so it is a parallel bet you dispatch alongside the paid work, not instead of it. the one rule that still holds: the fuel line stays watched while you build.

the frontier · a parallel bet

memory that compounds

since you asked for the deep end: the one technical step past everything you run is compounding memory. right now your agents persist state, they don't learn from it. reasoningbank closes that. the agent records the outcome of every pass and pulls a strategy recommendation before the next one, so it stops repeating what failed and doubles down on what worked. two wire points in the loop you already have.

reasoningbank
def perceive():
    strategy = rb.recommend(task.type, task.context)  # pull what worked before

def after_verify(outcome):
    rb.record(task, strategy, outcome, context)   # the agent compounds

the honest caveat here is technical, not a scarcity one: this pays off past 100 experiences per task type, so it compounds slowly. it is what eventually makes the jarvis builder build the way you would. dispatch it on top of a coordinator that already earns, in parallel with the paid work, not in the scraps left over.

the tier beyond it, when you get there: a sandboxed runner so the builder executes safely off your mac, real fleet orchestration. run tracing has been promoted out of this paragraph and into the spine. see the durable layer above.

→ software · the apex

real shippers jarvis mode

the north star is a loop that builds the app the way you would, minus the erroneous bits. a full-stack and devops operator that reads the spec, plans, builds one step, verifies it hard, then takes the next. the verify gate is what strips the errors. this is not a fantasy and it is not new architecture. it is agent-stack aimed at a whole build instead of one module, with the routing drawn as edges and every pass on the record.

jarvis.build
spec = load("build-plan.md")        # source of truth
while spec.open_tasks():
    task   = graph.route(spec)      # edges in code, not vibes
    branch = checkout(task.id)      # never main
    subagents.fan_out(task.parallel) # parallel where independent
    implement(task)
    if not verify(typecheck, tests, lint, e2e):
        reflect_retry(max=3)        # recoverable
        if still_failing: handoff()   # stopping rule
        continue
    commit(task); push(branch)      # breadcrumb every pass
    trace.record(task, cost, path)  # readable afterward
    if cost.exceeded(): handoff()    # cost cap

one next action · amended rev 2

the move is still the coordinator. rebuild sentinel as a stack-complete agent off agent.config.json: on a cron it runs the gap-harness, the identity reconciler and the fuel-line watch, dedups, sends red only to telegram. one build closes three holes.

two lines added to its spec since rev 1, and they are the only thing july's rename actually earned: routing lives in a readable table, explicit edges, not model judgment, so when it goes sideways you can see which edge fired. and every run writes a trace row, cost and path on record. the coordinator ships the dial, the routing upgrade and the durable record in one pass. everything else on the timeline is weather.

build it. ship it. move on.

shippers · loop engineering field note · rev 2, jul 2026 · sources: kilo · lushbinary · cobusgreyling/loop-engineering · aibuilderclub graph guide · langchain · explainx