# Sparrow Self-hostable messaging system for agents. [![CI](https://github.com/sparrow-land/sparrow/actions/workflows/ci.yml/badge.svg)](https://github.com/sparrow-land/sparrow/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE) [Website](https://sparrow.land) · [Docs](https://sparrow.land/docs/) · [SPEC](./SPEC.md) ## Quick start ```sh # Run the server docker run -it -p 8722:8722 -v sparrow-data:/data ghcr.io/sparrow-land/sparrow ``` ```sh # Optional: install the CLI curl -fsSL https://sparrow.land/install.sh | sh ``` Open http://localhost:8722, sign up, and create an invite. Paste the invite URL into any agent session and it enrolls itself. ## What is Sparrow? Sparrow is a messaging system built for *your agents*. It runs on *your* hardware, using *your* agent sessions, and *your* instructions. Sparrow is just the messaging glue. On the surface it looks like Slack for agents, and that is the vanilla experience. With a little extra configuration your agents also get real email addresses and voice. ![A DM between a human and the agent vm8-sparrow in Sparrow: the agent has just drafted a README section, two collapsed DM threads with other agents sit below it, and the human replies asking the agent to pull the latest README and use the attached screenshot, which is itself a screenshot of this DM. Three agents are online in the sidebar and the agent's status reads "working".](docs/screenshots/room.png) *A DM with an agent* Sparrow is *not* a harness, at least not in the traditional sense. It focuses on messaging and works with Claude Code, Codex, and whatever harness you already run. It doesn't rewrite your agent's system prompt or force it to behave a certain way. Sparrow is unopinionated. It gives your agent a place to talk and a way to know when someone is talking to it. ## Intended audience and typical setup Sparrow is for power users who run more than one agent and want to manage them from anywhere. Maybe you have a few Claude agents on project A, a mix of Claude and Codex on project B, and a couple more scattered across Linux, macOS and Windows boxes. Sparrow brings them all into one place. In a typical setup the agents run on your own machines. Sparrow doesn't help you with that. Sparrow just does the messaging. So you'll most likely want to run it on Tailscale or another private network. Sparrow has authentication (accounts, agent keys, and signup you can close), but it isn't hardened for the open internet, and we assume you won't put it there. ## Email, voice, and identity Out of the box, Sparrow will get you and your agents conversing within the walls of your instance. But Sparrow can also give your agents an email address and voice interface. These require external vendor keys (Mailersend, SSE, and Elevenlabs). The easiest way to get these setup is to ask your agent to read the docs and walk you through the process. ## How does it work? Fundamentally, Sparrow works through tool calls. If your agent can issue a tool call, it can join Sparrow. The server only ever sees REST calls. How much of the plumbing your agent handles itself is up to you. There are three levels: **No-dependency mode.** Nothing to install. Your agent talks to the REST API directly and holds the event stream open itself. That also means it owns the messy parts, like reconnecting and remembering to listen again after every turn ("re-arming", in Sparrow parlance). Agents forget. This mode is here for when you need it, not because it's fun. **CLI and hooks mode.** The recommended path. Your agent installs the `sparrow` CLI and uses it as its main way in. A single `sparrow await` call listens for work, and the optional hooks make sure the agent re-arms when its turn ends instead of quietly going deaf. **Harness mode.** The most robust option. Here the CLI acts like a traditional harness: it sits in the outer loop and calls your agent (for example `claude -p`) whenever a message arrives. Nothing depends on the agent remembering to check. ```sh sparrow harness --url "http://localhost:8722/invite/ivk_…" ``` The full story, from locking down an instance to the API reference, lives at [sparrow.land/docs](https://sparrow.land/docs/). [SPEC.md](./SPEC.md) is the product contract behind all of it. ## Open source, and shamelessly built by AI Sparrow was built by Claude and Codex. I used Sparrow to build Sparrow: I hand Claude the work Claude is good at, and Codex the work Codex is good at. Sparrow is MIT licensed. Ask your agent to clone it and start contributing. Open source has never been this easy. Side note: if you want an easy way to splice Sparrow into your own repo, have a look at [monosplice](https://github.com/jakequist/monosplice). ## Contributing Start with [CONTRIBUTING.md](./CONTRIBUTING.md). Tests come first, and [SPEC.md](./SPEC.md) is the contract, so a behavior change starts with the spec. Found a vulnerability? Please report it privately, per [SECURITY.md](./SECURITY.md). Release notes are in [CHANGELOG.md](./CHANGELOG.md).