An event is a name a hook can be registered for. When it fires your function is handed the payload below, along with the next it may pass control to, and what it returns has to be the result type on the same row or the runtime treats the hook as having said nothing.
The declarations keep these as two maps, one from event name to payload and one from event name to result. They are joined here by name, because somebody reading about tool.pre wants both halves at once. The map each group came from is on its heading, so a name can be traced back to the declaration it was mined from.
EngineEventOf
#
47 events
Results come from EngineResultOf.
tool.call #
In the first published surface (2.1.259)
- Payload
ToolCallInput- Result
ToolCallResult
Fires when the engine is about to run a tool. Each next(e) runs the hooks beneath, then core (the permission prompt, the tool itself).
{ deny: reason } refuses and { result } answers in place of next: a deny after next(e) resolved undoes nothing it ran; returning with next pending aborts what runs beneath. Managed-settings hooks' deny comes first.
tool.check #
Added in 2.1.269
- Payload
ToolCheckInput- Result
ToolCheckResult
Fires when the engine decides whether a tool call may run, after the tool.call and PreToolUse hooks and before the mode settles an ask.
next(e) resolves to the engine's verdict (rules, mode, the tool's own check, PreToolUse's decision) and runs no tool: return any { decision }, a deny after it too. $.tool.check runs the same chain, executing nothing.
on("tool.check", { tool: "Read" }, () => ({ decision: "allow" }))
ui.render #
In the first published surface (2.1.259)
- Payload
RenderInput- Result
RenderElement
Fires when the engine is about to draw a component: once per input value (props, viewport width), plugin load or $.ui.invalidate("ui.render").
A repaint reuses the answer; a clock invalidates. next(e) resolves to the drawing: return it, wrap it, draw your own, or rewrite props. An invalid tree, or a throw while drawn, draws the engine's; --plugin-dir is told.
ui.resolve #
In the first published surface (2.1.259) · changed in 2.1.267
- Payload
ResolveInput- Result
ElementTable
Fires when the plugins load (not per draw), once per surface, component and plugin: e names the surface and component, never the props.
next(e) resolves to the surface's table, which $.ui.resolve(e) then reads. Return it, one with an element restyled for every other plugin, or one with a key left out (a fragment there); own table: hook skipped.
ui.press #
In the first published surface (2.1.259) · changed in 2.1.268
- Payload
UiPressArgument- Result
UiPressResult
Fires when a Button a render hook drew is pressed on a surface; e is { plugin, element, component, surface }, element the button's key.
next(e) runs the hooks beneath, then core: the element's own onPress closure, in its plugin's environment, resolving to { element }. Return next(e) to let the press through, or { element } to take it.
ui.input #
Added in 2.1.260
- Payload
UiInputArgument- Result
UiInputResult
Fires when an Input a render hook drew changes or is submitted; e is { plugin, element, component, surface, kind, value }.
next(e) runs the hooks beneath, then the element's own onInput or onSubmit with e.value as the chain left it, resolving to { element, value }; next({ ...e, value }) rewrites the typing, an answer takes it.
ui.select #
Added in 2.1.260
- Payload
UiSelectArgument- Result
UiSelectResult
Fires when a Select a render hook drew is picked from; e is { plugin, element, component, surface, value }.
next(e) runs the hooks beneath, then the element's own onSelect with e.value as the chain left it, resolving to { element, value }; next({ ...e, value }) rewrites the pick, an answer takes it.
ui.message #
Added in 2.1.267
- Payload
UiMessageArgument- Result
UiMessageResult
Fires when a Client THIS plugin drew posts from its surface module (surface.post(data)); only this plugin's hooks see it.
next.origin names client: data came from code. Core answers {}; next({ ...e, data }) rewrites the data; { props } hands the posting instance its next props without a redraw. One per instance per frame.
ui.fault #
Added in 2.1.289
- Payload
UiFaultInput- Result
UiFaultResult
Fires when a Client THIS plugin drew failed on a surface: its module did not load, its drawing failed, or its code failed after it had drawn.
Only this plugin's hooks see it; e.phase says when, e.reason why. Observe only: core answers {}. The engine then draws that site again, unasked: fall back by leaving the Client out.
on("ui.fault", ($, e, next) => ($.ui.log(e.reason), next(e)))
ui.scroll #
Added in 2.1.271
- Payload
UiScrollInput- Result
UiScrollResult
Fires before a site's window moves: the person's wheel or scroll keys on a Pane body or the AbovePrompt band, at its edges too; $.ui.scroll.
next(e) moves it to e.offset and draws: {}; next({ ...e, offset }) elsewhere; no next ({} or { deny }) leaves it undrawn, so a hook drawing its own rows under a header moves them by e.by and invalidates.
on("ui.scroll", { requestId: "log" }, ($, e) => (scrollOwnRows(e.by), {}))
ui.focus #
Added in 2.1.271
- Payload
UiFocusInput- Result
UiFocusResult
Fires before a site's focus ring moves: the person's Tab, arrows or click in a Pane or the band; an autoFocus element taking it; $.ui.focus.
next(e) lands it on e.element (absent: one of the engine's stops) and draws: {}; next({ ...e, element }) on another of e.plugin's; no next ({} or { deny }) keeps it where it was, drawn as it was.
on("ui.focus", { requestId: "list" }, ($, e, next) => (mark(e), next(e)))
agent.offer #
In the first published surface (2.1.259)
- Payload
AgentOfferInput- Result
AgentOfferResult
Fires when the engine offers an agent type to the model, in the agent listing and again at dispatch; next(e) resolves to { isOffered: true }.
Return { isOffered: false } to keep the type out of the listing and refuse its dispatch. A hook that fails passes it through.
on("agent.offer", { agent: "Plan" }, () => ({ isOffered: false }))
agent.spawn #
In the first published surface (2.1.259)
- Payload
AgentSpawnInput- Result
AgentSpawnResult
Fires when the Agent tool, or a workflow script's agent() (e.workflow), is about to start an agent, its model not yet resolved.
next(e) resolves to { model }. Return it, next({ ...e, model }), { model } of your own (an alias resolves like the tool's parameter), or { deny: reason }.
prompt.submit #
In the first published surface (2.1.259)
- Payload
PromptSubmitInput- Result
PromptSubmitResult
Fires when a prompt is submitted, before the turn starts. next(e) runs the hooks beneath and the UserPromptSubmit settings hooks, then it enters.
Rewrite with next({ ...e, text }) (the user message on screen follows) or, in its place, stop it with { drop: reason }; a broken plugin never blocks one. Typed while a turn ran, it fires at Enter, with that turn's id.
prompt.fill #
Added in 2.1.268
- Payload
PromptFillInput- Result
PromptFillResult
Fires when a text is about to be put in the prompt box as the person's draft (a plugin's $.prompt.fill); next(e) writes it by e.mode.
replace over the draft, append after it, insert at the cursor; rewrite text or mode going down, or answer { isFilled: false } without next to keep it out, as core does under a dialog or headless.
on("prompt.fill", ($, e, next) => next({ ...e, text: e.text.trim() }))
prompt.suggest #
Added in 2.1.268
- Payload
PromptSuggestInput- Result
PromptSuggestResult
Fires when a text is proposed as the prompt box's dim suggestion, Tab to take: the engine's guess after a turn, or a plugin's $.prompt.suggest.
next(e) shows it: { isShown }. Rewrite with next({ ...e, text }), or answer { isShown: false } without next to drop it; core answers that too while the box holds text or a turn runs.
on("prompt.suggest", () => ({ isShown: false }))
prompt.edit #
Added in 2.1.277
- Payload
PromptEditInput- Result
PromptEditResult
Fires when the person edits the main prompt box: a key the editor took as an edit, or a paste; next(e) resolves the box the editor shows.
e is the draft before and the splice (start, end, inputText); a burst of keys is one edit. Rewrite inputText going down or the box coming up; { text: e.text, cursor: e.cursor } without next consumes.
on("prompt.edit", ($, e) => ({ text: e.text, cursor: e.cursor }))
prompt.change #
Added in 2.1.300
- Payload
PromptChangeInput- Result
PromptChangeResult
Fires after the main prompt box's text changed and no prompt.edit carried it: a recalled history entry, a clear, a plugin's fill.
e is the box as it stands and e.origin who changed it. Observe only: the change is in the box. One per batch of changes, one at a time.
on("prompt.change", ($, e, next) => ($.ui.status(e.origin.kind), next(e)))
prompt.autocomplete #
Added in 2.1.292
- Payload
PromptAutocompleteInput- Result
PromptAutocompleteResult
Fires as the person types in the main prompt box, for the token at the cursor; next(e) resolves to { suggestions }, rows for the typeahead.
Nothing waits on it: the engine's own rows draw first and these join beneath them, unhighlighted, for the word still being typed. Taking one writes its text over the token. Only while a plugin hooks it.
on("prompt.autocomplete", () => ({ suggestions: [{ text: "#123" }] }))
prompt.section #
In the first published surface (2.1.259)
- Payload
PromptSectionInput- Result
PromptSectionResult
Fires once per named section of the system prompt, when the engine assembles it; next(e) resolves to { text } as core computed it.
e.name is the section's id, on every model the one prompt.compose lists. Cached, so keep it steady: after $.ui.invalidate("prompt.section") a changed answer goes out next turn over the text the main thread sent, which loses its thinking and the cache. A failed hook passes through.
on("prompt.section", { name: "memory" }, () => ({ text: null }))
prompt.context #
In the first published surface (2.1.259)
- Payload
PromptContextInput- Result
PromptContextResult
Fires once per conversation, when the engine computes the context blocks its first user message carries; next(e) resolves to { blocks }.
Append, drop, reorder or rewrite with next({ ...e, blocks }); the answer stands until $.ui.invalidate("prompt.context") or a re-read (compaction, /clear). PromptContextResult says what the model is sent.
on("prompt.context", () => ({ blocks: [] }))
prompt.compose #
Added in 2.1.286
- Payload
PromptComposeInput- Result
PromptComposeResult
Fires when the engine renders a system prompt; next(e) resolves to { sections }, each { id, text, scope }, in the order they are sent.
The ids depend on the prompt composed (lean, bare in e.traits): read them off next(e). Append (as session), replace, reorder or drop; a list with a shared section after a session one skips the hook.
prompt.attachment #
Added in 2.1.277
- Payload
PromptAttachmentInput- Result
PromptAttachmentResult
Fires once per message the engine injects for the model on its own (a reminder, a mode transition, a mentioned file), as a request carries it.
next(e) resolves to { text }; { text: null } leaves it out. The answer holds per attachment for the process (asked again on resume or $.ui.invalidate); the transcript keeps the engine's record.
on("prompt.attachment", { type: "todo_reminder" }, () => ({ text: null }))
prompt.mention #
Added in 2.1.290
- Payload
PromptMentionInput- Result
PromptMentionResult
Fires once per path a prompt names after an @, a directory aside, before the engine reads it; next(e) reads it and resolves { type }.
No tool.call is raised for this read. Add context to what next gave, read another path with next({ ...e, path }), or answer { deny: reason } so nothing is read.
on("prompt.mention", { path: /\.env$/ }, () => ({ deny: "a secret" }))
tool.describe #
In the first published surface (2.1.259)
- Payload
ToolDescribeInput- Result
ToolDescribeResult
Fires when the engine first renders the tool's schema in a session; next(e) resolves to { description, isDeferred? }.
An MCP tool behind ToolSearch fires twice: its short text, then the one loaded. Cached until $.ui.invalidate("tool.describe"): a changed answer for a tool a thread has sent goes out next turn over that text, which loses its thinking and the whole prompt cache.
on("tool.describe", { tool: "Bash" }, ($, e) => ({ ...e, description }))
on("tool.describe", { tool: "Monitor" }, pin) // {...e, isDeferred: false}
command.run #
Added in 2.1.265
- Payload
CommandRunInput- Result
CommandRunResult
Fires when a slash command is about to run (/name args typed, or a plugin's $.command.run); next(e) resolves to { text }, its output.
Core is the engine's command (a registered one has none). Rewrite args with next, or return { text } without it to answer in its place; one after next replaces a printed output, not a panel or prompt it opened.
on("command.run", { command: "hello" }, () => ({ text: "hello" }))
command.describe #
Added in 2.1.265
- Payload
CommandDescribeInput- Result
CommandDescribeResult
Fires once per command, when the engine lists it for the typeahead and /help; next(e) resolves to { description, argumentHint, isHidden }.
Listed answers are cached for the session until $.ui.invalidate("command.describe"). A hook that fails passes it through.
on("command.describe", ($, e, next) => next({ ...e, isHidden: true }))
config.set #
Added in 2.1.269
- Payload
ConfigSetInput- Result
ConfigSetResult
Fires when a /config row is about to change, from the menu or a plugin's $.config.set; next(e) resolves to { value } once written.
Return { deny: reason } to leave the row as it is (the menu says why), or next({ ...e, value }) to clamp it; a value of the wrong kind for the row is refused. A row a trusted source owns is core's to refuse.
on("config.set", { key: "theme" }, () => ({ deny: "the theme stays" }))
config.describe #
Added in 2.1.269
- Payload
ConfigDescribeInput- Result
ConfigDescribeResult
Fires once per /config row, when the menu lists it and for $.config.list; next(e) resolves to { label, description, isHidden }.
Relabel, re-describe or hide with next({ ...e, isHidden: true }); the answers are cached until $.ui.invalidate("config.describe") or the loaded plugins change. A hook that fails passes the row through.
on("config.describe", { key: "tips" }, hide) // answers isHidden: true
telemetry.log #
Added in 2.1.284
- Payload
TelemetryLogInput- Result
TelemetryLogResult
Fires when a record is about to be logged to the destination e.to names: a built-in's $.telemetry.log, or the engine's own events.
e.to is pinned: a hook rewrites what the record carries, never where it goes. next(e) resolves { value: undefined }; { deny } rejects the caller. Beneath the hooks the engine exports its own collector records.
on("telemetry.log", { to: "collector" }, ($, e, next) => next(e))
telemetry.mark #
Added in 2.1.284
- Payload
TelemetryMarkInput- Result
TelemetryMarkResult
Fires when one use of a feature is marked ($.telemetry.mark), as the CLI's own feature events mark one; always for anthropic, no to.
next(e) resolves { value: undefined }; { deny } rejects the caller. The engine does nothing with a mark: the built-ins hooked here do.
on("telemetry.mark", { kind: "bad" }, ($, e, next) => next(e))
skill.prompt #
In the first published surface (2.1.259)
- Payload
SkillPromptInput- Result
SkillPromptResult
Fires when the engine expands a skill's prompt for the model (/name, the Skill tool, a preload); next(e) resolves to { text } as computed.
Return { text } with the text the model reads instead. A hook that fails passes it through.
on("skill.prompt", { skill: "commit" }, () => ({ text: "A haiku." }))
attribution.text #
In the first published surface (2.1.259)
- Payload
AttributionTextInput- Result
AttributionTextResult
Fires when the engine composes a git text the model is to write (kind: commit, pr, exemption, remedy); next(e) resolves to { text }.
Return { text } with the text the model reads instead. A hook that fails passes it through.
on("attribution.text", { kind: "commit" }, () => ({ text: "" }))
session.start #
In the first published surface (2.1.259)
- Payload
SessionStartInput- Result
SessionStartResult
Fires once per process for each loaded plugin, before the first prompt, then once per fresh load of one (never /clear); next(e) is { cwd }.
Observe. The first is awaited: a $.tool.register is listed by turn one. A later one runs its hooks alone: an enable, a worker respawn, or a reload (changed modules only; all if one hooks engine.create/plugin.register).
on("session.start", ($, e, next) => $.tool.register(t).then(() => next(e)))
session.receive #
Added in 2.1.267
- Payload
SessionReceiveInput- Result
SessionReceiveResult
Fires when a delivery reaches the session, before it is queued: a relay's event, a peer's message, a Remote Control prompt, room events; { text }.
Rewrite with next({ ...e, text }), or return { consumed: reason } to take it: nothing is queued, shown or read by the model. origin, event and agentId pass on as received; session.send is its dual.
on("session.receive", { origin: "peer" }, () => ({ consumed: "muted" }))
session.append #
Added in 2.1.285
- Payload
SessionAppendInput- Result
SessionAppendResult
Fires once per row a conversation of this session keeps (a prompt, a response block, a tool result, a notice), before it is stored.
next({ ...e, message }) rewrites content: stored and sent after. The screen, an SDK stream or Remote Control may show the row just before its rewrite; the model and the transcript file never read that form.
on("session.append", { door: "tool-result" }, ($, e, n) => n(scrub(e)))
session.send #
Added in 2.1.280
- Payload
SessionSendInput- Result
SessionSendResult
Fires when a plain-text message is about to leave this conversation for another agent or session (the SendMessage tool, or $.session.send).
e.origin says who sends, e.agentId which loop. Rewrite text or readdress to with next (a new to is judged again); { isDelivered: false, reason } without next refuses it. next(e) resolves queued.
on("session.send", ($, e, next) => next({ ...e, text: redact(e.text) }))
session.compact #
Added in 2.1.267
- Payload
SessionCompactInput- Result
SessionCompactResult
Fires when the conversation is about to be compacted (/compact, the threshold, a plugin, or ahead of time); next(e) resolves { messages }.
Rewrite instructions or messages on the way down, the messages on the way up, or answer { messages } of your own; { skip: reason } leaves the conversation as it is. trigger passes on as received.
on("session.compact", { trigger: "precompute" }, () => ({ skip: "off" }))
session.attach #
Added in 2.1.269
- Payload
SessionAttachInput- Result
SessionAttachResult
Fires when a remote client joins the session's roster of attached surfaces: it said so (ui_attach), or it first asked to draw.
Observe (a phone joined: draw the lobby); next(e) resolves to { clientId }, a different return changes nothing. $.session.surfaces() reads the roster; a render hook still reads e.surface per ask.
on("session.attach", { surface: "mobile" }, ($, e, next) => next(e))
session.detach #
Added in 2.1.269
- Payload
SessionDetachInput- Result
SessionDetachResult
Fires when a client leaves the roster: it detached, or the session ended with it attached (e.reason). Observe; next(e) echoes { clientId }.
With reason end it runs inside session.end's one short bound: there next.budget reads that bound and next.signal aborts at it.
session.measure #
Added in 2.1.275
- Payload
SessionMeasureInput- Result
SessionMeasureResult
Fires when the engine measures the session and a unit moved: after each main-thread turn, and when a rate-limit window moves a whole point.
Observe; next(e) echoes { changed }. $.session.usage()'s figures, pushed, not polled: compare them with your own threshold here, call the op for the breakdown. One at a time, a burst folding into one more.
on("session.measure", ($, e, next) => (toastPast90(e.rateLimits), next(e)))
session.end #
Added in 2.1.275
- Payload
SessionEndInput- Result
SessionEndResult
Fires once when the session ends (exit, /clear, resume, logout, signal, a -p run done), after its SessionEnd settings hooks; e.reason says which.
next(e) runs the engine's end step, { sessionId }; e.resume.id is --resume's. Exits stay fast whatever is loaded: the whole chain shares one short wall-clock bound, which next.budget reads (SessionEndInput).
on("session.end", async ($, e, next) => (await save(next.budget), next(e)))
plugin.register #
Added in 2.1.269
- Payload
PluginRegisterInput- Result
PluginRegisterResult
Fires once per hooks module about to join the chain, at load (the set folded and built, nothing swapped in) and at reload; core allows.
Return { refuse: reason } and it never joins: no hook, no noun, no tool of it; the debug log names who refused. Its judges, $ whole, are the plugins admitted before it and the binary's; judge by tier and uses.
on("plugin.register", { tier: "user" }, () => ({ refuse: "managed only" }))
turn.start #
In the first published surface (2.1.259)
- Payload
TurnStartInput- Result
TurnStartResult
Fires when a model turn begins, main's or a subagent's (e.agentId), before its first model call; next(e) resolves to { turnId }.
Observe: a different return changes nothing. For the main loop alone, return next(e) first when e.agentId !== undefined. An agent's start skips the hooks its spawn was nested in, as its turn.steps do.
turn.step #
In the first published surface (2.1.259)
- Payload
TurnStepInput- Result
TurnStepResult
Fires when the engine is about to send a model request of a turn, main's or a subagent's (e.agentId); next(e) resolves to the whole response.
next({ ...e, model }) or effort sends another; the turn, the index and the message count are pinned. An answer without next sends no request. It streams (StreamNext): the hook's budget counts its own code alone.
turn.complete #
In the first published surface (2.1.259)
- Payload
TurnCompleteInput- Result
TurnCompleteResult
Fires when a model turn has ended, at the point its duration is reported; next(e) resolves to { text }, the answer. e.reason says why.
Return { text } with a different text to show it beneath the answer (a synopsis, a TL;DR line); the transcript's record is never rewritten. A hook that fails leaves the answer as it was.
engine.create #
In the first published surface (2.1.259)
- Payload
EngineCreateInput- Result
EngineCreateResult
Runs while $ is being built, once per load or reload of this plugin and before any other hook of it; next(e) resolves to $ built so far.
A step may ADD nouns and, outside user, WITHHOLD them (leave one out, or return without next). It fails, and its plugin unloads, when it REPLACES another's; in user, also past its own stub, or adding a seated name.
OpEventOf
#
45 events
No result map is declared for these, so a hook here returns nothing the runtime reads.
model.complete #
In the first published surface (2.1.259) · changed in 2.1.292
- Payload
ModelCompleteInput
The argument of $.model.complete(request, { signal }), its text as strings and its blocks beside them (ModelCompleteInput).
The signal does not cross, it aborts the call.
model.fork #
In the first published surface (2.1.259)
- Payload
ModelForkRequest
The argument of $.model.fork(request).
audio.speak #
In the first published surface (2.1.259)
- Payload
SpeakRequest
The argument of $.audio.speak(text, { voice }).
session.cwd #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.session.cwd().
session.model #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.session.model().
session.id #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.session.id().
session.messages #
In the first published surface (2.1.259) · changed in 2.1.280
- Payload
SessionMessagesArgs
The argument of $.session.messages(args): {} for the main conversation, { agentId } for one of its agents, as for the form.
session.repo #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.session.repo().
session.surface #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.session.surface().
session.usage #
Added in 2.1.267 · changed in 2.1.271
- Payload
SessionUsageArgs
The argument of $.session.usage({ breakdown, columns }).
prompt.paint #
Added in 2.1.311
- Payload
PromptPaintArgs
The argument of $.prompt.paint(...): the draft and this plugin's runs.
tool.register #
Added in 2.1.268 · changed in 2.1.293
- Payload
RegisteredToolSpec
The argument of $.tool.register(spec).
agent.list #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.agent.list().
agent.register #
Added in 2.1.274
- Payload
AgentSpec
The argument of $.agent.register(spec): the agent type as the plugin defined it. A hook above rewrites any of it; the type stays the caller's.
ui.open #
Added in 2.1.265
- Payload
PaneOpenArgs
The argument of $.ui.open({ id, title, focus }); a hook above the opener may retitle it or refuse it with { deny }, never rename it.
ui.close #
Added in 2.1.265
- Payload
PaneCloseInput
The argument of $.ui.close({ id }) with origin plugin; the engine raises it too, for the person (person) and an unload (unload).
theme.set #
Added in 2.1.319
- Payload
ThemeSetArgs
The argument of $.theme.set(attributes): the attributes themselves.
ui.copy #
Added in 2.1.280
- Payload
UiCopyArgs
The argument of $.ui.copy({ text, surface }), surface filled with the session's first when left out; rewritable, deniable, answerable.
ui.view #
Added in 2.1.300
- Payload
SiteView
The argument of $.ui.view({ agentId }): whose transcript the main view is to show, none for the main conversation; rewritable and deniable.
ui.blit #
Added in 2.1.271
- Payload
UiBlitArgs
The argument of $.ui.blit(...): a Raster's cells or a keyed Image's source; a hook above may rewrite either with next, or { deny }.
fs.ancestors #
In the first published surface (2.1.259)
- Payload
FsAncestorsRequest
The argument of $.fs.ancestors({ names, of, below }).
store.keys #
In the first published surface (2.1.259)
- Payload
NoArgs
The argument of $.store.keys().
state.get #
Added in 2.1.281
- Payload
StateGetEvent
The argument of $.state.get(ref): the reference itself, plugin, key and a family member's id; identity, pinned.
state.set #
Added in 2.1.281
- Payload
StateSetEvent
The argument of $.state.set(ref, value, { ifVersion }): the reference, the value, the condition, and previous, what stood there (the host's).
A hook above rewrites value with next({ ...e, value }); the reference is identity, pinned. Raised by the value's owner alone. A { deny } after next(e) was answered, a .catch's too, fails the hook.
clock.sleep #
Added in 2.1.271
- Payload
ClockWait
The argument of $.clock.sleep(ms, { signal }); the signal does not cross, it aborts the dispatch.
clock.after #
Added in 2.1.271
- Payload
ClockWait
The argument of $.clock.after(ms, fn): the wait before fn, which stays in the plugin's environment and runs once the dispatch resolves.
clock.every #
Added in 2.1.271
- Payload
ClockWait
The argument of $.clock.every(ms, fn), dispatched once per period: fn runs each time a dispatch resolves, and the next period is asked.
process.spawn #
Added in 2.1.280
- Payload
ProcessSpawnRequest
The argument of $.process.spawn(request): the request itself.
A hook's { deny } rejects the caller's stream and lets the child go (one still running is killed). Once a child of the call handed up a piece or its exit, the rejection says it started or ran.
settings.read #
Added in 2.1.267 · changed in 2.1.304
- Payload
SettingsReadInput
The argument of $.settings.read({ source }), and the layers the read is made of, which the engine fills; rewritable, deniable.