Skip to interactive map
discourse / field notesSource study · 08 Sep 2026
Ask AI · An interactive field guide

Search, then
conversation.

One search box. Three ways to look. And a follow-up button that crosses into a different system. Here’s where everything actually goes.

Built from the implementation, not the screenshots. Read the scope ↗Pinned to 2d27a69a27
01

This topic is a search scope.

Classic text search within the open topic—not an instruction to an AI to read it.

02

AI searches the community.

The built-in pipeline retrieves discussions and asks a model to answer from that evidence.

03

Ask opens a conversation.

The follow-up beneath an answer hands off to a configured agent in a private message.

The interactive atlas

Follow the transitions.

Select a state to see its behavior, caveats and source.

The search menu → a private conversation

Arrows show the principal paths. Select a state for additional transitions.

State map / interactive
Take a guided path

A few revealing journeys.

Illustrative walkthroughs, not live Discourse requests.

The evidence boundary

A search assistant, not a web researcher.

“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.

The interaction boundary

The selected option isn’t a sticky mode.

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.

EnterClassic searchShift + EnterAsk AI

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.

The control plane

What an admin can change.

config/settings.yml ↗
SettingWhat it controls
discourse_ai_enabled
ai_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_0Feature-level group access. The synthesis agent’s allowed groups are an additional gate. The user must be logged in and not silenced.
ai_embeddings_enabled
ai_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: balancedThe 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–6Caps 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_enabled
ai_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.
Where the simple picture needs footnotes

The details that change the answer.

Can Ask AI ever search within a topic or private messages?

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 ↗

What exactly crosses into the follow-up PM?

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 ↗

Is “no answer” the same thing as an AI error?

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 ↗

What happens to slow, repeated or superseded requests?

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 ↗

What about full-page search and the old AI Discovery?

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 ↗

Provenance, not a promise

A map of a specific implementation.

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.

Read the implementation

Every layer has a paper trail.