{
  "schema_version": "1.0",
  "interface": {
    "name": "Harnessie CLI",
    "kind": "local process interface",
    "transport": "command line",
    "hosted": false,
    "network_service": false,
    "description": "Machine-readable synopsis of the published Harnessie 1.5.0 CLI. This is not a hosted HTTP API."
  },
  "package": {
    "name": "harnessie",
    "version": "1.5.0",
    "registry": "https://pypi.org/project/harnessie/",
    "source": "https://github.com/snapsynapse/harnessie"
  },
  "release_context": {
    "source_version": "1.5.0",
    "stable_release": "1.5.0",
    "publication_status": "published",
    "describes": "Published Harnessie 1.5.0 core",
    "unreleased_changes_since_stable": false,
    "note": "Core 1.5.0 is published and verified on GitHub and PyPI. Verify Action 0.2.2 and stable v0 still pin core 1.4.1 and Homebrew still serves 1.4.1; the Verify Action 0.2.3 and Homebrew 1.5.0 bumps are in progress and pinning follows their own releases. Engine wrappers remain independently released at 0.1.0."
  },
  "global_options": {
    "--root": "Project root; defaults to the current working directory."
  },
  "paths": {
    "init": {
      "synopsis": "harnessie init [path] [--force] [--no-verify]",
      "purpose": "Scaffold a local project and, by default, run the zero-dollar guided readiness check.",
      "side_effects": "Writes scaffold files below the selected project root; refuses overwrite unless --force is explicit."
    },
    "run": {
      "synopsis": "harnessie run WORKFLOW [--goal GOAL] [--approval-policy FILE] [--approve-interactive] [--plugin NAME ...]",
      "purpose": "Run a governed workflow under declared budgets, ownership, sandbox, and verification policy.",
      "side_effects": "Side-effecting tools remain consent and policy gated; network is denied unless a phase explicitly allows it. Plugins never auto-load; each selected in-process plugin is operator-trusted code."
    },
    "resume": {
      "synopsis": "harnessie resume RUN_ID WORKFLOW [--goal GOAL] [--approval-policy FILE] [--approve-interactive] [--plugin NAME ...]",
      "purpose": "Resume from the audited journal while skipping already verified phases.",
      "side_effects": "Uses the same consent, ownership, sandbox, budget, and verification gates as run; the exact recorded plugin receipt is required."
    },
    "report": {
      "synopsis": "harnessie report RUN_ID [--raw]",
      "purpose": "Render a plain-language local run summary and its next operator action.",
      "side_effects": "Read-only."
    },
    "audit": {
      "synopsis": "harnessie audit RUN_ID",
      "purpose": "Verify the local event hash chain and render the governance timeline.",
      "side_effects": "Read-only."
    },
    "eval": {
      "synopsis": "harnessie eval [SUITE] [--live]",
      "purpose": "Run deterministic scorecards; --live is a separate explicit provider opt-in.",
      "side_effects": "Default suite is network-free; --live may call configured providers."
    },
    "validate": {
      "synopsis": "harnessie validate [PATH ...] [--kind KIND]",
      "purpose": "Validate the six stable v1 authoring contracts and their cross-document references without starting a run.",
      "side_effects": "Read-only; no model calls, network, sandbox admission, run-state creation, or workspace writes."
    },
    "ownership": {
      "synopsis": "harnessie ownership PATH --agent AGENT [--json]",
      "purpose": "Explain the ownership-ledger write decision for one agent and path relative to workspace/ without claiming or modifying it. JSON output uses schema_version 1 and a fixed source vocabulary.",
      "side_effects": "Read-only; no ledger mutation, workspace write, model call, network access, sandbox admission, or run-state creation. Valid allowed and denied decisions exit 0; invalid input exits 2."
    },
    "verify-manifest": {
      "synopsis": "harnessie verify-manifest [MANIFEST]",
      "purpose": "Verify hashes in the outward public trust bundle.",
      "side_effects": "Read-only."
    },
    "verify-inward-manifest": {
      "synopsis": "harnessie verify-inward-manifest [MANIFEST]",
      "purpose": "Verify shipped prompts, configuration, and ownership policy against the inward manifest.",
      "side_effects": "Read-only."
    },
    "approve-maiden": {
      "synopsis": "harnessie approve-maiden RUN_ID PHASE",
      "purpose": "Promote a previously staged maiden-voyage proposal after audit, ownership, artifact, and target hashes verify.",
      "side_effects": "Explicit operator action that writes only the verified staged proposal to an unchanged target."
    },
    "verify": {
      "synopsis": "harnessie verify --workspace DIR [--criteria FILE] [--evidence-bundle FILE] [--evidence-root DIR] [--check CMD] [--report-dir DIR] [--models FILE] [--tier TIER] [--verifier-prompt FILE] [--no-verifier] [--allow-network] [--max-steps N]",
      "purpose": "Verify a local artifact with deterministic checks followed by an optional independent verifier.",
      "side_effects": "Checks are sandboxed and network-denied by default; the verifier is read-only."
    },
    "observe": {
      "synopsis": "harnessie observe RUN_ID",
      "purpose": "Verify a local journal snapshot and produce cited summaries while preserving halted and incomplete outcomes. Exit 0 means observation succeeded, not that the run passed; invalid inputs exit 2.",
      "side_effects": "Writes derived JSON and Markdown in the run observer directory. Does not mutate the source journal, construct models, load plugins, start a runner, or change routing."
    },
    "atif": {
      "synopsis": "harnessie atif RUN_ID_OR_DIR [--out PATH] [--force]",
      "purpose": "Export a run's or verify report's hash-chained event log as an ATIF-v1.7 trajectory.json so an independent capture can be reconciled against the harness's own record. Refuses a broken chain, an unfinished loop, a step gap, or an existing output without --force; exits 0 on write and 2 on refusal.",
      "side_effects": "Writes one trajectory file. Makes no model calls, does not mutate the source log, and reports fields the log does not hold (messages, tool arguments) as absent rather than reconstructing them.",
      "status": "live"
    },
    "export-aidr": {
      "synopsis": "harnessie export-aidr RUN_ID PHASE --output decisions/AIDR-NNNN-slug.md --arbiter HANDLE",
      "status": "live",
      "purpose": "Export one canonical open record as AIDR 0.1.0. Explicit unused output and arbiter required; existing arbitration, ambiguous formatting, invalid evidence and unsupported platforms refuse with JSON and exit 2. Export success exits 0.",
      "side_effects": "Writes one new operator-selected decision file outside the runner tool registry. Leaves source, journal and original halted run unchanged; does not author human arbitration."
    }
  },
  "governance": {
    "human_approval": "Required where declared policy gates a side effect.",
    "human_arbitration": "Always required for contested decisions.",
    "unknown_or_unenforceable_control": "Fails closed."
  },
  "stability": {
    "status": "stable-1.x",
    "policy": "The six v1 authoring schemas and harnessie.tools.v1 plugin contract are stable for the 1.x line under SCHEMA_COMPATIBILITY.md and PLUGIN_CONTRACT.md."
  },
  "canonical": "https://harnessie.com/api/v1/index.json",
  "last_updated": "2026-10-06"
}
