Instructions for AI coding agents working on the temporal-standalone project.
Temporal Standalone is a complete Temporal development environment with:
- Temporal Server (v1.31.0) with PostgreSQL 18
- Temporal UI (v2.49.x + custom overlays) with API Keys feature
- Casdoor (v3.49.0, OIDC Provider) for authentication
- Custom UI built via Git Submodule + Overlays approach
- Standalone Activities: Server ready, namespace capability pending
Start here for skills:
skills/temporal-standalone/SKILL.md
# 1. Configure environment
cp .env.example .env
# Edit .env if accessing via network IP
# 2. Start services
docker compose up -d
# 3. Check health
docker ps --format "table {{.Names}}\t{{.Status}}"temporal-standalone/
├── docker-compose.yml # Main services
├── docker-compose.override.yml # Custom UI build
├── .env # Configuration (not in git)
├── .env.example # Configuration template
├── config/
│ ├── temporal/ # Temporal server config
│ └── ui/ # UI config (template)
├── ui-custom/ # Custom UI source
│ ├── upstream/ # Git submodule (temporalio/ui)
│ ├── overlays/ # Custom modifications
│ └── Dockerfile.custom # Multi-stage build
├── scripts/ # Setup and utility scripts
└── .agents/ # AI agent resources
└── skills/ # Reusable agent skills
| Service | Default URL |
|---|---|
| Temporal UI | http://localhost:8080 |
| Temporal Server | localhost:7233 |
| Casdoor | http://localhost:8000 |
| PostgreSQL | localhost:5432 |
All configuration is via .env file:
# Network
TEMPORAL_HOST=localhost # Use IP for network access
# Ports
TEMPORAL_UI_PORT=8080
TEMPORAL_SERVER_PORT=7233
CASDOOR_PORT=8000
# OIDC (from Casdoor)
CASDOOR_CLIENT_ID=xxx
CASDOOR_CLIENT_SECRET=xxx
# Security
JWT_SECRET=change-in-productionThe custom UI uses a Git Submodule + Overlays approach:
ui-custom/
├── upstream/ # git submodule (temporalio/ui)
├── overlays/ # Your customizations
│ ├── server/server/route/api_keys.go
│ ├── src/routes/(app)/settings/api-keys/+page.svelte
│ └── src/lib/holocene/user-menu.svelte
├── Dockerfile.custom
└── scripts/apply-overlays.sh
- Copy
upstream/to build context - Apply
overlays/*on top - Build frontend (pnpm) + backend (Go)
- Generate config from env vars at runtime
cd ui-custom/upstream
git pull origin main
cd ../..
git add ui-custom/upstreamCreate files in ui-custom/overlays/ with same directory structure as upstream:
# Example: Add new route
mkdir -p ui-custom/overlays/src/routes/(app)/my-feature
echo "<script>...</script>" > ui-custom/overlays/src/routes/(app)/my-feature/+page.svelteThe custom UI includes an API Keys management feature:
- Backend:
ui-custom/overlays/server/server/route/api_keys.go - Frontend:
ui-custom/overlays/src/routes/(app)/settings/api-keys/+page.svelte - Menu Entry:
ui-custom/overlays/src/lib/holocene/user-menu.svelte
GET /api/v1/api-keys- List keysPOST /api/v1/api-keys- Create keyDELETE /api/v1/api-keys/:id- Delete key
API keys are signed JWTs using JWT_SECRET from environment.
# Remote
git@github.com:devton/temporal-standalone.git
# Push with SSH key
GIT_SSH_COMMAND="ssh -i ~/.ssh/temporal-standalone-git -o IdentitiesOnly=yes" git push origin masterIf accessing via IP, set TEMPORAL_HOST in .env:
TEMPORAL_HOST=192.168.2.68Then restart: docker compose down && docker compose up -d
# Rebuild from scratch
docker compose build --no-cache temporal-ui- Verify Casdoor is running:
curl http://localhost:8000/api/get-health - Check client ID/secret in
.envmatches Casdoor application - Verify redirect URLs in Casdoor app settings
- skills/temporal-standalone/SKILL.md — Orchestrator: routing, constraints, architecture
- Workflows:
- enable-feature — Namespace capabilities (Standalone Activities)
- fix-api-keys — Fix 3 bugs: in-memory, JWT, server auth
- server-upgrade — Upgrade + schema migration
- ui-rebuild — Rebuild UI custom
- namespace-ops — Namespace CRUD
- References:
- api-keys-bugs.md — Detailed bug reports + fix blueprints
- standalone-activities.md — Feature guide
- routing-matrix.md — Task → workflow mapping
- Workflows:
.agents/skills/workflow-blueprint/— Agentic workflow scaffolding pattern