The record exists because the vote produced it.
Not automation, and not magic: the argument is the artifact. When Claude puts a question to the Kirat council, ChatGPT and Gemini take positions independently, Claude adds its own, and they vote. The call and its result hold the question, the options, each vote, the decision, how it was reached and the dissent. The argument is written down while it happens, not reconstructed weeks later.
Decisions outlive the reasoning behind them.
ADRs get written after the fact, if at all — by which point the reasoning has faded into a summary of the conclusion.
The decision actually happened in a thread. The thread is not searchable, and the person who wrote it has left.
"Why is it built like this?" gets answered with archaeology, by whoever has been there longest.
The argument an ADR needs, written down while it happens.
A council vote produces the part of an ADR that decays fastest: what was asked, what was considered, what won, how it won, and who objected. It is not a finished ADR, and Kirat does not write ADRs. Status, consequences and owner are still yours to fill in. What it removes is reconstructing an argument nobody wrote down.
FIG. 1 — What the result covers, and what it doesn't. We'd rather show you the second row than hide it. The vote numbers are the models' self-reported confidence. With no majority, the outcome is needs_human: you decide.
Kirat keeps the last 20 results in the .kirat folder in your home folder, and Claude can fetch recent ones with kirat_result. That is working memory, not an archive. Save the results that matter wherever your ADRs live.
What it's allowed to decide without you.
One tool is built for decisions you hand off: kirat_decide, for reversible work choices. It has a veto and a daily limit, and every delegated decision goes into a local log in the .kirat folder. For everything else, the council votes and you see the split. With no majority, it says needs_human instead of picking a side.
The rules around the calls sit in the code, not in a prompt:
FIG. 2 — Bill of materials for the guard rails. The budget guard is best-effort: set spending limits at the providers too.
These rules have failed in instructive ways, and the fixes are in the code. One from the release candidates: a budget refusal counted as an API failure and could trip the circuit breaker, removing a healthy member. Budget refusals no longer count as failures. Kirat has 256 automated tests, run without network access. The full failure timeline is in the evidence section on the main page.
What this does not do
- —It is not tamper-proof. The results and the log of delegated decisions are local files in the
.kiratfolder. Anyone with access to the computer can edit or delete them. It is a local run log and a memory aid, not compliance evidence. - —It does not replace code review, and it will not cut your review load on its own. Whether it saves anyone time depends entirely on your workflow. We have no measurement, so we're not claiming one.
- —It does not plug into your pipeline. No bot comments on pull requests, and nothing runs in your build pipeline. Kirat works inside a Claude Desktop chat or a Claude Code session — local, or a cloud session after the one-time setup — when Claude calls it.
- —Delegation is a guard, not a permission system. The veto and the daily limit constrain
kirat_decide. They do not constrain what Claude, your tools or your systems are allowed to do. - —It does not keep your code in-house. Everything you give Kirat (questions, context, code) 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. Compared with using Claude alone, that adds two recipients.
- —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.comand 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. Organizations that restrict Desktop extensions to an allowlist block manual installs; ask your admin. Where it runs, in full.
Before you buy.
Does this replace code review?
No. kirat_review gets findings on a change from other model families before a human looks at it, and every finding is verified by the other model family. Humans still review. It changes what they're looking at, not whether they look.
What is actually allowed to be delegated?
Reversible work choices, through kirat_decide, with a veto and a daily limit. Each delegated decision is written to the log of delegated decisions in the .kirat folder.
Anything that would be expensive to undo belongs in a vote, not a delegation. A vote gives you the positions and the outcome; with no majority, it returns needs_human and decides nothing.
How does it fit an existing ADR process?
It produces the argument; you produce the ADR. The call and its result hold the question, the options and the decision — the part people paraphrase badly weeks later. Status, consequences and owner stay manual; see Fig. 1.
Kirat keeps only the last 20 results, so save the ones you want next to the ADR.
How does it work for a team?
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 person on the team who runs Kirat needs their own license, and a cloud environment shared with others needs a license for each person. There are no seats to administer, no account with us and no server to operate.
Each person uses their own API keys and their own daily budget. We recommend a separate provider project with a spending limit. In a shared cloud environment, everyone who uses it can read its environment variables, including the keys.
Where do the API keys live?
You enter them in Claude's own install or settings dialog. Claude Desktop stores them in the operating system's secure storage (macOS Keychain, Windows Credential Manager). Claude Code stores them in the macOS Keychain, and on Windows and Linux in ~/.claude/.credentials.json, readable only by your user. In Claude Code cloud sessions, they are environment variables of your cloud environment, readable by everyone who uses it.
Kirat has no server and no telemetry. We never see your keys or your data.
What does rollout involve?
Claude Desktop: unzip the download, open Settings → Extensions → Advanced settings → Install Extension…, pick the .mcpb file and enter both keys in the dialog. Desktop warns that extensions installed from a file are not verified by Anthropic; that is expected.
Claude Code: unzip the download and move the extracted kirat folder into your home folder, so that ~/kirat/claude-code exists. Then, in a session, run /plugin marketplace add ~/kirat/claude-code and /plugin install kirat@kirat, and enter the keys when asked. The plugin needs Node.js 20 or later.
Claude Code cloud sessions: once per cloud environment, paste the block from the download (cloud/setup.sh) at the top of the environment's setup script and add both keys as environment variables. We recommend the names KIRAT_OPENAI_API_KEY and KIRAT_GEMINI_API_KEY: they don't collide with a project's own OPENAI_API_KEY (Kirat also accepts OPENAI_API_KEY and GEMINI_API_KEY). If network access is Full, there is nothing to change; otherwise set it to Custom (in newer apps: Limited) with the package-manager default list, plus api.openai.com and the Kirat download host. If the setup fails, the session starts without Kirat, and the failed state can stay cached until you edit the setup script. Check the cloud limits first: where it runs.
If your organization restricts Desktop extensions to an allowlist, manual installs are blocked; ask your admin. The slow part of setup is creating the two provider API keys.
What about updates and model changes?
To update in Claude Desktop, install the new .mcpb the same way (in Claude Code, unzip the new version over the old kirat folder, then restart Claude Code or run /reload-plugins); keys and settings are kept. Compatibility updates are free when possible, with no guarantee. Larger new versions may be sold separately.
Model names and prices are settings. If a provider retires a model, you enter the new name and its two prices — no update needed.
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.