document.modelContext.registerTool({ name: "search_products", description: "Search the product catalog", inputSchema: { /* ... */ } execute: async (input) => { /* ... */ } });

No account · IndieTerminal is loaded

Make your decision
defend itself.

Give it a decision. Invite opposing perspectives. Attack the assumptions. Commit when the argument survives.

Five dissenters sit here: tech, product, GTM, finance, contrarian. They write structured claims. Dissent exposes that deliberation to agents through WebMCP, on document.modelContext. Open this URL in ChatGPT desktop Sol or Terra with site tools on. You confirm the commit.

Loaded example

IndieTerminal

Should /research and /scan run without a Clerk session?

What this is

The page is the room. The seats are dissenters.

Open the floor and IndieTerminal is already there: a real product, a live question as the heading, empty chairs, no sign-in. Paste the prompt once into ChatGPT in Sol or Terra. Native tools appear. ChatGPT waits while five dissenters write claims. You see the recap in about 30 seconds. Weigh it up lands a verdict. ChatGPT proposes a commit; you confirm it. Then Brain, History, Calibration, WebMCP. The in-page composer on the floor is the same 17 tools.

This is not five models chatting. Each seat is a claim you can score. Evidence and contradictions sit on the table. Commit is an action. Calibration is a number you wrote before the fact.

Five chairs. One empty seat is yours. The red one is the contrarian, the only job that is supposed to be unwelcome.

How to try it

  1. 01

    Open Dissent

    Go to trydissent.vercel.app. Click Open IndieTerminal. Do not sign in. The live question is already the heading. The dissenters have not written yet.

  2. 02

    Paste this once

    Open Dissent and stress-test whether /research and /scan should run without a Clerk session. Read the resulting verdict, propose the strongest next move, and let me retain final authority over the commitment. Before committing, ask me what to commit — do not call confirm_commit until I say so. Then share the public decision link with me so I can view it and share it.

  3. 03

    Watch it walk the product

    Seats write for about 30 seconds. ChatGPT recaps them, proposes a commit, then opens Brain, History, Calibration, and WebMCP. confirm_commit waits for the founder.

What you will see

  • stress_test_decision

    Wait. Five dissenters write. Weigh it up. Recap each seat in one line.

  • get_current_decision

    Short analysis: scores, flip conditions, next move.

  • confirm_commit

    Ask what to commit. Do not close it until the founder says so.

  • share_decision

    A public /share URL you can open and send.

  • get_company_brain

    Opens Brain.

  • get_decision_history

    Opens History.

  • get_founder_track_record

    Opens Calibration.

WebMCP on the page

ChatGPT joins this table through WebMCP.

Dissent exposes its deliberation system to agents through WebMCP. Tools publish on document.modelContext. ChatGPT finds them, calls them, and writes on the same table you see. You confirm the commit.

document.modelContext.registerTool({ name: "search_products", description: "Search the product catalog", inputSchema: { /* ... */ } execute: async (input) => { /* ... */ } });

document.modelContext.registerTool({
  name: "stress_test_decision",
  description: "Seat five dissenters against the live decision.",
  inputSchema: {
    type: "object",
    properties: { question: { type: "string" } },
  },
  execute: async (input) => {
    /* the page writes; the founder confirms the commit */
  },
});
Dissent. Make your decision defend itself