Skip to content

Start. Continue. Connect.

Four paths cover almost everything. Commands, other examples, and technical detail are here when you need them.

Contents and technical referenceSetup, commands, file formats and evidence

Start with the change you want reviewed

  1. Request a client review for a real GitHub pull request. Write a short brief and editable success criteria, then connect the repository’s trusted receiver.
  2. Invite a one-off reviewer, or select a current reviewer in a client project. A deployed preview is shown only after the receiver checks its association with the inspected PR head.
  3. Both people approve the exact change and review packet. The receiver rechecks the destination before applying it; the recipient accepts the recorded result separately.

Ordinary external preview URLs remain mutable: an observed head association is not a frozen copy of the website. For a generated coding preview, ScopeBlind also checks the manifest and every published asset against the signed job, commit and bundle before enabling approval. The dated byte check establishes what was fetched then; it does not decide whether the work meets your brief. Missing required preview evidence blocks approval.

Try it before connecting your repository

Fix the contact button with a friend for the quick deterministic demonstration, or give a real AI worker a small revision. The AI trial uses a ScopeBlind-owned disposable repository; visitors need no GitHub account, token or installation. Both people agree separate coding limits, then review the actual output and approve the exact new change. Completion is not guaranteed. You can also practice a disagreement with Sam using fictional invoices. Each path keeps its own authority; it cannot sign for your collaborator.

Join a review you were invited to

  1. Open the private invitation. It names the repository, the pull request, the allowed files, the required checks, and when the task expires. Nothing is approved by opening it.
  2. Give a name, confirm that you will review within that scope, and join. A signing key is created in your browser; your name is a guest label, not a verified identity. No GitHub account is needed.
  3. Ask for the inspection. The repository workflow signs what it saw: the exact files, the checks, and the preview. Read the brief and the criteria against it.
  4. Approve the exact version, or ask for a change. Your approval covers only that version and holds until the task’s deadline (up to seven days), so a review made on Friday can be delivered on Monday. You can withdraw it until delivery begins; a changed version needs a new decision.
  5. On a revision, start with what changed: criteria whose wording was revised are shown first, then criteria whose linked files or preview changed. Criteria with the same wording and untouched evidence are folded away, though the new version still needs both people’s fresh decision.
  6. After the receiver applies the change, accept the recorded result or request changes. Acceptance is a separate decision, and the record shows both.

A viewing link someone shares with you grants no decision rights. To decide on your phone, add it as a device from your original browser and compare the codes. Your decisions lists what is waiting for you.

Pick up where the task needs you

  1. Open Your decisions for current requests awaiting your response. Repository projects list current access and assigned review history. Local recent-work shortcuts remain available for invoice trials.
  2. For invoice trials and negotiation, choose Continue on another device in the original task. Compare both codes and authorize only the access you need. Device setup and reminders.
  3. For an external agent, reopen its active client and copy the task’s resume instruction. The recorded instruction acknowledgment and the connection’s permission expiry are separate facts.

A viewing link gives no decision rights. Repository projects use their own membership, scoped device permissions and encrypted recovery file. Invoice device grants remain separate.

Continue on your phone

In the project, choose Add a device. Open the setup link on your phone, request access, then open its private authorization link in your original project browser. Check the matching code, choose the exact review actions and expiry, and confirm on the phone. The phone uses its own key for the same bounded project role; it cannot create tasks, invite people, grant agent access or execute changes. Your original browser can revoke it. Existing recorded decisions remain verifiable.

Keep client context and recover project access

Create a project with its repository, receiver and service. Invite named reviewers or observers; returning reviewers take a separately assigned review with their existing key. Each approval still belongs to one exact inspected change.

In the project’s Recovery section, save an encrypted file with a long unique passphrase and reopen that saved copy before enrolling it. Recovery replaces project membership with a new browser key. It cannot recreate old signatures, extend permissions, or continue unfinished reviews as the old person’s key; those reviews need a fresh assignment.

Agree what your agent can prepare

Under Preparation, the organizer specifies the agent’s public profile key, reviewer, files, exact checks, expiry, total drafts and open drafts. The reviewer must agree the identical limits. The agent may prepare review drafts, read assigned reviews, report criterion assessments and request changes. It cannot approve, apply changes or invite people. Either person can stop that permission; recovery and membership changes invalidate it.

Copy the project’s instruction into your already connected agent. Permission status and the latest recorded draft do not establish that an external agent is running in the background.

Review or share the result

From a completed result or a recorded negotiation comparison, choose the sharing action and review what will be included. The resulting view-only snapshot keeps that exact historical record for 30 days, including any decisions recorded when shared. Later work cannot change the copy. Anyone with its link can verify and download it without an account; private agent instructions, their salts, raw invitation secrets and agent credentials are excluded.

