See why your AI agent retrieved what it did — interactive graph viewer for agent retrieval traces. One command, zero dependencies, nothing leaves your machine.
Project description
graphsight
See exactly why your AI agent retrieved what it did.
Your agent answered a question. Which documents did it actually pull? What scores did they get? How are they connected to each other? Most stacks make you dig through logs to answer that. Graphsight renders the run as an interactive graph in your browser — one command, zero dependencies, nothing leaves your machine.
pip install graphsight
graphsight path/to/trace_state.json
What you get
- Every retrieved item as a typed node — PR, Service, Person, Ticket, Document, Repo, Library, Team, Tool — with its retrieval score.
- Relational paths between results — person → authored → PR → resolves → issue — the chain of evidence, not just a ranked list.
- An inspector on every node: underlying content, score, source link.
- The execution timeline of the run: each agent step, each retriever call, per-span timings, and which retrieval arm (vector / graph) produced the results.
Requirements
| Python | ≥ 3.10 |
| Runtime dependencies | none (stdlib only) |
| Platforms | Windows, macOS, Linux |
| Browser | any modern browser |
Usage
graphsight [trace] [--port PORT] [--no-browser]
| Argument | Default | Description |
|---|---|---|
trace |
— | A trace_state.json file, or a directory of them (e.g. .graphsight/) to browse run history. Optional — omit to open the import page and drag-and-drop or paste JSON instead. |
--port |
4630 |
Local port to serve on. |
--no-browser |
off | Start the server without opening a browser window. |
The server binds to 127.0.0.1 only and runs until you press Ctrl+C.
Run history
Point graphsight at a directory and it becomes a run browser — every
trace listed by query and time, one click to open:
graphsight .graphsight/
The graphsight-langgraph
capture() helper appends every agent run there automatically, so your
debugging history accumulates with zero ceremony. Traces render with the
retrieved vs. used split: items that surfaced in the answer highlighted,
items retrieved but ignored dimmed — the two classic retrieval failures,
visible at a glance.
Sharing traces with your team
A trace is one self-contained JSON file — no account or backend needed to share it:
- Send the file. A teammate with
graphsightinstalled runsgraphsight trace.json. Works in a DM, a ticket attachment, a CI artifact. - Link it. A deployed Graphsight frontend opens any publicly reachable
trace via
…/memory/import?src=<url-to-json>— host the JSON on a gist or artifact store and share the link. (The host must allow cross-origin GETs; raw gists do.) - Commit it. Trace files in the repo next to the incident or PR they explain make retrieval debugging part of the review record.
Producing traces
Graphsight renders any file matching its trace JSON contract. Current producers:
-
graphsight-langgraph — instrument any LangGraph agent with a single callback handler, or trace a GitHub repository in one command:
pip install "graphsight-langgraph[example]" graphsight-github-trace langchain-ai/langgraph "who fixed the recent streaming bugs?" graphsight graphsight_out/trace_state.json
-
The TraceRAG engine — the graph-memory backend this project grew out of; its
/api/traceresponses are the same shape.
Adapters for LlamaIndex and raw OpenTelemetry spans are planned; all producers emit the same schema and render in this same viewer.
Writing your own producer
The minimum contract is small — a JSON object with:
{
"query": "the question that was asked", // required, string
"graph": {
"nodes": [{ "id", "label", "type", "score", "meta": { "snippet", "sourceUrl" } }],
"edges": [{ "id", "source", "target", "relation", "confidence" }]
},
"steps": [ /* execution timeline, optional */ ],
"metrics": { "queryTimeSec": 0.004 } // optional
}
Node positions are computed client-side; emitters never deal with layout. The complete schema and a reference emitter live in the graphsight-langgraph source.
Security and privacy
- The dependency list is empty by design: the UI is a bundled static build
(Vite + React + React Flow) served by Python's stdlib
http.server. - Binds to
127.0.0.1— not reachable from other machines. - No accounts, no telemetry, no outbound network calls. Your traces stay on your disk.
Troubleshooting
| Symptom | Cause / fix |
|---|---|
Address already in use |
Another process holds the port — pass --port 4631. |
| Browser doesn't open | Some environments (SSH, WSL, containers) can't launch one — start with --no-browser and open the printed URL yourself. |
Bundled UI missing error |
Broken installation — pip install --force-reinstall graphsight. |
| Page loads but trace doesn't | The JSON didn't match the contract — the import page shows the specific validation error. |
Links
- Source & issue tracker: github.com/Kcodess2807/graphsight
- LangGraph adapter: graphsight-langgraph on PyPI
- Beta test script: BETA.md
License
MIT © Arush Karnatak
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file graphsight-0.2.0.tar.gz.
File metadata
- Download URL: graphsight-0.2.0.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ade3fc8fb5577cfa96d05378f66b641420663097f42d5696913f87ad34edef42
|
|
| MD5 |
c1a50be322ffa1b9f13e0d92099abf6c
|
|
| BLAKE2b-256 |
a4e1556d9e1e6cb5ccca15834498d96e1894cfe387810dd3465f104e68a26c7f
|
File details
Details for the file graphsight-0.2.0-py3-none-any.whl.
File metadata
- Download URL: graphsight-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7658c2235a0b8c78aead9b802907b55cd1576f7e03547d2aefcb4f5850102d79
|
|
| MD5 |
d1f1a50c3715541fca8fac2559199f10
|
|
| BLAKE2b-256 |
09b982b437d98e02eb5d88be999d5a21233080426ebfd44a0eefccd78ba5f3a3
|