<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>自动化 on KnightLi的博客</title>
        <link>https://knightli.com/tags/%E8%87%AA%E5%8A%A8%E5%8C%96/</link>
        <description>Recent content in 自动化 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Wed, 27 May 2026 08:21:18 +0800</lastBuildDate><atom:link href="https://knightli.com/tags/%E8%87%AA%E5%8A%A8%E5%8C%96/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Codex 官方文章解读：如何把 Codex 用到极致</title>
        <link>https://knightli.com/2026/05/27/getting-the-most-out-of-codex/</link>
        <pubDate>Wed, 27 May 2026 08:21:18 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/27/getting-the-most-out-of-codex/</guid>
        <description>&lt;p&gt;多数开发者第一次使用 Codex，通常是从代码任务开始：阅读仓库、修改 diff、运行测试、打开 pull request。&lt;/p&gt;
&lt;p&gt;这仍然是 Codex 的核心场景。但电脑上的很多工作本来就被代码和工具包围：执行 shell 命令、浏览网页、调用 API、导出文档、响应消息、触发自动化。随着这些能力逐渐接入 Codex，它就不再只是狭义的代码助手，而更像一个帮你完成电脑工作的系统。&lt;/p&gt;
&lt;p&gt;Codex app 让这种变化变得更具体。一个 thread 可以保留上下文、调用工具、展示产物，并在多轮提示之间持续推进，而不是每次对话都重新开始。&lt;/p&gt;
&lt;p&gt;想更充分地使用 Codex，关键是把这些能力组合起来：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;持久线程，用来保存长期上下文&lt;/li&gt;
&lt;li&gt;语音输入、steering 和 queuing，让用户仍然掌控过程&lt;/li&gt;
&lt;li&gt;browser、computer use、MCP servers 和 connectors，让 Codex 走出仓库&lt;/li&gt;
&lt;li&gt;thread automations 和 Goals，让任务在用户离开后继续推进&lt;/li&gt;
&lt;li&gt;侧边栏，用来审阅代码、文档、幻灯片、网页和其他产物&lt;/li&gt;
&lt;li&gt;共享记忆，把重要上下文写到线程之外&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;持久线程&#34;&gt;持久线程
&lt;/h2&gt;&lt;p&gt;Durable threads 指的是能在多次会话之间保留工作上下文的长线程。&lt;/p&gt;
&lt;p&gt;Pinned threads 是一种很实用的入口。它适合放那些会反复回来的工作流，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chief of Staff 线程&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;这些不是临时聊天，而是持续存在的工作空间。Codex 可以在后续继续回到同一个线程，沿用之前的决策、偏好和背景信息，避免每次都从零重建上下文。&lt;/p&gt;
&lt;p&gt;快捷键也让它更顺手。&lt;code&gt;Command-1&lt;/code&gt; 到 &lt;code&gt;Command-9&lt;/code&gt; 可以直接跳转到已保存的线程。&lt;/p&gt;
&lt;h2 id=&#34;语音输入&#34;&gt;语音输入
&lt;/h2&gt;&lt;p&gt;语音输入的价值在于，它能捕捉还没有被整理成正式文字的想法。&lt;/p&gt;
&lt;p&gt;Codex 内置语音输入。它特别适合那些说起来很自然、打字时却很别扭的模糊起点：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;我记得 Slack 里好像有个叫 Ben 的人提过这个。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;具体细节我不记得了。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;帮我去找一下。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;对于一个能搜索、整理上下文并汇报结果的 agent 来说，这通常已经足够开始。&lt;/p&gt;
&lt;p&gt;语音也适合两三分钟的想法倾倒。会议转录、口述规划笔记、未整理的原始记录，往往比一句摘要更有用，因为它们保留了不确定性、重点和没说完的思路。&lt;/p&gt;
&lt;h2 id=&#34;steering-和-queuing&#34;&gt;Steering 和 queuing
&lt;/h2&gt;&lt;p&gt;语音和显式控制结合起来时，会更有用。&lt;/p&gt;
&lt;p&gt;Steering 指的是在 Codex 任务执行过程中插入新的方向，让它在当前步骤结束前改道。&lt;/p&gt;
&lt;p&gt;例如在审阅网页时，用户可以一边在侧边栏标注，一边打断当前任务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这里再小一点。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这两个元素之间的间距不对。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这句文案写错了。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Queuing 则不同。它不打断当前任务，而是把下一步工作排到队列里：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;这项工作完成后，把预览链接发给 Slack 里的 reviewer。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Steering 改变 Codex 现在正在做什么。Queuing 改变它接下来应该做什么。两者都让用户在任务展开时仍然靠近现场。&lt;/p&gt;
&lt;h2 id=&#34;工具和可触达范围&#34;&gt;工具和可触达范围
&lt;/h2&gt;&lt;p&gt;线程有了连续性之后，下一个问题就是：它能操作什么？&lt;/p&gt;
&lt;p&gt;Codex 可以一层层向外扩展：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$browser&lt;/code&gt;：适合侧边栏里的网页检查、标注和 review&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@chrome&lt;/code&gt;：适合依赖用户 Chrome 登录状态的浏览器工作流&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@computer&lt;/code&gt;：适合只能通过桌面 GUI 完成的任务&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MCP servers 和 connectors 把同样的思路扩展到更多工作流中。Slack、Gmail、Calendar 很重要，因为很多任务最初不是以代码形式出现，而是以消息、邮件和日程问题出现。&lt;/p&gt;
&lt;p&gt;Skills 则适合固化重复工作。当某个流程已经被证明有用，就可以把它打包成 skill，让 Codex 下次不必重新学习这套步骤。&lt;/p&gt;
&lt;h2 id=&#34;从任何地方继续工作&#34;&gt;从任何地方继续工作
&lt;/h2&gt;&lt;p&gt;Codex mobile app 改变了用户必须坐在电脑前的时间。&lt;/p&gt;
&lt;p&gt;一个任务可以在 Mac 上开始，因为文件、权限和本地环境都在那里；随后用户离开桌面，只用手机继续确认、补充或改方向。&lt;/p&gt;
&lt;p&gt;这在很多小场景里很有价值：Codex 跑长任务时，用户可以离开座位；如果它需要确认，可以在外面回复；如果方向错了，也能及时 redirect。真正留在原地的是本地环境，而不是用户本人。&lt;/p&gt;
&lt;h2 id=&#34;自动化&#34;&gt;自动化
&lt;/h2&gt;&lt;p&gt;Automations 可以按计划运行 Codex 工作。&lt;/p&gt;
&lt;p&gt;如果一个周期任务应该从某个 workspace 重新开始，例如日报或常规仓库检查，可以用 scheduled automation。如果调度应该回到一个已有对话，并沿用它的上下文，就更适合 thread automation。&lt;/p&gt;
&lt;p&gt;Thread automations 更像心跳式唤醒：按固定节奏回到同一个 Codex thread。&lt;/p&gt;
&lt;p&gt;Pinned threads 需要用户主动回来，而 thread automation 可以每几分钟或每几小时检查一次，持续运行到满足条件为止，并随时间调整节奏。&lt;/p&gt;
&lt;p&gt;例如，一个 Chief of Staff 线程可以每 30 分钟运行一次：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;每 30 分钟检查 Slack 和 Gmail，找出需要我注意但还没有回复的消息。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;帮我判断哪些最重要。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;如果有人问我问题，尽可能深入研究答案，并替我起草回复，但不要发送。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;用户回来时，最耗时的上下文收集往往已经完成。真正要不要发送，仍然由人决定。&lt;/p&gt;
&lt;p&gt;Thread automations 也适合反馈循环。它可以定期查看 pull request 评论、Google Docs 评论或 Slack 回复，在用户离开时继续推进周边工作。&lt;/p&gt;
&lt;p&gt;比如一个动画工作流：reviewer 在 Slack 里发来视频反馈，thread automation 定时检查线程；如果有新评论，就重新渲染版本，并在同一个 Slack thread 里回复 reviewer。如果某个集成无法完成最终上传，桌面自动化还可以通过 GUI 补上最后一步。&lt;/p&gt;
&lt;p&gt;这个循环会跨过 Slack、代码库和桌面应用，但对用户来说仍然留在同一个工作流里。&lt;/p&gt;
&lt;h2 id=&#34;goals&#34;&gt;Goals
&lt;/h2&gt;&lt;p&gt;Goals 最适合那些有明确终点、并且 agent 可以持续推进的任务。&lt;/p&gt;
&lt;p&gt;一个较弱的 goal 可能是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实现这个 Markdown 文件里的计划。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;更强的 goal 会有可衡量的完成标准。&lt;/p&gt;
&lt;p&gt;例如，把一个内部工具从 Python 迁移到 Rust 时，可以先建好新目录，再把目标说清楚：新实现只有在单元测试通过后才算完成。&lt;/p&gt;
&lt;p&gt;Goal 本质上是持续执行加验证器。用户需要定义结果、停止条件，以及判断 Codex 是否更接近目标的信号。&lt;/p&gt;
&lt;p&gt;常见的验证器包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;测试套件&lt;/li&gt;
&lt;li&gt;benchmark&lt;/li&gt;
&lt;li&gt;bug reproduction&lt;/li&gt;
&lt;li&gt;validation matrix&lt;/li&gt;
&lt;li&gt;必须持续通过的端到端工作流&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;任务可以有野心，但没有验证条件时，它更像愿望，而不是 goal。&lt;/p&gt;
&lt;h2 id=&#34;侧边栏&#34;&gt;侧边栏
&lt;/h2&gt;&lt;p&gt;侧边栏把工作产物放在生成它的对话旁边。用户不必导出文件、切换上下文，再回头描述问题。产物可能是代码，也可能是 deck、PDF、网页、表格，或者工作过程中生成的其他 artifact。&lt;/p&gt;
&lt;p&gt;它特别适合四类工作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查 artifact&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;Markdown、表格、数据表、文档和幻灯片都可以直接在侧边栏里看。用户可以检查、标注、修改，而不用把这个过程变成另一轮交接。&lt;/p&gt;
&lt;p&gt;如果是 deck 或 PDF，它可以一直停在产生它的 thread 旁边，随时接受 review 和修复。&lt;/p&gt;
&lt;p&gt;浏览器也是类似的工作面。Codex 可以打开渲染后的页面，检查它，响应用户在页面上的标注，并继续修复同一个对象。网页既是输出结果，也是控制表面。&lt;/p&gt;
&lt;p&gt;这些表面尤其适合放在侧边栏里：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;index.html&lt;/code&gt; 这种轻量静态 artifact&lt;/li&gt;
&lt;li&gt;Storybook&lt;/li&gt;
&lt;li&gt;Remotion Studio&lt;/li&gt;
&lt;li&gt;浏览器幻灯片&lt;/li&gt;
&lt;li&gt;数据分析应用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个单独的 &lt;code&gt;index.html&lt;/code&gt; 文件就可以成为长期存在的交互 artifact，不一定需要服务器。Thread automations 也可以定期刷新静态 artifact，让用户回来时看到新的结果。&lt;/p&gt;
&lt;h2 id=&#34;共享记忆&#34;&gt;共享记忆
&lt;/h2&gt;&lt;p&gt;长线程很有用，但重要上下文不应该只存在于对话记录里。&lt;/p&gt;
&lt;p&gt;Shared memory 指的是把持久上下文存放在线程之外，让未来的工作可以从明确、可审阅的地方继续。&lt;/p&gt;
&lt;p&gt;一种稳定做法是把持久线程锚定在 Obsidian vault 里。实际形态可以很简单：一组普通文件，方便检查、编辑、移动和长期保存。团队可以把它放在 cloud storage、Git、Dropbox、Google Drive 或其他同步层里。&lt;/p&gt;
&lt;p&gt;一个 vault 可能长这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── TODO.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── people/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── projects/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── agent/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── notes/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;顶层的 &lt;code&gt;AGENTS.md&lt;/code&gt; 可以说明 Codex 应该如何维护这个工作空间：什么信息要写下来，写到哪里，什么时候不要制造噪音。&lt;/p&gt;
&lt;p&gt;一个实用的 &lt;code&gt;AGENTS.md&lt;/code&gt; 可以这样写：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Treat ~/vault as durable work memory.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Prefer canonical notes over note sprawl.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Route TODOs, people, projects, daily summaries, and scratch notes explicitly.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Preserve decisions, blockers, owners, dates, and useful links.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; If nothing meaningful changed, do not churn the vault.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不要照抄某个 vault 结构。更重要的是教会 agent：长期上下文应该放在哪里，哪些信息值得保留，什么时候不应该反复改动文件。&lt;/p&gt;
&lt;p&gt;仓库存放代码。Vault 存放滚动上下文：相关人员、发生了什么、哪里卡住、谁负责、下一步是什么，以及那些如果不写下来就会在会话之间消失的细节。&lt;/p&gt;
&lt;p&gt;Codex 也有第一方记忆能力，可以在 &lt;code&gt;Settings &amp;gt; Personalization &amp;gt; Memories&lt;/code&gt; 中配置。它适合记录偏好、重复工作流和常见坑点，但它更适合作为显式 written context 的补充，而不是替代品。Chronicle 也在同一个方向上推进：从最近的屏幕上下文中帮助 Codex 建立记忆。&lt;/p&gt;
&lt;h2 id=&#34;从代码向外扩展&#34;&gt;从代码向外扩展
&lt;/h2&gt;&lt;p&gt;Codex 仍然从代码开始。但代码周围的更多工作，现在也能被同一个系统触达：MCP servers、浏览器界面、桌面控制、thread automations 和可审阅 artifact。&lt;/p&gt;
&lt;p&gt;这改变了使用 Codex 的控制方式。Steering 用来打断正在进行的工作。Queuing 用来排下一步。Thread automations 让线程在用户离开后继续活动。Goals 给长期任务加上明确终点和验证信号。&lt;/p&gt;
&lt;p&gt;当这些能力连起来时，Codex 就能把一个工作流从指令推进到执行，再推进到 artifact review。即使任务已经离开代码仓库，它仍然可以留在同一个系统里完成。&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a class=&#34;link&#34; href=&#34;https://x.com/jxnlco/status/2057153744630890620&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Getting the most out of Codex&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>ai-goofish-monitor：用 AI 自动盯闲鱼商品的开源监控系统</title>
        <link>https://knightli.com/2026/05/17/ai-goofish-monitor/</link>
        <pubDate>Sun, 17 May 2026 17:24:03 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/17/ai-goofish-monitor/</guid>
        <description>&lt;p&gt;ai-goofish-monitor 是 Usagi-org 开源的闲鱼商品监控系统。&lt;/p&gt;