When a review is stuck, Resolve this on the review page runs a bounded exchange: the model proposes two to four options inside the agreed scope, the service refuses anything that leaves it, and each option names the one further decision a person must make. Choosing one records it as ordinary signed feedback for the next revision; nothing is approved or applied.

Every review can also be kept as one file: Download review package on the review page produces an HTML file that carries the signed evidence, the verified preview bytes and an offline viewer that re-checks all of it when opened, with no network and nothing sent anywhere.

Received a file? Check it in Verify. Look separately at record integrity, who authorized it, what the destination confirmed, and whether the recipient accepted it.

Review a real repository changeA bounded GitHub workflow with separate receiver setup

Install the receiver, then agree the exact change

The receiver is a workflow installed in your own repository. It keeps the repository’s write credential and its own signing key, inspects the exact pull request for a task, and applies only a version both people approved. Install it from a trusted machine with one command; the installer shows the workflow, keys, and release hashes before anything is written.

npx --yes protect-mcp@0.30.0 repository connect --link-stdin --install

It adds a workflow file, a repository secret, and a public key to your repository, and nothing else. The steps below are the full path from pull request to accepted result.

Prepare a client review for one GitHub pull request. Specify the repository, target branch, permitted paths and required checks. Both people approve the same inspected change. A trusted receiver applies it and records the readback; the reviewer then accepts or requests a revision.

This changes a real GitHub branch. It uses fresh permissions and its own receiver; invoice approvals and phone permissions do not carry over.

Connect once, then inspect before you invite

  1. Paste the real GitHub pull request into repository review setup. Connect the selected repository through GitHub, or use your existing local GitHub connection.
  2. Run the generated command on your trusted machine. Paste the separately copied private setup link when prompted; it stays out of command history. The installer reads the PR and returns signed files, checks and preview choices to your browser.
  3. Review the exact receiver workflow, public keys and release hashes in the browser before authorizing installation. The installer keeps credentials and private keys with your repository.
  4. Wait for the installed workflow to answer its signed setup challenge. Then use the inspected connection, write the brief and criteria, and choose a project reviewer or private invitation.

A local discovery record is not an installed workflow response. An initial PR inspection helps prepare a review; the receiver still inspects current commits and checks for the actual task. A GitHub App connection can request that workflow from the task page. A local-only connection uses its installed workflow manually.

Turn exact feedback into bounded code work

  1. Record feedback against the review packet, then choose Ask the coding worker to revise this. The prior task and result stay intact.
  2. Connect the separate coding worker if needed. Both people agree its editable files, fixed test/build commands, immutable runtime image, expiry, and job/time/token limits. Preparation permission alone cannot edit code.
  3. The organizer separately chooses Start coding this revision. The queue reports actual worker stages and reserved work. Automatic startup needs a GitHub App connection. For a local-only connection, use the queued job’s Open coding workflow link, select the shown branch, and paste its exact job_id into Run workflow; this starts the existing recorded job. Either person can stop permission; an uncertain publication must be reconciled.
  4. The result is a real new PR and a public, unlisted static preview on a separate origin. Use relative asset paths; fetch/API connections, forms and storage are blocked; links can navigate away. Worker test results are attestations, not a replacement for client review.
  5. Open the new draft PR and mark it ready in GitHub, then prepare the fresh review. The receiver checks readiness again. The earlier feedback, criteria and recorded result remain linked; removed or changed criteria are visible. Both people decide on the exact new version, and the recipient accepts its result separately.
Manual receiver setup and CLI operation

The advanced connection import takes connection.json, the discovery file that repository setup writes next to receiver-key.json. A receiver installed with repository connect has no such file; it is connected through the GitHub or local connection choices on the setup page. Never upload a private key or GitHub credential. Keep an independently reviewed receiver and authority pin.

GitHub Actions must be permitted to create pull requests in the repository’s Settings → Actions → General. A PR created with GITHUB_TOKEN may leave CI waiting for Approve workflows to run or a configured manual run. Run the checks against the exact PR head; ScopeBlind still requires every agreed check and provider. GitHub’s workflow-trigger rules.

npx --yes protect-mcp@0.30.0 repository inspect \
  --config scopeblind-receiver.json --task TASK_ID \
  --key-file ./scopeblind-repository-setup/receiver-key.json

npx --yes protect-mcp@0.30.0 repository execute \
  --config scopeblind-receiver.json --task TASK_ID \
  --key-file ./scopeblind-repository-setup/receiver-key.json

