<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Eric Mono</title>
    <description>The latest articles on DEV Community by Eric Mono (@earthwalker17).</description>
    <link>https://dev.to/earthwalker17</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4024302%2F8b60ec5a-cb9b-4210-8777-0a98ab781d14.jpg</url>
      <title>DEV Community: Eric Mono</title>
      <link>https://dev.to/earthwalker17</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/earthwalker17"/>
    <language>en</language>
    <item>
      <title>I Used Opus 5.5 to Build the Entire Middle-earth in Three.js</title>
      <dc:creator>Eric Mono</dc:creator>
      <pubDate>Tue, 27 Oct 2026 18:50:02 +0000</pubDate>
      <link>https://dev.to/earthwalker17/i-used-opus-55-to-build-the-entire-middle-earth-in-threejs-1ap0</link>
      <guid>https://dev.to/earthwalker17/i-used-opus-55-to-build-the-entire-middle-earth-in-threejs-1ap0</guid>
      <description>&lt;p&gt;Opus 5.5 has been viral recently, especially all the "one prompt" fancy demos online.&lt;/p&gt;

&lt;p&gt;But I wanted to try something different: not a one-shot scene, but a complete project that has to iterate through multiple sessions, maintain a coherent architecture, animate a full world, and finally export a polished video.&lt;/p&gt;

&lt;p&gt;So I gave Opus 5.5 a fairly ambitious project:&lt;br&gt;
&lt;strong&gt;Map of Middle-Earth&lt;/strong&gt; — a miniature 3D Middle-earth diorama from LOTR, built with Three.js and WebGPU.&lt;/p&gt;

&lt;p&gt;The final result is a browser-rendered world with real terrain data, 24 landmarks, dynamic weather and lighting, a cinematic route across the map, an original orchestral score, and a 3:47 short film rendered frame by frame.&lt;/p&gt;

&lt;p&gt;This article is about what I learned from building the whole thing with Claude Code.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Architecture before implementation
&lt;/h2&gt;

&lt;p&gt;One thing I've learned from working with coding agents is that large projects become messy quickly if you let every new feature create its own system.&lt;/p&gt;

&lt;p&gt;Eventually the project may still "work", but nobody understands the whole thing anymore.&lt;/p&gt;

&lt;p&gt;So before detailed modelling, I asked it to design the &lt;strong&gt;system space&lt;/strong&gt; first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;third-party geographic data&lt;/li&gt;
&lt;li&gt;Python baking tools&lt;/li&gt;
&lt;li&gt;terrain / water / vegetation / environment&lt;/li&gt;
&lt;li&gt;landmarks / emission / effects / route&lt;/li&gt;
&lt;li&gt;WebGPU render / interactive explorer&lt;/li&gt;
&lt;li&gt;stills / QA / video&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later, when the project grew from simple placeholder landmarks into a full cinematic world, the underlying architecture barely needed to change.&lt;br&gt;
We mostly kept filling existing slots.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Make every frame a complete state
&lt;/h2&gt;

&lt;p&gt;One requirement became increasingly important once video production was in:&lt;br&gt;
&lt;strong&gt;any frame should be renderable independently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So the project revolves around a &lt;code&gt;SceneState&lt;/code&gt; which every system evaluates.&lt;br&gt;
This means the route line, camera placement, annotations and environmental effects can all be reconstructed for an arbitrary timestamp.&lt;/p&gt;

&lt;p&gt;It allowed us to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;jump directly to a film frame&lt;/li&gt;
&lt;li&gt;resume interrupted renders&lt;/li&gt;
&lt;li&gt;compare specific frames&lt;/li&gt;
&lt;li&gt;render QA stills without playing the film&lt;/li&gt;
&lt;li&gt;increase samples only for selected frames&lt;/li&gt;
&lt;li&gt;render effects consistently across separate processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even particles were designed to be mostly &lt;strong&gt;stateless&lt;/strong&gt;.&lt;br&gt;
Instead of accumulating simulation history, their appearance is derived from a deterministic effect clock.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Landmarks are declarations, not mini applications
&lt;/h2&gt;

&lt;p&gt;There are 24 major landmarks in the finished world.&lt;br&gt;
The obvious approach was to build each location as an independent Three.js scene.&lt;/p&gt;

&lt;p&gt;But I deliberately avoided that.&lt;br&gt;
Each landmark instead declares what it needs.&lt;br&gt;
Shared systems then realize those declarations.&lt;/p&gt;

