| name | tinyagi-admin |
| description | Manage and operate the TinyAGI system itself — agents, teams, settings, queue, tasks, daemon lifecycle, and source code. Use when the agent needs to: list/add/remove/update agents or teams, check queue status, view logs, start/stop/restart TinyAGI, change settings (provider, model, channels), send messages to the queue, manage tasks, retry dead-letter messages, view recent responses, modify TinyAGI source code or configuration, or perform any administrative operation on the TinyAGI platform. Triggers: 'manage tinyagi', 'add an agent', 'remove a team', 'check queue', 'view logs', 'restart tinyagi', 'change provider', 'update settings', 'create a task', 'modify tinyagi code'. |
TinyAGI Admin
Operate and manage the TinyAGI multi-agent system. This skill covers both runtime administration (via the REST API) and source code modification.
Important paths
- TinyAGI home (runtime data):
~/.tinyagi/
settings.json — all configuration (agents, teams, channels, models, workspace)
tinyagi.db — SQLite queue database
tasks.json — Kanban tasks
pairing.json — sender allowlist
logs/ — queue, daemon, and channel logs
chats/ — team chain chat history
events/ — real-time event files
plugins/ — plugin directory
- TinyAGI source code: the repo where this skill is installed (check
git rev-parse --show-toplevel or look for tinyagi.sh in parent dirs)
- Agent workspaces: configured in
settings.json under workspace.path (default: ~/tinyagi-workspace/{agent_id}/)
Interactivity warning
Many tinyagi CLI commands are interactive (prompt for user input). Do NOT run these directly:
tinyagi setup — fully interactive wizard
tinyagi agent add — prompts for all fields
tinyagi team add — prompts for all fields
tinyagi agent remove <id> — prompts [y/N]
tinyagi team remove <id> — prompts [y/N]
tinyagi team remove-agent <t> <a> — may prompt for new leader + [y/N]
Instead, use the REST API or direct settings.json edits (see below).
Non-interactive CLI commands (safe to run)
These CLI commands accept all parameters as arguments and do not prompt:
tinyagi start
tinyagi stop
tinyagi restart
tinyagi status
tinyagi logs [queue|discord|telegram|whatsapp|heartbeat|daemon|all]
tinyagi send "<message>"
tinyagi send "@agent_id <message>"
tinyagi reset <agent_id> [agent_id...]
tinyagi provider anthropic
tinyagi provider openai --model gpt-5.3-codex
tinyagi model sonnet
tinyagi agent list
tinyagi agent show <id>
tinyagi agent provider <id> <provider>
tinyagi agent provider <id> <provider> --model <model>
tinyagi team list
tinyagi team show <id>
tinyagi team add-agent <team_id> <agent_id>
tinyagi channel start <channel>
tinyagi channel stop <channel>
tinyagi channel restart <channel>
tinyagi channel reset <channel>
tinyagi pairing list
tinyagi pairing pending
tinyagi pairing approved
tinyagi pairing approve <code>
tinyagi pairing unpair <channel> <sender_id>
REST API (preferred for programmatic operations)
The API server runs on http://localhost:3777 (configurable via TINYAGI_API_PORT). The API server is available when TinyAGI is running.
Agents
curl -s http://localhost:3777/api/agents | jq
curl -s -X PUT http://localhost:3777/api/agents/coder \
-H 'Content-Type: application/json' \
-d '{"name":"Coder","provider":"anthropic","model":"sonnet"}'
curl -s -X PUT http://localhost:3777/api/agents/coder \
-H 'Content-Type: application/json' \
-d '{"name":"Coder","provider":"anthropic","model":"sonnet","system_prompt":"You are a senior engineer. Always write tests."}'
curl -s -X DELETE http://localhost:3777/api/agents/coder
Teams
curl -s http://localhost:3777/api/teams | jq
curl -s -X PUT http://localhost:3777/api/teams/dev \
-H 'Content-Type: application/json' \
-d '{"name":"Dev Team","agents":["coder","reviewer"],"leader_agent":"coder"}'
curl -s -X DELETE http://localhost:3777/api/teams/dev
Settings
curl -s http://localhost:3777/api/settings | jq
curl -s -X PUT http://localhost:3777/api/settings \
-H 'Content-Type: application/json' \
-d '{"monitoring":{"heartbeat_interval":1800}}'
Services (channels & daemon)
curl -s -X POST http://localhost:3777/api/services/channel/telegram/start
curl -s -X POST http://localhost:3777/api/services/channel/telegram/stop
curl -s -X POST http://localhost:3777/api/services/channel/telegram/restart
curl -s -X POST http://localhost:3777/api/services/apply
curl -s -X POST http://localhost:3777/api/services/restart
Messages
curl -s -X POST http://localhost:3777/api/message \
-H 'Content-Type: application/json' \
-d '{"message":"@coder fix the login bug","sender":"Admin","channel":"api"}'
Queue
curl -s http://localhost:3777/api/queue/status | jq
curl -s http://localhost:3777/api/responses?limit=10 | jq
curl -s http://localhost:3777/api/queue/dead | jq
curl -s -X POST http://localhost:3777/api/queue/dead/123/retry
curl -s -X DELETE http://localhost:3777/api/queue/dead/123
Tasks
curl -s http://localhost:3777/api/tasks | jq
curl -s -X POST http://localhost:3777/api/tasks \
-H 'Content-Type: application/json' \
-d '{"title":"Fix auth bug","description":"Login fails on mobile","status":"backlog","assignee":"coder","assigneeType":"agent"}'
curl -s -X PUT http://localhost:3777/api/tasks/TASK_ID \
-H 'Content-Type: application/json' \
-d '{"status":"in-progress"}'
curl -s -X DELETE http://localhost:3777/api/tasks/TASK_ID
Logs
curl -s http://localhost:3777/api/logs?limit=50 | jq
Direct settings.json editing
When the API server is not running, edit ~/.tinyagi/settings.json directly. Use jq for safe atomic edits:
SETTINGS="$HOME/.tinyagi/settings.json"
jq --arg id "analyst" --argjson agent '{"name":"Analyst","provider":"anthropic","model":"sonnet","working_directory":"'$HOME'/tinyagi-workspace/analyst"}' \
'.agents[$id] = $agent' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
jq 'del(.agents["analyst"])' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
jq --arg id "research" --argjson team '{"name":"Research Team","agents":["analyst","writer"],"leader_agent":"analyst"}' \
'.teams //= {} | .teams[$id] = $team' "$SETTINGS" > "$SETTINGS.tmp" && mv "$SETTINGS.tmp" "$SETTINGS"
After editing settings.json, run tinyagi restart to pick up changes.
Modifying TinyAGI source code
When modifying TinyAGI's own code (features, bug fixes, new routes, etc.):
- Monorepo packages:
packages/core/src/ — shared utilities (config, db, logging, types, plugins, agent invocation)
packages/server/src/ — API server (Hono framework)
packages/server/src/routes/ — route handlers (agents, teams, settings, queue, tasks, messages, logs, services)
packages/main/src/ — entry point, queue processor, channel/heartbeat lifecycle
packages/cli/src/ — CLI modules (daemon, channel, install, logs, agent, team, provider, etc.)
packages/cli/bin/tinyagi.mjs — thin CLI dispatcher (delegates to compiled modules in dist/)
packages/teams/src/ — team orchestration
packages/visualizer/src/ — TUI dashboards (team visualizer, chatroom viewer)
- Skills:
.agents/skills/ — skill definitions (copied to agent workspaces on provision)
- Web portal:
tinyoffice/ — Next.js app
- Docker:
Dockerfile, docker-entrypoint.sh, docker-compose.yml
After modifying TypeScript source, rebuild:
cd <tinyagi-repo> && npm run build
Then restart the daemon to load changes:
tinyagi restart
Workflow examples
Add a new agent and assign to a team
curl -s -X PUT http://localhost:3777/api/agents/reviewer \
-H 'Content-Type: application/json' \
-d '{"name":"Code Reviewer","provider":"anthropic","model":"sonnet"}'
tinyagi team add-agent dev reviewer
Check system health
tinyagi status
curl -s http://localhost:3777/api/queue/status | jq
curl -s http://localhost:3777/api/queue/dead | jq
tinyagi logs queue
Create a task and assign to agent
curl -s -X POST http://localhost:3777/api/tasks \
-H 'Content-Type: application/json' \
-d '{"title":"Review PR #42","status":"backlog","assignee":"reviewer","assigneeType":"agent"}'