To use the plugin from source:
git clone https://github.com/timescale/crayon.git
cd crayon
pnpm install
pnpm buildNote: This outputs the
claude --plugin-dir <path>command you need to run Claude Code with the local plugin.
crayon local run-dev starts the auth-server alongside the dev UI so you can test cloud features (cron scheduling, webhook tokens) locally. This command is only available when running from the monorepo.
-
Auth-server
.env.localmust exist atpackages/auth-server/.env.localwith the required env vars (seepackages/auth-server/README.md). It should point to the sameDATABASE_URLas the deployed auth-server so your CLI token works. Contents can be found in 1password "Crayon auth-server secrets". -
CLI login — run
crayon loginonce so~/.crayon/credentialshas a valid token.
npx tsx /path/to/crayon/packages/core/src/cli/index.ts local run-devThis will:
- Start the auth-server on
http://localhost:3000 - Set
CRAYON_SERVER_URLandCRAYON_TOKENautomatically - Launch the dev UI with cloud features enabled (webhook section, cron scheduling)
- Open the browser and start Claude Code
To see changes in the local you need to build and refresh browser
pnpm --filter runcrayon build 2>&1To test local core changes on a cloud dev machine:
-
Build & push a Docker image with your changes:
cd packages/core/docker && ./build-dev.sh <tag>
-
Start the local auth server (separate terminal):
cd packages/auth-server && pnpm dev
-
Create a new cloud machine using the local auth server:
CRAYON_SERVER_URL=http://localhost:3000 pnpm --filter runcrayon exec node dist/cli/index.js cloud run -
Open the dev UI at
https://<fly-app-name>.fly.dev/dev/
You can create a cloud sandbox with a specific Docker image tag without modifying the auth-server's CLOUD_DEV_IMAGE env var.
crayon cloud run --image-tag <tag>This creates the sandbox using registry.fly.io/crayon-cloud-dev-image:<tag> instead of the default :latest.
-
Build and push your image with a custom tag:
cd packages/core/docker && ./build-dev.sh my-feature
-
Create a sandbox using that tag:
crayon cloud run --image-tag my-feature
This is useful for testing changes in isolation without affecting other developers' sandboxes that use the default image.