Typed, not guessed
The agent asks the human a structured question instead of inferring intent. Answers come back validated and typed.
The agent asks the human, typed. A portable spec, a reference implementation, and an 84-fixture conformance suite for the Model Context Protocol.
Six properties define the standard. Read them like a spec drawing — each cell is one guarantee, wired to the next.
The agent asks the human a structured question instead of inferring intent. Answers come back validated and typed.
ask_text, ask_select, ask_code_diff, ask_rank, ask_slider, and five more — one shape per kind of decision.
apps · url · elicitation · tui. The same Ask degrades gracefully — a rich panel where it can, plain text where it must.
A slow-ask router upgrades to a link or panel before a round trips the ~30s call timeout. The agent keeps moving.
Signed one-time HMAC links, origin allowlist, strict CSP on every panel (frame-ancestors none), zero telemetry.
A standard is what passes the suite. Every tier and type is pinned by fixtures — testable, portable, versioned at v0.1.
Every Ask is a typed node on the schema. Each control here is real — operable by pointer and keyboard. Answer one and the node selects green; the spec types itself in.
0 of 10 question types answered.
ask_textA free-form string.
ask_selectOne, from a closed set.
ask_confirmA binary gate — yes proceeds.
ask_code_diffAccept or reject the hunk. The wedge.
ttlSeconds: 900,ttlSeconds: 120, oneTime: true,ask_numberA bounded value: min, max, step, unit.
ask_ratingAn ordinal score on a fixed scale.
ask_sliderA continuous value across a range.
ask_dateAn ISO-8601 calendar date.
ask_rankOrder the options by priority.
safetylatencyreachask_colorA color, validated as safe.
More types arrive as community contributionseach validated by the same conformance suite.
Every control is real and keyboard-operable. Answer it — answers land green, and the next prompt lands in a model that knows.
elicit · ask_set0 × 4ask_code_difftimeout: 30_000,timeout: 30_000, upgradeOn: 'slow-ask',tier: 'elicitation',tier: 'apps',ttlSeconds: 900,ttlSeconds: 120, oneTime: true,decide every hunk to resolve this field
ask_ranklatencyfidelitysafetyreachask_sliderask_confirmawaiting answers
The same typed Ask renders in the richest tier the host supports, then steps down — apps → url → elicitation → tui — never failing the call.
Apply this migration to the production database?
20 tables · irreversible · runs immediately
When a single round would exceed the ~30s per-call timeout, the slow-ask router upgrades the Ask to url or apps automatically — the human keeps answering, the call never times out.
Drop one block into your MCP config. The same snippet wires up every client — no per-host setup, no flags, no SDK. Or run it once, no config at all:
npx -y @elicitkit/server{ "mcpServers": { "elicitkit": { "command": "npx", "args": ["-y", "@elicitkit/server"] } }}Elicitkit is an open standard for typed elicitation in the Model Context Protocol — a portable spec, a TypeScript reference implementation, and an 84-fixture conformance suite. If it passes the suite, it conforms. Nothing else counts.
84/84
fixtures passingBuild on the standard.
Run the suite, ship a conforming server, or shape v0.2. The spec is open and the process is in the public.