Observed since 20 Oct, 21:31 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agent-backbone
Local control plane for terminal AI agents: run them, message them, coordinate them through GitHub Issues, reach them from Telegram.
Claude Code, Codex and OpenCode, working as one team on your machine.
Agents message each other by name, take work from GitHub Issues and reach you on your phone.
They use the logins you already have, and core use needs no setup in your repositories.
Watch · Quick start · Why Backbone · Docs · Security
https://github.com/user-attachments/assets/695a6096-4196-4115-911c-a0043d632088
The overview, 1:23, captioned. Unmute for the narration.
You already run coding agents in your terminal. Each one works alone, and you carry every message between them. Backbone turns them into a team.
|
Never typed into a busy agent |
No setup in your repositories |
|
GitHub Issues are the task list |
Mix CLIs in one team |
|
In the loop from anywhere |
State you can check |
New sessions are briefed on these tools, so you can ask any agent to set up the team you need: an agent per repository, skills and rules shared by tag, specialists on request.
Let your agent do it. Open the coding agent you already use and say:
Install agent-backbone with uv tool install agent-backbone,
then run backbone help setup and follow it.
The setup playbook is written for agents: each step ends with a check and says when it needs you, for your accounts and secrets.
Or by hand. You need macOS or Linux, Python 3.11+, tmux, uv (or pipx), and an agent CLI installed and signed in.
uv tool install agent-backbone
backbone init
backbone service install # start now and at login
backbone doctor # check dependencies and API access
Then, from a repository you want an agent to work in:
cd ~/code/app
backbone agent start --runtime claude # or --runtime codex, --runtime opencode
backbone tell app "Summarise what this repository does in three sentences."
backbone agent attach app # read its reply; Ctrl-b d detaches
The folder supplies the agent name. If startup reports a prompt or a timeout,
backbone agent inspect app shows what needs attention. tell reports
whether the message was delivered or queued; delivery does not mean the agent
has finished answering. A queued message waits until the agent is ready, up
to 30 minutes by default, so do not resend a message the queue accepted. If
backbone is not on your PATH, run uv tool update-shell and open a new
terminal. In a container without a login service, use backbone up --detach.
ab is a short alias; on macOS, use backbone if Apache Bench shadows it.
Getting started walks through a second agent, GitHub and Telegram. Quick usage is the everyday command guide.
backbone doctor read one contract, and gaps are listed, not hidden.Backbone is not an agent framework: it calls no models and needs no model API keys. It is not a workflow engine or a dashboard either. It gives your agents names, safe messages and evidence, and leaves the work to them.
| CLI | Support |
|---|---|
| Claude Code, Codex, OpenCode | Required set: a capability ships only when it works on all three, and any open gap is tracked as a defect |
| Gemini CLI, Deep Code, Aider | Supported on demand; each gap is listed in the capability table |
The documentation index covers configuration, diagnostics
and the remaining references. Installed copies are available through
backbone docs; backbone help contains short agent playbooks.
Backbone runs as one trusted OS user on one machine. Agents are not isolated from each other. The API binds to localhost by default and uses one full-admin key; local sessions can read that key through the CLI. Backbone keeps its control-plane secrets out of launched environments, but this is not a filesystem security boundary. Read Security before granting access or exposing the API.
git clone https://github.com/eandualem/agent-backbone
cd agent-backbone
make install
make check
BACKBONE_DATA_DIR=/tmp/backbone-dev make dev
make dev runs on its own tmux server, so its agents stay apart from your own
tmux sessions and from a real backbone's agents. Run CLI commands for it from
a terminal outside tmux with the same settings, for example
TMUX_TMPDIR=/tmp/backbone-dev-tmux-$(id -u) BACKBONE_DATA_DIR=/tmp/backbone-dev uv run backbone agent attach NAME.
agent attach, and agent commands run while make dev is stopped, use tmux
directly.
See Contributing for branches, checks and releases.
MIT.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
aiosqliteEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | aiosqlite>=0.20 | runtime |
alembicEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | alembic>=1.13 | runtime |
cryptographyEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | cryptography>=44.0 | runtime |
fastapiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | fastapi>=0.115 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0 | runtime |
python-socketioEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-socketio>=5.11 | runtime |
python-telegram-botEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | python-telegram-bot>=21.0 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | rich>=14.1 | runtime |
sqlalchemyEnvironment{
"extras": "asyncio",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | sqlalchemy[asyncio]>=2.0 | runtime |
uvicornEnvironment{
"extras": "standard",
"marker": null,
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | uvicorn[standard]>=0.32 | runtime |
asyncpgEnvironment{
"extras": "",
"marker": "extra == \"postgres\"",
"requires_python": ">=3.11",
"evaluation": "NOT_EVALUATED"
} | asyncpg>=0.29; extra == "postgres" | runtime |
bdist_wheel · 1,024.47 KB · Python py3
sdist · 879.21 KB · Python source
Observed since 20 Oct, 21:31 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:07bea4ea0bead768812e260a3c03b1a5b5450e2d09ddda492346ebf9ab249d5c