Writing
Thinking in public.
Three to start with. Then all 47 pieces, clustered by theme: how I build first, the idea underneath for the curious.
Start here
- Build log My agents livelocked on a paragraph of prose Running several coding agents in parallel deadlocked them: not on code, on documentation. The fix was a file layout, not a coordination protocol.
- At work LLMs extract, code decides The only way I've found to put a language model in front of a compliance decision is to never let it make one. The line between "what the document says" and "whether that's acceptable" turns out to be the whole architecture.
- The idea underneath The thread running through absence Why this site exists, what it's for, and the one idea underneath the engineering, the films, and the writing.
Build log: building with agents How Alter actually gets built: the agent org, the state model that lets agents run in parallel, independent verification, and the process around it. the agent orgstate & parallel workverificationworktreesidea → shippedwhat brokethe history of Alter
- Alter wiki · Aug – Sep 2026 The agent org The build process stopped being a loop I cranked and became a system in its own right, with the state model doing most of the work.
- My agents livelocked on a paragraph of prose Running several coding agents in parallel deadlocked them: not on code, on documentation. The fix was a file layout, not a coordination protocol.
- Nothing marks its own homework How I verify work an agent produced, when the obvious reviewer is the agent that just wrote it, and why the trick is what you refuse to tell the reviewer.
- Running Claude Code with worktrees (without losing your mind) A field guide to the three mains, why git refuses to check out main twice, and the five traps that cost me real time once several agents were sharing one repository.
- Building a feature bank: from idea to shipped How I capture half-formed ideas in chat and turn them into ADRs, specs, designs, and shipped features without polluting my decision log or trusting stale notes.
- Alter wiki The restructure Why five modes went internal, why four pages were deleted, and the thing that had to be added back in exchange.
- Alter wiki What broke The incidents and the lessons they left, including the one that changed how I decide a feature is "done."
- Alter wiki · 3–4 Feb 2025 chotu: the seed A two-day script for saving thoughts into a database. The first time the idea touched code.
- Alter wiki · Apr 2025 pa2: PARA + AI The first real product: a filing system that interviewed you, sorted your goals, and summarised your projects.
- Alter wiki · May – Jun 2025 CogniNote: the name arrives An AI notepad with a task board, in the repo that would later be renamed "alter."
- Alter wiki · 25 Jun – 13 Jul 2025 alter_1: drowning in plumbing The first attempt at a serious platform. It sank in three weeks, and taught the most important lesson of the whole project.
- Alter wiki · mid-Jul – early-Oct 2025 The hinge: eleven quiet weeks The most important stretch of the whole project, and not one line of code was written in it.
- Alter wiki · Oct 2025 – Jan 2026 The spec-first turn Months of writing instead of coding: the entire product on paper before a line was built.
- Alter wiki · Nov 2025 – Apr 2026 v2: the wrong machine The specced product, built for real, and the discovery that three quarters of what people capture isn't a task.
- Alter wiki · 10 May 2026 The reckoning One schema change (captures stop being proto-tasks) and the five modes fall out of it.
- Alter wiki · 11 – 14 May 2026 Greenfield: 72 hours Delete the old product, redesign the whole surface, and rebuild the build process itself: three moves in three days.
- Alter wiki · May – Jun 2026 Building v3 Six weeks shipping the five modes, the wiki, and the briefing, and the one crisis the speed produced.
- Alter wiki · Jun – Jul 2026 Phase 5: a real product The invisible half of a launch: backups, monitoring, legal pages, and the honest line about what isn't switched on yet.
- Alter wiki · Jul 2026 The beta: first contact Other people used it, on their own phones, for the first time. The product held up better than the instruments did.
- Alter wiki · Aug 2026 The restructure Five pages became two tabs, the modes went internal, and the filing rules moved out of my prose and into the model.
Agentic systems at work, in regulated finance What I build at the day job: a shared verification platform and two document-intelligence systems on it, for a collections business under US regulation. The pattern is public; the data is not. LLMs extract, code decidesfail closedpresence ≠ prooftyped contractsthe fetch registrydocument readingevals & safety
- LLMs extract, code decides The only way I've found to put a language model in front of a compliance decision is to never let it make one. The line between "what the document says" and "whether that's acceptable" turns out to be the whole architecture.
- Fail closed In the systems I build at work, a wrong "yes" is a data breach and a wrong "no" is three minutes of a colleague's time. That asymmetry is the first design input, not a tuning parameter, and honouring it means making "I don't know" a first-class output.
- Presence is not proof A record labelled "final statement" existing in the index is not evidence a final statement exists. "Exists" turns out to have four layers, each catching failures the one before can't see, and the same is true of "the tests pass".
- Work wiki The verification pattern Gather, extract, reconcile, cite: the four-step shape every check in both products takes, and where the model is and isn't allowed to be.
- Work wiki Data contracts Five project-agnostic Pydantic models (status, citation, extraction, comparison, finding) that every check produces, and how each product maps them to its own output.
- Work wiki The fetch registry The read-only data layer is a validated allow-list, not a query builder: declared tables, declared columns, one bound key, SELECT only, and no model-derived string within reach of SQL.
- Work wiki Document reading Vision-first, tiered: a cheap page prioritiser, GPT vision on the pages that matter, and Azure Document Intelligence demoted to a fallback that has to earn its trigger.
- Work wiki Design decisions The full set of platform-level decisions both products inherit, with the reasoning, and with the two that were reversed.
- Work wiki Evaluation and AI safety Golden sets with deterministic ground truth, hard floors that don't tune, an AI-safety suite that blocks merges, and the override flywheel that keeps both honest in production.
- Work wiki Stage one, as built The intake pipeline that shipped first: OCR, deterministic form detection, vision on hand-marked forms, KB-grounded classification, and an idempotent batch runner over a warehouse status table.
- Work wiki The investigation engines Three parallel checks (documentation completeness, correspondent verification, and the flag engines), each a platform finding, each gated by what the letter turned out to be.
- Work wiki The case pack What the colleague actually sees: a two-line summary, four status chips, the regulatory clocks, a recommended action from a decision table the model can only select from, and an appendix where every conclusion is one click from its evidence.
- Work wiki Two review modes, never mixed The same document checks answer two different questions, is the audit sample clean and is this account ready for legal, and running them under one configuration produces false rejections.
- Work wiki The required-document model Which documents an account needs is a function of product, seller, and jurisdiction, with exceptions, and the production data showed the function is sparse, not a cube.
- Work wiki Balance support and misclassification The two reasons placements get rejected, an unsupported balance and a document that isn't what its index says, and how each is decided by code over model-extracted evidence.
AI engineering in practice Production lessons from running LLMs in a real product: evals, structured output, cost, and the failure modes nobody warns you about. prompts as dependenciesarchitecturethe agentic layerevals & costprivacy by CIobservabilitylaunch readiness
- Prompts are dependencies you don't control A prompt that had worked for weeks started refusing outright, after a change I didn't make. What that taught me about treating prompts as production dependencies.
- Alter wiki Architecture Eleven services, REST-only boundaries, no shared databases, and why the numbers look the way they do.
- Alter wiki The surfaces Two tabs, a dock that owns capture, and a receipt trail: what the product actually looks like after the restructure.
- Alter wiki The agentic layer Moving decisions out of hand-written rules and into the model, and the one line I wouldn't move.
- Alter wiki The self-compiling wiki How a stream of captures becomes a stable page: compression, a plain-Postgres queue, and user-edits-win.
- Alter wiki Evals & cost control Golden suites with dollar caps, per-user cost ceilings, and per-category model routing running in production.
- Alter wiki The five modes The internal response contract: what a capture can become, now that you never have to pick one.
- Alter wiki Privacy & security Encryption by default and content-can't-leak invariants, enforced by CI, not by convention.
- Alter wiki Observability Error tracking, uptime, and a read model for watching how the system is actually used, including a zero-dependency Sentry client.
- Alter wiki Launch readiness The unglamorous track: backups with a rehearsed restore, staging that mirrors prod, GDPR mechanics, and a security audit that turned into its own phase.
- Alter wiki Everything it talks to The full integration inventory: every external service Alter depends on, and how each is wired.