<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>新手编程 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/tags/%E6%96%B0%E6%89%8B%E7%BC%96%E7%A8%8B/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 09 Jan 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/tags/%E6%96%B0%E6%89%8B%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Claude Code 是怎么运行的？给新手的 AI 编程代理入门指南</title>
      <link>https://ftmao.com/blog/posts/claude-code-principles-for-beginners/</link>
      <pubDate>Fri, 09 Jan 2026 10:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/claude-code-principles-for-beginners/</guid>
      <description>&lt;h1 id=&#34;claude-code-是怎么运行的给新手的-ai-编程代理入门指南&#34;&gt;Claude Code 是怎么运行的？给新手的 AI 编程代理入门指南&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://github.com/shareAI-lab/learn-claude-code&#34;&gt;shareAI-lab/learn-claude-code&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你有没有想过，为什么你跟 Claude Code 说“帮我改一下这个网页”，它就能自己打开文件、修改代码、运行测试，然后告诉你结果？&lt;/p&gt;
&lt;p&gt;它看起来好聪明，像人一样会“动手”。但其实，它背后的原理并不神秘，甚至可以用几十行简单的代码讲清楚。&lt;/p&gt;
&lt;p&gt;这篇文章是给新手的。不管你有没有学过编程，我都会尽量用生活中的例子来解释。读完之后，你会明白：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code 最核心的部分是什么；&lt;/li&gt;
&lt;li&gt;它是怎么“看懂”文件、“动手”改代码的；&lt;/li&gt;
&lt;li&gt;它为什么能记住很多事情、做错事能重来；&lt;/li&gt;
&lt;li&gt;以及如果你想自己做一个类似的 AI 助手，应该从哪里开始。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一一句话讲清楚-claude-code&#34;&gt;一、一句话讲清楚 Claude Code&lt;/h2&gt;
&lt;p&gt;如果把 Claude Code 拆开，你会发现它只有三个东西：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一个循环 + 一张工具表 + 一个会说话的 AI&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;部件&lt;/th&gt;
					&lt;th&gt;作用&lt;/th&gt;
					&lt;th&gt;生活里的比喻&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;会说话的 AI（大语言模型）&lt;/td&gt;
					&lt;td&gt;思考、理解你说的话、决定下一步做什么&lt;/td&gt;
					&lt;td&gt;一个超级聪明的大脑&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;工具表&lt;/td&gt;
					&lt;td&gt;让 AI 能读写文件、运行命令、搜索代码&lt;/td&gt;
					&lt;td&gt;给大脑装上双手和眼睛&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;循环&lt;/td&gt;
					&lt;td&gt;不断重复“思考 → 行动 → 看结果 → 再思考”&lt;/td&gt;
					&lt;td&gt;机器人一直干活，直到做完&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这个“循环”非常重要。没有它，AI 就只能说一次话，没法连续做很多事。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    subgraph 工具箱[&amp;#34;🧰 工具箱（Harness）&amp;#34;]
        读文件[&amp;#34;读文件&amp;#34;]
        写文件[&amp;#34;写文件&amp;#34;]
        执行命令[&amp;#34;执行命令&amp;#34;]
        搜索[&amp;#34;搜索代码&amp;#34;]
        权限[&amp;#34;权限检查&amp;#34;]
    end

    大脑[&amp;#34;🧠 AI 大脑&amp;lt;br/&amp;gt;会思考、会推理&amp;#34;]
    电脑[&amp;#34;💻 你的电脑&amp;#34;]

    大脑 --&amp;gt;|我想读文件| 读文件
    读文件 --&amp;gt;|文件内容| 大脑
    大脑 --&amp;gt;|我想运行测试| 执行命令
    执行命令 --&amp;gt; 电脑
    电脑 --&amp;gt;|测试结果| 大脑
    权限 --&amp;gt;|这个能做吗？| 执行命令&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;二最核心的-30-行代码&#34;&gt;二、最核心的 30 行代码&lt;/h2&gt;
&lt;p&gt;Claude Code 的心脏，是一段很简单的代码。你可以把它理解成“机器人干活的主流程”：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;agent_loop&lt;/span&gt;(query):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 1. 先把用户的问题记下来&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    messages &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: query}]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 2. 把对话历史发给 AI，告诉它有哪些工具可以用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        response &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; client&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;create(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            model&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;MODEL,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            system&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;SYSTEM,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            messages&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;messages,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            tools&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;TOOLS,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            max_tokens&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;8000&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        )
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 3. 把 AI 的回复存进历史&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;assistant&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;content})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 4. 如果 AI 不再调用工具，就说明它说完了，结束循环&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;stop_reason &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tool_use&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# 5. 执行 AI 要求的工具，并把结果告诉它&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        results &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; block &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; response&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;content:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; block&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;type &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tool_use&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                output &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; run_tool(block&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;name, block&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;input)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                results&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tool_result&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tool_use_id&amp;#34;&lt;/span&gt;: block&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;id,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: output,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                })
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        messages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append({&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: results})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;h3 id=&#34;人话解释&#34;&gt;人话解释&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;你问了一个问题&lt;/strong&gt; → 比如“帮我修一下这个 bug”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 看历史和工具表&lt;/strong&gt; → 它想：“我需要先读一下代码文件。”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 说“我要用读文件工具”&lt;/strong&gt; → 程序真的去打开文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把文件内容还给 AI&lt;/strong&gt; → AI 再看，决定下一步。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一直重复，直到 AI 说“我搞定了”&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    开始([你输入任务]) --&amp;gt; 发给AI[把任务+历史发给 AI]
    发给AI --&amp;gt; AI思考[AI 思考]
    AI思考 --&amp;gt; 判断{AI 想调用工具吗？}
    判断 --&amp;gt;|想| 执行工具[程序执行工具]
    判断 --&amp;gt;|不想| 输出答案[输出最终答案]
    执行工具 --&amp;gt; 返回结果[把结果返回给 AI]
    返回结果 --&amp;gt; 发给AI
    输出答案 --&amp;gt; 结束([结束])&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;三20-节课都在讲什么一张总图看懂&#34;&gt;三、20 节课都在讲什么？一张总图看懂&lt;/h2&gt;
&lt;p&gt;Claude Code 的学习资料里有 &lt;strong&gt;20 节课&lt;/strong&gt;，每节课加一个新能力。它们不是乱排的，而是像打游戏升级一样，一步一步变强。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    subgraph 第一阶段[&amp;#34;🌱 第一阶段：让 AI 动起来&amp;#34;]
        s01[&amp;#34;s01 循环&amp;#34;]
        s02[&amp;#34;s02 工具&amp;#34;]
        s03[&amp;#34;s03 权限&amp;#34;]
        s04[&amp;#34;s04 钩子&amp;#34;]
    end

    subgraph 第二阶段[&amp;#34;🛠️ 第二阶段：做复杂任务&amp;#34;]
        s05[&amp;#34;s05 计划&amp;#34;]
        s06[&amp;#34;s06 子代理&amp;#34;]
        s07[&amp;#34;s07 技能&amp;#34;]
        s08[&amp;#34;s08 压缩记忆&amp;#34;]
    end

    subgraph 第三阶段[&amp;#34;🧠 第三阶段：记得住、错得了&amp;#34;]
        s09[&amp;#34;s09 记忆&amp;#34;]
        s10[&amp;#34;s10 系统提示&amp;#34;]
        s11[&amp;#34;s11 错误恢复&amp;#34;]
    end

    subgraph 第四阶段[&amp;#34;⏳ 第四阶段：长时间运行&amp;#34;]
        s12[&amp;#34;s12 任务图&amp;#34;]
        s13[&amp;#34;s13 后台任务&amp;#34;]
        s14[&amp;#34;s14 定时任务&amp;#34;]
    end

    subgraph 第五阶段[&amp;#34;👥 第五阶段：团队协作&amp;#34;]
        s15[&amp;#34;s15 队友&amp;#34;]
        s16[&amp;#34;s16 团队协议&amp;#34;]
        s17[&amp;#34;s17 自治&amp;#34;]
        s18[&amp;#34;s18 目录隔离&amp;#34;]
    end

    subgraph 第六阶段[&amp;#34;🔌 第六阶段：扩展组装&amp;#34;]
        s19[&amp;#34;s19 MCP 插件&amp;#34;]
        s20[&amp;#34;s20 完整系统&amp;#34;]
    end

    第一阶段 --&amp;gt; 第二阶段 --&amp;gt; 第三阶段 --&amp;gt; 第四阶段 --&amp;gt; 第五阶段 --&amp;gt; 第六阶段&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;下面拆解核心部分。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四第一阶段让-ai-动起来&#34;&gt;四、第一阶段：让 AI 动起来&lt;/h2&gt;
&lt;h3 id=&#34;s01-agent-loop一个循环就够了&#34;&gt;s01 Agent Loop：一个循环就够了&lt;/h3&gt;
&lt;p&gt;这是所有东西的基础。就像你骑自行车，核心是“踩踏板 → 车轮转 → 车前进”这个循环。Claude Code 的核心就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI 思考 → 调用工具 → 看结果 → 再思考 → 再调用工具 → …… → 完成&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;没有循环，AI 只能说一句话。有了循环，它就能连续做很多步。&lt;/p&gt;
&lt;h3 id=&#34;s02-tool-use从一把螺丝刀到整套工具箱&#34;&gt;s02 Tool Use：从一把螺丝刀到整套工具箱&lt;/h3&gt;
&lt;p&gt;最早的 AI 只有一个工具：执行终端命令（bash）。但这样很不方便，就像你修自行车只能用一个螺丝刀。&lt;/p&gt;
&lt;p&gt;后来 Claude Code 给 AI 配了一整套工具：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;read_file&lt;/code&gt;：读文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;write_file&lt;/code&gt;：写文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;edit_file&lt;/code&gt;：改文件中的一部分&lt;/li&gt;
&lt;li&gt;&lt;code&gt;glob&lt;/code&gt;：按名字找文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt;：在文件里搜索文字&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些工具是“分发表”管理的。程序不用写一堆 if/else，而是查一个字典：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TOOL_HANDLERS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;read_file&amp;#34;&lt;/span&gt;:  read_file_function,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;write_file&amp;#34;&lt;/span&gt;: write_file_function,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;edit_file&amp;#34;&lt;/span&gt;:  edit_file_function,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# AI 说想用 read_file，就找到对应的函数执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;handler &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; TOOL_HANDLERS[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;read_file&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;result &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; handler(path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main.py&amp;#34;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;好处&lt;/strong&gt;：加新工具就像往工具箱里多放一把扳手，不用改主流程。&lt;/p&gt;
&lt;h3 id=&#34;s03-permission先问能不能做再让它做&#34;&gt;s03 Permission：先问能不能做，再让它做&lt;/h3&gt;
&lt;p&gt;这是 Claude Code 很重要的一课：&lt;strong&gt;自由要有边界&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;AI 能力很强，但它不能想删啥就删啥、想改啥就改啥。权限系统就像家长给孩子定规矩：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;读文件可以；&lt;/li&gt;
&lt;li&gt;修改重要文件要问一下；&lt;/li&gt;
&lt;li&gt;删除整个文件夹？不行。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    AI想做事[AI 想执行命令] --&amp;gt; 查权限{权限系统检查}
    查权限 --&amp;gt;|允许| 直接执行
    查权限 --&amp;gt;|需要确认| 问用户[弹窗问用户]
    查权限 --&amp;gt;|禁止| 拒绝[拒绝执行]
    问用户 --&amp;gt;|同意| 直接执行
    问用户 --&amp;gt;|不同意| 拒绝&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;这教会我们一个工程原则：&lt;strong&gt;先设边界，再给自由。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;s04-hooks在循环边上挂挂钩&#34;&gt;s04 Hooks：在循环边上挂“挂钩”&lt;/h3&gt;
&lt;p&gt;Hook 中文叫“钩子”。想象你在书包上挂很多小挂件：钥匙扣、饭卡、耳机。主书包不变，但你可以加东西。&lt;/p&gt;
&lt;p&gt;Claude Code 的 Hook 系统也是这样：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具执行前，可以检查一下（PreToolUse）；&lt;/li&gt;
&lt;li&gt;工具执行后，可以记录日志（PostToolUse）；&lt;/li&gt;
&lt;li&gt;会话开始/结束时，可以做初始化或清理。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    AI决定[AI 决定调用工具] --&amp;gt; 前钩子[&amp;#34;PreToolUse 钩子&amp;lt;br/&amp;gt;检查/拦截&amp;#34;]
    前钩子 --&amp;gt; 执行工具
    执行工具 --&amp;gt; 后钩子[&amp;#34;PostToolUse 钩子&amp;lt;br/&amp;gt;记录/通知&amp;#34;]
    后钩子 --&amp;gt; 返回AI&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;核心思想&lt;/strong&gt;：主循环不要改来改去，把扩展功能挂到钩子上。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五第二阶段做复杂任务&#34;&gt;五、第二阶段：做复杂任务&lt;/h2&gt;
&lt;h3 id=&#34;s05-todowrite先做计划再动手&#34;&gt;s05 TodoWrite：先做计划，再动手&lt;/h3&gt;
&lt;p&gt;如果你要写一篇大作文，你会先列提纲，对吧？Claude Code 也是这样。&lt;/p&gt;
&lt;p&gt;做复杂任务前，AI 会先写一个待办清单（Todo）：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1. 读 README 了解项目      [待做]
2. 找到 bug 所在的文件     [进行中]
3. 修改代码                [待做]
4. 运行测试确认修好        [待做]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;每完成一步，就更新状态。如果 AI 太久没更新，系统还会“唠叨”它：“喂，你忘了更新待办清单啦！”&lt;/p&gt;
&lt;p&gt;这个机制让 AI 不容易“跑偏”。&lt;/p&gt;
&lt;h3 id=&#34;s06-subagent雇一个小助手&#34;&gt;s06 Subagent：雇一个小助手&lt;/h3&gt;
&lt;p&gt;有时候一个任务需要查很多东西。比如“这个项目的测试框架是什么？”AI 可能要读 10 个文件才能确定答案是 &lt;code&gt;pytest&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果让主 AI 自己读 10 个文件，它的“脑子”会塞满东西，又慢又贵。&lt;/p&gt;
&lt;p&gt;解决办法是：&lt;strong&gt;雇一个临时小助手（子代理）&lt;/strong&gt;。小助手用全新的对话去读那 10 个文件，最后只把答案“pytest”告诉主 AI。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    主AI[&amp;#34;主 AI&amp;#34;] --&amp;gt;|派任务| 子AI[&amp;#34;子 AI&amp;lt;br/&amp;gt;新开一个对话&amp;#34;]
    子AI --&amp;gt;|读10个文件| 文件[&amp;#34;项目文件&amp;#34;]
    文件 --&amp;gt;|内容| 子AI
    子AI --&amp;gt;|只返回结论：pytest| 主AI&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;主 AI 的脑子很干净，只记住了最重要的结论。&lt;/p&gt;
&lt;h3 id=&#34;s07-skill-loading需要哪本字典就翻哪本&#34;&gt;s07 Skill Loading：需要哪本字典，就翻哪本&lt;/h3&gt;
&lt;p&gt;想象你要学数学、物理、化学三科。你不会每次上课都把三本书全背上，而是上什么课带什么书。&lt;/p&gt;
&lt;p&gt;Claude Code 也是这样。它有很多“技能书”（比如 git 用法、测试规范、API 文档），但不会一次性全塞给 AI。&lt;/p&gt;
&lt;p&gt;它是两层加载：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;先给目录&lt;/strong&gt;：告诉 AI 有哪些技能书；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;需要时再翻开&lt;/strong&gt;：AI 说“我要查 git 那本书”，系统才把完整内容给它。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样就省了很多“脑容量”。&lt;/p&gt;
&lt;h3 id=&#34;s08-context-compact脑子塞不下时怎么办&#34;&gt;s08 Context Compact：脑子塞不下时怎么办？&lt;/h3&gt;
&lt;p&gt;AI 一次能看的文字是有限的，就像你的作业本只有那么多页。如果写得太多，就要翻页或者撕掉旧的。&lt;/p&gt;
&lt;p&gt;Claude Code 有三种“翻页”方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;micro_compact&lt;/strong&gt;：把很久以前的工具结果换成一句话摘要，比如“之前用过 read_file”；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;auto_compact&lt;/strong&gt;：当文字太多时，自动让 AI 写个总结，用总结替换原来的长对话；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;compact 工具&lt;/strong&gt;：AI 自己决定什么时候该“翻页”。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    subgraph 第一层[&amp;#34;第一层：micro_compact&amp;#34;]
        旧结果[&amp;#34;旧工具结果&amp;#34;] --&amp;gt; 占位符[&amp;#34;换成占位符&amp;lt;br/&amp;gt;[之前读过 main.py]&amp;#34;]
    end

    subgraph 第二层[&amp;#34;第二层：auto_compact&amp;#34;]
        太多文字[&amp;#34;对话太长&amp;#34;] --&amp;gt; 写总结[&amp;#34;AI 写摘要&amp;#34;] --&amp;gt; 替换历史[&amp;#34;用摘要替换历史&amp;#34;]
    end

    subgraph 第三层[&amp;#34;第三层：compact 工具&amp;#34;]
        AI判断[&amp;#34;AI 觉得该压缩了&amp;#34;] --&amp;gt; 手动触发[&amp;#34;调用 compact 工具&amp;#34;]
    end

    第一层 --&amp;gt; 第二层 --&amp;gt; 第三层&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;六第三阶段记得住错得了&#34;&gt;六、第三阶段：记得住、错得了&lt;/h2&gt;
&lt;h3 id=&#34;s09-memoryai-也要记笔记&#34;&gt;s09 Memory：AI 也要记笔记&lt;/h3&gt;
&lt;p&gt;AI 没有真正的记忆。每次对话结束，它就忘了。如果想让它长期记住东西（比如你喜欢什么代码风格、项目有什么规矩），就需要一个“记忆系统”。&lt;/p&gt;
&lt;p&gt;记忆系统通常分三步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;选择&lt;/strong&gt;：哪些东西值得记住？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提取&lt;/strong&gt;：把重要信息摘出来；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;固化&lt;/strong&gt;：存到文件或数据库里，下次对话再读出来。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    对话[&amp;#34;一段对话&amp;#34;] --&amp;gt; 选择[&amp;#34;选择重要信息&amp;#34;]
    选择 --&amp;gt; 提取[&amp;#34;提取关键事实&amp;#34;]
    提取 --&amp;gt; 存储[&amp;#34;存到记忆文件&amp;#34;]
    存储 --&amp;gt; 下次对话[&amp;#34;下次启动时读取&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;比如 AI 记住了：“这个用户喜欢用 2 个空格缩进。”下次写代码时它就会自动用 2 个空格。&lt;/p&gt;
&lt;h3 id=&#34;s10-system-prompt提示词不是写死的&#34;&gt;s10 System Prompt：提示词不是写死的&lt;/h3&gt;
&lt;p&gt;System Prompt 就是告诉 AI“你是谁、该怎么做事”的那段话。&lt;/p&gt;
&lt;p&gt;Claude Code 的 System Prompt 不是一次性写死的，而是&lt;strong&gt;运行时拼接&lt;/strong&gt;的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基础身份部分；&lt;/li&gt;
&lt;li&gt;当前项目规则；&lt;/li&gt;
&lt;li&gt;加载的技能书；&lt;/li&gt;
&lt;li&gt;用户的偏好记忆。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;就像你写作文时，老师给的题目要求 + 你自己的提纲 + 参考资料，组合在一起。&lt;/p&gt;
&lt;h3 id=&#34;s11-error-recovery做错事能重来&#34;&gt;s11 Error Recovery：做错事能重来&lt;/h3&gt;
&lt;p&gt;AI 也会犯错。比如它调用了一个不存在的文件，或者写的代码运行报错。这时候怎么办？&lt;/p&gt;
&lt;p&gt;Claude Code 有几种“重来”策略：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;重试&lt;/strong&gt;：可能是网络抖动，再试一次就好了；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;换条路&lt;/strong&gt;：这个方法不行，换另一个工具试试；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;清理空间&lt;/strong&gt;：上下文太满导致看不清，先压缩一下再试；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;换个小模型/大模型&lt;/strong&gt;：简单任务用小模型省钱，复杂任务换大模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    出错[工具执行出错] --&amp;gt; 重试{重试有用吗？}
    重试 --&amp;gt;|有用| 再试一次
    重试 --&amp;gt;|没用| 换方法[换工具/换思路]
    换方法 --&amp;gt;|还不行| 清空间[压缩上下文]
    清空间 --&amp;gt;|再试| 再试一次&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;重要道理&lt;/strong&gt;：错误不是终点，而是调整的起点。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;七第四阶段长时间运行&#34;&gt;七、第四阶段：长时间运行&lt;/h2&gt;
&lt;h3 id=&#34;s12-task-system把大目标拆成小任务&#34;&gt;s12 Task System：把大目标拆成小任务&lt;/h3&gt;
&lt;p&gt;复杂项目不能靠一个简单的 Todo 清单。任务之间有依赖关系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 做完了，B 才能开始；&lt;/li&gt;
&lt;li&gt;C 和 D 可以同时进行；&lt;/li&gt;
&lt;li&gt;E 要等 C 和 D 都做完。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Claude Code 用&lt;strong&gt;任务图&lt;/strong&gt;来管理。每个任务存成一个文件，记录自己的状态、依赖谁、被谁依赖。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    A[&amp;#34;设计登录页面&amp;#34;] --&amp;gt; B[&amp;#34;写前端代码&amp;#34;]
    A --&amp;gt; C[&amp;#34;写后端接口&amp;#34;]
    B --&amp;gt; D[&amp;#34;联调测试&amp;#34;]
    C --&amp;gt; D&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;s13-background-tasks慢活放后台&#34;&gt;s13 Background Tasks：慢活放后台&lt;/h3&gt;
&lt;p&gt;有些命令要跑很久，比如 &lt;code&gt;npm install&lt;/code&gt; 可能要几分钟。如果 AI 停下来等，就太浪费了。&lt;/p&gt;
&lt;p&gt;Claude Code 会开一个新的后台线程去跑这些慢命令，主 AI 继续思考别的事。等后台跑完了，再通知 AI。&lt;/p&gt;
&lt;h3 id=&#34;s14-cron-scheduler定时任务&#34;&gt;s14 Cron Scheduler：定时任务&lt;/h3&gt;
&lt;p&gt;Cron 就是“定时器”。比如你可以让 AI 每天早上 8 点检查一遍代码仓库，看看有没有需要更新的依赖。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“到点了就干活，不用人喊。”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    时间到[时间到了] --&amp;gt; Cron[Cron 触发器]
    Cron --&amp;gt; 任务[执行预设任务]
    任务 --&amp;gt; 结果[把结果发给 AI]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;八第五阶段团队协作&#34;&gt;八、第五阶段：团队协作&lt;/h2&gt;
&lt;h3 id=&#34;s15-agent-teams多个-ai-一起干活&#34;&gt;s15 Agent Teams：多个 AI 一起干活&lt;/h3&gt;
&lt;p&gt;一个 AI 干不完的大项目，可以叫一群 AI 一起干。每个 AI 有自己的身份和“收件箱”（mailbox）。&lt;/p&gt;
&lt;p&gt;它们通过 JSONL 文件收发消息：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;from&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;leader&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;to&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;你去写登录页面&amp;#34;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;from&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;to&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;leader&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;我做好了&amp;#34;&lt;/span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;每行一条消息，追加写入，像写日记一样简单。&lt;/p&gt;
&lt;h3 id=&#34;s16-team-protocols队友之间要讲规矩&#34;&gt;s16 Team Protocols：队友之间要讲规矩&lt;/h3&gt;
&lt;p&gt;多人协作不能乱说话。Claude Code 的团队协议规定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每个重要请求都要带一个 &lt;code&gt;request_id&lt;/code&gt;（像快递单号）；&lt;/li&gt;
&lt;li&gt;回复时要引用同一个 &lt;code&gt;request_id&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;请求状态是 pending（等待中）、approved（同意）或 rejected（拒绝）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样就不会搞混谁同意了什么。&lt;/p&gt;
&lt;h3 id=&#34;s17-autonomous-agentsai-自己会找活干&#34;&gt;s17 Autonomous Agents：AI 自己会找活干&lt;/h3&gt;
&lt;p&gt;更高级的团队里，AI 不需要等领导分配任务。它会自己去看任务板，认领还没人做的、并且前置条件满足的任务。&lt;/p&gt;
&lt;p&gt;如果 60 秒没活干，它就自动“下班关机”。&lt;/p&gt;
&lt;h3 id=&#34;s18-worktree-isolation各干各的不打架&#34;&gt;s18 Worktree Isolation：各干各的，不打架&lt;/h3&gt;
&lt;p&gt;两个 AI 同时改同一个文件，会互相覆盖。Claude Code 用 &lt;strong&gt;git worktree&lt;/strong&gt; 给每个任务一个独立目录和独立分支：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;任务 A → 目录 auth-refactor/ → 分支 wt/auth-refactor
任务 B → 目录 ui-login/     → 分支 wt/ui-login&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;大家互不干扰，最后再把代码合并。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;九第六阶段扩展组装&#34;&gt;九、第六阶段：扩展组装&lt;/h2&gt;
&lt;h3 id=&#34;s19-mcp-plugin不够用时插更多工具&#34;&gt;s19 MCP Plugin：不够用时，插更多工具&lt;/h3&gt;
&lt;p&gt;MCP 是“模型上下文协议”。你可以把它理解成“USB 接口”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code 本身带了一些工具；&lt;/li&gt;
&lt;li&gt;如果你需要连数据库、查浏览器、操作 Slack，可以通过 MCP 插进来；&lt;/li&gt;
&lt;li&gt;这些外部工具和自带工具一样，AI 都能调用。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    Claude[&amp;#34;Claude Code&amp;#34;] --&amp;gt; MCP[&amp;#34;MCP 接口&amp;#34;]
    MCP --&amp;gt; 数据库[&amp;#34;数据库工具&amp;#34;]
    MCP --&amp;gt; 浏览器[&amp;#34;浏览器工具&amp;#34;]
    MCP --&amp;gt; Slack[&amp;#34;Slack 工具&amp;#34;]
    数据库 --&amp;gt;|结果| Claude
    浏览器 --&amp;gt;|结果| Claude
    Slack --&amp;gt;|结果| Claude&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;s20-comprehensive-agent把所有东西拼起来&#34;&gt;s20 Comprehensive Agent：把所有东西拼起来&lt;/h3&gt;
&lt;p&gt;最后一节课，就是把前面 19 节课的所有机制都装进同一个循环里：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一个循环 + 工具 + 权限 + 钩子 + 计划 + 子代理 + 技能 + 记忆 + 压缩 + 任务图 + 后台任务 + Cron + 团队 + 自治 + Worktree + MCP = 完整的 Claude Code&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;听起来很多，但你已经一个个看过了。它们都是围绕最初那个简单循环加上的“配件”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;十给新手的-5-个开发小技巧&#34;&gt;十、给新手的 5 个开发小技巧&lt;/h2&gt;
&lt;p&gt;这些技巧来自 Claude Code 的源码，平时写程序也能用到。&lt;/p&gt;
&lt;h3 id=&#34;1-用查表代替一堆-ifelse&#34;&gt;1. 用“查表”代替一堆 if/else&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 不推荐&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;read&amp;#34;&lt;/span&gt;: read_file()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;elif&lt;/span&gt; name &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;write&amp;#34;&lt;/span&gt;: write_file()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 推荐&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HANDLERS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;read&amp;#34;&lt;/span&gt;: read_file, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;write&amp;#34;&lt;/span&gt;: write_file}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HANDLERS[name]()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;加新功能只要加一行。&lt;/p&gt;
&lt;h3 id=&#34;2-修改列表要小心&#34;&gt;2. 修改列表要小心&lt;/h3&gt;
&lt;p&gt;如果你想在一个函数里修改外面的列表，要用切片赋值：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;messages[:] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; new_list  &lt;span style=&#34;color:#75715e&#34;&gt;# 正确：改原来的列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# messages = new_list   # 错误：只是让局部变量指向新列表&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;h3 id=&#34;3-用-kwargs-接受任意参数&#34;&gt;3. 用 &lt;code&gt;**kwargs&lt;/code&gt; 接受任意参数&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;handler&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;kw):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(kw[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;handler(path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main.py&amp;#34;&lt;/span&gt;, limit&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;&lt;code&gt;(**kw)&lt;/code&gt; 表示“不管什么参数名，都装进字典 kw 里”。&lt;/p&gt;
&lt;h3 id=&#34;4-守护线程做后台任务&#34;&gt;4. 守护线程做后台任务&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; threading
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; threading&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Thread(target&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;download_file, daemon&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;t&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;start()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;主程序退出时，守护线程会自动结束，不会卡住。&lt;/p&gt;
&lt;h3 id=&#34;5-jsonl-比-json-更适合追加写入&#34;&gt;5. JSONL 比 JSON 更适合追加写入&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 写：每行一条&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;inbox.jsonl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write(json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dumps(msg) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 读：逐行解析&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; line &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;inbox.jsonl&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    msg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;loads(line)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;p&gt;追加写入很安全，不会因为同时写入而损坏文件。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;十一总结&#34;&gt;十一、总结&lt;/h2&gt;
&lt;p&gt;Claude Code 看起来很厉害，但它的核心其实非常朴素：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;一个 while 循环 + 一张工具表 + 一个会说话的 AI。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;真正让它变强的，是围绕这个循环一层层加上的“配件”：权限、计划、子代理、技能、记忆、压缩、任务图、后台任务、团队、自治、目录隔离、MCP……&lt;/p&gt;
&lt;p&gt;这些配件都是为了解决一个核心问题：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;怎么让一个只会说话的 AI，真正能在现实世界里连续、安全、高效地干活。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;理解了这个骨架之后，你再回头看 Claude Code，就不会觉得它是黑魔法了。它就是一个被精心设计的“机器人工作台”，而我们看到的聪明，来自那个会思考的大脑，加上一套会执行的 harness。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;大脑负责想，工作台负责做。把工作台造好，大脑就能发挥全部实力。&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文是学习 &lt;a href=&#34;https://github.com/shareAI-lab/learn-claude-code&#34;&gt;shareAI-lab/learn-claude-code&lt;/a&gt; 的笔记整理。如果你想动手，可以从 &lt;code&gt;s01_agent_loop/code.py&lt;/code&gt; 开始，一课一课跟着做。&lt;/em&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
