Sqube Agent Control
Open-source infrastructure for controlling AI agent actions.
v0.1 is an experiment. SDK wrapping is bypassable. This is not a replacement for IAM, gateways, or security controls. It exists to learn whether execution-decision tooling has pull in real teams.
Sqube Execution Guard (v0.1) wraps a consequential action, deterministically decides ALLOW / BLOCK / REQUIRE_APPROVAL, optionally pauses for a human via CLI, and writes an append-only SQLite execution record.
Do not use messaging like “secure your agents,” “enterprise control plane,” or “prevent all unauthorized actions.”
Status
Experimental — API may change.
SDKs
| Language | Package | Path |
|---|---|---|
| Python | sqube-agent-guard (PyPI) |
src/sqube_agent_guard/ |
| Node.js | sqube-agent-guard (npm) |
nodejs/ |
| Rust | sqube-agent-guard (build from rust/) |
rust/ |
All three implement the same v0.1 contract documented on GitHub Pages (source: website/docs/v0.1-spec.md).
Quick start (Python)
from sqube_agent_guard import ExecutionGuard, Decision
def policy(action, resource, agent_id, **ctx):
if action == "delete_file":
return Decision.REQUIRE_APPROVAL
return Decision.ALLOW
guard = ExecutionGuard(policy=policy)
@guard.wrap_action(action="delete_file", resource=lambda path: f"file:{path}")
def delete_file(path):
...
delete_file("/tmp/example.txt")
Quick start (Node.js)
import { Decision, ExecutionGuard } from "sqube-agent-guard";
const guard = new ExecutionGuard({
policy: (action) =>
action === "delete_file" ? Decision.REQUIRE_APPROVAL : Decision.ALLOW,
});
const deleteFile = guard.wrapAction(
{ action: "delete_file", resource: (path: string) => `file:${path}` },
(path: string) => { /* ... */ }
);
await deleteFile("/tmp/example.txt");
Quick start (Rust)
use sqube_agent_guard::{Decision, ExecutionGuard, WrapOptions};
let guard = ExecutionGuard::with_default_policy().with_ledger_path("sqube_ledger.sqlite3");
guard.wrap_action(
WrapOptions {
action: "delete_file".into(),
resource: Some("file:/tmp/x".into()),
agent_id: "default".into(),
},
|| Ok(()),
"path=/tmp/x",
r#"{"path":"/tmp/x"}"#,
)?;
Decisions
ALLOW
BLOCK
REQUIRE_APPROVAL
Policies are application-defined callables. No LLM in the decision path for v0.1.
Installation
Python and Node.js (published registries):
pip install sqube-agent-guard
npm install sqube-agent-guard
Rust — crates.io is not published yet. Clone this repository and build from rust/:
git clone https://github.com/Sqube-Groups/sqube-agent-control.git
cd sqube-agent-control/rust
cargo build
cargo test
To depend on the crate from another Rust project before crates.io publish, use a path or git dependency in Cargo.toml (see rust/README.md).
Packaging and releases for Python and Node.js are wired via GitHub Actions on version tags (v*.*.*). Configure repository secrets: PYPI_API_TOKEN, NPM_TOKEN.
Optional LLM probes
v0.1 guard decisions are deterministic — no LLM in the policy path. For manual experiments only (not CI, not ExecutionGuard), see examples/nvidia_kimi_vision_probe.py and Optional LLM probes on the docs site.
pip install requests # or: pip install -e ".[probes]"
export NVIDIA_API_KEY="your-key"
python examples/nvidia_kimi_vision_probe.py
python examples/nvidia_kimi_vision_probe.py --no-stream
Development
# Python
pip install -e ".[dev]"
pytest
# Node
cd nodejs && npm ci && npm test
# Rust
cd rust && cargo test
Documentation
CI runs on pull requests and pushes targeting main; GitHub Pages deploys only on pushes to main; PyPI/npm releases run only for v*.*.* tags whose commit is on main.
Published docs (Docusaurus) deploy to GitHub Pages on pushes to main (project site — path includes the repo name):
| Use | URL |
|---|---|
| Repo About / Website field | https://sqube-groups.github.io/sqube-agent-control/ |
| Docs home (intro) | https://sqube-groups.github.io/sqube-agent-control/docs/intro |
Do not link https://sqube-groups.github.io/docs/... — that is the org/user site root without the /sqube-agent-control/ prefix. Unless you configure a custom domain at the org root, docs live only under /sqube-agent-control/.
Maintainers: Enable GitHub Pages (GitHub Actions source), docs deploy behavior, and release tag commands — see website/docs/deploy-pages.md.
Run locally:
cd website && npm ci && npm start
Keep private notes outside the repo under docs_internal_never_commit/ (gitignored). Other common local-only folder names (docs-never-commit/, .local-docs/, **/never-commit/) are ignored as well.
Project structure
src/sqube_agent_guard/ # Python SDK
nodejs/ # TypeScript / npm SDK
rust/ # Rust crate
tests/ # Python tests
examples/ # Python examples
website/ # Docusaurus docs site (GitHub Pages)
Contributing
Contributions and feedback are welcome. For larger changes, open an issue first.
License
Copyright © 2026 Sqube Groups — Apache-2.0
Metadata
Release files for sqube-agent-guard 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| sqube_agent_guard-0.1.1.tar.gz | 187.1 kB | Without provenance | Details for sqube_agent_guard-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| sqube_agent_guard-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for sqube_agent_guard-0.1.1-py3-none-any.whl |
Total release size: 195.1 kB
Release files / sqube_agent_guard-0.1.1.tar.gz
| Download URL | sqube_agent_guard-0.1.1.tar.gz |
|---|---|
| Size | 187.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c672514b82a7e8dfacaa98f6f6881c77c1bd9a9281892446949d1df18251825
|
|
BLAKE2b-256 checksum How to use checksums |
0f1c5b1fe574e85719654a22d41a5cbd608c60a04a82c2eb88519bbeda1b8f80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / sqube_agent_guard-0.1.1-py3-none-any.whl
| Download URL | sqube_agent_guard-0.1.1-py3-none-any.whl |
|---|---|
| Size | 8.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
325de7d9d73de8441daee3c2b558f6a37cdd4823339cde0a4bfc5b66259e02b3
|
|
BLAKE2b-256 checksum How to use checksums |
cbdb795f71ea03001d404c92c8550b9e4b775b5516dbc6d837e61167199874e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for sqube-agent-guard 0.1.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.