Skip to main content

Ciphyrs — observability for AI agents

PyPI Python License: MIT

See every agent, tool call and model call your application makes, as one connected graph. Built on OpenTelemetry, so the spans are standard OTLP and sit beside whatever tracing you already have — and your model calls stay yours, made directly against your provider.

Install

pip install ciphyrs

One command. OpenTelemetry and httpx come with it. Python 3.9 through 3.14, including the free-threaded 3.14 build (PEP 703).

No framework-specific install, and none exists. @agent and @tool wrap plain functions, so they work with any agent framework, or none.

Monitor your agents

import ciphyrs

ciphyrs.init(api_key="cyp_live_...", project="customer-support")

@ciphyrs.tool
def issue_refund(order: str, amount: float) -> dict:
    return payments.refund(order, amount)   # traced, and checked against policy

@ciphyrs.agent("BillingAgent", role="worker")
def billing(question: str) -> str:
    answer = my_model.generate(question)      # your model call, unchanged
    issue_refund(order="A-1041", amount=12.0)
    return answer

@ciphyrs.agent("RouterAgent", role="router")
def router(message: str) -> str:
    return billing(message)      # called INSIDE router -> a RouterAgent→BillingAgent edge

with ciphyrs.session("conv-7f3a"):            # ties one conversation together
    router("I was charged twice for order A-1041")

ciphyrs.shutdown()                            # flush; short-lived scripts only

That is the whole integration. Nesting is the topology: because billing was called inside router, the dashboard draws the edge. Both agents appear in the fleet at start-up — decorators register themselves, before any traffic.

init() Configures an OTLP exporter to Ciphyrs, or attaches to a TracerProvider you already have and leaves your exporters alone. Falls back to CIPHYRS_API_KEY, CIPHYRS_PROJECT, CIPHYRS_BASE_URL.
@agent One span per call, named for the agent. Everything it calls nests underneath.
@tool One span per tool call, with arguments and result. Also checked against policy before it runs — enforce inherits init(enforce=True), so a block verdict raises ToolBlocked and the function never executes. Pass enforce=False to trace only.
session() Tags every span inside with session.id.
init(agents=...) Declares the roster and the designed peer graph at boot, so the fleet is complete before the first request. Starts a heartbeat (default 60 s) so idle and dead are distinguishable.

Async is automatic — declare the function async def and the decorators install async wrappers. Every platform call they make runs off your event loop.

See the inputs and outputs

On by default. Pass capture_io=False to an individual @agent or @tool whose arguments must not be recorded; its spans still carry timing, nesting and errors.

Agents in separate processes

Already on. Outgoing HTTP requests carry the trace context, so an agent that calls another service shows up as one connected graph rather than two disconnected fleets. init(propagate=False) turns it off.

Model and framework internals

Ciphyrs is not in the path of your model call and does not want to be. For spans inside a framework or provider — retriever calls, per-node detail — add that framework's own OpenTelemetry instrumentation (OpenInference or OpenLLMetry). Its spans travel through the exporter init() already installed and nest inside your agent spans.

Is it actually on?

state = ciphyrs.selfcheck()
if state["problems"]:
    log.error("Ciphyrs is not live in this process: %s", state["problems"])

Reports what is genuinely running and names each problem in words. Makes no network call, so it is safe in a readiness probe.

Beyond tracing

The platform also enforces policy on agent messages, masks PII, and can quarantine a misbehaving agent from the dashboard. Tool checks, message checks and PII masking are all on by default once init() has an API key, which means text leaves your process to be evaluated. The documentation says what each one sends and how to turn it off (enforce=, guard_input=, guard_output=, pii=).

Release files for ciphyrs 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ciphyrs 4.1.0
File Size Uploaded
ciphyrs-4.1.0.tar.gz 285.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ciphyrs 4.1.0
File Interpreter ABI Platform
ciphyrs-4.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 458.0 kB

Release files / ciphyrs-4.1.0.tar.gz

Download URL ciphyrs-4.1.0.tar.gz
Size 285.4 kB
Tags Source
SHA-256 checksum
How to use checksums
51bac6b0913275819356cbd146e965b2f41e728b9a373deb2cdbb2ece342dd3b
BLAKE2b-256 checksum
How to use checksums
75c8149692df81bd0dda8436b7b5d66aa41e8d8027479daac865c57672d1b6fe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / ciphyrs-4.1.0-py3-none-any.whl

Download URL ciphyrs-4.1.0-py3-none-any.whl
Size 172.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0d233a9ec07d23bd1296732e1743747d157b42d20e186605598655b336822bff
BLAKE2b-256 checksum
How to use checksums
f1374228a0914950ab0146964abbc887a6edab8727354223da0275e9de87a51c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

4.1.1

2 release files

This release

4.1.0 This release

2 release files

4.0.0

2 release files

3.7.0

2 release files

3.6.0

2 release files

3.5.0

2 release files

3.4.0

2 release files

3.3.1

2 release files

3.3.0

1 release file

3.1.0

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.1

2 release files

1.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