I Built a Tool to Control AI Coding Agents from My Phone
Source: Dev.to
The Problem
You’re on the couch, in a coffee shop, or just away from your desk. You have a list of coding tasks you want done and AI coding agents (Claude Code, Aider, Codex, Gemini CLI) installed on your machine—but you can’t use them from your phone.
What if you could just text your tasks from Discord and have multiple AI agents start working on them—each in its own terminal?
What I Built
Agentboard — an open‑source tool that lets you orchestrate multiple AI coding agents from your phone via Discord.
You type:
team Alpha: Build a landing page for my portfolio
team Beta: Fix the auth bug in my API
team Gamma: Write tests for the payment module
On your Mac, three Terminal windows open — each running Claude (or Aider, Codex, Gemini, whatever you configure) working on its assigned task, in parallel.
How It Works
You (Discord on phone)
|
v
Discord Bot (Python, runs on your machine)
|
+-- Team Alpha → Terminal.app → claude "Build landing page..."
+-- Team Beta → Terminal.app → claude "Fix auth bug..."
+-- Team Gamma → Terminal.app → claude "Write tests..."
- Send a message in Discord with
team Name: task. - The bot parses the message.
- It opens a real Terminal window per team.
- It runs your AI coding CLI interactively.
- Each team works independently, in parallel.
No API credits are needed for the bot itself—it uses your existing Claude Code subscription (or whatever CLI you have installed).
The Pluggable Backend
Agentboard isn’t locked to one AI tool. It works with any CLI. Configure the command you want in agentboard.toml.
| Backend | Command example |
|---|---|
| Claude Code | claude "task" |
| Aider | aider --message "task" |
| Codex CLI | codex "task" |
| Gemini CLI | gemini "task" |
| Goose | goose run "task" |
| Any CLI | Custom command in agentboard.toml |
Quick Start
# Clone
git clone https://github.com/LakshmiSravyaVedantham/agentboard
cd agentboard/discord-bot
# Setup
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Add your Discord bot token to .env
echo 'DISCORD_BOT_TOKEN=your-token' > ../.env
# Run
python bot.py
Then in Discord:
team Alpha: Build a hello world Python script
A Terminal window opens on your Mac with Claude (or the configured CLI) working on it.
Setting Up the Discord Bot (2 minutes)
- Go to the Discord Developer Portal.
- New Application → name it “Agentboard”.
- Bot tab → Reset Token → copy the token.
- Enable Message Content Intent.
- OAuth2 → URL Generator → scope:
bot; permissions: Send Messages, Manage Channels, Read Message History. - Open the generated URL and add the bot to your server.
Place the token in the .env file as shown in the Quick Start section.
What’s Under the Hood
Agentboard also includes a full Rust backend (optional):
- 17 unit tests covering config, auth, team state machine, backend registry, orchestrator.
- Axum server with 12 API endpoints + WebSocket.
- Svelte PWA with dark glassmorphism UI (pairing screen, team dashboard, live terminal output).
- JWT auth with 6‑digit pairing codes.
- Pluggable backends via TOML config.
- Graceful shutdown – SIGTERM to all child processes.
The Rust server compiles to a single ~7 MB binary with the frontend embedded via rust-embed.
In practice, the Discord bot (≈150 lines of Python) is the “killer feature” – it just works with no extra infrastructure.
Commands
| Command | What happens |
|---|---|
team Alpha: Build a landing page | Opens a Terminal with Claude (or configured CLI) working on it. |
team Alpha: Fix auth in ~/myproject | Opens a Terminal in that directory. |
status | Shows all active teams. |
kill Alpha | Terminates the Alpha team process. |
help | Lists all available commands. |
Why Discord?
I tried building a PWA first, but ran into:
- Localhost firewall issues on phones.
- Safari blocks the Web Speech API without HTTPS.
- Maintaining another app.
Discord solves all of these: it’s already on your phone, handles notifications, and keeps your data in your private server. The bot is only ~150 lines of Python with zero infrastructure cost.
What I Learned
- Claude Code’s
--printflag uses API credits, not your subscription. The interactiveclaudecommand uses your subscription—crucial when spawning multiple agents. - Multiple Discord bots can pile up. During development, always run
pkill -9 -f bot.pybefore starting a new instance to avoid zombie bots. - The simplest approach wins. I built an elaborate Rust + Svelte + WebSocket + JWT system, but the final product that ships is a tiny Python Discord bot that opens Terminal windows. Ship the simple thing.
Try It
Repo: https://github.com/LakshmiSravyaVedantham/agentboard
Star it if you find it useful. PRs welcome — especially for Linux/Windows terminal support.
Agentboard is open source (MIT). No telemetry, no cloud, no data leaves your machine.