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.1.0
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 .cuff/project.json
git commit -m "Initialize Cuff"

The marker is exactly {"schema":1} and records live under .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

Small native assets live in plugins/claude/cuff and plugins/codex/cuff. The corresponding host plugin manager owns their installation and removal. These assets require only the uv-managed cuff executable on PATH; Cuff itself does not install plugins.

# Codex
codex plugin marketplace add fab7hq/cuff --ref v0.1.0
codex plugin add cuff@fab7hq

# Claude Code
claude plugin marketplace add fab7hq/cuff@v0.1.0
claude plugin install cuff@fab7hq --scope user

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.1.0.tar.gz (22.2 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.1.0-py3-none-any.whl (24.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cuff_cli-0.1.0.tar.gz
  • Upload date:
  • Size: 22.2 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.1.0.tar.gz
Algorithm Hash digest
SHA256 aecd3c2e64197c25182d02f153089b4e8450213f28be7a74e9b658cbd1300a13
MD5 3b02d772347704b1b56e2feb0f7b8702
BLAKE2b-256 ca43a9e8989fb69073de62b6ba084672da805b78e0d555888ef1e22eeac648ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for cuff_cli-0.1.0.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.1.0-py3-none-any.whl.

File metadata

  • Download URL: cuff_cli-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.3 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab73376b6e25d9c8d6d26cdb04527bccf412e4812e2b2222aedb482a052eeb0d
MD5 2adc8f525597734c1dfe1bee27703054
BLAKE2b-256 7e9461ba119b683a9dbf41897284aebff843d7ac0a8ac512f5fa1a6e56b59b1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for cuff_cli-0.1.0-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

0.2.1

2 files

0.2.0

2 files

This release

0.1.0 This release

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