&lt;p&gt;A landmark doesn't create its own render loop, invent a new material system, or build a new particle engine.&lt;br&gt;
It simply says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I need smoke here.&lt;br&gt;
or:&lt;br&gt;
I need an emissive light here.&lt;br&gt;
or:&lt;br&gt;
flatten this terrain region.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That made it possible to build very different locations without turning the repository into 24 unrelated projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. AI visual work still needs QA
&lt;/h2&gt;

&lt;p&gt;AI can write valid geometry that looks terrible;&lt;br&gt;
It can produce mathematically correct camera placement that frames the wrong thing;&lt;br&gt;
It can also build a technically functioning landmark that reads as a toy from the actual film camera.&lt;/p&gt;

&lt;p&gt;So "the code runs" is never enough.&lt;/p&gt;

&lt;p&gt;We built a capture and review pipeline around the project.&lt;br&gt;
The tooling could automatically render:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;individual shots&lt;/li&gt;
&lt;li&gt;contact sheets&lt;/li&gt;
&lt;li&gt;day/night comparisons&lt;/li&gt;
&lt;li&gt;before/after comparisons&lt;/li&gt;
&lt;li&gt;reference comparisons&lt;/li&gt;
&lt;li&gt;QA sets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model can generate large amounts of code.&lt;br&gt;
But &lt;strong&gt;visual judgment still has to close the loop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Generation without evaluation is just faster randomness.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The laptop shaped the procedure
&lt;/h2&gt;

&lt;p&gt;The entire project was developed on a fairly modest Windows laptop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8GB RAM&lt;/li&gt;
&lt;li&gt;Intel UHD integrated graphics&lt;/li&gt;
&lt;li&gt;shared memory between CPU and GPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Early on, full QA runs could push the machine into memory pressure.&lt;br&gt;
Chrome, Vite, Node, capture tooling and the rendered scene were all competing for the same limited memory.&lt;/p&gt;

&lt;p&gt;Instead of simply accepting instability, the tooling gained resource awareness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one heavy GPU job at a time&lt;/li&gt;
&lt;li&gt;machine-wide GPU locking&lt;/li&gt;
&lt;li&gt;memory guards before capture&lt;/li&gt;
&lt;li&gt;separate preview/review/final quality tiers&lt;/li&gt;
&lt;li&gt;sequential rather than uncontrolled parallel rendering&lt;/li&gt;
&lt;li&gt;resumable film rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real-time preview was deliberately tuned for that machine.&lt;br&gt;
Final quality could then spend much more time per frame offline.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Turning the world into a film
&lt;/h2&gt;

&lt;p&gt;Once the static world was done, the next major task became directing.&lt;/p&gt;

&lt;p&gt;The final film uses a picture-locked timeline containing camera movement, environmental state, annotations, effects and route progression.&lt;/p&gt;

&lt;p&gt;A luminous gold path moves across the map while the camera travels from west to east.&lt;br&gt;
The journey also moves through a full day, from daylight in Shire to night near Mordor.&lt;/p&gt;

&lt;p&gt;The score became another interesting experiment.&lt;/p&gt;

&lt;p&gt;Instead of using existing LOTR music, the project generates an original orchestral score.&lt;br&gt;
The music pipeline uses Python tooling together with orchestral sample libraries.&lt;/p&gt;

&lt;p&gt;The score follows the locked picture and is rendered separately before final assembly.&lt;/p&gt;




&lt;p&gt;After building this project, I think the impressive part of AI coding models isn't one-shot generation.&lt;/p&gt;

&lt;p&gt;The stronger capability is &lt;strong&gt;continuity across domains&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The same model can work across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;architecture&lt;/li&gt;
&lt;li&gt;procedural modelling&lt;/li&gt;
&lt;li&gt;browser capture&lt;/li&gt;
&lt;li&gt;visual QA&lt;/li&gt;
&lt;li&gt;camera choreography&lt;/li&gt;
&lt;li&gt;music tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And because the project had stable architecture and project-state documents, later sessions could continue without reconstructing the entire context from scratch.&lt;/p&gt;

&lt;p&gt;That makes AI especially useful for full-stack solo projects.&lt;/p&gt;




&lt;p&gt;The code, architecture, rendering pipeline, QA tooling and reproduction steps are all open-source here:&lt;br&gt;
&lt;a href="https://github.com/earthwalker17/map-of-middle-earth" rel="noopener noreferrer"&gt;https://github.com/earthwalker17/map-of-middle-earth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a non-commercial fan project, and none of the original film footage or music is used.&lt;/p&gt;

