This topic is a search scope.
Classic text search within the open topic—not an instruction to an AI to read it.
One search box. Three ways to look. And a follow-up button that crosses into a different system. Here’s where everything actually goes.
Classic text search within the open topic—not an instruction to an AI to read it.
The built-in pipeline retrieves discussions and asks a model to answer from that evidence.
The follow-up beneath an answer hands off to a configured agent in a private message.
Select a state to see its behavior, caveats and source.
Arrows show the principal paths. Select a state for additional transitions.
Illustrative walkthroughs, not live Discourse requests.
“Answer a Discourse forum question using only the supplied candidate discussions.”
That is the built-in synthesis prompt. A live GitHub lookup is not part of the standard retrieval pipeline. A link appearing in a discussion is evidence from the forum—not proof that GitHub was queried.
Read the complete prompt ↗This describes the built-in agents. Replacing the configured synthesis agent can change its prompt and capabilities.
In the pinned menu implementation, choosing “This topic” scopes that search. Editing the term releases the topic scope; selecting AI also clears it. The keyboard’s AI/classic choice is governed by a separate personal preference.
Interactive explanation only. This switch does not change your Discourse preferences. The mapping above describes the search menu; full-page search has its own selected search type.
| Setting | What it controls |
|---|---|
discourse_ai_enabledai_ask_ai_enabled | Master plugin and Ask AI switches. Both must be on. The repository default for Ask AI is off; hosted provisioning may differ. |
ai_ask_ai_allowed_groupsDefault: trust_level_0 | Feature-level group access. The synthesis agent’s allowed groups are an additional gate. The user must be logged in and not silenced. |
ai_embeddings_enabledai_embeddings_semantic_search_enabled | Both are eligibility requirements—even when a particular filtered query will use keyword search only. |
ai_ask_ai_agentDefault: built-in Ask AI synthesis agent (−41) | Selects the answering agent. It must exist, be enabled and admit the user. Its default model, or ai_default_llm_model, must resolve to an existing LLM. |
ai_ask_ai_query_rewriter_agentDefault: built-in rewriter (−40) | Selects the query-preparation agent. An unavailable or disallowed rewriter, missing model, or rewrite exception falls back to the original query. Explicit filters bypass rewriting. |
ai_ask_ai_summary_detailDefault: balanced | The built-in prompt requests: quiet = one sentence, no title; balanced = one 40–80-word paragraph; detailed = 2–3 paragraphs, 100–160 words. These are model instructions, not guaranteed word-count enforcement. |
ai_ask_ai_related_countDefault: 2 · allowed range: 2–6 | Caps the selected discussions. The built-in prompt requests the configured number only when enough sources are useful. One strong source can be enough. |
ai_bot_enabledai_ask_ai_follow_up_agentDefault follow-up: Forum Helper (−1) | The follow-up UI additionally requires bot access, an available agent and a usable PM recipient. The server checks agent access, PM permissions and the cached result before creating the conversation. |
Yes, via query syntax—not by treating the current topic as conversational context. The menu’s This topic button runs classic search; clicking AI clears that menu scope. An explicit topic:123 operator that remains in the submitted query instead takes the filtered keyword-only retrieval path. Clicking AI also strips the current context’s category/tag/user operators when that contextual option is active; the keyboard handler clears topic/inbox state but does not perform that same operator stripping.
PM queries are detected separately. The simple in:messages and in:personal scopes can use hybrid retrieval; other explicit constraints generally force keyword-only retrieval. Sources are checked against the requesting user’s access. UI scope handling ↗ · Retrieval branching ↗
The original query becomes the first post. A bot post contains the cached answer and source links. The submitted follow-up becomes another user post. The topic is assigned to the configured follow-up agent, whose tools govern the subsequent interaction. The answer’s suggested follow-up is editable; a nonblank question is required by the UI.
The cached result has a 30-minute TTL. The server rechecks source existence, visibility, category and post modification time. An expired or invalid result blocks the handoff. Repeated requests for the same valid search result reuse an existing accessible conversation rather than creating another. Conversation creation ↗ · Cache validation ↗
No. No usable candidates, insufficient evidence, or invalid final answer/source selection lead to no supported answer. The UI offers Create topic only when the user can create one. A failed request, exhausted credits, unavailable worker capacity or timeout produces a separate failure state, without that no-answer call to action.
Clicking Create topic opens the composer with the query as its initial title. AI-assisted title and taxonomy suggestions are conditional on helper eligibility and settings. Nothing is published automatically. Result UI and composer ↗
The browser ignores updates whose request ID is no longer active. A new submitted request supersedes the prior server-side request for that user; merely dismissing the answer resets client state, not a server cancellation endpoint. The client’s timeout is a 20-second inactivity timer, refreshed by non-final updates. The worker separately has a 20-second processing deadline, a 2-second maximum queue delay and a site-wide concurrency limit of 4.
The reply endpoint allows 8 requests per user per minute; creation of a follow-up conversation is limited to 3 per minute. Submitting an unchanged successful or no-answer query is suppressed by the client until the previous discovery is dismissed; failed or timed-out queries may be resubmitted. These are implementation constants in this revision, not controls in the table above. Client lifecycle ↗ · Worker ↗ · Controller ↗
Full-page search registers Ask AI as a separate search type. Opening full search while the menu is displaying the same asked query carries that type across; it does not intentionally switch the reader back to classic results. The diagrams focus on the header/welcome-banner menu and the common backend.
The older AI Discovery code is a separate legacy branch. The initializer uses it when the new Ask AI path is unavailable and the legacy feature, agent access and user preference allow it. It is not a hidden stage inside the new pipeline. Initialization and full-page integration ↗
Source: discourse/discourse, commit 2d27a69a27429079744eb33c61896611eb52380a, inspected on 8 September 2026. This is a source-level explanation—not a test against Meta’s deployed revision and not a guarantee that an LLM always follows its prompt.
The maps deliberately compress supporting machinery. Selectable state details and these footnotes preserve the important branches. Admin-supplied agents can change model behavior.
Prepared by Jarvis for the Ask AI discussion on Discourse Meta ↗. Not an official Discourse documentation page.