ActGate
Local IntentLedger and MCP stdio proxy: propose a tool action, approve or deny in an append-only hash-chained ledger, then let an identical tools/call reach one upstream MCP server.
This is not a SaaS. The ledger path stays on disk. dry-run and approve record decisions only; they do not execute tools. The MCP proxy is what executes, and only after approve.
Install
pip install -e .[dev]
CLI quickstart
actgate init
actgate propose --tool shell.exec --args '{"cmd":"ls"}' --blast-tags fs.read
actgate dry-run <intent_id>
actgate approve <intent_id>
actgate verify
actgate list
MCP proxy
Point your MCP client at ActGate instead of the upstream server:
actgate init
actgate mcp --upstream python -m some_mcp_server
Flow:
- Client
tools/listis forwarded to upstream. Onlytools/callis gated; other methods are forwarded. - First
tools/callfor a tool+args writes a propose event and returnsACTGATE_PENDING intent_id=...(upstream is not called). - Human:
actgate approve <intent_id>(oractgate deny <intent_id>). - Identical subsequent
tools/call(same tool and args) runs upstream once and appends anexecuteevent. A third call returns already-executed. - Denied intents never hit upstream.
Bare verify checks hash-chain integrity only. Set ACTGATE_SEAL_KEY for
optional HMAC seals, or pass verify --require-seal.
Exit codes
| Code | Meaning |
|---|---|
| 0 | ok (propose, approve, verify clean, show/list) |
| 1 | deny recorded, or verify found a broken chain / bad seal |
| 2 | setup error (missing ledger, bad path, invalid args) |
Intent shape
{
"tool": "shell.exec",
"args": {"cmd": "ls"},
"args_hash": null,
"blast_tags": ["fs.read"],
"requested_mode": "execute",
"created_at": "2026-09-06T00:00:00+00:00"
}
What this is not
- Not a hosted approval product
- Not a policy DSL
- No network calls in the ledger core path (the MCP proxy talks to a local upstream process)
Development
pip install -e .[dev]
pytest
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file actgate-0.2.0.tar.gz.
File metadata
- Download URL: actgate-0.2.0.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ccd913be6252d9715a2cf137f62b14c77c67e4d9ed817167d9f24f34b0826ad
|
|
| MD5 |
e7994812f0c273f420d131d2095da557
|
|
| BLAKE2b-256 |
e69ebe416018501d9717b411a6276d32a5670d52327f7b77b8e2e4b8ac199805
|
Provenance
The following attestation bundles were made for actgate-0.2.0.tar.gz:
Publisher:
publish.yml on kartsan03/actgate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
actgate-0.2.0.tar.gz -
Subject digest:
9ccd913be6252d9715a2cf137f62b14c77c67e4d9ed817167d9f24f34b0826ad - Sigstore transparency entry: 2732516433
- Sigstore integration time:
-
Permalink:
kartsan03/actgate@30431ecfd1158afb27e58e34bb0b1b204c2ee74c -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kartsan03
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@30431ecfd1158afb27e58e34bb0b1b204c2ee74c -
Trigger Event:
push
-
Statement type:
File details
Details for the file actgate-0.2.0-py3-none-any.whl.
File metadata
- Download URL: actgate-0.2.0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
584e9d3c0d5381bfa572a9868f5738238235d703ebf48cc1bfabb171b80ca7d6
|
|
| MD5 |
8d168a3a582799cad29d1b74027302c9
|
|
| BLAKE2b-256 |
2b70223b0b4285c1a84d6b3b72b2648079b839e107a21dab8871fb070341ceed
|
Provenance
The following attestation bundles were made for actgate-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on kartsan03/actgate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
actgate-0.2.0-py3-none-any.whl -
Subject digest:
584e9d3c0d5381bfa572a9868f5738238235d703ebf48cc1bfabb171b80ca7d6 - Sigstore transparency entry: 2732516572
- Sigstore integration time:
-
Permalink:
kartsan03/actgate@30431ecfd1158afb27e58e34bb0b1b204c2ee74c -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/kartsan03
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@30431ecfd1158afb27e58e34bb0b1b204c2ee74c -
Trigger Event:
push
-
Statement type: