reynforce

Every tool, and who is shown it

Last updated

An agent's key is shown four tools — read the register, ask permission, hear how a request for approval went, and report what was actually said — and every tool that changes what the company stands behind needs a signed-in person. The table below is generated from reynforce/mcp/server.py's NEEDS, the one mapping of tool to scope, and tests/docs_checks.py reads it: a tool added there without a row here fails the suite, and a row naming a tool that does not exist fails too.

toolscopean agent?what it answers
search_claimsregister:readyesthe claims this company stands behind, with each one's status. Capped, because a register with ten thousand entries should not arrive in one reply
check_actioncheckyeswhether an action is permitted, and what to say instead when a claim it cites is not usable. The record is written as a side effect
report_saidcheckyesafter a message went out or a call ended, the words themselves, read by our own detector and set beside what the check declared. Read and not kept: each commitment found is kept as a quotation of at most 1,000 characters, and a difference is a warning, never a block
approval_statuscheckyeshow a request for approval went, by the id check_action handed back: waiting, approved, approved_with_change with the change, declined, or timed_out — never a yes. Reads and changes nothing
waiting_for_meregister:writenothe requests agents are waiting on that this person's role may answer, oldest first, each with what the agent wants, which rule asked and how long it has waited
decide_approvalregister:writenoapproves, declines, or approves with a change, with an optional note — one answer per request, recorded under the person's name. An agent can never answer, whatever it holds
propose_claimsregister:writenoturns a document into proposed claims. Never entries — a proposal nobody has accepted is not something the company stands behind
assign_ownerregister:writenosets who stands behind a claim. A claim with no owner is one no agent may use
accept_claimregister:writenoaccepts one proposed claim, which is the act that makes it citable
confirm_claimregister:writenoconfirms a claim is still true, which resets its revalidation clock without bumping its version
raise_contestregister:writenosays a claim is wrong or contradicted. A contested claim is unusable until the contest is resolved
start_agent_draftregister:writenostarts a draft agent for one kind of work, when somebody sets an agent up in their own Claude. A draft is not an agent: it counts towards no plan and lapses 14 days after its last change
update_agent_draftregister:writenosets what the draft does, who it talks to and how, what runs it, and the promise row and contact limits it suggests — checked by the same rules as the screen. The suggestions are saved by a person on the screen
agent_draftregister:writenoreads a draft back: its choices, when it lapses, what is left, and the facts it relies on with how many are usable now
setup_instructionsregister:writenohow to set up an agent from a chat, the same words as this connector's prompt Set up an agent with Reynforce — for a client that shows tools and not prompts
finish_linkregister:writenothe address of the Reynforce screen with the draft loaded. The agent is made there, and what it connects with is shown there once — never in a chat
setup_guideregister:writenowhat is left to set up, as the workspace's Ready to go reads it: rules approved, five usable facts, an approver named, an agent connected, its first check — each done or not, with the tool that does it
read_rulesregister:writenothe rules agents follow, in plain words — six questions with their answers, who answers each Ask first, whether a person has approved them — and the version a change must quote. Reads and changes nothing
set_ruleregister:writenoanswers one of the six questions — may, ask or never — for every agent, recorded under the person's name, through the same save as the settings page
set_approverregister:writenonames the directory group asked when an agent must ask first on one topic, recorded under the person's name
approve_rulesregister:writenothe person stands behind the rules exactly as they read them, recorded under their name against that version
connect_platformregister:writenoa platform's steps, in its own field names, and the address of the Reynforce page where its key is made. Never a key: it is shown once, on that page, and never in a chat
connection_statusregister:writenowhether an agent from a platform has made its first check, and why a recent attempt was refused. Names agents, never keys

Why the split is where it is

An agent reads and asks; a person decides. Four of them are acts the register records a person taking — reynforce/mcp/tools.py's ACTS names them with the verb each one writes — and an agent key cannot hold the scope they need.

The draft tools are a person's too, and so is the setup prompt, and so is accepting a draft's facts: accept_claim takes one fact at a time, and there is no bulk accept in a chat — accepting every fact at once is a button on the Reynforce screen, where the person can see each one.

check_action is the exception that proves it: it is the agent's first writing tool and it writes no claim. report_said is the second, for the same reason: what it writes is our detector's reading of the words handed over, never a claim and never a change to a check. What it writes is a record of the asking, which is why it needs check rather than register:write.

What a tool never does

answer around an unusable claimthe three unusable cases all escalate and tell the buyer. Answer anyway is not a setting — it is not expressible
hide a refusalan unusable claim is marked and never filtered out, so you can see the claim you wanted and why you may not cite it
write a commitment you sendthere is no such tool. See connecting.md