temporalio/local-temporal
Instructions for running the UI against a local Temporal server build instead of the built-in CLI dev server. Use when asked how to start the dev environment, run the UI locally, or connect to a local Temporal repo.
npx skills add https://github.com/temporalio/ui --skill local-temporal
To develop against a local build of the Temporal server, you need two things running in separate terminals.
Navigate to your local clone of the temporalio/temporal repo and start the server:
make start
This builds and starts the server with SQLite in-memory. If you want a specific branch, check it out first:
git checkout <branch-name>
make bins # safe to run even if already built — outputs "Nothing to be done" and exits cleanly
make start
The server runs gRPC on port 7233 and HTTP on 7243.
From this repo, use the local-temporal script instead of the default dev script:
pnpm dev:local-temporal
This loads .env.local-temporal which points the UI at the local server instead of spinning up its own.
pnpm dev?pnpm dev (aliased to pnpm dev:ui-server) starts a bundled Temporal server alongside the UI. pnpm dev:local-temporal skips that and connects to whatever is already running on the configured ports.
This is critical when working on unreleased features. The ui-server (server/) is a separate Go binary that acts as a grpc-gateway — it decodes HTTP/JSON into proto messages and forwards them to the Temporal server over gRPC. Its proto descriptors are baked in at compile time from its own server/go.mod.
If the Temporal server branch uses a newer go.temporal.io/api version than server/go.mod, the ui-server will reject any new HTTP fields as "unknown field" before the request ever reaches the Temporal server.
When switching to a Temporal branch with API changes:
go.temporal.io/api version the Temporal server branch uses: grep "go.temporal.io/api" ~/code/temporal/go.mod
server/go.mod to match: cd server
go get go.temporal.io/api@<version>
go build -o ui-server ./cmd/server
pnpm dev:local-temporal to pick up the new binary.Take temporalio/local-temporal from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.