DecideOnce
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DECIDEONCE_CONFIG | Yes | Path to the decideonce.toml configuration file. | |
| DECIDEONCE_PROJECT | No | Project name used to select the SQLite store under <data_dir>/<project>/decide.db. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| do_analyzeA | Find decision points in a workflow. Input: {workflow: {kind, text|path}, [traces: {path}], [candidates]}. First call returns rubric + candidate_schema + hints; with candidates, returns score and verdict per candidate. |
| do_registerC | Create or update a decision point (§1.1 fields at top level: point_id*, workflow*, question*, kind, options*, context_fields*, required_fields, rules, irreversible, data_class, target_error). Returns the stored point + a call snippet to paste into the skill. With type: workflow, registers a workflow record (downgrade_requires, check, run_model, cheap_model). |
| do_decideB | Ask for a decision. Input: {point_id*, context*, [teacher_cost]}. Returns {decision_id, mode, choice, allowed_options, probabilities, confidence, threshold, instruction}. mode teacher: decide yourself, then do_record. mode auto/rule: use choice. |
| do_recordB | Record the teacher's choice. Input: {decision_id*, choice*, [teacher_cost]}. choice must be in allowed_options. |
| do_outcomeC | Attach the real outcome. Input: {decision_id*, [ok], [correct_choice], [note]}. Either ok or correct_choice may be given. With plan_id + ok, records a user check result for a plan. |
| do_trainA | Train the decision model for a point. Input: {point_id*, [dry_run], [confirm], [training_free_confirmed], [force]}. Local path: trains the JEV probe, returns metrics + model card. Tiered path with a trainer: dry_run shows the estimate and joining points; confirm launches the job (smoke first, then the paid-gated full job); repeat calls poll status. |
| do_promoteB | Move a point: {point_id*, phase* (collect|shadow|serve|paused), [confirm]}. shadow needs a trained probe (local_legacy) or the hosted key + a budget + remote_ok (tiered, no training); serve needs all §6.4 checks plus confirm:true (ask the user first). With plan_phase, moves plan phases (§15.6); with workflow + downgrade, enables downgrade after a passed trial (§15.8). |
| do_reportC | Per-point metrics. Input: {[point_id], [format json|md]}. Agreement, coverage, auto share, audits, savings, drift, promotion blockers. With workflow, the one-turn workflow report (§15.8). |
| do_exportA | Export labelled rows as JSONL. Input: {point_id*, path*, [confirm]}. Private points need confirm:true. |
| do_extractB | Extract decision labels from a one-turn transcript (two calls). Call 1: {transcript|path|transcript_id, [contributor_off_confirmed], [extractor_local]} or {transcript_id, pass: 2} for the audit pass; returns transcript_id + extraction_id + points + record_schema. Call 2: {extraction_id*, extractor*, records*, [new_points]}; returns accepted + rejected (one code per check) + jev_disagreements. |
| do_plan_runB | Plan one-turn work. Input: {workflow*, input*, context*, [context_source], [run_model], [cheap_model], [trial], [pilot_force], [pilot_mode], [task_ref]}. Returns the recommendation (inject/downgrade/none) + prompt_addendum or would_have. |
| do_plan_resultB | Record a planned run's result. Input: {plan_id*, [transcript], [final_output], [cost], [conflict], [trial_id], [pair_id], [arm]}. Runs the workflow check when deterministic. |
| do_autopilot_statusB | Autopilot state (read-only). Returns the approved and current [autopilot] hashes, the eligible points, and per point its status (on|off|blocked(reason)) and the gate it waits for. |
| dm_analyzeB | Find decision points in a workflow. Input: {workflow: {kind, text|path}, [traces: {path}], [candidates]}. First call returns rubric + candidate_schema + hints; with candidates, returns score and verdict per candidate. |
| dm_registerC | Create or update a decision point (§1.1 fields at top level: point_id*, workflow*, question*, kind, options*, context_fields*, required_fields, rules, irreversible, data_class, target_error). Returns the stored point + a call snippet to paste into the skill. With type: workflow, registers a workflow record (downgrade_requires, check, run_model, cheap_model). |
| dm_decideB | Ask for a decision. Input: {point_id*, context*, [teacher_cost]}. Returns {decision_id, mode, choice, allowed_options, probabilities, confidence, threshold, instruction}. mode teacher: decide yourself, then do_record. mode auto/rule: use choice. |
| dm_recordC | Record the teacher's choice. Input: {decision_id*, choice*, [teacher_cost]}. choice must be in allowed_options. |
| dm_outcomeC | Attach the real outcome. Input: {decision_id*, [ok], [correct_choice], [note]}. Either ok or correct_choice may be given. With plan_id + ok, records a user check result for a plan. |
| dm_trainA | Train the decision model for a point. Input: {point_id*, [dry_run], [confirm], [training_free_confirmed], [force]}. Local path: trains the JEV probe, returns metrics + model card. Tiered path with a trainer: dry_run shows the estimate and joining points; confirm launches the job (smoke first, then the paid-gated full job); repeat calls poll status. |
| dm_promoteB | Move a point: {point_id*, phase* (collect|shadow|serve|paused), [confirm]}. shadow needs a trained probe (local_legacy) or the hosted key + a budget + remote_ok (tiered, no training); serve needs all §6.4 checks plus confirm:true (ask the user first). With plan_phase, moves plan phases (§15.6); with workflow + downgrade, enables downgrade after a passed trial (§15.8). |
| dm_reportC | Per-point metrics. Input: {[point_id], [format json|md]}. Agreement, coverage, auto share, audits, savings, drift, promotion blockers. With workflow, the one-turn workflow report (§15.8). |
| dm_exportA | Export labelled rows as JSONL. Input: {point_id*, path*, [confirm]}. Private points need confirm:true. |
| dm_extractA | Extract decision labels from a one-turn transcript (two calls). Call 1: {transcript|path|transcript_id, [contributor_off_confirmed], [extractor_local]} or {transcript_id, pass: 2} for the audit pass; returns transcript_id + extraction_id + points + record_schema. Call 2: {extraction_id*, extractor*, records*, [new_points]}; returns accepted + rejected (one code per check) + jev_disagreements. |
| dm_plan_runB | Plan one-turn work. Input: {workflow*, input*, context*, [context_source], [run_model], [cheap_model], [trial], [pilot_force], [pilot_mode], [task_ref]}. Returns the recommendation (inject/downgrade/none) + prompt_addendum or would_have. |
| dm_plan_resultC | Record a planned run's result. Input: {plan_id*, [transcript], [final_output], [cost], [conflict], [trial_id], [pair_id], [arm]}. Runs the workflow check when deterministic. |
| dm_autopilot_statusB | Autopilot state (read-only). Returns the approved and current [autopilot] hashes, the eligible points, and per point its status (on|off|blocked(reason)) and the gate it waits for. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Every tool exists twice under two different prefixes (dm_export/do_export, dm_decide/do_decide, etc.), and the paired descriptions are verbatim identical, so an agent has no basis for choosing one over the other. Thirteen indistinguishable duplicate pairs make misselection essentially guaranteed.
Each individual name follows a readable verb_noun pattern, but the surface mixes two parallel prefix conventions (dm_ vs do_) for the exact same operations. The result is a duplicated, inconsistent namespace rather than one predictable scheme.
There are 26 tools, but only 13 unique operations — half the surface is redundant duplication, pushing the count above the 25+ threshold. The underlying toolset (~13) would be reasonably scoped if the duplicates were removed.
The domain lifecycle is well covered: analyze, register, decide, record, outcome, train, promote, report, export, extract, plus plan_run/plan_result and autopilot status. Minor gaps exist (no delete/deregister point or unregister workflow operation), but core workflows have no dead ends.