跳转至

2026-04-15 学习日志

今日主题

  • Claude Code SkillTool 与 Skill 体系原理
  • Claude Code Skill 装载机制
  • Claude Code 本地对话存储结构
  • Claude Code @语法原理

新增认知

Claude Code SkillTool 与 Skill 体系原理

  • 从当前源码结构看,skill 更像更高层的产品语义抽象;运行时并没有独立的 Skill 类型,而是被归一化为 Command,通常落成 PromptCommand,以复用命令加载、权限、slash command 和 tool 调用体系。
  • SkillTool 不是普通的数据型工具,而是控制型工具:tool_result 负责完成 tool calling 协议闭环,newMessages 才是注入 skill 正文的主要语义载荷,contextModifier 负责修改后续执行环境,例如 allowedTools、model 与 effort。
  • inline 与 fork 的区别不在于 skill 内容本身,而在于执行主体:inline 是把 skill 展开进当前主会话后由主模型继续执行;fork 是把 skill prompt 交给独立子 agent 执行,再把进度和摘要带回主会话。
  • remote skill 的核心机制是先发现、后加载:模型调用的是 canonical,本地先用 slug 在当前会话的 discovered remote skill 状态里查到 meta.url,再调用 loadRemoteSkill(slug, meta.url) 拉取内容,因此 slug 更像会话内可引用的稳定能力标识,而不是本地直接推导 URL 的键。

Claude Code Skill 装载机制

  • system-reminder 中列出的 skills 只是『名单』,并不代表已装载;真正装载需通过 Skill tool 显式调用。
  • using-superpowers 是唯一通过 SessionStart hook 自动注入的 skill,内容以 'SessionStart hook additional context:' 标签出现在 system prompt 中,与普通内容可区分。
  • hooks.json 中 SessionStart 的 matcher 为 startup|clear|compact,即每次启动、/clear、/compact 时都会触发重新注入。

Claude Code 本地对话存储结构

  • ~/.claude/sessions/ 只存 session 元信息(PID、sessionId、cwd、startedAt),不含对话内容。
  • ~/.claude/history.jsonl 只记录用户输入的命令行历史,不含 AI 回复;完整对话内容存在 Anthropic 服务端,本地不落盘。

Claude Code @语法原理

  • CLAUDE.md 的 @ include 不是原地替换,而是追加到 MemoryFileInfo[] 数组(父文件在前),最终以 'Contents of path (description):' 为 header 平铺进 system prompt
  • @ 与被引用文件内容的关联是隐式的:原文的 @path 文本保留 + 被引用文件的 header 路径名匹配,模型自行建立关联,无显式标记
  • Skill .md 文件不支持 @ include,只支持变量替换($ARGUMENTS、${CLAUDE_SKILL_DIR})和 !command 行内 shell 执行
  • TUI 输入的 @ 文件引用不是插入文本,而是伪造一次 FileReadTool 调用 + 工具结果包裹在 system-reminder 里;目录则伪造成 BashTool ls 调用
  • 两种 @ 处理方式不同的根本原因:system prompt 层模型预期纯文本指令,对话层模型预期文件内容只来自工具调用结果——伪造工具调用是在补全模型训练时形成的上下文因果链假设,而非主动架构设计