--config is the receiver configuration downloaded from the task page. --key-file is the private receiver key: receiver-key.json in the directory repository setup wrote, or ~/.scopeblind/connections/<connection id>/receiver-key.json when the receiver was installed with repository connect. Both commands read the repository with the token in GITHUB_TOKEN.

The receiver reads GITHUB_TOKEN from its trusted environment. Never paste it or the private key into ScopeBlind, a task link, or your agent’s prompt. Setup writes the key with owner-only permissions. Reuse that key explicitly with --key-file when preparing another connection; setup refuses to overwrite an existing output directory.

If a result is uncertain, run the same command with repository reconcile instead of repository execute. Reconciliation checks the existing operation; it does not send another update.

Supported repository boundary

The first version supports same-repository pull requests, regular files in explicitly allowed paths, and required check names pinned to GitHub app IDs. It compares the reviewed head and base and does not force an update or bypass branch protection. The receiver does not execute the pull request’s code. Its readback establishes the branch update, not that a deployed website is correct or that the recipient accepted it.

Connect an agentReusable profiles and connections to an existing task

Connect your own MCP agent

To use your own MCP agent, choose Use your own agent in the room and create a pairing code. Choose Claude Code, Codex CLI, or another MCP client. Run the room’s command, paste the code at its private prompt, then follow the setup printed for your selected client. The room supplies a separate configuration path for every connection and purpose.

npx --yes protect-mcp@0.30.0 coordination pair

This pins the published protect-mcp 0.30.0 release. The pair command accepts --client claude-code, --client codex, or --client json. It prints registration instructions; it does not edit your client settings. Generic MCP clients receive a JSON entry to merge into their existing configuration.

The agent can inspect the shared room, submit sandbox payments, wait for decisions, and deliver a result. It cannot approve its own exceptions or accept its own work. The owner can revoke its connection from the room. A requested revision keeps prior results and completed payments in the same shared budget.

After setup, copy the room’s “begin or resume” instruction into your agent. Its first inspection verifies the signed context and acknowledges that exact digest. The room shows the last instruction check separately from current permission. Neither pairing nor a past check establishes that an agent is running now.

To return, use “Reconnect this agent” with the original private config file, reopen your agent client, and give it the resume instruction. Existing operations and proposals keep their identities. Missing files, expired or revoked access, or a changed negotiation mandate require a fresh pairing. Bounded waiting runs only while your agent session is active.

The hosted trial uses fictional USD and a sandbox ledger. Hosted jobs allow 40 model steps across all attempts; waiting uses no model calls. Your own agent’s model usage is separate. Keep pairing codes and configuration files private. ScopeBlind checks actions through this room’s payment tool; connecting it does not govern the agent’s other tools.

Start through your agent

Open Start through your agent, choose your MCP client, and copy the setup command with the service’s displayed authority key. Check that key against a trusted source. The reusable profile keeps your agent’s key and separate task connections on this computer. It contains no human browser key and grants no task permissions by itself.

npx --yes protect-mcp@0.30.0 coordination agent setup \
  --client claude-code \
  --profile ~/.scopeblind/agent.json \
  --endpoint https://scopeblind.com/api/coordination \
  --authority-key PINNED_64_HEX_AUTHORITY_KEY

Use --client codex or --client json for those registration instructions. Apply the printed configuration in your client and reopen it. For repository work, follow the project’s exact preparation grant. The same profile can keep separate invoice or negotiation connections.

Prepare a client review with your existing agent

  1. Ask the registered agent to call coordination.connections and return its public agent_key.
  2. In your project, open Preparation. The organizer specifies this key, files, exact checks, quotas and expiry; the reviewer agrees the identical limits.
  3. Copy the active permission’s exact instruction. The agent calls coordination.inspect_workspace with the shown workspace_id and mandate_id.
  4. The agent uses coordination.prepare_repository_review with connection_id equal to that mandate ID, a stable request_id, and the real PR number, title, brief and stable-ID success criteria. Review the unsigned proposal in the project inbox, edit it, then explicitly create and assign the task.
  5. Use coordination.inspect_repository_review for that exact task. Criterion reports and feedback bind the current packet; a prepared revision can name its exact source feedback. Agent findings never approve or apply code. Both humans still sign each exact change.

ScopeBlind does not host this external agent session. Reopen your client and ask it to inspect current permission before continuing. A permission being active or a past draft being recorded is not evidence of an agent running now.

