This release is a pre-release and may not be stable for production use.
cisternal
Status: alpha. APIs may change without notice before 1.0.
Cisternal is a shared telemetry substrate and agent-asset export toolkit for the Praxia tool family. It has two parts:
- Telemetry — a lightweight, non-blocking event pipeline (JSONL export, OTLP export, MCP-tool registration wrapper) for instrumenting Python tools and MCP servers.
- Agent-asset export — a CLI that takes a registry of MCP tools/commands and emits native plugin/config bundles for downstream coding-agent surfaces: Claude Code, Cursor, GitHub Copilot, Antigravity, OpenCode, Pi, and JCode.
Install
pip install cisternal
For OTLP export support:
pip install "cisternal[otlp]"
Telemetry quickstart
import cisternal
cisternal.init() # log_dir defaults to ~/.cisternal/logs, or env-resolved
with cisternal.span("my.operation", request_id="abc123"):
do_work()
cisternal.emit_event("my.custom_event", tool="foo")
print(cisternal.status())
Check your effective telemetry configuration from the shell:
cisternal telemetry doctor
cisternal telemetry doctor --json --strict
Registering MCP tools
import cisternal
@cisternal.tool
def my_tool(x: int) -> int:
return x * 2
registry = cisternal.wire(server, app, adapter=my_adapter)
cisternal.tool is a pure-metadata decorator — it returns the original function unchanged. cisternal.wire() snapshots the registry at call time and registers each tool on a FastMCP server (and optionally a Cyclopts CLI app), returning a WiredRegistry for introspection.
Agent-asset export
# Preview what would be written, without touching disk
cisternal assets export --dry-run
# Write bundles for specific surfaces
cisternal assets export --out ./dist/agent-assets
# Inspect or validate an existing bundle
cisternal assets inspect
cisternal assets validate
Install as a real Claude Code plugin
cisternal assets export only writes files — nothing picks them up until
something registers them. cisternal assets install does both steps: it
writes the bundle, then drives the real claude CLI to register it as a
local marketplace and install it, so its skills/agents/MCP config actually
load in a Claude Code session.
Requires a [plugin.marketplace] table in your manifest:
[plugin]
name = "my-plugin"
version = "1.0.0"
[plugin.marketplace]
name = "my-plugin-marketplace"
[plugin.marketplace.owner]
name = "Your Name"
cisternal assets install --manifest .praxia/manifest.toml
# writes the bundle to ./, then runs:
# claude plugin marketplace add .
# claude plugin install my-plugin@my-plugin-marketplace --scope project
Both underlying claude commands are idempotent — re-running install is
safe. --scope project (the default) registers the plugin in this
project's .claude/settings.json, so anyone who clones the repo needs only
one manual claude plugin install my-plugin@my-plugin-marketplace (Claude
Code's own trust-on-first-use step — not something this command tries to
bypass). To remove it later: claude plugin uninstall my-plugin@my-plugin-marketplace and claude plugin marketplace remove my-plugin-marketplace.
Supported export targets: Claude Code, Cursor, GitHub Copilot, Antigravity, OpenCode, Pi, JCode.
The CLI is fastmcp-free by design — cisternal.cli imports and runs even in environments without fastmcp installed; asset-export logic never depends on the telemetry/registration surface.
Design notes
- Telemetry emission never raises: if the pipeline isn't initialized,
emit_event/spanare no-ops. - Registry state is process-scoped — call
cisternal.clear_registry()between tests to avoid cross-test contamination. - The M2 wire-time MCP callable is a pure passthrough: telemetry and shape adaptation are exclusively owned by the telemetry middleware, never by the registration wrapper itself.
License
MIT — see LICENSE.
Metadata
Release files for cisternal 0.1.1a12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cisternal-0.1.1a12.tar.gz | 267.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cisternal-0.1.1a12-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 433.7 kB
Release files / cisternal-0.1.1a12.tar.gz
| Download URL | cisternal-0.1.1a12.tar.gz |
|---|---|
| Size | 267.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8cf0a0fbefa7675d1dd7c484bcf26826f15ae2df050536d56d793b626a588052
|
|
BLAKE2b-256 checksum How to use checksums |
873ad15ab999d40fcfd5a82a2106555a52155f5d99b2a7bb0e3a0c320833542e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / cisternal-0.1.1a12-py3-none-any.whl
| Download URL | cisternal-0.1.1a12-py3-none-any.whl |
|---|---|
| Size | 166.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0945ea678b3d49e665aa40ffff9602fd8291e387fa4968b3aeda30f8b686ac3e
|
|
BLAKE2b-256 checksum How to use checksums |
60e2593cc944dc3953800779314a147e2b7e78c9fe84f49783a480618ff62599
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|