Committed by
GitHub
chore: 精简 CLAUDE.md,遵循官方最佳实践 (#17)
- 从 153 行精简到 72 行 - 删除逐文件项目结构树(Claude 可自行读取) - 删除标准 Python 命名约定和 PEP 8(默认已知) - 删除技术栈列表(可从 pyproject.toml 推断) - 删除已移除的 PROMPT.md 引用 - 新增 Git 工作流规范(禁止直接推送 main) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Showing
1 changed file
with
17 additions
and
93 deletions
| 1 | # xiaohongshu-skills | 1 | # xiaohongshu-skills |
| 2 | 2 | ||
| 3 | 小红书自动化 Claude Code Skills,基于 Python CDP 浏览器自动化引擎。 | 3 | 小红书自动化 Claude Code Skills,基于 Python CDP 浏览器自动化引擎。 |
| 4 | -为 OpenClaw 生态提供小红书操作能力,同时支持 Claude Code skills 格式。 | ||
| 5 | 4 | ||
| 6 | -## 项目结构 | 5 | +## Git 工作流 |
| 7 | 6 | ||
| 8 | -``` | ||
| 9 | -xiaohongshu-skills/ | ||
| 10 | -├── scripts/ # Python CDP 自动化引擎 | ||
| 11 | -│ ├── xhs/ # 核心 XHS 自动化包 | ||
| 12 | -│ │ ├── __init__.py | ||
| 13 | -│ │ ├── cdp.py # CDP WebSocket 客户端(Browser, Page, Element) | ||
| 14 | -│ │ ├── stealth.py # 反检测 JS 注入 + Chrome 启动参数 | ||
| 15 | -│ │ ├── cookies.py # Cookie 文件持久化 | ||
| 16 | -│ │ ├── types.py # 数据类型(dataclass) | ||
| 17 | -│ │ ├── errors.py # 异常体系 | ||
| 18 | -│ │ ├── selectors.py # CSS 选择器常量 | ||
| 19 | -│ │ ├── urls.py # URL 常量和构建函数 | ||
| 20 | -│ │ ├── human.py # 人类行为模拟(延迟、滚动) | ||
| 21 | -│ │ ├── login.py # 登录检查、二维码登录 | ||
| 22 | -│ │ ├── feeds.py # 首页 Feed 列表 | ||
| 23 | -│ │ ├── search.py # 搜索 + 筛选 | ||
| 24 | -│ │ ├── feed_detail.py # 笔记详情 + 评论加载 | ||
| 25 | -│ │ ├── user_profile.py # 用户主页 | ||
| 26 | -│ │ ├── comment.py # 评论、回复 | ||
| 27 | -│ │ ├── like_favorite.py # 点赞、收藏 | ||
| 28 | -│ │ ├── publish.py # 图文发布(fill + click 分步支持) | ||
| 29 | -│ │ ├── publish_video.py # 视频发布(fill + click 分步支持) | ||
| 30 | -│ │ └── publish_long_article.py # 长文发布(模板选择 + 排版) | ||
| 31 | -│ ├── cli.py # 统一 CLI 入口(19 个子命令) | ||
| 32 | -│ ├── chrome_launcher.py # Chrome 进程管理(含 restart 降级) | ||
| 33 | -│ ├── account_manager.py # 多账号管理 | ||
| 34 | -│ ├── image_downloader.py # 媒体下载(SHA256 缓存) | ||
| 35 | -│ ├── title_utils.py # UTF-16 标题长度计算 | ||
| 36 | -│ ├── run_lock.py # 单实例锁 | ||
| 37 | -│ └── publish_pipeline.py # 发布编排器 | ||
| 38 | -├── skills/ # Claude Code Skills 定义 | ||
| 39 | -│ ├── xhs-auth/SKILL.md # 认证管理 | ||
| 40 | -│ ├── xhs-publish/SKILL.md # 内容发布(图文+视频) | ||
| 41 | -│ ├── xhs-explore/SKILL.md # 内容发现与分析 | ||
| 42 | -│ ├── xhs-interact/SKILL.md # 社交互动(评论/点赞/收藏) | ||
| 43 | -│ └── xhs-content-ops/SKILL.md # 复合内容运营工作流 | ||
| 44 | -├── pyproject.toml # uv 项目配置 | ||
| 45 | -├── SKILL.md # 统一入口(路由到子技能) | ||
| 46 | -├── CLAUDE.md # 本文件 | ||
| 47 | -├── PROMPT.md # Ralph Loop 驱动文件 | ||
| 48 | -└── README.md | ||
| 49 | -``` | ||
| 50 | - | ||
| 51 | -## 技术栈 | ||
| 52 | - | ||
| 53 | -- **Python**: >=3.11 | ||
| 54 | -- **包管理**: uv | ||
| 55 | -- **依赖**: requests + websockets(直接 CDP WebSocket 通信) | ||
| 56 | -- **浏览器**: Chrome(通过 CDP 远程调试协议控制) | ||
| 57 | -- **代码规范**: ruff(lint + format) | ||
| 58 | -- **数据提取**: `window.__INITIAL_STATE__`(与 Go 源码一致) | 7 | +- 所有代码修改必须在分支上进行,禁止直接推送 main 分支 |
| 8 | +- 分支开发完成后通过 PR 合入 main | ||
| 59 | 9 | ||
| 60 | ## 开发命令 | 10 | ## 开发命令 |
| 61 | 11 | ||
| @@ -66,73 +16,47 @@ uv run ruff format . # 代码格式化 | @@ -66,73 +16,47 @@ uv run ruff format . # 代码格式化 | ||
| 66 | uv run pytest # 运行测试 | 16 | uv run pytest # 运行测试 |
| 67 | ``` | 17 | ``` |
| 68 | 18 | ||
| 69 | -## 架构设计 | ||
| 70 | - | ||
| 71 | -### 双层结构 | 19 | +## 架构 |
| 72 | 20 | ||
| 73 | -1. **scripts/ — Python CDP 引擎** | ||
| 74 | - - 基于 xiaohongshu-mcp Go 源码从零重写 | ||
| 75 | - - `xhs/` 包:模块化的核心自动化库 | ||
| 76 | - - `cli.py`:统一 CLI 入口,19 个子命令(13 个 MCP + 6 个增强) | ||
| 77 | - - JSON 结构化输出,便于 agent 解析 | ||
| 78 | - - 多账号支持,独立 Chrome Profile 隔离 | ||
| 79 | - - 反检测保护(stealth flags + JS 注入) | 21 | +双层结构:`scripts/` 是 Python CDP 自动化引擎,`skills/` 是 Claude Code Skills 定义(SKILL.md 格式)。 |
| 80 | 22 | ||
| 81 | -2. **skills/ — Claude Code Skills 定义** | ||
| 82 | - - SKILL.md 格式,指导 Claude 如何调用 scripts/ | ||
| 83 | - - 包含输入判断、约束规则、工作流程、失败处理 | 23 | +- `scripts/xhs/` — 核心自动化库(模块化,每个功能一个文件) |
| 24 | +- `scripts/cli.py` — 统一 CLI 入口,19 个子命令,JSON 结构化输出 | ||
| 25 | +- `scripts/publish_pipeline.py` — 发布编排器(含图片下载和登录检查) | ||
| 26 | +- `skills/*/SKILL.md` — 指导 Claude 如何调用 scripts/ | ||
| 84 | 27 | ||
| 85 | ### 调用方式 | 28 | ### 调用方式 |
| 86 | 29 | ||
| 87 | ```bash | 30 | ```bash |
| 88 | -# 统一 CLI 入口 | ||
| 89 | python scripts/cli.py check-login | 31 | python scripts/cli.py check-login |
| 90 | python scripts/cli.py search-feeds --keyword "关键词" | 32 | python scripts/cli.py search-feeds --keyword "关键词" |
| 91 | python scripts/cli.py publish --title-file t.txt --content-file c.txt --images pic.jpg | 33 | python scripts/cli.py publish --title-file t.txt --content-file c.txt --images pic.jpg |
| 92 | - | ||
| 93 | -# 发布流水线(含图片下载和登录检查) | ||
| 94 | python scripts/publish_pipeline.py --title-file t.txt --content-file c.txt --images URL1 | 34 | python scripts/publish_pipeline.py --title-file t.txt --content-file c.txt --images URL1 |
| 95 | ``` | 35 | ``` |
| 96 | 36 | ||
| 97 | ## 代码规范 | 37 | ## 代码规范 |
| 98 | 38 | ||
| 99 | -### Python 风格 | ||
| 100 | -- 遵循 PEP 8,使用 ruff 强制执行 | ||
| 101 | -- 完整的 type hints(PEP 484),使用 `str | None` 语法 | ||
| 102 | -- 公共函数和类必须有 docstring | ||
| 103 | - 行长度上限 100 字符 | 39 | - 行长度上限 100 字符 |
| 104 | -- 使用 `from __future__ import annotations` 启用延迟注解 | ||
| 105 | - | ||
| 106 | -### 命名约定 | ||
| 107 | -- 文件名:snake_case | ||
| 108 | -- 类名:PascalCase | ||
| 109 | -- 函数/变量:snake_case | ||
| 110 | -- 常量:UPPER_SNAKE_CASE | ||
| 111 | - | ||
| 112 | -### 错误处理 | ||
| 113 | -- 自定义异常类继承自 `XHSError` 基类(`xhs/errors.py`) | ||
| 114 | -- CLI 命令使用结构化 exit code:0=成功,1=未登录,2=错误 | ||
| 115 | -- 所有用户可见的错误信息使用中文 | 40 | +- 完整 type hints,使用 `from __future__ import annotations` |
| 41 | +- 异常继承 `XHSError`(`xhs/errors.py`) | ||
| 42 | +- CLI exit code:0=成功,1=未登录,2=错误 | ||
| 43 | +- 用户可见错误信息使用中文 | ||
| 44 | +- JSON 输出 `ensure_ascii=False` | ||
| 116 | 45 | ||
| 117 | ### 安全约束 | 46 | ### 安全约束 |
| 47 | + | ||
| 118 | - 发布类操作必须有用户确认机制 | 48 | - 发布类操作必须有用户确认机制 |
| 119 | - 文件路径必须使用绝对路径 | 49 | - 文件路径必须使用绝对路径 |
| 120 | -- 不在命令行参数中内联敏感内容(使用文件传递) | 50 | +- 敏感内容通过文件传递,不内联到命令行参数 |
| 121 | - Chrome Profile 目录隔离账号 cookies | 51 | - Chrome Profile 目录隔离账号 cookies |
| 122 | 52 | ||
| 123 | -## 参考资源 | ||
| 124 | - | ||
| 125 | -- **xiaohongshu-mcp Go 源码**: /Users/zy/src/zy/xiaohongshu-mcp/ | ||
| 126 | - | ||
| 127 | ## CLI 子命令对照表 | 53 | ## CLI 子命令对照表 |
| 128 | 54 | ||
| 129 | -scripts/cli.py 的 19 个子命令: | ||
| 130 | - | ||
| 131 | | CLI 子命令 | 对应 MCP 工具 | 分类 | | 55 | | CLI 子命令 | 对应 MCP 工具 | 分类 | |
| 132 | |--|--|--| | 56 | |--|--|--| |
| 133 | | `check-login` | check_login_status | 认证 | | 57 | | `check-login` | check_login_status | 认证 | |
| 134 | | `login` | get_login_qrcode | 认证 | | 58 | | `login` | get_login_qrcode | 认证 | |
| 135 | -| `phone-login` | — | 认证(手机号+验证码,无界面服务器适用) | | 59 | +| `phone-login` | — | 认证 | |
| 136 | | `delete-cookies` | delete_cookies | 认证 | | 60 | | `delete-cookies` | delete_cookies | 认证 | |
| 137 | | `list-feeds` | list_feeds | 浏览 | | 61 | | `list-feeds` | list_feeds | 浏览 | |
| 138 | | `search-feeds` | search_feeds | 浏览 | | 62 | | `search-feeds` | search_feeds | 浏览 | |
-
Please register or login to post a comment