Gorkie runs as one local app: apps/bot.
The bot uses Chat SDK with the Slack adapter in Socket Mode, so local development does not need a public tunnel. AI work runs through AI SDK Harness/Pi and each active Slack thread gets an E2B sandbox.
- Bun
- PostgreSQL
- A Slack app created from
slack-manifest.json - An E2B API key
- Provider keys for the configured Pi attempts
Create the bot env file:
cp apps/bot/.env.example apps/bot/.envFill in Slack, database, provider, E2B, Exa, and optional Langfuse values. SLACK_SOCKET_MODE=true is the normal local setting.
Install dependencies, push the schema, then start the bot:
bun install
bun run db:push
bun run dev:botThe bot runs TypeScript directly with Bun. Dev mode uses process-restart watch, not Bun hot reload, because Slack Socket Mode owns a persistent WebSocket that must shut down cleanly between reloads. Do not add bot bundling or tsdown unless there is a real deployment target that needs it.
Build the E2B template when sandbox packages or CLI dependencies change:
bun --filter=@repo/sandbox run build:templateThe template installs runtime tools such as Node, Python packages, agent-browser, browser dependencies, and upstream skill files. If Pi does not discover template-installed skills, investigate the adapter's skill discovery roots before adding app-owned skill copies.
bun run typecheck
bun run check
bun run check:spellingRun bun run fix before preparing a commit.
apps/bot is a long-lived process and should run on a persistent host. Configure the same variables as apps/bot/.env.example in the host environment and keep Socket Mode enabled unless the Slack runtime is explicitly moved to HTTP events.