Separate invoice and negotiation workflow
  1. coordination.prepare_task takes a stable request_id and a draft with a title, goal and optional proposed limits, assumptions or private preferences. It returns a private review link valid for 30 minutes. No room, human signature, payment or hosted model is created by preparing it.
  2. Review and edit the draft in the browser. Sign your own limits, invite the other person to sign theirs, and separately authorize your agent’s negotiation connection.
  3. The agent calls coordination.inspect_task_request, then coordination.claim_task_connection when authorized. It receives a connection_id and uses coordination.inspect_negotiation to verify its exact mandate before proposing or testing.
  4. After both people approve one tested plan, the original organizer creates the new task and may separately authorize that same agent to execute it. coordination.check_handoffs and coordination.claim_execution_connection return a new execution connection. The agent inspects that connection before submitting a payment.

Every scoped tool in the profile requires an explicit connection_id. Negotiation and payment permissions stay separate. Retry uncertain claims with the same IDs and private profile. Expired access requires the person to authorize a fresh connection; a missing profile cannot be recovered from a task link. Existing one-room pairing remains available above. Importing an older private config preserves its existing scope but cannot recreate a discarded agent key for an execution handoff.

Draft text goes to ScopeBlind, and your agent’s model provider may see returned tool records and its own authorized private brief. The profile is not a background agent: waiting and resumption require an active client session. This separate invoice path uses fictional invoices and sandbox payments.

Bring your personal agent (Muse and others)

A personal agent such as Meta’s Muse can prepare shared work here and read what happened, without ever holding an approval. The agent prepares; each person decides on their own device; the receiver applies only the version both approved; and the record leaves with whoever wants it. Any agent that can read an MCP server address can do this, in one of two ways. Use a local profile when the agent can run a command in its own computer. Use the hosted connector when the agent’s platform can only add a remote MCP address. The tools, the limits and the human steps are the same either way.

Give the agent its ScopeBlind profile

In the agent’s own environment (for Muse, its cloud computer), create a profile once and serve it as a local MCP address. The profile is an agent identity only; it carries no authority until a person grants a scoped connection.

npx --yes protect-mcp@0.30.0 coordination agent setup \
  --client json \
  --profile ~/.scopeblind/agent.json \
  --endpoint https://scopeblind.com/api/coordination \
  --authority-key PINNED_64_HEX_AUTHORITY_KEY

npx --yes protect-mcp@0.30.0 --http --port 8811 -- \
  npx --yes protect-mcp@0.30.0 coordination agent --profile ~/.scopeblind/agent.json

Then add http://127.0.0.1:8811/mcp to the agent as a custom connector or MCP server. In Muse, ask it to create a custom connector from that address; Meta does not review custom connectors, so check the authority key against a trusted source yourself. For project work the agent uses coordination.connections, which returns its public agent_key, and the same five tools every registered agent gets: coordination.inspect_workspace, coordination.prepare_repository_review, coordination.inspect_repository_review, coordination.report_repository_criteria and coordination.request_repository_changes.

Use the hosted connector

Some agent platforms cannot run a command or keep a local profile. For those, ScopeBlind hosts the connector at this address:

https://scopeblind.com/mcp

Connect in one step. If the platform supports signing in to an MCP server (OAuth), add the address and choose its connect button. The platform opens scopeblind.com in your browser. Use the browser that holds your project, the one where you created it as its organizer. The page lists the projects that browser organizes and shows the address the platform will return to. Pick the project, check the label and choose Connect. Your browser signs that approval with your own project key, and the platform then collects its token straight from ScopeBlind, so nobody copies a token. If the page opens on a device that does not hold your project, close it and connect from the device that does; there is no approval by link.

No project yet? On the same page, choose A new trial on ScopeBlind’s demo repository, then Connect and start a trial. When you ask your agent to start a trial, it gives you a link. Open it in the same browser: the link carries no secret, and no other browser can open it. There you start the trial and invite the person who reviews with you, and your agent never sees that invitation. When the trial’s project exists, the agent’s connector joins it. It can prepare and read work once you propose limits naming it and your reviewer agrees them, as for any connector. The trial is fixed: ScopeBlind’s small studio site whose contact button goes nowhere, one limited AI coding job and 24 hours. Each person can have three trials started by agents a day, and each still counts toward the two trials a day for your browser and for your network.

Or create a token by hand. In your project, open Preparation, find Hosted connector for cloud agents, give the connector a label and choose Create hosted connector. The page shows a token once. It looks like sbc_<connector id>_<secret>. Save it straight away and treat it like a password. In the agent’s platform, add the address above as an MCP connector and give it the token as its API key or bearer token.

