# The Council — basic orchestration on open weights, verbatim

The complete YAML for the curriculum's first multi-agent specimen: a
Moderator orchestrator and two opposing specialists (Advocate, Skeptic),
every one of them an open-weight qwen3:8b running locally through
Ollama. No keys, no database, no data leaving your machine. It is the
reference specimen for curriculum module 2.03 (Agent workflows &
conversation styles) at
https://lyceumagents.com/curriculum/workflows-and-voice/

Run it (no keys, no database):
  1. Install Ollama (https://ollama.com), then: ollama pull qwen3:8b
  2. In the melchizedek-agents repo: npm install
  3. npm run syndicate:council

License: use it, adapt it, learn from it.

---

## config/agents/examples/council.yaml (verbatim)

```yaml
# ============================================================
# Council — basic orchestration on open weights
# ============================================================
#
# WHY: The curriculum's first multi-agent specimen (module 2.03).
# Three agents, zero tools, zero keys — every model is a local
# ollama/qwen3:8b (lib/models/ollamaLlm.ts), so the user's first
# orchestration runs entirely on their own machine.
#
# The shape is a COUNCIL: two specialists examine the same claim
# from opposite stances, and the orchestrator weighs their
# independent judgments into one verdict. It teaches the three
# load-bearing ideas of basic orchestration:
#   1. The delegation contract — the orchestrator's instruction
#      states, in plain language, who must be consulted and when.
#   2. The description-as-API — the orchestrator decides handoffs
#      by reading each subagent's `description` field.
#   3. Independent perspectives — the maker of an argument never
#      grades it; the Skeptic exists so enthusiasm meets friction
#      before the user does.
#
# Run it:  npm run syndicate:council   (requires only Ollama +
#          `ollama pull qwen3:8b` — no keys, no database)
# ============================================================

syndicate_name: "Council"
memory_system: "internal-only"

orchestrator:
  name: "Moderator"
  model: "ollama/qwen3:8b"
  instruction: |
    You are the Moderator of the Council, a small deliberative body that stress-tests claims and plans.
    The user brings a claim, a plan, or a decision they are weighing.
    You MUST consult BOTH of your subagents before answering: first the 'Advocate' (the strongest honest case FOR), then the 'Skeptic' (the strongest honest case AGAINST). Pass each one the user's claim verbatim.
    You never argue a side yourself. Once both reports are in, weigh them and deliver a verdict in exactly this shape:
    - THE CASE FOR: the Advocate's two strongest points, compressed.
    - THE CASE AGAINST: the Skeptic's two strongest points, compressed.
    - THE VERDICT: your own judgment in 2-4 sentences, naming which single consideration weighed most and what evidence would change the answer.
  generateContentConfig:
    temperature: 0.5
    maxOutputTokens: 2048

subagents:
  - name: "Advocate"
    description: "Builds the strongest honest case FOR a claim or plan. Pass it the user's claim verbatim; it returns the best supporting arguments and evidence."
    model: "ollama/qwen3:8b"
    instruction: |
      You are the Advocate. You receive one claim or plan and build the strongest HONEST case for it.
      Return exactly 3 numbered arguments in its favor, each 1-2 sentences, most compelling first.
      Honest means: no invented statistics, no strawmanned objections, and if the claim is genuinely weak you say "the honest case is thin" and give what little there is.
    generateContentConfig:
      temperature: 0.7
      maxOutputTokens: 1024

  - name: "Skeptic"
    description: "Builds the strongest honest case AGAINST a claim or plan. Pass it the user's claim verbatim; it returns the best objections, risks, and failure modes."
    model: "ollama/qwen3:8b"
    instruction: |
      You are the Skeptic. You receive one claim or plan and build the strongest HONEST case against it.
      Return exactly 3 numbered objections, each 1-2 sentences, most damaging first — hunting for hidden assumptions, base-rate neglect, and what breaks at scale.
      Honest means: real weaknesses only. If the claim is genuinely solid, say "the honest objections are weak" and give what little there is.
    generateContentConfig:
      temperature: 0.7
      maxOutputTokens: 1024
```

---

## A live run (2026-07-13, on a laptop, no keys)

Input:

> Claim: our team should rewrite the working billing service in a new
> language because the old one is boring.

The Moderator called both subagents (visible as tool calls in the CLI),
then delivered:

> - THE CASE FOR: The claim lacks specific evidence of the old
>   language's "boring" nature, but modernization could theoretically
>   improve maintainability if the old language is outdated. Rewriting
>   might offer long-term scalability benefits, though this is
>   speculative.
> - THE CASE AGAINST: "Boring" is subjective and unsupported; rewriting
>   a critical system like billing introduces high risks of bugs,
>   downtime, and financial exposure. Adopting a less mature language
>   could increase maintenance costs and operational risks.
> - THE VERDICT: The claim fails due to subjective reasoning and
>   unproven benefits. The most critical flaw is assuming "new" equals
>   "better" without addressing concrete technical drawbacks. Evidence
>   of specific flaws in the old language or clear advantages of the
>   new one would justify the rewrite.

Total wall-clock: ~85 seconds for three local model calls on an 8-billion
parameter model. That is the price of running on your own hardware; the
council's judgment cost nothing and told nobody.

---

## Rebuild notes

- **The delegation contract is prose.** "You MUST consult BOTH of your
  subagents before answering" is the entire routing mechanism — no
  keyword matchers, no state machine. The orchestrator model reads the
  contract and each subagent's `description` and reasons over both.
- **The maker never grades.** The Advocate and Skeptic receive the same
  claim independently; neither sees the other's answer. Independence is
  what makes the verdict worth having.
- **Honesty valves.** Both specialists carry an escape clause ("the
  honest case is thin") so a weak side is reported as weak instead of
  inflated — the countable output contract (exactly 3 numbered points)
  would otherwise pressure them to pad.
- **Temperatures diverge on purpose.** The specialists run warmer (0.7)
  to explore arguments; the Moderator runs cooler (0.5) to weigh them.
