*Not an operating system.
a flag, not an operating system
a second opinion, with a receipt
A second opinion for your Claude Code skills, only when they need one.
You came for a skill. Sit down.
A skill makes its normal decision in code. When that code can tell the answer might depend on context, and only then, it asks two judges: a small model and a big one that know the person they're working for, each given the same bounded question. They advise; they can't act. If both disagree with real confidence, you settle it. Every path is logged, and any failure falls back to the code's own pick.
Judgement is an escalation, not the way the skill runs. When there's nothing to judge, the cost is two log lines.
Four things came with it. Turn them over.
hover to turn · tap on a phone · click to keep one up · the small line opens the detail
One morning with nothing to judge. One request where the judge earned it. Both real, both from the log.
That was the show. This is what's different, how to add it to a skill of your own, what the judge can't do, and the numbers.
Eight steps, from the integration spec. The skill keeps its own rule; the Judgement OS brings the judges, the checks and the log.
Your skill provides the decision's id, the default pick in code, the consult-only-if rule in code, the bounded question, and how a disagreement reaches the person. The Judgement OS provides the judges, checks on every answer, the interrupt rule, the append-only log and its counts, the open, verdict, combine and close commands, and the results page.
A script in your plugin that takes the decision's inputs and prints the default, whether to consult, why, and the question. Pure code, tested.
{ "default", "consult", "consultWhy", "question" }Installed plugins don't sit side by side, so a relative path won't reach. Not found: use the default and log nothing. The skill must work without it.
node find-plugin.js labs scripts/record.jsLogs the pick and why the judges were or weren't asked. Every path logs this line.
record.js open --decision <file> --run live --point <your.decision>Two agent calls in one message, one per model, the question word for word: one wait.
subagent_type: "labs:second-opinion" · small + bigA heredoc ends early on an answer that contains a line saying EOF. An answer the recorder marks invalid counts as no answer.
The recorder applies the interrupt rule. By default the person hears about it only when both judges disagree, each at medium or high confidence, and a judge past the timeout counts as no answer. What it shows becomes one question; everything else is silent.
record.js combine --call <id>What was used, and how it was settled: by the rule, by a name, by the person, by the picker, typed, or dismissed.
record.js close --call <id> --final <used> --settled-by <how>Any failure in steps 2 to 7 falls back to the default and the skill carries on. Judgement never stops a skill.
→ the rule's pickThe judge is an untrusted advisor. What protects you is that it can't do anything.
What's measured, what's built, what's still a plan. Counts, never percentages.
Two editions from one source. The judge is the core; the rest are the skills it judges for. Open a part for its sheet: what it does, and what runs without being asked.
Each edition's exact contents ship with its release notes.
The same Judgement OS. One works from a profile you write yourself; the other also reads your own selfActual vault. Both are public, and they sit side by side.
Any Claude Code user.
The judges, the day loop with habits, a daily reading and a language phrase, the house styles with their component kits, make, the send gate, Slack polling, party games and 28 of Jay's gears, loops and modes. The judges work from a profile you write for yourself: /labs:profile starts you off, and they stay quiet until it's filled in. It never needs selfActual.
/plugin marketplace add netmobster/judgement-os-general /plugin install labs@judgement-os /plugin install guard@judgement-os /plugin install sexyhtml@judgement-os /plugin install make@judgement-os /plugin install comms@judgement-os /plugin install day@judgement-os /plugin install dice@judgement-os /plugin install gears@judgement-os
People with a selfActual account. Once a month it checks that your account answers.
The same, plus context from your own selfActual vault: your tasks, your gears, loops and modes, your messages and your profile. Without a selfActual account it says so, points to selfactual.ai, and runs nothing else.
/plugin marketplace add netmobster/judgement-os-sa /plugin install labs@judgement-os-sa /plugin install guard@judgement-os-sa /plugin install sexyhtml@judgement-os-sa /plugin install make@judgement-os-sa /plugin install comms@judgement-os-sa /plugin install day@judgement-os-sa /plugin install dice@judgement-os-sa /plugin install sa@judgement-os-sa
Your skills keep making their normal calls in code. When the code can tell an answer might depend on you, two judges who know how you work weigh in, and you hear about it only when both disagree.
*No, really. Not actually an OS.
A skill is a procedure. Most of its steps are mechanical. A few are judgement calls, where the right answer depends on who's at the keyboard and what's going on with them. Those steps get marked.
Any failure (no answer, a malformed answer, no labs plugin) means the rule's pick stands. When there's nothing to judge, the cost is two log lines.
Each judge sees nothing the code didn't put in the question. It answers in one shape, and the recorder checks that shape in code before anything can show.
{"verdict":"proceed|clarify|challenge|redirect",
"confidence":"low|medium|high",
"why":"one sentence",
"fact":"what it rests on",
"suggestion":"the alternative, or null"}
why is the question.What reaches you
why is the question.The recorder checks every answer: valid JSON, a confidence, a fact behind any non-proceed verdict, nothing from your private topics. Anything else is logged as invalid and the rule's pick stands.
Five marked decisions are shown here, and all five ship in both editions. It's a pattern, not a single trick. In each one the rule's pick is the normal path and the judges are the escalation.
In all of them, no profile on the machine means the rule decides, and a request touching your private topics never reaches the judges.
“Instruction” means a model is asked to do it, and nothing checks that it did. We say which is which.
Held by code
Held by instruction only
Before a judge sits at a decision with consequences, rows move from the right column to the left. The red-team briefing has the full claims table and the attacks against it.
Not yet: cutting a slow judge off. A late answer doesn't count, but the skill still waits for it. Nothing here is bulletproof, and the page doesn't say it is.
The judges are tested like anything else, with a LABS test kit. Blind tries ship in both editions as /labs:try; the rest runs in Jay's own install for now.
In the editions the log ships with the recorder, so your own counts build up as you use it: node labs-log.js summary prints them.
What the recorded cases found
The log counts agreement and overrides. That's all it measures. No accuracy scores, no percentages.
Where your tasks come from: a TASKS.md in the General Edition, your selfActual vault in the selfActual Edition.
Hook: clock.js stamps the local time on each prompt and says when a check-in is due.
::A fixed-text menu: help, try one, statusThe gears live in your vault, not in the package. Without a selfActual account it can't sign in, so it says so and points you to selfactual.ai.
What's in it
HANDOFF.md for /day:boot to readWrite your own: one Markdown file in ~/.claude/judgement-os/gears/, and the router picks it up on the next request. selfActual users get more gears, working from their live profile: selfactual.ai.
Hook: the send gate (both editions). Outbound Slack and vault messages are denied without a pass. A message you type yourself that says “send”, “send it” or “approved” grants one pass, good for 15 minutes. Drafts pass.
One script, guard.js, on shell commands, file writes and every connector call, with its own tests (node guard.js --test).
terraform apply, process-manager restartsreset --hard, clean -f, branch -D, push --delete, rm -rf, Remove-Item -RecurseRules that name your own systems, such as your repos' main branches or your servers, are yours to add. A crash in the guard never blocks work. Skill: guard explains a block when one happens.
1d20+5, advantage and disadvantage, damage, ability scores. It never makes a result up.artifact-design (and dataviz or artifact-diagramming when needed). Interactive pages end in a copy button. Never a score out of anything.Styles
Component kits
Each house style ships with its own kit of ready-made parts: callouts, stat rows, timelines, step lists, comparisons, question panels, numbered figures, line charts, small multiples, layers and a slide frame. ECHO-JAY carries 31 components and Seren 27; the selfActual Edition adds selfActual's 30. Claude fills in the words and the numbers, and the look comes with it.
/make picks where it lands: a page, a form or card in the chat, a deck, a design, a living doc, a file or a design system. Then it hands it to the right maker; pages go to sexyhtml./make:diff-review, /make:plan-review, /make:project-recap and /make:fact-check: a page that cites every claim./make:guide: a checker page that walks you through each make tool once and keeps your answers.Blind tries ship as /labs:try. The rest of the LABS test kit (recorded cases, a results page) runs in Jay's own install for now.
The judges are one agent, second-opinion, run on two models, with one tool (Read) and one file to read. It answers in a fixed shape: a verdict, a confidence, why, the fact it rests on, and a suggestion. The recorder checks every answer in code before anything can show it. The log is append-only, and only its scripts write it.
The developer pages are being written. Until then, the eight steps in the paperwork are the recipe.