Commit cc2d6d0
chore(commands): modernize slash command frontmatter (v1.2.3) (#12)
Update all three slash command .md files (start, stop, help) to use
only documented frontmatter fields from the canonical Claude Code
reference at https://code.claude.com/docs/en/skills.md#frontmatter-reference.
## What changed
- Removed `hide-from-slash-command-tool` from start.md and stop.md.
This field is NOT documented in the official Claude Code reference.
It was inherited from the upstream ralph-loop plugin where it
appears as a legacy / undocumented convention — Claude Code
silently ignores unknown fields, so removing it has no behavioral
downside. Confirmed absent from:
- https://code.claude.com/docs/en/skills.md
- https://code.claude.com/docs/en/plugins-reference.md
- https://code.claude.com/docs/en/commands.md
- Added `disable-model-invocation: true` to all three commands.
This IS the documented way to block programmatic invocation of a
slash command by the agent — ensures /watchdog:start, /watchdog:stop,
and /watchdog:help can only be triggered by the user typing them
directly, never by the agent auto-invoking them via the Skill tool.
- Added explicit `argument-hint` to stop.md and help.md (empty string
for no-args commands, so autocomplete shows the command takes no
arguments). start.md already had `argument-hint` from earlier,
tightened to "\"<PROMPT>\" [--max-iterations N]" which hints at
the required double quotes around the prompt.
## Threat model clarification
Even without any "hide from agent" mechanism, the watchdog plugin is
robust against a *confused or lazy* agent — which is the realistic
threat model for a self-referential loop:
- `disable-model-invocation: true` means the agent cannot call
/watchdog:stop programmatically even if it wanted to
- The classifier subprocess lives in a separate claude process
the agent has no handle on
- The Stop hook fires regardless of any output the agent produces;
the agent cannot suppress or spoof it
- Even if the agent deletes `.claude/watchdog.claudepid.*.local.json`
to break the loop, that action shows up in the session transcript
and is visible to the user — a self-owning "win"
Watchdog is not designed to survive an *adversarial* agent that is
deliberately trying to escape a sandbox; it is designed to keep a
task-following agent honest about whether it has actually done
the work.
## No code changes
All changes are confined to the three .md files under `commands/`.
Zero changes to lib/, hooks/, scripts/, or tests. The 80-test suite
still passes unchanged (78 active + 2 skipped-inside-Claude-Code,
0 failures).
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent d994f47 commit cc2d6d0
5 files changed
Lines changed: 9 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
| 4 | + | |
3 | 5 | | |
4 | 6 | | |
5 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | | - | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
0 commit comments