The project's README from github.com/TinyAGI/tinyagi. As one markdown file: README.md.
Multi-agent, Multi-team, Multi-channel, 24/7 AI assistant
Run multiple teams of AI agents that collaborate with each other simultaneously with isolated workspaces.
We are actively looking for contributors. Please reach out.
curl -fsSL https://raw.githubusercontent.com/TinyAGI/tinyagi/main/scripts/install.sh | bash
This downloads and installs the tinyagi command globally. Then just run:
tinyagi
That's it. TinyAGI auto-creates default settings, starts the daemon, and opens TinyOffice in your browser. No wizard, no configuration needed.
~/tinyagi-workspacetinyagi (Anthropic/Opus)tinyagi channel setupgit clone https://github.com/TinyAGI/tinyagi.git
cd tinyagi && npm install && npm run build
npx tinyagi start
npx tinyagi agent list
From Source:
git clone https://github.com/TinyAGI/tinyagi.git
cd tinyagi && npm install && ./scripts/install.sh
docker compose up -d
Set your API key in a .env file or pass it directly:
ANTHROPIC_API_KEY=sk-ant-... docker compose up -d
The API runs on http://localhost:3777. Data is persisted in a tinyagi-data Docker volume.
@BotFather/newbot → Follow promptsAfter starting TinyAGI, scan the QR code:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WhatsApp QR Code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[QR CODE HERE]
📱 Settings → Linked Devices → Link a Device
TinyAGI includes a web portal for managing your agents, teams, tasks, and chat — all from the browser.
Once you start running TinyAGI locally, you can control it by visiting office.tinyagicompany.com. It connects to your local TinyAGI API at localhost:3777 — no account or sign-up needed.
Alternatively, you can run TinyOffice locally:
tinyagi office # Builds and starts on http://localhost:3000
@agent, or @teamsettings.json) via UIStart TinyAGI first (API default: http://localhost:3777), then:
tinyagi office
This auto-detects when dependencies or builds are needed (e.g. after tinyagi update) and starts the production server on http://localhost:3000.
For development with hot-reload:
cd tinyoffice
npm install
npm run dev
If TinyAGI API is on a different host/port, set:
cd tinyoffice
echo 'NEXT_PUBLIC_API_URL=http://localhost:3777' > .env.local
Commands work with the tinyagi CLI.
| Command | Description | Example |
|---|---|---|
| (no command) | Install, configure defaults, start, and open TinyOffice | tinyagi |
start |
Start TinyAGI daemon | tinyagi start |
stop |
Stop all processes | tinyagi stop |
restart |
Restart TinyAGI | tinyagi restart |
status |
Show current status and activity | tinyagi status |
channel setup |
Configure channels interactively | tinyagi channel setup |
logs [type] |
View logs (discord/telegram/whatsapp/queue/heartbeat/all) | tinyagi logs queue |
| Command | Description | Example |
|---|---|---|
agent list |
List all configured agents | tinyagi agent list |
agent add |
Add new agent (interactive) | tinyagi agent add |
agent show <id> |
Show agent configuration | tinyagi agent show coder |
agent remove <id> |
Remove an agent | tinyagi agent remove coder |
agent reset <id> |
Reset agent conversation | tinyagi agent reset coder |
agent provider <id> [provider] |
Show or set agent's AI provider | tinyagi agent provider coder anthropic |
agent provider <id> <p> --model <m> |
Set agent's provider and model | tinyagi agent provider coder openai --model gpt-5.3-codex |
| Command | Description | Example |
|---|---|---|
team list |
List all configured teams | tinyagi team list |
team add |
Add new team (interactive) | tinyagi team add |
team show <id> |
Show team configuration | tinyagi team show dev |
team remove <id> |
Remove a team | tinyagi team remove dev |
team add-agent <t> <a> |
Add an existing agent to a team | tinyagi team add-agent dev reviewer |
team remove-agent <t> <a> |
Remove an agent from a team | tinyagi team remove-agent dev reviewer |
team visualize [id] |
Live TUI dashboard for team chains | tinyagi team visualize dev |
| Command | Description | Example |
|---|---|---|
chatroom <team> |
Real-time TUI viewer with type-to-send | tinyagi chatroom dev |
office |
Start TinyOffice web portal on port 3000 | tinyagi office |
Every team has a persistent chat room. Agents post to it using [#team_id: message] tags, and messages are broadcast to all teammates. The chatroom viewer polls for new messages in real time — type a message and press Enter to post, or press q/Esc to quit.
API endpoints:
GET /api/chatroom/:teamId # Get messages (?limit=100&since=0)
POST /api/chatroom/:teamId # Post a message (body: { "message": "..." })
| Command | Description | Example |
|---|---|---|
provider [name] |
Show or switch global AI provider | tinyagi provider anthropic |
provider <name> --model <model> |
Switch provider and model; propagates to matching agents | tinyagi provider openai --model gpt-5.3-codex |
provider <name> --oauth-token <token> |
Store OAuth token for a built-in provider | tinyagi provider anthropic --oauth-token sk-ant-oat01-... |
provider list |
List all custom providers | tinyagi provider list |
provider add |
Add a new custom provider (interactive) | tinyagi provider add |
provider remove <id> |
Remove a custom provider | tinyagi provider remove proxy |
model [name] |
Show or switch AI model | tinyagi model opus |
Custom providers let you use any OpenAI or Anthropic-compatible API endpoint (e.g., OpenRouter, proxy servers, self-hosted models).
Define a custom provider in settings.json:
{
"custom_providers": {
"my-proxy": {
"name": "My Proxy",
"harness": "claude",
"base_url": "https://proxy.example.com/v1",
"api_key": "sk-...",
"model": "claude-sonnet-4-6"
}
}
}
| Field | Required | Description |
|---|---|---|
name |
Yes | Human-readable display name |
harness |
Yes | CLI to use: claude or codex |
base_url |
Yes | API endpoint URL |
api_key |
Yes | API key for authentication |
model |
No | Default model name for CLI |
Assign a custom provider to an agent:
tinyagi agent provider coder custom:my-proxy
tinyagi agent provider coder custom:my-proxy --model gpt-4o
Auth token storage — store credentials for built-in providers so you don't need separate CLI auth:
tinyagi provider anthropic --oauth-token sk-ant-oat01-...
tinyagi provider anthropic --api-key sk-ant-...
tinyagi provider openai --api-key sk-...
Anthropic supports both oauth_token (exported as CLAUDE_CODE_OAUTH_TOKEN) and api_key (exported as ANTHROPIC_API_KEY). OAuth takes priority if both are set. OpenAI keys are saved as models.openai.api_key and exported as OPENAI_API_KEY. If nothing is configured, the process inherits environment variables directly.
API endpoints:
GET /api/custom-providers # List custom providers
PUT /api/custom-providers/:id # Create or update
DELETE /api/custom-providers/:id # Delete
See docs/AGENTS.md for more details.
Use sender pairing to control who can message your agents.
| Command | Description | Example |
|---|---|---|
pairing pending |
Show pending sender approvals (with pairing codes) | tinyagi pairing pending |
pairing approved |
Show approved senders | tinyagi pairing approved |
pairing list |
Show both pending and approved senders | tinyagi pairing list |
pairing approve <code> |
Move a sender from pending to approved by code | tinyagi pairing approve ABCD1234 |
pairing unpair <channel> <sender_id> |
Remove an approved sender from the allowlist | tinyagi pairing unpair telegram 1234567 |
Pairing behavior:
| Command | Description | Example |
|---|---|---|
send <message> |
Send message to AI manually | tinyagi send "Hello!" |
send <message> |
Route to specific agent | tinyagi send "@coder fix bug" |
These commands work in Discord, Telegram, and WhatsApp:
| Command | Description | Example |
|---|---|---|
@agent_id message |
Route message to specific agent | @coder fix the bug |
@team_id message |
Route message to team leader | @dev fix the auth bug |
/agent |
List all available agents | /agent |
/team |
List all available teams | /team |
@agent_id /reset |
Reset specific agent conversation | @coder /reset |
/reset |
Reset conversation (WhatsApp/global) | /reset or !reset |
/restart |
Restart TinyAGI process | /restart |
message |
Send to default agent (no prefix) | help me with this |
Note: The @agent_id routing prefix requires a space after it (e.g., @coder fix not @coderfix).
Access control note: before routing, channel clients apply sender pairing allowlist checks.
| Command | Description | Example |
|---|---|---|
update |
Update TinyAGI to latest version | tinyagi update |
Note: If you are on v0.0.1 or v0.0.2, the update script was broken. Please re-install instead:
curl -fsSL https://raw.githubusercontent.com/TinyAGI/tinyagi/main/scripts/install.sh | bashYour settings and user data will be preserved.
Auto-detection: TinyAGI checks for updates on startup (once per hour).
Disable update checks:
export TINYAGI_SKIP_UPDATE_CHECK=1
| Command | Description | Example |
|---|---|---|
reset |
Reset all conversations | tinyagi reset |
channels reset <chan> |
Reset channel authentication | tinyagi channels reset whatsapp |
Use @agent_id prefix to route messages to specific agents:
@coder fix the authentication bug
@writer document the API endpoints
help me with this ← goes to tinyagi agent (no prefix needed)
Agents are configured in .tinyagi/settings.json:
{
"agents": {
"coder": {
"name": "Code Assistant",
"provider": "anthropic",
"model": "sonnet",
"working_directory": "/Users/me/tinyagi-workspace/coder"
},
"writer": {
"name": "Technical Writer",
"provider": "custom:my-proxy",
"model": "gpt-5.3-codex",
"working_directory": "/Users/me/tinyagi-workspace/writer"
}
}
}
Each agent operates in isolation:
~/tinyagi-workspace/{agent_id}/.claude/, heartbeat.md (root), AGENTS.mdSee docs/AGENTS.md for full details on architecture, use cases, and advanced features.
┌─────────────────────────────────────────────────────────────┐
│ Message Channels │
│ (Discord, Telegram, WhatsApp, Web, API) │
└────────────────────┬