Elicitkit · Spec v0.1

Typed elicitation for AI agents. The agent asks the human, typed.

The agent asks the human, typed. A portable spec, a reference implementation, and an 84-fixture conformance suite for the Model Context Protocol.

One snippet · every client
The spec, in brief

The agent stops guessing the moment it sees the question.

Six properties define the standard. Read them like a spec drawing — each cell is one guarantee, wired to the next.

F · 01
spec

Typed, not guessed

The agent asks the human a structured question instead of inferring intent. Answers come back validated and typed.

F · 02
spec

10 question types

ask_text, ask_select, ask_code_diff, ask_rank, ask_slider, and five more — one shape per kind of decision.

F · 03
spec

4 tiers, never breaks

apps · url · elicitation · tui. The same Ask degrades gracefully — a rich panel where it can, plain text where it must.

F · 04
live

Non-blocking elicit

A slow-ask router upgrades to a link or panel before a round trips the ~30s call timeout. The agent keeps moving.

F · 05
spec

Security envelope

Signed one-time HMAC links, origin allowlist, strict CSP on every panel (frame-ancestors none), zero telemetry.

F · 06
live

Conformance is the spec

A standard is what passes the suite. Every tier and type is pinned by fixtures — testable, portable, versioned at v0.1.

The schema canvas

Elicitkit is a spec. On the canvas.

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.

  • 01 · NODE
    ask_text

    A free-form string.

  • 02 · NODE
    ask_select

    One, from a closed set.

  • 03 · NODE
    ask_confirm

    A binary gate — yes proceeds.

  • 04 · NODE
    ask_code_diff

    Accept or reject the hunk. The wedge.

    ttlSeconds: 900,ttlSeconds: 120, oneTime: true,
  • 05 · NODE
    ask_number

    A bounded value: min, max, step, unit.

    ask_number — bounded value, min 1, max 12, step 1, in workers
    workers
  • 06 · NODE
    ask_rating

    An ordinal score on a fixed scale.

    0 / 5
  • 07 · NODE
    ask_slider

    A continuous value across a range.

    sample rate40%
  • 08 · NODE
    ask_date

    An ISO-8601 calendar date.

    ask_date — an ISO-8601 calendar date
  • 09 · NODE
    ask_rank

    Order the options by priority.

    1. 1safety
    2. 2latency
    3. 3reach
  • 10 · NODE
    ask_color

    A color, validated as safe.

More types arrive as community contributionseach validated by the same conformance suite.

The interview loop

The best prompt is the one the agent interviewed you out of.

Every control is real and keyboard-operable. Answer it — answers land green, and the next prompt lands in a model that knows.

ELICIT · LIVE MOCK
elicit · ask_set0 × 4
0 / 4
ask_code_diff
  • lib/router.ts @@ -42,6 +42,7 @@h1
    timeout: 30_000,timeout: 30_000, upgradeOn: 'slow-ask',
    auto-upgrade a slow round to url / apps
  • lib/render.ts @@ -18,4 +18,4 @@h2
    tier: 'elicitation',tier: 'apps',
    prefer the rich panel when the host supports it
  • lib/sign.ts @@ -7,3 +7,4 @@h3
    ttlSeconds: 900,ttlSeconds: 120, oneTime: true,
    tighten the signed HMAC link window

decide every hunk to resolve this field

ask_rank
  1. 1latency
  2. 2fidelity
  3. 3safety
  4. 4reach
ask_slider
per-call timeout before the slow-ask router upgrades the tier30s
5s30s · default60s
ask_confirm

awaiting answers

The four tiers

One Ask. Four renders. Never breaks.

The same typed Ask renders in the richest tier the host supports, then steps down — apps → url → elicitation → tui — never failing the call.

RENDER · APPS
ask_confirmtier 01 / 04
elicitkit · panel

Apply this migration to the production database?

20 tables · irreversible · runs immediately

ConfirmCancel
AUTO-ROUTER

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.

One install line

Same block. Every client.

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
mcp.json
● elicitkit · server
{  "mcpServers": {    "elicitkit": {      "command": "npx",      "args": ["-y", "@elicitkit/server"]    }  }}
The standard

A standard is what passes the suite.

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.

License
Apache-2.0
Spec
v0.1
Telemetry
Zero
Standard
Open · MCP
CONFORMANCE · MCP

84/84

fixtures passing
10 typed question types4 render tiers3 surfacessigned HMAC linksorigin allowliststrict CSPloopback defaultgraceful degradationslow-ask router
Conform · contribute

Build 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.