Add wordpress-delegate: route WordPress tasks to the best-suited implementer - #40
Add wordpress-delegate: route WordPress tasks to the best-suited implementer#40Amrmohamed1934 wants to merge 5 commits into
Conversation
…ementer wordpress-delegate is the first domain skill here: it launches no implementer CLI of its own. It classifies the brief, prepends the WordPress engineering preamble, and dispatches through a sibling's relay.mjs, which keeps sandboxes, sessions, stream parsing, process-tree kills, and the result contract owned by exactly one file per implementer. Routing is two tables at the top of scripts/relay.mjs. LANES decides what kind of work a brief is and who gets it - security-audit and research to grok read-only, documentation to kimi, refactor-sweep to opencode, plugin-architecture, elementor-widget and performance to codex, with implementation as the fallback. Lanes score by distinct signal matches, and lane order breaks ties, so a brief that trips both security and performance routes as security. DOMAINS decides what the brief is about - WooCommerce, Elementor, ACF, WPForms, database, security, integrations, hosting, deployment - and selects the preamble notes without touching the routing decision. One rule overrides the score: a read-only lane needs two signals to win. A bugfix brief that mentions a missing nonce check routed to a read-only audit on the word nonce alone, and would have returned findings with an empty diff to someone who asked for a fix. It now demotes to implementation and keeps its writes, with the audit lane recorded in alternates. Adding a lane is one row; nothing else in the file knows the lane names. --dry-run prints the decision without dispatching, --list-routes prints both tables, --print-preamble prints the standing instruction so the docs cannot drift from what is actually sent, and --strict-routing exits 3 with the question to put to the user rather than letting the fallback decide. The portable --read-only and --session are translated into each CLI's own terms (--plan-only for Vibe, --permission-mode plan and --resume for Qoder, --conversation for Antigravity) and refused up front for kimi and agy, which have no read-only mode. Anything specific to one CLI goes after -- and is forwarded verbatim. result.json speaks delegate-relay.result.v1 with the contract fields lifted from the sibling, the sibling's own result embedded verbatim under implementerResult, and a routing block recording the lane, confidence, matched signals, domains and runners-up so a reviewer can see what the router thought it was looking at. Registered in the smoke matrix alongside every sibling, with routing-specific coverage: each shipped lane's decision, the demotion rule, the strict refusal, the flag translation for all ten implementers, the preamble in the composed brief, a resumed run sending the delta without it, a missing sibling relay, and a full dispatch with the sibling's result lifted intact. Verified on native Windows through codex-delegate with codex 0.144.1: a write run on a throwaway plugin repo produced check_ajax_referer plus current_user_can, wp_unslash/absint, $wpdb->prepare() with %i/%d/%s, esc_html at output, a text domain with a translator comment, and the wp_ajax_nopriv registration dropped - and made no commit. The other three lane targets are contract-tested only, and the aborted path is POSIX-only in the suite and undriven for this relay. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (3)
WalkthroughChangesWordPress delegation
Sequence Diagram(s)sequenceDiagram
participant User
participant WordPressRelay
participant ImplementerRelay
participant ResultFile
User->>WordPressRelay: Submit WordPress brief
WordPressRelay->>WordPressRelay: Classify domain and select implementer
WordPressRelay->>ImplementerRelay: Dispatch composed brief
ImplementerRelay-->>WordPressRelay: Return result and session data
WordPressRelay->>ResultFile: Write atomic result artifact
Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
AGENTS.md asks you to validate the package locally with `npx skills add .` before publishing a change. Doing that inside the repo drops a `.claude/` directory of installed skill copies and a `skills-lock.json` beside them, both of which then show up as untracked in every subsequent `git status` and are easy to stage by accident alongside a real change. Only the two paths that actually appear are listed. The agent directory depends on which agent the CLI detects, so the comment says to add yours if it differs rather than guessing at `.cursor/`, `.codex/` and the rest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
skills/wordpress-delegate/SKILL.md (1)
44-48: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low valuePin the install reference in the copy-pasteable
npxcommand.
npx skills add amElnagdy/delegate-skillsinstalls directly from a branch reference with no tag or commit pin. If the upstream default branch is ever compromised, every reader who copies this exact command installs whatever is currently on that branch, not a reviewed version. Pin to a released tag or commit.🔒️ Proposed fix
-1. At least the routed sibling is installed — the four shipped routing targets are - `codex-delegate`, `grok-delegate`, `kimi-delegate`, and `opencode-delegate`. Install the whole - package (`npx skills add amElnagdy/delegate-skills`) and all ten are there. +1. At least the routed sibling is installed — the four shipped routing targets are + `codex-delegate`, `grok-delegate`, `kimi-delegate`, and `opencode-delegate`. Install the whole + package (`npx skills add amElnagdy/delegate-skills#<tag>`) and all ten are there.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/wordpress-delegate/SKILL.md` around lines 44 - 48, Update the copy-pasteable npx skills add command in the Prerequisites section to reference a reviewed released tag or commit instead of the unpinned default branch, while preserving installation of the complete delegate-skills package.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@skills/wordpress-delegate/scripts/relay.mjs`:
- Around line 799-809: Reconcile the watchdog tree-kill ownership across all
affected sites: in skills/wordpress-delegate/scripts/relay.mjs, either remove or
stop calling killChild(), or explicitly retain it as an owned watchdog
exception; update AGENTS.md lines 67-76 and CONTRIBUTING.md lines 22-42
consistently with that choice, documenting the exception and verdict-override
behavior if retained. Ensure the relay behavior and both documents define the
same process-tree kill invariant.
---
Nitpick comments:
In `@skills/wordpress-delegate/SKILL.md`:
- Around line 44-48: Update the copy-pasteable npx skills add command in the
Prerequisites section to reference a reviewed released tag or commit instead of
the unpinned default branch, while preserving installation of the complete
delegate-skills package.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: dd4f3d32-40d4-44bb-b43f-dfd4eace419c
📒 Files selected for processing (12)
.gitignoreAGENTS.mdCONTRIBUTING.mdREADME.mdskills.sh.jsonskills/wordpress-delegate/SKILL.mdskills/wordpress-delegate/references/dispatch-and-poll.mdskills/wordpress-delegate/references/multi-task-queues.mdskills/wordpress-delegate/references/review-and-land.mdskills/wordpress-delegate/references/writing-the-brief.mdskills/wordpress-delegate/scripts/relay.mjstest/relay-smoke.mjs
Gutenberg work has the same shape as the Elementor lane's: an invalid block is a validation error in the editor, not a test failure, so the registration and edit/save contract is the constraint that bites. Fourteen signals covering block.json, registerBlockType and register_block_type, InnerBlocks, block attributes and deprecations and variations, the @WordPress packages, useBlockProps, theme.json, FSE and block themes, the Interactivity API, and render_callback. Routed to codex for the same reason elementor-widget is. Placed between elementor-widget and performance. Lane order breaks ties, so "block editor performance" routes as block work, which mirrors why elementor-widget already sits above performance. Writing its signals surfaced a bug in the matcher: classify() folded the brief to lower case before testing, so any signal containing a capital could never fire. The Elementor lane's /\b\\?Elementor\\/ row was dead on arrival, and a block-editor lane would have needed registerblocktype spelled wrong to work. Signals are now normalized to case-insensitive once at load and matched against the brief as written, so a row can be written in whatever casing its ecosystem uses and matchedSignals echoes back what the brief actually said. A regression check pins it, and the extension guide in dispatch-and-poll.md says so. The guide's worked example used block-editor as its hypothetical new lane, which would now be confusing; it shows a multisite lane instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The domain-skill rules said a relay that grew its own process-tree kill had forked the loop, and then wordpress-delegate shipped a killChild(). Both cannot be true, and the rule as written was the wrong half: a relay that owns a watchdog backstop and forwards SIGTERM/SIGINT/SIGHUP cannot honour either without terminating the process it spawned. So the rule now names the exception and bounds it. The domain relay kills exactly one thing, the sibling relay. On POSIX the sibling spawns the implementer CLI detached into a process group of its own, so the signal does not reach past the sibling at all -- the sibling's own handler is what fells the CLI and its tools, which is the behaviour the smoke suite already drives. Windows is the usual exception: with no process groups to signal, the taskkill /t that fells the sibling fells the tree under it and the sibling's handler never runs. What a domain relay still must not re-implement is the per-CLI machinery: the version preflight, the stream parser, and the argv and sandbox translation. Those are what "one file per implementer" is protecting, and the previous wording buried them behind the kill. This also explains the neighbouring rule rather than leaving it to be inferred. The sibling's result is the authority except where the domain relay did the killing -- which is exactly, and only, the case this exception creates. Reconciled in all four places that stated it: AGENTS.md, CONTRIBUTING.md, the skill's own dispatch-and-poll reference, and the comment on killChild itself. No behaviour change; the relay already did what is now described. Raised by CodeRabbit on amElnagdy#40. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Good catch on the first one — that was a real contradiction, and the rule as written was the wrong half. Kill ownership (major): fixed in ef9cd1f. A relay that owns a watchdog backstop and forwards What the relay actually does, and what the docs now say:
What a domain relay still must not re-implement is the per-CLI machinery — the version preflight, the stream parser, and the argv and sandbox translation. Those are what "one file per implementer" is protecting, and the old wording buried them behind the kill. It also makes the neighbouring rule follow instead of having to be inferred: the sibling's result is the authority except where the domain relay did the killing, which is exactly and only the case this exception creates. Reconciled in all four places that stated it — Pinned install (nitpick): skipping, with a reason. Every install command in this repo — the README's four, and all ten sibling Also in this push, unrelated to the review: |
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
skills/wordpress-delegate/SKILL.md (1)
80-86: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse an executable and portable relay path.
node .../relay.mjsis not a runnable path. Thefind ~fallback is local-machine-specific and is not portable to native PowerShell or cmd. Use the documented<skill-dir>/scripts/relay.mjspath and rely on the Skills CLI's reported installation path.As per coding guidelines, user-facing documentation must not reference local machines, and commands must match the installed relay.
Proposed documentation fix
-# see all options and the lane table: node .../relay.mjs --help · --list-routes +# see all options: node <skill-dir>/scripts/relay.mjs --help +# see the lane table: node <skill-dir>/scripts/relay.mjs --list-routes ... -If unsure where it landed, run -`find ~ -name relay.mjs -path '*wordpress-delegate*'` and substitute the directory above it. +Use the installed skill directory reported by the Skills CLI and substitute it for `<skill-dir>`.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/wordpress-delegate/SKILL.md` around lines 80 - 86, Update the relay usage documentation near the `--help` and `--list-routes` examples to invoke the executable `<skill-dir>/scripts/relay.mjs` path. Remove the `find ~` fallback and any local-machine-specific guidance, relying instead on the Skills CLI’s reported “Base directory for this skill” installation path.Source: Coding guidelines
skills/wordpress-delegate/references/dispatch-and-poll.md (1)
158-160: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUse the controlled delegation vocabulary.
The heading uses
other agentsfor a dispatch path. Replace it withPlain shelland useorchestratoronly for orchestrator-specific instructions.Proposed fix
- - **Plain shell / other agents:** foreground for short tasks, or background and poll. + - **Plain shell:** run short tasks in the foreground, or run the command in the background and poll.As per coding guidelines: user-facing documentation must use the controlled delegation vocabulary and must not invent synonyms or coined umbrella terms.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/wordpress-delegate/references/dispatch-and-poll.md` around lines 158 - 160, Update the dispatch-path heading in the documentation to replace “other agents” with “Plain shell,” and reserve “orchestrator” exclusively for orchestrator-specific instructions. Keep the surrounding foreground/background execution guidance unchanged.Source: Coding guidelines
skills/wordpress-delegate/scripts/relay.mjs (1)
830-844: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick winHandle SIGINT/SIGHUP and failed
taskkillunder Windows.
killChild(child)is used by the backstop and theSIGTERM/SIGINT/SIGHUPhandlers. On Windows, anything other than that defaultSIGTERMcall returns directly, soSIGINTand watchdog-backedSIGTERMstop forwarding. A failedtaskkillpath also does nothing; usechild.kill()with the requested signal here for every supported termination path.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@skills/wordpress-delegate/scripts/relay.mjs` around lines 830 - 844, Update killChild to handle every supported signal on Windows, including SIGINT and SIGHUP, instead of returning for non-SIGTERM calls. Attempt the existing taskkill flow where appropriate, but when taskkill fails or is not used, fall back to child.kill(signal) so the requested termination signal is always forwarded.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@AGENTS.md`:
- Line 80: Update the Windows process-tree description in AGENTS.md by replacing
both occurrences of “fells” with “kills,” preserving the rest of the sentence.
In `@skills/wordpress-delegate/references/dispatch-and-poll.md`:
- Around line 7-16: Update the subprocess inventory in the relay documentation
to include the Windows taskkill /t /f invocation. Distinguish the
normal-dispatch commands (node and git) from this Windows-only termination
exception, and ensure the documented commands match the implementer CLI and
relay.mjs behavior.
In `@skills/wordpress-delegate/scripts/relay.mjs`:
- Line 318: The `@wordpress` signal regex in relay.mjs currently uses a leading
word boundary that prevents matching plain-text mentions beginning with “@”.
Update the pattern to remove that leading \b or replace it with a boundary
compatible with @, while preserving the existing package alternatives.
---
Outside diff comments:
In `@skills/wordpress-delegate/references/dispatch-and-poll.md`:
- Around line 158-160: Update the dispatch-path heading in the documentation to
replace “other agents” with “Plain shell,” and reserve “orchestrator”
exclusively for orchestrator-specific instructions. Keep the surrounding
foreground/background execution guidance unchanged.
In `@skills/wordpress-delegate/scripts/relay.mjs`:
- Around line 830-844: Update killChild to handle every supported signal on
Windows, including SIGINT and SIGHUP, instead of returning for non-SIGTERM
calls. Attempt the existing taskkill flow where appropriate, but when taskkill
fails or is not used, fall back to child.kill(signal) so the requested
termination signal is always forwarded.
In `@skills/wordpress-delegate/SKILL.md`:
- Around line 80-86: Update the relay usage documentation near the `--help` and
`--list-routes` examples to invoke the executable
`<skill-dir>/scripts/relay.mjs` path. Remove the `find ~` fallback and any
local-machine-specific guidance, relying instead on the Skills CLI’s reported
“Base directory for this skill” installation path.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: d3a41723-e1a5-4b6b-8366-8ea0df2f5c76
📒 Files selected for processing (6)
AGENTS.mdCONTRIBUTING.mdskills/wordpress-delegate/SKILL.mdskills/wordpress-delegate/references/dispatch-and-poll.mdskills/wordpress-delegate/scripts/relay.mjstest/relay-smoke.mjs
🚧 Files skipped from review as they are similar to previous changes (2)
- test/relay-smoke.mjs
- CONTRIBUTING.md
| backstop and forwards `SIGTERM`/`SIGINT`/`SIGHUP`, and neither is possible without killing the | ||
| process it spawned. It kills exactly one thing — the sibling relay — and the sibling's own handler | ||
| is what reaches the implementer CLI, which leads a process group of its own. (On Windows there are | ||
| no process groups to signal, so the `taskkill /t` that fells the sibling fells the tree under it |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Use kills in the Windows process-tree description.
fells makes the sentence unclear. Replace both occurrences with kills so the wording matches taskkill /t behavior.
Based on static analysis, this wording needs correction.
🧰 Tools
🪛 LanguageTool
[grammar] ~80-~80: Ensure spelling is correct
Context: ...ps to signal, so the taskkill /t that fells the sibling fells the tree under it t...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
[grammar] ~80-~80: Ensure spelling is correct
Context: ...he taskkill /t that fells the sibling fells the tree under it too; the sibling's ...
(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@AGENTS.md` at line 80, Update the Windows process-tree description in
AGENTS.md by replacing both occurrences of “fells” with “kills,” preserving the
rest of the sentence.
Source: Linters/SAST tools
`/\b@wordpress\/(blocks|...)\b/` matched nothing anyone would write. A word boundary has to sit between a word character and a non-word one, and `@` is non-word, so `\b@` only matches when the mention is glued to a word -- `x@wordpress`. Every real form (`import from '@wordpress/blocks'`, "the @wordpress/block-editor package") failed it. Dropping the leading `\b` fixes it. The failure mode is why this one matters more than its size suggests: a signal that can never fire is invisible. Nothing errors; the lane just scores one lower than it should, which quietly moves a brief from `high` confidence to `low`, and a `low` on a read-only lane now demotes it out of the lane entirely. A smoke check pins the package mention. Also corrected the subprocess inventory. Both the relay header and dispatch-and-poll said it shells out to `node` and `git` "and nothing else", which is not true on Windows: killChild runs `taskkill /t /f` there, because Windows has no process groups to signal. Now stated the way the README's trust section already states it for every sibling -- the two commands, plus the platform termination utility where felling a tree needs one. Both raised by CodeRabbit on amElnagdy#40. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Two of the six are real and are fixed in Fixed
/\b@wordpress\/blocks\b/i.test("import x from '@wordpress/blocks'") // false
/@wordpress\/blocks\b/i.test("import x from '@wordpress/blocks'") // trueWorth flagging why this one matters beyond its size: a signal that can never fire is silent. Nothing errors — the lane just scores one lower than it should, which moves a brief from Subprocess inventory (minor) — correct. The relay header and Declined
The proposed
"Plain shell / other agents". Verbatim from the sibling references, and consistent with the vocabulary table: "fells" → "kills". Smoke suite green. |
Claim: none — no implementer is claimed here. This is not a new implementer skill, and that is the
one thing worth deciding before the code is read.
This proposes a second kind of skill
wordpress-delegatelaunches no implementer CLI. It classifies a WordPress brief, prepends aWordPress engineering preamble, and dispatches through a sibling's
relay.mjs.The four invariants hold, transitively — a separate CLI still edits a real working tree and the diff
is still the deliverable, nothing commits, Node built-ins only, and autonomy is still stated in the
chosen CLI's own terms because the sibling states it. But "one skill per implementer CLI" does not
describe it, so
CONTRIBUTING.mdgains a Domain skills section with three extra rules:node(the sibling) andgit. A domain relaythat grew its own version preflight, stream parser, or process-tree kill has forked the loop.
embedded verbatim, and the verdict is overridden only where the domain relay did the killing.
If you would rather this repo stayed one-skill-per-CLI, say so and I will close it — the skill is
self-contained and drops out cleanly. Everything below assumes the category is welcome.
What ran
Native Windows 11,
codex0.144.1, throughcodex-delegate— a write run against a throwawayplugin repo containing a deliberately unauthenticated, injectable AJAX handler. Routed by the table
(no
--implementer), dispatched through the sibling, and the diff came back withcheck_ajax_refererpluscurrent_user_can,wp_unslash/absint,$wpdb->prepare()with%i/%d/%s,esc_htmlat output, a text domain with a translator comment, and thewp_ajax_noprivregistration dropped. None of that was in the brief — it is the preamble arriving atthe implementer. The thread id was lifted for resume, and the relay made no commit (the repo still
had one commit and a dirty tree afterwards).
node test/relay-smoke.mjs— all green on native Windows.wordpressenters the shared matrixlike every sibling (package shape, registration, syntax, atomic publish, the full
--timeoutrejection matrix plus its positive control, and the whole-process-tree timeout kill). Routing gets
its own coverage, since routing is what this relay uniquely does:
confidence: "none"and its clarification string--strict-routingrefusing at exit 3 before any artifact exists--read-onlyand--sessiontranslated for all ten implementers, and refused forkimi/agyopencode's missing--modelreported as a blocker rather than a crashimplementer_unavailableat exit 127, with a result fileUntested, and stated in the README's Verification status line: only
codexhas been driven live—
grok,kimi, andopencodeare contract-tested. The aborted path is POSIX-only in the suite andhas not been driven for this relay on any platform. No run against a real production WordPress site.
Routing
Two tables at the top of
scripts/relay.mjs.LANES— what kind of work this is, and who gets it. Lanes score by distinct signal matches;highest wins; lane order breaks ties, so a brief tripping both security and performance routes as
security.
security-auditgrok(read-only)researchgrok(read-only)documentationkimirefactor-sweepopencodeplugin-architecturecodexelementor-widgetcodexperformancecodeximplementation(fallback)codexDOMAINS— what the work is about (WooCommerce, Elementor, ACF, WPForms, database, security,integrations, hosting, deployment). Domains do not route. They select the preamble notes and are
recorded in the result so a reviewer can see what the router thought it was looking at.
One rule overrides the score, and it came out of a run that failed in review rather than from
design: a read-only lane needs two signals to win. "Fix the cart hook, it's missing a nonce
check" was routing to a read-only audit on the word nonce and would have returned findings with an
empty diff to someone who asked for a fix. It now demotes to
implementation, keeps its writes, andrecords
security-auditinalternates.Unknown tasks fall through with
confidence: "none"and aclarificationstring;--strict-routingturns that into exit 3 with the question to put to the user.Reading the relay
For the line-by-line read, the shape is: two data tables and a preamble constant at the top, then
classify(), then a dispatch path that is deliberately thin. Worth a second look:killChild/ the SIGTERM handler — the cascade is wordpress → sibling → CLI → tools, each detachedinto its own group, and the grace window is longer than the sibling's own 2s touched-files refresh
so a forwarded kill still publishes a complete snapshot.
parseDuration— the accepted range is exactly a sibling's, so a duration this relay forwards isnever one the sibling then rejects; the backstop's grace is clamped at schedule time instead.
--passthrough — only flags meaning the same thing across implementers are modelled; anythingCLI-specific goes after
--and is that CLI's business.Second commit:
.gitignoreAGENTS.mdasks you to validate withnpx skills add .before publishing; doing that inside therepo drops a
.claude/directory and askills-lock.jsonthat then show up as untracked forever.Kept as its own commit (
ae0942c) so it can be dropped or cherry-picked independently of the skill.Only the two paths that actually appear are listed — the agent directory depends on which agent the
CLI detects, so the comment says to add yours rather than guessing at
.cursor/,.codex/and therest. Say the word if you'd rather have it as its own PR.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation
Tests