ctrlrun-openclaw
The Python half of CTRLRun for OpenClaw: a
loopback bridge that answers OpenClaw's before_tool_call from a CTRLRun policy, and records
what the tool actually did.
pip install ctrlrun-openclaw
ctrlrun init
export CTRLRUN_OPENCLAW_TOKEN=$(python3 -c 'import secrets;print(secrets.token_urlsafe(32))')
ctrlrun-openclaw-bridge --agent openclaw-gateway
Then install the plugin in OpenClaw:
openclaw plugins install clawhub:@ctrlrun/openclaw
Why a bridge and not a policy file
OpenClaw already has tool-authorization plugins, and each is a decision engine: policy in, allow or deny out. This is the half after the decision.
after_tool_call is an observation hook. OpenClaw's own reference says handlers run
concurrently, return values are ignored, and to use a fail-closed gate rather than assume an
observation hook will reject anything on failure. So nothing in OpenClaw today separates the
tool failed from we cannot tell whether it committed.
This bridge holds Control.execute open across the host's tool call, which makes OpenClaw the
executor and its report the outcome. A call the host never reports on is not lost: the effect
stays reserved, the state is AMBIGUOUS, and the next attempt on the same key is refused
until a human runs ctrlrun resolve.
Approvals route through OpenClaw's own prompt using InterruptApprovalProvider, so the grant
is written by the same path ctrlrun approve uses, never by this adapter.
Verified
OpenClaw 2026.9.4, Node 24.21.0. One real agent turn, both hooks firing:
[bridge] "POST /v1/decide" 200
[bridge] "POST /v1/outcome" 200
$ ctrlrun receipts
read deny/denied openclaw-gateway # policy did not name this action
read allow/committed openclaw-gateway # allowed, ran, outcome reported
The bridge binds loopback only and requires a shared secret on every request. It fronts your approval authority and refuses to start on a non-loopback interface.
Apache-2.0. Full documentation, limits and known upstream issues in the repository README.
Metadata
Release files for ctrlrun-openclaw 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ctrlrun_openclaw-0.1.2.tar.gz | 13.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ctrlrun_openclaw-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.2 kB
Release files / ctrlrun_openclaw-0.1.2.tar.gz
| Download URL | ctrlrun_openclaw-0.1.2.tar.gz |
|---|---|
| Size | 13.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e16bd5aabadf4a14485cde79d8ba9cf38c4a69d1b007e06aa4f393f292016cfa
|
|
BLAKE2b-256 checksum How to use checksums |
c018c8f87e675115cfb776e59767b3c48cc7d5c3eedd2af40b02eed8b427ee11
|
| 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 Sep 15, 2026.
Transparency logRelease files / ctrlrun_openclaw-0.1.2-py3-none-any.whl
| Download URL | ctrlrun_openclaw-0.1.2-py3-none-any.whl |
|---|---|
| Size | 15.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d94a73e27e2e6946d6c904c8a474bc32f8d55bc61d43a447ff04e01b6dee9057
|
|
BLAKE2b-256 checksum How to use checksums |
14e0a5bea7926ddb8a831b3cea2048587c4e803328cbb2a7b09769511eafc29b
|
| 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 Sep 15, 2026.
Transparency log