Every MiroFish run starts by reading. Before any agent posts anything, the system works through your seed material — the question you typed and whatever PDF, Markdown, or text files you attached — and converts it into a knowledge graph. That graph then determines who exists in your simulation and what they care about. This article is about that conversion: what the extraction actually pulls out, and how to write seeds that feed it well.

Three kinds of things the extractor wants

When MiroFish parses a seed, it is hunting for three categories of structure.

Actors. Named people, organizations, groups, and roles: “the moderator team,” “Deutsche Presse,” “long-term subscribers,” “the CFO.” Each becomes a candidate node. Vague collectives (“the public,” “people online”) make weak nodes — the extractor can create them, but a persona built on “the public” has nothing specific to want.

Relations. How actors connect: employs, competes with, moderates, subscribes to, reports on, used to work for. Relations become the graph’s edges, and edges matter enormously in the simulation stage — they decide who sees whose posts first and whose opinion carries weight with whom.

Pressures. The forces acting on each actor: revenue targets, reputational exposure, community standing, regulatory attention. Pressures are what make agents want things, and wanting things is what makes their behavior in the simulation non-random.

A good seed is not a long seed — it is a seed dense in named actors, explicit relationships, and visible incentives.

What a strong seed looks like

Compare two ways of briefing the same scenario. The weak version: ten pages of company history, mission statements, and market context, with almost nobody named. The strong version: one page that reads like a cast sheet —

- Dana M., community moderator, 8 years, publicly critical of the
  last price change; high standing with power users.
- Power users (~200 accounts): heavy feature usage, drove the 2024
  backlash, feel ownership of the roadmap.
- The competitor "Relay": cheaper tier, actively courts defectors
  in our forum threads.
- Us: needs +15% ARPU this year; support team already stretched.

Four entries, and the extractor gets four rich nodes, three implicit edges, and a pressure on every one of them. The graph built from the second seed will produce a visibly better simulation than one built from the ten-page version — not because the model is fussy, but because structure in means structure out.

This is also why we tell people not to fear small seeds. A focused page beats a sprawling export. If you’re assembling your first one, the walkthrough in getting started with MiroFish includes a checklist.

What happens to weak material

Nothing dramatic — and that’s the trap. MiroFish will still build a graph from a thin or actor-free seed; it fills gaps with plausible defaults. The run completes, the report reads fluently. But the agents inside it are generic: a “typical customer,” a “typical journalist.” The output drifts toward what any well-read model would guess, because you gave the graph nothing distinctive to hold onto.

If a report ever feels like it could have been written about any company, audit the seed before blaming the simulation. Almost always, the actors weren’t there.

Seeds are also how you steer

One underused technique: the seed is your steering wheel, not just your context dump. Want the simulation to take a particular fault line seriously — say, tension between hobbyists and professionals in your user base? Name both groups, give each a sentence of incentive, and mention one past friction. The graph now carries that fault line, and the simulation will probe it. You haven’t rigged the outcome; you’ve ensured the question gets tested rather than skipped.

The full pipeline this feeds into — graph to agents to report — is laid out in how MiroFish works, and you can inspect the extraction implementation yourself in the open-source repository; the README maps the codebase. To see what a well-seeded run looks like in motion, the demo recording on Bilibili is eight well-spent minutes.

Formats, sizes, and mechanics

The practical details, since people ask. MiroFish accepts PDF, Markdown, and plain text; format matters far less than structure. Markdown and text extract cleanly by nature. PDFs are fine when they’re text-based — announcement drafts, internal memos, exported docs — but a scanned image of a document gives the extractor nothing to read, and slide decks tend to arrive as fragments without the sentences that carry relations (“X reports to Y”, “Z has publicly opposed this”).

Multiple files are not just allowed but encouraged, and a useful pattern is one file per kind of knowledge: the artifact under test (your actual announcement), the cast sheet, and the ground-truth sample of real community voice. Three focused files beat one merged blob because each keeps its internal context intact.

On size: there’s no meaningful lower bound — a half page of dense cast sheet is a legitimate seed — and the practical upper bound is editorial, not technical. Past a few dozen pages you’re diluting the actors the run needs with background it doesn’t. If you’re tempted to attach something long, extract the two paragraphs where people actually appear and attach those instead.

A worked habit to steal

Before every run, spend five minutes writing what we internally call a cast sheet: every actor who plausibly reacts, one line each — name, role, want, grudge. Attach it alongside whatever real documents you have. It is the highest-leverage five minutes in the entire MiroFish workflow, and it’s the difference between simulating your situation and simulating a stock photo of one.

Then open MiroFish and put the sheet to work. If you’d like a ready-made template to adapt, the scenario cards at the MiroFish scenario library each include seed suggestions for their particular setup.