Slack-native agent harness that forwards runs to Cursor Background Agents.
Bind Slack channels to GitHub repos. Mention @Computer with a request, and it dispatches a Cursor agent to implement it and open a PR.
- Channel-bound repos – Each channel maps to a single repo. No inline tags needed.
- Per-workspace Cursor keys – Each workspace uses their own Cursor API key.
- Inline overrides –
--branch=feat/x,--model=gpt-4o,--dry-run - Cancel/retry controls – Buttons in Slack threads.
- Audit trail – Every run records resolved context.
- Go to api.slack.com/apps and create a new app
- Under OAuth & Permissions, add these Bot Token Scopes:
app_mentions:readchat:writecommandschannels:readim:historyreactions:write
- Under Event Subscriptions, subscribe to:
app_mention
- Under Slash Commands, create:
/computer– Computer commands
- Note your Client ID, Client Secret, and Signing Secret
# Clone and install
git clone https://github.com/your-org/computer.git
cd computer
npm install
# Start Postgres
docker-compose up -d
# Copy env and fill in values
cp .env.example .env
# For local dev, enable Socket Mode in your Slack app and add:
# SOCKET_MODE=true
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_APP_TOKEN=xapp-...
# Run migrations
npm run db:push
# Start dev server
npm run dev# Install flyctl
brew install flyctl
# Login and launch
fly auth login
fly launch
# Create Postgres database
fly postgres create --name computer-db
fly postgres attach computer-db
# Set secrets
fly secrets set \
SLACK_CLIENT_ID="..." \
SLACK_CLIENT_SECRET="..." \
SLACK_SIGNING_SECRET="..." \
BASE_URL="https://computer.fly.dev"
# Deploy
fly deploy- Visit
https://your-app-url/slack/oauth/install - Approve the installation
- Run
/computer connectto set your Cursor API key - In a channel, run
/computer settingsto bind it to a repo - Mention
@Computerwith your request!
| Command | Description |
|---|---|
/computer |
Show help |
/computer connect |
Set Cursor API key for workspace |
/computer settings |
Configure current channel (repo, branch, model) |
/computer status |
Show channel config and recent runs |
Mention @Computer in a configured channel:
@Computer add a health check endpoint to the API
@Computer fix the TypeScript errors in src/utils --branch=fix/types
@Computer refactor the auth middleware --dry-run
| Override | Example | Description |
|---|---|---|
--branch=name |
--branch=feat/api |
Override target branch |
--model=name |
--model=gpt-4o |
Override model |
--dry-run |
--dry-run |
Generate patch without PR |
Slack Message
│
▼
┌─────────────────┐
│ Resolver │ (workspace, channel) → config
└────────┬────────┘
│
▼
┌─────────────────┐
│ Orchestrator │ Create run, call Cursor API
└────────┬────────┘
│
▼
┌─────────────────┐
│ Cursor API │ Background agent executes
└────────┬────────┘
│
▼
PR Created → Slack Thread Updated
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
Yes | PostgreSQL connection string |
SLACK_CLIENT_ID |
Yes | Slack app client ID |
SLACK_CLIENT_SECRET |
Yes | Slack app client secret |
SLACK_SIGNING_SECRET |
Yes | Slack app signing secret |
BASE_URL |
Yes | Public URL of the app |
PORT |
No | Server port (default: 3000) |
SOCKET_MODE |
No | Enable Socket Mode for local dev |
SLACK_BOT_TOKEN |
Socket Mode | Bot token for Socket Mode |
SLACK_APP_TOKEN |
Socket Mode | App token for Socket Mode |
MIT