&lt;p&gt;I started because I wanted to see how impressively Opus 5.5 could do for 3D scenes.&lt;br&gt;
I ended up caring much more about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can a coding model stay coherent across an entire production process?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For this project, the answer was yes — &lt;strong&gt;if the architecture, constraints, judgment and verification loops are well-defined&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>threejs</category>
    </item>
    <item>
      <title>What's the Minimum Architecture a Modern Agent Harness Needs?</title>
      <dc:creator>Eric Mono</dc:creator>
      <pubDate>Mon, 21 Sep 2026 14:35:28 +0000</pubDate>
      <link>https://dev.to/earthwalker17/whats-the-minimum-architecture-a-modern-agent-harness-needs-6eg</link>
      <guid>https://dev.to/earthwalker17/whats-the-minimum-architecture-a-modern-agent-harness-needs-6eg</guid>
      <description>&lt;p&gt;I built this mainly to answer one question while trying to understand coding-agent systems:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What's the smallest agent harness that is still architecturally complete?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;By "complete" I don't mean feature-complete. I mean that the system still has clear answers to questions like: where truth lives, who owns state, where permissions are enforced, how models and tools are composed, how a session survives a crash, and whether adding another feature requires another agent implementation.&lt;/p&gt;

&lt;p&gt;I studied &lt;strong&gt;DeepSeek Harness&lt;/strong&gt; as the main reference. I found it interesting because its architecture is fairly explicit: capabilities have lifecycle and dependency semantics, model-visible history is derived from durable session state, authority is separated from model reasoning, and user surfaces sit over a shared runtime.&lt;/p&gt;

&lt;p&gt;Rather than fork-and-prune to make it look smaller, I tried to re-derive those properties into a minimal system, which now exists as a small open-source project called &lt;strong&gt;MiniDSH&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The resulting design ended up with a few principles that matter more than LOC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the append-only session log is the canonical source of truth;&lt;/li&gt;
&lt;li&gt;models, tools, persistence, authority and context have explicit seams and owners;&lt;/li&gt;
&lt;li&gt;the model proposes an effect, but policy and the effect boundary decide whether it happens;&lt;/li&gt;
&lt;li&gt;the model is a routed capability, not synonymous with the agent;&lt;/li&gt;
&lt;li&gt;terminal, browser and headless are surfaces over one runtime;&lt;/li&gt;
&lt;li&gt;something gets a first-class composition boundary only if it actually needs to be replaced, scoped, removed or independently owned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The last point became a useful rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;everything evolvable has a seam, but not everything needs to become a plugin.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another valuable experiment was the development process itself.&lt;/p&gt;

&lt;p&gt;Most of this project was built through Claude Code sessions. One failure mode I kept noticing in AI-assisted development: coding agents are very good at producing locally reasonable code, while the overall system quietly becomes fragile and incoherent over time.&lt;/p&gt;

&lt;p&gt;A feature needs browser verification, so a browser module appears; Another needs memory, so a memory manager appears. Each addition can make sense locally while the architecture gradually becomes a collection of parallel subsystems rather than a self-consistent system.&lt;/p&gt;

&lt;p&gt;So I tried to invert the process:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;architecture defines sessions; sessions do not define architecture.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before implementing a new feature, I tried to answer where it belongs, what it owns, what it may depend on, what its lifecycle is, and where its durable state goes. If there was no clear architectural home, I treated that as an architecture problem rather than an excuse to create another parallel subsystem.&lt;/p&gt;

&lt;p&gt;Meanwhile, the architecture itself wasn’t treated as sacred. Several sessions were deliberately hardening/review sessions whose job was to falsify the existing design. They found documented invariants that were not actually true, implementation assumptions that failed against real providers or operating systems, and some original plans that contradicted the implementation evidence or upstream DSH research.&lt;/p&gt;

&lt;p&gt;That combination now seems important to me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;design the system space before filling it, but continuously try to falsify the system space itself.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This project is the concrete experiment behind these ideas. It's still an early v1 and deliberately incomplete; I don't consider it a mature coding-agent product like Claude Code, DSH, Codex, etc. The useful part for me has been making the architecture explicit enough that a later session can still answer "where does this belong?" before touching code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/earthwalker17/MiniDSH" rel="noopener noreferrer"&gt;https://github.com/earthwalker17/MiniDSH&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to try it in browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; minidsh
minidsh web &lt;span class="nt"&gt;--cwd&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I’d especially appreciate feedback from people who have worked on agent runtimes, plugin ecosystems, compilers, distributed systems, or similar things.&lt;/p&gt;

