Visceral Python SDK
visceral — runtime optimization layer for AI agents. Wrap your LLM client and
Visceral observes traffic, finds wasted work, and proves a cheaper call is safe
before making it. Fails open: if Visceral is unreachable, your agent runs exactly
as before.
Install
pip install "visceral-ai[openai]" # or [anthropic], [google], [all-providers]
uv add "visceral-ai[openai]" # same extras, uv-managed projects
On a framework, add its extra so instrument() can capture it:
pip install "visceral-ai[langchain]" # or [llama-index], [crewai]
Distribution name is visceral-ai; the import package is visceral.
Requires Python 3.10+.
Agent-assisted setup
The package ships a /visceral skill for AI coding assistants (Claude Code
today). Register it once:
visceral install
(python -m visceral install does the same; and if you only want the
registrar without adding the SDK to a project yet, uv tool install visceral-ai or pipx install visceral-ai gives you the visceral command
globally.)
Then open your assistant in the repo you want instrumented and run
/visceral . — it detects your stack (provider clients vs. frameworks) and
wires wrap() / instrument() / @node / @tool in the right spots,
observe-only, then reports what it did. --project installs the skill into
the current repo instead of your user profile; --stdout prints it for
other assistants.
Usage
from openai import OpenAI
from visceral import wrap
client = wrap(OpenAI(), agent_id="my-agent") # same client back, now instrumented
Annotate the steps of your agent so they show up as named spans:
from visceral import node
@node("retrieve")
def retrieve(query: str) -> list[str]:
...
Beyond observation
Observation is the default; three opt-in paths build on it, each fully fail-open. Full detail in the SDK guide.
-
wrap(..., apply=True)— apply the optimizations the backend has already proven safe for your traffic: output-neutral cache-layout rewrites (Anthropiccache_controlmarkers, OpenAIprompt_cache_key) and tool-call reuse. Never changes what the model reads or returns.client = wrap(Anthropic(), agent_id="support-bot", apply=True)
-
instrument(framework, agent_id)— the client-less counterpart towrap(). Capture an agent framework's structure (LangChain / LangGraph, LlamaIndex, CrewAI) without wrapping a client. Framework capture wins over provider capture, so don't alsowrap()the same traffic.from visceral import instrument instrument("langgraph", agent_id="research-agent")
-
@tool(...)— annotate a tool function so read-only calls can be deduplicated and, once proven and withapply=True, served from a stored result instead of re-executed. Serving needsreadonly=Trueandreplay_safe=True; a failure always runs the real tool.from visceral import tool @tool("get_customer", readonly=True, replay_safe=True) def get_customer(customer_id: str) -> dict: return db.fetch_customer(customer_id)
Authentication
You hold exactly one secret: the workspace API key (vsc_live_...), from your
workspace's Settings page in the dashboard (or from Visceral during
onboarding). Set it as VISCERAL_API_KEY, or pass api_key= to wrap();
set VISCERAL_BASE_URL only if self-hosting. The key both authenticates the
SDK and selects the workspace your traffic lands in — there is no separate
user or org credential. One process serves one workspace: wrap every client
in a process with the same key.
Prompt and response text never leaves your process unencrypted: content is stripped or AES-256-GCM-encrypted before export with a per-workspace encryption key the SDK fetches automatically — you never handle it — and spans that cannot be redacted are dropped, never sent.
Develop
uv sync --extra all-providers --extra dev # or: pip install -e ".[dev]"
uv run ruff check src/ tests/
uv run pytest
uv.lock is committed; CI installs with uv sync --locked, so lockfile
drift fails the build — run uv lock after changing dependencies.
License
Apache-2.0: see LICENSE.
Release files for visceral-ai 0.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| visceral_ai-0.2.5.tar.gz | 115.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| visceral_ai-0.2.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 192.4 kB
Release files / visceral_ai-0.2.5.tar.gz
| Download URL | visceral_ai-0.2.5.tar.gz |
|---|---|
| Size | 115.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7753c2ac4cf1284be53c1e1383fff3590f4e5f5d745df52510ec6a5681318dd1
|
|
BLAKE2b-256 checksum How to use checksums |
11f16e87e382e41808f99de535e8dc17620ba28f6832b546a689fc2f07ceeb8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 22, 2026.
Transparency logRelease files / visceral_ai-0.2.5-py3-none-any.whl
| Download URL | visceral_ai-0.2.5-py3-none-any.whl |
|---|---|
| Size | 77.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5feb74712d62c3b676322b43f9b3baef478cf77d864a449c45b8b6e735bf19f
|
|
BLAKE2b-256 checksum How to use checksums |
04ed728cfc125f8b796cfbe09bf56c4fdda32a9c12fa2f46c7cd94ad59ef623f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 22, 2026.
Transparency log