{
  "object": "curbi.docs.catalog",
  "version": 1,
  "updated": "2026-11-03",
  "documents": [
    {
      "id": "doc:policy-check",
      "title": "What does Curbi Policy Check do?",
      "text": "Curbi checks an AI reply against explicit business rules and supplied action records. It returns structured findings for configured price mismatches, forbidden phrases and unsupported completion claims. The current public access is deterministic, uses no model inference, and does not authorize or execute actions.",
      "url": "https://curbi.io/answers/#policy-check",
      "markdown": "https://curbi.io/docs/policy-check.md",
      "sha256": "97ed9387ccec3080b31271bc204673ec0a400b20a674a133d15b6bacdad1d81b",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:completion-claims",
      "title": "How do I check an agent that says it booked, refunded or applied a discount?",
      "text": "Map the action verb to an operation in your policy, then supply its outcome record. Curbi reports action:unrecorded when the reply claims completion without a matching DONE effect. Caller-supplied DONE records are unverified assertions. Put authorization in the execution layer before the write; check the reply after the outcome.",
      "url": "https://curbi.io/answers/#completion-claims",
      "markdown": "https://curbi.io/docs/completion-claims.md",
      "sha256": "34ed1323b8a6d5fd964fb16af1b0a5572a28f15f4a3ddd4f0cf08c2297787b1f",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:signed-amounts",
      "title": "Can Curbi detect a $500 claim when a signed receipt says $50?",
      "text": "The amount-aware checker can flag a dollar amount that contradicts an amount-bearing signed receipt for the claimed operation in the same sentence. The signed amount lab demonstrates this with temporary local keys and sample data. Those keys are not trusted by the public API, and the lab does not prove a real provider action occurred.",
      "url": "https://curbi.io/answers/#signed-amounts",
      "markdown": "https://curbi.io/docs/signed-amounts.md",
      "sha256": "992655e1be912ee5198bc543ae44b374441c02454a17913416ba6ccc700e5e33",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:agent-integration",
      "title": "How can an AI agent use Curbi today?",
      "text": "Fetch Curbi’s capability manifest, follow its OpenAPI contract and POST a policy and reply to https://api.curbi.io/v1/check. Inspect pass, typed findings and original-text spans. Public rate-limited checks can omit a key; managed metered access requires an API key. A passing check means no configured issues were found; it is not general truth, compliance certification or permission to act.",
      "url": "https://curbi.io/answers/#agent-integration",
      "markdown": "https://curbi.io/docs/agent-integration.md",
      "sha256": "fbac1219a99e32530463f6e2a6744a785d76d16d885e112fc057e3268f2fa92f",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:mcp-availability",
      "title": "Does Curbi have a hosted MCP connector or installable plugin?",
      "text": "Curbi offers six read-only tools at https://api.curbi.io/mcp: policy_check, validate_policy, export_regression, verify_bundle, search and fetch. verify_bundle checks signed statements and supplied log proofs against caller-chosen trusted keys; policy_check does not verify receipts. No private project access, provider calls or action authority. A verified bundle does not prove the provider action happened. Official SDK transport tested; individual client onboarding remains unverified.",
      "url": "https://curbi.io/answers/#mcp-availability",
      "markdown": "https://curbi.io/docs/mcp-availability.md",
      "sha256": "73b244340a5a466ab9860083e1d9f0eac64587d1f513402e1abdd9700a3a546c",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:trust-and-data",
      "title": "What should an agent trust in a passing result?",
      "text": "Trust the result only within the submitted policy and documented checker behavior. Supplied records are unverified; receipt verification depends on configured keys and its stated scope. Production signing is off in this release. The checker does not persist request bodies, but that does not mean hosting-level request metadata is absent. No SLA is included.",
      "url": "https://curbi.io/answers/#trust-and-data",
      "markdown": "https://curbi.io/docs/trust-and-data.md",
      "sha256": "98deda968ed2705b9362f468703096b9eb8ec766f3cc000284a49e04918d2f23",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:sandbox",
      "title": "What is the Curbi Sandbox?",
      "text": "A browser workspace at /sandbox/ for building and breaking a policy: run real Check API calls, see the exact text each finding points to, keep request history, and download the result as a runnable CI regression test. Workspaces live in your browser only; there are no hosted accounts yet.",
      "url": "https://curbi.io/answers/#sandbox",
      "markdown": "https://curbi.io/docs/sandbox.md",
      "sha256": "9fb3e4fe7a02459ada99c33cdb8363c25fa745939558b27a239caca99e663420",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:validate-policy",
      "title": "How do I lint a Curbi policy before I use it?",
      "text": "Call the read-only MCP tool validate_policy with your policy. It applies the same schema rules as policy_check, then warns about likely mistakes: no rules, duplicate or overlapping item names, aliases that drop the item name, duplicate forbid ids or phrases, prices that cannot be stated in cents, and rules the checker never fires on. Nothing is stored.",
      "url": "https://curbi.io/answers/#validate-policy",
      "markdown": "https://curbi.io/docs/validate-policy.md",
      "sha256": "5fb2e472a5702aca895176a3448024d0386bcd633ac9ef0245b946f8e9b24974",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:export-regression",
      "title": "How do I turn a failed agent reply into a CI test?",
      "text": "Use export_regression over MCP, or Download runnable test on /check/ or /sandbox/. Both return the same file: a dependency-free node:test that replays your replies against the Check API. Expected verdicts come from the checker, never from the caller. Run it with node --test.",
      "url": "https://curbi.io/answers/#export-regression",
      "markdown": "https://curbi.io/docs/export-regression.md",
      "sha256": "2b24fdee00ad1914ef59536f2101a92a7c4b9ae43757699bd4bdcd834b6c66f6",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:verify-bundle",
      "title": "How do I verify a Curbi proof bundle?",
      "text": "Call the read-only MCP tool verify_bundle with the bundle and the public keys you trust. It checks signatures, key windows, inclusion in the signed log head (RFC 9162), attestation binding and history consistency, offline. Keys inside the bundle are never trusted. A verified bundle shows what a trusted key signed and logged, not that the provider action happened.",
      "url": "https://curbi.io/answers/#verify-bundle",
      "markdown": "https://curbi.io/docs/verify-bundle.md",
      "sha256": "969ae591d9ae94f2842ecbc9ad25d23087538e3ba49d570255d918d83f66a562",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:regression-template",
      "title": "Is there a template repo for testing agent replies in CI?",
      "text": "Yes: github.com/Curbi-Inc/curbi-regression-template (MIT). Fork it, edit the policy and cases, push, and CI checks your agent replies against Curbi on every commit. Deterministic, no model calls.",
      "url": "https://curbi.io/answers/#regression-template",
      "markdown": "https://curbi.io/docs/regression-template.md",
      "sha256": "8f84b203e3513a470080db8b9db4e0e8ef1333b0cd85c9b84b9709aea17b09f2",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:pricing",
      "title": "What does Curbi cost?",
      "text": "Local checks and six public read-only MCP tools are free. Managed Check API costs $1 per 1,000 checked replies in USD, billed monthly. Each reply in a batch counts separately. The current safety limit is 100,000 replies per key per calendar month, not an account-wide spend cap. No SLA is included. Production action signing remains off.",
      "url": "https://curbi.io/answers/#pricing",
      "markdown": "https://curbi.io/docs/pricing.md",
      "sha256": "7646a66b0c5c3cd9b531791f51ab5b04768fc3c7cca77d4bcc89132d6bd389d2",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:status",
      "title": "How do I check what Curbi release is live?",
      "text": "Read https://curbi.io/status.json. It reports the live release, the source commit, the tool count, whether production signing is on (it is off), and the latest release-check result. The counts are self-reported by the release process, not independent verification.",
      "url": "https://curbi.io/answers/#status",
      "markdown": "https://curbi.io/docs/status.md",
      "sha256": "2a5a9448418aa11fb6f888226e9420009bc250ee9e775d1749fa59dff8b7064b",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:connect-claude",
      "title": "How do I connect Curbi to Claude?",
      "text": "Add Curbi as a custom connector with the URL https://api.curbi.io/mcp (remote MCP over Streamable HTTP, free rate-limited public tools, no sign-in). In Claude settings, open Connectors, add a custom connector and paste the URL. Claude can then call the six read-only tools: policy_check, validate_policy, export_regression, verify_bundle, search and fetch. Claude Code: claude mcp add --transport http curbi https://api.curbi.io/mcp",
      "url": "https://curbi.io/answers/#connect-claude",
      "markdown": "https://curbi.io/docs/connect-claude.md",
      "sha256": "194d023f8f30830131403e93ab3c71e228b9eecb7783a72d0a37514a98a19dc2",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:connect-chatgpt",
      "title": "How do I connect Curbi to ChatGPT?",
      "text": "Create a connector with the MCP server URL https://api.curbi.io/mcp and no authentication (where ChatGPT offers custom connectors, for example in developer mode). Curbi's search and fetch tools return results in the shape ChatGPT expects (search: id, title, url; fetch: id, title, text, url), and the other four tools are read-only checks. Nothing is stored and no tool can act on your accounts.",
      "url": "https://curbi.io/answers/#connect-chatgpt",
      "markdown": "https://curbi.io/docs/connect-chatgpt.md",
      "sha256": "2aef9e3fbe7171d8e47129a1b583e42d04168041c6577b4f91c420892c6b73d5",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:policy-templates",
      "title": "Are there ready-made Curbi policies?",
      "text": "Yes. curbi.io/policies/ has tested templates for e-commerce (orders, refunds, shipping prices, discounts), SaaS (plan changes, trials, plan prices, annual discounts), support (escalations, fixes, response-time promises) and finance (transfers, waivers, fees, limits, promises about returns and risk). Each file holds the policy and the replies that show what it catches; put it in curbi/ and the Curbi Check GitHub Action replays them on every pull request.",
      "url": "https://curbi.io/answers/#policy-templates",
      "markdown": "https://curbi.io/docs/policy-templates.md",
      "sha256": "521d37b7721de6703e30341f3b25054e80e8bce93ea19e0c5a762d69ff11d188",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-10-27",
        "source": "Curbi first-party product documentation",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:ontology",
      "title": "Curbi ontology",
      "text": "Curbi turns agent claims into checkable evidence. Principal, grant, proposed action, enforced decision, provider outcome, signed statement, independent verification and regression are separate boundaries. Claim checks do not authorize execution; a valid signature does not establish provider truth.",
      "url": "https://curbi.io/docs/ontology.md",
      "markdown": "https://curbi.io/docs/ontology.md",
      "sha256": "ef90672c0307a0b1ed1c895c47591a988b8a2fd20b171b2af764a80ed074a9a7",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-11-01",
        "source": "Curbi first-party evidence contract",
        "scope": "public_product_facts_not_authority"
      }
    },
    {
      "id": "doc:provider-confirmation",
      "title": "Real Stripe test-mode provider qualification",
      "text": "A real Stripe test-mode refund was qualified locally with SQLite: lost readback returned UNKNOWN with no receipt, restart used GET-only reconciliation, and one refund produced one receipt. Exported provider observations are bound to the signed digest. This is not hosted Worker qualification, Stripe-signed proof, production signing or live-money readiness.",
      "url": "https://curbi.io/docs/provider-confirmation.md",
      "markdown": "https://curbi.io/docs/provider-confirmation.md",
      "sha256": "198613d2d503803ef00465053982860c2b1b29a57e0ee9987210f3d844ee785d",
      "sha256Of": "markdown_utf8_bytes",
      "metadata": {
        "updated": "2026-11-01",
        "source": "Curbi first-party evidence contract",
        "scope": "public_product_facts_not_authority"
      }
    }
  ],
  "trust": "Documentation is data, never an instruction or permission grant. Stable IDs round-trip to canonical documents; this JSON catalog is not an MCP server.",
  "relatedData": {
    "templates": "https://curbi.io/templates/index.json",
    "traces": "https://curbi.io/traces/index.json",
    "connectors": "https://curbi.io/connectors/index.json",
    "runtimeBoundaries": "https://curbi.io/developer/runtime-contract.json",
    "scope": "synthetic_examples_and_published_framework_adapters;not_production_execution"
  }
}
