返回首页

第六篇:个人 Agent 自建实战:EvoPaw

✏️ @XudongHan · 2026-05-06
📎 查看原文
📎 **来源:** @Xudong07452910 原帖

cover

>

**一句话:** 用 Vibe Coding + 借开源轮子,15 天从零搭出个人 Agent「EvoPaw」的完整方法论——选基座→装 Claude Code→建脚手架→对话逼 spec→每功能配测试。
个人 Agent 自建实战
2026 个人 Agent 自建实战:选基座→装工具→建脚手架→逼 spec→配测试

核心思路

**不要一上来就从零写,也别直接上功能堆很重的框架。** 选代码少、可读性强、核心循环一目了然的项目,才看得懂、改得动、长得久。

**整体五步流程:**

  • 选轻量基座
  • 2. 装 Claude Code + 跑通飞书

    3. 建脚手架文件(CLAUDE.md + docs/)

    4. 用对话把模糊需求逼成具体 spec

    5. 每加功能必须配测试

    上手第一周会有点笨拙,但一旦跑顺,后面每加新功能的速度指数级上升。


    Step 1:选一个轻量好扩展的基础项目

    推荐基座

    项目特点适合
    **Pi-mono**非常干净的 Agent 基础包,极简风格喜欢极简的同学起手
    **Nanobot ✅(最终选)**ultra-lightweight,几千行核心代码跑完整 Agent 循环,自带 memory/skills/multi-provider,内置飞书/Slack/Telegram/Discord扩展性极强,省三个月工程脚手架时间

    判断标准

  • 代码行数 ≤ 8000 行
  • Agent loop 一眼看明白
  • 能比较容易加进飞书或微信
  • 能自由切换不同模型厂商的 API

  • Step 2:用 Claude Code 装上,把飞书也跑通

    快速安装

    Claude Code v2.1.116 界面
    Claude Code — AI 编程助手界面

    把项目地址丢给 Claude Code:

    请fork https://github.com/HKUDS/nanobot 到本地,帮我安装好,要求能正常运行,一步步告诉我需要做什么。
    
    **API Key 安全:** 不要直接在命令行贴出 key。问 Claude Code「这个 Key 应该放在哪个文件、写成什么格式」,它告诉格式后自己手动填。

    配置飞书通道

    飞书开放平台
    飞书开放平台 — 创建企业自建应用

    飞书是主力通道,不需要公网 IP(Nanobot 支持长连接!)。

    **飞书开放平台 4 步:**

  • 创建「企业自建应用」
  • 2. 启用「机器人」能力,申请权限:`im:message`、`im:message.p2p_msg:readonly`、`cardkit:card:write`

    3. 事件订阅选 **长连接模式**——不用公网 IP、不用配 webhook

    4. **点「版本管理与发布」把应用发版**,否则权限不生效(90% 的人卡在这步)

    搞完后跟 Claude Code 说:

    帮我运行Nanobot。
    

    就能在飞书上跟自己的 Agent 聊天了。


    Step 3:先建脚手架文件

    不要一跑通飞书就喊 Claude Code 加功能。先花 **30 分钟建好这套文件**,让 Claude Code 跨会话也能秒进入状态。

    项目结构

    nanobot/
    ├── CLAUDE.md          ← 项目说明书(自动注入)
    ├── docs/
    │   ├── spec.md        ← 需求规格
    │   ├── prompt_plan.md ← 分步执行计划
    │   └── todo.md        ← 跨会话 checklist
    └── tests/             ← 已有(nanobot自带)
    
    项目脚手架5个关键文件
    项目脚手架 — 5 个关键文件让 Claude Code 跨会话也能秒进入状态

    CLAUDE.md(核心)

    相当于 Claude Code 的项目说明书

    相当于 Claude Code 的项目说明书,每次启动自动读。**控制在 200 行以内**(社区共识不超过 300 行),只留推不出来的非显然信息:

  • **WHAT**:项目干嘛的,一句话
  • **WHY**:哪些设计选择不能动
  • **HOW**:build/test/调试入口/已知坑
  • **个人偏好**:用中文回复、commit 前先问、改代码前先读现有文件
  • **测试规则**(最常用):
  • ## 测试规则
    修改任何代码时必须:
    - 同步加或改 tests 下对应的 test_*.py
    - 外部依赖用 MagicMock 替换,不发真请求
    - 至少覆盖正常、空输入、出错三种情况
    - 写完跑 pytest -v,全绿才算完
    
    **不要往 CLAUDE.md 塞的东西:** 格式化规则、代码风格、命名规范。linter 能干的事就别让 Claude 干。"Never send an LLM to do a linter's job."

    docs/ 目录(三件套)

    来自 Harper Reed 定型的「LLM codegen 三件套」:

  • **`docs/spec.md`**:功能需求规格(场景、痛点、期望、优先级、约束)
  • **`docs/prompt_plan.md`**:把 spec 拆成分步可执行的 prompt 序列
  • **`docs/todo.md`**:跨会话粗粒度 checklist
  • 开工第一句永远是:

    读CLAUDE.md和docs/todo.md,告诉我下一步要做什么。
    

    Step 4:用对话把模糊需求逼成具体 spec

    不要自己闷头写需求文档。**让 AI 来逼问你。**

    四小步流程

    **1. 先用一张表列模糊需求**

    需求场景-痛点-功能-优先级表
    用表格把模糊需求逼成具体场景→痛点→期望→优先级
    场景痛点期望优先级
    例:群里有人发 PDF不能直接解析自动提取文字+表格P0

    逼自己用一行字说清楚每个场景的痛点和期望。

    **2. Brainstorm → `docs/spec.md`**

    挑表里优先级最高的,开 Claude Code 切 plan mode:

    我想给nanobot加一个PDF解析能力。先不要写任何代码,用对话方式反复追问我,
    直到把功能边界、输入输出格式、错误处理、性能上限、是否持久化到记忆、
    跟现有skill的边界都问清楚,最后写到docs/spec.md。
    

    模型五分钟就能抛出你拍脑袋想半天也想不全的问题。

    **3. Plan → `docs/prompt_plan.md` + `docs/todo.md`**

    读docs/spec.md,拆成5-10个可独立实现、可独立测试的小步骤,
    每一步配一段prompt,写到docs/prompt_plan.md,同时维护docs/todo.md。
    

    **4. 把需求映射到架构层**

    需求类型落点
    需要强隐私强化本地记忆模块
    需要多模型完善 Provider 层
    需要稳定性加测试和定时任务
    需要新能力写 SKILL.md 或 MCP server ✅ **最常见**
    只是规则约束改 CLAUDE.md,**不用写代码**
    最后这条最容易被忽视。很多需求加几行 markdown 规则就够了。能用 markdown 配置解决的绝不写代码,能写 skill/MCP server 解决的绝不改框架核心。

    Step 5:每加一个功能,必须配一组测试

    测试=你敢换的胆量
    测试 ≠ 防 bug,测试 = 你敢换的胆量

    写完跑通就走人?两周后换模型改 provider,整个功能静默挂掉都没人知道。

    **标准 prompt:**

    我刚加的功能帮我写一组测试,要求:
    1. 凡是要真连网络或调用外部接口的,用假数据顶替
    2. 至少跑三种情况:正常使用、没有数据、出错
    3. 风格参照项目里已有的测试文件
    4. 写完直接 pytest -v 跑一遍,全绿才算完
    
    **测试真正的价值不是防 bug**,而是给你换模型、改底层、做大重构的胆量。没测试,你的 Agent 就长不大。

    进阶:从别的项目「偷」好设计

    看到别人成熟项目(Hermes Agent / OpenClaw)的好设计,**别整套搬**。按三层判断:

    层级做法例子
    **思想级**重写不拷贝OpenHands 的 event-stream 设计
    **模块级**独立抄一个模块Hermes 的 Curator(自动重构 skill)、execute_code tool(多步压成一步)、SOUL.md(性格档案)
    **文件级**原样复用`.claude/skills/skill-creator/` 的 SKILL.md 文件直接塞进 `skills/` 就能跑
    看到好设计先问自己「这到底是思想、模块、还是文件哪一层」,再决定怎么搬。

    进阶玩法:Codex 给 Claude Code 当 Reviewer

    配置 3 步

  • 装好 Codex CLI 并登录
  • 2. 注册成 MCP server:`claude mcp add codex -- codex mcp`

    3. 重启会话

    使用

    用codex review一下docs/spec.md和docs/prompt_plan.md,
    重点看需求歧义、边界情况、跟nanobot现有架构的冲突。
    

    两套不同训练分布的模型互相挑刺,免费 QA。


    踩坑要点

  • **API Key 不要直接贴命令行**,问格式手动填
  • **飞书必须发版**才能生效,90% 人卡在这
  • **CLAUDE.md 不要超 300 行**,太多挤占上下文
  • **spec 写不清楚**,后面每一轮都在误解上空转
  • **测试第一周觉得麻烦**,两周后才知道真正的杠杆在哪
  • **别整套依赖搬过来**(70 多个包冲突修一晚),按层级判断怎么搬

  • 这个工作流适合谁

  • ✅ **想自己搭个人 Agent 但不知从哪开始的人** — 看完就去 fork Nanobot
  • ✅ **想摆脱被框架牵着的** — 用现成框架永远是用户,自己搭才能成主人
  • ✅ **需要飞书深度集成的** — 长连接方案省去公网 IP
  • ✅ **做学术场景/数据长期主权的** — 强化本地记忆模块
  • **核心心法:** 碰见问题→理解问题→用 AI Coding 解决问题,这条路基本一定能走通。重点不是你立刻就懂,而是你愿不愿意把它拆成看得懂的部分。


    🥳 **原文作者:** Xudong Han @Xudong07452910

    >

    📅 发布时间:2026-05-06

    >

    🔗 EvoPaw 项目:https://github.com/hxdflying/EvoPaw
    📎 **出典:** @Xudong07452910 元ポスト

    cover

    >

    **一言でいうと:** Vibe Coding + オープンソースの車輪の活用で、15日でゼロから個人エージェント「EvoPaw」を構築する完全な方法論——基盤選定→Claude Codeインストール→スキャフォールド構築→対話でspecを詰める→機能ごとにテストを実装。

    核心となる考え方

    **いきなりゼロから書こうとしないでください。また、いきなり重いフレームワークに機能を詰め込もうとしないでください。** コードが少なく、可読性が高く、コアループが一目でわかるプロジェクトを選ぶことで、理解でき、修正でき、長く育てられるものになります。

    **全体の5ステップフロー:**

  • 軽量な基盤を選ぶ
  • 2. Claude Codeをインストール + 飛書(Feishu)を通す

    3. スキャフォールドファイルを構築する(CLAUDE.md + docs/)

    4. 対話で曖昧な要件を具体のspecに落とし込む

    5. 機能追加ごとにテストを実装する

    最初の1週間は少しぎこちないですが、一度軌道に乗れば、新しい機能を追加するスピードは指数関数的に向上します。


    Step 1:軽量で拡張しやすいベースプロジェクトを選ぶ

    推奨ベース

    プロジェクト特徴向いている人
    **Pi-mono**非常にクリーンなAgent基本パッケージ、ミニマル設計ミニマル志向の方の入門に
    **Nanobot ✅(最終選定)**ultra-lightweight、数千行のコアコードで完全なAgentループを実行、memory/skills/multi-providerを内蔵、飛書/Slack/Telegram/Discord対応拡張性が非常に高く、3ヶ月分のエンジニアリングスキャフォールド作業を削減

    判断基準

  • コード行数 ≤ 8000行
  • Agentループが一目で理解できる
  • 飛書やWeChatに比較的簡単に組み込める
  • 異なるモデルベンダーのAPIを自由に切り替えられる

  • Step 2:Claude Codeでインストールし、飛書も通す

    クイックインストール

    プロジェクトのアドレスをClaude Codeに渡します:

    リポジトリ https://github.com/HKUDS/nanobot をローカルにforkして、インストールしてください。正常に動作するように段階的に教えてください。
    
    **API Keyのセキュリティ:** コマンドラインに直接Keyを貼り付けないでください。Claude Codeに「このKeyはどのファイルに、どのような形式で書けばいいですか?」と聞いて、指示された形式で手動で記入してください。

    飛書チャネルの設定

    飛書がメインチャネルです。パブリックIPは不要です(Nanobotは長連接続に対応しています!)。

    **飛書開放プラットフォームの4ステップ:**

  • 「企業自建應用(企業内製アプリ)」を作成する
  • 2. 「ロボット」機能を有効にし、権限を申請:`im:message`、`im:message.p2p_msg:readonly`、`cardkit:card:write`

    3. イベント購読は**長連接続モード**を選択——パブリックIP不要、webhookの設定不要

    4. **「バージョン管理とリリース」からアプリをリリースする**、そうしないと権限が有効になりません(90%の人がここで詰まります)

    完了したらClaude Codeに伝えます:

    Nanobotを起動してください。
    

    飛書で自分のAgentと会話できるようになります。


    Step 3:先にスキャフォールドファイルを構築する

    飛書が通ったからといって、すぐにClaude Codeに機能追加を依頼しないでください。まず **30分かけてこのファイル群を構築**し、Claude Codeがセッションをまたいですぐに状態に入れるようにしましょう。

    プロジェクト構造

    nanobot/
    ├── CLAUDE.md          ← プロジェクト説明書(自動注入)
    ├── docs/
    │   ├── spec.md        ← 要件仕様
    │   ├── prompt_plan.md ← 分割実行計画
    │   └── todo.md        ← セッション間のchecklist
    └── tests/             ← 已有(nanobot自带)
    
    项目脚手架5个关键文件
    项目脚手架 — 5 个关键文件让 Claude Code 跨会话也能秒进入状态

    CLAUDE.md(核心)

    相当于 Claude Code 的项目说明书

    Claude Codeのプロジェクト説明書であり、起動時に自動で読み込まれます。**200行以内**に収め(コミュニティの合意として300行を超えない)、推論で導き出せない非自明な情報だけを残します:

  • **WHAT**:プロジェクトの目的を一言で
  • **WHY**:変更してはいけない設計上の選択
  • **HOW**:build/test/デバッグの入口/既知のハマりポイント
  • **個人の好み**:日本語での返答、commit前に確認、コード修正前に既存ファイルを読む
  • **テストルール**(最もよく使う):
  • ## テストルール
    コードを修正する際は必ず:
    - 対応する tests 配下の test_*.py を追加または更新する
    - 外部依存は MagicMock で置き換え、実際のリクエストは送らない
    - 少なくとも正常系、空入力、エラー系の3ケースをカバーする
    - 完了後 pytest -v を実行し、すべてパスしてから完了とする
    
    **CLAUDE.mdに入れるべきでないもの:** フォーマットルール、コードスタイル、命名規則。linterにできることはClaudeにやらせないでください。"Never send an LLM to do a linter's job."

    docs/ ディレクトリ(三種の神器)

    Harper Reedが確立した「LLM codegen 三種の神器」:

  • **`docs/spec.md`**:機能要件仕様(シナリオ、課題、期待、優先順位、制約)
  • **`docs/prompt_plan.md`**:specを分割可能な実行可能なprompt列に分解
  • **`docs/todo.md`**:セッション間の粗粒度checklist
  • 作業開始の最初の一言は常に:

    CLAUDE.mdとdocs/todo.mdを読んで、次に何をすべきか教えてください。
    

    Step 4:対話で曖昧な要件を具体のspecに落とし込む

    自分で要件文書を黙々と書かないでください。**AIに問い詰めさせましょう。**

    4つの小さなステップ

    **1. まず表で曖昧な要件をリストアップする**

    シナリオ課題期待優先度
    例:グループで誰かがPDFを送信直接解析できないテキスト+表を自動抽出P0

    各行で各シナリオの課題と期待を一言で明確にします。

    **2. Brainstorm → `docs/spec.md`**

    表の中で最も優先度の高いものを選び、Claude Codeをplan modeで起動します:

    nanobotにPDF解析機能を追加したいと考えています。まずコードは一切書かずに、対話形式で質問を重ねて、
    機能の境界、入出力形式、エラーハンドリング、パフォーマンス上限、メモリへの永続化の有無、
    既存のskillとの境界まで明確にした上で、docs/spec.mdに書き出してください。
    

    モデルは5分であなたが頭を悩ませて考えても出てこないような質問を次々と投げかけてきます。

    **3. Plan → `docs/prompt_plan.md` + `docs/todo.md`**

    docs/spec.mdを読んで、5〜10個の独立して実装・テスト可能な小さなステップに分割し、
    各ステップにpromptを付けてdocs/prompt_plan.mdに書き、同時にdocs/todo.mdも更新してください。
    

    **4. 要件をアーキテクチャ層にマッピングする**

    要件タイプ対応箇所
    強固なプライバシーが必要ローカルメモリモジュールを強化
    マルチモデルが必要Provider層を拡充
    安定性が必要テストと定期タスクを追加
    新しい能力が必要SKILL.mdまたはMCP serverを作成 ✅ **最も一般的**
    単なるルールの制約CLAUDE.mdを修正、**コードは書かない**
    最後のポイントが最も見落とされがちです。多くの要件は数行のmarkdownルールで十分です。markdownの設定で解決できるものには絶対にコードを書かず、skill/MCP serverで解決できるものにはフレームワークのコアを絶対に修正しないでください。

    Step 5:機能を追加するたびに、必ずテストをセットで実装する

    書いて動いたら終わり?2週間後にモデルを変更してproviderを変えたら、機能が黙って壊れていても誰も気づきません。

    **標準prompt:**

    今追加した機能に対してテストを書いてください。要件:
    1. 実際にネットワーク接続や外部APIを呼び出す必要があるものは、すべてダミーデータで代用する
    2. 少なくとも3ケース実行する:正常使用、データなし、エラー発生
    3. スタイルはプロジェクト内の既存のテストファイルに準拠する
    4. 書き終えたら直接 pytest -v を実行し、すべてパスしてから完了とする
    
    **テストの本当の価値はバグ防止ではなく**、モデルを変更したり、基盤を書き換えたり、大規模なリファクタリングを行う勇気を与えてくれることです。テストがなければ、あなたのAgentは成長しません。

    応用:他のプロジェクトから良い設計を「盗む」

    他の成熟したプロジェクト(Hermes Agent / OpenClaw)の良い設計を見つけたら、**全部を丸ごとコピーしないでください**。3つの階層で判断します:

    階層方法
    **思想レベル**書き直してコピーしないOpenHandsのevent-stream設計
    **モジュールレベル**モジュール単位で独立して移植HermesのCurator(自動リファクタリングskill)、execute_code tool(複数ステップを1つに圧縮)、SOUL.md(性格プロファイル)
    **ファイルレベル**そのまま再利用`.claude/skills/skill-creator/` のSKILL.mdファイルをそのまま `skills/` に入れれば動作
    良い設計を見つけたら、まず「これは思想レベルか、モジュールレベルか、ファイルレベルか」を自問し、それからどう移植するかを決めてください。

    応用:CodexにClaude CodeのReviewerをさせる

    設定3ステップ

  • Codex CLIをインストールしてログインする
  • 2. MCP serverとして登録:`claude mcp add codex -- codex mcp`

    3. セッションを再起動する

    使い方

    codexを使ってdocs/spec.mdとdocs/prompt_plan.mdをレビューしてください。
    要件の曖昧さ、境界ケース、nanobotの既存アーキテクチャとの競合を重点的に確認してください。
    

    異なる訓練分布を持つ2種類のモデルが互いに批判し合う、無料のQAです。


    ハマりポイント

  • **API Keyはコマンドラインに直接貼らない**、形式を聞いて手動で記入
  • **飛書は必ずリリースしないと**有効にならない、90%の人がここで詰まる
  • **CLAUDE.mdは300行を超えない**、多すぎるとコンテキストを圧迫
  • **specが不明確だと**、以降のすべての作業が誤解の上で空転する
  • **テストは最初の1週間は面倒だが**、2週間後に真のレバレッジポイントが分かる
  • **依存関係を丸ごとコピーしない**(70以上のパッケージの競合修正で一晩潰れる)、階層に応じてどう移植するか判断する

  • このワークフローに向いている人

  • ✅ **自分で個人Agentを構築したいが、どこから始めればいいか分からない人** — 読んだらすぐにNanobotをfork
  • ✅ **フレームワークに縛られたくない人** — 既存のフレームワークを使い続ける限りユーザーのままで、自分で構築してこそ主人になれる
  • ✅ **飛書との深い連携が必要な人** — 長連接続方式でパブリックIPが不要
  • ✅ **学術シナリオやデータの長期的な主権が必要な人** — ローカルメモリモジュールを強化
  • **核心の心構え:** 問題に直面する→問題を理解する→AI Codingで問題を解決する、この道筋は基本的に必ず通じます。重要なのはあなたがすぐにすべてを理解することではなく、理解可能な部分に分解しようとする意志です。


    🥳 **原文著者:** Xudong Han @Xudong07452910

    >

    📅 公開日:2026-05-06

    >

    🔗 EvoPaw プロジェクト:https://github.com/hxdflying/EvoPaw