Active software project · Short demo forthcoming

Lares Agent IDE

I run several AI agents at once. Lares is what makes their work visible while it happens.

Lares is a desktop workspace for watching and directing teams of AI agents. Terminals, files, browsers, documents and notebooks all live in one window, and so do the agents working in them.

I built it to fix a practical problem. Running several coding agents at once meant scattering them across terminals and editor windows, and when one stalled waiting on an answer I had to hunt for it. Lares puts every agent on a single rail with its status and context budget in view, lets me attach to any one of them, and hands a supervisor agent the job of keeping the rest moving.

The plan for this website was written inside Lares. Claude and Codex argued the design out through its cross-provider GroupThink and converged on one written plan.

The Lares dashboard: a vertical rail of live agent cards, each showing its name, provider, turn count and share of its context window, with one agent's chat attached in the right-hand pane.
Every agent on one rail. Each card carries a name, the harness running it, a turn count, and how much of its context window is gone. The pane on the right is one agent's live chat, tool call by tool call. Light theme · six supervisors and four workers in one workspace

Demo

A cross-provider GroupThink mid-flight. Two planners, one Claude and one Codex, critique the same draft plan independently, trade notes, and a synthesizer writes the converged version to a new file. A short screen recording of this is planned. I haven't made it yet, so what you are looking at is a still.

Lares in dark theme during a cross-provider GroupThink: a Claude synthesizer card and a Codex planner card run side by side under the same supervisor, with the supervisor's chat on the right describing the deliberation.
Short demo forthcoming

How it works

Lares is organized around tasks rather than features. A session usually runs like this:

  1. see active agents + context usage
  2. attach to an agent's chat or terminal
  3. inspect tool calls and files read-vs-written
  4. dispatch cross-provider GroupThink
  5. review outputs in docs, notebooks, maps, browser
  6. govern browser access with origin allowlists + audit logs
Architecture

Lares is harness-based, not SDK-based. Agents run as real command-line programs in real terminals. A harness has to speak two things to drop in: MCP, so it can reach into the workspace, and lifecycle hooks, so it can report its own state back. No vendor SDK, and no integration to wait for. Claude Code is the reference harness I develop and test against. Codex is wired in too, which is what makes the cross-provider deliberation possible.

The shell is Electron with a React and TypeScript renderer. Terminals are node-pty and xterm bridged to WSL and tmux. Local state lives in better-sqlite3. Markdown is edited in Milkdown, and Jupyter notebooks, Word documents, PDFs, GeoTIFFs, Leaflet maps, KaTeX and CSV all render inline instead of opening somewhere else. A companion VS Code extension mirrors a live agent's terminal session into the editor, for anyone who would rather stay there.

That neutrality is the whole point. It is what lets two different providers work the same problem and converge on a shared answer.

What it does

Inside Lares

Five views, in the order you would meet them.

An agent's raw terminal opened in a pane beneath the agent cards, showing its live tmux session mid-answer, with the same agent's chat rendered in the right-hand pane.
The chat pane is a rendering. The terminal is the actual thing. Double-click an agent card and you are inside the tmux session it runs in, reading exactly what it saw and able to type to it directly. node-pty + xterm, bridged to WSL/tmux
The Outputs pane listing files an agent created and modified, grouped under Created and Modified headings, each row showing the filename, a full path and how long ago it happened.
What did it actually change? Every agent keeps a ledger of the files it created and the files it modified, with full paths and timestamps, carried across sessions. That is the difference between an agent telling you it did something and you being able to check. Outputs tab · created and modified files, tagged by session
A structured plan document rendered in the Files view beside an agent's chat, showing a grounding document of verbatim user feedback, a distilled list of issues, and links to specific source files.
Plans render as documents, not as a chat transcript. Sections are anchored, and the surface keeps a provenance trail of which agent read and edited each one. The app witnesses that trail from the agents' own read and write calls rather than from what they say they did. Files view · View, Edit, Source, or open in VS Code
A Markdown document open in edit mode with a formatting toolbar floating over a selection and an Add Comment box open, containing a note addressed to the agents.
Comments are addressed to the agents. You select a passage in a document and leave a note, and the agent working on that file reads it in place. Review becomes a margin annotation instead of another instruction pasted into a prompt. Milkdown editor · comments anchored to a selection
The embedded browser with the agent allowlist panel open, listing origins the agents may visit, each with the agent and task that requested it, a visit-allowed state, and a separate switch for whether an agent may use the signed-in session.
Browser access is a list you keep, not a permission you grant once. Each origin records which agent asked for it and why, and whether that origin may use your signed-in session, which is a separate decision and off by default. Everything the agents do there lands in an action audit log. Embedded browser · visit and login are separate switches, per origin

Honest limits & status

Honest limits

  • A short demo video is planned but I have not recorded it. Every image on this page is a static screenshot of the running app.
  • Lares is alpha software in active development. It installs from source, there is no packaged build yet, and it currently runs on Windows with WSL.
  • Claude Code and Codex are the only two harnesses I have actually tested. Provider neutrality is a design property of the MCP-and-hooks interface, not a claim that any other harness has been verified.
  • The security model is "you trust the agents and the workspace," not "the app sandboxes the agents." Some boundaries exist: the browser allowlist, the audit log, best-effort path confinement. Others do not. Terminal commands are not sandboxed.
  • This is a personal project with no external users to speak of. It is here for what it shows about how I build, not as a product.

Links & outputs

The name is Roman. The Lares were the household guardians who watched over the home. That fits a workspace whose whole argument is that your agents should never be a black box.

Interested in this work?

I'm an early-career environmental data scientist in the SF Bay Area.