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.2 — 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.2.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.2-py3-none-any.whl (38.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: csc_runner-0.5.2.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.2.tar.gz
Algorithm Hash digest
SHA256 dab1440072b811a960428d570c878b12676e81bc83fc152697ef22379f36592f
MD5 af020b312bf60e002897b3594a199f00
BLAKE2b-256 8c511bd4a5dcc1b970bc7f445040a052d53bf0aeb7ca1aab6387f7f1f23c5d6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for csc_runner-0.5.2.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.2-py3-none-any.whl.

File metadata

  • Download URL: csc_runner-0.5.2-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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 09c1f69c2cceb4dd76515d70446314029680e5066c39f2ea0603461c6160cd56
MD5 f780f5fbea5818fb1b840e9269f6c5e8
BLAKE2b-256 2b1e8b3d899e9b46b6f47f16593378a395cbaee0a8a952845b71723cfaa1d7dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for csc_runner-0.5.2-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