For researchers and scientists

One model is one sample.

A single LLM answer is one draw from one distribution. Kirat lets Claude put the same question to ChatGPT and Gemini. Each model family takes a position independently, Claude submits its own, and the result records every vote with its self-reported confidence. Dissent is kept, not averaged away. Debate stops after two rounds at most, and that cap is enforced in code, not in a prompt.

Claude Desktop (macOS/Windows) and Claude Code; Claude Code cloud sessions with a one‑time setup — not the browser or mobile chatYour own API keysRound cap enforced in codeOne-time purchase
01 — The problem

Agreement gets reported. Disagreement gets lost.

01

A reviewer asks whether the finding survives a different model family. Answering means re-running everything by hand.

02

Cross-model agreement gets written up as robustness — with no record of what disagreed, or how strongly.

03

Prompt, model name, settings and cost sit in a chat history that nobody exports. By Friday they are gone.

02 — What changes

Each run returns a result you can describe in a methods section.

A council vote returns a structured result: the outcome, the decision, how it was reached, the number of rounds, each member's vote with its self-reported confidence, and the cost. A two-thirds majority decides. If members drop out and the rest split, a designated domain owner breaks the tie. With no majority, the result says needs_human instead of forcing agreement.

// a real call and its result kirat_vote({ question: "Cap the coupled effort default, or leave it at maximum?", options: ["cap at high", "decouple", "leave as is"], ownPosition: { position: "cap at high", reasoning: "…", confidence: 72 } }) → outcome: "completed" decision: "cap at high" decisionPath: "unanimous" rounds: 1 // hard cap: 2 votes: [openai 94, gemini 92, claude 72] cost: $0.021

FIG. 1 — One real run, unanimous. The numbers in votes are confidence values the models state themselves — see the limits below. Other outcome values: needs_human, domain_decision, limited, budget_exhausted.

What to write down

Some parts of the procedure are fixed in code: the round cap, the tie-break rule, the budget guard. Others are yours to choose, and they belong in your methods section: which models sit on the council, the effort tier, the date. Model names are settings, so the defaults below are only defaults.

// per run, at minimum tool kirat_vote models gpt-5.6 · gemini-3.6-flash // defaults; a setting third voter Claude, own position // note which Claude model effort tier fast · standard · thorough · max round cap 2 // enforced in code date // providers retire models result outcome · decisionPath rounds · votes · cost

FIG. 2 — A minimal reporting checklist. Kirat version and Kirat's own settings belong in it too.

What this does not do

  • —It is not deterministic. LLM outputs vary between runs. What repeats here is the procedure — same tool, same models, same round cap, same result fields — not the text the models produce.
  • —Agreement is not validity. Cross-family agreement is a descriptive signal within the models you happened to choose. Different model families fail differently, but they can still agree on a wrong answer.
  • —Confidence values are self-reported. The models state a number. It is not calibrated, it is not a probability, and it should not be analyzed as one.
  • —It is not a validated instrument. There is no paper behind this, no validation study, no peer review. It is a documented procedure and a result format. What you conclude from it is on you.
  • —The council is not always the same three members. After repeated API errors, the circuit breaker pauses a member for the rest of the session. A call that times out at max effort is retried once, one effort step lower. With only one API key, the council has one external member, and every result names the missing key. kirat_status shows which members are available — check it before a series of runs.
  • —It is not a data store. Kirat keeps only the last 20 results, in the .kirat folder in your home folder. Save every result you want to analyze yourself.
  • —It does not run everywhere you use Claude. Only where Claude runs tools on a machine that has Kirat installed: Claude Desktop chats on macOS and Windows, Claude Code in a terminal or VS Code, local sessions in Claude Desktop's Code tab, SSH sessions — and Claude Code cloud sessions (Code tab cloud sessions, Claude Code on the web or in the mobile app) after a one-time setup of your cloud environment. The cloud is limited: everyone who uses the environment can read its environment variables, including your keys; Kirat's daily budget counts per session, so set spending limits at OpenAI and Google; background jobs and recent results end with the session; and the environment must allow two hosts, api.openai.com and the Kirat download host. If the setup fails, the session still starts, just without Kirat, and the failed state can stay cached for new sessions until you edit the setup script. Not chat in the browser or the mobile apps, and not Cowork tasks that run in the cloud. WSL sessions and local Cowork tasks are not tested. Networks on your own computer that require an HTTP proxy are not supported — worth checking on an institutional network. Organizations that restrict Desktop extensions to an allowlist block manual installs; ask your admin. Where it runs, in full.
03 — Questions

Before you buy.

Can I cite it?

You can describe and cite the procedure the way you would cite any tool: name, version, model names, effort tier, date, round cap. Fig. 2 above is a starting point. That is what the result supports.

There is no validation paper to cite, and no journal has accepted anything on the strength of this tool. Don't claim more than the result holds.

Is it reproducible?

The procedure is. The outputs are not — that is a property of the models, not of Kirat. Report both.

Report the model names and dates, too. Providers retire models. When one is retired, you enter the new model name and its two prices in Kirat's settings, and from then on your runs use a different model.

Can I add another model family, or a local one?

No. The council is ChatGPT (OpenAI) and Gemini (Google), with Claude as the third voter. You choose which OpenAI and Gemini models sit on it, because model names are settings. Kirat supports OpenAI and Google only; there is no adapter for other providers, and the code is not open source.

If you need other providers, look at PAL MCP: a free, open-source MCP server that supports many providers and has its own consensus tool. Check its current state. If it covers what you need, use it.

If you want to build your own council server with a coding agent, the Blueprint on the main page is documents only: the specification, the architecture decisions with their reasoning, the acceptance checklist, and the benchmark data behind the numbers on this site. You don't need it to use Kirat.

What about sensitive or personal data?

Everything you give Kirat (questions, context, code, images) goes directly to OpenAI and Google, under your accounts and their terms — from your computer, or in Claude Code cloud sessions from your own cloud environment through Anthropic's network proxy for that environment. Kirat has no server, no account with us and no telemetry. We never see your keys or your data.

On your computer, Kirat keeps a .kirat folder in your home folder: the daily cost counter, the cost log, the last 20 results (they contain your questions and answers), the log of delegated decisions and generated images. You can delete it any time.

If your data may not go to OpenAI or Google, Kirat is not for you.

What does a run cost, and how long does it take?

One council decision costs $0.02 to $0.15 in our measured runs, depending on effort tier and input size, and takes 8 seconds to 3 minutes. You pay OpenAI and Google directly. Three models do not cost like one.

Long runs return a ticket at once and finish in the background; Claude collects the result with kirat_result, so a client timeout does not swallow a billed result. Timeouts are set per provider, derived from measured throughput, because the providers differ: median output throughput was gpt-5.6 ≈ 48 tokens/s and gemini-3.6-flash ≈ 196 tokens/s (production runs, Aug 2026, single EU container).

A budget guard reserves the worst-case cost before every call and blocks calls that could exceed the daily budget — $5 per UTC day by default, adjustable. It is best-effort, so also set spending limits at the providers. A separate provider project with its own limit is a good idea.

Licensing for research use?

Kirat is sold under a proprietary license, not an open-source one. A license covers one person, on any number of that person's own devices and own cloud environments. It does not allow redistribution, so each member of your group who runs Kirat needs their own license, and a cloud environment shared with others needs a license for each person.

You may use the results in your own work, commercial work included.

One product for everyone: one purchase, one download with the Claude Desktop extension and the Claude Code plugin. Pricing and details are on the main page.