&lt;p&gt;Where do you think this architecture is over-designed, under-designed, or simply wrong?&lt;br&gt;
And more broadly: &lt;strong&gt;what do you consider the true minimum set of invariants/components for a modern agent harness?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building an Agent I Could Actually Trust: What I Learned from Agent CLI</title>
      <dc:creator>Eric Mono</dc:creator>
      <pubDate>Thu, 20 Aug 2026 17:09:23 +0000</pubDate>
      <link>https://dev.to/earthwalker17/building-an-agent-i-could-actually-trust-what-i-learned-from-agent-cli-1hmn</link>
      <guid>https://dev.to/earthwalker17/building-an-agent-i-could-actually-trust-what-i-learned-from-agent-cli-1hmn</guid>
      <description>&lt;p&gt;&lt;em&gt;What building Agent CLI taught me about evidence, permissions, verification, and the systems around LLMs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the past month, I've been building an open-source project called &lt;a href="https://github.com/earthwalker17/agent-cli" rel="noopener noreferrer"&gt;Agent CLI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today it's a local-first, terminal-native agent harness that can work across code, shell commands, Git, browser automation, research, DOCX/PDFs, and remote delivery.&lt;/p&gt;

&lt;p&gt;But it didn't start because I wanted to build another coding agent.&lt;br&gt;
It started with a much simpler question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What would an AI agent be like if I cared less about how many capabilities it had, and more about whether I could trust what it actually did?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question ended up shaping the whole project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Starting again after building too much
&lt;/h2&gt;

&lt;p&gt;Before Agent CLI, I already built a much larger local AI system called Agent OS.&lt;/p&gt;

&lt;p&gt;It explored multi-agent orchestration, memory, Git workflows, deployment, browser automation, recovery, research, skills, and a graphical interface.&lt;/p&gt;

&lt;p&gt;It was a useful learning project, but it also exposed a problem: &lt;strong&gt;adding capabilities faster than architectural guarantees makes an agent look more mature than it really is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A polished UI could hide unclear boundaries; Confirmation prompts could be mistaken for actual sandboxing; Large feature increments became harder to review; And a convincing model-generated summary was still just a summary.&lt;/p&gt;

&lt;p&gt;So instead of keep expanding the same system, I started Agent CLI around a narrower thesis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build a trustworthy execution kernel first. Expand the workflows later.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The basic loop became:&lt;br&gt;
&lt;code&gt;Understand → Plan → Act → Observe → Verify → Record → Resume&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;What began as a design principle gradually became a test for almost every feature I added.&lt;/p&gt;

&lt;h2&gt;
  
  
  An agent is more than an LLM with tools
&lt;/h2&gt;

&lt;p&gt;The interesting engineering problem isn't about the model.&lt;/p&gt;

&lt;p&gt;Once an agent can modify files, execute processes, access the network, or publish code, the important part becomes the &lt;strong&gt;execution harness around the model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The model can propose an action;&lt;br&gt;
The runtime decides whether it's allowed.&lt;/p&gt;

&lt;p&gt;The model can say tests passed;&lt;br&gt;
The runtime should know which process ran and the exit code.&lt;/p&gt;

&lt;p&gt;The model can say a file was fixed;&lt;br&gt;
The runtime should know what bytes changed and whether verification happened afterwards.&lt;/p&gt;

&lt;p&gt;This led to one rule that has survived almost every iteration of Agent CLI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The model may reason about reality, but it shouldn't define reality.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whenever possible, reality comes from files, hashes, process results, diffs, Git state, browser observations, and other external evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence over narration
&lt;/h2&gt;

&lt;p&gt;Agent runs naturally produce persuasive narratives:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Implemented the feature, fixed the bug, and all tests pass.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But many subtle failures can hide behind that sentence.&lt;/p&gt;

&lt;p&gt;Maybe the test ran before the final edit; Maybe it ran in the wrong package; Maybe the command timed out; And maybe the model interpreted partial output as success.&lt;/p&gt;

&lt;p&gt;Agent CLI therefore records important actions into an append-only event log: approvals, commands, file mutations, hashes, verification results, and other consequences.&lt;/p&gt;

&lt;p&gt;Reports are derived from that evidence rather than reconstructed from the model's memory.&lt;/p&gt;

&lt;p&gt;Verification is also temporal.&lt;/p&gt;

&lt;p&gt;A file is only considered checked when a real verification process succeeds &lt;strong&gt;after its last relevant mutation&lt;/strong&gt;; A successful build in one project cannot certify a change in another; A killed command without an exit code cannot quietly become a pass.&lt;/p&gt;

&lt;p&gt;This sounds like implementation detail, but it changed the architecture significantly.&lt;/p&gt;

&lt;p&gt;The conversation is context.&lt;br&gt;
The model's explanation is interpretation.&lt;br&gt;
The execution record is evidence.&lt;/p&gt;

&lt;p&gt;Those are three different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Permission, approval, and sandboxing are different problems
&lt;/h2&gt;

&lt;p&gt;Another lesson came from trying to define what “safe execution” actually means.&lt;/p&gt;

