What Reintersect owns
You choose components and describe what things are: structure, numbers, states, and whether an action is destructive. Reintersect owns how they look:- Spacing, typography, colour, dark mode and motion. Gaps come from how siblings relate, and the same tone always pairs its colour with a glyph and a spoken word.
- Which button is primary. It’s the first button in the root
Actionsthat isn’t destructive, worked out for each viewer from the buttons they can see. - Layout at every width. Blocks adapt to the space they’re given: a narrow table becomes cards, columns stack, and long labels wrap and clamp with a way to read the full text.
- Number, date and duration formatting in each viewer’s locale.
- Pending, error and empty states. A clicked button shows progress inside the button and nothing else changes until the result arrives. Success shows inline, without a toast.
- Confirm dialogs for destructive actions, focus handling and keyboard behaviour.
- The attribution line with your app’s icon and name.
Modes
Every block is drawn in one of three modes, chosen per viewer:
Reasons a member can’t act include: no write access to the circle, the block is final, and the
install is suspended or uninstalled. A click on a block whose development server is offline fails with
an inline error.
Read-only views
Share pages and connected workspaces draw the full stored tree with actions removed. Reintersect never calls your app for someone viewing a share page, so anonymous visitors can’t trigger renders, actions or searches. What changes in read-only mode:
Design blocks so the read-only version still makes sense. Put the facts in visible components and
keep controls in
Actions, so a share page still shows the state of the work after the buttons are
hidden.
Connected workspaces
When a circle is connected to another Reintersect workspace, people there see a read-only copy of the block that updates when the original changes. Actions run only in the workspace that installed your app. When a circle is connected to a Slack channel, Slack shows the block’s summary and a link to it.Agent text
Every block has a plain-text projection that the Reintersect agent reads. Reintersect computes it from the stored tree when the block is stored, so your app isn’t called when an agent reads a conversation. For a block in the conversation it’s working in, the agent sees something like:statusisopen,closed(final) orremoved.- Text from your app is marked as data from your app, so it can’t pose as instructions to the agent.
- Components that hold text contribute it; containers join their children. See How each component reads as text.
- Data components describe their content: a
StatusgivesStatus: label, aTableorChartgives a Markdown table, anImagegives itsalttext. - Choice groups with host results include the current counts.
- Parts restricted by
audienceare left out of the shared text. When the agent works for a member who passes the audience, that member’s projection includes them. - An 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.
textOf(block.tree) in a test.