Runs & Traces
Every Harbor execution leaves a durable trace.
Every hrbr exec, Function invocation, App route hit, and workflow step creates run/trace data. The dashboard is the canonical browsing UI; the CLI exposes a small real lookup surface through hrbr inspect.
What gets traced
| Action | Run? | Trace tree |
|---|---|---|
hrbr exec | Yes | Root span plus plugin/runtime child spans. |
| Function execution | Yes | Same runtime span shape. |
| App route hit | Yes | HTTP route plus backing work. |
| Workflow step | Yes | One child span per durable step. |
| Plugin install/OAuth | Audit log instead | No execution trace. |
Run lifecycle
| State | Meaning |
|---|---|
| pending | Queued, not yet started. |
| running | In flight. |
| completed | Finished and return value captured. |
| failed | Threw an exception; error captured. |
| cancelled | Cancelled through dashboard or SDK control-plane flow. |
CLI lookup
hrbr inspect 'return await hrbr.runs.list({ limit: 10 })'
hrbr inspect 'return await hrbr.runs.get({ run_id: "<run-id>" })'
hrbr inspect 'return await hrbr.runs.graph({ run_id: "<run-id>" })'The public CLI does not expose a separate runs subcommand family. Use inspect for lookup, and use the dashboard or SDK clients for artifacts, replay, export, and richer run events.
Span shape
Each span captures name, kind, start time, duration, input, output, and error. Spans nest naturally when a runtime primitive or tool call happens inside another operation.
Artifacts
Artifacts written during a run are linked in the dashboard. SDK clients expose artifact APIs for programmatic download.
Filtering
The Traces page supports filters across member, source kind, Function/App, status, duration, plugin, and time range. Dashboard URLs are shareable.
Retention
- Cloud: trace, span, and artifact retention depends on plan.
- Open source/local: retention depends on local storage and cleanup policy.