Skip to content
Back to skills

Waffle Toggle

ASecurity

Toggle whether an agent may invoke a rendered wafflestack skill on its own judgment (Claude Code's `disable-model-invocation`), per skill and per project. Use when a skill such as /audit or /delegate should fire only as an explicit slash command, or to hand one back to the agent; the choice is persisted in .waffle/waffle.yaml and re-rendered. Pass --disable/--enable — the picker needs a TTY.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsbash

Works with

  • claude code
  • terminal
  • cli

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add dustinkeeton/wafflestack --skill waffle-toggle --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Waffle Toggle?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Waffle Toggle
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dustinkeeton-waffle-toggle-wafflestack/badge)](https://www.skillsdirectory.com/skills/dustinkeeton-waffle-toggle-wafflestack)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: waffle-toggle
description: Toggle whether an agent may invoke a rendered wafflestack skill on its own judgment (Claude Code's `disable-model-invocation`), per skill and per project. Use when a skill such as /audit or /delegate should fire only as an explicit slash command, or to hand one back to the agent; the choice is persisted in .waffle/waffle.yaml and re-rendered. Pass --disable/--enable — the picker needs a TTY.
user-invocable: true
argument-hint: "[--disable <skill>…] [--enable <skill>…] (no flags prints the current table; from an agent always pass flags)"
---

# Toggle agent invocation per skill

Wraps `wafflestack toggle`. Every rendered skill is a slash command; whether an **agent** may also
fire it unprompted is Claude Code's `disable-model-invocation` frontmatter key. The toolkit renders
each `SKILL.md` byte-for-byte from the stack source, so that key is the stack author's call — until
a project overrides it here. The override is a project-level config block:

```yaml
skills:
  modelInvocation:
    disabled: [audit, delegate]   # rendered with `disable-model-invocation: true`
    enabled: [some-skill]         # rendered WITHOUT the key even though the source sets it
```

It flows through config → render → lock like every other input, so `doctor` stays clean and the
override is part of the canonical render. **Only the `claude` target has the key**: under codex and
agents-dir the cross-tool `.agents/skills/` copy renders the source unchanged, and the CLI says so.

## See the current state

```bash
npx --yes {{waffle.toolkitRef}} toggle
```

Without a TTY (which is how you, the agent, run it) this prints a table — one row per rendered
skill, `agent-invocable` or `slash-only`, with `(source)` or `(override)` saying who decided — and
never opens a prompt. Read it before changing anything: the user may be asking about a skill that
is already in the state they want. In a human's terminal the same command opens a checkbox picker
(checked = an agent may fire it; `enter` applies, `esc` leaves the config untouched).

## Apply the change

Pass the skills from `$ARGUMENTS` as flags — repeatable, and either flag skips the picker:

```bash
npx --yes {{waffle.toolkitRef}} toggle --disable audit --disable delegate
```

```bash
npx --yes {{waffle.toolkitRef}} toggle --enable audit
```

The CLI writes the block to the **committed** `.waffle/waffle.yaml` (never the local overlay —
this is shared project policy), keeps it minimal (a skill lands in a list only where it differs from
its source), then re-renders so the rendered `SKILL.md` and the lock move together. Then:

- **`rendered N files`** — done. The rendered skill's frontmatter now carries (or no longer
  carries) `disable-model-invocation: true`; the skill is still on the cheat sheet, still
  user-invocable. If this repo commits its render, commit `.waffle/waffle.yaml`, the lock, and the
  rendered skill together.
- **`no change`** — every named skill was already in that state; nothing was written.
- **`is not a rendered skill`** — the name is not in this repo's render. The rendered names are
  listed; externally installed skills (a harness plugin living outside the repo, say) are out of scope —
  the toolkit never tracks them.
- **`does not render`** — the selection in `.waffle/waffle.yaml` already fails (an unresolvable
  ref, say); the problems are listed. Fix those first, then retry. Nothing was written.
- **A refusal naming a pinned command** — the toolkit that ran is not a release; run the exact
  pinned command it prints. Nothing was written.

Do not edit the rendered `SKILL.md` by hand to get the same effect: `doctor` flags it as drift and
the next `render` overwrites it. The config block is the supported knob; `/waffle-render` re-applies
it on every render.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…