YouBothAgent▾
You — Business rules and flows you own. Read these yourself.
Both — Know the idea; your agent follows the details.
Agent — Conventions and references your agent follows. Look up as needed.
builtins={["readScreen", "readState", "highlight"]}. Without navigate and goBack it cannot leave.builtins leaves it alone.askUser is not on this list. It belongs to the session, so builtins never removes it.input recipe slot.remove* tool reaches by default.askUser card, which shows the choices while a free-text answer goes in the composer./ commands and @ references.dangerouslySetInnerHTML.lang is the fence's language.AgentChat is the last resort. It replaces the whole panel and has no exported default to compose.AgentSteps is the one slot that is not a re-skin. It receives a whole turn, so it can fold the steps into a <details> and leave the final answer outside:isRunning is true only for the last turn while the session works on it. Without it, a live progress line and a finished turn's header look the same.DefaultSteps draws the same flat bubbles into a Fragment, so it takes no className and no existing layout notices it.cancel(reason) arrives as an error instead, so a dismissed card is something the agent can respond to..card() at all. The card in front of the user is already the asking.ReferenceSource@ menu, so pass it through l().signal aborts when the user keeps typing.type decides what leaves the browser. It uses st.expose's vocabulary: the value is masked by the model class you name, so its hidden, secret and visual fields never travel.Light class usually does not, and a reference masked by one arrives without the field that was the reason for pointing.search needs a query the browser may call. Here it is a slice wrapping a q.search() filter, which belongs only on data that is safe to enumerate.reference holds functions, which a server layout cannot pass, so the chat lives in a small component under ui/.field(Any) reads as a paragraph, not as an editor document:Agent.Zone or an AgentProvider. A root Agent.Chat beside children does not share its session, and outside a zone the call only logs a warning.path names the field. It is a dotted path into the document, so two fields of one document are two separate references.@[label](mention:…) token.mentions={false} keeps the plain textarea. Use it when you override the composer or want to see the tokens you send; the draft string is identical either way.page().prompt(), which MCP clients list and the in-page chat does not./word that is not one of the six is sent to the model as ordinary text./retry and /compact answer that the agent is busy.shortcut={false}./help text appended plainly would come back next turn as something the assistant believes it said.Agent.Zone's onSession hands it over, useAgent() reads it inside a zone, and a composer override receives it as the session prop.persist, recall survives a reload. The ↑/↓ list is seeded from the restored transcript, and the half-written draft you walked away from comes back at the end of the walk.Agent.GuideAgent.History inside an Agent.Zone or AgentProvider; outside one it throws while rendering.Agent.Zone the chat binds to the zone's session, so persist, builtins and instructions set on that Agent.Chat are ignored.onCompact follows compaction. It is called after a compaction replaced messages with one summary, which is where a host with its own server-side summary moves its watermark.Agent.History receives the messages as they are, content included.st.tool and makes one store key readable by reading it, and nothing is derived from a store class.false draws no floating button, for a shell that already has its own entry point.false drops the header bar and header for an inline chat; /new still clears.?prompt= value goes.false gives the chord back to the browser.className reaches both surfaces.