Skip to main content
Glama

decide

Ask decision models typed yes/no, choice, score, or image-box questions about state to get calibrated probabilities and rankings for classification, routing, selection, or verification.

Instructions

DECIDE — ask a decision model (OpenAI gpt-6-luna, TypeSafe Jev, Cloudflare Clef) typed questions about a state and get calibrated answers, not text. Question types: "noul" (yes/no → probability 0..1), "choice" (pick one of 2–255 named options → choice, per-option probabilities, confidence), "score" (ordered rubric of 2–10 levels → weighted position, per-level probabilities, confidence), "box" (where one target is in an image → left/top/right/bottom edges as 0..1 fractions of width/height, confidence; jev-1.14 / jev-preview only, needs an image, always returns a box, so pair it with a noul asking whether the target is there). Batch independent questions over the same state into one call: they are judged in parallel and in isolation, so none sees another's answer; each extra question adds its own input tokens. Best for fast semantic judgments (classify, route, select, verify, rank). Ask one narrow, coherent judgment per question, with its full meaning in the question; split independently useful dimensions, but a bounded action choice or contextual interpretation is a valid single question. Do counting, arithmetic, and date comparison in code. confidence measures how concentrated the distribution is, not permission to act: take the top option to pick a best, and treat a noul near 0.5 as "yes and no equally likely". No explanations are returned. Images work with gpt-6-luna (PNG/JPEG/WebP), Jev on TypeSafe (PNG/JPEG, 256–1568 px per side, upright pixels: EXIF rotation is ignored), and Clef (PNG/JPEG/WebP, up to 4, ~180 KB total); "auto" skips models that cannot take the images. gpt-6-luna may answer a question with type "refusal" instead of a value: treat it as unanswered, never as a no. Limits per model: Jev ~64k tokens per request (~32k for state plus the longest question), and on TypeSafe a request over that is resent once in long-context mode (262k, slower and less accurate; the result says "long context"); Clef ~64k tokens and at most 64 questions named with letters, digits, "_", ".", "-".

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filesNoText files added to the state as { "files": { "<path>": "<content>" } }; a given state moves to "input". Supports line ranges: file.txt{10:50}. Image files belong in "images".
modelNoDecision model. "auto" (default): gpt-6-luna, then jev-latest, then clef, each on every configured host. A model name ("gpt-6-luna"/"luna", "jev-latest"/"jev", "jev-1.13", "jev-1.14", "jev-preview", "clef", "clef-flash"): its native host first, falling back to OpenRouter. jev-latest is TypeSafe's stable release (1.13); jev-preview is its newest (1.14). "provider:model" (e.g. "openai:gpt-6-luna", "cloudflare:clef-flash", "openrouter:jev-latest"): that provider only. Providers: openai (OPENAI_API_KEY), typesafe (TYPESAFE_API_KEY), cloudflare (CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN), openrouter (OPENROUTER_API_KEY).
stateNoThe material to judge: plain text, or JSON (an object with descriptively named fields is best; an array for sequences such as messages). Optional when "files" or "images" are given.
imagesNoImages judged together with the state: file paths or base64 data URLs, PNG/JPEG/WebP. Refer to them in questions ("Does the image show ..."). Supported by gpt-6-luna, Jev on TypeSafe (PNG/JPEG, 256–1568 px per side; sent as state { "input": <state>, "images": [...] }), and clef/clef-flash (Clef: up to 4, about 180 KB in total); other routes are skipped or rejected.
questionsYesNamed questions, all answered against the same state. The name is your own label and is returned as the answer key. Each question: { "type": "noul"|"choice"|"score"|"box", "instructions": string|object|array, "criteria": ... }. criteria — noul: optional { "true": "...", "false": "..." }; choice: required { "<option>": "description" | null } (2–255 options); score: required ordered array of levels, lowest first (2–10 levels); each level is a description, or { "label": "Short name", "description": "..." } to keep the legend short; box: none, the instructions name the target ("the coffee mug nearest the sink"). instructions may be an object bundling the question with reference data, referenced by `name` in the text. Example: { "team": { "type": "choice", "instructions": "Which team should handle this?", "criteria": { "billing": "Payments, refunds", "technical": "Bugs, outages" } } }

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv4.8.0
    • changedInput schema / properties / images / description
      Previous value: -"Images judged together with the state: file paths or base64 data URLs, PNG/JPEG/WebP. Refer to them in questions (\"Does the image show ...\"). Supported by gpt-6-luna and clef/clef-flash (Clef: up to 4, about 180 KB in total); other models are skipped or rejected."New value: +"Images judged together with the state: file paths or base64 data URLs, PNG/JPEG/WebP. Refer to them in questions (\"Does the image show ...\"). Supported by gpt-6-luna, Jev on TypeSafe (PNG/JPEG, 256–1568 px per side; sent as state { \"input\": <state>, \"images\": [...] }), and clef/clef-flash (Clef: up to 4, about 180 KB in total); other routes are skipped or rejected."
    • changedInput schema / properties / model / description
      Previous value: -"Decision model. \"auto\" (default): gpt-6-luna, then jev-latest, then clef, each on every configured host. A model name (\"gpt-6-luna\"/\"luna\", \"jev-latest\"/\"jev\", \"jev-1.13\", \"jev-preview\", \"clef\", \"clef-flash\"): its native host first, falling back to OpenRouter. \"provider:model\" (e.g. \"openai:gpt-6-luna\", \"cloudflare:clef-flash\", \"openrouter:jev-latest\"): that provider only. Providers: openai (OPENAI_API_KEY), typesafe (TYPESAFE_API_KEY), cloudflare (CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN), openrouter (OPENROUTER_API_KEY)."New value: +"Decision model. \"auto\" (default): gpt-6-luna, then jev-latest, then clef, each on every configured host. A model name (\"gpt-6-luna\"/\"luna\", \"jev-latest\"/\"jev\", \"jev-1.13\", \"jev-1.14\", \"jev-preview\", \"clef\", \"clef-flash\"): its native host first, falling back to OpenRouter. jev-latest is TypeSafe's stable release (1.13); jev-preview is its newest (1.14). \"provider:model\" (e.g. \"openai:gpt-6-luna\", \"cloudflare:clef-flash\", \"openrouter:jev-latest\"): that provider only. Providers: openai (OPENAI_API_KEY), typesafe (TYPESAFE_API_KEY), cloudflare (CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN), openrouter (OPENROUTER_API_KEY)."
    • changedInput schema / properties / questions / additionalProperties / properties / type / enum
      Previous value: -[
      -  "noul",
      -  "choice",
      -  "score"
      -]New value: +[
      +  "noul",
      +  "choice",
      +  "score",
      +  "box"
      +]
    • changedInput schema / properties / questions / description
      Previous value: -"Named questions, all answered against the same state. The name is your own label and is returned as the answer key. Each question: { \"type\": \"noul\"|\"choice\"|\"score\", \"instructions\": string|object|array, \"criteria\": ... }. criteria — noul: optional { \"true\": \"...\", \"false\": \"...\" }; choice: required { \"<option>\": \"description\" | null } (2–255 options); score: required ordered array of levels, lowest first (2–10 levels); each level is a description, or { \"label\": \"Short name\", \"description\": \"...\" } to keep the legend short. instructions may be an object bundling the question with reference data, referenced by `name` in the text. Example: { \"team\": { \"type\": \"choice\", \"instructions\": \"Which team should handle this?\", \"criteria\": { \"billing\": \"Payments, refunds\", \"technical\": \"Bugs, outages\" } } }"New value: +"Named questions, all answered against the same state. The name is your own label and is returned as the answer key. Each question: { \"type\": \"noul\"|\"choice\"|\"score\"|\"box\", \"instructions\": string|object|array, \"criteria\": ... }. criteria — noul: optional { \"true\": \"...\", \"false\": \"...\" }; choice: required { \"<option>\": \"description\" | null } (2–255 options); score: required ordered array of levels, lowest first (2–10 levels); each level is a description, or { \"label\": \"Short name\", \"description\": \"...\" } to keep the legend short; box: none, the instructions name the target (\"the coffee mug nearest the sink\"). instructions may be an object bundling the question with reference data, referenced by `name` in the text. Example: { \"team\": { \"type\": \"choice\", \"instructions\": \"Which team should handle this?\", \"criteria\": { \"billing\": \"Payments, refunds\", \"technical\": \"Bugs, outages\" } } }"
  2. Changed5 schema fields changedv4.7.1
    • changedInput schema / properties / files / description
      Previous value: -"Text files added to the state as { \"files\": { \"<path>\": \"<content>\" } }; a given state moves to \"input\". Supports line ranges: file.txt{10:50}. Images are rejected."New value: +"Text files added to the state as { \"files\": { \"<path>\": \"<content>\" } }; a given state moves to \"input\". Supports line ranges: file.txt{10:50}. Image files belong in \"images\"."
    • addedInput schema / properties / images
      Added value: +{
      +  "description": "Images judged together with the state: file paths or base64 data URLs, PNG/JPEG/WebP. Refer to them in questions (\"Does the image show ...\"). Supported by gpt-6-luna and clef/clef-flash (Clef: up to 4, about 180 KB in total); other models are skipped or rejected.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / model / description
      Previous value: -"Decision model. \"auto\" (default): TypeSafe, falling back to OpenRouter. \"jev-latest\", \"jev-1.13\": first configured provider that serves it, with fallback. \"typesafe:jev-1.13.0\", \"openrouter:~typesafe/jev-latest\": that provider only. Providers: typesafe (TYPESAFE_API_KEY), openrouter (OPENROUTER_API_KEY)."New value: +"Decision model. \"auto\" (default): gpt-6-luna, then jev-latest, then clef, each on every configured host. A model name (\"gpt-6-luna\"/\"luna\", \"jev-latest\"/\"jev\", \"jev-1.13\", \"jev-preview\", \"clef\", \"clef-flash\"): its native host first, falling back to OpenRouter. \"provider:model\" (e.g. \"openai:gpt-6-luna\", \"cloudflare:clef-flash\", \"openrouter:jev-latest\"): that provider only. Providers: openai (OPENAI_API_KEY), typesafe (TYPESAFE_API_KEY), cloudflare (CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKEN), openrouter (OPENROUTER_API_KEY)."
    • changedInput schema / properties / questions / description
      Previous value: -"Named questions, all answered against the same state. The name is your own label and is returned as the answer key. Each question: { \"type\": \"noul\"|\"choice\"|\"score\", \"instructions\": string|object|array, \"criteria\": ... }. criteria — noul: optional { \"true\": \"...\", \"false\": \"...\" }; choice: required { \"<option>\": \"description\" | null } (2–255 options); score: required ordered array of level descriptions, lowest first (2–10 levels). instructions may be an object bundling the question with reference data, referenced by `name` in the text. Example: { \"team\": { \"type\": \"choice\", \"instructions\": \"Which team should handle this?\", \"criteria\": { \"billing\": \"Payments, refunds\", \"technical\": \"Bugs, outages\" } } }"New value: +"Named questions, all answered against the same state. The name is your own label and is returned as the answer key. Each question: { \"type\": \"noul\"|\"choice\"|\"score\", \"instructions\": string|object|array, \"criteria\": ... }. criteria — noul: optional { \"true\": \"...\", \"false\": \"...\" }; choice: required { \"<option>\": \"description\" | null } (2–255 options); score: required ordered array of levels, lowest first (2–10 levels); each level is a description, or { \"label\": \"Short name\", \"description\": \"...\" } to keep the legend short. instructions may be an object bundling the question with reference data, referenced by `name` in the text. Example: { \"team\": { \"type\": \"choice\", \"instructions\": \"Which team should handle this?\", \"criteria\": { \"billing\": \"Payments, refunds\", \"technical\": \"Bugs, outages\" } } }"
    • changedInput schema / properties / state / description
      Previous value: -"The material to judge: plain text, or JSON (an object with descriptively named fields is best; an array for sequences such as messages). Optional when \"files\" is given."New value: +"The material to judge: plain text, or JSON (an object with descriptively named fields is best; an array for sequences such as messages). Optional when \"files\" or \"images\" are given."
  3. Addedv4.1.2

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: refusal-type answers must be treated as unanswered, long-context resends are disclosed, per-model token limits and question-name constraints are given, and confidence semantics are explained. Image support, format constraints, and model routing behavior are all covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and question types, and nearly every sentence carries actionable information. However it is one very dense, unstructured block mixing purpose, per-type output shapes, model routing, image constraints, and limits, which taxes scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with nested objects and no output schema, the description fully explains what each question type returns (probability, choice + per-option probabilities, weighted position, box edges, confidence) plus limits and failure modes. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds genuinely non-schema meaning: batch questions are 'judged in parallel and in isolation, so none sees another's answer,' confidence reflects distribution concentration rather than permission to act, and refusal must not be read as a no. These add interpretation value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('ask a decision model typed questions about a state and get calibrated answers, not text') and enumerates the four question types with their answer shapes. The purpose is unmistakable and clearly distinct from siblings like chat, check_status, and cancel_job.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('best for fast semantic judgments: classify, route, select, verify, rank'), when-not ('do counting, arithmetic, and date comparison in code'), and per-question shaping guidance ('ask one narrow, coherent judgment per question... split independently useful dimensions'). Batching rules are also stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools