{
  "name": "assay",
  "version": "0.48.0",
  "updated": "2026-08-31",
  "global": {
    "json_flag": ["--json"],
    "store_flags": ["--db <path>", "--pg <dsn>"],
    "config_flags": ["--config-file <f>", "$ASSAY_CONFIG"],
    "filters": ["--principal", "--session", "--task", "--project", "--since", "--until"],
    "error_shape": "error on stderr, non-zero exit",
    "create_rule": "Inspection verbs never create a database. init, capture, serve, seed write."
  },
  "commands": [
    {
      "name": "show",
      "usage": "assay show [--db|--pg] [filters] [--json]",
      "purpose": "Rollup: spans, tokens by phase, cost",
      "writes": false,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "top",
      "usage": "assay top [--by principal|task|session] [--limit n] [--json]",
      "purpose": "Highest-cost groups",
      "writes": false,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "tail",
      "usage": "assay tail [-n count] [--json]",
      "purpose": "Latest spans, one line each",
      "writes": false,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "turns",
      "usage": "assay turns [--session id] [--json] [--key-file f]",
      "purpose": "Decrypted timeline with per-turn cost. Debug console.",
      "writes": false,
      "yes_required": false,
      "see": "debug.mdx"
    },
    {
      "name": "transcripts list",
      "usage": "assay transcripts list",
      "purpose": "Derived session index",
      "writes": false,
      "yes_required": false,
      "see": "sessions.mdx"
    },
    {
      "name": "transcripts show",
      "usage": "assay transcripts show --session id",
      "purpose": "One sitting from the transcript store",
      "writes": false,
      "yes_required": false,
      "see": "sessions.mdx"
    },
    {
      "name": "search",
      "usage": "assay search \"query\" [--limit n] [--json]",
      "purpose": "Search sealed messages and reasoning",
      "writes": false,
      "yes_required": false,
      "see": "search.mdx"
    },
    {
      "name": "search backfill",
      "usage": "assay search backfill",
      "purpose": "Index sittings captured before search",
      "writes": true,
      "yes_required": false,
      "see": "search.mdx"
    },
    {
      "name": "type",
      "usage": "assay type [--json]",
      "purpose": "Spend per kind of work, with unannotated bucket",
      "writes": false,
      "yes_required": false,
      "see": "type.mdx"
    },
    {
      "name": "products",
      "usage": "assay products [--product name] [--json]",
      "purpose": "Path-product costs, inclusive and weighted",
      "writes": false,
      "yes_required": false,
      "see": "products.mdx"
    },
    {
      "name": "objectives",
      "usage": "assay objectives [--json]",
      "purpose": "Objective tree and window counts",
      "writes": false,
      "yes_required": false,
      "see": "objectives.mdx"
    },
    {
      "name": "unplaced",
      "usage": "assay unplaced [--json]",
      "purpose": "Sittings with no winning objective window",
      "writes": false,
      "yes_required": false,
      "see": "objectives.mdx"
    },
    {
      "name": "scopes",
      "usage": "assay scopes [--json]",
      "purpose": "Where writes landed",
      "writes": false,
      "yes_required": false,
      "see": "framing.mdx"
    },
    {
      "name": "waste",
      "usage": "assay waste [--limit n] [--json]",
      "purpose": "Recoverable-spend detectors",
      "writes": false,
      "yes_required": false,
      "see": "spend.mdx"
    },
    {
      "name": "roi",
      "usage": "assay roi [--json]",
      "purpose": "Cost per outcome, token yield, declared ROI",
      "writes": false,
      "yes_required": false,
      "see": "spend.mdx"
    },
    {
      "name": "outcomes",
      "usage": "assay outcomes [--json]",
      "purpose": "List task outcomes",
      "writes": false,
      "yes_required": false,
      "see": "spend.mdx"
    },
    {
      "name": "export",
      "usage": "assay export --focus [--json]",
      "purpose": "FOCUS cost CSV, one row per span",
      "writes": false,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "dashboard",
      "usage": "assay dashboard [--snapshot dir] [--json]",
      "purpose": "Read-only local console, or static snapshot",
      "writes": false,
      "yes_required": false,
      "see": "dashboard.mdx"
    },
    {
      "name": "pricing check",
      "usage": "assay pricing check [--json]",
      "purpose": "Unpriced tripwire",
      "writes": false,
      "yes_required": false,
      "see": "pricing.mdx"
    },
    {
      "name": "init",
      "usage": "assay init [--global] [--force]",
      "purpose": "Config, empty store, content key",
      "writes": true,
      "yes_required": false,
      "see": "install.mdx"
    },
    {
      "name": "capture",
      "usage": "assay capture claude-code|grok|codex|opencode",
      "purpose": "Sweep harness logs into spans and sealed turns",
      "writes": true,
      "yes_required": false,
      "see": "capture.mdx"
    },
    {
      "name": "sweep",
      "usage": "assay sweep | sweep on | sweep off",
      "purpose": "One-shot sweep or 30-minute timer",
      "writes": true,
      "yes_required": false,
      "see": "capture.mdx"
    },
    {
      "name": "labelling",
      "usage": "assay labelling on|off|status|run|session-end",
      "purpose": "Corpus labels using their AI",
      "writes": true,
      "yes_required": false,
      "see": "labelling.mdx"
    },
    {
      "name": "declare",
      "usage": "assay declare [--type|--objective|--scopes|--accept]",
      "purpose": "Local write door for type, objective, scopes",
      "writes": true,
      "yes_required": false,
      "see": "labelling.mdx"
    },
    {
      "name": "seed",
      "usage": "assay seed [--seed n] [--days d]",
      "purpose": "Deterministic synthetic corpus. Creates the db.",
      "writes": true,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "serve",
      "usage": "assay serve --tenants <file>",
      "purpose": "OTLP/HTTP ingest door",
      "writes": true,
      "yes_required": false,
      "see": "ingest.mdx"
    },
    {
      "name": "outcomes record",
      "usage": "assay outcomes record --principal p --task t --kind k",
      "purpose": "Append one outcome",
      "writes": true,
      "yes_required": false,
      "see": "spend.mdx"
    },
    {
      "name": "classify run",
      "usage": "assay classify run [--judge] [--json]",
      "purpose": "Span work-type overlays",
      "writes": true,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "type run",
      "usage": "assay type run [--judge] [--json]",
      "purpose": "Annotate sittings with type",
      "writes": true,
      "yes_required": false,
      "see": "type.mdx"
    },
    {
      "name": "value run",
      "usage": "assay value run [--config|--judge]",
      "purpose": "Valuation overlays",
      "writes": true,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "attribute products",
      "usage": "assay attribute products",
      "purpose": "Path-product overlay from session documents",
      "writes": true,
      "yes_required": false,
      "see": "products.mdx"
    },
    {
      "name": "attribute scopes",
      "usage": "assay attribute scopes",
      "purpose": "Scope overlay from write paths",
      "writes": true,
      "yes_required": false,
      "see": "objectives.mdx"
    },
    {
      "name": "attribute objectives",
      "usage": "assay attribute objectives [--judge]",
      "purpose": "Place sittings on the objective tree",
      "writes": true,
      "yes_required": false,
      "see": "objectives.mdx"
    },
    {
      "name": "attribute backfill",
      "usage": "assay attribute backfill",
      "purpose": "Bind outcomes to spend",
      "writes": true,
      "yes_required": false,
      "see": "spend.mdx"
    },
    {
      "name": "reprice run",
      "usage": "assay reprice run [--dry-run]",
      "purpose": "Append cost corrections. Never edits a span.",
      "writes": true,
      "yes_required": false,
      "see": "pricing.mdx"
    },
    {
      "name": "pricing watch",
      "usage": "assay pricing watch",
      "purpose": "Fetch public rate documents. Only network verb. Does not open the store.",
      "writes": false,
      "yes_required": false,
      "network": true,
      "see": "pricing.mdx"
    },
    {
      "name": "reconcile anthropic",
      "usage": "assay reconcile anthropic",
      "purpose": "Ledger vs Anthropic admin cost report",
      "writes": false,
      "yes_required": false,
      "network": true,
      "see": "pricing.mdx"
    },
    {
      "name": "shred",
      "usage": "assay shred --principal id --yes",
      "purpose": "Destroy one principal's content key. Irreversible.",
      "writes": true,
      "yes_required": true,
      "see": "privacy.mdx"
    },
    {
      "name": "transcripts prune",
      "usage": "assay transcripts prune",
      "purpose": "Age-based turn retention",
      "writes": true,
      "yes_required": false,
      "see": "cli.mdx"
    },
    {
      "name": "transcripts reseal",
      "usage": "assay transcripts reseal",
      "purpose": "Rewrite ciphertext only, for key rotation",
      "writes": true,
      "yes_required": false,
      "see": "cli.mdx"
    }
  ]
}
