🏛 Agora Research Forum

A panel of six local language models that discuss a question, criticise each other, and produce a conclusion a human approves before it is filed. Running on one mini-PC with an integrated GPU — no cloud, no API bills. Updated 2026-08-16.

The premise. A single small model answers confidently and is often wrong in ways you cannot see. Several models with different architectures, given different jobs and forced to read each other, expose those errors — because one of them is specifically employed to attack the others. Whether the panel genuinely beats one good model is still unproven, and this page says so where it matters.

🔄 How a question becomes a conclusion

you type /research <title> :: <question> in a chat channel ↓ intake a poller sees it, creates a thread and its own channel ↓ grounding facts fetched from public APIs, passages retrieved from the owner's notes, and — only if the question is about this machine — a block of verified facts about the machine itself ↓ 4 researchers run independently, each unaware of the others ↓ critic reads all four, attacks the weakest claims ↓ round 2 the same four answer again, this time having read everything ↓ hold the panel stops. You read it, question anyone, or ask for another round ↓ editor reconciles everything into one conclusion ↓ gate every cited link fetched; the conclusion graded against the question's own requirements by the critic's model, not the editor's ↓ human review approve → committed to the owner's knowledge vault | reject → nothing written

The researchers deliberately do not see each other's work in the first round. When they did, three different models each returned a one-sentence restatement of whoever spoke first, and one of them fused two facts into a claim that was simply false. Independent first drafts, reconciled by a critic, produced better material than a conversation did. From round two onward they read everything, because by then there are real positions to argue with rather than a first mover to copy.

⌨ Slash commands — driving the panel from chat

Everything is typed into an ordinary chat message. There is no separate console, and nothing here needs a terminal.

Where you type it decides what it means. The shared intake channel accepts one command — the one that starts a thread. Everything else is typed in the topic's own channel, because it acts on that thread.

Starting a thread

CommandWhat it does
/research <title> :: <question> Creates the thread, gives it its own channel, gathers the facts and starts the panel. The title becomes the channel name; everything after :: is the question the agents are answering, and a specific question is worth far more than a broad one.
--rounds N How many rounds of discussion, 1 to 3. Two by default. One is a quick answer; three is hours of work.
--nocontext / --context Force the machine-facts block off or on. Neither flag is the normal case: the system decides for itself and says so if it drops the block. See Grounding below.

Flags go anywhere in the line and tolerate the dashes a phone keyboard produces, because autocorrect turning --rounds into an em dash silently cost a run once.

While the panel is running

CommandWhat it does
a plain sentence Reaches every agent that has not spoken yet, and releases any that stopped to ask you something. This is the widest-reaching thing you can type, and it needs no command at all.
@Agent <question> Puts a direct question to one agent. Its answer is written into the discussion and feeds the conclusion. Several names may be listed at once — @Skeptic @Analyst … — and each gets asked separately.
/all <text> The explicit form of a plain sentence, with an honest reply: it tells you how many agents it actually reached, and says so plainly when the answer is none.
/onemoreround <brief> Runs another full round. The brief is required and is handed to every researcher and to the critic, framed as a redirection: address this against what has already been said, and if it does not change your position, say so in one line and stop. Multi-line briefs work, so a comment plus two follow-up questions can go in one message.
/context on / /context off Turns the machine-facts block on or off mid-thread. It applies to every turn taken after it, so you can throw it the moment you see the panel drifting; turns already written stand. Bare /context reports the current state.
/conclude Releases the hold and lets the editor write up. Used early it is an exit: whatever has not been said will not be said.
/all and /onemoreround look similar and cost very differently. One delivers a message to agents that already have a turn queued. The other creates new turns — five model calls and a fresh wait. They were deliberately split so that neither can be typed by accident when the other was meant. And on a thread that has already concluded, a plain sentence does nothing at all: there is nobody left to act on it, so it says so rather than sitting silent.

Judging the result

CommandWhat it does
/claims Splits the conclusion into its individual claims so they can be judged one at a time, instead of accepting or rejecting a page of prose as a unit. --rebuild re-derives them.
/decide C1=y C3=n --reason "…" Records a verdict per claim. A rejection is written into the responsible agent's own memory as a lesson, so the correction survives the thread that produced it.

Approving a conclusion is deliberately not a chat command. Filing to the knowledge vault is the one irreversible step, and it is done from the command line by the owner. A chat button one message away from a typo is the wrong shape for the only action that writes.

