Summary
Add a small CLI tool that takes a per-call NCP trace file (<trace_id>.jsonl) and prints a human-readable timeline. Raw JSONL is hard to skim when debugging a graph run; a pretty-printer is a frequent adopter pain point.
Why this is a good first issue
- Self-contained: one new directory under
tools/ or a single script.
- Either Python (stdlib only) or Rust is acceptable. Pick the language you are comfortable with.
- Acceptance criteria are concrete and testable.
- No protocol-level or runtime-internal knowledge required. Just JSON parsing and formatting.
Acceptance criteria
Out of scope
- Real-time tailing (
tail -f mode).
- HTML or web rendering.
- Cross-trace aggregation.
Where to read
runtime/src/trace.rs for the JSONL record shapes (runtime_info, invoke).
spec/ncp-v0.2.3.md §11 (Tracing) for the canonical schema.
- A real example trace: run
ncp-mcp-server with --trace-dir and perform a tools/call via examples/mcp/ci_smoke.py or the manual smoke recipe in examples/mcp/echo-pipeline-mcp-smoke.md.
Summary
Add a small CLI tool that takes a per-call NCP trace file (
<trace_id>.jsonl) and prints a human-readable timeline. Raw JSONL is hard to skim when debugging a graph run; a pretty-printer is a frequent adopter pain point.Why this is a good first issue
tools/or a single script.Acceptance criteria
tools/trace-pretty/(Rust binary) ORtools/trace_pretty.py(Python stdlib)..jsonltrace file as positional arg.step | node_id | brick_id | result_type | latency_ms.result_type.examples/graphs/echo-pipeline/.Out of scope
tail -fmode).Where to read
runtime/src/trace.rsfor the JSONL record shapes (runtime_info,invoke).spec/ncp-v0.2.3.md§11 (Tracing) for the canonical schema.ncp-mcp-serverwith--trace-dirand perform atools/callviaexamples/mcp/ci_smoke.pyor the manual smoke recipe inexamples/mcp/echo-pipeline-mcp-smoke.md.