Either way the result is the same kind of connector: it appears on the project page, where the organizer can revoke it, and a project can have up to five active connectors. Signing in uses OAuth 2.1 with PKCE, for public clients only. A platform finds it from the reply /mcp gives without a token and from /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server, and identifies itself with a client ID metadata document or by registering at /register. It may return only to an https address, its own computer’s loopback address, or an app address in reverse-domain form. The one-time code lasts five minutes and works once; presenting it again revokes the connector it created. The token does not expire and there is no refresh token, because the connector’s key is derived from its token: a new token would be a different key and would void the limits both people agreed. A platform that loses its token connects again.

The address uses the Model Context Protocol over streamable HTTP. Each request carries Authorization: Bearer followed by the token, each reply is JSON, and no session is kept between requests. It serves eight tools: coordination.connections, the same five project tools listed above, coordination.summarize_repository_review, which says who is waiting and what is left, and coordination.verify_record, which checks a record someone was sent. Neither of the last two changes anything. The hosted connector writes each tool name with an underscore in place of the dot, for example coordination_inspect_workspace, because some agent platforms refuse a dot in a tool name; it accepts either form. A connector made for a trial also has coordination.start_trial, which leaves the trial link described above, and coordination.inspect_trial_start, which says whether the person has opened it yet.

The connector’s Ed25519 signing key is derived from the token on each request and is never stored. Of the credential, ScopeBlind keeps only a SHA-256 hash of the token and the connector’s public key, so it cannot sign as the connector when the token is not presented. Beside that it keeps the connector’s label, the organizer’s public key, the times it was created, last used and revoked, the drafts and findings the connector signed, and a saved copy of the project record and limits it read. The organizer can revoke a connector on the project page at any time, and a revoked token stops working immediately; the service and its database refuse that connector’s key from then on. A project can have up to five active connectors.

A connector belongs to one project and has no authority by itself. When it is created, the page puts its public key into the preparation limits form. The organizer still proposes the limits naming that key and the reviewer still agrees the same limits, exactly as for a local profile. Once both have agreed, ask the agent to start: the hosted connector finds its project and the agreed limits by itself when it calls coordination.inspect_workspace with no arguments, so nobody pastes IDs. That call also lists every review in the project the agreed limits cover, including ones the organizer created directly, so the agent can say where any of them stands. A local profile still takes the workspace_id and mandate_id from the active permission’s instruction on the project page. Approvals, acceptance and withdrawals stay with people on their own devices.

What the agent can do, and what stays with people

  1. Prepare shared work. With a local profile, ask the agent to call coordination.connections and return its public agent_key, then paste that key into Preparation in your project. With a hosted connector, the page fills the key in for you. Either way the organizer proposes the limits and the reviewer agrees the same limits. The agent then inspects the workspace and prepares a review draft: a brief, success criteria and what each relies on, and the exact source version.
  2. Propose a revision. When feedback or a resolution names a change, the agent calls coordination.request_repository_changes against the exact packet it read. It cannot change the agreed terms silently; a new version needs a fresh inspection and both approvals.
  3. Read status and the next action. coordination.inspect_repository_review returns the review’s status, its signed approvals, and the feedback and findings recorded so far, including a Resolve this choice once a person has made it. Through the hosted connector, coordination.summarize_repository_review gives the short answer instead: who is waiting on whom, what is left, how agents assessed each criterion, and the open Resolve this options with the one decision each needs. The agent can read those options; only the person an option names can choose it, on their own device.
  4. Retrieve the result. The same read returns the recorded outcome and the evidence; either person downloads the signed evidence or the review package from the page.
  5. Check a record someone sent you. Through the hosted connector, coordination.verify_record takes a ScopeBlind record exactly as it was received and uses the same parser and verifiers as Verify and also requires scopeblind.com’s own service key; on the Verify page, paste that key into the Authority key field for the same answer. It says whether the record verified and what its signed content says. A record that checks out only against a key it names itself, or that carries text outside its signatures, is never reported as verified. It needs no agreed limits and changes nothing.

Approvals, acceptance and withdrawals are signed by people on their own devices, never by the agent and never through an approval an agent’s browser clicked. The receiver holds the only credential that can change the destination. Only briefs, artifacts and disclosures enter the shared record; the agent’s private context stays with the agent.

With a local profile, the MCP address is local to the agent’s computer and ScopeBlind hosts nothing for it. The hosted connector is served by ScopeBlind, and its requests pass through ScopeBlind: the agent’s platform sends its tool calls (draft briefs, criteria, findings and requested changes) to ScopeBlind over HTTPS. For a hosted connector ScopeBlind stores the signed drafts and findings the connector authored, because they are part of the project record, together with the token hash, the public key, the label, and the times the connector was created, last used and revoked. Its request rate limits are keyed by connector. When a platform connects by signing in, ScopeBlind also keeps the connection request: the platform’s identifier, the name it gives itself, the address it returns to, the organizer’s signed approval and a hash of the one-time code, never the token. To read a platform’s client ID metadata document, ScopeBlind fetches it from the platform’s own address. Either way, draft text goes to ScopeBlind, and the agent’s model provider may see the tool records it reads. A skill that describes the local profile steps in the agent’s own terms is published at ScopeBlind/skills.

