[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"sanity-0wj8Nb02oz9raelwAA47jJYFwGh4PrFfVgL5CyedqhA":3,"sanity-SMzeR91xHBCz1Jeg8_tbZt3ZygtrIJCmz0b3hXWG_jA":1290},{"data":4,"sourceMap":-1},{"latestPodcast":5,"latestReleases":14,"post":39,"recent":1265},[6],{"_id":7,"publishedAt":8,"slug":9,"sponsored":12,"title":13},"8e6c3a8a-3d27-44c8-be90-0b74d1090a4a","2026-10-06T17:00:00.000Z",{"_type":10,"current":11},"slug","tales-from-the-2026-developer-survey-results",null,"Tales from the 2026 Developer Survey results",[15,21,27,33],{"_id":16,"publishedAt":17,"slug":18,"title":20},"7a2d88e5-ee53-4f7c-a46e-47bed1cebadf","2026-09-30T16:00:00.000Z",{"_type":10,"current":19},"anyone-can-start-building-verified-knowledge-with-stack-internal","Anyone can start building verified knowledge with Stack Internal",{"_id":22,"publishedAt":23,"slug":24,"title":26},"12c6a8a7-135f-401f-ac1a-1c26c33e69c0","2026-09-03T16:00:00.000Z",{"_type":10,"current":25},"security-control-and-accessibility-si-2026-6","Elevating security, control, and accessibility: Stack Internal 2026.6",{"_id":28,"publishedAt":29,"slug":30,"title":32},"adcf1bca-3295-4ac5-9b3c-23f337974190","2026-07-30T15:10:00.000Z",{"_type":10,"current":31},"introducing-stack-internal-new-platform-experience","Your trusted knowledge layer: Introducing Stack Internal's new platform experience",{"_id":34,"publishedAt":35,"slug":36,"title":38},"eb5b66eb-9410-4329-83bb-22bbff39402a","2026-04-28T13:00:00.000Z",{"_type":10,"current":37},"turn-scattered-knowledge-into-trusted-intelligence","Turning scattered knowledge into trusted intelligence: Stack Internal 2026.3",{"_createdAt":40,"_id":41,"_rev":42,"_type":43,"_updatedAt":44,"author":45,"body":56,"comments":1176,"dateUrl":1177,"excerpt":1178,"image":1179,"product":12,"publishedAt":1183,"seo":1184,"slug":1187,"sponsored":12,"tags":1189,"title":1264,"visible":1176},"2026-10-07T20:08:54Z","7fdf107e-3649-4a6b-98c4-89788838cfbf","xIMqKAzcqVVQ3tqvS9HYP5","blogPost","2026-10-08T20:22:16Z",[46],{"_createdAt":47,"_id":48,"_rev":49,"_type":50,"_updatedAt":51,"employee":52,"name":53,"slug":54},"2026-10-07T20:10:11Z","c7434ebf-211a-49d5-a564-22a91d63ed1e","9fZfA2bz90M2vN1VVZP5Ov","blogAuthor","2026-10-07T20:12:01Z","none","Varun Jindal",{"_type":10,"current":55},"varun-jindal",[57,77,86,102,118,126,145,170,186,202,226,234,242,250,254,301,309,317,332,347,363,379,387,395,398,410,418,426,429,453,461,477,493,496,500,516,524,527,535,543,550,574,582,590,602,605,617,620,636,648,660,668,680,692,704,716,728,736,767,775,778,801,805,813,829,832,864,872,880,908,916,928,940,948,980,988,1000,1012,1024,1036,1048,1060,1072,1084,1096,1104,1128,1152,1160,1168],{"_key":58,"_type":59,"children":60,"markDefs":75,"style":76},"40aed4c00592","block",[61,66,71],{"_key":62,"_type":63,"marks":64,"text":65},"be518690ef39","span",[],"The first session with a coding agent is crisp: it reads the code, makes a clean change, writes a test. By the thirtieth, something has rotted — it re-discovers the same files, contradicts a decision it made three weeks ago, guesses the test command, and quietly stops writing tests because nobody made it. The fix isn’t a better model. It’s an ",{"_key":67,"_type":63,"marks":68,"text":70},"2eb75a342bbf",[69],"strong","operating system around the model",{"_key":72,"_type":63,"marks":73,"text":74},"28dbad6a39d8",[],": a constitution, an autonomy boundary, tiered context, durable memory, a review panel, and a post-edit hook.",[],"normal",{"_key":78,"_type":59,"children":79,"markDefs":84,"style":85},"84fcb40606ba",[80],{"_key":81,"_type":63,"marks":82,"text":83},"bfbb89d5b495",[],"Why the harness, not the model",[],"h2",{"_key":87,"_type":59,"children":88,"markDefs":101,"style":76},"db355c03c693",[89,93,97],{"_key":90,"_type":63,"marks":91,"text":92},"3a2ae1fdeb55",[],"A useful way to say it: ",{"_key":94,"_type":63,"marks":95,"text":96},"b0e6030c1e1b",[69],"the agent is the model plus its harness",{"_key":98,"_type":63,"marks":99,"text":100},"7c8df0972236",[]," — the prompts, the tools, the context policies, the hooks, the sandboxes, the sub-agents, the observability wrapped around the raw model. The model is maybe a tenth of what decides whether you get working software over a quarter; the harness is the rest. The evidence is blunt. On the public Terminal-Bench 2.0 benchmark, LangChain moved a coding agent from outside the top 30 to the top 5 — a jump from 52.8% to 66.5%, or 13.7 points — by changing only the harness (system prompt, tools, and middleware like self-verification and loop detection), keeping the same model.",[],{"_key":103,"_type":59,"children":104,"markDefs":117,"style":76},"bf6b6426dd22",[105,109,113],{"_key":106,"_type":63,"marks":107,"text":108},"8b689db66543",[],"Examined honestly, most agent failures aren’t just model failures — they’re ",{"_key":110,"_type":63,"marks":111,"text":112},"2a3827a1d0eb",[69],"configuration failures",{"_key":114,"_type":63,"marks":115,"text":116},"3e9fbcfd2e87",[],": a missing tool, a vague rule, an absent guardrail, a context window stuffed with noise. So when quality decays across a long project, the lever is almost never “wait for a smarter model.” It’s the harness — and unlike the model, the harness is yours to build. The rest of this post is the concrete one.",[],{"_key":119,"_type":59,"children":120,"markDefs":125,"style":85},"3be83853a5ee",[121],{"_key":122,"_type":63,"marks":123,"text":124},"2d85dff291c2",[],"The four things that decay (and the artifact that fixes each)",[],{"_key":127,"_type":59,"children":128,"level":142,"listItem":143,"markDefs":144,"style":76},"9c8f5f10c6d2",[129,133,137],{"_key":130,"_type":63,"marks":131,"text":132},"8e3a29774ace",[69],"Discipline",{"_key":134,"_type":63,"marks":135,"text":136},"c3a95c65cadc",[]," — skips tests, expands scope → ",{"_key":138,"_type":63,"marks":139,"text":141},"ecb73c6e34b8",[140],"em","a constitution read every session",1,"bullet",[],{"_key":146,"_type":59,"children":147,"level":142,"listItem":143,"markDefs":169,"style":76},"83b22c056424",[148,152,156,160,165],{"_key":149,"_type":63,"marks":150,"text":151},"eb3ff0fa6763",[69],"Context",{"_key":153,"_type":63,"marks":154,"text":155},"e28e436a02b4",[]," — re-learns the repo → ",{"_key":157,"_type":63,"marks":158,"text":159},"f5709635dc13",[140],"tiered ",{"_key":161,"_type":63,"marks":162,"text":164},"5583783e62b5",[163,140],"code","CONTEXT.md",{"_key":166,"_type":63,"marks":167,"text":168},"66d6247dc794",[140],", maintained by a hook",[],{"_key":171,"_type":59,"children":172,"level":142,"listItem":143,"markDefs":185,"style":76},"a3e23a9303b7",[173,177,181],{"_key":174,"_type":63,"marks":175,"text":176},"8923d608fb42",[69],"Memory",{"_key":178,"_type":63,"marks":179,"text":180},"d42ff0c14538",[]," — repeats corrected mistakes → ",{"_key":182,"_type":63,"marks":183,"text":184},"3eefd382f32b",[140],"durable per-fact memory files",[],{"_key":187,"_type":59,"children":188,"level":142,"listItem":143,"markDefs":201,"style":76},"642f6379e3e6",[189,193,197],{"_key":190,"_type":63,"marks":191,"text":192},"d3d68acc9716",[69],"Review",{"_key":194,"_type":63,"marks":195,"text":196},"b7d2e2949ef9",[]," — one blind spot applied uniformly → ",{"_key":198,"_type":63,"marks":199,"text":200},"59f2aa954e52",[140],"a multi-lens agent panel",[],{"_key":203,"_type":59,"children":204,"markDefs":225,"style":85},"5080813e8643",[205,209,213,217,221],{"_key":206,"_type":63,"marks":207,"text":208},"2acee3e9eb19",[],"1. A constitution (",{"_key":210,"_type":63,"marks":211,"text":212},"8af3117dbe2c",[163],"CLAUDE.md",{"_key":214,"_type":63,"marks":215,"text":216},"be37e7481f3f",[]," \u002F ",{"_key":218,"_type":63,"marks":219,"text":220},"02e567423d80",[163],"AGENTS.md",{"_key":222,"_type":63,"marks":223,"text":224},"b0c089d6c100",[],")",[],{"_key":227,"_type":59,"children":228,"markDefs":233,"style":76},"bce30ec48e0f",[229],{"_key":230,"_type":63,"marks":231,"text":232},"cdd07150adba",[],"A lean, always-loaded file stating the non-negotiables: the workflow loop (Plan → Document → Implement → Test → Review → Commit), the autonomy boundary, the quality bars (tests in the same diff, no dead code, conventional commits), and adapter discipline (no vendor SDK in domain code). Keep it short — it’s read on every turn, so every line costs context budget.",[],{"_key":235,"_type":59,"children":236,"markDefs":241,"style":85},"7c3e3f24ba4a",[237],{"_key":238,"_type":63,"marks":239,"text":240},"a336281f7b23",[],"2. An autonomy boundary, not a kill switch",[],{"_key":243,"_type":59,"children":244,"markDefs":249,"style":76},"31eede7c51dc",[245],{"_key":246,"_type":63,"marks":247,"text":248},"5e47a1081b68",[],"The highest-leverage single decision: let the agent run free on everything reversible, pause only on the two things that aren’t — pushing to a remote and deploying. As a permissions config:",[],{"_key":251,"_type":163,"code":252,"language":253,"markDefs":12},"b2a10ce7df28","{\n  \"permissions\": {\n    \"allow\": [\"Read\",\"Edit\",\"Write\",\"Grep\",\"Glob\",\n              \"Bash(git add:*)\",\"Bash(git commit:*)\",\n              \"Bash(npm test:*)\",\"Bash(npm run:*)\",\"Bash(npm ci:*)\",\"Bash(pytest:*)\"],\n    \"ask\":   [\"Bash(git push:*)\",\"Bash(npm publish:*)\",\"Bash(aws:*)\",\"Bash(terraform apply:*)\",\"Bash(kubectl apply:*)\"],\n    \"deny\":  [\"Bash(git push --force:*)\",\"Bash(git push -f:*)\",\"Bash(*--no-verify*)\"]\n  }\n}","json",{"_key":255,"_type":59,"children":256,"markDefs":300,"style":76},"b35fc4e6ace9",[257,261,265,269,273,277,281,285,289,293,296],{"_key":258,"_type":63,"marks":259,"text":260},"e7b31b49029b",[],"Now it works for an hour and commits a dozen times; you review at the push, not at every keystroke. The blast radius of “autonomous” stays bounded because the irreversible ops are the only gated ones. (Verify your runner’s match semantics — prefix vs substring differ — so ",{"_key":262,"_type":63,"marks":263,"text":264},"88f1f4339606",[163],"--no-verify",{"_key":266,"_type":63,"marks":267,"text":268},"befcbc8bb2fd",[],"\u002F",{"_key":270,"_type":63,"marks":271,"text":272},"cc0feccc2368",[163],"--force",{"_key":274,"_type":63,"marks":275,"text":276},"94cdc2579080",[]," denials and ",{"_key":278,"_type":63,"marks":279,"text":280},"f3571618f60e",[163],"npm publish",{"_key":282,"_type":63,"marks":283,"text":284},"449c23e13162",[]," actually trip; broad globs like ",{"_key":286,"_type":63,"marks":287,"text":288},"44fabb067ec4",[163],"npm:*",{"_key":290,"_type":63,"marks":291,"text":292},"c0907a19fd55",[]," quietly allow ",{"_key":294,"_type":63,"marks":295,"text":280},"372d06d2a8d6",[163],{"_key":297,"_type":63,"marks":298,"text":299},"08c283c9851e",[],".)",[],{"_key":302,"_type":59,"children":303,"markDefs":308,"style":85},"60351ea5eae2",[304],{"_key":305,"_type":63,"marks":306,"text":307},"f2895894a5e7",[],"3. Tiered context the agent maintains",[],{"_key":310,"_type":59,"children":311,"markDefs":316,"style":76},"51c9f09e9181",[312],{"_key":313,"_type":63,"marks":314,"text":315},"8090a8ccb857",[],"One giant context file rots and blows the budget. Tier it:",[],{"_key":318,"_type":59,"children":319,"level":142,"listItem":143,"markDefs":331,"style":76},"48e97aad3f41",[320,324,327],{"_key":321,"_type":63,"marks":322,"text":323},"3806cd6d8af1",[69],"Root ",{"_key":325,"_type":63,"marks":326,"text":164},"b2d9b78f45c6",[163],{"_key":328,"_type":63,"marks":329,"text":330},"15655f03d98b",[]," — the map: what this is, how to run\u002Ftest, one-line module index, invariants, where state lives. Cap ~200 lines; the session-start read.",[],{"_key":333,"_type":59,"children":334,"level":142,"listItem":143,"markDefs":346,"style":76},"236f59283088",[335,339,342],{"_key":336,"_type":63,"marks":337,"text":338},"1e9abf21633e",[69],"Per-module ",{"_key":340,"_type":63,"marks":341,"text":164},"6b4b8736e7f6",[163],{"_key":343,"_type":63,"marks":344,"text":345},"033c6c698551",[]," — responsibility, key files, deps, gotchas, how to test just this module. Read before editing that module.",[],{"_key":348,"_type":59,"children":349,"level":142,"listItem":143,"markDefs":362,"style":76},"8197c5cd6630",[350,354,358],{"_key":351,"_type":63,"marks":352,"text":353},"9fe120a130bc",[163],"DECISIONS.md",{"_key":355,"_type":63,"marks":356,"text":357},"0c445f80e6cc",[]," — append-only: date, decision, why, alternatives rejected. ",{"_key":359,"_type":63,"marks":360,"text":361},"db7dddacdb5f",[140],"(This one earns its own deep treatment once several agents share the repo — expanded in Part II.)",[],{"_key":364,"_type":59,"children":365,"markDefs":378,"style":76},"561673b3215a",[366,370,374],{"_key":367,"_type":63,"marks":368,"text":369},"02b72f4a1a93",[],"Rule: ",{"_key":371,"_type":63,"marks":372,"text":373},"5b2ee3937202",[69],"stale context is a bug, fixed in the same change that invalidated it",{"_key":375,"_type":63,"marks":376,"text":377},"f8b415ab06ab",[]," — not “later.”",[],{"_key":380,"_type":59,"children":381,"markDefs":386,"style":85},"ff1673088b60",[382],{"_key":383,"_type":63,"marks":384,"text":385},"7164378a333e",[],"4. Durable memory + a tiny knowledge graph",[],{"_key":388,"_type":59,"children":389,"markDefs":394,"style":76},"1ebf669d428a",[390],{"_key":391,"_type":63,"marks":392,"text":393},"d7dc4835f982",[],"Context describes the code; memory holds what the code can’t tell you across sessions — one fact per file, indexed:",[],{"_key":396,"_type":163,"code":397,"markDefs":12},"71ac00d2b80e","memory\u002F\n  MEMORY.md                  # index: one line per fact\n  user-prefers-X.md          # type: user | feedback | project | reference\n  graph.jsonl                # {from, rel, to} — modules\u002Fdecisions as nodes; depends-on\u002Fadapts\u002Fsupersedes",{"_key":399,"_type":59,"children":400,"markDefs":409,"style":76},"515de37c9b9a",[401,405],{"_key":402,"_type":63,"marks":403,"text":404},"7329fd896151",[],"The graph answers the question agents are worst at: ",{"_key":406,"_type":63,"marks":407,"text":408},"d3f71bd5d454",[140],"“what breaks if I change this?”",[],{"_key":411,"_type":59,"children":412,"markDefs":417,"style":85},"10da0a2f9ab0",[413],{"_key":414,"_type":63,"marks":415,"text":416},"ebe07103bc1e",[],"5. A review panel, not a reviewer",[],{"_key":419,"_type":59,"children":420,"markDefs":425,"style":76},"c9b3fb508381",[421],{"_key":422,"_type":63,"marks":423,"text":424},"42cd7c71aac3",[],"Instead of one self-review, run focused sub-agents in parallel, each one lens, strict output:",[],{"_key":427,"_type":163,"code":428,"markDefs":12},"a77a82d3784f","product   — solves the stated problem? scope creep?   (plan stage)\narchitect — correctness, data model, failure modes, coupling\ninfra     — resource limits, deploy\u002Frollback, resilience\nsecurity  — authz, input validation, secrets, audit trail\ntest-eng  — is the suite real, or happy-path theater?  (per change)\n→ each returns: [BLOCKER|MAJOR|MINOR] (confidence%) — file:line — issue — fix ; VERDICT",{"_key":430,"_type":59,"children":431,"markDefs":452,"style":76},"a7d1bdaad1fd",[432,436,440,444,448],{"_key":433,"_type":63,"marks":434,"text":435},"4322c81b7203",[],"Only high-confidence BLOCKER\u002FMAJOR gate. Diverse lenses catch what a single pass misses; the confidence threshold keeps it from drowning you in nits. (Note: these are parallel agents ",{"_key":437,"_type":63,"marks":438,"text":439},"ba315107db2d",[140],"reviewing",{"_key":441,"_type":63,"marks":442,"text":443},"b3ad09a445f4",[]," one change — distinct from parallel agents ",{"_key":445,"_type":63,"marks":446,"text":447},"9e6d2af0183d",[140],"making",{"_key":449,"_type":63,"marks":450,"text":451},"83ff8bd2ddce",[]," changes, which is Part II’s whole problem.)",[],{"_key":454,"_type":59,"children":455,"markDefs":460,"style":85},"5d00cc108eab",[456],{"_key":457,"_type":63,"marks":458,"text":459},"6271048f35f5",[],"6. A post-edit hook so nothing drifts silently",[],{"_key":462,"_type":59,"children":463,"markDefs":476,"style":76},"dc0012fed91f",[464,468,472],{"_key":465,"_type":63,"marks":466,"text":467},"eb61ed08e7f7",[],"The piece that ties it together — fires after every edit and emits a checklist (a ",{"_key":469,"_type":63,"marks":470,"text":471},"60d56640b58d",[163],"PostToolUse",{"_key":473,"_type":63,"marks":474,"text":475},"0d655f8dc794",[]," hook):",[],{"_key":478,"_type":59,"children":479,"markDefs":492,"style":76},"45f5878f1779",[480,484,488],{"_key":481,"_type":63,"marks":482,"text":483},"480277f6a558",[],"Wire it in ",{"_key":485,"_type":63,"marks":486,"text":487},"641207ed1441",[163],"settings.json",{"_key":489,"_type":63,"marks":490,"text":491},"1bcf3c29fbd4",[],", pointed at a tiny script:",[],{"_key":494,"_type":163,"code":495,"language":253,"markDefs":12},"346198cba5b8","{ \"hooks\": { \"PostToolUse\": [\n  { \"matcher\": \"Edit|Write|MultiEdit\",\n    \"hooks\": [ { \"type\": \"command\", \"command\": \"python3 .claude\u002Fhooks\u002Fpost-edit.py\" } ] } ] } }",{"_key":497,"_type":163,"code":498,"language":499,"markDefs":12},"a4e3fa0399e4","# .claude\u002Fhooks\u002Fpost-edit.py — reads the tool event on stdin, emits a checklist as context\nimport json, sys\nev = json.load(sys.stdin)\npath = ev.get(\"tool_input\", {}).get(\"file_path\", \"the edited file\")\nchecklist = (f\"Post-edit refresh for {path}: (1) update the nearest CONTEXT.md if responsibility\u002F\"\n             \"key-files\u002Fgotchas changed; (2) append a memory\u002Fgraph edge on a dep\u002FAPI change; \"\n             \"(3) log a DECISIONS.md line on a precedent; (4) update memory on a durable fact. \"\n             \"Make these edits in THIS change — stale context is a bug.\")\nprint(json.dumps({\"hookSpecificOutput\": {\"hookEventName\": \"PostToolUse\", \"additionalContext\": checklist}}))","python",{"_key":501,"_type":59,"children":502,"markDefs":515,"style":76},"1447bc18a801",[503,507,511],{"_key":504,"_type":63,"marks":505,"text":506},"8c0d1395a3e4",[],"It emits a checklist; the agent makes the edits in the ",{"_key":508,"_type":63,"marks":509,"text":510},"316502f37808",[69],"same diff",{"_key":512,"_type":63,"marks":513,"text":514},"ea088defaa3d",[]," — reviewable, not a silent rewrite. It’s a reminder, not a silent rewriter — you always see what it changed.",[],{"_key":517,"_type":59,"children":518,"markDefs":523,"style":85},"8c673f9737e2",[519],{"_key":520,"_type":63,"marks":521,"text":522},"8de745afbf4a",[],"The loop, in one line",[],{"_key":525,"_type":163,"code":526,"markDefs":12},"ff326db63e30","session start: read root CONTEXT.md + MEMORY.md\nper task:      plan → panel reviews plan → you approve →\n               implement subtask (tests in same diff) → panel reviews diff →\n               full test+lint → commit → hook refreshes context\u002Fmemory\u002Fgraph → next\nonly stops:    push and deploy",{"_key":528,"_type":59,"children":529,"markDefs":534,"style":76},"1620f00fa84d",[530],{"_key":531,"_type":63,"marks":532,"text":533},"71f6ae9a48b6",[],"That’s the whole harness for one agent: six artifacts and a loop. Each is a few lines of config or a markdown file; together they’re the difference between an agent that’s brilliant for an afternoon and one that’s still trustworthy on the thousandth edit.",[],{"_key":536,"_type":59,"children":537,"markDefs":542,"style":85},"4e7a3d490be8",[538],{"_key":539,"_type":63,"marks":540,"text":541},"45517fcaa378",[],"Part II — From one agent to a fleet",[],{"_key":544,"_type":545,"alt":546,"asset":547,"markDefs":12},"13daab7d9bb8","image","A diagram titled 'The Disciplined Build' showing two parallel agents coordinating via shared contracts and a 'shared world' rather than direct communication, with details on the 'Keeper's' role and an 'Append-Only Decision Log'.",{"_ref":548,"_type":549},"image-9096a996551606b00624a547ea318b5e89e8bc16-3000x1500-png","reference",{"_key":551,"_type":59,"children":552,"markDefs":573,"style":76},"e6a4c8560db0",[553,557,561,565,569],{"_key":554,"_type":63,"marks":555,"text":556},"3f72f9d66489",[],"One agent, harnessed like this, stays productive for months. Now run ",{"_key":558,"_type":63,"marks":559,"text":560},"8e37c8a14aa9",[69],"several",{"_key":562,"_type":63,"marks":563,"text":564},"a05156d1ca9f",[]," on the same repo at once — and a new failure mode appears that none of the artifacts above address: the agents collide. They edit the same files, undo each other’s work, and re-litigate a decision one of them already made. The instinct is to have them “communicate.” That doesn’t scale and isn’t reliable. What works is exactly what lets human teams parallelize: ",{"_key":566,"_type":63,"marks":567,"text":568},"ffcdd4428701",[69],"coordinate through shared, written state, not conversation",{"_key":570,"_type":63,"marks":571,"text":572},"c015f61675ba",[]," — and write down the hard-won decisions so nobody, carbon or silicon, silently reverses them.",[],{"_key":575,"_type":59,"children":576,"markDefs":581,"style":85},"f326c2aac1ae",[577],{"_key":578,"_type":63,"marks":579,"text":580},"6b43dc00673c",[],"7. Coordinate through state, not chat (stigmergy)",[],{"_key":583,"_type":59,"children":584,"markDefs":589,"style":76},"d86ac6639169",[585],{"_key":586,"_type":63,"marks":587,"text":588},"f99acf17275b",[],"Agents shouldn’t message each other. They read and write a small set of shared files that encode the state of the work — who owns what, what’s decided, what’s claimed, what’s done. Each agent acts on the world (the repo plus these files); the next one reads the world to decide what to do. Coordination becomes a property of the shared state, not of a conversation — which means it survives a restart and is auditable. Insects coordinate huge builds this way, by changing and reading a shared environment rather than talking. The same trick works here.",[],{"_key":591,"_type":59,"children":592,"markDefs":601,"style":76},"3fb349e8568a",[593,597],{"_key":594,"_type":63,"marks":595,"text":596},"50477d0cbc4c",[69],"Ownership map",{"_key":598,"_type":63,"marks":599,"text":600},"f2abe3990179",[]," — who owns which paths. Default ownership by directory; editing outside your area needs a claim.",[],{"_key":603,"_type":163,"code":604,"markDefs":12},"bdad70cbb917","| path                  | owner    | notes                       |\n| core\u002F**               | agent-B  | agent-A reads, doesn't edit |\n| services\u002Fservice-a\u002F** | agent-A  |                             |\n| shared\u002Fcontracts\u002F**   | shared   | claim required to change    |",{"_key":606,"_type":59,"children":607,"markDefs":616,"style":76},"3b526d9b6b06",[608,612],{"_key":609,"_type":63,"marks":610,"text":611},"be6fa4d546b3",[69],"Claim \u002F release",{"_key":613,"_type":63,"marks":614,"text":615},"6533e27140a0",[]," — cheap mutual exclusion, no lock server:",[],{"_key":618,"_type":163,"code":619,"markDefs":12},"0d59dba09508","## CLAIM 2026-06-10T14:20Z · agent-A · task-114 · services\u002Fservice-a\u002F**\nworking: add retry to the fetch step    est: 40m\n## RELEASE 2026-06-10T14:58Z · agent-A · task-114 · commit a1b2c3d",{"_key":621,"_type":59,"children":622,"markDefs":635,"style":76},"841c2107a925",[623,627,631],{"_key":624,"_type":63,"marks":625,"text":626},"6e59136945bb",[],"Rule: before claiming, scan for an open CLAIM on overlapping paths in the last few hours; if found, pick different work. Be honest that this is ",{"_key":628,"_type":63,"marks":629,"text":630},"481105428a85",[69],"advisory\u002Foptimistic, not a lock",{"_key":632,"_type":63,"marks":633,"text":634},"1555e2a2c1c4",[]," — two agents can both scan, both see nothing, and both claim the same path (a TOCTOU race). If you need real mutual exclusion, use a primitive with atomic check-and-set: a uniquely-named git branch (the push fails if it already exists), or a conditional write to a coordination store. The file-append claim is good enough when collisions are rare and a human merges; don’t sell it as a lock.",[],{"_key":637,"_type":59,"children":638,"markDefs":647,"style":76},"71c6d2c6a32f",[639,643],{"_key":640,"_type":63,"marks":641,"text":642},"44bf3dc71c9e",[69],"Progress log",{"_key":644,"_type":63,"marks":645,"text":646},"192599628888",[]," — append-only, timestamped. An agent starting up reads the last day to orient itself: what got done, who’s working where.",[],{"_key":649,"_type":59,"children":650,"markDefs":659,"style":76},"11e70c303f4a",[651,655],{"_key":652,"_type":63,"marks":653,"text":654},"fc8c39993758",[69],"Decision log",{"_key":656,"_type":63,"marks":657,"text":658},"bb68b7721d7a",[]," — append-only; the spine that stops agent-B undoing agent-A’s reasoned choice. It’s load-bearing enough to get its own section, next.",[],{"_key":661,"_type":59,"children":662,"markDefs":667,"style":76},"9d554a99ec9d",[663],{"_key":664,"_type":63,"marks":665,"text":666},"4d1ae3c14f84",[],"The rules that keep this from unraveling:",[],{"_key":669,"_type":59,"children":670,"level":142,"listItem":143,"markDefs":679,"style":76},"3c0ad072a1da",[671,675],{"_key":672,"_type":63,"marks":673,"text":674},"3b16863cbf5a",[69],"Branch per task; humans merge",{"_key":676,"_type":63,"marks":677,"text":678},"0891936bcbf4",[]," — prevents unreviewed changes hitting main; the merge is the human checkpoint.",[],{"_key":681,"_type":59,"children":682,"level":142,"listItem":143,"markDefs":691,"style":76},"4e890a4bd227",[683,687],{"_key":684,"_type":63,"marks":685,"text":686},"4b76f7ee4efa",[69],"No agent-to-agent calls",{"_key":688,"_type":63,"marks":689,"text":690},"6c7ed7dde65d",[]," — prevents hidden side-channels; all coordination stays in the auditable files.",[],{"_key":693,"_type":59,"children":694,"level":142,"listItem":143,"markDefs":703,"style":76},"0140d221e376",[695,699],{"_key":696,"_type":63,"marks":697,"text":698},"6bc9e3c7dd4f",[69],"Stable public surface (declared interface per module)",{"_key":700,"_type":63,"marks":701,"text":702},"e966dc685119",[]," — prevents parallel refactors breaking each other.",[],{"_key":705,"_type":59,"children":706,"level":142,"listItem":143,"markDefs":715,"style":76},"bb4469137134",[707,711],{"_key":708,"_type":63,"marks":709,"text":710},"83b02fb69cad",[69],"Decisions are append-only and binding",{"_key":712,"_type":63,"marks":713,"text":714},"5bfa2a126e17",[]," — prevents silent reversal of a load-bearing choice.",[],{"_key":717,"_type":59,"children":718,"level":142,"listItem":143,"markDefs":727,"style":76},"c201227e409e",[719,723],{"_key":720,"_type":63,"marks":721,"text":722},"a0734b304e6c",[69],"Claim before touching shared or other-owned paths",{"_key":724,"_type":63,"marks":725,"text":726},"239de9954d17",[]," — prevents two agents editing the same file.",[],{"_key":729,"_type":59,"children":730,"markDefs":735,"style":85},"3833ebf6152b",[731],{"_key":732,"_type":63,"marks":733,"text":734},"b8cb1c2ff051",[],"8. The decision log: ADRs for an AI build",[],{"_key":737,"_type":59,"children":738,"markDefs":766,"style":76},"2aaf8c9b8218",[739,743,747,751,755,759,762],{"_key":740,"_type":63,"marks":741,"text":742},"58677927da60",[],"Every non-trivial system accumulates decisions: we use this datastore, agents only propose, all model traffic goes through one gateway, this component may loop and the rest may not. Six weeks later nobody remembers ",{"_key":744,"_type":63,"marks":745,"text":746},"a22649dd0bf1",[140],"why",{"_key":748,"_type":63,"marks":749,"text":750},"becb6b908f46",[],", someone “fixes” one of them, and a load-bearing choice quietly reverses. The classic remedy is the Architecture Decision Record. In an AI-assisted build — where agents make changes too — a decision log isn’t just hygiene, it’s the mechanism that keeps humans and agents from contradicting each other. A human team has hallway memory; agents don’t. An agent picking up a task reads the log to learn the constraints it must honor — and ",{"_key":752,"_type":63,"marks":753,"text":754},"7713db60eb2e",[140],"won’t",{"_key":756,"_type":63,"marks":757,"text":758},"de1f308f1579",[]," reverse a choice whose reason it can’t see. (This is the ",{"_key":760,"_type":63,"marks":761,"text":353},"31dcc632459b",[163],{"_key":763,"_type":63,"marks":764,"text":765},"295143baf6cd",[]," from §3, grown up: once agents — not just you — make changes, it stops being a notebook and becomes an enforced contract.)",[],{"_key":768,"_type":59,"children":769,"markDefs":774,"style":76},"934e490b6497",[770],{"_key":771,"_type":63,"marks":772,"text":773},"2d85bd0365b6",[],"A single append-only file (or directory), each entry short and structured:",[],{"_key":776,"_type":163,"code":777,"markDefs":12},"e0a5329a7e69","DEC-017 · 2026-06-10 · We route ALL model traffic through one gateway.\nwhy: one place for rate-limits, cost tracking, the kill switch, and provider swaps.\nalternatives rejected: per-service SDK calls (scatters cost + coupling everywhere).\nstatus: accepted",{"_key":779,"_type":59,"children":780,"markDefs":800,"style":76},"dd97c4e860ff",[781,785,788,792,796],{"_key":782,"_type":63,"marks":783,"text":784},"42ede5ef986b",[],"The ",{"_key":786,"_type":63,"marks":787,"text":746},"6ebcb9ad13d4",[140],{"_key":789,"_type":63,"marks":790,"text":791},"66920eb29bd8",[]," and the ",{"_key":793,"_type":63,"marks":794,"text":795},"2a2b38d2e904",[140],"rejected alternatives",{"_key":797,"_type":63,"marks":798,"text":799},"dac33ce8a907",[]," are the valuable part — they’re what stop the decision from being re-argued every quarter. Keep it as YAML if you want it machine-readable, so tooling can lint against it:",[],{"_key":802,"_type":163,"code":803,"language":804,"markDefs":12},"a8e7124d8b09","- id: DEC-017\n  date: 2026-06-10\n  decision: All model traffic goes through one gateway.\n  why: single chokepoint for rate-limit, cost, kill switch, provider swap.\n  rejected: [per-service SDK calls]\n  governs: [\"src\u002F**\"]        # which paths this decision constrains — makes the gate runnable\n  forbids_imports: [\"sdk-a\", \"sdk-b\"]   # one machine-checkable rule (optional)\n  supersedes: null           # status is DERIVED: an entry is \"superseded\" iff a LATER entry's `supersedes` points at it","yaml",{"_key":806,"_type":59,"children":807,"markDefs":812,"style":85},"52123534ad5b",[808],{"_key":809,"_type":63,"marks":810,"text":811},"d0808242b211",[],"Supersede, never edit",[],{"_key":814,"_type":59,"children":815,"markDefs":828,"style":76},"c82812c0c252",[816,820,824],{"_key":817,"_type":63,"marks":818,"text":819},"4c80a04ac1de",[],"You never edit or delete a past decision; you change your mind with a ",{"_key":821,"_type":63,"marks":822,"text":823},"4f8370992051",[140],"new",{"_key":825,"_type":63,"marks":826,"text":827},"111de7dd4416",[]," entry:",[],{"_key":830,"_type":163,"code":831,"markDefs":12},"09f1d717ae47","DEC-031 · 2026-07-02 · Supersedes DEC-017: the gateway also handles embeddings, not just chat.",{"_key":833,"_type":59,"children":834,"markDefs":863,"style":76},"c91babce891c",[835,839,843,847,851,855,859],{"_key":836,"_type":63,"marks":837,"text":838},"7fe08efef6a4",[],"The history — reversals included — is itself valuable: it tells the story of how the system’s thinking evolved, and a half-remembered old entry is never silently wrong, it’s visibly superseded. Note ",{"_key":840,"_type":63,"marks":841,"text":842},"e4f58cc10e2f",[163],"status",{"_key":844,"_type":63,"marks":845,"text":846},"a7e81164227d",[]," isn't a stored field you flip — it's ",{"_key":848,"_type":63,"marks":849,"text":850},"08bd3ccbad43",[140],"derived",{"_key":852,"_type":63,"marks":853,"text":854},"0e25a8b2cd46",[]," from the ",{"_key":856,"_type":63,"marks":857,"text":858},"ffbfd070c5b2",[163],"supersedes",{"_key":860,"_type":63,"marks":861,"text":862},"5ee51882160b",[]," pointers (an entry is superseded iff a later one points at it), so a past entry is never edited at all.",[],{"_key":865,"_type":59,"children":866,"markDefs":871,"style":85},"4f53f7d47ed7",[867],{"_key":868,"_type":63,"marks":869,"text":870},"6638069c6696",[],"Make it binding, not passive docs",[],{"_key":873,"_type":59,"children":874,"markDefs":879,"style":76},"120d574c4cd9",[875],{"_key":876,"_type":63,"marks":877,"text":878},"7803e09fd160",[],"A log nobody enforces rots. Wire it into review so a diff that violates an accepted decision gets rejected:",[],{"_key":881,"_type":59,"children":882,"markDefs":907,"style":76},"03ea258885f4",[883,887,891,895,899,903],{"_key":884,"_type":63,"marks":885,"text":886},"7a7e764235e3",[163],"governs",{"_key":888,"_type":63,"marks":889,"text":890},"533a404f5add",[]," is what makes this runnable — without it the gate can't know which decisions apply to a diff. ",{"_key":892,"_type":63,"marks":893,"text":894},"a9611ec93842",[163],"forbids_imports",{"_key":896,"_type":63,"marks":897,"text":898},"6b07e7ed60a5",[]," is one cheap, fully machine-checkable ",{"_key":900,"_type":63,"marks":901,"text":902},"0cb3b0d4a60c",[163],"violates()",{"_key":904,"_type":63,"marks":905,"text":906},"55bccc0610bb",[]," rule; richer checks need a human or an agent reviewer. Now the log isn't documentation that decays — it's an active constraint the build maintains. To change a decision, an agent writes a superseding entry and flags a human; it never silently codes around one.",[],{"_key":909,"_type":59,"children":910,"markDefs":915,"style":85},"64cb9c69ac8e",[911],{"_key":912,"_type":63,"marks":913,"text":914},"6d94eb66bd4d",[],"What belongs in it",[],{"_key":917,"_type":59,"children":918,"markDefs":927,"style":76},"67059047a485",[919,923],{"_key":920,"_type":63,"marks":921,"text":922},"10ca83167641",[69],"Put in the log:",{"_key":924,"_type":63,"marks":925,"text":926},"9581f8dabfdd",[]," non-obvious, hard-to-reverse choices; architecture, data stores, security postures; the boundaries of agent autonomy; anything you'd be annoyed to see quietly undone.",[],{"_key":929,"_type":59,"children":930,"markDefs":939,"style":76},"a912b8a0a8d1",[931,935],{"_key":932,"_type":63,"marks":933,"text":934},"4a93ad61e202",[69],"Keep out:",{"_key":936,"_type":63,"marks":937,"text":938},"7ee6ee37ef44",[]," things the code already says plainly; transient implementation details; anything that changes freely without consequence; trivia (padding hides the important entries).",[],{"_key":941,"_type":59,"children":942,"markDefs":947,"style":85},"f2564fb65ccc",[943],{"_key":944,"_type":63,"marks":945,"text":946},"5989d1ab21ed",[],"It pairs with the other append-only logs",[],{"_key":949,"_type":59,"children":950,"markDefs":979,"style":76},"edcb0c216068",[951,955,959,963,967,971,975],{"_key":952,"_type":63,"marks":953,"text":954},"6263a37f62de",[],"A disciplined build ends up with a few records that rhyme — all append-only, dated, never rewritten: the ",{"_key":956,"_type":63,"marks":957,"text":958},"9d80349f2ee8",[69],"decision log",{"_key":960,"_type":63,"marks":961,"text":962},"24e4702943a1",[]," (why the system is built the way it is), the ",{"_key":964,"_type":63,"marks":965,"text":966},"b082a1193d76",[69],"progress\u002Fcoordination log",{"_key":968,"_type":63,"marks":969,"text":970},"282f73b26ff1",[]," (what got done and who’s working where — the file the parallel agents share above), and, if you’re building a system that makes decisions at runtime, an ",{"_key":972,"_type":63,"marks":973,"text":974},"ec645e5be86f",[69],"audit ledger",{"_key":976,"_type":63,"marks":977,"text":978},"d8fb96d80acd",[]," (why it decided what it did in production). That shared discipline is what makes a fast build legible after the fact — to a new teammate, an auditor, an agent, or you in three months.",[],{"_key":981,"_type":59,"children":982,"markDefs":987,"style":85},"c311e82d57f9",[983],{"_key":984,"_type":63,"marks":985,"text":986},"d797d89ead32",[],"Anti-patterns",[],{"_key":989,"_type":59,"children":990,"level":142,"listItem":143,"markDefs":999,"style":76},"c2243c185c25",[991,995],{"_key":992,"_type":63,"marks":993,"text":994},"9bba8218c257",[69],"Blaming the model",{"_key":996,"_type":63,"marks":997,"text":998},"657ffb4aea21",[]," — when quality slips, the reflex is “wait for the next model.” Far more often it’s a harness gap: a missing tool, a vague rule, a noisy context window. Fix the harness.",[],{"_key":1001,"_type":59,"children":1002,"level":142,"listItem":143,"markDefs":1011,"style":76},"f5745426d528",[1003,1007],{"_key":1004,"_type":63,"marks":1005,"text":1006},"cd166da7bd75",[69],"No autonomy boundary",{"_key":1008,"_type":63,"marks":1009,"text":1010},"c83e3900912c",[]," — either you babysit every keystroke, or it pushes\u002Fdeploys unreviewed.",[],{"_key":1013,"_type":59,"children":1014,"level":142,"listItem":143,"markDefs":1023,"style":76},"75fd275a49fd",[1015,1019],{"_key":1016,"_type":63,"marks":1017,"text":1018},"8595dc2ee003",[69],"One mega context file",{"_key":1020,"_type":63,"marks":1021,"text":1022},"b370b38e0296",[]," — rots, and blows the budget on every turn.",[],{"_key":1025,"_type":59,"children":1026,"level":142,"listItem":143,"markDefs":1035,"style":76},"16ad4ce42534",[1027,1031],{"_key":1028,"_type":63,"marks":1029,"text":1030},"fd8615d49279",[69],"Context updated “later”",{"_key":1032,"_type":63,"marks":1033,"text":1034},"26a28bfdd3f2",[]," — it’s never later; make staleness a same-diff bug.",[],{"_key":1037,"_type":59,"children":1038,"level":142,"listItem":143,"markDefs":1047,"style":76},"8d07cf72efcf",[1039,1043],{"_key":1040,"_type":63,"marks":1041,"text":1042},"bab9da2f85ab",[69],"One self-review",{"_key":1044,"_type":63,"marks":1045,"text":1046},"9d0bed2fdec2",[]," — one blind spot, applied uniformly; use a panel of lenses.",[],{"_key":1049,"_type":59,"children":1050,"level":142,"listItem":143,"markDefs":1059,"style":76},"0d8c067d618a",[1051,1055],{"_key":1052,"_type":63,"marks":1053,"text":1054},"821683ca4e04",[69],"A hook that silently rewrites docs",{"_key":1056,"_type":63,"marks":1057,"text":1058},"f0a38dc10c24",[]," — you lose the reviewable trail; emit a checklist, edit in the diff.",[],{"_key":1061,"_type":59,"children":1062,"level":142,"listItem":143,"markDefs":1071,"style":76},"317898498eeb",[1063,1067],{"_key":1064,"_type":63,"marks":1065,"text":1066},"7b21e04a2058",[69],"Agents that message each other",{"_key":1068,"_type":63,"marks":1069,"text":1070},"8117cf9aa8d5",[]," — hidden side-channels that don’t survive a restart; coordinate through shared files instead.",[],{"_key":1073,"_type":59,"children":1074,"level":142,"listItem":143,"markDefs":1083,"style":76},"cc8021c1a938",[1075,1079],{"_key":1076,"_type":63,"marks":1077,"text":1078},"62c80f519a28",[69],"No ownership map",{"_key":1080,"_type":63,"marks":1081,"text":1082},"8edadc90d9ee",[]," — two agents edit the same file and undo each other; default ownership by directory, claim to cross it.",[],{"_key":1085,"_type":59,"children":1086,"level":142,"listItem":143,"markDefs":1095,"style":76},"522e28809366",[1087,1091],{"_key":1088,"_type":63,"marks":1089,"text":1090},"d592a5074b8a",[69],"Editing a past decision instead of superseding it",{"_key":1092,"_type":63,"marks":1093,"text":1094},"9e6cd1331c7d",[]," — you lose the history and make old copies silently wrong; append a superseding entry.",[],{"_key":1097,"_type":59,"children":1098,"markDefs":1103,"style":85},"68ffed3da11d",[1099],{"_key":1100,"_type":63,"marks":1101,"text":1102},"0753b1d00e7d",[],"The takeaway",[],{"_key":1105,"_type":59,"children":1106,"markDefs":1127,"style":76},"b88786008a98",[1107,1111,1115,1119,1123],{"_key":1108,"_type":63,"marks":1109,"text":1110},"49d254614598",[],"We’ve crossed from “AI writes a function” to “AI runs a project for weeks” — and then to “a fleet of agents runs it in parallel.” The bottleneck moved from ",{"_key":1112,"_type":63,"marks":1113,"text":1114},"459b8ee1b076",[140],"can the model code",{"_key":1116,"_type":63,"marks":1117,"text":1118},"8402eb74e203",[]," to ",{"_key":1120,"_type":63,"marks":1121,"text":1122},"806aa4cf0864",[140],"can the harness around it keep it honest, oriented, and reviewed over time.",{"_key":1124,"_type":63,"marks":1125,"text":1126},"0b169e29a424",[]," For one agent that harness is a constitution, an autonomy boundary, tiered context, durable memory, a review panel, and a post-edit hook. For several, add a shared written world to act on — an ownership map, a claim\u002Frelease protocol, branch-per-task with human merges, and an append-only decision log wired into review so it’s binding.",[],{"_key":1129,"_type":59,"children":1130,"markDefs":1151,"style":76},"825cbdbbdc62",[1131,1135,1139,1143,1147],{"_key":1132,"_type":63,"marks":1133,"text":1134},"14723405a6c9",[],"None of this is specific to building AI systems — it’s how you run coding agents on ",{"_key":1136,"_type":63,"marks":1137,"text":1138},"9238e1ece047",[140],"any",{"_key":1140,"_type":63,"marks":1141,"text":1142},"68e0a1cb646e",[]," codebase. You don’t make the model reliable; you can’t. You ",{"_key":1144,"_type":63,"marks":1145,"text":1146},"7bfd2c5379e0",[69],"contain the model and build the disciplined system around it.",{"_key":1148,"_type":63,"marks":1149,"text":1150},"4d096299103b",[]," It’s cheap to set up and compounds every session — the difference between an intern who’s brilliant for an afternoon and an engineering team that gets better at your codebase every week.",[],{"_key":1153,"_type":59,"children":1154,"markDefs":1159,"style":76},"3e6d5b5f74c3",[1155],{"_key":1156,"_type":63,"marks":1157,"text":1158},"ab52d87d20c7",[140],"I will package this as a drop-in kit later.",[],{"_key":1161,"_type":59,"children":1162,"markDefs":1167,"style":76},"1aee169742aa",[1163],{"_key":1164,"_type":63,"marks":1165,"text":1166},"eebc32f56671",[140],"This is the build layer — the discipline applied to the agents that build the system. The five runtime layers underneath it (determinism, evaluation, confidence, safety, operability) are the rest of the series.",[],{"_key":1169,"_type":59,"children":1170,"markDefs":1175,"style":76},"63e85522faed",[1171],{"_key":1172,"_type":63,"marks":1173,"text":1174},"303b318bb124",[140],"Series: Running LLM systems in production — Level 6 of 6: the disciplined build.",[],true,"2026\u002F10\u002F07","Coding agents are great for an afternoon and mediocre for a quarter. Here’s the small set of files and rules — with the actual configs — that keeps quality from decaying across months and thousands of edits, whether you run one agent or a fleet of them on the same repo.",{"_type":545,"alt":1180,"asset":1181},"Blueprint-style diagram titled \"AN OPERATING SYSTEM FOR CODING AGENTS\", showing a central \"THE MODEL\" within concentric rings representing an \"Autonomy Boundary\", with \"git push\" and \"deploy\" gates. A list of features like Constitution and Durable Memory is on the right.",{"_ref":1182,"_type":549},"image-e5e6fca9968957d7046532ac4ba40b5a3c32e871-3000x1500-png","2026-10-07T20:09:22.945Z",{"_type":1185,"canonicalUrl":1186},"seo","https:\u002F\u002Fmedium.com\u002F@varunjindal9\u002Fan-operating-system-for-coding-agents-e2f37e67332d",{"_type":10,"current":1188},"part-6-an-operating-system-for-coding-agents-the-disciplined-build",[1190,1199,1222,1233],{"_createdAt":1191,"_id":1192,"_rev":1193,"_type":1194,"_updatedAt":1195,"slug":1196,"title":1198},"2023-05-23T16:43:21Z","wp-tagcat-ai","fpDTFQqIDjNJIbHDKPBGpV","blogTag","2025-01-30T16:19:01Z",{"current":1197},"ai","AI",{"_createdAt":1200,"_id":1201,"_rev":1202,"_system":1203,"_type":1194,"_updatedAt":1206,"description":1207,"featuredPosts":1216,"slug":1219,"title":1221},"2025-04-24T16:28:57Z","797b8797-6e65-4723-b53f-8bc005305384","46s78gX2DRxVswzX0kQ1Ty",{"base":1204},{"id":1201,"rev":1205},"IpfPEqg1c3Byvj9RrB3Xaj","2026-10-07T20:13:00Z",[1208],{"_key":1209,"_type":59,"children":1210,"markDefs":1215,"style":76},"bb32f75814b4",[1211],{"_key":1212,"_type":63,"marks":1213,"text":1214},"dbcf27ef29b3",[],"Community-generated articles submitted for your reading pleasure. If you’re interested in seeing your work here, log in with your Stack Overflow account and click the link below. Articles will be licensed under a CC BY-SA 4.0 grant. ",[],[1217],{"_key":1218,"_type":549},"9d9ea8c4082d",{"_type":10,"current":1220},"contributed","The Heap",{"_createdAt":1223,"_id":1224,"_rev":1225,"_system":1226,"_type":1194,"_updatedAt":1229,"slug":1230,"title":1232},"2026-06-12T16:16:20Z","51c761d7-73f7-42f4-aa49-8484e3849e7c","P0qLqkXH0zpkT6RRZ9Iwel",{"base":1227},{"id":1224,"rev":1228},"MwgZb85ftkde1TTvQsHYa6","2026-09-28T16:40:45Z",{"_type":10,"current":1231},"building-software","Building software",{"_createdAt":1234,"_id":1235,"_rev":1236,"_system":1237,"_type":1194,"_updatedAt":1240,"description":1241,"slug":1261,"title":1263},"2025-08-08T15:49:22Z","39391cf4-6f9a-4238-8670-c1e44b66db9e","09X6HDzCi2VfMov6gSLf7H",{"base":1238},{"id":1235,"rev":1239},"TdCcmC7LyfLVwjB8GEXoh6","2025-12-10T19:34:33Z",[1242,1250],{"_key":1243,"_type":59,"children":1244,"markDefs":1249,"style":76},"a4b1a37cbbcc",[1245],{"_key":1246,"_type":63,"marks":1247,"text":1248},"d8e8f3e0fd9c",[],"These articles are licensed under a Creative Commons Attribution-ShareAlike 4.0 International license. ",[],{"_key":1251,"_type":59,"children":1252,"markDefs":1258,"style":76},"7effd489c71f",[1253],{"_key":1254,"_type":63,"marks":1255,"text":1257},"538808bb5325",[1256],"fd643b288690","creativecommons.org\u002Flicenses\u002Fby-sa\u002F4.0\u002Fdeed.en",[1259],{"_key":1256,"_type":1260},"link",{"_type":10,"current":1262},"cc-by-sa","CC BY-SA 4.0","Part 6: An operating system for coding agents: the disciplined build",[1266,1272,1278,1284],{"_id":1267,"publishedAt":1268,"slug":1269,"sponsored":12,"title":1271},"f13e8883-6d06-432d-9f93-10ae8b0fd048","2026-10-08T20:22:56.685Z",{"_type":10,"current":1270},"production-grade-llms-and-agents-a-field-guide","Production-grade LLMs and agents: a field guide",{"_id":1273,"publishedAt":1274,"slug":1275,"sponsored":12,"title":1277},"004e0789-dc2d-496b-a8af-b6e6aefde5f7","2026-10-08T20:08:53.629Z",{"_type":10,"current":1276},"part-5-operating-an-llm-system-observability-cost-routing-and-the-platform-underneath","Part 5: Operating an LLM system: observability, cost, routing, and the platform underneath",{"_id":1279,"publishedAt":1280,"slug":1281,"sponsored":12,"title":1283},"358fa8ac-2467-4ef4-893c-dad3490046df","2026-10-08T14:00:00.000Z",{"_type":10,"current":1282},"a-green-exit-code-is-not-evidence-that-the-work-happened","A green exit code is not evidence that the work happened",{"_id":1285,"publishedAt":1286,"slug":1287,"sponsored":12,"title":1289},"4ae1a4e4-cb6e-4110-b6f3-50b8afa09f49","2026-10-07T20:48:55.325Z",{"_type":10,"current":1288},"part-4-safety-and-governance-for-llm-systems-guardrails-pii-audit-and-memory","Part 4: Safety and governance for LLM systems: guardrails, PII, audit, and memory",{"data":1291,"sourceMap":-1},{"count":1292,"lastTimestamp":12},0]