Skip to main content

Common Agent Runtime — Python bindings for deterministic AI agent execution

Project description

car-runtime (Python)

Python bindings for Common Agent Runtime (CAR) — a deterministic execution layer for AI agents. Models propose; the runtime validates and executes.

Pre-built wheels (abi3, Python 3.9+) for:

  • macosx_15_0_arm64, macosx_15_0_x86_64 — macOS 15+ required
  • manylinux_2_17_x86_64, manylinux_2_28_aarch64

Building from source on macOS: set MACOSX_DEPLOYMENT_TARGET=15.0 when invoking maturin build. MLX's bundled Metal shaders don't compile against the default 11.0 target, and our release wheels target 15.0 because the compiled extension pulls in libc++ symbols (notably std::exception_ptr::__from_native_exception_pointer) that only exist on macOS 15+. A lower target produces a wheel whose tag doesn't match what the binary actually requires at dlopen time.

Install

From a release wheel (substitute the current version for X.Y.Z):

pip install https://github.com/Parslee-ai/car/releases/download/vX.Y.Z/car_runtime-X.Y.Z-cp39-abi3-macosx_15_0_arm64.whl

Or build from source:

pip install maturin
cd car-rs/crates/car-ffi-pyo3
maturin develop --release

The import name is car_runtime (matching the PyPI package name).

Quickstart

import json
from car_runtime import CarRuntime, verify, execute

rt = CarRuntime()

# Tools + policies.
rt.register_tool("shell")
rt.register_policy(
    "no_rm",
    "deny_tool_param",
    target="shell",
    key="command",
    pattern="rm -rf",
)

# Ground with facts.
rt.add_fact("project_language", "Python", "pattern")

# Verify before executing.
proposal = json.dumps({
    "actions": [{
        "id": "a1",
        "type": "tool_call",
        "tool": "shell",
        "parameters": {"command": "ls"},
        "dependencies": [],
    }],
})

check = json.loads(rt.verify_proposal(proposal))
if not check["valid"]:
    raise RuntimeError(f"invalid proposal: {check['issues']}")

# Execute with a Python-side tool callback.
def tool_fn(tool: str, params_json: str) -> str:
    params = json.loads(params_json)
    # Dispatch to your actual implementation.
    return json.dumps({"stdout": "ok", "stderr": ""})

result_json = rt.execute_proposal(proposal, tool_fn)

Streaming inference

from car_runtime import CarRuntime

rt = CarRuntime()

def on_event(event_json: str) -> None:
    e = json.loads(event_json)
    if e["type"] == "text":
        print(e["data"], end="", flush=True)

rt.infer_stream(
    "Explain CAR in one sentence.",
    on_event,
    max_tokens=256,
)

Multi-agent coordination

import json
from car_runtime import register_agent_runner, run_swarm

def agent_fn(spec_json: str, task: str) -> str:
    spec = json.loads(spec_json)
    # Call your LLM of choice, returning an AgentOutput JSON.
    return json.dumps({"name": spec["name"], "response": "...", "tool_calls": []})

# Option A: register once, then call run_* without passing agent_fn each time.
register_agent_runner(agent_fn)
result = run_swarm(
    "parallel",
    json.dumps([
        {"name": "researcher", "role": "gather facts", "model": "gpt-5"},
        {"name": "writer",     "role": "compose summary", "model": "claude-opus-4-7"},
    ]),
    "summarize the CAR paper",
)

# Option B: pass agent_fn per call.
result = run_swarm("parallel", agents_json, task, agent_fn=agent_fn)

API surface

The runtime (CarRuntime) exposes:

  • State: state_set, state_get, state_exists, state_snapshot, state_keys
  • Memory: add_fact, query_facts, fact_count, build_context, build_context_fast, persist_memory, load_memory, consolidate
  • Skills: ingest_skill, find_skill, report_outcome, distill_skills, ingest_distilled_skills, list_skills, domains_needing_evolution, repair_skill, evolve_skills
  • Tools + policies: register_tool, register_agent_basics, register_policy, set_replan_config
  • Inference: infer, infer_tracked, infer_with_context, infer_with_context_tracked, embed, rerank, classify, prepare_speech_runtime, transcribe, synthesize, infer_stream
  • Models: list_models, pull_model, remove_model, list_models_unified, register_model, route_model, model_stats
  • Execution: event_count, verify_proposal, execute_proposal