Continue on another devicePhone access, exact decisions and optional reminders

Make exact decisions on your phone

In a task on your original authorized browser, choose Continue on another device. Open or scan its link on your phone, request access, and compare the code on both devices. Your original browser signs the exact phone key, task, permissions and expiry. Each device keeps its own private key; the link itself grants no authority.

Access lasts at most seven days or the task’s expiry. Within your existing role and chosen scope, the phone can inspect, approve or deny an exact payment, accept or request changes to the exact result, and sign your own negotiation limits or tested-plan decision. It cannot create tasks, invite people or agents, start a hosted model, adopt rules, execute payments or authorize another device. A phone’s exact-plan signatures do not transfer phone access into the new task.

Open Your decisions to read the current authenticated inbox. The task page checks current state again before a decision; expired permissions and superseded inputs cannot authorize changed work. The original or linked device can revoke its access. Earlier valid decisions remain checkable, including the actual device signature, the original principal’s authorization and the service’s signed record of its use.

Optional reminders send a generic notice with no task details or credentials. Opening one loads the current inbox; it approves nothing and does not wake an external agent session. Browser and operating-system delivery settings apply. On iPhone or iPad, add ScopeBlind to your Home Screen, link that app’s device key, and enable reminders there. Turn reminders off independently of task permissions.

Test and agree the rulesRehearsals, private instructions and shared proposals

Test and improve the rules together

Open Test the rules in a shared invoice trial. Invite someone to help test the rules, choose a ready-made case, or ask the model to read back your own expectation. A testing invitation permits cases and proposals; it cannot approve payments or change the active agreement.

Each rehearsal uses separate sample ledgers and the same database-backed gate as the invoice trial. It checks legitimate work, duplicate invoices, changed payment details, an expired approval submission, and the total budget. A plain-English draft is a suggestion; the observed results appear only after those requests run through the gate.

Compare an approval-threshold change against the current rules. The comparison shows which invoices would become automatic or need review, and whether every included expectation still holds. Only the source owner can create a new trial from an eligible comparison. The original job, its payments and approvals stay unchanged. The new sample task starts with separate funds and needs its own reviewer and agent connections.

Use a dedicated test-agent pairing to give an MCP agent the same bounded ability to inspect cases, suggest a case or threshold change, and run a rehearsal. Its tools cannot adopt a proposal or submit a payment. Existing payment-agent connections keep their original permissions.

Download the signed report and open it in Verify to check its agreement, input, case-set, proposal, and runtime commitments locally. The signature identifies the gate operator making the observation; it does not establish independent execution observation or protection against every possible input.

Optional case readback sends your text and the sample invoice context to the configured model provider. Ready-made cases work without a model. Tests exercise fictional destinations only; the report does not certify a different deployment or govern tools outside the configured route.

Let your agents work out the rules

Start a two-person agreement and send its private invitation to a colleague. Each person signs their own permitted total-budget and review-threshold ranges, plus up to two invoice requirements. Both can see these hard requirements. Private background and preferences are available only to their author, that person’s authorized agent, ScopeBlind, and the hosted provider when used.

Choose a hosted assistant or connect your own MCP agent with the command in the discussion. Each connection is bound to one principal and one discussion. Its tools can inspect its mandate and private brief, propose a budget and threshold, respond to a proposal, run a comparison, and wait. It cannot read the other private brief, approve a plan, make a payment, create a new trial, or delegate its connection.

Signing mandates does not start model work. Select Let our agents work to begin a bounded discussion: up to three proposals and six hosted model calls. Comparisons use the actual invoice gate in separate ledgers. Both people’s requirements remain in every comparison alongside the fixed protection checks. A failed search is not proof that no agreement exists.

Choose Test another plan within both mandates to request a clearly labelled alternative without a hosted model call. Each option runs actual gate comparisons. Original invoices are observed separately; their counts do not establish that the whole queue fits one shared budget. Hard invoice requirements and fixed safety checks remain distinct from these observations. A person can choose an earlier tested eligible plan directly. The first human approval fixes the exact plan; the second must match.

Help us resolve this explains conflicts and offers changes to your own unsigned draft. Before proposals, you can explicitly sign revised limits. After proposals or a decline, the organizer can create a linked discussion; both people sign new mandates and connect fresh agents. Earlier records remain. A held or budget-refused invoice can also start a discussion linked to that exact source request. It creates a separate task if agreed; it never retries the old request or enlarges its budget.

