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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

visceral_ai-0.2.4.tar.gz (110.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

visceral_ai-0.2.4-py3-none-any.whl (75.1 kB view details)

Uploaded Python 3

File details

Details for the file visceral_ai-0.2.4.tar.gz.

File metadata

  • Download URL: visceral_ai-0.2.4.tar.gz
  • Upload date:
  • Size: 110.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for visceral_ai-0.2.4.tar.gz
Algorithm Hash digest
SHA256 290dd9e23d92e8ad1f88bc3289e5ec798b4231652585b204c09657686d730969
MD5 23f06dfbda81e720161ecfaecb357679
BLAKE2b-256 58d86716434218cadf039c84c4c7cebf01d4ad54387afa02a227a7d5b4cf31cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for visceral_ai-0.2.4.tar.gz:

Publisher: publish.yml on visceral-ai/visceral-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file visceral_ai-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: visceral_ai-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 75.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for visceral_ai-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 d1d6ba37e7f9838cbde3e04aa35390e9c40ef163262a17a5d97273b42e76b536
MD5 286d5e939cfd372badd6dda9711c789f
BLAKE2b-256 2d5a9f443317248c301718f05b07bf8d372ff68c864d2881c475eb9d64e50370

See more details on using hashes here.

Provenance

The following attestation bundles were made for visceral_ai-0.2.4-py3-none-any.whl:

Publisher: publish.yml on visceral-ai/visceral-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.4 This release

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page