&lt;p&gt;它的目标很明确：把闲鱼搜索、筛选、商品分析、结果记录和通知推送自动化，帮助用户从大量二手商品里更快找到符合条件的目标。项目基于 Playwright 做页面自动化，再接入支持图片输入的 AI 模型，对商品信息做进一步判断。&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/Usagi-org/ai-goofish-monitor&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;先说结论&#34;&gt;先说结论
&lt;/h2&gt;&lt;p&gt;ai-goofish-monitor 更像一个“闲鱼采购情报面板”，而不是简单的关键词提醒脚本。&lt;/p&gt;
&lt;p&gt;它有几个明显特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有完整 Web 管理界面，可以管理任务、账号、AI 标准、日志和结果。&lt;/li&gt;
&lt;li&gt;支持多任务并发，每个任务可以配置关键词、价格、筛选条件和 AI Prompt。&lt;/li&gt;
&lt;li&gt;使用 Playwright 抓取闲鱼页面，适合处理需要登录态和页面交互的场景。&lt;/li&gt;
&lt;li&gt;使用 AI 判断商品是否符合需求，不只依赖关键词匹配。&lt;/li&gt;
&lt;li&gt;支持 ntfy.sh、企业微信、Bark、Telegram、Webhook 等通知渠道。&lt;/li&gt;
&lt;li&gt;支持 Cron 定时任务、多账号管理、代理轮换、失败重试和 Docker 部署。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它适合经常在闲鱼找特定商品的人，比如二手数码、摄影器材、显卡、硬盘、游戏机、乐器、家电和收藏品。但它也不是“自动捡漏神器”。闲鱼搜索结果本身会变化，账号登录态可能失效，平台风控也会影响自动化稳定性。使用时更应该把它当成辅助筛选工具，而不是完全替代人工判断。&lt;/p&gt;
&lt;h2 id=&#34;它解决什么问题&#34;&gt;它解决什么问题
&lt;/h2&gt;&lt;p&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;li&gt;低价商品里混着配件、损坏品、翻新货和诱导性标题。&lt;/li&gt;
&lt;li&gt;想持续盯多个关键词时，手动搜索很难坚持。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;普通关键词提醒只能解决一部分问题。比如你搜索“ThinkPad X1”，可能会混入配件、坏屏、空盒、拆机件；你搜索“索尼 A7C”，又可能遇到镜头套装、租赁信息、标题党和价格异常。&lt;/p&gt;
&lt;p&gt;ai-goofish-monitor 的思路是：先用自动化把候选商品抓出来，再交给 AI 按你的需求做二次判断，最后把值得关注的结果推送给你。&lt;/p&gt;
&lt;h2 id=&#34;核心功能&#34;&gt;核心功能
&lt;/h2&gt;&lt;p&gt;项目 README 里列出的核心能力比较完整：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Web 可视化管理：任务管理、账号管理、AI 标准编辑、运行日志、结果浏览。&lt;/li&gt;
&lt;li&gt;AI 驱动：支持自然语言创建任务，并用多模态模型分析商品。&lt;/li&gt;
&lt;li&gt;多任务并发：不同任务可以独立配置关键词、价格、筛选条件和 AI Prompt。&lt;/li&gt;
&lt;li&gt;高级筛选：支持包邮、新发布时间范围、省 / 市 / 区三级区域筛选。&lt;/li&gt;
&lt;li&gt;即时通知：支持 ntfy.sh、企业微信、Bark、Telegram、Webhook 等多渠道。&lt;/li&gt;
&lt;li&gt;定时调度：支持 Cron 配置周期性任务。&lt;/li&gt;
&lt;li&gt;账号与代理轮换：多账号管理、任务绑定账号、代理池轮换与失败重试。&lt;/li&gt;
&lt;li&gt;Docker 部署：支持容器化部署。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些能力组合起来，覆盖了从“创建监控任务”到“收到命中提醒”的完整链路。&lt;/p&gt;
&lt;h2 id=&#34;工作流是什么样&#34;&gt;工作流是什么样
&lt;/h2&gt;&lt;p&gt;一个典型流程大概是这样：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;部署服务并打开 Web UI。&lt;/li&gt;
&lt;li&gt;导入闲鱼账号登录态。&lt;/li&gt;
&lt;li&gt;创建监控任务。&lt;/li&gt;
&lt;li&gt;设置关键词、价格区间、地区、新发布范围等筛选条件。&lt;/li&gt;
&lt;li&gt;编写或让 AI 生成判断标准。&lt;/li&gt;
&lt;li&gt;任务按实时或定时方式运行。&lt;/li&gt;
&lt;li&gt;Playwright 打开页面并抓取商品信息。&lt;/li&gt;
&lt;li&gt;AI 根据标题、描述、图片和 Prompt 判断是否符合需求。&lt;/li&gt;
&lt;li&gt;命中结果写入 SQLite。&lt;/li&gt;
&lt;li&gt;系统通过配置的通知渠道推送结果。&lt;/li&gt;
&lt;li&gt;用户在 Web UI 里查看结果、日志和价格历史。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个流程里，AI 的价值主要在第 8 步。它可以理解“我想要成色好、价格合理、不要配件、不要维修机、最好同城自提”这类自然语言条件，比单纯关键词规则灵活。&lt;/p&gt;
&lt;h2 id=&#34;docker-部署&#34;&gt;Docker 部署
&lt;/h2&gt;&lt;p&gt;项目推荐使用 Docker 部署：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Usagi-org/ai-goofish-monitor &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ai-goofish-monitor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim .env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs -f app
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose down
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;默认 Web UI 地址是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://127.0.0.1:8000
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;官方镜像地址是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ghcr.io/usagi-org/ai-goofish:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果镜像访问慢，README 里也给了加速镜像示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker pull ghcr.nju.edu.cn/usagi-org/ai-goofish:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker tag ghcr.nju.edu.cn/usagi-org/ai-goofish:latest ghcr.io/usagi-org/ai-goofish:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Docker 镜像已内置 Chromium，不需要宿主机额外安装浏览器。默认持久化目录包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data/&lt;/code&gt;：SQLite 主存储，保存任务、结果和价格历史。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state/&lt;/code&gt;：登录状态 cookie 文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompts/&lt;/code&gt;：任务提示词。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logs/&lt;/code&gt;：运行日志。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;images/&lt;/code&gt;：商品图片和任务临时图片目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果修改了 &lt;code&gt;.env&lt;/code&gt; 里的 &lt;code&gt;SERVER_PORT&lt;/code&gt;，也要同步调整 &lt;code&gt;docker-compose.yaml&lt;/code&gt; 的端口映射。&lt;/p&gt;
&lt;h2 id=&#34;最少配置&#34;&gt;最少配置
&lt;/h2&gt;&lt;p&gt;项目的最少配置主要围绕 AI 模型和 Web UI 登录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-env&#34; data-lang=&#34;env&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_api_key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_BASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_openai_compatible_base_url
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;OPENAI_MODEL_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_multimodal_model
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WEB_USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;admin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WEB_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;change_me
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中前三项是 AI 模型接入必填项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;：模型 API Key。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPENAI_BASE_URL&lt;/code&gt;：OpenAI 兼容接口地址。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OPENAI_MODEL_NAME&lt;/code&gt;：支持图片输入的模型名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WEB_USERNAME&lt;/code&gt; 和 &lt;code&gt;WEB_PASSWORD&lt;/code&gt; 用于 Web UI 登录。README 提到默认账号密码是 &lt;code&gt;admin/admin123&lt;/code&gt;，生产环境必须修改。&lt;/p&gt;
&lt;h2 id=&#34;第一次使用&#34;&gt;第一次使用
&lt;/h2&gt;&lt;p&gt;第一次使用时，流程大致是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;code&gt;http://127.0.0.1:8000&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;登录 Web UI。&lt;/li&gt;
&lt;li&gt;进入“闲鱼账号管理”。&lt;/li&gt;
&lt;li&gt;使用项目提供的 Chrome 扩展导出闲鱼登录态 JSON。&lt;/li&gt;
&lt;li&gt;把登录态粘贴到系统里。&lt;/li&gt;
&lt;li&gt;登录态文件会保存到 &lt;code&gt;state/&lt;/code&gt;，例如 &lt;code&gt;state/acc_1.json&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;回到“任务管理”，创建任务并绑定账号。&lt;/li&gt;
&lt;li&gt;运行任务并查看结果。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里最关键的是登录态。由于闲鱼并不是开放给第三方随意抓取的标准 API，项目需要用浏览器登录状态来模拟正常页面访问。登录态失效、风控、验证码、账号异常都会影响任务运行。&lt;/p&gt;
&lt;h2 id=&#34;ai-任务和关键词任务&#34;&gt;AI 任务和关键词任务
&lt;/h2&gt;&lt;p&gt;项目支持两类任务创建方式。&lt;/p&gt;
&lt;p&gt;第一类是 &lt;code&gt;AI判断&lt;/code&gt;。&lt;/p&gt;
&lt;p&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;li&gt;图片里要能看到序列号、包装或关键配件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第二类是 &lt;code&gt;关键词判断&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;它更接近传统规则监控：根据关键词、价格、地区等条件直接创建任务，不经过 AI 生成流程。适合规则简单、误报可以接受的场景。&lt;/p&gt;
&lt;p&gt;实际使用中可以混合使用：关键词负责初筛，AI 负责减少误报。&lt;/p&gt;
&lt;h2 id=&#34;web-ui-能做什么&#34;&gt;Web UI 能做什么
&lt;/h2&gt;&lt;p&gt;Web UI 是这个项目区别于普通脚本的重要部分。&lt;/p&gt;
&lt;p&gt;任务管理页可以配置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI 创建任务。&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;/li&gt;
&lt;li&gt;账号绑定。&lt;/li&gt;
&lt;li&gt;定时规则。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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;li&gt;让系统自动选择账号。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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;li&gt;排查登录态失效、风控和 AI 调用问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;系统设置页可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;查看系统状态。&lt;/li&gt;
&lt;li&gt;编辑 Prompt。&lt;/li&gt;
&lt;li&gt;调整代理和轮换配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于长期监控来说，Web UI 很关键。否则任务一多，配置、日志、结果和通知都会变得难维护。&lt;/p&gt;
&lt;h2 id=&#34;数据存储&#34;&gt;数据存储
&lt;/h2&gt;&lt;p&gt;项目当前在线主存储使用 SQLite，默认路径是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;data/app.sqlite3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Docker 默认把 SQLite 主库挂载到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./data:/app/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;应用启动时会自动建库建表，并尝试从旧的 &lt;code&gt;config.json&lt;/code&gt;、&lt;code&gt;jsonl/&lt;/code&gt;、&lt;code&gt;price_history/&lt;/code&gt; 导入一次历史数据。&lt;/p&gt;
&lt;p&gt;需要注意的是，&lt;code&gt;state/&lt;/code&gt;、&lt;code&gt;prompts/&lt;/code&gt;、&lt;code&gt;logs/&lt;/code&gt;、&lt;code&gt;images/&lt;/code&gt; 仍然是文件系统目录，不在 SQLite 中。商品图片会临时保存到类似下面的目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;images/task_images_&amp;lt;task_name&amp;gt;/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;任务结束后默认会清理。&lt;/p&gt;
&lt;p&gt;这种结构比较适合个人或小团队部署：SQLite 足够轻，迁移也简单；文件目录保留登录态、图片和日志，排查问题更直观。&lt;/p&gt;
&lt;h2 id=&#34;通知渠道&#34;&gt;通知渠道
&lt;/h2&gt;&lt;p&gt;项目支持多种通知渠道，常见配置包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NTFY_TOPIC_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOTIFY_URL&lt;/code&gt; / &lt;code&gt;GOTIFY_TOKEN&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BARK_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WX_BOT_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TELEGRAM_BOT_TOKEN&lt;/code&gt; / &lt;code&gt;TELEGRAM_CHAT_ID&lt;/code&gt; / &lt;code&gt;TELEGRAM_API_BASE_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEBHOOK_*&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通知是这类工具的核心体验。监控系统如果只把结果写进后台，用户仍然需要反复打开页面查看；有推送之后，命中商品才能在第一时间触达。&lt;/p&gt;
&lt;p&gt;更实用的配置方式是按商品价值分层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;普通关键词命中只写入后台。&lt;/li&gt;
&lt;li&gt;AI 高置信度结果推送到手机。&lt;/li&gt;
&lt;li&gt;高价值商品推送到企业微信或 Telegram。&lt;/li&gt;
&lt;li&gt;调试阶段开启更多日志，稳定后减少噪音。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;开发者运行&#34;&gt;开发者运行
&lt;/h2&gt;&lt;p&gt;如果不使用 Docker，本地开发需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Node.js + npm&lt;/li&gt;
&lt;li&gt;Playwright CLI&lt;/li&gt;
&lt;li&gt;Chromium 或 Chrome / Edge 浏览器&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基础命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Usagi-org/ai-goofish-monitor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ai-goofish-monitor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp .env.example .env
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;一键启动：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x start.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./start.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;start.sh&lt;/code&gt; 会检查 Playwright CLI 和浏览器条件，自动安装依赖、构建前端、复制构建产物并启动后端。&lt;/p&gt;
&lt;p&gt;手动启动后端：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m src.app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvicorn src.app:app --host 0.0.0.0 --port &lt;span class=&#34;m&#34;&gt;8000&lt;/span&gt; --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;前端开发：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; web-ui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;测试和构建：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PYTEST_DISABLE_PLUGIN_AUTOLOAD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; pytest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; web-ui &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;适合哪些人&#34;&gt;适合哪些人
&lt;/h2&gt;&lt;p&gt;ai-goofish-monitor 适合这些用户：&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;有 OpenAI 兼容模型 API，并愿意为 AI 判断支付调用成本的人。&lt;/li&gt;
&lt;li&gt;熟悉 Docker 或基本命令行部署的人。&lt;/li&gt;
&lt;li&gt;需要把命中结果推送到手机、企业微信或 Telegram 的用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它不太适合这些情况：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完全不懂部署，只想要一个即开即用 App。&lt;/li&gt;
&lt;li&gt;不愿意处理登录态、验证码和账号风控。&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;h2 id=&#34;使用风险和边界&#34;&gt;使用风险和边界
&lt;/h2&gt;&lt;p&gt;这类工具一定要注意边界。&lt;/p&gt;
&lt;p&gt;第一，遵守平台规则。&lt;/p&gt;
&lt;p&gt;闲鱼有自己的服务条款、风控策略和账号安全机制。自动化访问可能触发限制。不要高频抓取，不要绕过风控，不要把它用于骚扰卖家、批量采集隐私或破坏平台秩序。&lt;/p&gt;
&lt;p&gt;第二，保护账号登录态。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;state/&lt;/code&gt; 里保存的是登录状态 cookie 文件。它本质上等同于账号访问凭据，不能提交到 Git 仓库，也不要放到不可信服务器上。服务器如果暴露在公网，Web UI 必须修改默认密码，并建议放在 VPN、反向代理鉴权或内网之后。&lt;/p&gt;
&lt;p&gt;第三，AI 判断不是事实保证。&lt;/p&gt;
&lt;p&gt;AI 可以帮你减少误报，但不能保证商品真实、卖家可信、价格合理或交易安全。最终仍然要人工看商品详情、卖家评价、聊天记录、发货方式和支付流程。&lt;/p&gt;
&lt;p&gt;第四，注意成本。&lt;/p&gt;
&lt;p&gt;如果每个候选商品都交给多模态模型分析，调用成本可能很快上升。建议先用关键词、价格和区域做强筛选，再把少量候选交给 AI。&lt;/p&gt;
&lt;p&gt;第五，注意隐私。&lt;/p&gt;
&lt;p&gt;商品截图、聊天相关内容、账号状态和通知内容都可能包含敏感信息。通知 Webhook、日志目录和数据库都要妥善保护。&lt;/p&gt;
&lt;h2 id=&#34;和普通脚本的差别&#34;&gt;和普通脚本的差别
&lt;/h2&gt;&lt;p&gt;普通闲鱼监控脚本通常只做三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;搜索关键词。&lt;/li&gt;
&lt;li&gt;判断价格。&lt;/li&gt;
&lt;li&gt;发通知。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ai-goofish-monitor 更进一步：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用 Web UI 管理任务和账号。&lt;/li&gt;
&lt;li&gt;用 AI Prompt 表达复杂购买标准。&lt;/li&gt;
&lt;li&gt;用多模态模型看商品图和描述。&lt;/li&gt;
&lt;li&gt;用 SQLite 保存结果和价格历史。&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;也正因为功能更多，它的部署和维护成本更高。对普通用户来说，Docker 部署是最省事的方式；对开发者来说，Web UI、FastAPI、Playwright、SQLite 这套结构也比较容易二次开发。&lt;/p&gt;
&lt;h2 id=&#34;可以怎么用&#34;&gt;可以怎么用
&lt;/h2&gt;&lt;p&gt;比较实用的使用方式是从小任务开始。&lt;/p&gt;
&lt;p&gt;比如你想找一台二手相机，可以先创建一个任务：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关键词：&lt;code&gt;A7C&lt;/code&gt;、&lt;code&gt;索尼 A7C&lt;/code&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;AI 标准：排除单镜头、排除维修机、排除明显配件、关注快门数和成色&lt;/li&gt;
&lt;li&gt;通知：只推送 AI 判断通过的结果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;稳定运行后，再逐步增加任务数量。不要一开始就上几十个关键词、多个账号和高频 Cron。先看登录态稳定性、误报率、AI 成本和通知噪音，再调参数。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结
&lt;/h2&gt;&lt;p&gt;ai-goofish-monitor 把闲鱼监控从“关键词脚本”推进到了“可管理的 AI 监控系统”。它用 Playwright 处理页面自动化，用 AI 处理复杂判断，用 Web UI 管理任务和结果，用 SQLite 保存数据，再通过多种通知渠道把结果推送出来。&lt;/p&gt;
&lt;p&gt;它最适合个人或小团队做特定商品监控，尤其是二手数码、硬件、摄影器材这类价格波动大、发布时间敏感、描述噪音多的品类。&lt;/p&gt;
&lt;p&gt;但它也需要谨慎使用：登录态要保护，默认密码要改，抓取频率要克制，AI 结果要人工复核，平台规则和隐私边界不能忽视。把它当成辅助筛选工具，它会很有价值；把它当成全自动交易系统，就容易高估它的能力。&lt;/p&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Usagi-org/ai-goofish-monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor/blob/master/README_EN.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;项目英文 README&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Usagi-org/ai-goofish-monitor/blob/master/DISCLAIMER.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;项目免责声明&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>goose：桌面端、CLI 和 API 一体的开源 AI Agent</title>
        <link>https://knightli.com/2026/05/08/goose-open-source-ai-agent-desktop-cli-api/</link>
        <pubDate>Fri, 08 May 2026 13:35:45 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/08/goose-open-source-ai-agent-desktop-cli-api/</guid>
        <description>&lt;p&gt;goose 是一个运行在本机的开源 AI Agent。它不只面向代码补全，而是希望覆盖代码、研究、写作、自动化、数据分析等更广的任务。项目 README 里的定位很直接：桌面端、CLI 和 API 都提供，既可以给普通用户使用，也可以嵌入到自己的工作流里。&lt;/p&gt;
