Skip to main content

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 (Anthropic cache_control markers, OpenAI prompt_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 to wrap(). Capture an agent framework's structure (LangChain / LangGraph, LlamaIndex, CrewAI) without wrapping a client. Framework capture wins over provider capture, so don't also wrap() 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 with apply=True, served from a stored result instead of re-executed. Serving needs readonly=True and replay_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)

Source distribution for visceral-ai 0.2.5
File Size Uploaded
visceral_ai-0.2.5.tar.gz 115.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for visceral-ai 0.2.5
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.2.5 This release

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page