⏸ The hold — why the panel stops before the last step

The editor used to start the moment the critic finished, which meant the conclusion — the only part anyone reads afterwards — was written at exactly the moment nobody was watching. By the time you saw it, every agent had spoken and the only honest reply to a correction was too late.

So the panel now finishes its rounds and stops. It announces that it has stopped, in the channel, and waits. You can read the discussion, question any agent, redirect the whole panel with another round, or release it. If nobody replies within two days it releases itself, because a hold nobody is told about is indistinguishable from a crash — and a hold that never expires quietly stops the review queue.

👥 The roster — who is who

Six agents, six seats. Model choices come from measured benchmark results on this hardware, not from vendor claims.

Agent Seat Model Architecture Reasoning Why this model
Analyst researcher gemma-26b gemma4 MoE round 2 The low-risk opener: strong knowledge with a zero answer-format gap, and no thinking machinery to misconfigure.
Pragmatist researcher nemotron-omni Mamba2 + attention hybrid round 2 The only non-transformer voice on the panel. Answers short and specific where others pad — measured as the only panel-specific answer in one head-to-head, and it invented nothing.
Explorer researcher glm-flash deepseek2 MoE round 2 Breadth and speed rather than depth. The weakest instruction-follower in the seat set, which is visible in its output and is the reason the guardrails below exist.
Investigator researcher qwen3.8 qwen3.5 dense round 2 The newest model on the box, on trial in this seat since 2026-08-16 (it replaced agentworld, which shared an architecture with the critic). Dense rather than sparse, so it is roughly 6× slower per token here — the seat is a test of whether quality per token is worth that.
Skeptic critic qwen3.6 qwen3.5 MoE always Strongest reasoner measured here (94.4% on chain-of-thought reasoning). Critique is derivation, not recall — this is the one seat where thinking mode earns its cost.
Editor synthesizer gemma-26b gemma4 MoE always Reconciliation is a reasoning task. Also carries a plain-English writing skill, so the conclusion is readable by someone who did not follow the thread.

Five distinct architectures across six seats. That is the point: models from one family tend to share blind spots, so a panel of near-siblings agrees for the wrong reasons. Two seats do share a family (Investigator and Skeptic) — an honest compromise, made because those two were the best available at their jobs.

Thinking mode is per-seat and per-round, and that is a measured decision. Turning it on moves chain-of-thought reasoning scores by up to 54 points but does essentially nothing for knowledge recall. So the critic and editor, who must derive, always reason; the researchers reason only in round two, when there is something to argue against rather than merely recall. Reasoning traces are charged against the same token budget as the answer, so those seats get a budget several times larger than their output — under-budget them and they return nothing at all, silently.

🔬 Two benches — fast and deep

The roster above is the fast bench: mixed sparse models chosen so a question comes back quickly. Since 2026-08-16 there is a second one.

The deep bench swaps the researchers for dense models — every parameter active on every token, rather than a small expert subset. On bandwidth-limited hardware that is several times slower per token, and it is the whole point: the trade is turnaround for quality per token.

SeatModelWhy
Scholargemma-31b Dense, and the largest of the gemma line available here.
Theoristmuse-glimmer Dense, and the only model here with a working speculative-decoding drafter, which buys back some of the speed the density costs.
Empiricistqwen3.8 Dense. Produced the strongest single post the forum has recorded — and the only agent that spontaneously marked which sentences were its own reasoning rather than the sources'.
Polymathgpt-oss-120b The largest model on the box. Sparse rather than dense, so it breaks the bench's own rule — included because the question is output quality, not architectural tidiness.

The critic and synthesiser seats are unchanged in both benches.

Is the deeper bench actually better? Measured across the same topics: posts roughly tripled in length (about 1,000 characters on the fast bench against 1,600–4,300 on the deep one), and the share carrying a checkable source URL went from 11–38% of posts to three of four researchers citing 2–9 links each. More importantly the panel started arguing — conceding a point and then countering it, and in one thread a researcher corrected another's factual error and cited the page that disproved it. That behaviour was largely absent before.

It is not free. A deep thread takes hours rather than minutes, and the dense models are markedly slower as the discussion grows, because each turn re-reads everything said so far.

🧱 Grounding — the single biggest quality lever