Both people review and sign the exact proposal, comparison report, and future agreement. Approval also covers the partner’s stated reviewer role and expiry. The organizer then creates a separate trial, with that reviewer already enrolled. The original room is preserved. The final work export includes the shared agreement history and both decisions, without either private brief.

The current discussion can change the total budget and invoice review threshold. It does not negotiate arbitrary contracts or govern external tools. The service signs the observed gate results; human signatures establish agreement by these keys, not verified real-world identity. Private background is confidential context, not an additional enforceable rule.

Run a gateway and check its recordsInstallation, standards and verification commands

Run a standalone gateway

One package, separately configured routes. protect-mcp 0.30.0 includes the standalone gateway and task adapters. These commands install a local gateway; hosted task permissions do not activate it or grant access to your other tools.

Save your reviewed Cedar policy in policy/standard.cedar. In a new working directory, initialize the signing key and configuration once, then launch the MCP server through the enforcing gate. Replace the command placeholder with your server’s executable and arguments:

npx protect-mcp@0.30.0 init
npx protect-mcp@0.30.0 --enforce --cedar ./policy -- <your MCP server command>

If this directory already has protect-mcp.json and its signing key, keep them and skip initialization. The wrap subcommand generates configuration; it does not launch the server. The running gateway writes .protect-mcp-receipts.jsonl and .protect-mcp-log.jsonl in this directory.

Coding-agent hooksAn alternative to launching an MCP server

For a coding agent that calls tools through hooks rather than an MCP server, the same gate answers each hook call. Install the hooks once, then serve the policy:

npx protect-mcp@0.30.0 init-hooks
npx protect-mcp@0.30.0 serve --enforce --cedar ./policy
Signed standards and optional hosted reportingKeep the installed policy and reporting destination explicit

To launch with a signed standard and report receipts to its hosted page, name the standard and the page. Review the installed gateway’s supported policy and approval behavior for your tools; the hosted invoice room’s controls are not a compatibility guarantee for this path.

Set PROTECT_MCP_REPORT_TOKEN in the gate’s environment to the page’s write token before launching. Keep the token out of shared commands.

npx protect-mcp@0.30.0 --enforce --cedar ./policy --standard ./standard.json \
  --report 'https://scopeblind.com/api/standard?s=<standard id>' -- <your MCP server command>

The hook server takes the same standard and reporting flags. Check its policy and approval behavior for the hook calls you plan to use:

npx protect-mcp@0.30.0 serve --enforce --cedar ./policy --standard ./standard.json \
  --report 'https://scopeblind.com/api/standard?s=<standard id>'

The page and its token come from the Sign tab on the Write page. Reporting is opt-in and does not block a call if reporting fails: retain the local receipt chain. Receipts disclose decision metadata and readback fields; inspect those fields before sharing.

The verified-runs harness carries the adapters for Codex and Claude Code and the recipe that pins the hook's own hash so the agent cannot swap it.

Enforcement covers calls passing through the configured gate or hooks. Credential isolation depends on how you configure the agent and destination. In enforcing mode, policy evaluation errors refuse the call.

Write and sign a standard

Say what the agent may do on the Write page: which tools, where it may connect, what limits and approvals apply, and which rules hold over the history of calls. The page renders the standard as a plain-English document from its structure, shows the calls it would refuse, and signs it in your browser with a key generated there. You leave with four files: standard.json, policy/standard.cedar, your public key for the reader to pin, and a private-key backup to keep offline.

Use the Write page to create and sign standard.json. The gateway’s sign --cedar command signs a tool-decision receipt against a policy directory; it does not author or sign a standard.

A signature covers one exact standard. Change anything and sign again; the receipts cite the digest, so a record made under an older standard says so.

Check a record

Download the signed result from a shared invoice job or the signed report from a rules rehearsal or two-person agreement, then open it on the Verify page. Verification reads the file locally without uploading its contents. It separates checked facts, authority, decisions and the limits of the evidence.

For other supported records, supply the standard, receipts, call evidence and manifest that belong together. Creating a hosted share is a separate upload; the recipient downloads that selected content before checking it locally. A proof-carrying URL also shares its contents with whoever receives the link.

Verify a published run with the CLIInstall the verifier and obtain the record before working offline

This command checks the supported published-run format. Use Verify for the shared-job and rehearsal exports described above.

git clone https://github.com/ScopeBlind/verified-runs
cd verified-runs/runs/<a run folder>
npx @veritasacta/verify manifest.json --standard standard.json --receipts receipts.jsonl --calls calls.jsonl

