VisibleAgent Python SDK
Plain-English observability for AI agents. VisibleAgent turns your agent's work into a story a human can read — every run, every step, every tool call, live-streamed to a dashboard with full replay — while capturing metadata only by default: never prompts, never customer content, unless you explicitly opt in.
Install
pip install visibleagent # core SDK
pip install "visibleagent[langgraph]" # + LangGraph auto-instrumentation
LangGraph: one line, zero node changes
from visibleagent import VisibleAgent
from visibleagent.integrations.langgraph import VisibleAgentTracer
va = VisibleAgent(api_key="...", base_url="https://your-visibleagent-host")
tracer = VisibleAgentTracer(
client=va,
source="MyApp", # "which app did this?" label
display_names={ # optional: human names per node
"classify": "Classifying the message",
"respond": "Drafting a reply",
},
descriptions={ # optional: what each step does
"classify": "Reads the message and works out what it's about",
},
narrate=my_narrator, # optional: plain-English outcomes
)
graph.invoke(state, config={"callbacks": [tracer]})
The tracer auto-derives the whole span tree from LangGraph's callbacks —
nodes, model calls ("Thinking — …"), and tool calls — including model names,
token usage, and latencies. It works with bare llm.invoke() calls inside
your nodes (no config threading needed), never raises into your app, and is
completely inert when unconfigured.
narrate(node_name, output_state) lets you turn structured state into
human sentences — "Understood the message as a new order (94% confident)"
— without ever exposing raw content.
Manual instrumentation
with va.start_run(name="Refund request #4521", attrs={"source": "MyApp"}) as run:
with run.agent("support_agent", display="Support Agent") as agent:
with agent.step("classify", display="Understanding the request"):
...
with agent.tool("orders.lookup", display="Checking the order") as tool:
order = lookup(order_id)
tool.note(f"Found order {order_id}")
va.flush()
Spans emit .started / .completed / .failed automatically based on
whether the block raises. Delivery is batched on a background thread and
fail-open: a missing or unreachable VisibleAgent backend never affects
your application.
Content safety
Metadata capture is the default and the contract: span attributes carry
model ids, token counts, durations, statuses, and the labels you author —
never prompt or completion text, never tool argument values. A separate
explicit capture_content="full" mode exists for teams who want their own
content in their own dashboard.
License
Apache-2.0
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 visibleagent-0.1.0.tar.gz.
File metadata
- Download URL: visibleagent-0.1.0.tar.gz
- Upload date:
- Size: 35.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
18d0957ddb053e8c29adc614dd15a27dd7acecde2daa42f8a9aa3837340c2e75
|
|
| MD5 |
88a13026557bf7c9df96c9eae608bb8b
|
|
| BLAKE2b-256 |
815776997374cada5fbd927350fe593028af7ce7bc144feb24998f9f05073d22
|
File details
Details for the file visibleagent-0.1.0-py3-none-any.whl.
File metadata
- Download URL: visibleagent-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b6747001b0e5ada378cdc4fe0e34bf4454966e320795c8ba0ed41e2ed672af4a
|
|
| MD5 |
c025e25dbb7cac4d08aa6c0136e31f63
|
|
| BLAKE2b-256 |
eb69272d48d0c071d7a911d682c6dd2b9bc1a9e6d3246e7f75422b96e2148695
|