Bolt
is Team 581's Slack agent for project management, robot-code questions, and WPILOG analysis.
Junior owns Slack ingestion, durable conversations, scheduled tasks, attachments, queues, and persistent Vercel Sandboxes. Bolt adds only its own instructions, skills, and a local sandbox-preparation plugin. It does not register Junior's GitHub, memory, or other provider plugins.
- Install Docker and the mise tools with
mise install. - Run
vp install. - Copy
.env.exampleto.env.localand fill in the required Slack, Junior, Google OAuth, GitHub App, GCS, and AI Gateway values. - Run
mise run dev. Pitchfork starts local Postgres and Redis, Junior applies its SQL migrations, and Nitro starts on port 3000. - Enable Socket Mode on the test Slack app and create an app-level token with
connections:write. - In a second terminal, run
mise run slack:socket. The listener forwards Slack events to Junior atJUNIOR_BASE_URL, which defaults tohttp://localhost:3000.
Production continues to use Junior's HTTP webhook at /api/webhooks/slack; the Socket Mode listener is only a local development process.
Useful checks:
vp run check:junior
vp check
vp test
vp run buildThe production release build additionally creates the cached Vercel Sandbox snapshot:
vp run build:release- Agent instructions:
app/SOUL.mdandapp/WORLD.md - Custom skills:
app/skills - Sandbox setup:
app/plugins/bolt-runtime.ts - Production rollout:
DEPLOYMENT.md
The sandbox plugin installs Java 21, GitHub CLI, jq, and Cloud Storage FUSE into Junior's snapshot. It maintains /workspace/offseason-2026, mounts fetch_storage read-only at /workspace/fetch, and injects a fresh GitHub App installation token into each Bash command. Junior does not inspect or restrict those GitHub commands.