From 2a8668536a8ae42d663d1b4e7b565095106d6974 Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Fri, 23 Oct 2026 17:13:15 +0200 Subject: [PATCH 1/2] chore: update agnostic-ai to 0.87.0 and tighten specs Rename the issue skills to bashunit-gh-issue and bashunit-gh-issues so a same-name home skill no longer hides them in Claude Code. Move argument-hint under x-claude, drop the default user-invocable flag, and drop the entry-point row for the always-on TDD rule. --- .agnostic-ai/AGNOSTIC_AI.md | 3 +- .../{gh-issue => bashunit-gh-issue}/SKILL.md | 6 +- .../SKILL.md | 12 ++-- .agnostic-ai/skills/commit/SKILL.md | 4 +- .agnostic-ai/skills/pr/SKILL.md | 4 +- .agnostic-ai/skills/release/SKILL.md | 4 +- .agnostic-ai/skills/review/SKILL.md | 4 +- agnostic-ai.yaml | 4 +- package-lock.json | 56 +++++++++---------- package.json | 2 +- 10 files changed, 49 insertions(+), 50 deletions(-) rename .agnostic-ai/skills/{gh-issue => bashunit-gh-issue}/SKILL.md (96%) rename .agnostic-ai/skills/{gh-issues => bashunit-gh-issues}/SKILL.md (77%) diff --git a/.agnostic-ai/AGNOSTIC_AI.md b/.agnostic-ai/AGNOSTIC_AI.md index ff39728e..c126f03a 100644 --- a/.agnostic-ai/AGNOSTIC_AI.md +++ b/.agnostic-ai/AGNOSTIC_AI.md @@ -4,14 +4,13 @@ bashunit is a Bash 3.0+ testing framework with assertions, spies, mocks, data pr ## Required guidance -All paths are relative to the repository root, including from generated skill and agent directories. Read the applicable source rules before editing. Directory scopes generate native instructions for that directory. Sessions started at the root must also read the relevant sources below; some clients do not load nested instructions during later edits. +All paths are relative to the repository root, including from generated skill and agent directories. Before editing, read the rules for the task below; some clients do not load nested instructions after the session starts. | Task | Read | |------|------| | Changes to `src/` or `bashunit` | `.agnostic-ai/rules/architecture-map.md` | | Shell changes under `src/` or `tests/`, including entrypoint changes | `.agnostic-ai/rules/bash-style.md` | | Changes to `src/`, `bashunit`, or fork census acceptance tests | `.agnostic-ai/rules/perf-fork-budget.md` | -| Runtime development or task plans | `.agnostic-ai/rules/tdd-workflow.md` | | Test changes | `.agnostic-ai/rules/testing.md` | Bash 3.0 is the compatibility floor, including parse-time behavior. Use existing patterns. Study the relevant tests before adding assertions, doubles, providers, hooks, or CLI behavior. Do not invent commands or features. diff --git a/.agnostic-ai/skills/gh-issue/SKILL.md b/.agnostic-ai/skills/bashunit-gh-issue/SKILL.md similarity index 96% rename from .agnostic-ai/skills/gh-issue/SKILL.md rename to .agnostic-ai/skills/bashunit-gh-issue/SKILL.md index c2ca4f7d..1586f177 100644 --- a/.agnostic-ai/skills/gh-issue/SKILL.md +++ b/.agnostic-ai/skills/bashunit-gh-issue/SKILL.md @@ -1,9 +1,9 @@ --- -name: gh-issue +name: bashunit-gh-issue description: Fetch GitHub issue, create branch, plan and implement with TDD, then open PR -user-invocable: true -argument-hint: "" allowed-tools: shell, read, edit, write, Grep, Glob, Agent, WebFetch +x-claude: + argument-hint: "" --- # Work a GitHub issue diff --git a/.agnostic-ai/skills/gh-issues/SKILL.md b/.agnostic-ai/skills/bashunit-gh-issues/SKILL.md similarity index 77% rename from .agnostic-ai/skills/gh-issues/SKILL.md rename to .agnostic-ai/skills/bashunit-gh-issues/SKILL.md index 2db7776d..5229b39d 100644 --- a/.agnostic-ai/skills/gh-issues/SKILL.md +++ b/.agnostic-ai/skills/bashunit-gh-issues/SKILL.md @@ -1,15 +1,15 @@ --- -name: gh-issues -description: Walk over all open GitHub issues that are unassigned or assigned to the current user, and process each one via the /gh-issue skill, sequentially. -user-invocable: true -argument-hint: "[--limit N] [--label foo] [--dry-run]" +name: bashunit-gh-issues +description: Work open GitHub issues that are unassigned or mine, one at a time, with bashunit-gh-issue. disable-model-invocation: true allowed-tools: read, shell, Skill +x-claude: + argument-hint: "[--limit N] [--label foo] [--dry-run]" --- # Process an issue queue -Process open issues that are unassigned or assigned only to the authenticated user, oldest first, using `gh-issue` sequentially. Accept `--limit N`, `--label foo`, and `--dry-run` (discovery only). +Process open issues that are unassigned or assigned only to the authenticated user, oldest first, using `bashunit-gh-issue` sequentially. Accept `--limit N`, `--label foo`, and `--dry-run` (discovery only). ## Discover @@ -24,7 +24,7 @@ Exclude pull requests, issues assigned to anyone else, and tracker issues whose ## Process 1. Check `git status --porcelain`. Preserve dirty work and stop or use an isolated worktree; never auto-stash or reset it. Fetch main and update a clean main with `git pull --ff-only`. A divergent branch needs a deliberate resolution. -2. Choose the validation mode in step 3 before invoking `gh-issue`. Re-read each issue's state and assignees before starting; skip closed or newly assigned issues. Invoke `gh-issue`, which owns implementation, the canonical quality gate, commit, and PR. The coordinator runs that gate once per complete issue; delegates run only focused checks. +2. Choose the validation mode in step 3 before invoking `bashunit-gh-issue`. Re-read each issue's state and assignees before starting; skip closed or newly assigned issues. Invoke `bashunit-gh-issue`, which owns implementation, the canonical quality gate, commit, and PR. The coordinator runs that gate once per complete issue; delegates run only focused checks. 3. If strict-mode coverage is required by CI, use `./bashunit --parallel --simple --strict tests/` in place of the ordinary parallel gate before committing. Inspect the current CI command first. Simple mode emits marker output; assert on helpers when testing full messages. Under strict mode, use `if` instead of failing `[ condition ] && assignment`, initialize arrays with `=()`, read potentially empty elements as `${arr[i]:-}`, and keep `extdebug` inside a capture subshell. 4. Wait for `gh pr checks --watch`. Investigate red checks, including Bash 3.0 compatibility. Re-run an identified infrastructure failure with `gh run rerun --failed`; do not classify every registry failure as transient. If a local failure appears unrelated, compare the relevant test on unchanged main in an isolated checkout before claiming it predates the change. 5. Merge only when the user's authorization covers it and checks and branch protection allow it. Do not bypass protection. After an authorized merge, verify issue closure; close a completed issue if needed and update its parent's checklist. Escape Markdown brackets as literals when editing checkbox text and preserve the rest of the body. diff --git a/.agnostic-ai/skills/commit/SKILL.md b/.agnostic-ai/skills/commit/SKILL.md index bcd16823..8e2d7734 100644 --- a/.agnostic-ai/skills/commit/SKILL.md +++ b/.agnostic-ai/skills/commit/SKILL.md @@ -1,10 +1,10 @@ --- name: commit description: Stage and commit changes using conventional commits format -user-invocable: true -argument-hint: "[message hint]" disable-model-invocation: true allowed-tools: shell, read, Grep, Glob +x-claude: + argument-hint: "[message hint]" --- # Commit diff --git a/.agnostic-ai/skills/pr/SKILL.md b/.agnostic-ai/skills/pr/SKILL.md index 2573f29f..73ace94e 100644 --- a/.agnostic-ai/skills/pr/SKILL.md +++ b/.agnostic-ai/skills/pr/SKILL.md @@ -1,9 +1,9 @@ --- name: pr description: Push branch and create a GitHub PR with concise, issue-linked description -user-invocable: true -argument-hint: "[#issue]" allowed-tools: shell, read, Grep, Glob +x-claude: + argument-hint: "[#issue]" --- # Create a pull request diff --git a/.agnostic-ai/skills/release/SKILL.md b/.agnostic-ai/skills/release/SKILL.md index 9fc70e46..adba6029 100644 --- a/.agnostic-ai/skills/release/SKILL.md +++ b/.agnostic-ai/skills/release/SKILL.md @@ -1,9 +1,9 @@ --- name: release description: Run pre-release validation and execute the release process -user-invocable: true -argument-hint: "[version]" allowed-tools: shell, read, Grep, Glob +x-claude: + argument-hint: "[version]" --- # Release diff --git a/.agnostic-ai/skills/review/SKILL.md b/.agnostic-ai/skills/review/SKILL.md index ffa8c830..11d4d788 100644 --- a/.agnostic-ai/skills/review/SKILL.md +++ b/.agnostic-ai/skills/review/SKILL.md @@ -1,9 +1,9 @@ --- name: review description: Review a GitHub pull request; defaults to the current branch's PR when no number is given -user-invocable: true -argument-hint: "[#N]" allowed-tools: shell, read, Grep, Glob +x-claude: + argument-hint: "[#N]" --- # Review a pull request diff --git a/agnostic-ai.yaml b/agnostic-ai.yaml index 2d1b7c9f..9085d41f 100644 --- a/agnostic-ai.yaml +++ b/agnostic-ai.yaml @@ -1,6 +1,6 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/Chemaclass/agnostic-ai/v0.82.0/docs/schemas/config.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/Chemaclass/agnostic-ai/v0.87.0/docs/schemas/config.schema.json version: 1 -requires: "0.82.0" +requires: "0.87.0" builtins: [] targets: diff --git a/package-lock.json b/package-lock.json index 30e246b4..bdec2df4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,13 +16,13 @@ "bashunit": "bin/bashunit" }, "devDependencies": { - "agnostic-ai": "0.82.0" + "agnostic-ai": "0.87.0" } }, "node_modules/@agnostic-ai/darwin-arm64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/darwin-arm64/-/darwin-arm64-0.82.0.tgz", - "integrity": "sha512-i2H3gz0AXZ8cAkYbEHSIBAGqvxvm79ELtZKhKpT9T8bt5cqzIruWkfbXodCdbFRl3VF/49LQqclXJz8a3OnrEw==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/darwin-arm64/-/darwin-arm64-0.87.0.tgz", + "integrity": "sha512-leI31yLID17RRTTVnb/opqZjtnpuRCWfDu7BKjX+LfzbtqX9BpQMPfoyZEqzgps5BKBPfZ5XG9hqKQVPbVoG2A==", "cpu": [ "arm64" ], @@ -37,9 +37,9 @@ } }, "node_modules/@agnostic-ai/darwin-x64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/darwin-x64/-/darwin-x64-0.82.0.tgz", - "integrity": "sha512-qBn5GEOT3y2wRSR2Mzy98cpzJcDlAZTucat5EJDqPCrfqjl50tP95/+oHB8/YevfrJtcch/ZXWKXoAf4WvIbQQ==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/darwin-x64/-/darwin-x64-0.87.0.tgz", + "integrity": "sha512-MFPDONidPo321z4DAqCKdpgedsvy5HuhW7Le/zOrFh4lsJi2j1xmDtKD82gv9AJ4DcBtpclD12KB6HcplYguGw==", "cpu": [ "x64" ], @@ -54,9 +54,9 @@ } }, "node_modules/@agnostic-ai/linux-arm64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/linux-arm64/-/linux-arm64-0.82.0.tgz", - "integrity": "sha512-SRafUWRqmcH+E+Zl4IfmbydZ8iCg7vjHvTdPZVgcz1XPMLX4mBJr1vzBPbqgRiZqR5vl+3laZCUVbgS992YUEw==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/linux-arm64/-/linux-arm64-0.87.0.tgz", + "integrity": "sha512-V8tHBK3jFLR5lPOsctmmXNZu73qlobpTT1XujhTUIBaYDqGZpHbXiB1zusMrlzwtlhglgSR6it5C8tnQwcxcfg==", "cpu": [ "arm64" ], @@ -71,9 +71,9 @@ } }, "node_modules/@agnostic-ai/linux-x64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/linux-x64/-/linux-x64-0.82.0.tgz", - "integrity": "sha512-M8MfvrEZCswAivA3Gdn68cl2t7bsWVb7qZ/YNDodEpEwFgcwyM27cgZ2KcPEdJm2elRZrHgAJU1olhQT4/MyxA==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/linux-x64/-/linux-x64-0.87.0.tgz", + "integrity": "sha512-E9H7zX63u/YXvyU+Gn7NjgO6Nqi0XiSOa9E+8He4jIqqIBcSulSDqP7A5Q+yw+Wox3gAbGGlPCQ8ROKjgASI2g==", "cpu": [ "x64" ], @@ -88,9 +88,9 @@ } }, "node_modules/@agnostic-ai/win32-arm64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/win32-arm64/-/win32-arm64-0.82.0.tgz", - "integrity": "sha512-nTq6+ODuRRMxHQAxTHPLYKOZ2kBxp2VP6JgdkkFqAT8c7VDVEr2JN0enNbeftzVdniKgtDGkWjpLKbulRbI8ow==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/win32-arm64/-/win32-arm64-0.87.0.tgz", + "integrity": "sha512-v2Q79F6NOp2uC5pcUoSjUO4h96uzShD/JbvZ005tyPw/XfVsybF6+VhRyWp2+ohYF6sMNbWkikDnhvtMr3gOSQ==", "cpu": [ "arm64" ], @@ -105,9 +105,9 @@ } }, "node_modules/@agnostic-ai/win32-x64": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/@agnostic-ai/win32-x64/-/win32-x64-0.82.0.tgz", - "integrity": "sha512-p3BcBvlxDsUga2Lw1WDTdqihz/m3MFGB2oNRLNA86jjFMm5KkObQ9uGHF/dDbjY5zFj1p5wabhgIstpfjyi7mw==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/@agnostic-ai/win32-x64/-/win32-x64-0.87.0.tgz", + "integrity": "sha512-VgUo0KvRZJ7FfrzIHDtZm2TzFt/3D/5ZJh6WYlfie3MzvMavltEH5zbLGj8gN4T8rpOfbwA5GRNOd/PLWOKZOw==", "cpu": [ "x64" ], @@ -122,9 +122,9 @@ } }, "node_modules/agnostic-ai": { - "version": "0.82.0", - "resolved": "https://registry.npmjs.org/agnostic-ai/-/agnostic-ai-0.82.0.tgz", - "integrity": "sha512-wvsD5lhKpvv5bkEYjBBM99uNR0B27lPsgMSI15CjzZjNszV2UsV33OyR4l1LfcNrCEHmJrq2MXvJ6B2xGbnNIw==", + "version": "0.87.0", + "resolved": "https://registry.npmjs.org/agnostic-ai/-/agnostic-ai-0.87.0.tgz", + "integrity": "sha512-ADv6U6M35+mAm7vguQ735AGUO7HZcgBMJfZQJviMY0OdDurP3HR9MgqFz/sForQHapRs6M9z+qTXGvkPRAHZAw==", "dev": true, "license": "MIT", "bin": { @@ -134,12 +134,12 @@ "node": ">=18" }, "optionalDependencies": { - "@agnostic-ai/darwin-arm64": "0.82.0", - "@agnostic-ai/darwin-x64": "0.82.0", - "@agnostic-ai/linux-arm64": "0.82.0", - "@agnostic-ai/linux-x64": "0.82.0", - "@agnostic-ai/win32-arm64": "0.82.0", - "@agnostic-ai/win32-x64": "0.82.0" + "@agnostic-ai/darwin-arm64": "0.87.0", + "@agnostic-ai/darwin-x64": "0.87.0", + "@agnostic-ai/linux-arm64": "0.87.0", + "@agnostic-ai/linux-x64": "0.87.0", + "@agnostic-ai/win32-arm64": "0.87.0", + "@agnostic-ai/win32-x64": "0.87.0" } } } diff --git a/package.json b/package.json index 3d467a38..3170726a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "assertions" ], "devDependencies": { - "agnostic-ai": "0.82.0" + "agnostic-ai": "0.87.0" }, "scripts": { "agents:sync": "agnostic-ai sync", From 758d6496a325c67ac49a6d94f33c5835e6359ce3 Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Sat, 24 Oct 2026 11:58:46 +0200 Subject: [PATCH 2/2] chore: keep gh-issue skill names and top-level argument-hint --- .agnostic-ai/skills/commit/SKILL.md | 3 +-- .../skills/{bashunit-gh-issue => gh-issue}/SKILL.md | 5 ++--- .../skills/{bashunit-gh-issues => gh-issues}/SKILL.md | 11 +++++------ .agnostic-ai/skills/pr/SKILL.md | 3 +-- .agnostic-ai/skills/release/SKILL.md | 3 +-- .agnostic-ai/skills/review/SKILL.md | 3 +-- 6 files changed, 11 insertions(+), 17 deletions(-) rename .agnostic-ai/skills/{bashunit-gh-issue => gh-issue}/SKILL.md (96%) rename .agnostic-ai/skills/{bashunit-gh-issues => gh-issues}/SKILL.md (80%) diff --git a/.agnostic-ai/skills/commit/SKILL.md b/.agnostic-ai/skills/commit/SKILL.md index 8e2d7734..57431e1e 100644 --- a/.agnostic-ai/skills/commit/SKILL.md +++ b/.agnostic-ai/skills/commit/SKILL.md @@ -1,10 +1,9 @@ --- name: commit description: Stage and commit changes using conventional commits format +argument-hint: "[message hint]" disable-model-invocation: true allowed-tools: shell, read, Grep, Glob -x-claude: - argument-hint: "[message hint]" --- # Commit diff --git a/.agnostic-ai/skills/bashunit-gh-issue/SKILL.md b/.agnostic-ai/skills/gh-issue/SKILL.md similarity index 96% rename from .agnostic-ai/skills/bashunit-gh-issue/SKILL.md rename to .agnostic-ai/skills/gh-issue/SKILL.md index 1586f177..6abdb0df 100644 --- a/.agnostic-ai/skills/bashunit-gh-issue/SKILL.md +++ b/.agnostic-ai/skills/gh-issue/SKILL.md @@ -1,9 +1,8 @@ --- -name: bashunit-gh-issue +name: gh-issue description: Fetch GitHub issue, create branch, plan and implement with TDD, then open PR +argument-hint: "" allowed-tools: shell, read, edit, write, Grep, Glob, Agent, WebFetch -x-claude: - argument-hint: "" --- # Work a GitHub issue diff --git a/.agnostic-ai/skills/bashunit-gh-issues/SKILL.md b/.agnostic-ai/skills/gh-issues/SKILL.md similarity index 80% rename from .agnostic-ai/skills/bashunit-gh-issues/SKILL.md rename to .agnostic-ai/skills/gh-issues/SKILL.md index 5229b39d..adbb83fe 100644 --- a/.agnostic-ai/skills/bashunit-gh-issues/SKILL.md +++ b/.agnostic-ai/skills/gh-issues/SKILL.md @@ -1,15 +1,14 @@ --- -name: bashunit-gh-issues -description: Work open GitHub issues that are unassigned or mine, one at a time, with bashunit-gh-issue. +name: gh-issues +description: Work open GitHub issues that are unassigned or mine, one at a time, with gh-issue. +argument-hint: "[--limit N] [--label foo] [--dry-run]" disable-model-invocation: true allowed-tools: read, shell, Skill -x-claude: - argument-hint: "[--limit N] [--label foo] [--dry-run]" --- # Process an issue queue -Process open issues that are unassigned or assigned only to the authenticated user, oldest first, using `bashunit-gh-issue` sequentially. Accept `--limit N`, `--label foo`, and `--dry-run` (discovery only). +Process open issues that are unassigned or assigned only to the authenticated user, oldest first, using `gh-issue` sequentially. Accept `--limit N`, `--label foo`, and `--dry-run` (discovery only). ## Discover @@ -24,7 +23,7 @@ Exclude pull requests, issues assigned to anyone else, and tracker issues whose ## Process 1. Check `git status --porcelain`. Preserve dirty work and stop or use an isolated worktree; never auto-stash or reset it. Fetch main and update a clean main with `git pull --ff-only`. A divergent branch needs a deliberate resolution. -2. Choose the validation mode in step 3 before invoking `bashunit-gh-issue`. Re-read each issue's state and assignees before starting; skip closed or newly assigned issues. Invoke `bashunit-gh-issue`, which owns implementation, the canonical quality gate, commit, and PR. The coordinator runs that gate once per complete issue; delegates run only focused checks. +2. Choose the validation mode in step 3 before invoking `gh-issue`. Re-read each issue's state and assignees before starting; skip closed or newly assigned issues. Invoke `gh-issue`, which owns implementation, the canonical quality gate, commit, and PR. The coordinator runs that gate once per complete issue; delegates run only focused checks. 3. If strict-mode coverage is required by CI, use `./bashunit --parallel --simple --strict tests/` in place of the ordinary parallel gate before committing. Inspect the current CI command first. Simple mode emits marker output; assert on helpers when testing full messages. Under strict mode, use `if` instead of failing `[ condition ] && assignment`, initialize arrays with `=()`, read potentially empty elements as `${arr[i]:-}`, and keep `extdebug` inside a capture subshell. 4. Wait for `gh pr checks --watch`. Investigate red checks, including Bash 3.0 compatibility. Re-run an identified infrastructure failure with `gh run rerun --failed`; do not classify every registry failure as transient. If a local failure appears unrelated, compare the relevant test on unchanged main in an isolated checkout before claiming it predates the change. 5. Merge only when the user's authorization covers it and checks and branch protection allow it. Do not bypass protection. After an authorized merge, verify issue closure; close a completed issue if needed and update its parent's checklist. Escape Markdown brackets as literals when editing checkbox text and preserve the rest of the body. diff --git a/.agnostic-ai/skills/pr/SKILL.md b/.agnostic-ai/skills/pr/SKILL.md index 73ace94e..c9498acb 100644 --- a/.agnostic-ai/skills/pr/SKILL.md +++ b/.agnostic-ai/skills/pr/SKILL.md @@ -1,9 +1,8 @@ --- name: pr description: Push branch and create a GitHub PR with concise, issue-linked description +argument-hint: "[#issue]" allowed-tools: shell, read, Grep, Glob -x-claude: - argument-hint: "[#issue]" --- # Create a pull request diff --git a/.agnostic-ai/skills/release/SKILL.md b/.agnostic-ai/skills/release/SKILL.md index adba6029..072e25cf 100644 --- a/.agnostic-ai/skills/release/SKILL.md +++ b/.agnostic-ai/skills/release/SKILL.md @@ -1,9 +1,8 @@ --- name: release description: Run pre-release validation and execute the release process +argument-hint: "[version]" allowed-tools: shell, read, Grep, Glob -x-claude: - argument-hint: "[version]" --- # Release diff --git a/.agnostic-ai/skills/review/SKILL.md b/.agnostic-ai/skills/review/SKILL.md index 11d4d788..3dd3b70a 100644 --- a/.agnostic-ai/skills/review/SKILL.md +++ b/.agnostic-ai/skills/review/SKILL.md @@ -1,9 +1,8 @@ --- name: review description: Review a GitHub pull request; defaults to the current branch's PR when no number is given +argument-hint: "[#N]" allowed-tools: shell, read, Grep, Glob -x-claude: - argument-hint: "[#N]" --- # Review a pull request