Every key in ~/.deadeye/config.json (or a project's own
.deadeye.json), what it controls, its default, and its allowed values.
This page is a rendering of schema/config.schema.json — the same file
deadeye config set validates against — so it can't drift into describing
settings that don't exist.
Change any of these with /deadeye config (a settings pane with the Claude Code mod on, a picker from chat otherwise), or directly:
deadeye config list — every key, current value, allowed values.
deadeye config get <key> — one key's effective value.
deadeye config set <key> <value> — validates and writes
~/.deadeye/config.json, preserving every other setting.
Each axis is independent — turning one off doesn't touch the others.
Most default to on/advise; nothing here needs the network
except routing_judge and catalog_check, both fail-open and
bounded.
Set: deadeye config set mode.routing enforce
Subagent model routing. Fits each subtask to the cheapest model
tier that can still do it, based on cheap signals (prompt shape, file scope, git
churn, test presence, task specificity) plus the AI routing judge on ambiguous
cases. advise suggests the tier; enforce sets it on the
Agent call.
Set: deadeye config set mode.effort enforce
Effort level (low/medium/high/xhigh) alongside the routing
decision. advise suggests it; enforce sets it on Agent
calls that left effort unset. Enforcing needs Claude Code 2.1.292 or newer —
older clients keep getting advice. CLAUDE_CODE_EFFORT_LEVEL, if you
have it set, overrides both.
Set: deadeye config set mode.preprocess off
Context hygiene: Bash-output rewrite rules and unbounded-dump
advisories (test/build/lint/install/log output, diffs, history, find/
tree/du/package-list caps), the duplicate-Read /
large-Read / repeat-command / content-mode-Grep-without-head_limit
advisories, repeat-WebFetch / oversized-MCP-response / flag-escalation-retry /
large-paste / long-exploration-streak / compact-timing advisories, the subagent
brevity note, and response-size observation logging. Individual rules can be
turned off one at a time — see Preprocess rules below.
Set: deadeye config set mode.plan_gate hard
Plan-first gate before multi-file edits. soft
nudges; hard blocks an Edit/Write past the file-count trigger
(plan_gate.min_files) until a plan exists.
Set: deadeye config set mode.workflow_hint off
One-line workflow-authoring suggestion when a task shape looks like it would benefit from the Workflow tool.
Set: deadeye config set mode.codemap off
Cross-session codebase map: a directory/package skeleton
rebuilt when the tracked-file list changes, plus accumulated touch-frequency and
exploration notes, injected once per session. off disables both the
SessionEnd writes and the injection.
Set: deadeye config set mode.update_check off
Once-per-session background check for a newer deadeye release;
when one is out, the agent asks (once per version) whether to update via
/plugin update. Cached ~24h, never blocks the hook response.
Set: deadeye config set mode.routing_judge off
When the cheap signals can't confidently place a subtask (the
majority of real routing decisions), classify its complexity with a real model call
— shells to claude -p (sonnet), reusing your Claude login, no API key —
instead of defaulting to the sonnet tier outright. Cached per task, fail-open on any
error. A deliberate trade of the zero-network default for accuracy on genuinely
ambiguous cases: this can block the routing decision for up to 30s on an unsure,
uncached task. off restores pure heuristics with no network call.
Set: deadeye config set mode.catalog_check off
Background refresh of the hosted model/pricing catalog (a
static JSON file on this site), so a new model or price change reaches routing
without a plugin release. Read-only GET, no request body. Cached ~24h, never blocks
the hook response, and only takes effect if the fetched catalog is well-formed — a
bad or unreachable fetch always falls back to the compiled-in table. A local
~/.deadeye/catalog.json override always wins over the hosted copy.
Codex, Gemini CLI and Cursor each have their own table, refreshed and overridden
the same way (catalog-codex.json, catalog-gemini.json,
catalog-cursor.json).
Set: deadeye config set mode.mod on
deadeye in Claude Code's own UI, themed: a HUD under the writing
area (coder level, branch, model, context used, rate-limit window and reset time), a
themed spinner and finish line, themed tool rows, a one-tag line for every deadeye
block (and one row above the prompt while the plan gate holds), the
/deadeye pane on demand (scope, config, themes, stats and help tabs; docked
beside the transcript from 110 columns under Claude's fullscreen layout —
"tui": "fullscreen" in ~/.claude/settings.json, or
CLAUDE_CODE_NO_FLICKER=1 claude — inline above the prompt otherwise), and
/deadeye theme, a picker over sixteen themes. Display only —
routing and gates don't change. Tuned by mod.*. Takes
effect in the next session or after /reload-plugins. Needs a Claude Code
build with mods (2.1.75+); older builds load the rest of deadeye as before.
Injected into coding sessions and matching subagents. security
and security_osv are independent of the persona level since 0.17.0 —
turning the persona off no longer silences the security lens.
Set: deadeye config set coder.default_level sniper
Coder-mode intensity new sessions start at. spotter flags
the leaner alternative but builds what's asked; marksman enforces the
lean-first ladder (default); sniper is maximum minimalism and challenges the
requirement itself. Switch mid-session with /deadeye-coder <level>
— that changes only the live session, not this default.
Set: deadeye config set coder.subagent_matcher '^review-.*'
Optional regex on agent_type scoping which
subagents receive the coder ruleset. Empty matches every subagent. A regex that
fails to compile fails open (injects anyway).
Set: deadeye config set coder.injection_budget_tokens 3000
Logged ceiling for the coder ruleset injection — separate from the top-level 400-token advisory budget, since the persona is an explicit opt-in and byte-stable per level.
Set: deadeye config set coder.security ask
Live security advisory on Edit/Write: SQL/shell/eval injection
shapes, TLS-off, hardcoded secrets and provider tokens, weak crypto, and
vulnerable/superseded dependencies in a manifest. ask additionally
escalates a manifest edit that adds a dependency with a confirmed OSV
advisory to a permission prompt (injection/secret/crypto findings stay
advise). Also disabled by /deadeye-mute or the
DEADEYE=off / DEADEYE_CODER=off env kill switches.
Set: deadeye config set coder.security_osv false
Whether the dependency check may consult OSV.dev — package
name and version only, never file paths or code — via a background cache refresh.
false keeps the check fully offline; the bundled superseded-package
table still works.
Watches PreToolUse on Read and Bash for a credential file
being read or shipped out — the classic first step of prompt-injection-driven secret
egress. A top-level axis, independent of the coder persona: not disabled by
DEADEYE_CODER=off, only by DEADEYE=off. A project's own
.deadeye.json cannot weaken this axis — only
~/.deadeye/config.json can, so a hostile repo can't ship the guard's own
off-switch alongside its prompt injection.
Set: deadeye config set security.exfil advise
On a match: ask escalates to a permission prompt
the model can't answer for itself (a prompt-injected instruction can't approve it);
advise emits a one-line nudge; off disables the guard.
Default ask — credential-file access is rare enough that
interruptions should be too.
Not settable via deadeye config set — hand-edit the
"security": {"sensitive_paths": [...]} array in
~/.deadeye/config.json directly.
Extra glob patterns treated as sensitive credential paths,
additive to the built-in table (~/.ssh private keys,
~/.aws/credentials, .env,
~/.claude/.credentials.json, ~/.netrc,
~/.kube/config, and more). Matched with filepath.Match
against the full path and basename.
Set: deadeye config set plan_gate.min_files 3
Working-tree modified/staged file count at which the gate's
multi-file trigger fires — see mode.plan_gate for
what happens once it does.
Set: deadeye config set mod.theme tokyonight — or /deadeye theme in Claude Code, which saves the same key. See every theme →
Five deadeye originals (Marksman, Night Vision, High Noon, Blueprint, Ghost)
and ports of the palettes people use most in their terminals (Tokyo Night, Catppuccin
Mocha, Rosé Pine, Gruvbox, Dracula, Nord, Kanagawa, Everforest, Synthwave '84, Solarized
Dark, and Rosé Pine Dawn for daytime). Each one styles what the mod draws — spinner verbs,
finish line, tool-row glyph, block tag, HUD, scope pane. auto follows the
coder level: Blueprint in review, Night Vision as sniper, Ghost when the persona is off.
Set: deadeye config set mod.repaint off
Recolours Claude Code itself to match the theme — accent, prompt border,
diffs, your message background — through a custom theme file written to
~/.claude/themes/deadeye-<theme>.json and Claude's own theme setting. The
theme you had is put back when mode.mod goes off. All sixteen theme files are
written when the mod comes on; Claude Code reads that folder at startup, so restart it
once after the first run and every theme then repaints by itself.
/deadeye repaint retries and says why if Claude refused. Your terminal's
background and font stay yours.
Set: deadeye config set mod.background off
Paints the terminal's own background and foreground to match the theme, so
the whole window changes, not just Claude's colours. Written as OSC 11/10 to the
terminal that hosts Claude and reset (OSC 111/110) when the session ends or the mod
goes off. Honoured by iTerm2, Ghostty, Kitty, WezTerm, Alacritty and VS Code's
terminal; inside tmux the pane is coloured through tmux's own pane style;
ignored by JetBrains terminals and Terminal.app. If a session dies before
resetting: printf '\e]111\a\e]110\a'.
Set: deadeye config set mod.hud full
The HUD row under the prompt, drawn in place of the idle hint line.
full: level, branch, model, context, rate-limit usage and reset time.
deadeye: level, theme, routing-accuracy and context meters, gate — for people whose own
statusLine already shows branch, model, context and usage.
auto picks deadeye when a statusLine is configured in Claude's
settings and full otherwise. off leaves Claude's hint line.
Set: deadeye config set mod.tips off
One-line tips about deadeye's commands, the way Claude Code shows its own: in the spinner line while a turn runs and at the end of the hint line while you type, about one turn in five, never the same tip twice in a row. A command's tip retires once you've used that command, so the deck shrinks to what you haven't tried.
Set: deadeye config set mod.sounds on
A soft click when a turn lands, a low tone when deadeye blocks a call. macOS only; other platforms play nothing.
Set: deadeye config set mod.notify on
A desktop notification when a turn longer than a minute finishes while you're away.
Set: deadeye config set downshift_threshold 0.6
Minimum kernel confidence required to lower model tier or effort. Upshifting (to a more capable tier) is always free and never gated by this.
Set: deadeye config set injection_budget_tokens 600
Ceiling on the total SessionStart advisory injection — every
mode advisory combined, not counting the separate coder-persona budget
(coder.injection_budget_tokens).
An array of rule/advisory names to disable one at a time, without
turning off all of mode.preprocess. Default: empty
(every rule active). Example: deadeye config set preprocess.disabled_rules
test-filter,log-tail is not supported by the picker — hand-edit the array in
~/.deadeye/config.json instead, since a comma-split flag is more
surprising than helpful for a list.
| Group | Rule names |
|---|---|
| Bash output caps | test-filter, build-filter, log-tail, diff-cap, lint-filter, install-filter, logs-tail, cat-large, history-cap, tf-plan-cap, kubectl-yaml-cap, npm-ls-cap, find-cap, tree-cap, du-cap, pkg-list-cap |
| Advisories | grep-limit, read-advice, repeat-command, bash-retry, repeat-webfetch, mcp-oversize, large-paste, delegate-explore, compact-timing |
| Coder security rules | secret-literal, weak-crypto, tls-off, sql-concat, shell-interp, eval-dynamic, html-inject, java-deser, jwt-unverified, insecure-deser, cors-wildcard, cookie-insecure, weak-random-token, debug-on, ssti, xxe, open-redirect, nosql-inject, csrf-off, zip-slip, graphql-introspection, host-header-trust |
| Dependency checks | dep-check (or a specific dep:<ecosystem>:<name>), dep-flag (the session-start scan of existing manifests) |