Skip to main content

Reference runner for Command Scope Contract

Project description

CSC — Command Scope Contract

CSC — Command Scope Contract

Bounded shell and CLI execution for AI agents.
Structured contracts. Policy-gated execution. Signed receipts.

CI Hardened Tests PyPI Downloads Python 3.11+ License


CSC is a protocol for bounded shell and CLI execution by AI agents.

CSC is complementary to MCP, not a replacement for it.

It exists to remove ambient authority from agentic execution.

Instead of giving an agent raw shell access, CSC requires the agent to submit a structured command contract that declares:

  • what it wants to run
  • why it wants to run it
  • where it wants to run it
  • what it needs to read
  • what it may write
  • whether it needs network access
  • whether it needs secrets
  • what kind of effect it may cause
  • how long it may run

A trusted policy layer evaluates the contract. If allowed, a constrained executor runs it and emits a verifiable, signed receipt.

Why CSC exists

Shell is useful because it is universal, composable, and token-efficient.

Shell is dangerous because it often carries too much implicit power.

CSC keeps the flexibility of shell while making scope, policy, and execution evidence explicit.

Execution model

agent -> command contract -> policy gate -> constrained executor -> execution receipt

Status

v0.5.1 — bounded production-ready

The reference runner implements the full CSC v0.1 protocol:

  • Stage 1a — Protocol complete: spec frozen, conformance suite, policy schema with structured reason codes, receipt field semantics
  • Stage 1b — Hardened defaults: fail-closed executor, path enforcement, resource limits, capped output capture, adversarial test suite
  • Stage 2 — First hardened mode: Linux sandbox (bubblewrap + setpriv + prlimit), Ed25519 receipt signing, approval artifacts with replay prevention, end-to-end integration tests
  • Stage 3 — Production candidate: release infrastructure, CI gates, security process, pilot validation, internal red-team review

Bounded production claim

CSC hardened mode is safe enough for bounded production use in Linux-based, filesystem-bounded local/CI execution workflows without network access, under the documented trust assumptions and deployment constraints.

See docs/deployment-modes.md for security claims by mode and docs/production-readiness-gate.md for the formal release gate.

Deployment modes

Mode Platform Security boundary Receipt signing
Local Any Pre-launch validation only Optional
Hardened Linux only Kernel-enforced (bwrap namespaces) Mandatory

Local mode is for development, testing, and demos. Hardened mode is for CI/CD pipelines and production-like workflows where execution integrity matters.

See docs/deployment-modes.md for full details.

Design goals

  • Keep shell composability.
  • Remove raw arbitrary shell by default.
  • Make intent and scope explicit before execution.
  • Let trusted policy decide.
  • Emit signed receipts for audit and provenance.
  • Enforce boundaries with the kernel, not just Python.
  • Stay small enough to implement and adopt quickly.

Non-goals

CSC does not attempt to replace:

  • container isolation (CSC uses it as the enforcement layer)
  • IAM
  • workflow engines
  • semantic validation of task correctness
  • prompt injection defenses at every layer

CSC is an execution-boundary protocol. For a full statement of what CSC contributes and what it reuses, see RFC-0003.

Core objects

  • CommandContract — what the agent wants to run
  • PolicyDecision — whether it may run (with structured reason codes)
  • ExecutionReceipt — what actually happened (signed in hardened mode)
  • ApprovalArtifact — human authorization for sensitive operations

v0.1 rules

  • argv arrays only
  • no raw shell strings
  • no bash -lc, sh -c, eval, python -c, node -e by default
  • explicit read/write/network/env/secret scope
  • default deny on omitted capabilities
  • bounded runtime
  • signed receipts in hardened mode

Quickstart

# Install from PyPI
pip install csc-runner

# Or install from source with dev dependencies
pip install -e ".[dev]"

# Check a contract against a policy (no execution)
csc check examples/contracts/git-status.json examples/policies/dev-readonly.yaml

# Run a contract (local mode)
csc run examples/contracts/git-status.json examples/policies/dev-readonly.yaml

# Run in hardened mode (Linux, requires bwrap/setpriv/prlimit)
csc run contract.json policy.yaml \
  --mode hardened \
  --sign --signing-key key.pem --key-id prod-01

# Verify a signed receipt
csc verify-receipt receipt.json --public-key pub.pem --key-id prod-01

Documentation

RFCs

  • RFC-0001 — CSC core protocol
  • RFC-0002 — PIC alignment and mapping
  • RFC-0003 — CSC positioning, contribution, and boundaries

Contributing

Contributions welcome. See CONTRIBUTING.md and start with docs/spec-v0.1.md and schemas/.

License

Apache-2.0

Project details


Download files

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

Source Distribution

csc_runner-0.5.1.tar.gz (5.8 MB view details)

Uploaded Source

Built Distribution

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

csc_runner-0.5.1-py3-none-any.whl (38.9 kB view details)

Uploaded Python 3

File details

Details for the file csc_runner-0.5.1.tar.gz.

File metadata

  • Download URL: csc_runner-0.5.1.tar.gz
  • Upload date:
  • Size: 5.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csc_runner-0.5.1.tar.gz
Algorithm Hash digest
SHA256 e4ca978c171eca3653934d834ebb8f946ff2b02937ae08cb1bcbe945f383b9c2
MD5 7e417e66caddd063d0eb613238f87927
BLAKE2b-256 dcf811951a99656fa3180547e9fbf757ade68201bf27fdb777fa65e6fb94b1f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for csc_runner-0.5.1.tar.gz:

Publisher: release.yml on madeinplutofabio/command-scope-contract

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

File details

Details for the file csc_runner-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: csc_runner-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 38.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for csc_runner-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8d141a25e11be770b948b7d8ab012f746f15f27560415c54252dac443b0bd0e7
MD5 283aaf0685dfd60ab27e7251cae7b516
BLAKE2b-256 8dda6ed3674ac7fee7dab420bcee2992705831a1a5b4418e5fb1b51b40f70130

See more details on using hashes here.

Provenance

The following attestation bundles were made for csc_runner-0.5.1-py3-none-any.whl:

Publisher: release.yml on madeinplutofabio/command-scope-contract

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