{"openapi": "3.0.3", "info": {"title": "Pre-open repo agent-surface audit", "version": "1.0.2", "description": "Before your agent opens that repo, know what in it will run \u2014 or reconfigure your agent. A repository received as files can execute code through .git/config sinks (core.fsmonitor, hooksPath, sshCommand, filter/diff drivers), hooks, and MCP/package hooks, and its own subagent definitions can downgrade the reviewing model, exclude the directory where the payload sits, and instruct the reviewer not to re-audit. This service is the pre-open gate: it never executes the tree, enumerates the complete agent-control surface on two separately graded surfaces (EXECUTION and EXAMINATION), issues a per-harness x per-version verdict \u2014 OPEN / OPEN-QUARANTINED / DO-NOT-OPEN \u2014 from a maintained patch-status matrix, signs a receipt whose tree hash binds file contents, and can emit a sanitised quarantined copy accepted only when it re-audits with zero high findings. A verdict grades the enumerated agent-control surface of a received tree on two surfaces \u2014 EXECUTION and EXAMINATION \u2014 against the customer's pinned policy and the patch-status matrix for the named harness and version at audit time; it is not a general malware, vulnerability, or safety determination about the tree's code, and an OPEN verdict is not a representation that a tree is safe in any other respect. Enumeration is complete on the proven classes \u2014 every agent-binding file is listed in the signed receipt \u2014 but prose classification is pattern-based: a genuinely novel paraphrase can escape classification while never escaping enumeration. Verdicts are matrix-versioned: each verdict records the patch-matrix version it stands on. Willingness to pay is UNMEASURED."}, "servers": [{"url": "https://textforagents.com/products/repo-agent-surface-pre-open-audit"}], "components": {"securitySchemes": {"bearer": {"type": "http", "scheme": "bearer"}}}, "paths": {"/health": {"get": {"summary": "health", "responses": {"200": {"description": "ok"}}}}, "/register": {"post": {"summary": "register an operator account \u2014 returns a one-time claim token", "responses": {"201": {"description": "account + claim_token"}}}}, "/trial/claim": {"post": {"summary": "claim the API token; binds the one-time trial grant (one free pre-open audit, ever) to the account + payer wallet", "responses": {"200": {"description": "token + trial state"}}}}, "/audit": {"post": {"security": [{"bearer": []}], "summary": "pre-open audit ($0.99 x402 after the one-time free trial, or plan-included); body: {tree:{files:[{path,content|content_b64|link}]}, harness, version, policy}", "responses": {"200": {"description": "signed verdict"}, "402": {"description": "x402 challenge"}}}}, "/lookup": {"post": {"security": [{"bearer": []}], "summary": "verdict lookup ($0.01 x402; free inside plans): precomputed signed verdict for one tree_hash x harness x version; a lookup never re-audits", "responses": {"200": {"description": "signed verdict"}, "402": {"description": "x402 challenge"}, "404": {"description": "no precomputed verdict"}}}}, "/sanitise": {"post": {"security": [{"bearer": []}], "summary": "audit + sanitised copy ($1.99 x402, always metered); copy accepted only when it re-audits with zero high findings", "responses": {"200": {"description": "signed verdict + sanitised copy + neutralisation diff"}, "402": {"description": "x402 challenge"}}}}, "/verify": {"post": {"summary": "verify an Ed25519-signed receipt (free)", "responses": {"200": {"description": "valid + key fingerprint"}}}}, "/verify-key": {"get": {"summary": "accepted signing-key fingerprints (current + archived)", "responses": {"200": {"description": "keys"}}}}, "/subscribe": {"post": {"security": [{"bearer": []}], "summary": "Operator plan $9.99/mo (50 fresh audits included) or Fleet plan $19.99/mo (200 included); lookups free inside plans; copies meter at $1.99", "responses": {"200": {"description": "plan active"}}}}, "/account": {"get": {"security": [{"bearer": []}], "summary": "own account state (trial, plan, verdict count)", "responses": {"200": {"description": "account"}}}}, "/tokens/rotate": {"post": {"security": [{"bearer": []}], "summary": "rotate own API token (old token revoked in the same call)", "responses": {"200": {"description": "new token"}}}}, "/tokens/revoke": {"post": {"security": [{"bearer": []}], "summary": "revoke own API token", "responses": {"200": {"description": "revoked"}}}}, "/account/data": {"delete": {"security": [{"bearer": []}], "summary": "delete own account data (verdicts tombstoned, token revoked)", "responses": {"200": {"description": "deleted"}}}}, "/patch-matrix": {"get": {"summary": "patch-status matrix (version, per-row patched_in, source, verification date)", "responses": {"200": {"description": "matrix"}}}}, "/mcp": {"post": {"summary": "MCP surface (initialize / tools/list / tools/call: preopen_audit, lookup_verdict, sanitise_tree, verify_receipt) \u2014 same billing as REST, Bearer token required for paid tools", "responses": {"200": {"description": "JSON-RPC"}}}}}}