← All articles

Building SoloAgent to understand AI harnesses

I built SoloAgent as an AI harness experiment to understand how model, tool, state, and execution loops work in practice.

Josh Hamilton6 min read
SoloAgent screenshot
Reading appearance

Preferences stay in this browser.

Keep or share this article
Download Markdown

Use your browser’s print dialog to print or save a PDF.

You can also select and copy the citation above.

Look up a technical term →

To understand how the harness layer in modern AI workflows actually works, I built one myself.

I was not trying to sell anything. This was a practical experiment to measure how much work it takes to wire a usable local AI coding harness end to end.

The result is SoloAgent: a local desktop app for per-project workspaces, scoped chat context, terminal execution, and live git visibility.

SoloAgent screenshot

Why I built this harness

I wanted first-hand constraints instead of abstract takes:

  • what state needs to persist between prompts, tools, and spaces
  • how tool calls should stream and render without killing UX
  • where terminal and git integration create real complexity
  • what a practical local AI harness looks like without cloud lock-in

What I mean by an AI harness

For this project, an AI harness is the runtime shell around the model:

  • input and context shaping
  • tool execution and trace visibility
  • local command/terminal integration
  • persistence for history, settings, and state
  • iteration loops so prompts can be tested and refined quickly

What SoloAgent currently does as a harness

  • Project + space-scoped chat context
  • Streaming assistant responses with tool trace rendering
  • PTY terminal workspace with tabs/splits
  • Git Diff and file-tree insight panels
  • SQLite-backed persistence for projects/settings/history

Core app/runtime

  • Electron 39
  • React 19
  • TypeScript 5
  • Node.js 22+
  • SQLite via node:sqlite

AI harness + chat runtime

  • @tanstack/ai
  • @tanstack/ai-react
  • @tanstack/ai-openai
  • @tanstack/ai-client
  • zod (typing/validation support)

Terminal + git workflow

  • node-pty (PTY shell sessions)
  • ghostty-web (terminal renderer)
  • @pierre/diffs (diff rendering)
  • Git + GitHub CLI (gh) integration
  • codex CLI integration

UI + state

  • Tailwind CSS 4
  • Radix primitives (@radix-ui/react-*)
  • lucide-react
  • motion
  • zustand
  • react-markdown + remark-gfm
  • react-syntax-highlighter

Build and quality tooling

  • electron-vite
  • Vite
  • electron-builder
  • ESLint
  • Prettier
  • Vitest

What this experiment gave me

The value was not a framework pitch. The value was implementation clarity.

I now have a better mental model for where harness complexity really lives: state boundaries, tool-call UX, terminal lifecycle, and git operations under real user behavior.

Your private notes

Only on this device. Notes are never published or sent to a server. Keep up to 100 notes, with 10,000 characters per article. A full store never discards an older note.

Enable JavaScript to keep private notes.

Behind this story

Explore SoloAgent →

Keep the curiosity going

ai

When AI in an interview fails you

I used AI heavily in a technical interview, felt great about the build, and still got rejected because the team could not gauge enough of my understanding.

6 min read
pivot

The Pivot: Reusing a Stable SaaS Codebase for EasyAccessQR.com

How a stable SaaS foundation made it fast to launch EasyAccessQR.com, with analytics, A/B testing, and a full design-flow rewrite.

6 min read
saas

Building a full SaaS in less than a day with Claude and Codex

How I shipped dailystand.dev with organizations, teams, members, analytics, billing, and observability in under 24 hours.

8 min read

Article image

Open original image ↗

Keyboard shortcuts

Shortcuts stay out of text fields. Extra shortcuts are off until you enable them on this device. Ctrl or Command K is always available.

?
Open this help
Ctrl / ⌘ K
Open site search
Alt A
Browse articles
Alt R
Open your reading list
Alt T
Browse topics
Escape
Close dialogs or leave article focus mode