Skip to content

Task Board

Run AI coding agents in parallel on your Code Server instance. Queue tasks, and the system automatically dispatches them to isolated tmux sessions with separate git branches.

How It Works

┌─────────────┐     ┌──────────────┐     ┌─────────────────┐     ┌──────────────────┐
│  Frontend    │────▶│  DynamoDB    │────▶│  Dispatcher      │────▶│  Code Server EC2  │
│  Task Board  │     │  TaskQueue   │     │  (Stream Lambda) │     │  (tmux sessions)  │
└─────────────┘     └──────────────┘     └─────────────────┘     └──────────────────┘
  1. Create tasks via the UI or API — each task has a title, description (AI prompt), repo URL, and tool choice
  2. DynamoDB Stream triggers the dispatcher Lambda on new tasks
  3. Dispatcher checks if your Code Server is running and has capacity, then sends an SSM command
  4. Worker script on EC2 clones the repo, creates a branch (task/{taskId}), runs Claude Code or Cline in a tmux session, commits changes, and reports status back

Key Features

  • Parallel execution — Run up to 10 tasks simultaneously (configurable per task)
  • Full isolation — Each task gets its own git clone, branch, and tmux session
  • Bulk import — Paste a markdown checklist to create many tasks at once
  • Priority queue — Tasks are dispatched highest-priority first (1=critical, 5=minimal)
  • Live status — Auto-refreshing dashboard shows queued → running → completed
  • Log output — View the last 50 lines of each task's output
  • Tool choice — Use Claude Code (--print --dangerously-skip-permissions) or Cline per task

Prerequisites

  1. Active Code Server — Launch a Code Server instance first at /code-server
  2. AWS Credentials — Add your AWS Access Key and Secret Key in the API Keys page. These are used for Bedrock (Claude) access. Your credentials are securely fetched from the KeysTable and injected at dispatch time.
  3. GitHub PAT — Add a GitHub Personal Access Token in the API Keys page. This is used for cloning private repos and pushing task branches.
  4. UAPI Token (optional) — If you have an access token, it's automatically used for status callbacks.

Automatic Credential Injection

You do not need to manually configure credentials on your Code Server. The Task Board dispatcher automatically fetches your AWS credentials and GitHub PAT from your API Keys and injects them securely at task dispatch time via SSM.

Pre-installed Tools

New Code Server instances come with these tools pre-installed:

  • Claude Code CLI (claude) — for Claude Code tasks
  • Cline CLI (cline) — for Cline tasks
  • tmux — for isolated parallel sessions
  • jq, git — for task orchestration

Quick Start

  1. Go to Task Board in the sidebar
  2. Click New Task
  3. Fill in:
    • Title: Short name (e.g., "Fix login validation")
    • Description: Full prompt for the AI agent
    • Repository URL: Git clone URL
    • Tool: Claude Code or Cline
  4. Click Create Task — it's queued and dispatched automatically

Bulk Import

Click Bulk Import and paste a markdown checklist:

markdown
- Fix login validation: The email regex allows invalid emails like 'test@'
- Add dark mode: Implement dark mode toggle in the settings page
- Refactor error handling: Centralize API error handling in utils/
- Update tests: Add unit tests for the new payment flow
- Fix mobile layout: The sidebar overlaps content on screens < 768px

Each line becomes a separate task with its own branch and tmux session.

Task Lifecycle

StatusDescription
queuedTask created, waiting for dispatch
waiting-for-instanceNo running Code Server found
dispatchedSSM command sent to EC2
runningWorker script executing
completedTask finished successfully
failedTask encountered an error
cancelledUser cancelled the task

Inspecting Running Tasks

SSH into your Code Server or use the browser terminal, then:

bash
# List all task sessions
tmux ls

# Attach to a specific task
tmux attach -t task-a1b2c3d4

# Detach without stopping: Ctrl+B, then D

API Reference

All endpoints require authentication (Bearer token).

MethodPathDescription
POST/tasksCreate a task
POST/tasks/bulkBulk create tasks
GET/tasksList tasks (optional ?status= filter)
GET/tasks/{taskId}Get task details + logs
PUT/tasks/{taskId}Update task (edit, cancel)
DELETE/tasks/{taskId}Delete a task
POST/tasks/{taskId}/statusWorker status update

Create Task

bash
curl -X POST https://api.universalapi.co/tasks \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "title": "Fix login validation",
    "description": "The email regex allows invalid emails...",
    "repoUrl": "https://github.com/user/repo.git",
    "baseBranch": "main",
    "tool": "claude-code",
    "priority": 2,
    "maxWorkers": 3
  }'

Bulk Create

bash
curl -X POST https://api.universalapi.co/tasks/bulk \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "repoUrl": "https://github.com/user/repo.git",
    "tool": "claude-code",
    "tasks": [
      {"title": "Fix bug A", "description": "..."},
      {"title": "Fix bug B", "description": "..."},
      {"title": "Add feature C", "description": "..."}
    ]
  }'

Universal API - The agentic entry point to the universe of APIs