Module-level standalone functions:

  • Verification: verify, simulate, optimize, equivalent
  • Stateless execute: execute (creates a fresh Runtime; for long-lived use, prefer CarRuntime.execute_proposal)
  • Multi-agent: register_agent_runner, run_swarm, run_pipeline, run_supervisor, run_map_reduce, run_vote
  • Scheduler: create_task, run_task, run_task_loop, ensure_dream_task
  • Planner: rank_proposals

Structured returns are JSON-encoded strings — json.loads them on the Python side. This keeps the FFI surface stable across binding and protocol changes.

Development

# Install dev deps.
pip install maturin pytest

# Build and install in editable mode.
cd car-rs/crates/car-ffi-pyo3
maturin develop

# Run the smoke tests.
pytest tests/ -v

Architecture

This package is a thin PyO3 wrapper over the Rust car-engine + car-memgine crates. Tool execution uses a callback pattern: the runtime doesn't own tools, you provide a Python function that dispatches them. See the repo README for the bigger picture.

License

Free for any use including commercial; free to redistribute unmodified. Modification, reverse engineering, and derivative works are not permitted. See LICENSE for the full text. Copyright © 2026 Parslee AI.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

car_runtime-0.4.9-cp39-abi3-win_amd64.whl (14.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

car_runtime-0.4.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

car_runtime-0.4.9-cp39-abi3-macosx_15_0_x86_64.whl (13.6 MB view details)

Uploaded CPython 3.9+macOS 15.0+ x86-64

car_runtime-0.4.9-cp39-abi3-macosx_15_0_arm64.whl (17.1 MB view details)

Uploaded CPython 3.9+macOS 15.0+ ARM64

File details

Details for the file car_runtime-0.4.9-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: car_runtime-0.4.9-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 14.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for car_runtime-0.4.9-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 bac4dedce7d5d3c7bd448af7208d98b571f9005d31c6343467df556d37119228
MD5 6257917a1e6e12da5baf430efdd541b1
BLAKE2b-256 dd31d52863a6408a43df44740c3522279241b7f0d345268f5508adf9dfe17626

See more details on using hashes here.

Provenance

The following attestation bundles were made for car_runtime-0.4.9-cp39-abi3-win_amd64.whl:

Publisher: build.yml on Parslee-ai/car

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

File details

Details for the file car_runtime-0.4.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for car_runtime-0.4.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3fa04694a643e5bf0cb4fc8bf6b8a365e85a2b95edf20a6e5fc33d8bffb05d6d
MD5 e006f8d4907cbb7fe77d80db13868273
BLAKE2b-256 578610052706066c95d127d7f2150637a5b85d2e03dfcb847cd30bc3f0a9e6bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for car_runtime-0.4.9-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Parslee-ai/car

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

File details

Details for the file car_runtime-0.4.9-cp39-abi3-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for car_runtime-0.4.9-cp39-abi3-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 c4575c82394fdadda08c8e0539ea43471e4a0bd56b1d7d244d82698eba37ecd5
MD5 3c29d67ba3857ba1942e12e638c517eb
BLAKE2b-256 46701f62db9fad49e6ee3b75fcaab0f2fa7af67acba58c97c590289bb360f7ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for car_runtime-0.4.9-cp39-abi3-macosx_15_0_x86_64.whl:

Publisher: build.yml on Parslee-ai/car

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

File details

Details for the file car_runtime-0.4.9-cp39-abi3-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for car_runtime-0.4.9-cp39-abi3-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 074d8d3b2000034ebf3fa8be27f9e37fefe5bb5442c17e46ca0215ed0196527e
MD5 b7f6e2f143a822c11a9cde29324801dc
BLAKE2b-256 37817f8fcaa6d0745d06a60e81f49fb4b41676991d043ed280bd95884e8f1fa3

See more details on using hashes here.

Provenance

The following attestation bundles were made for car_runtime-0.4.9-cp39-abi3-macosx_15_0_arm64.whl:

Publisher: build.yml on Parslee-ai/car

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

Supported by

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