[{"data":1,"prerenderedAt":185},["ShallowReactive",2],{"\u002Fprojects\u002Foverseer":3},{"project":4,"profile":130},{"id":5,"title":6,"actions":7,"caseStudy":11,"displayLabel":104,"extension":105,"highlights":106,"kind":111,"links":112,"media":114,"meta":118,"order":119,"slug":120,"stem":121,"summary":122,"tags":123,"year":128,"__hash__":129},"projects\u002Fprojects\u002Foverseer.yml","Overseer",{"demo":8,"caseStudy":9,"live":10},"Watch demo","Case study →",null,{"lead":12,"meta":13,"heroMedia":27,"stats":32,"sections":42},"An orchestration system for AI coding agents. It takes a feature request to reviewed, merged code, one small task at a time.",[14,17,20,23],{"label":15,"value":16},"Role","Design and development",{"label":18,"value":19},"Stack","TypeScript, Node, React, SQLite",{"label":21,"value":22},"Agents","Claude, Codex, OpenCode",{"label":24,"value":25,"href":26},"Links","Demo video ↗","\u002Fvideos\u002Foverseer-demo.mp4",{"aspect":28,"src":29,"video":10,"poster":10,"caption":30,"label":31},"16 \u002F 9","\u002Fimages\u002Foverseer-case-study.png","Five agents seated at the desk pods, with six running tasks on the whiteboard.","Pixel-art office with five agents seated at desk pods and a task whiteboard",[33,36,39],{"label":34,"value":35},"Agent sessions","3,322",{"label":37,"value":38},"Tasks completed","741",{"label":40,"value":41},"Time span","17 days",{"problem":43,"how":50,"office":78,"cost":90,"results":97},{"heading":44,"paragraphs":45},"The problem",[46,48],{"text":47},"Coding agents do well on small, well-defined changes and less well on whole features. Running several at once in one repository causes conflicts, unreviewed code and costs that are hard to see.",{"text":49},"I wanted to talk to one orchestrator and have it hand small tasks to agents, instead of juggling CLI sessions and checkouts myself. The constraints were that it runs locally for one user, drives the CLIs I already use instead of its own model loop, and gives every task its own git worktree. In the first version only I could merge, so nothing landed without my review.",{"heading":51,"intro":52,"steps":53},"How it works","Every task goes through the same six steps. Nothing reaches the feature branch without a review and a passing check.",[54,58,62,66,70,74],{"number":55,"title":56,"body":57},"01","Plan","Split the feature request into small tasks, each with its own definition of done.",{"number":59,"title":60,"body":61},"02","Run","Give every task its own agent (Claude, Codex or OpenCode) in an isolated git worktree.",{"number":63,"title":64,"body":65},"03","Review","A second model reviews every change before it moves on.",{"number":67,"title":68,"body":69},"04","Verify","Check the change against the task’s definition of done.",{"number":71,"title":72,"body":73},"05","Merge","Merge passing tasks into a feature branch for human review.",{"number":75,"title":76,"body":77},"06","Learn","Write down what went wrong and feed the lessons back into the prompts.",{"heading":79,"paragraphs":80,"media":85},"The office",[81,83],{"text":82},"A live pixel-art office shows the agents at work, so you can see what is running at a glance.",{"text":84},"It's the default view, so it's the first thing I see. Each running session is a character at a desk with its harness, model and task above it, and a session that goes quiet for too long dims and wears a clock. The counts live in the room, with a sticky note for open questions, folders on the meeting table for work waiting on my review and a whiteboard with the task board's columns. I mostly use it to spot a stalled agent or a waiting review, since clicking the character or the object takes me straight there.",{"aspect":86,"src":87,"caption":88,"label":89},"21 \u002F 9","\u002Fimages\u002Foverseer-office-wide.png","Daylight view across the office floor, from the lounge corner to the reviewer at the meeting table.","Wide pixel-art office view with agents at their desks, a lounge corner, a reviewer at the meeting table and a glass-walled lab",{"heading":91,"paragraphs":92},"Cost and learning",[93,95],{"text":94},"Overseer records the cost of every task. When a task fails review or verification, the lesson is written down and fed back into the prompts for later tasks.",{"text":96},"One lesson came from agents that finished their work but never committed it. Verification runs inside the task's worktree, so the uncommitted change passed its checks and was then dropped at the merge. Because of this, the prompt now tells every agent to commit each finished piece as soon as it stands on its own and to report a clean git status before it stops.",{"heading":98,"paragraphs":99},"Results",[100,102],{"text":101},"In 17 days Overseer ran 3,322 agent sessions, and 741 tasks landed on merged branches.",{"text":103},"Most of that work built Overseer itself (560 tasks), with 175 tasks for a work project and 6 for this site. 47% of reviewed tasks passed their first review, meaning 299 of 641 landed tasks came back with no findings the first time, and I don't think that's a bad number since the review caught the rest before they merged. The agents and reviews cost about $5.60 per task on average, from the cost each CLI reports or, where it reports none, an estimate from token counts at API prices.","Featured · 2026","yml",[107,108,109,110],"Each task runs with its own agent (Claude, Codex or OpenCode) in an isolated git worktree.","A second model reviews every change; it is verified against a definition of done before merging.","Tracks cost per task and feeds lessons from its mistakes back into its prompts.","A live pixel-art “office” shows the agents at work.","featured",{"demo":26,"caseStudy":113,"live":10,"repo":10},"\u002Fprojects\u002Foverseer",{"src":115,"video":10,"poster":10,"caption":116,"label":117},"\u002Fimages\u002Foverseer-featured.png","Daylight view of five agents seated at their desks, with a reviewer reading a folder at the meeting table.","Isometric pixel-art office with five agents at their desks, a reviewer at the meeting table and a glass-walled lab",{},1,"overseer","projects\u002Foverseer","An orchestration system for AI coding agents. It turns a feature request into small tasks and takes each one from prompt to reviewed, merged code. In 17 days it ran 3,322 agent sessions and landed 741 tasks.",[124,125,126,127],"TypeScript","Node","React","SQLite",2026,"nYRPyWEAbJtwohUQYtthtsq4yUDUOkBaGFNMvC3dVNQ",{"id":131,"about":132,"cvHref":140,"email":141,"extension":105,"intro":142,"labels":143,"locationExperience":155,"meta":156,"name":157,"navigation":158,"role":168,"socials":169,"stem":176,"themeToggle":177,"__hash__":184},"profile\u002Fprofile\u002Fportfolio.yml",[133,136,138],{"text":134,"muted":135},"I'm a software developer in the Amsterdam area with eight years of experience building for the web. Most of my work is in Vue, TypeScript and React.",false,{"text":137,"muted":135},"Lately I design workflows in which AI agents write production code: work is split into small tasks, every change is reviewed and verified, and a person approves the merge. Overseer came out of that work.",{"text":139,"muted":135},"I like work I can check. I write the tests before the code, keep each change small, and don't call something done until there's proof: a green run, a screenshot at every breakpoint or a measured number. I work best in a cross-functional team where things get said plainly, in Dutch or English. When something breaks, I don't stop at the fix: I find out why it happened and turn that into a test, a check or a rule, so the same mistake doesn't come back, for the team or for the AI agents I work with.","\u002FDavidWolf_CV.pdf","david.mwbp@gmail.com","I build web products with Vue, TypeScript and React, and I design AI agent workflows that ship production code.",{"skipLink":144,"primaryNavigation":145,"emailButton":146,"stack":18,"selectedWork":147,"sideProjects":148,"experience":149,"about":150,"contact":151,"contactIntro":152,"downloadCv":153,"copyright":154},"Skip to content","Primary","Email me","Selected work","Side projects","Experience","About","Contact","Email is the best way to reach me.","Download CV (PDF) ↓","© 2026 David Wolf","Amsterdam area · 8 years",{},"David Wolf",[159,162,164,166],{"id":160,"number":55,"label":161},"work","Work",{"id":163,"number":59,"label":149},"experience",{"id":165,"number":63,"label":150},"about",{"id":167,"number":67,"label":151},"contact","Front-end Developer",[170,173],{"label":171,"href":172},"GitHub","https:\u002F\u002Fgithub.com\u002FDavidMWBP",{"label":174,"href":175},"LinkedIn","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fdavid-wolf-8b957b13a","profile\u002Fportfolio",{"prefix":178,"system":179,"light":180,"dark":181,"ariaPrefix":182,"ariaSuffix":183},"Theme","System","Light","Dark","Colour theme: ",". Click to change.","UalM_L-PW7YzYAl8a8j2SpLkhgm9SEkXrJcn8jDv83k",1790735173442]