Plano ships two CLI tools for visibility into LLM traffic. Both consume the same OTLP/gRPC span stream from brightstaff; they just slice it differently — use whichever (or both) fits the question you’re answering.
+Both require brightstaff to be exporting spans. If you’re running the zero-config path (planoai up with no config file), tracing is auto-wired to http://localhost:4317. If you have your own plano_config.yaml, add:
tracing:
+ random_sampling: 100
+ opentracing_grpc_endpoint: http://localhost:4317
+planoai obs$ planoai obs
+# In another terminal:
+$ planoai up
+Cost is populated automatically from DigitalOcean’s public pricing catalog — no signup or token required.
+With no API keys set, every provider runs in pass-through mode — supply the Authorization header yourself on each request:
$ curl localhost:12000/v1/chat/completions \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer $DO_API_KEY" \
+ -d '{"model":"digitalocean/router:software-engineering",
+ "messages":[{"role":"user","content":"write code to print prime numbers in python"}],
+ "stream":false}'
+When you export OPENAI_API_KEY / ANTHROPIC_API_KEY / DO_API_KEY / etc. before planoai up, Plano picks them up and clients no longer need to send Authorization.
Press Ctrl-C in the obs terminal to exit. Data lives in memory only — nothing is persisted to disk.
planoai traceWhen you need to understand what happened on one specific request (which model was picked, how long each hop took, what an upstream returned), use trace:
$ planoai trace listen # start the OTLP listener (daemon)
+# drive some traffic through localhost:12000 ...
+$ planoai trace # show the most recent trace
+$ planoai trace <trace-id> # show a specific trace by id
+$ planoai trace --list # list the last 50 trace ids
+Use obs to spot that p95 latency spiked for openai-gpt-5.4; switch to trace on one of those slow request ids to see which hop burned the time.