GenAgentEnsemble.Strategies.Consensus asks two or more agents for categorical verdicts on the same prompt. Each round dispatches in parallel. A :verdict_parser converts each response to {:ok, verdict_atom, rationale} or :error; unparseable responses abstain. When the configured threshold agrees, the strategy replies with a synthesis. At the round cap, it returns a divergence report.

simple = GenAgentEnsemble.Agents.Simple
echo = GenAgentEnsemble.Backends.Echo

parse_verdict = fn text ->
  case String.split(String.replace_prefix(text, "echo: ", ""), ":", parts: 2) do
    ["APPROVE", rationale] -> {:ok, :approve, String.trim(rationale)}
    ["REVISE", rationale] -> {:ok, :revise, String.trim(rationale)}
    _ -> :error
  end
end

{:ok, _pid} =
  GenAgentEnsemble.start_link(
    name: "panel",
    strategy: GenAgentEnsemble.Strategies.Consensus,
    opts: [
      agents: [{"first", simple, backend: echo}, {"second", simple, backend: echo}],
      verdict_parser: parse_verdict,
      threshold: :unanimous,
      rounds: 2
    ]
  )

{:ok, response} = GenAgentEnsemble.ask("panel", "APPROVE: the example is sound")

Echo makes the parsing example deterministic. With real backends, give each agent clear output instructions and make the parser strict: prose that does not match the requested format should abstain instead of being guessed into a decision. The available thresholds are :unanimous, :majority (the default), and {:at_least, n}. The strategy keeps each backend session across rounds and can pass other agents' prior responses into a revision round. Its module documentation defines the reply formats and failure behavior.