Work / OpenBots
Case study · AI product
OpenBots
A native macOS app that turns Claude into a team of persistent, named teammates you hire, brief and fence yourself.
- Designer & developer, sole author
- v0.5.0, preview build, released 1 September 2026
- Swift 6, SwiftUI + AppKit, the system SQLite, zero third-party dependencies
- MIT, open source
- macOS 14, 15 and 26, Apple Silicon; needs the Claude Code CLI on a subscription
- AI products
Repository Release notes, v0.5.0
The premise
Claude Code answers one prompt at a time and forgets you when the window closes. OpenBots gives it a roster. Six characters are built in. Each teammate is a named character with its own voice, memory and permissions; you hire it in a conversation, brief it, and it keeps its history across restarts. The app is for one operator on one Mac — someone who already works with Claude all day and wants colleagues rather than a chat box.
What is in the build
- A chat-first native interface: sidebar and detail, stable teammate identities and avatars, conversational hiring with an explicit confirmation, per-conversation drafts, paged history, workspace search, and archive and restore without data loss.
- Durable local state: protected SQLite in an app-owned folder, atomic repositories, an exact restore of the workspace on reopen, and scoped Markdown memory that is explicitly non-authoritative.
- Claude through your own CLI: every reply is one local call to the Claude Code command line against the subscription you already have. No API key, no accounts, no server, no telemetry. Everything lives on your Mac.
- Approvals that mean something: a consequential action becomes an immutable proposal whose exact payload you see and approve. An acknowledgement is never treated as acceptance; an approval is never silently treated as execution.
- Attachments and previews: durable owned attachments, in-chat saved text, image and PDF preview with scope fences and cancellation.
Why the approvals are the product
The hard part of an agent app is not the model. It is what the app lets the model do, and how honestly it reports what happened. OpenBots is built on one rule: a saved plan is never presented as an executed action. A proposal is frozen with its exact payload; a decision is recorded against that payload and nothing else; an expired, foreign or tampered proposal cannot reach a decision at all. More than ninety tests exist to defend that rule.
Architecture
Swift 6, SwiftUI for the views, AppKit where the Mac needs it. State lives in the system SQLite library, called directly, with no third-party dependencies: app-owned folders with restrictive permissions, atomic writes, and an exact restore on reopen. On macOS 14 and 15 the bundled SQLite predates version 3.44 and refuses a full-text index inside triggers under a hardened schema, so the app checks the linked SQLite at launch and trusts the schema only where that is needed. Found and fixed while releasing.
Testing
1494 tests in the frozen inventory of v0.5.0 — XCTest and Swift Testing, none of them making live calls — counted from the repository on 4 September 2026. Many are adversarial by design: tampered payloads, hard-linked attachments, replaced roots, oversize sources, foreign receipts. Continuous integration runs the same suite plus forbidden-content scans on every push, on macOS 15 and macOS 26.
How it was built
I design the product and make the technical calls — architecture, stack, interactions — then direct AI coding tools that build to my spec. I review and test everything that ships.
The repository carries the same disclosure in its own words.
Where it stands
v0.5.0 is a deliberate rebuild, not a feature release. v0.1.0, developed under the working name Agency and released as source on 17 August 2026, proved the product and outgrew its foundations, so the app was rebuilt from a clean slate. It has fewer visible features than v0.1.0 and a much better app underneath; web search, connectors and the shared vault are being reintroduced one by one on the new architecture. The executor for consequential actions is deliberately disabled in this build: the app records exact, immutable proposals and approvals, but does not yet execute external actions. I use it myself. It has no other users to claim, and this page claims none.
Get it
Requires macOS 14 or later on Apple Silicon, full Xcode 16 or later, and the Claude Code CLI logged into a subscription. One line in Terminal fetches the latest release and builds it locally:
curl -fsSL https://raw.githubusercontent.com/LorenzoColombani/openbots/main/install.sh | sh
Hire me for this
Available on retainer, for a few clients at a time. Everything I hand over is built so your team can use it without me.