Skip to main content

Cuff check flow: bind the subject, observe the verifier, require fresh evidence

Cuff

Make claims checkable. Reject evidence when stale.

Cuff ties one completion claim to one exact subject, runs the verifier you choose, and checks whether the latest passing evidence still matches the current Git state.

It turns a completion statement into a durable, checkable record without deciding what should prove the work or what action should follow.

Requirements

  • Python 3.11 or newer;
  • uv on PATH (0.11.32 is the tested recommendation); and
  • an existing Git worktree. Its root is the only valid Cuff workspace.

Git is mandatory. Cuff never initializes a repository, selects another worktree, or stages, commits, fetches, pushes, releases, or deploys anything.

Install

Install a released version as a standard uv-managed tool:

uv tool install cuff-cli==0.2.1
cuff --version

For local development, install the checkout explicitly:

uv tool install --editable .

Cuff has no runtime dependencies. It is distributed as a standard wheel and source distribution; it contains no bundled Python or native executable.

Five-command quickstart

Run initialization at the exact Git worktree root:

cuff init --json
git add .fab7/cuff/project.json
git commit -m "Initialize Cuff"

The marker is exactly {"schema":1} and records live under .fab7/cuff/records/. An incompatible marker is never rewritten or migrated.

The preferred path atomically appends a claim and its observed evidence:

cuff seal \
  --work-item task-1 \
  --summary "Implementation complete" \
  --subject-path src \
  --json \
  -- python -m pytest

cuff check --work-item task-1 --json

The split path is available when the claim must exist before verification:

cuff claim \
  --work-item task-1 \
  --summary "Implementation complete" \
  --subject-path src \
  --json

cuff verify \
  --work-item task-1 \
  --claim rec_REPLACE_ME \
  --json \
  -- python -m pytest

The public surface is exactly:

cuff init
cuff claim
cuff verify
cuff seal
cuff check

Every claim, verification, seal, and check names its work item explicitly. Declared subjects use the complete {kind, ref, digest} identity; file and tree subjects use --subject-path and a Cuff-computed manifest digest.

Proof boundary

  • Claims and evidence are closed generation-1 JSONL records.
  • Every evidence record contains the HEAD commit observed before execution.
  • Verifier argv is executed literally without a shell.
  • Non-ledger dirtiness before or after verification records no evidence.
  • seal appends its linked pair in one locked atomic replacement.
  • check enforces subject freshness, commit ancestry, changed paths, non-ledger cleanliness, and append-only ledger changes.

Cuff treats verifier argv as opaque. It does not select the command, import an extension, interpret domain output, or grant merge, release, deployment, spend, or residual-risk authority.

Static host integrations

One native payload lives in plugins/cuff and contains both host manifests, Claude Code commands, and Codex skills. The shared fab7hq/fab7 marketplace owns registration; this repository owns the payload. The assets require the uv-managed cuff executable on PATH.

# Codex
codex plugin marketplace add fab7hq/fab7
codex plugin add cuff@fab7

# Claude Code
claude plugin marketplace add fab7hq/fab7
claude plugin install cuff@fab7 --scope user

Validate the built candidate and both host payloads without touching the normal host configuration:

uv build --out-dir ../sandbox/cuff-02/dist
uv run python tools/local_release_check.py --host all
uv run python tools/local_release_check.py --host all --prepare-auth \
  --candidate-commit COMMIT \
  --evidence-dir ../sandbox/cuff-02/e2e
# Log each CLI in using the isolated home paths printed by the prepare phase.
uv run python tools/local_release_check.py --host all --live --reuse-prepared \
  --candidate-commit COMMIT \
  --evidence-dir ../sandbox/cuff-02/e2e \
  --qualification-manifest ../sandbox/cuff-02/control/qualification.json \
  --preflight-evidence ../sandbox/cuff-02/control/preflight.json \
  --codex-model MODEL \
  --claude-model MODEL

Before --live, freeze the exact candidate, host order, current and stale cases, three-valid-sample rule, prompts, tool policies, and containment policies in the qualification manifest. A trusted non-LLM runner must then record a passing containment preflight for the same qualification and policy digests. The checker rejects missing or mismatched controls and runs six fresh workspaces and host sessions per host. Follow the root LLM_VERIFICATION.md; unsupported isolation is INCONCLUSIVE, not a release pass.

See RUNBOOK.md for operations, the architecture overview for ownership, and the ledger contract for the record and gate invariants.

Development

uv sync --locked
uv run --locked python -m pytest
uv run --locked python -m compileall -q core/cuff
uv build
git diff --check

Community and support

Cuff is licensed under the Apache License 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

cuff_cli-0.2.1.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

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

cuff_cli-0.2.1-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file cuff_cli-0.2.1.tar.gz.

File metadata

  • Download URL: cuff_cli-0.2.1.tar.gz
  • Upload date:
  • Size: 23.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cuff_cli-0.2.1.tar.gz
Algorithm Hash digest
SHA256 b3e273ad79f42a9a532c28fb90791598207b1331b65054a89da431a97dea02d7
MD5 a683e6d3645e4c720cd86982b42fb33a
BLAKE2b-256 732e4dedf5ff38ff1e74219f5a46f92f63df688aeae3dff96c456cdc8e63c2d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for cuff_cli-0.2.1.tar.gz:

Publisher: release.yaml on fab7hq/cuff

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

File details

Details for the file cuff_cli-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: cuff_cli-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cuff_cli-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a35a71789b968d369ec5291b3be3644f04de95b133a3709234a11e30a17ae54a
MD5 cc18ce932bc648d28296886063adf138
BLAKE2b-256 3178dc5eafd9cfc53e47646b5cadf79e9f623189320fd6ac8ba5acae4fcd8363

See more details on using hashes here.

Provenance

The following attestation bundles were made for cuff_cli-0.2.1-py3-none-any.whl:

Publisher: release.yaml on fab7hq/cuff

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.2.1 This release

2 files

0.2.0

2 files

0.1.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