The run verifier checks the supported digests and signatures and replays encoded rules over the supplied receipt history. Once installed with the record available, verification runs without an account or network connection. You still need the expected signing keys, sufficient evidence coverage and a decision about whether to rely on the work.

Files, packages and technical referenceEvidence formats, published runs and control mappings

The files

The record depends on the workflow. Shared jobs and rehearsals export signed bundles that Verify recognizes. Standalone gateways and published runs use the files below; a given run may supply only some of them. Keep each format’s original evidence and verifier instructions together.

standard.json
The signed standard: what the agent may do, the limits, the approvals, the rules over time, and who set it. Its digest is cited by every receipt made under it.
policy/standard.cedar
The policy the gate loads, compiled from the standard. The receipts cite its digest as well.
.protect-mcp-receipts.jsonl
The installed gateway’s signed receipt file in its working directory. Published run bundles may name this receipts.jsonl.
.protect-mcp-log.jsonl
The installed gateway’s decision log: tool, decision, reason, and disclosed metadata. It is not a complete raw-input transcript.
calls.jsonl
Additional call evidence captured by a run harness, when supplied. The installed gateway does not create this file automatically.
manifest.json
A run manifest: the standard, the harness, the task set, the model route, and the digests of everything else in the record.
decisions.jsonl and effects.jsonl
What each receiver admitted or refused, and what actually reached each service, signed by the service.
work-order.json and outcomes.json
What the agents were asked to do and what the services say happened, measured at the services.
model-calls.jsonl and model-attestation.json
Every request to and reply from the model, signed inside the confidential machine, and the machine's attestation.
regrade.json
A second grader's verdicts over the same record, so a score can be recomputed rather than trusted.

protect-mcp

The standalone gateway evaluates configured routes with Cedar and writes signed, chained receipts. Approval support, credential isolation and enforcement coverage depend on the installed version and setup. MIT licensed.

@veritasacta/verify

The verifier. Receipts, standards, runs, decisions, provenance, and attestations, checked offline, with the conformance vectors it is tested against. Apache-2.0.

Published runs and test vectors

The published verified-runs records include provenance, signing keys and model-call evidence for their stated configurations. Inspect each manifest and attestation to determine what that run establishes. The stage two demonstration (six agents, one bounded allocation, three configurations) lives there with every file behind its numbers.

The formats

Receipts, chains, and policy digests follow the Veritas Acta drafts, written to be implemented by anyone; three independent implementations conform today. Standards, run manifests, and admission decisions are documented in the verifier's repository with the vectors that pin them.

Compliance mappings

A control-and-evidence mapping, not a certification: the gate supplies the technical control and the cryptographic evidence; regulatory sufficiency is your compliance and legal determination. The mapping to MiFID II RTS 6, SOC 2, ISO 42001, the EU AI Act, and NIST AI RMF is on the how it works page, beside the enterprise security pack and the control register.

Data paths and trustWho receives your data, key custody and the control register

Who sees what you share

Hosted collaboration

A shared room uses the service

ScopeBlind stores the room’s names, agreement, sample records, actions and results, and runs its sandbox gate and ledger. Browser signing keys stay in their browsers.

Guided
Scripted requests; no live model.
Live agent
The brief and sample records go to the model provider. Your own agent may send them to its configured provider too.
Two-person agreement
Shared mandates and proposals are visible to both people. A private brief is available to its author, their authorized agent, ScopeBlind, and the hosted provider when used. Shared exports omit private briefs.
Rules rehearsal
Tests run in isolated service ledgers. Optional readback sends your text and sample invoice context to the model provider.

Use fictional information. The model proposes work; the gate checks the supported payment route. No bank or outside account is connected.

Configured local gateway

Your setup defines the boundary

The installed gateway evaluates configured tool calls and writes receipts locally. Credential isolation and coverage depend on your agent, hooks and destination setup.

Your agent’s model and tools have their own data paths. Optional reporting sends disclosed receipts to a hosted standard page; exports share the files you select.

The hosted trial does not certify this deployment. Check the installed version, policy, credentials and routes before relying on its controls.

Verification and sharing

Checking a file runs locally

Files opened in Verify are checked in your browser without uploading their contents. A local CLI check can also run offline once its software and files are available.

Publishing a standard or creating a hosted share sends the selected content to the service. Downloaded exports and proof-carrying links disclose their contents to whoever receives them.

A valid signature establishes integrity and the signing key. It does not establish input truth, independent observation or complete route coverage.

On Write, optional model assistance sends the conversation, current readback and tool context through ScopeBlind to the configured provider. Signing a draft and publishing its page are separate actions.

For key custody, source assurance and the control register, see Security and diligence.