&lt;p&gt;Agent tools often expose broad modes such as safe, automatic, or full access. They are convenient, but they can hide what has actually been authorized.&lt;/p&gt;

&lt;p&gt;Agent CLI instead evaluates individual actions through a centralized policy gate.&lt;/p&gt;

&lt;p&gt;Tools declare facts about their effects—running a command, mutating files, reading remotely, sending data externally—and the runtime decides whether that action is allowed, requires approval, or should be denied.&lt;/p&gt;

&lt;p&gt;This also forced me to separate three concepts I previously treated too loosely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trust&lt;/strong&gt;: permission to operate inside a workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Approval&lt;/strong&gt;: authorization for a particular consequential action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sandboxing&lt;/strong&gt;: technical enforcement by the operating system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A confirmation prompt isn't a sandbox.&lt;br&gt;
A workspace path check isn't a sandbox.&lt;br&gt;
And trusting a project doesn't mean approving every future action.&lt;/p&gt;

&lt;p&gt;Agent CLI currently has real OS-level sandboxing for eligible auto-run commands on Windows, using Low Integrity and a Job Object. But that boundary is deliberately described narrowly: it doesn't prevent reads or control network access, and explicitly approved commands run unsandboxed.&lt;/p&gt;

&lt;p&gt;On platforms where the same enforcement is unavailable, command auto-run fails closed instead of pretending the guarantees are equivalent.&lt;/p&gt;

&lt;p&gt;That produced another principle I now care about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Security degradation should be visible degradation.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An honest weak boundary is more useful than a strong-sounding label.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reversibility is an underrated form of autonomy
&lt;/h2&gt;

&lt;p&gt;As agents gain more authority, the obvious solution is to ask users for confirmation more often.&lt;/p&gt;

&lt;p&gt;But an agent that asks before every small edit quickly stops feeling like an agent, but more like a baby you have to look after all the time.&lt;/p&gt;

&lt;p&gt;A better solution for many local operations is to make them cheaply reversible.&lt;/p&gt;

&lt;p&gt;Agent CLI snapshots workspace changes before applying them. &lt;code&gt;/undo&lt;/code&gt; can restore them later and refuses to overwrite files that have drifted. Larger recovery points can use hidden Git references without moving the user's branch or HEAD.&lt;/p&gt;

&lt;p&gt;Mutating delegated agents work in disposable Git worktrees, and their changes reach the main workspace only through explicit integration.&lt;/p&gt;

&lt;p&gt;This changed the question from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should the agent be allowed to modify this file?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can this operation be made reversible enough that review afterwards is cheaper than interruption beforehand?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not every action fits that model. Publishing, destructive operations, and sensitive external effects still deserve stronger approval boundaries.&lt;/p&gt;

&lt;p&gt;But for ordinary local work, &lt;strong&gt;reversibility can often buy useful autonomy without simply removing control.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  General-purpose shouldn't mean improvising everything
&lt;/h2&gt;

&lt;p&gt;Agent CLI started as a coding agent, but I wanted to know whether its architecture was actually general or merely coding-specific.&lt;/p&gt;

&lt;p&gt;DOCX and PDFs became an early test.&lt;/p&gt;

&lt;p&gt;Instead of creating a separate “document agent,” the same runtime writes a structured specification, deterministic software renders the artifact, the result is parsed back for validation, pages can be rasterized, and a vision-capable model can inspect the real output.&lt;/p&gt;

&lt;p&gt;This led to a broader idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Many high-quality agent workflows need an intermediate representation between language and effects.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Code already has source files.&lt;br&gt;
Docs can have a document specification.&lt;br&gt;
Slides can have a layout model.&lt;br&gt;
Video can have an edit decision list.&lt;br&gt;
Deployment can have typed desired state.&lt;/p&gt;

&lt;p&gt;The model handles ambiguity and high-level decisions. Deterministic software handles repeatable transformations and validation.&lt;/p&gt;

&lt;p&gt;That seems much more promising to me than letting the model rediscover an ad-hoc workflow every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  More agents doesn't mean a better agent system
&lt;/h2&gt;

&lt;p&gt;Agent CLI eventually gained planning, delegated research, reviewing, and isolated mutating workers.&lt;/p&gt;

&lt;p&gt;But building those features actually made me less interested in the “agent team” metaphor.&lt;/p&gt;

&lt;p&gt;Once the implementation becomes concrete, multi-agent execution looks much more like a familiar systems problem:&lt;br&gt;
&lt;strong&gt;How do we delegate bounded work, isolate concurrent mutation, preserve provenance, and safely integrate results?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A child agent should inherit the same or narrower authority.&lt;br&gt;
A mutating worker shouldn't casually share the parent's workspace.&lt;br&gt;
An approved plan should refer to specific content, not merely an old conversational “yes”.&lt;/p&gt;

