Skip to content

agent.ask.v1

Ask a bounded agent question

Records one evidence-backed question against the pane in scope and waits until its exact human or agent recipient chooses an offered typed value, or until the caller-declared deadline expires. The record belongs to the pane rather than the asking process; this intent schedules and types nothing into a terminal.

At a glance

Callable byagent, cli, plugin
Effectwrite — Changes state.
Confirmationnever — Runs without asking.
Idempotencynone
Leaves the machineno
Provided bydev.tenon.core
Contract classsealed

Input

PropertyRequiredTypeConstraints
choicesyes{id, label, value}[]items 1–16
evidenceyes{label, url}[]items 1–16
questionyesstringlength 1–8192
recipientyes{kind} | {kind, principalID, sessionRevision}
timeoutMsyesintegerrange 1–55000

Output

PropertyRequiredTypeConstraints
questionIDyesstringformat uuid, length 36–36, pattern-checked
statusyes"answered" | "expired"
valueyesboolean | integer | number | string | null

Errors it can return

These are this contract’s own failures, on top of the lifecycle errors every intent can settle with. See Errors.

  • dev.tenon.core.agent-question-capacity
  • dev.tenon.core.agent-question-pane-closed
  • dev.tenon.core.agent-question-pending

Call it

From a plugin — declare it in intents.uses first:

js
const result = await tenon.intents.send("agent.ask.v1", {})
if (!result.ok) throw new Error(result.error.code)

From a shell:

sh
tenon-cli intent send agent.ask.v1 --input '{}'

Ask your own build for this same contract with tenon-cli intent describe agent.ask.v1.