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

Work orderjob · slack-route
From
#engineering
Via
Slack
Host
your worker
@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
Sample Phase 1 loop — not live traffic, not a hosted agent.

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.

  1. 01 start

    Start your worker

    Run the CLI, desktop app, or a long-lived host. Copy the pairing code it prints.

  2. 02 pair

    Pair this browser

    Paste the worker URL and code on Settings. The control token stays in this browser only.

  3. 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.

  1. 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.

  2. 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.

  3. 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 soon

    Triages 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 soon

    Campaign 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 soon

    Legal 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 soon

    Backlog 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 demo

Architecture

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.