&lt;p&gt;Those boundaries matter more than how many agents appear in the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The main lesson: remove ambiguity before adding intelligence
&lt;/h2&gt;

&lt;p&gt;Agent CLI is now a substantial project: more than 50k lines of TypeScript source, over 2400 hermetic tests, five model providers, multiple workflow areas, and a runtime that has been exercised end-to-end on real software work.&lt;/p&gt;

&lt;p&gt;But the most valuable improvements rarely came from adding more features.&lt;/p&gt;

&lt;p&gt;They came from replacing vague concepts with precise ones.&lt;/p&gt;

&lt;p&gt;“Safe command” became an action contract plus policy plus an enforcement boundary.&lt;br&gt;
“Verified” became a successful process after the relevant mutation.&lt;br&gt;
“Plan approved” became approval of specific semantic content.&lt;br&gt;
“Memory” became context that carries no authority.&lt;br&gt;
“Multi-agent” became bounded delegation and isolated workspaces.&lt;br&gt;
“Done” became something that should be justified by evidence.&lt;/p&gt;

&lt;p&gt;That has changed the question I ask when an agent behaves unreliably.&lt;/p&gt;

&lt;p&gt;Instead of immediately asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How should I improve the prompt?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I now ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What ambiguity is the model currently resolving that the system could resolve instead?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes the model really should reason about it.&lt;/p&gt;

&lt;p&gt;But surprisingly often, the better answer is a type, a state machine, a hash, an exit code, a sandbox boundary, or a deterministic renderer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent engineering is increasingly systems engineering
&lt;/h2&gt;

&lt;p&gt;Models will keep getting stronger.&lt;/p&gt;

&lt;p&gt;But stronger models also mean we will delegate more consequential work to them, which makes the surrounding harness more important rather than less.&lt;/p&gt;

&lt;p&gt;For me, the interesting questions are increasingly:&lt;br&gt;
&lt;strong&gt;What may happen?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;What actually happened?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;How do we know it worked?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;What happens if it fails halfway through?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Can someone else inspect the evidence and reach the same conclusion?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are not entirely new questions.&lt;/p&gt;

&lt;p&gt;Operating systems, databases, build systems, version control, security engineering, and distributed systems have been dealing with variations of them for decades.&lt;/p&gt;

&lt;p&gt;The model is new.&lt;br&gt;
Many of the engineering problems around it are not.&lt;/p&gt;




&lt;p&gt;Agent CLI is still an experiment rather than a claim that I have found the “correct” architecture.&lt;/p&gt;

&lt;p&gt;The project is completely open source under MIT, and I'm sharing it mainly as part of the learning process instead of a commercial launch.&lt;/p&gt;

&lt;p&gt;If you are also working on coding agents, local AI systems, sandboxing, verification, agent runtimes, or related infrastructure, I would genuinely be interested in criticism or alternative approaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/earthwalker17/agent-cli" rel="noopener noreferrer"&gt;github.com/earthwalker17/agent-cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Issues, PRs, and technical discussion are all welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>architecture</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I Made a Product Demo with Claude Code, Playwright, and FFmpeg</title>
      <dc:creator>Eric Mono</dc:creator>
      <pubDate>Mon, 13 Jul 2026 14:47:14 +0000</pubDate>
      <link>https://dev.to/earthwalker17/how-i-made-a-product-demo-with-claude-code-playwright-and-ffmpeg-2ach</link>
      <guid>https://dev.to/earthwalker17/how-i-made-a-product-demo-with-claude-code-playwright-and-ffmpeg-2ach</guid>
      <description>&lt;p&gt;I recently needed a short product demo for my open-source project called Agent OS.&lt;/p&gt;

&lt;p&gt;The goal was modest: create a clear 45–60 second walkthrough of the real product.&lt;/p&gt;

&lt;p&gt;I didn't need a polished advertisement. I also didn't want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;manually record a dozen clips&lt;/li&gt;
&lt;li&gt;learn Premiere or After Effects&lt;/li&gt;
&lt;li&gt;move every cut and caption on a timeline&lt;/li&gt;
&lt;li&gt;recreate the product interface with generated animation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I tried a simple automated workflow:&lt;br&gt;
&lt;strong&gt;Claude Code + Playwright + FFmpeg&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result was a 56-second silent MP4 created in roughly 30 minutes, using around 50K tokens with Opus 4.8.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude Code handled
&lt;/h2&gt;

