with one click
debug
Debug methodology — triage, parallel investigation, and synthesis.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Debug methodology — triage, parallel investigation, and synthesis.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Visual-design discipline for forge frontends — brief the work before building (never invent an aesthetic without user input), declare the design system before coding, lean on the component library, use restrained color/type systems, never hand-draw complex SVGs, and verify visually before declaring done.
Write Next.js frontends — generated hooks, component library, Tailwind v4, visual verification, and Connect RPC clients.
Outbound boundary translators. One adapter per third-party system / queue / storage backend; narrow interface, vendor-neutral callers.
Write Connect RPC handlers — proto-driven codegen, the thin-translation handler pattern (validate, extract auth, convert proto↔internal, call service, wrap errors via `svcerr.Wrap`), middleware, and testing. Business logic lives in `internal/handlers/<svc>/contract.go`, never in handlers.
Forge project conventions and architecture — project structure, generated vs hand-written code, the generate pipeline, proto annotations, contracts, wiring, and naming.
Use-case orchestrators that compose two or more adapters/services. Deps are interfaces only — designed for unit tests with all-mock collaborators.
| name | debug |
| description | Debug methodology — triage, parallel investigation, and synthesis. |
| emit | both |
Classify the bug before diving in:
If your environment supports parallel agents, split the work into three independent tracks:
Working solo? Run the three passes sequentially: research → reproduce → isolate.
Combine findings from all tracks before proposing a fix:
On top of the generic triage above, common forge-shaped bug classes:
forge generate, then forge audit to surface drift, then retest. Forge generates from proto + forge.yaml; stale gen masquerades as a bug in hand-written code.K8sCluster context (multi-cluster is native); a "service unreachable" or auth failure is usually a stale or wrong kubectl context, an expired credential, or a service that isn't up — not a code path. Confirm the context is current and the target responds first.internal/app/compose.go NewComponents, off the owned internal/app/providers.go OpenInfra). Deps are interface-typed fields resolved by type off Infra, so a missing required provider is a compile error (NewComponents won't build) or a forge generate "no provider" report, not a silent nil — but a wrong fill (an unintended optional dep left nil) can still surface as a nil-pointer panic deep in handler code. There is no generated wire_gen.go/bootstrap.go to inspect; the wiring is NewComponents filling typed Deps off Infra.forge test integration) before chasing a unit-test ghost.forge audit flags the mismatch. If the symptom is "column X not found" in a handler that names the right struct field, audit first.forge introspect handlers # every RPC path the binary registers — localize the fault
forge api curl <svc.method> # build a copy-pasteable Connect curl from the shell
forge cluster logs --service X # kubectl-backed log tail for one service (single cluster)
forge debug start <svc> # build + attach Delve debugger
forge debug start --attach PID # attach Delve to a live process (don't `stop` it — see below)
forge debug break/continue/eval# breakpoints, resume, evaluate in the debug session
forge debug stop # ends the session AND kills the debugged process
forge test --service <name> -V # verbose isolated test runs
forge test e2e # full-stack reproduction
forge test --race # run tests with race detector
forge generate # regenerate code (use when stale gen is suspected)
Pick the tool for the job — and know where each stops short:
forge introspect handlers to localize. Prints every RPC path the assembled
binary serves. If the failing RPC isn't there, the fault is a downstream/remote
hop, not this binary — that one check collapses the search space.forge api curl <service.method> to exercise an endpoint. Builds and runs a
Connect request from the shell, but it stops at the auth interceptor — it
does not mint a token. Use it for shape/connectivity; supply your own credential
for an authed call.forge cluster logs --service <name> for the symptom. kubectl-backed, no
file-grepping — but it tails only the owner cluster (the one cluster name in
config). For a multi-cluster app, set the context and run
kubectl --context <other> -n <ns> logs <pod> for the other half.forge debug start <svc> (Delve) — two sharp edges. In a multi-binary repo
start <service> can mis-build (it falls back to ./cmd/...); pass an explicit
path/service so it builds the binary you mean. And forge debug stop after
--attach kills the live process — detach instead of stop when you've
attached to something you need to keep running.Smoke/doctor are NOT app-flow proofs. A green forge smoke / forge doctor
checks listeners, local compose, and telemetry — never app-flow invariants. They
(and forge cluster status, green whenever pods are Running) can all be green
while the actual flow is broken. The only things that prove an app-flow fix:
doctor:<flow>
task that fails non-zero when the invariant is violated), andforge test e2e.Generic forge tools localize and surface evidence; they do not certify the fix.
Use chrome-devtools MCP tools for frontend bugs (snapshots, console, network).
The three investigation tracks above each have a dedicated forge sub-skill with concrete patterns:
reproduce — runtime evidence collection and e2e reproduction.isolate — top-down bisection from e2e to unit test.investigate — hypothesis formation and code tracing.multi-cluster-e2e — a workload stuck Pending / not-ready, or a flow that fails only in a k3d multi-cluster e2e env: read the pod status before the network, hold the pod up on failure, and the nested-cluster image-pull / host-gateway-DNS / path-MTU gotchas.docker-compose runs a Grafana LGTM stack with traces, metrics, logs, and continuous profiling.
http_server_request_duration_seconds etc.The app auto-connects: OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 pushes traces and metrics. PPROF_ADDR=localhost:6060 exposes pprof for Pyroscope scraping.
For LLM-driven observability, enable the Grafana MCP server from .mcp.json.example — it lets agents query Prometheus, Loki, Tempo, and dashboards directly.