Adversarial AI · Live web evidence · Human arbitration

The Council of Agents

Four experts — Tech, Finance, Risk, Strategy — debate your problem with cited web evidence, then stop and wait for your verdict.

🔎 Every claim sourced 💥 Positions get attacked 🛑 You arbitrate mid-debate 🌐 WebMCP native

⚖️ Convene the council

Experts on the bench

WebMCP bridge

Browser not WebMCP-enabled

The council tools register automatically on every page via document.modelContext.registerTool. In the ChatGPT desktop browser or Chrome 149+ (flag chrome://flags/#enable-webmcp-testing), ask the model to use the SynthCouncil tools on the current page — it can convene, run, read and arbitrate councils, exactly like a human in the UI.

No tools registered yet.

The registerTool call this repository ships (per hackathon rules)
document.modelContext.registerTool({
  name: "council_create",
  description: "Convene a SynthCouncil session — an adversarial committee of AI experts that debates a problem with live web evidence.",
  inputSchema: {
    type: "object",
    properties: {
      topic: { type: "string", description: "The problem to debate" }
    },
    required: ["topic"]
  },
  execute: async (input) => {
    // Relay to the SynthCouncil engine (no API keys in the browser)
    const response = await fetch("https://synthcouncil-api.onrender.com/api/sessions", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ topic: input.topic })
    });
    return response.json();
  }
});
🔌 WebMCP native document.modelContext.registerTool — the browser's model can run the council itself.
⚡ OpenRouter-powered Groq by default; Claude, GPT and more via one key.
🧩 Zod contracts A hallucinated JSON shape can never break a debate.
🧠 Blackboard + DAG Agents never talk directly — the orchestrator distributes the floor.