&lt;p&gt;Claude Code first inspected the application and identified the existing product states that could form a complete story:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Agent OS landing page&lt;/li&gt;
&lt;li&gt;Main Agent planning and Coding Agent handoff&lt;/li&gt;
&lt;li&gt;A real task graph and execution trace&lt;/li&gt;
&lt;li&gt;Build, browser, and visual verification&lt;/li&gt;
&lt;li&gt;A failed browser run with runtime evidence&lt;/li&gt;
&lt;li&gt;A linked bounded-recovery run&lt;/li&gt;
&lt;li&gt;A preview-only Git contract&lt;/li&gt;
&lt;li&gt;The finished Pulseboard application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It then started the locally served frontend and backend and used Playwright to navigate through those states.&lt;/p&gt;

&lt;p&gt;Nothing was recreated or fabricated for the video. The walkthrough used existing persisted run records from the real Pulseboard build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it recorded several short clips
&lt;/h2&gt;

&lt;p&gt;The first instinct was to record one continuous browser session.&lt;/p&gt;

&lt;p&gt;That became unreliable when dense modals and long smooth scrolling caused the Playwright video encoder to fall behind.&lt;/p&gt;

&lt;p&gt;The practical fix was simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;record one short clip for each narrative beat&lt;/li&gt;
&lt;li&gt;give each clip its own BrowserContext&lt;/li&gt;
&lt;li&gt;store the content start and end times&lt;/li&gt;
&lt;li&gt;close the context after every clip so the recording is finalized&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result was much more stable than one long recording.&lt;/p&gt;

&lt;h2&gt;
  
  
  What FFmpeg handled
&lt;/h2&gt;

&lt;p&gt;After Playwright produced the raw WebM files, a small Python script used FFmpeg to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trim each clip to its useful content window&lt;/li&gt;
&lt;li&gt;add short labels&lt;/li&gt;
&lt;li&gt;create a simple opening card&lt;/li&gt;
&lt;li&gt;create a GitHub end card&lt;/li&gt;
&lt;li&gt;concatenate everything&lt;/li&gt;
&lt;li&gt;export a 1280×720, 30 fps H.264 MP4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There were no complex transitions. The product interface remained the main visual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this workflow was useful
&lt;/h2&gt;

&lt;p&gt;This won't replace professional video editing.&lt;/p&gt;

&lt;p&gt;But it seems well suited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;open-source project demos&lt;/li&gt;
&lt;li&gt;internal product walkthroughs&lt;/li&gt;
&lt;li&gt;release previews&lt;/li&gt;
&lt;li&gt;reproducible UI recordings&lt;/li&gt;
&lt;li&gt;projects where authenticity matters more than elaborate motion graphics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful shift was treating the demo as another automated software artifact.&lt;/p&gt;

&lt;p&gt;The browser flow is code.&lt;br&gt;
The selected product state is deterministic.&lt;br&gt;
The labels and timings are configuration.&lt;br&gt;
The video can be regenerated when the interface changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The project shown in the demo
&lt;/h2&gt;

&lt;p&gt;Agent OS is a local-first AI Project Operating System — the harness around coding models that adds persistent memory, controlled execution, real verification, bounded recovery, and approval-gated delivery.&lt;/p&gt;

&lt;p&gt;The project is open source here:&lt;br&gt;
&lt;a href="https://github.com/earthwalker17/agent-os" rel="noopener noreferrer"&gt;https://github.com/earthwalker17/agent-os&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo doesn't prove that the system is perfect. It simply gives people a much faster way to see what it actually does.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>playwright</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Agent OS: A Local-First Harness Around Coding Models</title>
      <dc:creator>Eric Mono</dc:creator>
      <pubDate>Fri, 10 Jul 2026 16:48:13 +0000</pubDate>
      <link>https://dev.to/earthwalker17/agent-os-a-local-first-harness-around-coding-models-238b</link>
      <guid>https://dev.to/earthwalker17/agent-os-a-local-first-harness-around-coding-models-238b</guid>
      <description>&lt;p&gt;AI coding model can generate code.&lt;br&gt;
That doesn't mean it can reliably finish real software work.&lt;/p&gt;

&lt;p&gt;Between a plausible diff and a completed task, a real software agent still needs memory, execution boundaries, verification, recovery, permissions, and delivery infrastructure.&lt;/p&gt;

&lt;p&gt;That's the problem I've been exploring through &lt;strong&gt;Agent OS&lt;/strong&gt;, which I now release as an open-source project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/earthwalker17/agent-os" rel="noopener noreferrer"&gt;https://github.com/earthwalker17/agent-os&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The model is only one part of the agent
&lt;/h2&gt;

&lt;p&gt;Agent OS is a local-first AI Project Operating System: a harness around coding models.&lt;/p&gt;