&lt;p&gt;这个项目已经从 &lt;code&gt;block/goose&lt;/code&gt; 迁移到 Linux Foundation 旗下的 Agentic AI Foundation（AAIF）。当前仓库是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://github.com/aaif-goose/goose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;goose 主要由 Rust 和 TypeScript 编写，许可证为 Apache-2.0。GitHub 项目描述是：一个开源、可扩展的 AI agent，不只给出代码建议，还能安装、执行、编辑和测试，并可接入任意 LLM。&lt;/p&gt;
&lt;h2 id=&#34;goose-解决什么问题&#34;&gt;goose 解决什么问题
&lt;/h2&gt;&lt;p&gt;很多 AI 编程工具只停留在“给建议”或“改代码”这一层。goose 的目标更宽一些：让 AI agent 直接在你的机器上完成任务。&lt;/p&gt;
&lt;p&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;li&gt;多步骤工作流。&lt;/li&gt;
&lt;li&gt;通过 API 嵌入到其他系统。&lt;/li&gt;
&lt;li&gt;通过 MCP 扩展外部工具能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你只想在编辑器里要几段代码，普通 Copilot 类工具已经够用。goose 更适合想把 AI 放进“本机任务执行链”的用户：它可以使用本地环境、连接模型 provider、调用扩展，并通过桌面端或 CLI 进入不同工作方式。&lt;/p&gt;
&lt;h2 id=&#34;三种入口桌面端cliapi&#34;&gt;三种入口：桌面端、CLI、API
&lt;/h2&gt;&lt;p&gt;goose 的一个特点是入口比较完整。&lt;/p&gt;
&lt;p&gt;第一种是桌面端。它支持 macOS、Linux 和 Windows，适合不想一直待在终端里的用户，也适合需要更清晰可视化交互的人。&lt;/p&gt;
&lt;p&gt;第二种是 CLI。终端用户可以直接安装命令行工具，把 goose 放进日常开发流程里。&lt;/p&gt;
&lt;p&gt;第三种是 API。它可以作为可嵌入的 agent runtime，让其他系统或内部工具调用 goose 的能力。&lt;/p&gt;
&lt;p&gt;这三个入口对应不同使用习惯。个人开发机可以先从桌面端或 CLI 开始；团队内部工具、自动化平台或实验型 agent 工作流，则更适合看 API 和自定义分发能力。&lt;/p&gt;
&lt;h2 id=&#34;安装方式&#34;&gt;安装方式
&lt;/h2&gt;&lt;p&gt;官方 README 推荐先下载桌面端：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://goose-docs.ai/docs/getting-started/installation
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果只安装 CLI，可以使用官方脚本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GitHub Releases 也提供不同平台的构建产物。当前 latest release 信息显示，&lt;code&gt;v1.33.1&lt;/code&gt; 发布于 2026-04-29，包含 macOS、Linux、Windows、deb、rpm、Flatpak 等资产。&lt;/p&gt;
&lt;p&gt;安装完成后，建议先按官方 Quickstart 配置 provider，再从一个低风险目录开始测试。由于 goose 可以执行本机任务，不建议一开始就在重要生产仓库里给它过高权限。&lt;/p&gt;
&lt;h2 id=&#34;支持的模型和-provider&#34;&gt;支持的模型和 provider
&lt;/h2&gt;&lt;p&gt;goose 支持 15+ provider。README 中列出的方向包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anthropic&lt;/li&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Ollama&lt;/li&gt;
&lt;li&gt;OpenRouter&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;Bedrock&lt;/li&gt;
&lt;li&gt;更多 OpenAI-compatible 或云端 provider&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它既可以使用 API key，也可以通过 ACP 使用已有的 Claude、ChatGPT 或 Gemini 订阅。&lt;/p&gt;
&lt;p&gt;ACP 这一点值得关注。很多用户已经有模型订阅，但不同工具要么不支持直接复用，要么配置方式很割裂。goose 通过 ACP provider 把订阅模型接入 agent 工作流，能减少“订阅在一边、自动化工具在另一边”的割裂感。&lt;/p&gt;
&lt;p&gt;不过 provider 政策变化很快。真正使用前，仍然要确认对应服务是否允许这种接入方式、是否有额度限制、是否适合公司代码或敏感数据。&lt;/p&gt;
&lt;h2 id=&#34;mcp-扩展能力&#34;&gt;MCP 扩展能力
&lt;/h2&gt;&lt;p&gt;goose 支持通过 Model Context Protocol（MCP）连接扩展。README 提到它可以连接 70+ extensions。&lt;/p&gt;
&lt;p&gt;MCP 的意义在于：agent 不只会“聊天”和“改文件”，还能通过标准协议接入更多工具，比如文档、数据库、浏览器、内部系统、搜索服务、设计工具或项目管理系统。&lt;/p&gt;
&lt;p&gt;对个人用户来说，MCP 可以让 goose 连接常用工具。对团队来说，MCP 更像一个安全边界和集成标准：你可以把内部能力包装成 server，让 agent 通过明确接口访问，而不是直接把所有系统暴露给模型。&lt;/p&gt;
&lt;h2 id=&#34;与代码助手的区别&#34;&gt;与代码助手的区别
&lt;/h2&gt;&lt;p&gt;goose 不只是代码补全工具。更准确地说，它是一个本机 agent runtime。&lt;/p&gt;
&lt;p&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;goose 更强调：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本机任务执行。&lt;/li&gt;
&lt;li&gt;多步骤工作流。&lt;/li&gt;
&lt;li&gt;provider 可切换。&lt;/li&gt;
&lt;li&gt;扩展能力。&lt;/li&gt;
&lt;li&gt;桌面端和 CLI 并存。&lt;/li&gt;
&lt;li&gt;API 可嵌入。&lt;/li&gt;
&lt;li&gt;不限定在代码任务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也意味着它的复杂度更高。你需要考虑模型配置、权限、扩展、工作目录、日志、凭据管理等问题。它不是“越自动越好”的工具，而是更适合被认真配置和逐步引入。&lt;/p&gt;
&lt;h2 id=&#34;自定义分发&#34;&gt;自定义分发
&lt;/h2&gt;&lt;p&gt;goose 仓库提供 &lt;code&gt;CUSTOM_DISTROS.md&lt;/code&gt;，说明可以构建自己的 goose distro，预配置 provider、extensions 和 branding。&lt;/p&gt;
&lt;p&gt;这对团队或组织很有意义。&lt;/p&gt;
&lt;p&gt;比如团队可以做一个内部版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;预置公司允许的模型 provider。&lt;/li&gt;
&lt;li&gt;默认连接内部 MCP server。&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;这样普通成员不需要从零理解所有配置，也能减少把 key、provider、扩展配错的风险。&lt;/p&gt;
&lt;h2 id=&#34;使用建议&#34;&gt;使用建议
&lt;/h2&gt;&lt;p&gt;如果你第一次尝试 goose，可以按这个顺序来：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先安装桌面端或 CLI。&lt;/li&gt;
&lt;li&gt;配置一个你确定可用的 provider。&lt;/li&gt;
&lt;li&gt;在测试目录里运行简单任务。&lt;/li&gt;
&lt;li&gt;观察它会读取哪些文件、执行哪些动作。&lt;/li&gt;
&lt;li&gt;再接入 MCP extension。&lt;/li&gt;
&lt;li&gt;最后再尝试复杂代码仓库或自动化工作流。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;不要一开始就把 goose 放进生产仓库、给它全部权限、再让它执行模糊任务。AI agent 的能力越强，越需要明确边界。&lt;/p&gt;
&lt;p&gt;建议保持几个习惯：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重要改动前先提交 git。&lt;/li&gt;
&lt;li&gt;不把 API key 写进项目文件。&lt;/li&gt;
&lt;li&gt;只在可信 workspace 里启用高权限操作。&lt;/li&gt;
&lt;li&gt;公司代码先确认数据合规和 provider 政策。&lt;/li&gt;
&lt;li&gt;对自动化结果保留人工 review。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;适合谁用&#34;&gt;适合谁用
&lt;/h2&gt;&lt;p&gt;goose 更适合这些用户：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;想要桌面端和 CLI 都可用的 AI agent。&lt;/li&gt;
&lt;li&gt;希望使用多个模型 provider。&lt;/li&gt;
&lt;li&gt;想通过 MCP 接入更多工具。&lt;/li&gt;
&lt;li&gt;需要把 AI agent 嵌入自动化流程。&lt;/li&gt;
&lt;li&gt;想在代码之外处理研究、写作、数据分析等任务。&lt;/li&gt;
&lt;li&gt;团队希望构建带预配置的内部 agent 分发版。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你的需求只是“在 IDE 里补全代码”，goose 可能显得重。&lt;br&gt;
如果你想要一个可以长期扩展的本机 agent 平台，它的设计会更有吸引力。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;goose 是 AAIF/Linux Foundation 旗下的开源 AI Agent，定位比传统代码助手更广。它提供桌面端、CLI 和 API，支持 15+ provider、ACP 订阅接入和 70+ MCP extensions，适合把 AI 放进本机工作流和团队自动化体系里。&lt;/p&gt;
&lt;p&gt;它的价值不只是“能写代码”，而是把模型、工具、扩展和执行环境放在同一个 agent 框架下。使用时要特别注意权限、凭据和数据边界：先从小任务开始，确认 provider、扩展和执行行为都符合预期，再逐步扩大使用范围。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/aaif-goose/goose&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;goose GitHub 仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://goose-docs.ai/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;goose 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://goose-docs.ai/docs/getting-started/installation&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;goose 安装文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aaif.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Agentic AI Foundation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Claude Code Hooks Mastery：13 个 Hooks 生命周期与自动化控制入门</title>
        <link>https://knightli.com/2026/05/01/claude-code-hooks-mastery-guide/</link>
        <pubDate>Fri, 01 May 2026 03:11:27 +0800</pubDate>
        
        <guid>https://knightli.com/2026/05/01/claude-code-hooks-mastery-guide/</guid>
        <description>&lt;p&gt;&lt;code&gt;claude-code-hooks-mastery&lt;/code&gt; 是一个围绕 &lt;code&gt;Claude Code Hooks&lt;/code&gt; 的学习项目。&lt;/p&gt;
