claude code学习记录(二)

一、/命令: 新手/powerup 新手教程 /model; /config; /effort; /permissions alt + t 开启当前session是否额外思考 alt+m 权限切换 Esc Esc 回滚状态 /tasks 查看后台任务,运行命令 +& 可以后台测试 /remote-c...
claude code学习记录(二)
claude code学习记录(二)

一、/命令:

新手/powerup 新手教程
/model;  /config;  /effort;  /permissions

alt + t  开启当前session是否额外思考
alt+m 权限切换
Esc Esc  回滚状态
/tasks  查看后台任务,运行命令 +&  可以后台测试

/remote-control  远程操控 
/teleport 将远程历史结果等拉到本地
/status  查看状态
/context  查看上下文使用情况
/compact  传递指令怎么进行上下文压缩,比如保留xx计划
/diff    opens an interactive viewer for uncommitted changes — useful for reviewing what Claude has done before committing.
/doctor   checks installation health

二、Memory:

  1. /init 生成CLAUDE.md; /memory在线修改, CLAUDE.md三级 repo/home/ per-directory overrides

  2. 对于较大的项目,可以将指令拆分成 .claude/rules/.md 文件。规则可以是全局的项目,也可以用 Frontmatter 范围到路径。一条带有路径的规则:src/api/**/.ts 只有在 Claude 处理匹配文件时才会激活:

paths: src/api/**/*.ts
---
All API endpoints must validate input with Zod. Return 400 with field-level errors on validation failure.

  1. CLAUDE_CODE_NEW_INIT=1; CLAUDE_CODE_DISABLE_AUTO_MEMORY=1; 默认自动维护memory;
  2. 记住某件事,就自然地问,比如“记住API测试需要Redis。”如果你想把它写进 CLAUDE.md,可以明确要求Claude把它加进去。

三、Project Setup:

  1. 代码开始进行init;
  2. CLAUDE.md怎么写:
A good `CLAUDE.md` is concise and specific. Aim for under 200 lines per file. Every line should be relevant to nearly every session — if something only matters for one feature, put it in a path-scoped rules file instead. The most valuable sections are: tech stack and versions, development commands (install, test, build, lint), naming conventions that aren’t obvious, and known gotchas that would trip up a new developer.


eg:
# Project: Payment Service

## Stack

- Node.js 20, TypeScript 5, PostgreSQL 15
- Express for API, Prisma for ORM, Jest for tests

## Commands

- `npm run dev` — start with hot reload
- `npm test` — run test suite
- `npm run migrate` — apply pending migrations
- `npm run lint` — ESLint + Prettier check

## Conventions

- All monetary values stored as integers (cents)
- Use `Result<T, E>` pattern for error handling, never throw in service layer
- Database columns: snake_case; TypeScript: camelCase
  1. 三层配置文件:
.claude/settings.local.json, .claude/settings.json,  ~/.claude/settings.json

四、Commands in Depth

进阶命令

当上下文不够时组合命令:

/context
/compact focus on the auth refactor
/branch
/rename auth-refactor-v2
/export auth-refactor-v2.md

claude code 内置skills:

/simplify:指的是对最近修改的文件进行代码质量审查,同时启动多个并行的审查代理,每个代理专注于不同的审查方面(如安全性、性能、可读性等)。

/batch <instruction>: 对大量文件进行大规模修改,会先规划工作流程,确保变更有序进行。使用隔离的 Git 工作树,以避免对主分支造成干扰,确保操作安全。能够协调验证过程,并支持以拉取请求(PR)为导向的后续跟进,提高协作效率。

/loop 5m check deploy status:以5分钟为间隔周期性执行“检查部署状态”的操作。  
会按设定的时间间隔反复运行一个提示或检查任务。 这种重复检查机制特别适用于监控耗时较长的后台操作(如部署、构建等)的状态变化。

/debug:该命令用于启用详细日志记录,帮助诊断Claude行为或工具使用过程中出现的问题。  

/claude-api:该命令用于加载项目所用语言的Anthropic SDK参考文档,当检测到项目中导入了@anthropic-ai/sdk或Python的anthropic包时会自动激活。


eg:
/simplify
/batch add JSDoc comments to all public functions in src/
/loop  2m check if the build finished
/debug

Fast Mode

使 Claude Opus 4.6 的速度约为 2.5 倍,但token更多;不会降低质量,有次数限制,但/effort会降低质量;{快速模式符号↯}

eg:
/fast          # toggle on/off
/fast on       # explicitly enable
/fast off      # explicitly disable

五、快捷键:

