Tracing and Debugging
This guide explains how to use Skulk's runtime tracing feature.
The short version:
- tracing is off by default
- you turn it on from the dashboard traces view or via
PUT /v1/tracing - the toggle applies to new requests across the current cluster session
- image, text-generation, and embedding requests can all produce traces
- traces can be browsed from any reachable node through the cluster trace view
How To Turn It On
In the dashboard:
- click the bug icon in the toolbar
- open the Traces page
- use the tracing toggle card at the top of the page
The UI copy intentionally says:
- Applies to new requests on all nodes
That is the correct mental model. Tracing is a runtime cluster toggle, but it does not retroactively attach to work that was already running before you enabled it.
You can also control it through the API:
curl http://localhost:52415/v1/tracing
curl -X PUT http://localhost:52415/v1/tracing \
-H 'Content-Type: application/json' \
-d '{"enabled": true}'
What Gets Traced
Tracing is no longer image-only.
Skulk can now emit traces for:
- image generation and image edits
- text generation
- text embeddings
The trace metadata includes:
- task kind
- model ID
- source node information
- tags
- arbitrary attributes for richer debugging views
Tool-related text-generation activity is also marked so the traces page can filter for tool activity.
Local vs Cluster Browsing
The traces page supports two browsing scopes:
- Local: show trace artifacts saved on the current node
- Cluster: fan out to reachable peer APIs, deduplicate by
task_id, and browse traces from any reachable node
This distinction matters:
- browsing is available from any reachable node in cluster scope
- deletion is still local-only in v1
- if some peers are offline or unreachable, cluster results may be partial
API Surface
Runtime tracing control:
GET /v1/tracingPUT /v1/tracing
Local trace browsing:
GET /v1/tracesGET /v1/traces/{task_id}GET /v1/traces/{task_id}/statsGET /v1/traces/{task_id}/rawPOST /v1/traces/delete
Cluster trace browsing:
GET /v1/traces/clusterGET /v1/traces/cluster/{task_id}GET /v1/traces/cluster/{task_id}/statsGET /v1/traces/cluster/{task_id}/raw
For request and response details, see the API guide and the interactive API Reference.
Common Workflow
When you want to debug a live problem:
- open the traces page
- enable tracing
- reproduce the workload
- refresh the traces list
- inspect local or cluster scope as needed
- use filters for task kind, model, source node, category, or tool activity
- download the raw trace JSON or open it in Perfetto when you need timeline detail
Operator Notes
- tracing is meant for debugging sessions, not as a permanent always-on mode
- enabling tracing affects new requests only
- the old env-var path still exists as a hidden developer boot override, but it is no longer the normal user workflow
- cluster browsing is read-only in v1
- local deletion remains explicit and local-only in v1