&lt;p&gt;它不是只给几个零散脚本，而是把 Claude Code 的 hooks 生命周期、配置方式、脚本写法和常见自动化场景放在一起讲清楚。对于想让 Claude Code 更可控、更像工程化助手的人来说，这类资料很值得看。&lt;/p&gt;
&lt;p&gt;Claude Code 默认已经能读代码、改文件、跑命令。但如果你想让它在特定时机自动检查权限、拦截危险操作、注入项目规范、运行测试、提醒团队规则，单靠聊天指令就不够稳定。Hooks 的价值就在这里：把“每次都要提醒 AI 的规则”变成可执行的流程。&lt;/p&gt;
&lt;h2 id=&#34;hooks-解决什么问题&#34;&gt;Hooks 解决什么问题
&lt;/h2&gt;&lt;p&gt;使用 Claude Code 一段时间后，常见痛点大概有这些：&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;li&gt;想把团队规范写成固定流程，而不是靠口头提醒&lt;/li&gt;
&lt;li&gt;想在工具调用前后拿到上下文，做记录或拦截&lt;/li&gt;
&lt;li&gt;希望复杂任务可以触发子代理或专门脚本处理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hooks 就是为这些“固定时机的自动动作”准备的。&lt;/p&gt;
&lt;p&gt;你可以把它理解成 Claude Code 工作流里的事件钩子：当会话开始、用户提交提示词、模型准备调用工具、工具调用完成、代理即将结束等节点发生时，Claude Code 可以执行你配置的脚本。&lt;/p&gt;
&lt;h2 id=&#34;13-个-hooks-生命周期&#34;&gt;13 个 Hooks 生命周期
&lt;/h2&gt;&lt;p&gt;项目 README 的重点之一，是系统整理了 Claude Code 的 13 个 hook 事件。&lt;/p&gt;
&lt;p&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;li&gt;任务结束相关：用于总结、清理、通知或保存状态&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这种生命周期设计让你不必把所有规则都写进一个超长提示词里。&lt;/p&gt;
&lt;p&gt;比如，权限控制应该发生在工具调用前；格式化检查更适合发生在文件修改后；项目规范注入适合发生在会话开始或用户输入后。把规则放到正确的 hook 节点，通常比把所有内容塞进 system prompt 更可靠。&lt;/p&gt;
&lt;h2 id=&#34;配置文件在哪里&#34;&gt;配置文件在哪里
&lt;/h2&gt;&lt;p&gt;Claude Code 的 hooks 通常通过设置文件配置。&lt;/p&gt;
&lt;p&gt;常见位置包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户级配置：&lt;code&gt;~/.claude/settings.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;项目级配置：&lt;code&gt;.claude/settings.json&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用户级配置适合放个人偏好，比如通用安全规则、命令拦截、日志路径。&lt;/p&gt;
&lt;p&gt;项目级配置适合放仓库相关规则，比如这个项目必须跑什么测试、哪些目录不能改、生成文件怎么处理、提交前要做哪些检查。&lt;/p&gt;
&lt;p&gt;如果你在团队里使用 Claude Code，更推荐把项目级配置放进仓库。这样每个人打开项目时，拿到的是同一套 AI 协作约束，而不是各自凭记忆提醒。&lt;/p&gt;
&lt;h2 id=&#34;单文件脚本为什么重要&#34;&gt;单文件脚本为什么重要
&lt;/h2&gt;&lt;p&gt;项目里强调了 &lt;code&gt;UV&lt;/code&gt; 单文件脚本的写法。&lt;/p&gt;
&lt;p&gt;这类脚本的好处是部署简单。一个 Python 文件就可以声明依赖并运行，不必为了一个 hook 单独维护复杂环境。对 hooks 来说，这很合适，因为很多 hook 只是做一件小事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;检查命令是否允许执行&lt;/li&gt;
&lt;li&gt;判断文件路径是否安全&lt;/li&gt;
&lt;li&gt;读取项目规范并返回给 Claude&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;Hook 脚本越小，越容易维护，也越不容易变成新的复杂系统。&lt;/p&gt;
&lt;h2 id=&#34;可以做哪些自动化&#34;&gt;可以做哪些自动化
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;claude-code-hooks-mastery&lt;/code&gt; 展示的方向比较多，实际工作中最常见的是下面几类。&lt;/p&gt;
&lt;h3 id=&#34;1-权限和安全控制&#34;&gt;1. 权限和安全控制
&lt;/h3&gt;&lt;p&gt;这是 hooks 最直接的用途。&lt;/p&gt;
&lt;p&gt;比如在 Claude Code 准备执行命令之前，先检查命令内容。如果命令包含删除、重置、清空、覆盖等高风险动作，就阻止执行或要求人工确认。&lt;/p&gt;
&lt;p&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;li&gt;不允许执行未批准的网络命令&lt;/li&gt;
&lt;/ul&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;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;li&gt;目录结构&lt;/li&gt;
&lt;li&gt;禁止事项&lt;/li&gt;
&lt;li&gt;生成文件处理规则&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些内容每次手动告诉 Claude Code 很麻烦，也容易漏。Hooks 可以在会话开始或用户提交提示词后，把必要上下文自动注入进去。&lt;/p&gt;
&lt;p&gt;这相当于给 Claude Code 配一个项目级的工作说明书。它不会替代 README 或开发文档，但能让 AI 在执行任务前更快进入正确状态。&lt;/p&gt;
&lt;h3 id=&#34;3-修改后的验证&#34;&gt;3. 修改后的验证
&lt;/h3&gt;&lt;p&gt;当 Claude Code 修改文件后，可以通过 hook 自动触发检查。&lt;/p&gt;
&lt;p&gt;常见动作包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;运行格式化&lt;/li&gt;
&lt;li&gt;运行 lint&lt;/li&gt;
&lt;li&gt;运行单元测试&lt;/li&gt;
&lt;li&gt;检查类型错误&lt;/li&gt;
&lt;li&gt;扫描生成文件&lt;/li&gt;
&lt;li&gt;校验 Markdown 或 JSON 格式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这对减少低级错误很有帮助。尤其是 AI 改动多个文件时，修改后自动跑一轮轻量验证，可以更早发现问题。&lt;/p&gt;
&lt;p&gt;不过也要注意，hook 里不适合默认塞太重的任务。每次文件改动都跑完整测试套件，可能会让体验变得很慢。更实用的做法是按文件类型、目录和任务风险选择检查范围。&lt;/p&gt;
&lt;h3 id=&#34;4-团队规则验证&#34;&gt;4. 团队规则验证
&lt;/h3&gt;&lt;p&gt;如果团队已经有明确约定，可以把一部分约定放进 hooks。&lt;/p&gt;
&lt;p&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;li&gt;API 变更必须改测试&lt;/li&gt;
&lt;li&gt;某些目录只能用指定工具生成&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这会让 Claude Code 更像团队流程的一部分，而不是一个不受约束的外部助手。&lt;/p&gt;
&lt;p&gt;当然，hooks 不应该替代 CI。它更适合做本地快速提醒和前置拦截，真正的最终验证仍然应该交给 CI、review 和测试系统。&lt;/p&gt;
&lt;h3 id=&#34;5-子代理和专门任务&#34;&gt;5. 子代理和专门任务
&lt;/h3&gt;&lt;p&gt;README 里还提到子代理相关内容。&lt;/p&gt;
&lt;p&gt;这类用法适合把复杂任务拆给更专门的流程处理。比如主会话负责理解需求，hook 或配置触发专门的检查、审计、总结、文档整理任务。&lt;/p&gt;
&lt;p&gt;对个人用户来说，最先值得做的不是复杂代理编排，而是把重复、明确、低风险的动作交给 hooks。等规则稳定后，再考虑更复杂的自动化。&lt;/p&gt;
&lt;h2 id=&#34;statusline-和输出样式&#34;&gt;Statusline 和输出样式
&lt;/h2&gt;&lt;p&gt;项目还覆盖了状态栏和输出样式。&lt;/p&gt;
&lt;p&gt;这部分看起来像体验细节，但对长期使用 Claude Code 很有意义。状态栏可以展示当前上下文、任务状态、环境信息或提示信息；输出样式则可以让 Claude Code 的回答更符合你的工作习惯。&lt;/p&gt;
&lt;p&gt;如果你每天都在同一个终端里和 AI 协作，这些细节会影响效率。好的状态提示能减少误操作，也能让你更快判断当前会话是否处在正确项目、正确分支、正确环境里。&lt;/p&gt;
&lt;h2 id=&#34;不要把-hooks-写得过重&#34;&gt;不要把 hooks 写得过重
&lt;/h2&gt;&lt;p&gt;Hooks 很强，但不适合什么都往里面塞。&lt;/p&gt;
&lt;p&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;li&gt;脚本尽量单一职责&lt;/li&gt;
&lt;li&gt;重型检查交给显式命令或 CI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果一个 hook 每次都执行十几秒，用户很快就会想关掉它。如果一个 hook 拦截规则含糊不清，Claude Code 和用户都会难以理解下一步该怎么做。&lt;/p&gt;
&lt;p&gt;Hooks 最适合处理那些边界清楚的事情：允许或拒绝、补充上下文、记录日志、运行轻量检查、提示下一步。&lt;/p&gt;
&lt;h2 id=&#34;适合怎样的使用者&#34;&gt;适合怎样的使用者
&lt;/h2&gt;&lt;p&gt;如果你只是偶尔让 Claude Code 改一小段代码，可能暂时不需要深入 hooks。&lt;/p&gt;
&lt;p&gt;但如果你符合下面几种情况，就很适合研究这个项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;高频使用 Claude Code&lt;/li&gt;
&lt;li&gt;经常让 AI 修改真实项目代码&lt;/li&gt;
&lt;li&gt;担心 AI 执行危险命令&lt;/li&gt;
&lt;li&gt;想把团队规范自动注入 AI 工作流&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;p&gt;尤其是多人协作项目，hooks 的意义会更明显。它可以把一部分团队经验沉淀成脚本，而不是靠每个人临时提醒 AI。&lt;/p&gt;
&lt;h2 id=&#34;使用时要注意&#34;&gt;使用时要注意
&lt;/h2&gt;&lt;p&gt;第一，先从安全类 hook 开始。&lt;/p&gt;
&lt;p&gt;相比复杂自动化，命令拦截、路径保护、敏感文件检查更容易落地，也更能立刻降低风险。&lt;/p&gt;
&lt;p&gt;第二，项目级规则要谨慎提交。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.claude/settings.json&lt;/code&gt; 会影响所有使用这个仓库的人。把规则提交前，最好确认它不会过度限制正常开发，也不会依赖只有你本机才存在的路径。&lt;/p&gt;
&lt;p&gt;第三，hook 输出要简洁。&lt;/p&gt;
&lt;p&gt;Claude Code 会消费这些输出。输出太长，会污染上下文；输出太模糊，又起不到指导作用。最好只返回必要判断和下一步建议。&lt;/p&gt;
&lt;p&gt;第四，保持可调试。&lt;/p&gt;
&lt;p&gt;Hooks 一旦变多，问题可能出在配置、脚本、权限、路径、依赖或 Claude Code 本身。给脚本留下清晰日志，会让后续排查轻松很多。&lt;/p&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/disler/claude-code-hooks-mastery&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;disler/claude-code-hooks-mastery&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最后一句&#34;&gt;最后一句
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Claude Code Hooks&lt;/code&gt; 的价值，是把“希望 AI 每次都记住的规矩”变成真正会执行的流程。&lt;/p&gt;
&lt;p&gt;如果你已经开始把 Claude Code 用在真实项目里，hooks 会是从“会聊天的编程助手”走向“可约束的工程协作者”的关键一步。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
