Lorenzo’s Portfolio
Store
← Tools & apps

Native app · demo

OpenBots

Lorenzo Colombani

Claude as a team of named teammates you hire, brief and fence yourself. OpenBots Next v1: bots work in their own folders, search the web, run code, hand work to each other and use your Mac’s apps — every consequential step waits on a card you approve. Your own Claude plan, no API key. Swift 6, MIT, free and open source.

Watch demo

Behind the experience

A roster of AI teammates, with you in charge.

OpenBots Next gives Claude a team of persistent, named teammates. Each bot has its own history, working folder and permissions, while the Mac app keeps the operator’s workspace together between sessions.

The central interaction is an approval card: a proposed send, script or screen action is shown before it runs. The public demo and case study explain both the team model and the boundaries around what bots can do.

By
Lorenzo Colombani
Format
Native app · demo
Role
Designer and developer; sole author
Made with
Swift 6, SwiftUI, AppKit and SQLite
Platform
Native macOS app; video demo here
Licence
MIT; public source repository
Preview
recorded project preview

Case study

OpenBots

The premise

Claude Code answers one prompt at a time and forgets you when the window closes. OpenBots gives it a roster. Each teammate is a named bot 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. The app you install is called OpenBots Next.

What v1 does

  • 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 Claude Code against the Claude Pro or Max plan you already have. No API key, no accounts, no server, no telemetry. Everything lives on your Mac.
  • Bots that do the work: each works in its own folder, writes files and runs code, searches and fetches the web, hires a helper for one job, and hands work to another bot in view.
  • Connectors to the Mac's own apps: Mail, Messages, Contacts, Calendar, Notes, Chrome, Gmail, Google Calendar and Drive, and control of the Mac itself. Every ability is off until you switch it on for that bot.
  • Approvals that mean something: a send, a script or a click on your screen becomes an immutable proposal whose exact payload you see on a card and approve. Nothing consequential runs without it, and an approval is never silently treated as a grant of anything else.
  • 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. The same rule held when v1 switched execution on: every script, send and click still waits on its card. It is not a guarantee against a bot being fooled — a mail or a web page can try to steer it — which is why the card shows exactly what will happen.

Architecture

Swift 6, SwiftUI for the views, AppKit where the Mac needs it. State lives in the system SQLite library, called directly, with no Swift package 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

3,196 tests at v1.0.2 — XCTest and Swift Testing, none of them making live calls; recorded Claude Code runs replay the real wire format, so a change in the CLI shows up as a failing test. Counted from the public repository on 28 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

v1 shipped on 26 September 2026, after a month and some 190 hours of work. v0.1.0, developed under the working name Agency and released as source on 17 August, proved the product and outgrew its foundations. v0.5.0, on 1 September, rebuilt it from a clean slate with fewer features and a much better app underneath. v1 brings the old abilities back on that foundation — the web, connectors, teams, hiring, running code and control of the Mac — each behind the same approval cards. Some of its team features were shaped by studying xAI’s Grok Bot app; no code, text or screens from it are included. I use it myself. It has no other users to claim, and this page claims none.

Get it

Free and open source. Requires an Apple Silicon Mac on macOS 14 or later, full Xcode 16.3 or later, Claude Code from Anthropic’s native installer, and a Claude Pro or Max plan. There is no prebuilt app: one line in Terminal fetches the latest release and builds it on your Mac. The install guide walks through it in sixteen short cards.

From the original published project case study.