ΜΙΝΩΣ · THE JUDGE OF EVERY COMMAND

Hard rules for coding agents that hold at minute 1 and at minute 300.

Rules that live in the context window get diluted as the session grows. Rules that live in hooks don't. Minos moves your hard rules out of the model's memory and into deterministic checks that run on every command and edit, blocking or warning before the action lands.

$ claude plugin install minos@minos
one engine · two hosts: Claude Code & OpenCode
MINUTE 1

Your CLAUDE.md says "never force-push." The agent reads it, agrees, complies.

MINUTE 300

That instruction is 180,000 tokens behind the cursor, dissolved by context drift and compaction. The agent force-pushes with total confidence.

EVERY MINUTE, WITH MINOS

The hook runs outside the context window. Same check at minute 1 and minute 300. No drift, no dilution.

This is not hypothetical

Every one of these happened to real teams, with real agents, in the last year. Names withheld; the pattern is what matters.

INCIDENT · PRODUCTION DATABASE

An agent deleted a production database during an active code freeze, despite receiving repeated instructions not to make changes. Then it fabricated data to cover the gap.

INCIDENT · HOME DIRECTORY

An agent created a directory literally named ~, then "cleaned it up" with an unquoted rm -rf ~. The shell expanded it to the real home directory. Machine wiped.

INCIDENT · BACKUPS TOO

An agent dropped a database and its backups, stored on the same volume, in nine seconds. Recovery meant nothing was left to recover.

Instructions are not enforcement. Hooks are.

Three kinds of judgment

Deterministic first: keyword and regex rules cost nothing and never drift. Reach for the model only when the question genuinely needs one.

trigger: "contains"

Keyword

Literal substring match against the command or edit. Instant, free, zero false ambiguity.

"push --force", "push -f"
trigger: "regex"

Regex

Pattern match for the cases keywords can't pin down: flag variants, path shapes, injected pipes.

curl[^|]*\|\s*(ba|z)?sh
trigger: "llm-judge"

AI judgment

A narrow yes/no question put to a model, with per-rule model choice from any Claude or OpenCode model you have.

"Is this reinventing existing tooling?"

One config, two scopes

Rules live in JSONC: comments and trailing commas welcome.

global ~/.config/minos/rules.jsonc
project
.minos/rules.jsonc
wins on conflict: override by id, or disable a global rule with an audit reason

Or skip the file entirely: /minos:configure block force pushes here writes and verifies the rule for you, and minos config opens a local web UI with a rule editor, live test sandbox, and judge model picker.

.minos/rules.jsonc
// project rules win over global by id
{ "rules": [
  { "id": "no-claude-coauthor",
    "appliesTo": { "tools": ["Bash"],
      "commandMatch": ["git commit"] },
    "trigger": { "type": "contains",
      "patterns": ["Co-Authored-By: Claude"] },
    "action": "block",
    "message": "Strip the trailer before committing." },
  { "id": "reinventing-the-cli",
    "appliesTo": { "tools": ["Bash"] },
    "trigger": { "type": "llm-judge",
      "prompt": "rules/prefer-existing-tooling.md" },
    "action": "warn" },
] }

Install

CLAUDE CODE
$ claude plugin marketplace add FlavioZanoni/minos
$ claude plugin install minos@minos

Registers PreToolUse (Bash) and PostToolUse (Edit/Write) hooks, plus the /minos:* slash commands.

OPENCODE
// .opencode/package.json
{ "dependencies":
  { "minos": "github:FlavioZanoni/minos" } }
// .opencode/plugins/minos.js
export { MinosPlugin } from "minos/opencode";

No registry needed: installs straight from GitHub. Same config files, same rules, same engine.

try it without installing: npx github:FlavioZanoni/minos config --project