Proprietary · host-agnostic
The agent that works on your machine.
Message it from Slack. It decides, then acts on GitHub, Claude Code, Cursor, VS Code, Gmail, and Drive — through connectors you enable, on a worker you host. This site is the UI, not the runtime.
Example
@worker-bot implement the parser with Claude Code and open a pull request
Router
- claude-code
- github
- slack
Outcomes
- Claude Code session started on this machine
- GitHub pull request drafted
- Slack thread: Working → Done
Pair and push
Connect a worker, then send tokens.
Pairing talks directly to your worker URL. Tokens stay on that host — never in Vercel env and never in this browser after you push.
01 start
Start your worker
Run the CLI, desktop app, or a long-lived host. Copy the pairing code it prints.
02 pair
Pair this browser
Paste the worker URL and code on Settings. The control token stays in this browser only.
03 push
Push tokens
Send Slack, LLM, GitHub, Linear, and sandbox fields to the worker. Then watch jobs land.
The product loop
Slack in. A decision. Then work.
Phase 1 is the Coder worker (the Developer persona). People run their own bot and message it from Slack. The bot chooses one or more actions — it does not lock you to a single chat host or cloud.
01 inbound
Someone messages Slack
A DM or @mention lands on the worker you run. Socket Mode needs no public Slack Request URL. Optional Events API HTTP (`POST /v1/slack/events`) is the same worker, never apps/web. The same listen handler accepts stub envelopes in demo and CI.
02 decide
The router picks actions
MessageRouter asks the configured model for a structured decision, then falls back to keywords. It never lives inside the Slack connector.
03 act
Connectors do the work
Reply in Slack, start Claude Code, open GitHub work, park a Drive artifact, draft Gmail, list Calendar, list Linear — or combine those. Disabled connectors are skipped, not faked.
Personas
Coder is available. Other roles open with a flag.
Personas are product roles, not chat personalities. Coder (id developer, alias coder) is selectable unless persona-coder is off. Product owner, Marketing, Accountant, and Legal stay visible as Coming soon until persona-po, persona-marketing, persona-accountant, and persona-legal are on. With no PostHog key those same defaults apply. Each role has its own SOUL, skills, and connector set. Accountant sends mail and writes to Drive only after a Slack Approve. Product owner triages the backlog and drafts issues through GitHub and Linear; every write waits for a Slack Approve, and build work leaves as a handoff to Coder.
Coder
Coding agent loop (Developer-compatible): routes Slack work through GitHub, Claude Code, the editor, Drive, Gmail, Calendar, and Vercel or Fly.io deploys. Connected-service context is shared with every persona.
Accountant
Coming soonTriages invoice and expense mail, drafts payment reminders, summarizes Drive finance folders, and reviews Stripe customers, subscriptions, and charges. Any send, Drive write, or charge waits for Slack Approve. Connected-service context is shared with every persona.
Marketing
Coming soonCampaign briefs, email drafts, Drive asset lookup, launch scheduling, and waitlist mail through Gmail, Resend, SendGrid, Drive, Calendar, and Slack. Writes wait for Slack Approve. Connected-service context is shared with every persona.
Legal
Coming soonLegal busywork: contract and policy review checklists, compliance research, and draft correspondence through Gmail, Drive, Calendar, and Slack. Drafts and checklists only, not legal advice. Writes wait for Slack Approve.
Product owner
Coming soonBacklog triage, issue writing, and stakeholder updates through GitHub, Linear, Slack, and Gmail drafts. Every write waits for Slack Approve.
Pluggable packages
Connectors are packages, not a plugin host
Each product is a package behind a shared interface. Defaults are stubs so clone, demo, and CI stay offline. Flip mode: "live" and supply credentials when you want the real API or CLI.
Slack
Phase 1 chat surface. Socket Mode inbound by default, optional Events API HTTP on the worker, thread status, and Approve / Reject when work needs you.
Live when you opt in
Telegram
Second chat surface on the Messaging pack. Bot API only: a webhook on the worker control API with a secret token, and plain-text replies. Approve and Reject stay in Slack for now.
Live when you opt in
GitHub
Open issues, draft pull requests, and record code-change intent from a Slack message.
Live when you opt in
Claude Code
Start a coding session from Slack. Live mode calls the Claude Code CLI on the machine that runs the worker.
Live CLI when you opt in
Cursor / VS Code
Open a path in your editor. Apply a unified patch locally. Cursor live sessions use the Agent CLI (`agent -p`). VS Code has no headless agent CLI.
Cursor sessions live via agent CLI
Gmail
List and read mail, create drafts. Sending a draft needs allowSend plus explicit approval.
Send stays gated
Google Calendar
List upcoming events. Creating an event needs allowWrite plus Slack approval.
Create stays gated
Linear
List Linear issues. Creating an issue needs Slack approval unless requireApproval is off.
Create stays gated
Google Drive
Park reports, patches, and Slack artifacts. Stub keeps them in memory; live writes to the Drive API.
Live when you opt in
Host-agnostic
Vercel hosts the UI. You host the worker.
This Next.js app is a thin public edge. The long-running process — Socket Mode, routing, connectors — runs on Docker, Fly, a VPS, worker-bot run, or the Electron app in apps/desktop (Windows / macOS). Slack stays the Phase 1 chat surface.
This site · Vercel
Landing, /library, /status, /settings, /jobs, and GET /api/health. Settings and jobs talk directly to your worker URL (localhost, Fly, or a custom domain). No Slack tokens or LLM keys are stored here. You can host the same Next.js app anywhere.
Desktop · Electron
apps/desktop is a native Windows / macOS window that starts the same Developer worker as worker-bot run. Status, logs, first-run setup, and approvals — not a wrapper of this site.
Your machine · CLI
pnpm exec worker-bot run starts the Developer worker on the PC that already has your editor, git, and files. Same loop as the desktop app, without Electron.
Docker · any host
The root Dockerfile builds the worker image. Pass config and secrets at run time. Nothing is baked in.
Fly · example only
deploy/fly.toml.example is a starting point for a long-running Socket Mode process plus an optional HTTPS control API for /settings and, if you opt in, Slack Events API HTTP. The repo does not import Fly APIs.
Try it
Clone, build, demo — no Slack login
worker-bot demo feeds sample Slack messages through the same decide → act loop. You will see stub routing unless you point a live model at it. That is expected.
git clone https://github.com/astrocodelp/worker-bot.git cd worker-bot corepack enable && corepack prepare pnpm@10.33.3 --activate pnpm install && pnpm build pnpm exec worker-bot demoArchitecture
Portable by design. Vendor-free core.
Connectors are packages. @worker-bot/core must not import vendor SDKs or know about Slack and GitHub. New work lands as a package, not a lock-in plugin. Worker Bot is proprietary software owned by Vasileios Drosatos / Astro Code. All Rights Reserved.