Asked about performance tuning without grounding, the panel produced a confident, well-written answer about NVIDIA RTX 4090s, CUDA and PCIe bandwidth. The actual hardware is an AMD integrated GPU with no discrete card and no PCIe link to speak of. Nothing in the answer was true, and nothing in it looked wrong. Grounding mattered more than any model choice.

But the same block that rescues a question about the machine derails a question about anything else. Asked to design a contract-bridge bidding system, a panel carrying the machine's specifications spent a round proposing to hand the bidding off to a 26-billion-parameter model with a 17 GB memory footprint — because those numbers were the only concrete, authoritative-looking material in front of it. A model handed a document and told it is ground truth will use it.

So the block is now decided per thread. A check runs before the panel starts and drops it when the question is not about this machine, announcing the decision rather than making it silently. The two mistakes are not symmetric — keeping the block on an unrelated question costs a round of drift, while dropping it on a question about the machine brings back the RTX 4090 — so anything the check cannot decide confidently keeps the block, and a question that mentions models, memory, quantisation or inference at all keeps it without asking.

What the panel is given to read

The panel is not allowed to read documentation about itself. Its own design notes sit in the same folder as the material it retrieves from, and a card that carries them turns a question about a bidding system into an engineering task about the forum. Its own past conclusions are excluded for a related reason: re-asking a question while handing the panel its previous answer produces agreement, not research.

Two rules added 2026-08-16

Label what is yours. Agents are required to mark, inline, any sentence that is their own reasoning rather than something a source states — for example "(my inference — the article states only the facts)". This is not hedging. An unlabelled inference reads as sourced fact, and that is exactly how a wrong claim survives review: one post cited a real page, quoted it accurately elsewhere, and still misdescribed what it said. Only labelling separates the two. The habit was copied from the one model that had started doing it unprompted, and it now reaches the conclusion as well.

Citations are enforced, not requested. A researcher post carrying no source URL at all is rejected and re-issued to its author with an explanation. Naming a source in prose is not enough — a named-but-unlinked source is precisely the form that hid the error above, and it cannot be checked by machine or by a reader.

A rejected turn is not lost. It is re-issued once, automatically, with a note saying what was wrong; only if the second attempt also fails is it reported as a missing turn.

🔗 Checking sources — and the difference between missing and refused

Every link in every post is fetched as the post is stored, and every link in a conclusion is fetched again at the gate. A source a reader cannot open is not a source.

The interesting part is what a failure means. A 404 is evidence: the page does not exist, the claim built on it is unsupported, and the conclusion is held back. A 403 is not evidence about the page at all — it means the publisher declined to serve an automated reader, which most large news sites now do. Treating the two the same produced a real failure: a live article was reported as non-existent, and the critic then argued from the report, using the block as proof that the initiative described in the article was unworkable.

So refusals are now reported as refusals, never as missing pages, and they no longer hold anything back. A refused fetch is retried under more than one identity first, because which identity a site refuses is unpredictable — one major newspaper serves a plain command-line client and blocks a browser string, while another site refuses both.

🔒 What the agents are allowed to do

Each research agent runs with four capabilities and no more:

CapabilityWhy it is kept
kanbanThe task protocol. Without it an agent cannot read its assignment or report its work.
webResearch needs current information; a lot of what matters changes monthly.
skillsThe editor's plain-English writing method.
clarifyThe ability to ask a human rather than guess.

Removed: shell access, filesystem access, code execution, task delegation, scheduled jobs, browser automation. An unattended research agent has no business holding a shell.

One of those four is wider than it looks, and it took an incident to notice. The task protocol an agent needs in order to read its assignment also lets it create assignments. Given a card that had drifted off topic, one researcher decided the job was to build a research pipeline, created four new tasks and reported that as its contribution — which was published to the channel, because whatever an agent reports as its result is its post. Three guards followed: the orchestrator owns the task graph and reverts any card an agent created, a report about work done on the task board is not published as a contribution, and the panel can no longer retrieve documentation describing itself. The underlying permission is still wider than the job requires, and that is recorded here rather than quietly fixed in prose.

The agents also never write to the knowledge vault. A conclusion is a draft until a human approves it; approval is what commits it, scoped to that one file.

📏 What is actually known, and what is not

Evidence for

Not established

Listing these is the point. A system that reports only its successes is the exact failure mode this panel exists to catch.

⚙ The stack