Ctrl+O  :实时查看工具调用和思考步骤
/btw:用于提出一个附加问题或补充信息,不会将其加入对话历史,适合用于核实事实或询问语法细节,避免干扰当前对话上下文。  
  
Ctrl+B:将正在运行的bash命令或代理任务置于后台执行,使用户可以在不中断任务的情况下继续向Claude发出其他指令。  
  
Ctrl+X Ctrl+K:官方快捷键,用于终止所有在后台运行的代理任务

/insights  :生成会话分析报告,包含统计数据,说明已完成的任务。

六、Skills

.claude/skills/code-review/
├── SKILL.md              # Instructions (required)
├── templates/
│   └── review-checklist.md
└── scripts/
    └── analyze-metrics.py

技能描述存储:上下文1%+8000字符;更多通过辅助文件引入:比如

For the full review checklist, see [templates/review-checklist.md](templates/review-checklist.md).

SKILL.md 通过bash读入,不超过500行,超过的建议加到单个文件中引入;

!command 举例:

name: pr-summary
description: Summarize pull request changes. Use when asked to review or summarize a PR.
context: fork
agent: Explore
---

## PR context
- Diff: !`gh pr diff`
- Comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`

Summarize the intent and key changes in this pull request.

技能调用:

disable-model-invocation: true;  模型不能自动调用skill,deploys, pushes, sends等操作

user-invocable: false,用户不调用,让模型调用

paths:  接受一个 YAML 格式的通配符列表,用于限定技能适用的范围。工作目录匹配这些通配符时,技能才会被加载
eg:
---
name: api-generator
description: Generate REST API endpoints from schema definitions.
paths: ["src/**/*.ts", "tests/**"]
---


七、Hooks

定义:
在 Claude Code 会话中特定事件触发时自动执行的脚本,用于响应系统事件并执行预设操作。
它们通过标准输入(stdin)接收 JSON 格式的输入数据,以便获取事件相关信息。
它们通过退出码和标准输出(stdout)返回 JSON 格式的执行结果,实现与系统通信。

钩子架构与配置
钩子在设置文件中通过一个名为 hooks 的键进行配置。
每个事件都包含一个匹配器数组,每个匹配器又包含一个钩子定义数组。
匹配器字段是一个正则表达式模式,用于匹配工具名称——‘Bash’ 仅精确匹配该工具名,‘Write|Edit’ 匹配其中任意一个,‘’ 匹配所有工具,'mcp__github__.’ 匹配所有以 mcp__github__ 开头的 GitHub MCP 工具。

eg:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python3 \"$CLAUDE_PROJECT_DIR/.claude/hooks/validate-bash.py\"",
            "timeout": 10
          }
        ]
      }
    ]
  }
}

Matchers也支持一个条件性的if字段(v2.1.85),该字段使用权限规则语法进一步过滤钩子触发的时机。
虽然matcher通过名称选择工具,但if可将范围缩小到该工具的特定调用。
当您只关注工具调用的子集时这很有用——例如,仅拦截git push命令而不对每次Bash调用都执行操作。

eg:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "if": "Bash(git push*)",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/check-push.sh"
          }
        ]
      }
    ]
  }
}

Claude Code 支持30多个钩子事件。日常工作中最有用的有:

PreToolUse(在工具运行前进行验证,可阻止执行)
PostToolUse(在工具执行后观察或响应,可添加上下文)
UserPromptSubmit(在 Claude 处理用户输入前拦截输入)
Stop(在 Claude 完成响应时执行检查)
(PermissionRequest), 还有用于权限处理的事件
notifications, 通知事件
subagent lifecycle (SubagentStart, SubagentStop)子代理生命周期事件;  failures (PostToolUseFailure, StopFailure),故障事件 
config changes,  配置变更事件;     
file watching (FileChanged) 文件监视事件;   
context compaction (PreCompact, PostCompact),  上下文压缩事件;   worktree management 工作树管理事件。

多个新事件扩展了钩子可响应的范围。
CwdChanged(v2.1.83)在工作目录变更时触发,支持类似 direnv 的动态环境管理——例如,当 Claude 进入项目目录时自动加载环境变量。

TaskCreated(v2.1.84)在使用 TaskCreate 工具时触发,可用于记录或验证新任务的创建。

WorktreeCreate(v2.1.84)在创建工作树代理时触发,并支持 type: ‘http’ 类型的远程通知——适用于在并行工作开始时向外部服务发送警报。

Elicitation(v2.1.76)在 MCP 服务器通过交互式对话请求任务中的结构化用户输入时触发,可拦截并修改该请求内容,在展示给用户前进行调整。

ElicitationResult(v2.1.76)在用户对 MCP 的 elicitation 响应后触发,可拦截并覆盖响应内容,在发送回 MCP 服务器前进行修改。

“PreCompact” 是一个事件名称,指在 Claude Code 执行对话压缩以释放上下文空间之前触发的钩子事件。
它在压缩操作正式开始前运行,允许开发者或系统在关键时刻介入处理。
该事件可用于阻止压缩操作的进行,例如当需要保存当前状态、向用户发出警告或拒绝可能丢失关键信息的自动压缩时。
事件的 matcher 字段用于判断触发原因:当值为 ‘manual’ 时表示用户手动执行了 /compact 命令;当值为 ‘auto’ 时表示系统因上下文容量已满而自动触发了压缩。
若要阻止压缩发生,可通过返回退出码 2 或使用 JSON 决策负载(payload)来实现,例如:

{
  "hooks": {
    "PreCompact": [
      {
        "matcher": "auto",
        "hooks": [
          { "type": "command", "command": "./scripts/snapshot-context.sh" }
        ]
      }
    ]
  }
}

钩子返回: {"decision": "block", "reason": "active refactor in flight"}

钩子脚本通过 stdin 接收 JSON。Python 钩子的读法是这样的:

import json, sys
data = json.load(sys.stdin)
tool_name = data.get("tool_name", "")
tool_input = data.get("tool_input", {})


退出码0表示成功,需从标准输出(stdout)中解析JSON格式的输出结果。  
退出码2表示阻断性错误,Claude会停止运行,并显示你标准错误(stderr)中的信息。  
其他任何退出码均表示非阻断性警告,仅在详细模式(verbose mode)下显示。

钩子(Hook)的常见分类和典型应用方式

在执行写入或编辑操作后触发的工具使用后钩子,用于自动化后续处理。
系统会自动调用指定的格式化程序来整理内容。 确保 Claude 的输出始终整洁,表示无论用户输入如何,最终输出都会保持良好的排版和结构。

eg:

#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tool_input',{}).get('file_path',''))")
case "$FILE" in
  *.ts|*.tsx|*.js) prettier --write "$FILE" 2>/dev/null ;;
  *.py) black "$FILE" 2>/dev/null ;;
  *.go) gofmt -w "$FILE" 2>/dev/null ;;
esac
exit 0

安全扫描在写入时使用PostToolUse和additionalContext输出警告Claude关于它刚刚写入的可能机密信息, 例如

SECRET_PATTERNS = [
    (r"api[_-]?key\s*=\s*['\"][^'\"]+['\"]", "Potential hardcoded API key"),
    (r"password\s*=\s*['\"][^'\"]+['\"]", "Potential hardcoded password"),
]
# ... check content, then:
output = {"hookSpecificOutput": {"hookEventName": "PostToolUse",
  "additionalContext": f"Security warnings: {'; '.join(warnings)}"}}
print(json.dumps(output))

使用PreToolUse和正则表达式检查以及退出代码2来阻止危险命令:

BLOCKED = [(r"\brm\s+-rf\s+/", "Blocking dangerous rm -rf /")]
for pattern, message in BLOCKED:
    if re.search(pattern, command):
        print(message, file=sys.stderr)
        sys.exit(2)
Advanced: Prompt Hooks and Component Scope

提示钩子和作用域

prompt 钩子
对于StopSubagentStop停止事件,prompt 类型的钩子使用LLM来评估任务完成情况。LLM阅读对话并返回一个关于是否让Claude停止或继续工作的结构化决策。这对于具有明确完成标准的工作任务来说非常强大。

eg:

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "prompt",
            "prompt": "Check: 1) Were all files modified? 2) Do tests pass? 3) Is the PR description updated? If anything is missing, explain what.",
            "timeout": 30
          }
        ]
      }
    ]
  }
}

agent 钩子
钩子类型 “agent” 会派生一个子代理进行评估——与提示钩子(单轮)不同,代理钩子可以使用工具并执行多步推理。当检查需要读取文件或运行命令时使用此功能。

钩子也可以通过hooks frontmatter字段针对单个技能和代理进行范围限定。一个技能的前置工具使用钩子仅在执行该技能时触发:

eg:

---
name: production-deploy
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/production-safety-check.sh"
          once: true
---

oncetrue: 只在会话中运行一次钩子,而不是在每次匹配工具使用时都运行。这对于只需要发生一次的设置检查很有用。

2 个帖子 - 1 位参与者

阅读完整话题

来源: linux.do查看原文