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.5.tar.gz (115.1 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.5-py3-none-any.whl (77.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: visceral_ai-0.2.5.tar.gz
  • Upload date:
  • Size: 115.1 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.5.tar.gz
Algorithm Hash digest
SHA256 7753c2ac4cf1284be53c1e1383fff3590f4e5f5d745df52510ec6a5681318dd1
MD5 beb76d404a4acbfd13a99b85f44cbe87
BLAKE2b-256 11f16e87e382e41808f99de535e8dc17620ba28f6832b546a689fc2f07ceeb8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for visceral_ai-0.2.5.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.5-py3-none-any.whl.

File metadata

  • Download URL: visceral_ai-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 77.3 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 f5feb74712d62c3b676322b43f9b3baef478cf77d864a449c45b8b6e735bf19f
MD5 0571f8e9e5a4fba23731d2ad9000da88
BLAKE2b-256 04ed728cfc125f8b796cfbe09bf56c4fdda32a9c12fa2f46c7cd94ad59ef623f

See more details on using hashes here.

Provenance

The following attestation bundles were made for visceral_ai-0.2.5-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.5 This release

2 files

0.2.4

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