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
- 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.
- 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.
- 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_decisionWait. Five dissenters write. Weigh it up. Recap each seat in one line.
get_current_decisionShort analysis: scores, flip conditions, next move.
confirm_commitAsk what to commit. Do not close it until the founder says so.
share_decisionA public /share URL you can open and send.
get_company_brainOpens Brain.
get_decision_historyOpens History.
get_founder_track_recordOpens 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 */
},
});