Variables
Batch exclude: ${user_config.batch_exclude}
Batch promote: ${user_config.batch_promote}
Batch demote: ${user_config.batch_demote}
Deep-research verification depth: ${user_config.research_deep_verification}
Purpose
Report discipline's effective configuration without editing Claude Code settings.
The plugin's whole configuration surface is native userConfig: three
sweep-all batch-overlay options (batch_exclude / batch_promote /
batch_demote) plus do-your-research-deep's verification-depth default
(research_deep_verification). Claude Code prompts for them when the plugin is
enabled, stores non-sensitive options in user settings, and ignores pluginConfigs
entries in project and local settings on current releases (>= 2.1.207).
Check-only per the uniform setup contract's userConfig-only carve-out: this plugin's
entire configuration surface is native userConfig, so check (the default and only
action) verifies and reports, and reconfiguration routes through Claude Code's native
flow, an apply here would have nothing to write except the pluginConfigs setup
must never touch. Non-interactive: report and recommend; never block on a question.
Official contract: https://code.claude.com/docs/en/plugins-reference#user-configuration.
check (read-only, the only action)
- Read the four rendered
${user_config.…} values from the Variables block
above (the three batch_* overlay options and research_deep_verification). Do
not inspect or edit settings.json, settings.local.json, managed settings, or
pluginConfigs directly.
- Empty or unexpanded is unset. An option the user never configured does not
reliably render empty, the literal
${user_config.…} token can survive (a
zero-config or headless install). Treat BOTH an empty value AND a surviving
literal placeholder as unset (the key's own default applies); never read the
literal token as a value.
- For each set batch option, split on commas and report the parsed corrector names,
and the net effect:
batch_exclude drops those correctors from the batch,
batch_promote runs those situational correctors every session, batch_demote
gates those core correctors on relevance. With all three unset, report that the
batch runs the tiers exactly as the correctors declare them.
- Validate the batch names against what is installed. Glob the sibling corrector
directories under this plugin's
skills/ and, for each name in an overlay, report:
- a name in
batch_exclude or batch_demote that matches no installed corrector: FAIL (typo or removed corrector); remediation: fix via the plugin configuration
prompt;
- the same name in
batch_exclude and in batch_promote/batch_demote: contradictory; report it;
batch_promote is situational-only (read metadata.discipline-batch):
promote only situational names. A promote naming a never-tier or core
corrector, or a name that matches no installed corrector, is a visible
warning and is not promoted, never stays out of the batch, core stays
core, unknown is ignored. Do not report these as successful promotes.
- a
batch_demote naming an already-situational corrector, a no-op; INFO.
- Report the deep-research verification depth.
research_deep_verification sets
do-your-research-deep's default depth. Report the effective value: tiered
(fan subagents out only over load-bearing items) or full (subagent-verify every
item). An unset value, a surviving literal placeholder, OR any unrecognized string
(not exactly tiered or full) all resolve to the tiered default. Report an
unrecognized value as a WARN (typo; remediation: fix it via the plugin
configuration prompt) that still falls back to tiered, never a hard failure. Note
that an invocation argument to do-your-research-deep overrides this default per
invocation.
- Full-batch prerequisite. INFO: the batch's mid-session pass dispatches
conversation-inheriting fork subagents. Fork mode is on by default in interactive sessions
on Claude Code >= v2.1.232 (off by default in non-interactive
-p and Agent SDK sessions;
CLAUDE_CODE_FORK_SUBAGENT overrides either way:
https://code.claude.com/docs/en/sub-agents#fork-the-current-conversation, re-checked 2026-08-26).
sweep-all preflights this itself and degrades when the fan-out cannot inherit; that runbook owns the behavior; report the prerequisite here only so an unavailable
fan-out reads as expected rather than as a misconfiguration, and do not restate what
the degraded pass does.
- To change or clear any value, direct the user to Claude Code's native flow, per the
marketplace's plugin-reconfiguration convention, which owns the verified-version record
(https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/plugin-reconfiguration/README.md):
interactive
/plugin configure discipline@<marketplace> any time; headless, rerun
claude plugin install discipline@<marketplace> -s user --config <key>=<value> (repeatable
per key) — against an already-installed plugin it prints already installed and still writes
the value. Never uninstall to reconfigure: that drops the whole stored pluginConfigs entry,
resetting every option to its manifest default. -s defaults to user, the only scope whose
pluginConfigs these options load from (see above). Claude Code owns persistence. Do not
hand-edit any pluginConfigs key.
- Tell the user to rerun
check after reconfiguration in a fresh session: the rendered
${user_config.*} values are injected when this skill loads, so a same-session rerun still reports
the OLD values. Report the OBSERVED effective values from that fresh run, never an unobserved change.
Gotchas
- No
apply.
Do not write the plugin cache, Claude Code user settings, or pluginConfigs,
per the uniform setup contract (docs/PLUGIN-PHILOSOPHY.md
"Setup is explicit and repeatable" in the marketplace repository). And
pluginConfigs is the only thing an apply here could write, so there is no
conforming apply to offer: reconfiguration is the native
/plugin configure discipline@<marketplace> flow.
- Unexpanded token is not a value. A surviving literal
${user_config.…} means
unset (the key's default applies). Parsing it as a corrector name or a depth value
is the failure this check exists to prevent.
1---2name: setup-183description: Validate the discipline plugin's configuration, the posture-batch overlay and do-your-research-deep's verification depth, and explain how to change it through Claude Code's plugin configuration prompt. Use when: 'set up discipline', 'configure discipline', 'discipline setup', 'is discipline configured', 'what's in my posture batch', 'what's my deep-research depth', or you want to adjust which correctors the batch runs or how deeply the research fan-out verifies. Actions: check (read-only verification, default and only action. This plugin's entire configuration is native userConfig, so there is nothing an apply could write).4---56## Variables78Batch exclude: `${user_config.batch_exclude}`9Batch promote: `${user_config.batch_promote}`10Batch demote: `${user_config.batch_demote}`11Deep-research verification depth: `${user_config.research_deep_verification}`1213## Purpose1415Report discipline's effective configuration without editing Claude Code settings.16The plugin's whole configuration surface is native `userConfig`: three17`sweep-all` batch-overlay options (`batch_exclude` / `batch_promote` /18`batch_demote`) plus `do-your-research-deep`'s verification-depth default19(`research_deep_verification`). Claude Code prompts for them when the plugin is20enabled, stores non-sensitive options in user settings, and ignores `pluginConfigs`21entries in project and local settings on current releases (>= 2.1.207).2223Check-only per the uniform setup contract's userConfig-only carve-out: this plugin's24entire configuration surface is native `userConfig`, so `check` (the default and only25action) verifies and reports, and reconfiguration routes through Claude Code's native26flow, an `apply` here would have nothing to write except the `pluginConfigs` setup27must never touch. Non-interactive: report and recommend; never block on a question.2829Official contract: <https://code.claude.com/docs/en/plugins-reference#user-configuration>.3031## `check` (read-only, the only action)32331. Read the four rendered `${user_config.…}` values from the Variables block34 above (the three `batch_*` overlay options and `research_deep_verification`). Do35 not inspect or edit `settings.json`, `settings.local.json`, managed settings, or36 `pluginConfigs` directly.372. **Empty or unexpanded is unset.** An option the user never configured does not38 reliably render empty, the literal `${user_config.…}` token can survive (a39 zero-config or headless install). Treat BOTH an empty value AND a surviving40 literal placeholder as unset (the key's own default applies); never read the41 literal token as a value.423. For each set batch option, split on commas and report the parsed corrector names,43 and the net effect: `batch_exclude` drops those correctors from the batch,44 `batch_promote` runs those situational correctors every session, `batch_demote`45 gates those core correctors on relevance. With all three unset, report that the46 batch runs the tiers exactly as the correctors declare them.474. **Validate the batch names against what is installed.** Glob the sibling corrector48 directories under this plugin's `skills/` and, for each name in an overlay, report:49 - a name in `batch_exclude` or `batch_demote` that matches no installed corrector: FAIL (typo or removed corrector); remediation: fix via the plugin configuration50 prompt;51 - the same name in `batch_exclude` and in `batch_promote`/`batch_demote`: contradictory; report it;52 - **`batch_promote` is situational-only** (read `metadata.discipline-batch`):53 promote only situational names. A promote naming a `never`-tier or `core`54 corrector, or a name that matches no installed corrector, is a **visible55 warning** and is not promoted, never stays out of the batch, core stays56 core, unknown is ignored. Do not report these as successful promotes.57 - a `batch_demote` naming an already-situational corrector, a no-op; INFO.585. **Report the deep-research verification depth.** `research_deep_verification` sets59 `do-your-research-deep`'s default depth. Report the effective value: `tiered`60 (fan subagents out only over load-bearing items) or `full` (subagent-verify every61 item). An unset value, a surviving literal placeholder, OR any unrecognized string62 (not exactly `tiered` or `full`) all resolve to the `tiered` default. Report an63 unrecognized value as a WARN (typo; remediation: fix it via the plugin64 configuration prompt) that still falls back to tiered, never a hard failure. Note65 that an invocation argument to `do-your-research-deep` overrides this default per66 invocation.676. **Full-batch prerequisite.** INFO: the batch's mid-session pass dispatches68 conversation-inheriting fork subagents. Fork mode is on by default in interactive sessions69 on Claude Code >= v2.1.232 (off by default in non-interactive `-p` and Agent SDK sessions;70 `CLAUDE_CODE_FORK_SUBAGENT` overrides either way:71 <https://code.claude.com/docs/en/sub-agents#fork-the-current-conversation>, re-checked 2026-08-26).72 `sweep-all` preflights this itself and degrades when the fan-out cannot inherit; that runbook owns the behavior; report the prerequisite here only so an unavailable73 fan-out reads as expected rather than as a misconfiguration, and do not restate what74 the degraded pass does.757. To change or clear any value, direct the user to Claude Code's native flow, per the76 marketplace's plugin-reconfiguration convention, which owns the verified-version record77 (<https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/plugin-reconfiguration/README.md>):78 interactive `/plugin configure discipline@<marketplace>` any time; headless, rerun79 `claude plugin install discipline@<marketplace> -s user --config <key>=<value>` (repeatable80 per key) — against an already-installed plugin it prints `already installed` and still writes81 the value. Never uninstall to reconfigure: that drops the whole stored `pluginConfigs` entry,82 resetting every option to its manifest default. `-s` defaults to `user`, the only scope whose83 `pluginConfigs` these options load from (see above). Claude Code owns persistence. Do not84 hand-edit any `pluginConfigs` key.858. Tell the user to rerun `check` after reconfiguration **in a fresh session**: the rendered86 `${user_config.*}` values are injected when this skill loads, so a same-session rerun still reports87 the OLD values. Report the OBSERVED effective values from that fresh run, never an unobserved change.8889## Gotchas9091- **No `apply`.**92 Do not write the plugin cache, Claude Code user settings, or `pluginConfigs`,93 per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md`94 "Setup is explicit and repeatable" in the marketplace repository). And95 `pluginConfigs` is the only thing an apply here could write, so there is no96 conforming apply to offer: reconfiguration is the native97 `/plugin configure discipline@<marketplace>` flow.98- **Unexpanded token is not a value.** A surviving literal `${user_config.…}` means99 unset (the key's default applies). Parsing it as a corrector name or a depth value100 is the failure this check exists to prevent.