Getting Started¶
Use this guide to install Batty, create a team config, launch a tmux session, send the first directive, and stop or resume the team.
Prerequisites¶
- Rust 1.85+
tmuxkanban-md- At least one agent CLI on your
PATH(claude,codex, or similar)
cargo install kanban-md --locked
Install¶
Install Batty from crates.io:
cargo install batty-cli
Or build from source:
git clone https://github.com/battysh/batty.git
cd batty
cargo install --path .
Initialize¶
Run batty init from the repository you want Batty to manage.
cd my-project
batty init
Example output:
Initialized team config (5 files):
/path/to/my-project/.batty/team_config/team.yaml
/path/to/my-project/.batty/team_config/architect.md
/path/to/my-project/.batty/team_config/manager.md
/path/to/my-project/.batty/team_config/engineer.md
/path/to/my-project/.batty/team_config/board
Edit .batty/team_config/team.yaml to configure your team.
Then run: batty start
If you want a different scaffold, use batty init --template solo|pair|simple|squad|large|research|software|batty.
Configure¶
Edit .batty/team_config/team.yaml. Start with name, layout, roles, and use_worktrees.
Batty also has an optional .batty/config.toml for lower-level runtime defaults,
but team topology, layout, routing, standups, and channel integration all live
in team.yaml.
name: my-project
layout:
zones:
- name: architect
width_pct: 30
- name: engineers
width_pct: 70
split: { horizontal: 3 }
roles:
- name: architect
role_type: architect
agent: claude
prompt: architect.md
- name: manager
role_type: manager
agent: claude
prompt: manager.md
- name: engineer
role_type: engineer
agent: codex
instances: 3
prompt: engineer.md
use_worktrees: true
Validate before you start:
batty validate
Example output:
Config: /path/to/my-project/.batty/team_config/team.yaml
Team: my-project
Roles: 3
Total members: 5
Valid.
If use_worktrees: true is enabled for engineers, Batty keeps one stable
worktree per engineer at .batty/worktrees/<engineer>. New assignments reuse
that path but switch the engineer onto a fresh task branch from current main.
After merge, the engineer returns to eng-main/<engineer>.
Launch¶
Start the daemon and attach to tmux immediately:
batty start --attach
batty start --attach opens tmux instead of printing a summary. Expect something like:
┌ architect ─────────────┬ manager ───────────────┬ eng-1-1 ───────────────┐
│ role prompt loaded │ role prompt loaded │ codex/claude starting │
│ waiting for directive │ waiting for architect │ waiting for assignment │
├────────────────────────┼────────────────────────┼ eng-1-2 ───────────────┤
│ │ │ waiting for assignment │
├────────────────────────┼────────────────────────┼ eng-1-3 ───────────────┤
│ │ │ waiting for assignment │
└────────────────────────┴────────────────────────┴─────────────────────────┘
Send A Directive¶
From another shell, send the architect the first goal:
batty send architect "Implement a small JSON API with auth and tests."
Example output:
Message queued for architect.
Monitor¶
Check the team without attaching:
batty status
Example output:
Team: my-project
Session: batty-my-project (running)
MEMBER ROLE AGENT REPORTS TO
--------------------------------------------------------------
architect architect claude -
manager manager claude architect
eng-1-1 engineer codex manager
eng-1-2 engineer codex manager
eng-1-3 engineer codex manager
Use these while the team runs:
batty attach
batty inbox architect
batty board
If a member has queued messages, batty inbox architect looks like:
STATUS FROM TYPE ID BODY
------------------------------------------------------------------------
pending human send a1b2c3d4 Implement a small JSON API with auth...
Stop And Resume¶
Stop the daemon and tmux session:
batty stop
Example output:
Team session stopped.
The next batty start resumes agent sessions from the last stop:
batty start
Example output:
Team session started: batty-my-project
Run `batty attach` to connect.
Telegram¶
If you want a human endpoint over Telegram, use a template that includes a
user role, or add one manually, then run:
batty telegram
The setup wizard will:
- Validate your bot token with the Telegram Bot API
- Ask for your numeric Telegram user ID
- Optionally send a test message
- Update
.batty/team_config/team.yaml
Typical resulting config:
- name: human
role_type: user
channel: telegram
talks_to: [architect]
channel_config:
provider: telegram
target: "123456789"
bot_token: "<telegram-bot-token>"
allowed_user_ids: [123456789]
If you do not want the token stored in team.yaml, set
BATTY_TELEGRAM_BOT_TOKEN in the environment and remove bot_token from the
file.
Restart the daemon after setup:
batty stop
batty start