&lt;p&gt;The core architecture separates two responsibilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Main Agent: the brain
&lt;/h3&gt;

&lt;p&gt;The Main Agent handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conversation&lt;/li&gt;
&lt;li&gt;Planning&lt;/li&gt;
&lt;li&gt;Project memory&lt;/li&gt;
&lt;li&gt;Context assembly&lt;/li&gt;
&lt;li&gt;Orchestration&lt;/li&gt;
&lt;li&gt;Delegation decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It cannot change code or execute shell commands directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding Agent: the hands
&lt;/h3&gt;

&lt;p&gt;The Coding Agent operates inside one sandboxed project workspace.&lt;/p&gt;

&lt;p&gt;It can inspect files, edit code, run bounded commands, but it cannot modify project memory or access another project’s workspace.&lt;/p&gt;

&lt;p&gt;The two sides communicate through summaries and structured artifacts rather than unrestricted shared control.&lt;/p&gt;

&lt;h2&gt;
  
  
  “Done” must come from verification
&lt;/h2&gt;

&lt;p&gt;Agent OS doesn't accept the model’s own claim that a task is complete.&lt;/p&gt;

&lt;p&gt;A coding run must pass a real build or test command.&lt;/p&gt;

&lt;p&gt;It can then:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch the application&lt;/li&gt;
&lt;li&gt;Walk declared browser flows&lt;/li&gt;
&lt;li&gt;Capture screenshots and runtime evidence&lt;/li&gt;
&lt;li&gt;Run visual review&lt;/li&gt;
&lt;li&gt;Classify failures&lt;/li&gt;
&lt;li&gt;Propose or execute a bounded repair pass&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Recovery is deliberately limited. The goal isn't unlimited autonomy, but controlled progress with evidence and an audit trail.&lt;/p&gt;

&lt;h2&gt;
  
  
  External actions remain human-controlled
&lt;/h2&gt;

&lt;p&gt;Git pushes, pull requests, deployments, database migrations, and Stripe test-mode operations use explicit preview-and-confirm contracts.&lt;/p&gt;

&lt;p&gt;The agent can prepare the operation, but it cannot silently mutate an external system because it inferred that the user probably wanted it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the system on a real product
&lt;/h2&gt;

&lt;p&gt;To pressure-test the architecture, I used Agent OS itself to build and deploy &lt;strong&gt;Pulseboard&lt;/strong&gt;, a full-stack SaaS, from an empty repository.&lt;/p&gt;

&lt;p&gt;The process included real build, runtime, browser, visual, deployment, and database failures. Those failures became the test for whether the system could collect evidence, expose the problem, and recover instead of simply producing a confident success message.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's included in the first public release
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Local filesystem and SQLite-based project state&lt;/li&gt;
&lt;li&gt;Structured Markdown memory&lt;/li&gt;
&lt;li&gt;Claude, GPT, Gemini, DeepSeek, Kimi, and GLM support&lt;/li&gt;
&lt;li&gt;Sandboxed coding execution&lt;/li&gt;
&lt;li&gt;Parallel agent teams in isolated Git worktrees&lt;/li&gt;
&lt;li&gt;Command, browser, and visual verification&lt;/li&gt;
&lt;li&gt;Typed bounded recovery&lt;/li&gt;
&lt;li&gt;GitHub, Vercel, Supabase, and Stripe test-mode connectors&lt;/li&gt;
&lt;li&gt;Apache-2.0 licensing&lt;/li&gt;
&lt;li&gt;GitHub CI and 832 backend tests&lt;/li&gt;
&lt;li&gt;One-command Windows installation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current limitations
&lt;/h2&gt;

&lt;p&gt;This is an early public release.&lt;/p&gt;

&lt;p&gt;The Windows setup is currently the most thoroughly tested. macOS and Linux users need to follow the manual setup instructions. At least one supported model provider API key is required.&lt;/p&gt;

&lt;p&gt;Local-first means that project memory, workspaces, credentials, and execution records live on the user’s disk. It doesn't currently mean that every supported model runs locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm looking for
&lt;/h2&gt;

&lt;p&gt;I'm especially interested in feedback on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The separation between the Main Agent and Coding Agent&lt;/li&gt;
&lt;li&gt;The first-run installation experience&lt;/li&gt;
&lt;li&gt;The boundaries of automated recovery&lt;/li&gt;
&lt;li&gt;Which internal components should become independent libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repository, architecture documentation, installation guide, and production showcase are all available here:&lt;br&gt;
&lt;a href="https://github.com/earthwalker17/agent-os" rel="noopener noreferrer"&gt;https://github.com/earthwalker17/agent-os&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
