This repository contains two related projects in one Bun workspace:
executor/: task execution platform (Convex backend, MCP endpoints, approvals, tool discovery, web app, binary CLI installer).assistant/: assistant-side services and Discord bot integrations that call into executor.
Most active platform work is in executor/, but root scripts are set up to run both sides together.
The root package.json wires workspaces for:
executor/apps/*executor/packages/*assistantassistant/packages/*
High-level layout:
.
|- assistant/ # assistant monorepo (core, server, bot, reacord)
|- executor/ # executor platform and binary install tooling
|- dev.ts # root orchestrator: starts all main dev services
|- kill-all.ts # cleanup for dev.ts processes
|- .env.example # canonical env template for the whole repo
`- package.json # root scripts + workspace graph
- Bun (required)
- Convex account/project (for source dev against a Convex deployment)
- Optional: Discord bot token, WorkOS and Stripe credentials
- Install dependencies from the repository root:
bun install- Create local env file:
cp .env.example .env- Set required values in
.env:
CONVEX_DEPLOYMENTCONVEX_URL
- Start the full stack:
bun run devbun run dev starts, in parallel:
- Convex dev watcher for
executor/ - Executor web app (
http://localhost:4312) - Executor MCP endpoint (
<CONVEX_SITE_URL>/mcp) - Assistant server (
http://localhost:3002) - Discord bot (only if
DISCORD_BOT_TOKENis set)
PIDs are tracked in .dev.pids. To stop all processes:
bun run kill:all# Development
bun run dev
bun run kill:all
# Quality
bun run test
bun run typecheck
# Executor utilities
bun run db:clear:executor
bun run convex:codegenThis repo uses a single root .env as the source of truth.
assistantandexecutorscripts read from root env-aware wrappers.executor/apps/webis a TanStack Start app; canonical vars are consumed by the app and injected at runtime.- Client-facing values use
VITE_*names where needed. - See
.env.examplefor optional WorkOS, Stripe, tool-source API keys, and port overrides.
- The assistant side lives in
assistant/(server, bot, shared core). - The execution/control plane lives in
executor/. - If you are focused on executor internals, start with
executor/README.md.
From root:
bun run testruns executor and assistant tests.bun run typecheckruns TypeScript checks for executor and assistant packages.
You can also run package-local checks directly from each subproject.