CodeVetter · Repo Unpack · Feature catalog
anthropics/claude-code
User-visible behaviour splits three ways. Built-in mods add /diff, AGENTS.md instruction loading, first-party analytics, and an organization security default. Marketplace plugins add slash commands, skills, and classic hooks (security review, hookify rules, Ralph loops, commit/PR workflows, feature-dev, code review). GitHub-side features are /triage-issue, /dedupe, scheduled sweep/lock/autoclose, and @claude on issues and PRs.
- The diff mod registers slash command diff (COMMAND_NAME). /diff toggles a pane of uncommitted changes beside the transcript, or an inline dialog when the layout is not fullscreen (CLAUDE_CODE_NO_FLICKER=0). Outside a git repo it reports that and opens nothing. clear and resume reset session state. A file ask button arms hunks onto the next prompt.submit.
- Diff auto-opens on the main loop's first successful Edit, Write, or NotebookEdit when the terminal is wide enough and file checkpointing is on (settings plus CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING). Bash and PowerShell refresh an already-open pane but do not open it. Subagent edits (agentId set) do not auto-open.
- agents-md userConfig.instructionFiles is a string option defaulting to claude-md-or-agents-md, with options claude-md, claude-md-or-agents-md, claude-md-and-agents-md, and managed-only. The legacy settings key projectInstructions (none, claude, agents-fallback, both) is still honoured only while instructionFiles is the default, and session.start logs how it was read.
- In the two AGENTS.md modes, prompt.context walks $.fs.ancestors for AGENTS.md names and inserts unseen files as project instruction files. tool.call on Read attaches nested AGENTS.md between the project root and the file, unless CLAUDE_CODE_SIMPLE or CLAUDE_CODE_DISABLE_ATTACHMENTS is on. managed-only filters instruction files with Files.isKeptWithoutInstructions. claude-md registers only the session.start usage row and returns.
- telemetry adds $.telemetry.log and $.telemetry.mark in the engine.create fold. log emits tengu_plugin_<event>; mark emits tengu_feature_<kind> with feature_name. Only builtin and core callers pass the gate; other tiers are refused. Batches POST to https://api.anthropic.com/api/event_logging/v2/batch.
- sec-default adds no policy of its own. It continues classic.*, prompt.section, prompt.context, skill.prompt, attribution.text, and settings.read past the user tier via next.to(e, 'append'). tool.describe, command.describe, agent.offer, and agent.spawn skip the user tier only when e.provider.tier is prepend or append. tool.register from tier user is denied while managed settings contain allowedMcpServers.
- Marketplace plugins and their user-facing entry points, from plugins/README.md and marketplace.json: agent-sdk-dev (/new-sdk-app plus Python and TypeScript verifier agents), claude-opus-4-5-migration skill, code-review (/code-review), commit-commands (/commit, /commit-push-pr, /clean_gone), explanatory-output-style and learning-output-style SessionStart hooks, feature-dev (/feature-dev), frontend-design skill, hookify (/hookify, /hookify:list, /hookify:configure, /hookify:help), plugin-dev (/plugin-dev:create-plugin plus seven skills), pr-review-toolkit (/pr-review-toolkit:review-pr), ralph-wiggum (/ralph-loop, /cancel-ralph), security-guidance.
- feature-dev's command is a seven-phase prompt: Discovery, Codebase Exploration (2-3 code-explorer agents), Clarifying Questions (must wait), Architecture Design (code-architect agents, no implementation without approval), Implementation, Quality Review (3 code-reviewer agents), Summary. It uses TodoWrite and $ARGUMENTS as the feature description.
- /code-review is a prompt that refuses closed, draft, or already-commented PRs, then runs parallel agents (CLAUDE.md compliance on Sonnet, bug scans on Opus) and only reports high-signal issues after a validation pass. allowed-tools are gh issue/pr/search commands plus mcp__github_inline_comment__create_inline_comment.
- /commit (plugins/commit-commands/commands/commit.md) prefills git status, git diff HEAD, branch, and git log --oneline -10 via command substitution and restricts tools to Bash(git add:*), Bash(git status:*), Bash(git commit:*). It instructs a single commit and no other text.
- security-guidance hooks.json wires SessionStart to ensure_agent_sdk.py (timeout 180), UserPromptSubmit and Stop and PostToolUse to security_reminder_hook.py. PostToolUse matches Edit|Write|MultiEdit|NotebookEdit for pattern warnings, and Bash with if Bash(git commit:*) and Bash(git push:*) for asyncRewake reviews. Env kill switches include SECURITY_GUIDANCE_DISABLE, ENABLE_PATTERN_RULES, ENABLE_CODE_SECURITY_REVIEW, ENABLE_STOP_REVIEW, ENABLE_COMMIT_REVIEW, SECURITY_REVIEW_MODEL, SG_AGENTIC_MODEL, SG_DUAL_OR.
- SECURITY_PATTERNS in patterns.py names rules including github_actions_workflow, child_process_exec, new_function_injection, eval_injection, react_dangerously_set_html, document_write_xss, innerHTML_xss, pickle_deserialization, os_system_injection, unsafe_yaml_load, torch_unsafe_load, and others. An assert ties every ruleName to RuleId.
- hookify's hooks.json runs python3 pretooluse.py, posttooluse.py, stop.py, and userpromptsubmit.py (timeout 10) with no matcher, so every tool and prompt is evaluated. Rules come from .claude/hookify.*.local.md. action block on PreToolUse/PostToolUse returns permissionDecision deny; on Stop it returns decision block. Warnings only set systemMessage.
- ralph-wiggum registers a Stop command hook to ${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh so an iteration loop can refuse to exit. Commands are /ralph-loop, /cancel-ralph, and help.
- Repo-local slash commands used by Actions, not by the product CLI marketplace: .claude/commands/triage-issue.md (labels only, via scripts/gh.sh and scripts/edit-issue-labels.sh) and .claude/commands/dedupe.md (up to 3 duplicates via scripts/comment-on-duplicates.sh). claude-issue-triage.yml prompts /triage-issue with model claude-opus-4-6 and CLAUDE_CODE_SCRIPT_CAPS {"edit-issue-labels.sh":2}. claude-dedupe-issues.yml prompts /dedupe with caps {"comment-on-duplicates.sh":1}.
- Issue lifecycle labels and timeouts are the exported lifecycle array in scripts/issue-lifecycle.ts: invalid 3 days, needs-repro 7, needs-info 7, stale 14, autoclose 14, plus STALE_UPVOTE_THRESHOLD 10. sweep.ts marks inactive unassigned issues stale and closes expired lifecycle labels with state_reason not_planned. lifecycle-comment.ts posts entry.nudge when a lifecycle label is applied. remove-autoclose-label.yml strips autoclose on a non-bot comment. lock-closed-issues.yml locks closed unlocked issues with no updates for 7 days, max 250 per run.