Skip to main content
The Reintersect agent works with installed apps the way members do. It reads the blocks and references in a conversation, inserts your blocks, and runs your actions. Anything that changes state waits for a member to approve it. These tools are offered in agent chats and in coding agent sessions. The circle agent, which answers on its own in circles, only gets tools that need no approval.

Reading blocks

When the agent reads a conversation, each block appears as text inside a tag that names your app and the block type:
  • The text is the block’s stored projection: the agent text of every component in the tree. See Agent text.
  • Text from your app is marked as data, so it can’t pose as instructions.
  • Live counts from viewer inputs are added at read time.
  • Parts limited by audience appear only when the member the agent works for passes that audience.
  • status is open, closed (final) or removed.
  • The agent reads at most 20 blocks live per turn; beyond that, or when a block can’t be loaded, it sees the block’s title and summary.
References appear as their title, status, summary and URL. A restricted reference the member can’t see appears as its URL only. You can check what the agent reads in the playground’s Agent text view and in tests with textOf(block.tree).

Inserting blocks

Every block with insertable: true becomes an insert tool named integration_insert_<slug>_<type>. The tool’s description comes from the block’s title and description, and its arguments are the block’s props schema plus an optional circle:
Schema descriptions become argument descriptions, so describe each prop in terms the agent can act on. Where the block lands depends on where the agent runs:
  • Agent chats can’t hold blocks. The agent prepares the block and shows a preview in the chat; the member places it in a conversation with one click, or copies it. A prepared block nobody places is removed after 24 hours.
  • The circle agent inserts the block into its reply in the circle.
Either way, the member the agent works for is the block’s creator, and your app receives block.created with origin: "agent".

Running actions

Each action rendered in a block becomes a tool named integration_action_<slug>_<type>_<action>. The agent calls it with the block’s id, and with args and input when the action takes them:
The agent can only run an action that is rendered in the block’s current version, with args that match a button or menu item you bound, so it can do exactly what a member could click. If several bindings exist, it must say which; if it omits args, it gets the only one. input (form values) is free text the agent chooses, so actions with an input schema always ask for approval. The action runs as the member the agent works for, with the same handler, validation and state update as a button click. To keep an action away from agents, set agent: false; members can still use it from the block.

Approval

An action call pauses the agent and shows an approval card in the chat unless all of these hold: the action is readOnly, it isn’t destructive, it has no input, and it comes from a workspace install. Development installs always ask.
  1. The card shows your app’s name and icon, what the action will do and a preview of the block it acts on.
  2. Only the member who started the agent’s turn can approve or deny it.
  3. On approval, the action runs as that member: your handler receives them as actor. The result goes back to the agent, which continues its turn.
  4. A card that nobody answers expires after 15 minutes, and the agent is told the action didn’t run.
Approval doesn’t replace your own checks. The approving member is the actor, and your handler should authorize them as it would for a click. See Authorization. A readOnly action may only return notice, fieldErrors, openUrl and options; Reintersect drops any state, tree, actions, final, notify or revalidate it returns, so a read-only hint can’t be used to change the block.

Hints

Changing an action’s readOnly or destructive hint is part of the version’s access, so a version that widens it waits for an admin to review it. See Publishing new versions.

MCP tools

If your app provides an MCP server, its tools join the agent’s tools for members who have connected to it. Tools annotated readOnlyHint and openWorldHint: false run without asking; other tools show an approval card. Workspace admins can set each tool to ask first, always ask, or run without asking in Settings → Workspace → Integrations. When a tool asks the member for input (an MCP elicitation form), the agent shows the form in the chat; requests that look like they ask for a secret are refused.

Writing for agents

The agent knows only what your app tells it, so give it enough to act on:
  • Write the block summary as one sentence that states the current situation: “Ship v2: 3 go, 1 no go, deadline Thursday 17:00”. It’s also what notifications and Slack peers show.
  • Give every action a description that says what it changes and when to use it.
  • Describe props and args with schema descriptions, including units and allowed values.
  • Give icon-only buttons a label, images alt text, tables a label and charts a title. They all become agent text.
  • Return a notice from actions. The agent reads it as the action’s result.

Building apps with a coding agent

Members can also ask a coding agent in Reintersect to build an app for them. See Agent builder.