If you compress MiroFish into one sentence, it’s this: instead of asking one model to guess how a crowd reacts, it builds the crowd and watches. The middle stage of the pipeline — the multi-agent social simulation — is where that watching happens, and it deserves a proper explanation, because everything distinctive about the tool lives here.

From graph nodes to persona agents

The simulation inherits its cast from the knowledge graph built out of your seed material. Every meaningful node — a named person, an organization, a user segment — is instantiated as an agent: an independent AI process with its own persona brief. That brief compiles what the graph knows about the actor: role, incentives, relationships, past positions, tone of voice.

The persona matters because it constrains behavior. An agent whose brief says “moderator, eight years tenure, burned by the last policy change” will not respond to your announcement the way a fresh enthusiast does. Multiply that by every node in the graph and you get a cast with genuine diversity of interest — which is the raw material group dynamics are made of.

The social surface

Agents don’t answer a survey; they inhabit a simulated social feed. They post, read what others post, reply, quote, pile on, or scroll past. Crucially, who reads whom is shaped by the graph’s edges: an agent pays more attention to actors it’s connected to, the way you read your own community before you read strangers.

Your scenario’s trigger event — the price change, the announcement, the leaked memo — is injected into this surface, and the clock starts.

Rounds, and why they matter

The simulation advances in rounds. Each round, every agent surveys the current state of the conversation and decides what, if anything, to do. Then the results of all those decisions become the input to the next round.

This loop is the entire trick. Round-by-round interaction is what lets opinions travel — and traveling opinion, not initial opinion, is what actually decides how announcements land. A single-pass answer can tell you that some users will be angry. Only iteration shows you whether the anger recruits, mutates into a catchier grievance, or burns out when it meets indifference.

Watch for three recurring dynamics in any run:

  • Cascades. One well-connected agent’s objection gets repeated by neighbors, whose repetition legitimizes it for their neighbors. By round six, an opinion held by 5% of agents can dominate the feed.
  • Camp formation. Agents sort themselves into loose coalitions, often around a phrase rather than a position — whoever coins the stickiest summary recruits fastest.
  • Exhaustion. Threads die. Outrage has a half-life, and seeing when the simulation’s anger decays is often more useful than seeing its peak.

None of these behaviors is programmed as a rule. They emerge from many agents making small, locally plausible choices — the same way they emerge in real communities. That emergent quality is why this stage can’t be replaced by asking a single model to “predict the discourse”; we’ve written a whole comparison on that in simulation vs. a single chat answer.

A round, from the inside

Abstract descriptions of “rounds” undersell how legible the process actually is, so here’s a condensed sketch of what three consecutive rounds might look like in a pricing scenario:

round 2: MOD_DANA posts: "second increase in a year. saying it now
         so it's on record." (3 replies, 2 amplifications)
round 3: POWERUSER_7 quotes Dana: "she's right — and export is
         still broken." grievances begin merging.
round 4: CASUAL_31 (previously neutral): "wait, second time? maybe
         I should look at Relay after all."

Notice what happened between rounds: a specific, respected actor objected; her standing converted an objection into a citable position; a second grievance attached itself to the first; and by round four, an agent with no strong opinion inherited one from the conversation rather than from the price change itself. That last step is the whole argument for simulation — CASUAL_31’s reaction is unpredictable from CASUAL_31’s profile alone. It only exists because of who spoke first and how the feed carried it.

When you read a prediction report later, sequences like this are what the risk signals and narrative paths are compressed from — and the follow-up chat can take you back to any of them.

Seeing it rather than reading about it

Description undersells this stage. The follow-up chat demo on Bilibili shows a finished world being interrogated — you can ask which agent flipped a thread, and get the actual moment back. For the mechanics under the hood, the implementation is open in the MiroFish repository on GitHub; the simulation loop is readable code, not a black box.

Honest limits

A simulated crowd is a rehearsal cast, not a census. The agents are only as representative as the graph, which is only as representative as your seed. Outcomes are exploratory: run the same scenario twice and the broad dynamics usually rhyme while details differ — treat the rhymes as the signal. And a simulation can’t know facts the world hasn’t given it: it models reaction structure, not breaking news.

Within those limits, the payoff is real. When the question is “how do groups respond to each other responding to this?” — the question behind every launch, price change, and policy rollout — group behavior is the phenomenon itself, and simulating it is the only way to look at it before it happens. A worked example of exactly that shape of question is the pricing backlash scenario in the scenario library.

Where the crowd’s noise gets condensed back into something a decision-maker can hold is the next stage of the pipeline — the report — covered in how MiroFish works. Or skip the theory and run one: the simulation is live at mirofish.us, the main MiroFish site.