Skip to content

docs(agents): teach the denylist escalation path in role cards + delivery brief - #358

Merged
dngioidev merged 1 commit into
mainfrom
docs/346-denylist-escalation-guidance
Aug 3, 2026
Merged

docs(agents): teach the denylist escalation path in role cards + delivery brief#358
dngioidev merged 1 commit into
mainfrom
docs/346-denylist-escalation-guidance

Conversation

@dngioidev

Copy link
Copy Markdown
Owner

What

Delivery agents (orchestrator + spawned subagents) repeatedly reached for denylist-blocked destructive commands, hit the block, and burned a turn retrying. This teaches the safe alternative + escalate-don't-retry path up front, in the three artifacts a delivery agent actually reads.

One canonical block (identical wording, so the copies can't drift) added to:

  • plugin/cards/implementer.md — the implementer role card (recompiled to plugin/agents/implementer.md)
  • plugin/skills/deliver/SKILL.md — the deliver skill
  • plugin/skills/autopilot/SKILL.md — the § Orchestration spawn brief the loop hands each delivery subagent

The block maps each denylisted destructive class (verified against plugin/hooks/denylist.mjs) to its safe alternative, states the escalate-don't-retry rule, and carries the literal-string / --body-file caveat.

Acceptance criteria

  • AC.1 — the implementer and deliver role cards teach the safe alternative for each denylisted destructive class up front: recursive removal outside build/temp -> targeted removal by path; hard-reset -> git revert / git restore <paths>; force-push -> --force-with-lease (only when explicitly requested); clean-force -> targeted removal.
  • AC.2 — the autopilot delivery brief carries the same safe-alternatives list plus the rule: on a denylist block, escalate — do not retry the blocked command.
  • AC.3 — the guidance includes the literal-string caveat: the denylist matches blocked-command strings inside quoted/heredoc bodies, so content that must mention a blocked command is written via a file + --body-file, never inline on a shell command line.
  • AC.4tests/skills/denylist-guidance.test.mjs asserts the safe-alternative / escalate-don't-retry / caveat guidance is present in the role cards, the deliver skill, the autopilot brief, and the compiled implementer agent, so it cannot silently regress (mirrors the existing skill-text assertions).

Verification

  • pnpm verify675 passing / 58 files, all green (includes the new denylist-guidance suite, the card freshness gate, and the deliver/autopilot skill-text suites).
  • node plugin/scripts/backends/compile.mjs re-run so the compiled implementer agent matches its card (freshness gate green).
  • Dogfooded the fix being shipped: every trail comment, the commit body, and this PR body that mention the blocked command strings were staged to a file and passed via --body-file / -F, never inline on a shell command line.

Closes #346

🤖 Generated with Claude Code

…very brief

Delivery agents repeatedly reached for denylist-blocked destructive
commands, hit the block, and burned a turn retrying. Teach the safe
alternative + escalate-don't-retry path up front so they don't.

One canonical block (identical wording, so the copies can't drift) added
to the three artifacts a delivery agent reads:
- plugin/cards/implementer.md (recompiled to plugin/agents/implementer.md)
- plugin/skills/deliver/SKILL.md
- plugin/skills/autopilot/SKILL.md (the § Orchestration spawn brief)

The block maps each denylisted destructive class to its safe alternative
(recursive rm outside build/temp -> targeted removal by path; hard-reset
-> revert / restore; force-push -> force-with-lease, only when explicitly
requested; clean-force -> targeted removal), states the escalate-don't-retry
rule on a block, and carries the literal-string caveat: the denylist matches
these command strings inside quoted/heredoc bodies, so any content that
mentions a blocked command is written via a file + --body-file, never inline.

AC-346.* tests assert the guidance is present in the role cards, the deliver
skill, and the autopilot brief (and in the compiled implementer agent) so it
cannot silently regress.

Closes #346

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SATRHKa6mDHDuirhP6QuwL
@dngioidev
dngioidev merged commit 20fe91e into main Aug 3, 2026
7 checks passed
@dngioidev
dngioidev deleted the docs/346-denylist-escalation-guidance branch August 3, 2026 08:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Teach the denylist escalation path in role cards / delivery brief (agents keep retrying blocked destructive actions)

1 participant