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.





open pair, the twelve _overrides.tsx slots, card tools, the @ menu, the queue and the transcript store) is covered on Agent Chat.attach is only for files that need a parser or an upload.attachLimits raises them for a provider that carries more.@libs/util/webkit: the browser's own recognition and synthesis. An app's WebView has neither on Android or iOS and @akanjs/native ships no speech plugin yet, so the chat draws no microphone there.

onClick.section.images: true adds each address, off by default because a gallery is one long URL per thumbnail.{ agent: false }. Base-store plumbing does: routing, the caller's credential and the UI operation. To share a base key, write a plain read, as ThemeToggle does for theme.field.visual keeps a field stored, searchable, formable and rendered, and strips it from every agent read and MCP result. It is cost, not secrecy; nothing is refused over one..exec that awaits the store action finishing the job simply makes the turn that long, and the change report that follows carries the result. No second call.maxTurns budget in seconds on a job measured in minutes. Say so in the desc.AgentAbort.current (the same module slot as AgentProgress). Honouring it is optional; it buys the tool's own cleanup. Import both from akanjs/store, never use-agentic.page().prompt() and reaches MCP clients as a prompt instead.
compact.at estimated tokens, a ceiling on what each turn costs, or the prompt nearing the window the server reports. Then the history above the last keep messages becomes one summary. A provider answers an over-long request with a refusal, not a shorter answer.option.setLlm({ contextWindow }) tells the chat how large it is. The guard holds back the answer ceiling and a 13k buffer below it, and measures with the provider's own count of the last turn, so a Korean conversation the character estimate reads as small is still caught. If the provider refuses anyway, the chat compacts and sends the same turn once more, and learns the window from the refusal.compact={{ at, keep, buffer }} on Agent.Chat sets it, { at: Infinity } leaves only the window guard, { at: 0 } turns all of it off, and /compact runs it on demand keeping nothing.
readScreen stops at the zone's edge.field.visual one layer up, cost rather than secrecy.readScreen({ section }) narrow a read to one container, which beats blocklisting five regions. A footer is last in the document and already past the cut on a long page; the regions worth marking sit above the content.use<MyLlmOption>().