lodestar-crewai
Govern a CrewAI crew's native tool calls with Lodestar — the open epistemic-governance framework for AI agents.
CrewAI runs role-based agents whose tools are native in-process Python objects and
does not speak MCP, so the MCP proxy cannot wrap it. This package is the thin
native hook (ADR-0026): it spawns the TypeScript governance-gate sidecar
(lodestar runtime gate) and remotes each native tool call through the Lodestar
Action Kernel over newline-delimited JSON-RPC. The same machinery the MCP proxy
and the LangGraph adapter run — two-phase propose → arbitrate → execute, the
signed policy gate, cognitive-core ingestion (external-document content can't
auto-promote), sentinel arbitration, and the signed-approval L4 hold path — now
applies to CrewAI, with no change to the engine. The gate sidecar is shared,
unchanged; only this hook is new.
The tool body runs only inside the gate's execute phase, reached only after the gate (and any approval hold) clears: "tools that do work before approval are bugs" — across the Python↔TS boundary.
Install
pip install "lodestar-crewai[crewai]"
# and the Lodestar CLI (Bun/npm), which provides `lodestar runtime gate`:
npm install -g @qmilab/lodestar-cli # or: bun add -g @qmilab/lodestar-cli
Use
from crewai import Agent, Crew, Task
from lodestar_crewai import GateClient, govern_tools, governed_call
with GateClient("runtime-gate.config.json") as gate:
governed = govern_tools(gate, my_tools) # register + wrap the toolset
agent = Agent(role="researcher", goal="...", backstory="...", tools=governed)
task = Task(description="...", agent=agent, expected_output="...")
crew = Crew(agents=[agent], tasks=[task])
crew.kickoff() # every tool call is governed
# A custom step invokes a governed tool through the helper, never raw:
result = governed_call(gate, "search_web", {"q": "lodestar"})
The gate's config (runtime-gate.config.json) is a RuntimeGateConfig — the
signed policy document, approver keys, sentinel ids, persistence, and durable log
root all live there. The hook never holds credentials or policy.
Scope (honest, ADR-0004 lineage)
This is governance over declared actions, not OS containment of the process.
Raw I/O performed outside the tool abstraction — a custom step that calls
requests.get() directly instead of a registered tool — is outside the governed
surface, exactly as guard.wrap() and the MCP proxy only govern the tools they
are given. A call for an unregistered tool is denied (fail closed). Pair the
adapter with network/filesystem controls for defense in depth.
Holds & denials
An L4 action the trust-ladder floor parks for approval is resolved by
block-polling the gate up to the deadline for a signed approval (hold_wait_ms)
— the headless default. A denied / held-then-timed-out call raises
LodestarDenied by default; CrewAI's ToolUsage catches it and surfaces the
reason to the agent as a re-plannable observation. Pass on_denied to
govern_tools to map a denial to a return value instead.
Apache-2.0. Part of the Lodestar monorepo (runtimes/crewai/).
Metadata
Release files for lodestar-crewai 0.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lodestar_crewai-0.6.0.tar.gz | 11.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lodestar_crewai-0.6.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.5 kB
Release files / lodestar_crewai-0.6.0.tar.gz
| Download URL | lodestar_crewai-0.6.0.tar.gz |
|---|---|
| Size | 11.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a861a90bfaf73e6b272566991d75aa9ddab43afa467887cb5a884be374b8afd
|
|
BLAKE2b-256 checksum How to use checksums |
5efbadc47c13aa5670b4d39206361bed9d4735ee6872d188e091cf7c6861e707
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / lodestar_crewai-0.6.0-py3-none-any.whl
| Download URL | lodestar_crewai-0.6.0-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
38d31a1bb4f6ac1f4df089f7048036a7258100dca1cbcdf52af3e2523a70f167
|
|
BLAKE2b-256 checksum How to use checksums |
37b2854a28dea8bcae308cc3e0f5c481222da278f1944f9c2b4cd5c72c57589b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log