ask_model
Get an independent software-engineering opinion from a single AI model. Choose a backend provider and ask code structure, architecture, or design trade-off questions with optional context.
Instructions
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. provider selects the backend; model overrides the model where the backend accepts one. This one tool replaces the per-backend tools: 'minimax' (MiniMax-M3), 'glm', 'deepseek' (cheap direct APIs — prefer these for a quick independent opinion), 'sonnet', 'gemini', 'codex' (GPT-5.6 Sol), 'grok', 'kimi' (local CLIs), and the gateways 'ollama', 'lmstudio', 'atlas', 'ali' (Alibaba/Qwen reasoning), 'openrouter'. Aliases: m3=minimax, gpt=codex, xai=grok. The direct providers have a fixed model and reject model; pass model for a CLI override (grok/kimi) or a gateway (ollama/lmstudio/atlas/ali/openrouter) — call list_models(provider=...) first for the gateway catalogues. Single-turn: for a multi-turn thread use ask (multi-turn; oracle="opus" for Claude Opus). Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in context when the question is about existing code. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Prefer a dedicated local CLI over a gateway for the same model. Use ask_council to ask several models and get a synthesized answer.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id for a provider that accepts one: a CLI override (grok, kimi) or a gateway model (ollama, lmstudio, atlas, ali, openrouter). Rejected for the fixed-model providers (sonnet, minimax, glm, deepseek, gemini, codex). Omit to use the server default; call `list_models(provider=…)` for a gateway catalogue. | |
| effort | No | Answer budget / reasoning depth, honored by atlas, openrouter, grok and kimi; ignored by the other providers (atlas/openrouter default to 'deep'). | |
| context | No | Optional code snippets, file paths, or structural context. | |
| trusted | No | Operator-authorized. When true, the prohibited-use denylist runs in log-only mode: security vocabulary in the question AND in `context` is audited but does not block. Use for legitimate security-engineering work (PoC analysis, CVE research, binary hardening review) where the ask genuinely needs security terms. Takes effect ONLY when the operator has set ASK_FABLE_ALLOW_TRUSTED (env or config); otherwise the flag is ignored and the denylist still applies. | |
| provider | Yes | Which backend answers. Cheap direct APIs (fixed model, no `model`): 'minimax' (MiniMax-M3), 'deepseek', 'glm'. Local CLIs: 'gemini', 'codex' (GPT-5.6 Sol), 'grok', 'kimi'. OAuth: 'sonnet'. Gateways / CLI overrides (pass `model`): 'ollama', 'lmstudio', 'atlas', 'ali' (Alibaba/Qwen), 'openrouter'. Aliases: m3=minimax, gpt=codex, xai=grok. | |
| question | Yes | A specific software/engineering question to ask ONE model on its own — guarded, single-turn. `provider` selects the backend; `model` overrides the model where the backend accepts one. | |
| context_ref | No | Key(s) of context saved with `context(op="write", …)` to pull in and prepend to `context`. Missing keys are reported, not fatal. |