Use when adding, modifying, or debugging a REST endpoint under /api/, including plain JSON routes and SSE (Server-Sent Events) streams — covers file placement, router registration, auth classification, and the supertest pattern for route tests.
Use when adding a new compound tool (a multi-step game sequence like batchmine/travelto/flee), when asked to make N raw game calls into one proxy-side tool call, or when extending server/src/proxy/compound-tools/.
Use when adding, modifying, or debugging a deterministic game routine (a scripted multi-step sequence like sellcycle or miningloop executed without LLM inference per tick) — covers the RoutineDefinition shape, phase/handoff conventions, registration in ROUTINEREGISTRY, how routines are triggered and persisted, and the…
Use when exposing a new game action, proxy-computed helper, or cached-data query through the v2 spacemolt(action="...") action-dispatch surface in gantry-v2.ts — covers the namespace/dispatch model, which of three action categories you're adding, the v1-alias and enrichment plumbing, and the canonical example commit…
Use when starting, stopping, restarting, or debugging the lifecycle of a fleet agent process — an agent shows offline in the dashboard while still running, a stale PID file, orphaned bun processes after a server restart, missing/stuck log output, or the health-monitor watchdog isn't restarting a crashed agent.
Use when configuring or debugging Gantry's auth adapters (none/token/local-network/cloudflare-access/layered/loopback), seeing unexpected 403s or unexpected admin access, wiring a new adapter, or working on AuthProvider/useAuth in the dashboard.
Use when building Gantry (server or dashboard), running the dev loop, seeing a UI change "not show up" after editing a .tsx file, producing the standalone binary, or running the built server locally without a live fleet.
Use when editing gantry.json, adding/removing a config field, debugging why a config change didn't take effect, tracing FLEETDIR/GANTRYENV resolution, or explaining hot-reload vs snapshot config behavior.
Use when adding or modifying persistence — new tables, service modules under server/src/services/, direct SQLite writes from the proxy, or tests that touch bun:sqlite — and when debugging fleet.db schema, locking, or WAL behavior.
Use when an agent gets a bad/unexpected tool result or error through the Gantry MCP proxy — investigating stuck sessions, stale cache, guard false-positives, retry storms, circuit-breaker trips, or instability warnings.
Use when deploying Gantry (Docker, systemd, or single binary), cutting a release/tag, checking what CI actually gates, or setting production auth/env recommendations — not for local dev loop mechanics (see build-and-dev skill for that).
Use when editing files under server/src/app/ or server/src/components/, adding a new dashboard page, wiring a hook to an API route or SSE stream, gating a control behind admin auth, or debugging "my UI change doesn't show up in the browser".
Use when running Gantry locally without a live fleet/game connection — verifying a UI change, reproducing a proxy bug, demoing the dashboard, or writing/running tests that shouldn't hit game.spacemolt.com. Never point a dev server at a production fleet — use this instead.
Use when extending, debugging, or reviewing PrayerLang — the bounded DSL agents submit via the spacemoltpray MCP tool — including adding a new statement/command or predicate, tracing a failed/interrupted prayer call, or reconciling docs/prayer.md against the actual parser/analyzer/executor.
Use when modifying how MCP tool calls flow through Gantry's proxy — adding a guardrail, adding a response injection, changing tick-wait/enrichment behavior, or reasoning about v1 vs v2 dispatch, shared state, or the config hot-reload snapshot gotcha.
Use when writing or running tests in Gantry (server routes, proxy modules, React components/hooks), seeing flaky Express/supertest failures, mocking createMcpServer/global.fetch, or preparing a PR that changes behavior.