Runners
Connect AI-powered runner agents that automatically pick up tickets, write code, and deliver pull requests.
Runners are AI agents that connect to Spedy and do work for you. When a ticket reaches a certain status, Spedy creates a job. A runner picks it up, writes the code, and delivers a pull request -- fully automatic.
Quick Overview
- You create a runner token in Spedy (Settings → Runners)
- You download and set up the Spedy Supervisor on your machine or server
- The supervisor connects, polls for work, and executes jobs
- You see progress and results directly in Spedy
Step 1: Create a Runner Token
- Open Settings → Runners
- Switch to the Tokens tab
- Click Create Token and give it a name (e.g., "My Dev Runner")
- Copy the token immediately -- it is only shown once
The token looks like this: rnt_a3f8c1d9e4b7... (64 hex characters after the prefix).
Step 2: Install the Spedy Supervisor
The Spedy Supervisor is a lightweight program that runs on your machine or server. It manages one or more runner instances and connects them to Spedy.
Prerequisites
- Docker and Docker Compose installed
- An Anthropic API key (
sk-ant-...) - A GitHub personal access token (
github_pat_...) with the required permissions (see below)
GitHub Token Permissions
The GitHub token needs the following scopes so the runner can clone repositories, create branches, and open pull requests:
| Permission | Access | Why |
|---|---|---|
| Contents | Read and write | Clone repos, read files, push commits and branches |
| Pull requests | Read and write | Create and update pull requests |
| Metadata | Read-only | Required by GitHub for all tokens (granted automatically) |
Recommended: Use a fine-grained personal access token scoped to only the repositories the runner should access. This follows the principle of least privilege.
To create one: GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens → Generate new token.
Download and Setup
- Download the latest release:
wget https://spedy.ai/download/supervisor -O spedy-supervisor.zipTo download a specific version, append ?version=v0.0.6 (or whichever tag you need).
- Unzip the archive:
unzip spedy-supervisor.zip
cd spedy-supervisor- Run the setup script:
./setup.shThe setup wizard will ask you for the following:
| Prompt | Description | Example |
|---|---|---|
| Spedy API URL | Your organization's API endpoint | https://your-org.spedy.app/api/v1 |
| Runner Token | The token from Step 1 | rnt_a3f8c1d9e4b7... |
| Anthropic API Key | Your Anthropic API key for Claude | sk-ant-... |
| GitHub Token | A GitHub PAT with repo access | github_pat_... |
| Runner pool size | How many parallel runners to run (default: 3) | 3 |
| Job log directory | Where to store job logs (default: ./jobs) | /path/to/logs |
Start the Supervisor
After setup, start the supervisor:
docker compose up -dOther useful commands:
# View logs
docker compose logs -f
# Stop the supervisor
docker compose down
# Update to latest version
docker compose pull && docker compose up -dVerify the Connection
Go to Settings → Runners → Runners tab. Your runner should appear with a green "Online" badge.
Step 3: Configure Automatic Job Creation
By default, Spedy can automatically create jobs when a ticket moves to a specific status.
- Open Settings → Runners
- Set the trigger status (e.g., "AI Processing")
- Enable Auto-create jobs
Now when you drag a ticket into the "AI Processing" column, Spedy creates a job that your runner picks up.
You can also create jobs manually from the Jobs tab by clicking Create Job.
Watching Jobs Run
Batch Jobs
Batch jobs run in the background. You can see their progress in the Jobs tab:
| Status | What's Happening |
|---|---|
| Ready | Waiting for a runner to pick it up |
| Claimed | A runner has taken the job |
| Preparing | Cloning the repository |
| Executing | The AI is working on the task |
| Syncing | Creating the pull request |
| Completed | Done -- PR link is available |
| Failed | Something went wrong -- check the error message |
Streaming Jobs
Streaming jobs give you a live view of what the AI is doing. Click on a streaming job to see:
- Real-time text output from the AI
- Tool calls (file edits, commands) as they happen
- The ability to send input when the AI asks a question
- A stop button to pause the work
- A continue button to resume after a pause
The live event feed updates automatically -- you see everything as it happens.
What Happens When a Job Fails?
When a runner job fails, the ticket is automatically moved back to the Todo column with an AI Failed badge. This makes it easy to spot tickets that need attention. When you drag the ticket back into "AI Processing", the badge is cleared and a new job is created automatically.
Automatic Retrigger on PR Review
When a reviewer requests changes on a pull request, Spedy can automatically retrigger the runner to address the feedback — without any manual intervention.
How It Works
- A runner completes a job and opens a pull request
- A reviewer leaves a "Changes Requested" review on the PR (GitHub or Bitbucket)
- Spedy receives the webhook and creates a new runner job
- The runner picks up the job, reads the review comments, and pushes a revised commit
The new job includes the full review context: the reviewer's summary comment and all inline comments with their file location and line number.
Requirements
- Git integration must be active for the repository (Settings → Integrations)
- Runner retrigger on review must be enabled in Settings → Runners → Settings
- The pull request must be linked to a ticket in Spedy (this happens automatically when the runner creates the PR)
Guards and Safeguards
Spedy applies several checks before triggering a new job to avoid unnecessary or duplicate work:
| Check | Description |
|---|---|
| Feature flag | Retrigger must be enabled in runner settings |
| Linked ticket | PR must be linked to an active ticket |
| No active job | A new job is only created if no job is currently running for that ticket |
| Previous job completed | The last job for the ticket must have completed (not failed or been cancelled) |
| Deduplication | If a job for the same PR review already exists, a second one is not created |
| Rate limit | At most one retrigger per PR per hour |
What the Runner Receives
The runner job prompt includes:
- The original ticket description
- A summary of the reviewer's feedback
- All inline review comments with file path, line number, and comment text
- The PR URL and branch name
This gives the runner everything it needs to address the feedback precisely.
Managing Runners
In Settings → Runners you have four tabs:
Tokens Tab
- Create new runner tokens
- See which tokens are active and when they were last used
- Revoke tokens that are no longer needed
Runners Tab
- See all connected runners with their status (Online / Offline)
- View capabilities and labels for each runner
- See how many jobs each runner is currently handling
- Delete runners you no longer need
Jobs Tab
- Browse all jobs with status filters
- View job details, results, and PR links
- Watch streaming jobs in real time
- Manually create new jobs
Settings Tab
- Configure the trigger status for automatic job creation
- Set the completion status (where tickets move after a successful job)
- Enable or disable auto-create jobs
Runner Capabilities and Labels
When a runner registers, it declares what it can do:
- Capabilities: The AI backends it supports (e.g.,
claude_code). A runner only receives jobs that match its capabilities. - Labels: Tags like
backend,frontend,python,typescript. Jobs can require specific labels, so only matching runners pick them up.
This lets you run specialized runners -- for example, one for backend work and another for frontend work.
What Happens When a Runner Goes Offline?
Spedy monitors runners via heartbeats. If a runner stops sending heartbeats for more than 90 seconds (configurable):
- The runner is marked as Offline
- All its active jobs are automatically marked as Failed
- You see the status change in real time in the UI
When the runner comes back online and sends a heartbeat, it's marked as Online again and can pick up new jobs.
Token Security
- Tokens are hashed before storage -- Spedy never stores the plain value
- Each token has a visible prefix (e.g.,
rnt_a3f8) so you can identify it - Tokens can have an expiration date
- Revoked tokens are rejected immediately
- You can scope a token to a specific runner for extra security
Troubleshooting
Docker pull fails on Apple Silicon Macs (ARM64)
If you see an error like:
no matching manifest for linux/arm64/v8 in the manifest list entriesThe supervisor image is currently only built for linux/amd64. On Apple Silicon Macs, add the platform field to your docker-compose.yml:
services:
supervisor:
platform: linux/amd64
image: ghcr.io/coding9gmbh/spedy-supervisor:latest
# ...Docker Desktop will use Rosetta to emulate the x86 architecture automatically.
Tips
- Start simple: Begin with one runner and the default settings. You can scale later.
- Use labels: If you have multiple projects, use labels to route jobs to the right runner.
- Watch the heartbeat: If a runner shows as "Offline", check that it's running and can reach the Spedy API.
- Check the Jobs tab: If jobs stay in "Ready" for a long time, make sure you have a runner online with matching capabilities.
- Pool size: Increase the runner pool size if you want multiple tickets processed in parallel.