Async Code Agent: How to Run Multiple AI Coders in Parallel Without Losing Your Mind
A practical, jargon-free guide to setting up, using, and extending the open-source Async Code Agent platform—built for developers who want AI help on many files at once, not one file at a time.
Table of Contents
-
Why Parallel AI Coding Matters -
What Async Code Agent Actually Does -
Core Features in Plain English -
Quick-Start: From Zero to Running in Ten Minutes -
Step-by-Step Daily Workflow -
Architecture at One Glance -
Development Mode vs. Production Mode -
Common Questions (FAQ) -
Troubleshooting Checklist -
Next Steps & Extending the Platform
1. Why Parallel AI Coding Matters
If you have ever asked Claude Code or any other AI assistant to refactor a large codebase, you know the drill:
-
Queue one task. -
Wait. -
Review the diff. -
Repeat.
Async Code Agent flips this sequence on its head. Instead of a single queue, you get a dashboard where every task—lint fixes, unit-test generation, dependency upgrades, security patches—runs in its own isolated container. While the AI works on file A, another container can already be working on file B. You spend your time reviewing and merging, not waiting.
2. What Async Code Agent Actually Does
Think of it as a task runner with three extra powers:
-
Many agents at once—each task spins up its own AI model (right now Claude Code, but you can plug in others). -
Built-in Git workflow—clones, branches, commits, and opens pull requests automatically. -
Side-by-side comparison—see two diffs on the same screen and decide which one you like.
All of this happens through a clean web interface that looks and feels like the original Codex playground.
3. Core Features in Plain English
Feature | What It Means for You | Real-World Example |
---|---|---|
Multi-Agent Support | You can pick different AI models for the same task. | Run Claude Code and another model on the same function, then keep the cleaner output. |
Parallel Task Management | Multiple tasks run at the same time, each in its own container. | Upgrade React in one container, add TypeScript in another, and never worry about conflicts. |
Codex-Style Web UI | A simple web page to start, track, and compare tasks. | No command-line flags to remember—just fill out a form and press “Run.” |
Agent Comparison | Diffs from two tasks appear next to each other. | Instantly spot which model removed the most unused imports. |
Containerized Execution | Each job runs in a fresh Docker container. | If a dependency install breaks, only that container fails; the rest keep working. |
Git Integration | Automatically clones the repo, creates a branch, commits, and opens a PR. | You review and click “Merge” in GitHub—no manual git push . |
Self-Hosted | Runs on your laptop or on any server you control. | Keep sensitive code inside your own network. |
4. Quick-Start: From Zero to Running in Ten Minutes
4.1 Prerequisites
-
Docker and Docker Compose installed (any recent version works). -
An Anthropic API key if you intend to use Claude Code. -
(Optional) A Supabase account if you want persistent storage across restarts.
4.2 Clone and Configure
# 1. Clone the repository
git clone <repository-url>
cd async-code
# 2. Copy the environment template
cp server/.env.example server/.env
# 3. Edit server/.env
# Add your ANTHROPIC_API_KEY.
# If you use Supabase, also add SUPABASE_URL, SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY.
4.3 Build and Launch
docker-compose up --build -d
Visit:
-
Frontend: http://localhost:3000 -
Backend API: http://localhost:5000
4.4 Optional Supabase Setup
-
Create a new project in the Supabase dashboard. -
Open the SQL editor and run the contents of db/init_supabase.sql
. -
Copy the project URL, anon key, and service role key from Project Settings → API into server/.env
.
5. Step-by-Step Daily Workflow
Step 1: Connect GitHub
Open http://localhost:3000. On first visit, the UI asks for a GitHub personal access token with repo
scope. Paste it and click Save.
Step 2: Choose Repository
Fill in:
owner/repo-name
branch: main
The platform immediately clones the repo into a fresh volume.
Step 3: Pick an Agent
The dropdown defaults to Claude Code. Other agents appear here once you register them.
Step 4: Describe the Task
In plain English:
Refactor all
print()
statements inutils.py
to use thelogging
module and add unit tests.
Click Run Task.
Behind the scenes:
-
A container starts. -
The agent checks out a new branch. -
The AI edits the code and runs tests. -
Results stream back to the web UI.
Step 5: Compare & Merge
-
Click Diff to see the changes. -
Click Create PR to push the branch and open a pull request on GitHub. -
If you ran two agents on the same task, the Compare view lines up both diffs so you can cherry-pick the best parts.
6. Architecture at One Glance
-
Frontend
-
Next.js, TypeScript, TailwindCSS -
REST calls to the backend
-
-
Backend
-
Python Flask -
Routes: /tasks
,/runs
,/agents
,/git
-
Uses Docker SDK to start containers
-
-
Agents
-
Currently Claude Code (Anthropic) -
Pluggable interface: drop a Python file into server/agents/
-
-
Task Execution
-
Each task → one Docker container -
Container image includes Python, Node, or other runtimes you need
-
-
Data Storage
-
Optional Supabase Postgres for tasks, runs, and outputs -
Falls back to SQLite when Supabase is not configured
-
7. Development Mode vs. Production Mode
7.1 Development Mode
Run services separately for faster feedback.
# Terminal 1: Backend
cd server
python main.py # http://localhost:5000
# Terminal 2: Frontend
cd async-code-web
npm install
npm run dev # http://localhost:3000
Hot-reload works on both sides.
7.2 Production Mode
-
Edit server/.env
:FLASK_ENV=production FLASK_DEBUG=False
-
Export the Node environment: export NODE_ENV=production
-
Build and start: docker-compose up --build -d
-
Watch logs: docker-compose logs -f
8. Common Questions (FAQ)
Q1: Do I need a GPU?
No. The AI models run in the cloud. Your local machine only schedules containers; CPU and RAM usage are minimal.
Q2: My company blocks GitHub. Can I use GitLab?
Yes. Mirror your repository to an internal GitLab instance and change the remote URL in the UI.
Q3: How do I add another AI model?
Create a new Python file in server/agents/
, implement the run(task_context)
function, and register the agent in agents.yaml
. The README in that folder contains a minimal example.
Q4: A task failed. How do I debug?
Click the Logs tab on the task card. You will see the same stdout
and stderr
you would get from docker logs
.
Q5: Can I limit CPU or memory per container?
Yes. Edit the docker-compose.yml
file and add resource constraints under the deploy
key for the agent service.
9. Troubleshooting Checklist
Symptom | Quick Fix |
---|---|
“Container cannot start” | Ensure Docker daemon is running and your user is in the docker group. |
“Anthropic key invalid” | Check for trailing spaces in server/.env . |
“Repository clone fails” | Confirm the GitHub token has repo scope and the repository URL is correct. |
“Cannot see diff” | Refresh the page; the diff loads after the container exits. |
10. Next Steps & Extending the Platform
-
Custom Runners
Add a Rust or Go agent by following the same interface used for Claude Code. -
Notification Hooks
Append Slack, Teams, or email alerts by implementing a newNotifier
class. -
Cost Control
Set per-task spending caps inside the agent container; log usage to Supabase for monthly reports. -
CI Integration
Trigger Async Code Agent tasks from GitHub Actions by calling the backend API endpoint/api/v1/tasks
.
Final Thoughts
Async Code Agent turns the once-linear process of AI-assisted coding into a parallel pipeline. Instead of babysitting a single long-running job, you orchestrate many small ones, review the outcomes, and merge the best. Whether you are maintaining one repository or fifty, the platform keeps the cognitive load low and the throughput high.
Clone it, run it, and let the agents do the waiting for you.