Skip to main content

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

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.

Release history Release notifications | RSS feed

This release

0.5.2 This release

2 files

0.5.1

2 files

0.5.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page