Skip to content
contract-ops CLI suite

Tool · Python

contract-vault-cli

contract-vault-cli v0.5.2 0 440/wk on npm Latest from PyPI · checked Sun, 07 Jun 2026

A git-backed register for your signed contracts — so a renewal, notice deadline, or obligation never slips. contract-vault registers each executed deal in a plain git repo, then surfaces what you'd otherwise miss: auto-renewal notice deadlines, expirations, payment dates, and recurring obligations — as a queryable portfolio, an .ics calendar, and a reminder digest for cron or an agent. Every field keeps a confidence and a source, and a human accept promotes a checked field to manual. Local-first, single-file, stdlib-only.

It works standalone — and also composes with the contract-ops suite as the post-signature ("manage-out") end: it ingests extract-cli output and is the sibling of template-vault (template-vault stores the blank templates; contract-vault stores the signed instances).

TL;DR — pipx install contract-vault, then contract-vault demo for a zero-config register-and-calendar tour on bundled fixtures. Register your own with extract contract.pdf | contract-vault ingest -, then contract-vault due --within 90d --format ics. Stdlib-only, git-backed, no network on the default path.

Try it live

Explore a seeded demo register (read-only) — list deals, query the portfolio, and project the upcoming renewals/deadlines, in a sandbox.

Runs the real CLI on your input in a sandbox — no setup, nothing stored. Open in a new tab ↗

What it does

  • Registers signed contracts from extract-cli output — extract doc.pdf | contract-vault ingest -, or ingest shells out to extract directly. Each deal is a committed record in a plain git repo (no DB, no daemon).
  • Surfaces deadlines as a calendar. due / obligations project upcoming auto-renewal notices, expirations, and payment dates within a window (--within 90d) and emit a valid RFC 5545 .ics feed. They're status-aware — only open obligations by default, so completing one drops it from the calendar.
  • Obligation lifecycle. obligation <deal> <id> marks an obligation done/waived, assigns an --owner, or makes it recur (weekly / monthly / quarterly / semiannual). Lifecycle survives a re-ingest/recompute (carried forward by id).
  • Reminders for cron & agents. remind is a digest of obligations whose reminder window is open right now; config reminders sets corpus-wide default lead-times once (e.g. 30,7 days). A bundled scheduling guide shows how to run it from cron.
  • Renewal-exposure gate. risk / at-risk flags missed notice deadlines (CRITICAL when the contract auto-renews) and imminent ones; --strict exits non-zero for CI.
  • Portfolio queries. find by counterparty, governing law, currency, value threshold, expiry, or auto-renew; stats for a portfolio dashboard; export to csv / md / json for finance and legal.
  • Human-in-the-loop review. review lists unidentified / LLM-derived / low-confidence fields; accept promotes a checked field to source: manual (single or bulk --from), and history shows the git trail of every ingest + accept.

Quickstart

install + run
# Install (stdlib-only; the [docx] extra pulls in extract-cli for end-to-end ingest)
pipx install contract-vault
contract-vault --version

# Zero-config: register two sample contracts and project their renewals calendar
contract-vault demo

# Register your own signed contract, then export the next quarter's deadlines
mkdir my-vault && cd my-vault
contract-vault init
extract ~/contracts/acme-msa.pdf | contract-vault ingest -
contract-vault due --within 90d --format ics > deadlines.ics

# Assign an owner + reminder lead-times to an obligation, then run the reminder digest
contract-vault obligation acme-corporation/master-services-agreement 1 --owner "Finance" --reminders 30,7
contract-vault remind --json        # what's due to nudge right now — wire into cron

For agents and automation

contract-vault answers the suite's discovery contract: contract-vault --catalog json returns {name, bin, version, description, commands[], exitCodes} so an agent learns every command and flag at startup. Read commands take --json; due/export take a richer --format. Exit codes are CI-friendly: 0 ok, 1 failure or findings (a verify mismatch, or a --strict review/risk gate), 2 bad usage. The full agent contract is in AGENTS.md.

recommended agent defaults
contract-vault --catalog json                                  # discover commands/flags
contract-vault find --auto-renew --value-gt 50000 --json       # portfolio query
contract-vault risk --within 30d --strict --json               # CI renewal-exposure gate
contract-vault remind --json                                   # reminder digest (run from cron)

Stored records conform to committed JSON Schemas under docs/spec/ (contract-record.schema.json + the obligations projection), with the suite's semver commitment. Extraction is delegated to extract-cli (and its shared ~/.config/contract-ops/llm.json) — contract-vault never reimplements it and never calls out on a default path. See docs/INTEROP.md.

Where it fits in the workflow

The final stage of the nine-CLI workflow — the manage-out end. sign-cli produces the executed PDF; contract-vault registers it and keeps watch over its lifecycle. Feed it the same extract-cli output that drives intake, and the deal you signed becomes a tracked obligation with a calendar. It also stands alone as a git-backed contract register for any team that just needs to never miss a renewal. See the full workflow.

Repo

github.com/DrBaher/contract-vault-cli · MIT licensed · Stdlib-only Python (the [docx]/[pdf] extras pull in extract-cli) · PyPI contract-vault.

Edit this page on GitHub