ask-fable
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ASK_FABLE_HUB | No | Set to 0, false, no, or off to disable the session hub. | on |
| ASK_FABLE_SAVE | No | 1 persists answer Markdown, 0 disables it; unset writes only in full trace mode. | unset |
| ASK_FABLE_CACHE | No | Cache successful single-shot/council answers. | on |
| ASK_FABLE_QUIET | No | Silence the stderr progress/reasoning trace. | off |
| ASK_FABLE_EFFORT | No | Alias for ASK_FABLE_ATLAS_EFFORT. | deep |
| ASK_FABLE_MAX_LEN | No | Question length maximum. | 65536 |
| ASK_FABLE_MIN_LEN | No | Question length minimum. | 3 |
| ASK_FABLE_TIMEOUT | No | Per-turn wall-clock seconds. | 240 |
| ASK_FABLE_USE_CLI | No | Force the claude CLI bridge instead of the SDK. | off |
| ASK_FABLE_AGENT_ID | No | Explicit hub attribution label. | inferred |
| ASK_FABLE_HUB_PATH | No | Local SQLite hub database. | $XDG_STATE_HOME/ask_fable/hub.db |
| ATLASCLOUD_API_KEY | No | Alternative Atlas Cloud key accepted for HTTP ask_atlas and atlas:<model-id> calls. | |
| OPENROUTER_API_KEY | No | Alternative OpenRouter key accepted for ask_openrouter and openrouter:<model-id> tokens. | |
| ASK_FABLE_AUDIT_RAW | No | Store raw questions; otherwise store SHA-256 metadata only. | off |
| ASK_FABLE_CACHE_TTL | No | Cache freshness window in seconds. | 3600 |
| ASK_FABLE_GLM_MODEL | No | GLM model. | glm-5.2 |
| ASK_FABLE_KIMI_HOME | No | Home directory for the kimi CLI. | ~/.kimi-code |
| ASK_FABLE_TRACE_DIR | No | Directory for full-mode trace bundles. | $XDG_STATE_HOME/ask_fable/traces |
| ASK_FABLE_AUDIT_PATH | No | Audit log location. | $XDG_STATE_HOME/ask_fable/decisions.jsonl |
| ASK_FABLE_CACHE_PATH | No | SQLite cache location. | $XDG_STATE_HOME/ask_fable/cache.db |
| ASK_FABLE_CLAUDE_CLI | No | Pin the Claude Code binary the Agent SDK spawns. | unset |
| ASK_FABLE_GROK_MODEL | No | Local grok CLI model. | grok-4.6 |
| ASK_FABLE_KIMI_MODEL | No | Local kimi CLI model. | kimi-code/k3 |
| ASK_FABLE_MAX_TOKENS | No | Max output tokens for GLM/DeepSeek, Ollama, and MiniMax. | 65536 |
| ASK_FABLE_OUTPUT_DIR | No | Where saved answers are written. | $XDG_STATE_HOME/ask_fable/answers |
| ASK_FABLE_PROJECT_ID | No | Stable project label stored with each trace. | derived |
| ASK_FABLE_TRACE_MODE | No | safe stores correlated metadata only; full additionally stores redacted trace bundles. | safe |
| ASK_FABLE_ATLAS_MODEL | No | Default model for ask_atlas when no model is passed. | xai/grok-4.6 |
| ASK_FABLE_CODEX_MODEL | No | Model id for ask_codex and the codex council oracle. | gpt-5.6-sol |
| ASK_FABLE_CONFIG_FILE | No | Tool-writable config file path. | ${XDG_CONFIG_HOME:-~/.config}/ask_fable/config.json |
| ASK_FABLE_FABLE_MODEL | No | Pin the exact Fable id for ask and the fable oracle, skipping the newest-first ladder. | unset |
| ASK_FABLE_GLM_API_KEY | No | Z.ai key that enables the glm council oracle. | |
| ASK_FABLE_KIMI_EFFORT | No | Local kimi CLI effort (low/high/max or quick/standard/deep). | high |
| ASK_FABLE_MAX_ANSWERS | No | Retention cap on saved answer Markdown files. | 0 |
| ASK_FABLE_ATLAS_EFFORT | No | Default Atlas effort (quick, standard, or deep). | deep |
| ASK_FABLE_CONTEXT_PATH | No | SQLite store for the context bus. | $XDG_STATE_HOME/ask_fable/context.db |
| ASK_FABLE_GEMINI_MODEL | No | agy model name for ask_gemini and the gemini council oracle. | Gemini 3.1 Pro (High) |
| ASK_FABLE_GLM_BASE_URL | No | GLM endpoint. | https://api.z.ai/api/anthropic |
| ASK_FABLE_GROK_TIMEOUT | No | Local grok CLI timeout in seconds. | falls back to ASK_FABLE_TIMEOUT |
| ASK_FABLE_HUB_MAX_ROWS | No | Total retained hub-turn cap. | 10000 |
| ASK_FABLE_KIMI_TIMEOUT | No | Local kimi CLI timeout in seconds. | falls back to ASK_FABLE_TIMEOUT |
| ASK_FABLE_MAX_PARALLEL | No | Semaphore size for council fan-out. | 6 |
| ASK_FABLE_MAX_SESSIONS | No | Retention cap on session transcript dumps. | 0 |
| ASK_FABLE_OLLAMA_MODEL | No | Default model for ask_ollama when none is passed. | gpt-oss:120b-cloud |
| ASK_FABLE_PROJECT_ROOT | No | Project root that context_pack may read from; unset disables context_pack. | |
| ASK_FABLE_ATLAS_API_KEY | No | Atlas Cloud key for HTTP ask_atlas and atlas:<model-id> calls. | |
| ASK_FABLE_ATLAS_COUNCIL | No | Default members for ask_atlas_council. | |
| ASK_FABLE_AUDIT_BACKUPS | No | Optional cap on rotated audit segments. | unlimited |
| ASK_FABLE_CHAIN_TIMEOUT | No | Hard upper bound on ask_chain wall time. | max(600, n × ASK_FABLE_TIMEOUT) |
| ASK_FABLE_CODEX_TIMEOUT | No | Per-turn seconds for the codex oracle specifically. | falls back to ASK_FABLE_TIMEOUT, else 240 |
| ASK_FABLE_DENYLIST_FILE | No | Extra denylist terms, one per line. | |
| ASK_FABLE_MINIMAX_MODEL | No | Model id for the ask_council MiniMax oracle. | MiniMax-M3 |
| ASK_FABLE_ALLOWLIST_FILE | No | Benign phrases neutralized before matching, one per line. | |
| ASK_FABLE_ATLAS_BASE_URL | No | Atlas Cloud API base URL. | https://api.atlascloud.ai |
| ASK_FABLE_BREAKER_WINDOW | No | Last N outcomes tracked per oracle. | 20 |
| ASK_FABLE_CACHE_MAX_ROWS | No | Row cap for the answer cache. | 10000 |
| ASK_FABLE_DEEPSEEK_MODEL | No | DeepSeek model. | deepseek-v4-pro |
| ASK_FABLE_GEMINI_TIMEOUT | No | Per-turn seconds for the agy/Gemini oracle specifically. | falls back to ASK_FABLE_TIMEOUT, else 240 |
| ASK_FABLE_GROK_REASONING | No | Local grok CLI reasoning effort. | low |
| ASK_FABLE_OLLAMA_API_KEY | No | Only for a remote ollama.com endpoint; local daemon needs no key. | |
| ASK_FABLE_OLLAMA_COUNCIL | No | Models for the full tier and default ask_ollama_council. | minimax-m3:cloud, glm-5.2:cloud, nemotron-3-ultra:cloud, qwen3-coder:480b-cloud, kimi-k2.7-code:cloud, deepseek-v4-pro:cloud, gpt-oss:120b-cloud |
| ASK_FABLE_PACK_MAX_CHARS | No | Default total-character budget for a context_pack bundle. | 24000 |
| ASK_FABLE_PACK_MAX_FILES | No | Max files admitted in one context_pack. | 32 |
| ASK_FABLE_SHOW_REASONING | No | Show model reasoning excerpts in the trace. | on |
| ASK_FABLE_THINKING_CHARS | No | Cap for the ASK_FABLE_RETURN_THINKING excerpt. | 4000 |
| ASK_FABLE_AUDIT_MAX_BYTES | No | Size cap for the audit log. | 52428800 |
| ASK_FABLE_CIRCUIT_BREAKER | No | Per-oracle circuit breaker. | on |
| ASK_FABLE_CODEX_REASONING | No | Reasoning effort passed to codex exec. | high |
| ASK_FABLE_COUNCIL_TIMEOUT | No | Hard upper bound on ask_council wall time. | ASK_FABLE_TIMEOUT + 120 |
| ASK_FABLE_MAX_CONTEXT_LEN | No | Optional context cap; any value is floored to 512,000 chars. | off |
| ASK_FABLE_OLLAMA_BASE_URL | No | Ollama endpoint. | http://localhost:11434 |
| ASK_FABLE_RETURN_THINKING | No | Attach a capped reasoning excerpt to the tool result body. | off |
| ASK_FABLE_BREAKER_COOLDOWN | No | Seconds an open breaker waits before half-open probe. | 300 |
| ASK_FABLE_CLI_MAX_PARALLEL | No | Maximum concurrent local CLI processes per binary. | 2 |
| ASK_FABLE_DEEPSEEK_API_KEY | No | DeepSeek key that enables the deepseek council oracle. | |
| ASK_FABLE_OPENROUTER_MODEL | No | Default model for ask_openrouter when none is passed. | deepseek/deepseek-v4-pro |
| ASK_FABLE_STREAM_REASONING | No | Live-stream Fable reasoning block-by-block to stderr. | off |
| ASK_FABLE_ATLAS_SYNTHESIZER | No | Adjudicator for ask_atlas_council. | |
| ASK_FABLE_AUDIT_RAW_CONTEXT | No | Split switch for context_raw only. | follows ASK_FABLE_AUDIT_RAW |
| ASK_FABLE_BREAKER_THRESHOLD | No | Error rate that opens the breaker. | 0.5 |
| ASK_FABLE_DEEPSEEK_BASE_URL | No | DeepSeek endpoint. | https://api.deepseek.com/anthropic |
| ASK_FABLE_HUB_PREVIEW_CHARS | No | Maximum last_question preview length returned by session_list. | 160 |
| ASK_FABLE_HUB_STALE_SECONDS | No | Heartbeat age after which session_list considers a session stale. | 300 |
| ASK_FABLE_MAX_NEEDS_CONTEXT | No | Consecutive needs_more_context turns before ask returns context_exhausted. | 2 |
| ASK_FABLE_OPENROUTER_EFFORT | No | Default effort for ask_openrouter_council. | |
| ASK_FABLE_OLLAMA_CATALOG_URL | No | Where list_ollama_models fetches the cloud catalog. | https://ollama.com |
| ASK_FABLE_OPENROUTER_API_KEY | No | OpenRouter key for ask_openrouter and openrouter:<model-id> tokens. | |
| ASK_FABLE_OPENROUTER_COUNCIL | No | Default panel for ask_openrouter_council. | |
| ASK_FABLE_PACK_MAX_FILE_BYTES | No | Per-file read cap for context_pack. | 1000000 |
| ASK_FABLE_TRACE_MAX_EVENT_BYTES | No | Maximum JSONL event-line size accepted while reading traces. | 1048576 |
| ASK_FABLE_TRACE_QUERY_MAX_BYTES | No | Upper byte bound for one trace_list or trace_get scan. | 52428800 |
| ASK_FABLE_OPENROUTER_SYNTHESIZER | No | Default adjudicator for ask_openrouter_council. | |
| ASK_FABLE_TRACE_QUERY_MAX_EVENTS | No | Upper bound for one trace_list or trace_get scan. | 100000 |
| ASK_FABLE_TRACE_MAX_CONTENT_BYTES | No | Maximum captured content per full trace bundle. | 104857600 |
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
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| askA | YOUR DEFAULT MOVE on anything non-trivial — use it liberally and early, don't wait to be told and don't wait until you're stuck. Reach for it BEFORE you guess at unfamiliar code, an API, or a library's behavior; whenever you weigh a design or refactor trade-off; when a bug isn't fully understood; or to have a strong reasoner sanity-check a plan or diff before you commit it. One well-framed ask with the code attached beats several bare ones. Set |
| ask_fable_helpA | FREE, local and instant — no model call, no cost, no network. Returns the part of this server's manual that does NOT fit in the standing instructions (harnesses truncate those at ~2 KB). Call it when: a call came back |
| ask_modelA | Ask ONE model — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. |
| ask_websearchA | OPT-IN web-search / OSINT research agent. Unlike every other ask_* tool (which is toolless and cannot browse), this one runs a model WITH live web search to research a question and return a sourced, cited answer — use it for current/'latest' facts, version/pricing/release lookups, who/what-is research, and open-source intelligence gathering. Pick the model with |
| ask_councilA | DIRECTIONAL — reserve this for a genuinely contentious or HARD-TO-REVERSE decision (architecture, concurrency, data model, public API, migration) where a single opinion isn't enough and you want several models cross-checked, or for divergent brainstorming where you want independent idea sets merged without losing distinct options. It's slower and heavier than |
| ask_chainA | DIRECTIONAL, SEQUENTIAL — the relay counterpart to |
| ask_debateA | DIRECTIONAL, ADVERSARIAL — pit two models AGAINST each other over a structured claims ledger, then have a fresh third model adjudicate. Unlike |
| ask_verifyA | Review a draft answer that ALREADY EXISTS — yours, another model's, or another tool's — and get back the objections a reviewer could actually SHOW, separated from the ones it could only argue. This is the only mode that takes a finished answer as input. Every other mode reasons from scratch: HOW TO READ THE RESULT. WHAT IT DOES NOT DO. It never withholds or rewrites your draft; Pass |
| ask_falsifyA | STATEFUL, ADVERSARIAL — a persistent falsification ledger, the process cousin of |
| ask_conferenceA | DIVERGENT, MULTI-ROUND — a brainstorming CONFERENCE where several models argue a topic TOGETHER over rounds, each reading the running transcript and building on (or pushing back against) what came before, then a rapporteur writes the MAP OF THE DISAGREEMENT (converged / the crux / what would change it). Unlike |
| configure_councilA | Save the user's chosen default council for ONE gateway so it sticks across sessions (written to ask_fable's config file, overriding the matching ASK_FABLE_*_COUNCIL env default). |
| list_modelsA | List the available models for one gateway so you can offer a concrete choice before spending a call. |
| unload_lms_modelA | Unload one model from the operator's LM Studio server to free memory. OPERATOR ACTION: never call this without an explicit request or confirmation from the user — it discards a resident model. Use |
| host_statusA | Read-only GPU and host status from the operator's Control panel (lmstudio.example.com): GPU utilization, VRAM used/total/free, temperature, fan and power, which processes hold VRAM, systemd service states, the models LM Studio has loaded, and any warnings. REACH FOR THIS when the user asks how the GPU/box is doing, or before offering a local-model decision that may not fit in memory (ask_lms already uses the same reading for its room check). Best-effort: an unreachable control page returns a status error, never a crash. |
| diagnoseA | Read-only health check of every reasoning backend — REACH FOR THIS when a council came back degraded, an oracle is unexpectedly missing, or you want to know what is actually wired up before relying on it. For each oracle it reports reachability, the resolved model, the configured timeout, the circuit-breaker gate (open / quota-held), and a |
| configure_tracingA | Toggle reasoning-trace capture at runtime, persisted across sessions (writes ask_fable's config file, which overrides the ASK_FABLE_TRACE_MODE / ASK_FABLE_STREAM_REASONING env defaults — no ~/.claude.json edit or restart needed; it applies on the next call). |
| configure_disabledA | Turn oracles/providers OFF (or back on) at runtime — persisted to the config file, no restart. A disabled backend is dropped from every council/tier and its dedicated tool returns kind='disabled' (distinct from 'not configured'). Name an oracle key/alias ('grok', 'm3', 'opus48') or a whole provider ('atlas', 'openrouter', 'ollama', 'lmstudio'). Call with no args to see the current denylist. Config wins over the ASK_FABLE_DISABLED env var. |
| code_indexA | Build or refresh the local code+docs index for the configured project root, then search it with |
| code_searchA | Search the local project index built by |
| context_readA | Read the shared context bus: pass |
| contextA | Change the shared context bus — dispatched by |
| reset_sessionA | Dump (optionally to a file) and clear a Fable conversation session, so the next |
| statsA | Read-only usage/health stats aggregated from the ask_fable audit log — see how the tools are performing without spelunking JSONL. Buckets every recorded call over a time |
| trace_listC | List recent correlated tool traces without raw content. |
| trace_getC | Read the ordered events and artifact references for one trace. |
| session_listA | COORDINATION — the operator dashboard. Lists ask_fable sessions across instances on this machine (opencode / Claude Code / salient windows) so you can see what other agents are asking the oracles. Each entry shows session key, agent_id, latest question, oracle, status, heartbeat age, and turn count. Defaults: THIS project only, and |
| session_peekA | COORDINATION — read the full turn history (every question and answer, in order) for one session, across instances. Use it to understand what an agent has learned in a session before joining the work, or to recover a finding another instance produced. Optionally scope to one |
| session_statsA | COORDINATION — aggregated oracle usage across ALL instances on this machine (unlike |
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 28 tools
The nine ask_* variants (ask, ask_model, ask_council, ask_chain, ask_debate, ask_falsify, ask_conference, ask_verify, ask_websearch) all route model reasoning, and some pairs like ask_council vs ask_conference could be confused at a glance. However, each tool's intended use is sharply delineated in its description, and non-ask tools such as context/context_read, session_list/session_peek, and trace_list/trace_get are cleanly separated.
The server leans heavily on an ask_ prefix and several verb_noun names like list_models, reset_session, and code_search, giving a clear overall structure. But it mixes in bare one-word names (ask, context, diagnose, stats), noun-style labels (host_status), and a single context verb while its read counterpart is context_read, making the pattern inconsistent.
At 28 tools, this sits above the 16–25 heavy range and includes a large family of reasoning modes that could plausibly be consolidated. The breadth is nevertheless justified by the server's expansive purpose—multi-model orchestration, provider configuration, context sharing, code indexing, tracing, session coordination, and observability—so the count feels earned rather than padded.
The tool surface fully covers the multi-model reasoning lifecycle: single and multi-model queries, adversarial verification, web research, session/context management, configurability, diagnostics, code search, tracing, and usage analytics. There are no obvious dead ends or missing operations for the stated scope.