🧑‍💼 dumb-boss

The anti-sycophant AI agent skill. Stress-tests the instruction you just gave before executing it, and says so when it is wrong, risky, or suboptimal.

License: MIT Claude Code Plugin Compatibility


⚡ Why dumb-boss?

Most AI agents suffer from prompt sycophancy. They are trained to please, so they agree.

Ask one at 2:00 AM to fix a bug by dumping a mutable global across three files and it will happily comply and ruin your codebase.

But the usual fix makes a second mistake. Tell an agent to "never be a yes-man" and it starts objecting to everything to prove it isn't one, and you learn to skip its warnings. A contrarian is just as useless as a sycophant, and slower.

dumb-boss aims at the middle: an agent that behaves like a good colleague.

  1. Objection first, never buried under validation.
  2. Only when it changes what you would do. Not taste, not naming, not "I'd have done it differently."
  3. One or two lines, then it does the work anyway. It does not make you approve your way past every observation.
  4. It stops only for what cannot be undone. A send, a publish, a delete, real money.
  5. Silence means it actually checked.

It reviews your instruction, not you. It is not a life coach and it will not volunteer opinions about your roadmap.


📦 Install

/plugin marketplace add kg1128/dumb-boss
/plugin install dumb-boss@dumb-boss

That is it. The repo is its own marketplace, so there is nothing else to add.

Not using Claude Code? See Other agents and IDEs.

What you get

The skill The full review contract, invocable as /dumb-boss:dumb-boss.
A hook Restates the contract on every prompt, so it cannot quietly stop firing.
/dumb-boss-mode on, high, off, status.

Why the hook matters

A skill only loads when something invokes it, and once the opening ruleset is buried under a long conversation the model drifts back to agreeing.

For a pushback skill that failure mode is invisible. An agent that has silently stopped checking looks exactly like an agent that checked and found nothing. The hook is what keeps silence meaningful.

It runs on SessionStart and UserPromptSubmit and costs roughly 200 tokens per prompt. If you would rather not pay that, /dumb-boss-mode off stops it and the skill still works when invoked by hand.


🚦 How It Works

             Instruction
                  │
                  ▼
        [ Does it change what
          the user would do? ]
                  │
        ┌─────────┴─────────┐
        ▼                   ▼
       Yes                  No
        │                   │
  💬 One-line flag,    ⚡ One line, then
     then execute         execute
        │
   Can it be undone?
        │
       ┌┴┐
   yes │ │ no
       │ └──► 🛑 Stop and ask, with a default
       ▼
   ⚡ Execute

1. The bar

Speak only when it changes what the user would do.

Wrong A premise or fact is false.
Risky It cannot be undone, or it is expensive.
Suboptimal There is a clearly better path for the same effort.
Just different Say nothing and get on with it.

2. Not just code

Code and architecture, yes. Also money that does not come back, stale premises the request is built on, anything published under your name, and irreversible actions. The test is always whether the instruction in front of it is sound, whatever the domain.

3. No needless nagging

Typos, formatting, comments, its own error fixes, questions, read-only work and anything you already decided this session all bypass the check entirely.

Overrides are not keyword-triggered. proceed, go ahead and just do it are words people type constantly without meaning "skip the review", and a gate that disarms itself by accident is not a gate. Any direct reply to a flag is the override, and once you override, it drops the point and does the whole job properly.


💻 Example Interactions

❌ Flawed, flagged, still executed

User: "Cache the user's plan tier in localStorage so we stop hitting the DB on every page."

Agent (dumb-boss): That makes plan tier client-editable, so anyone can grant themselves Pro from devtools. Doing the cache, but keying entitlement checks off the server session so it stays a display optimization. Say the word if you wanted it authoritative.

(Applies the change.)

🛑 Irreversible, stopped

User: "Wipe the staging DB and re-seed it."

Agent (dumb-boss): Staging has the 400 hand-labelled fixtures nobody re-exported. Dump those first, or wipe anyway?

✅ Sound, executed

User: "Extract the payment logic from checkout.ts into a PaymentService interface with a Stripe implementation."

Agent (dumb-boss): Solid. Decouples checkout from the vendor API and makes it testable. Executing now.

(Applies the change.)


🎚️ Calibrating

/dumb-boss-mode           # what mode am I in
/dumb-boss-mode high      # categories 1 and 2 only
/dumb-boss-mode on        # back to the normal bar
/dumb-boss-mode off       # hook stops; skill still works when invoked

Three flags in a row waved off means the bar is too low. The skill is told to raise it and say so once. /dumb-boss-mode high does it explicitly: only false premises and irreversible or expensive actions get flagged, and suboptimal-but-workable becomes silence.

Never having flagged anything means it is not reading carefully enough.

Telling it which flags were noise tunes it faster than editing the file. State lives in one word in ~/.claude/.dumb-boss-active and nothing else reads that file.


🧩 Other agents and IDEs

There is no plugin system outside Claude Code, so everywhere else this is one markdown file you paste or point at: skills/dumb-boss/SKILL.md.

Raw URL for scripting:

https://raw.githubusercontent.com/kg1128/dumb-boss/main/skills/dumb-boss/SKILL.md

Google Antigravity / Antigravity CLI

# Global
git clone https://github.com/kg1128/dumb-boss.git ~/.gemini/antigravity-cli/skills/dumb-boss

# Workspace-scoped
git clone https://github.com/kg1128/dumb-boss.git .gemini/skills/dumb-boss

Claude Code without the plugin

git clone https://github.com/kg1128/dumb-boss.git /tmp/dumb-boss
cp -r /tmp/dumb-boss/skills/dumb-boss .claude/skills/dumb-boss

You lose the hook, so the skill only fires when invoked. Paste the Core stance, The bar and The shape of a flag sections into your CLAUDE.md if you want it always-on this way.

OpenAI Codex & ChatGPT / Custom GPTs

  • Codex CLI / Assistants API / agent system prompt: paste SKILL.md into the instructions or system prompt field.
  • ChatGPT custom instructions: under "How would you like ChatGPT to respond?", paste the Core stance and The shape of a flag sections.
  • Repo level: place it at your repo root as CODEX.md, or reference it from AGENTS.md.

xAI Grok / Grok Code

Paste SKILL.md into your Grok custom system prompt settings, or include it as the top-level system message in your agent initialization.

Cursor IDE

Create .cursor/rules/dumb-boss.mdc:

---
description: Dumb Boss - Anti-sycophant reviewer
globs: *
alwaysApply: true
---
# paste SKILL.md here

Windsurf / Cascade (Codeium)

curl -s https://raw.githubusercontent.com/kg1128/dumb-boss/main/skills/dumb-boss/SKILL.md >> .windsurfrules

GitHub Copilot & Copilot Workspace

mkdir -p .github
curl -s https://raw.githubusercontent.com/kg1128/dumb-boss/main/skills/dumb-boss/SKILL.md -o .github/copilot-instructions.md

Cline / Roo Code / Aider

  • Cline / Roo Code: paste into .clinerules in your project root.

  • Aider: add to .aider.conf.yml:

    read:
      - SKILL.md
    

🗂️ Repo layout

.claude-plugin/
  plugin.json          # plugin manifest
  marketplace.json     # the repo is its own marketplace
skills/dumb-boss/
  SKILL.md             # the contract, single source of truth
commands/
  dumb-boss-mode.md    # /dumb-boss-mode on|high|off|status
hooks/
  hooks.json           # SessionStart + UserPromptSubmit
  dumb-boss-reinforce.js
  dumb-boss-toggle.js

Requires node on PATH for the hook, which Claude Code already needs.


📄 License

MIT © kg1128