[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-907":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},907,"wx-cli","jackwener\u002Fwx-cli","jackwener","WeChat local data CLI with daemon architecture",null,"Rust",3432,1346,14,37,0,126,290,716,378,111.39,"Apache License 2.0",false,"main",[],"2026-06-12 04:00:06","\u003Cdiv align=\"center\">\n\n# wx-cli\n\n**从命令行查询本地微信数据**\n\n[![License: Apache-2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache%202.0-blue.svg)](LICENSE)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey.svg)](#安装)\n[![Rust](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fbuilt%20with-Rust-orange.svg)](https:\u002F\u002Fwww.rust-lang.org)\n\n会话 · 聊天记录 · 搜索 · 联系人 · 群成员 · 收藏 · 统计 · 导出\n\n\u003C\u002Fdiv>\n\n---\n\n## AI Agent Skill\n\n通过 [skills CLI](https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills) 一键安装到 Claude Code、Cursor、Codex 等 agent：\n\n```bash\nnpx skills add jackwener\u002Fwx-cli\n```\n\n或全局安装：\n\n```bash\nnpx skills add jackwener\u002Fwx-cli -g\n```\n\n安装后 agent 会自动读取 `SKILL.md`，了解如何安装和调用 wx-cli。\n\n---\n\n## 特性\n\n- **零依赖安装** — 单一 Rust 二进制，一行命令装完\n- **毫秒级响应** — 后台 daemon 持久缓存解密数据库，mtime 不变则复用\n- **AI 友好** — 默认 YAML 输出，更省 token & 易读；`--json` 可切换为 JSON（方便 `jq` 处理等）\n- **完全本地** — 数据不出本机，实时解密，无需全量预解密\n\n---\n\n## 安装\n\n**npm（推荐，全平台）**\n\n```bash\nnpm install -g @jackwener\u002Fwx-cli\n```\n\n**macOS \u002F Linux（curl）**\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fjackwener\u002Fwx-cli\u002Fmain\u002Finstall.sh | bash\n```\n\n**Windows**（PowerShell，以管理员身份运行）\n\n```powershell\nirm https:\u002F\u002Fraw.githubusercontent.com\u002Fjackwener\u002Fwx-cli\u002Fmain\u002Finstall.ps1 | iex\n```\n\n\u003Cdetails>\n\u003Csummary>其他安装方式\u003C\u002Fsummary>\n\n**手动下载**\n\n从 [Releases](https:\u002F\u002Fgithub.com\u002Fjackwener\u002Fwx-cli\u002Freleases) 下载对应平台文件：\n\n| 平台 | 文件 |\n|------|------|\n| macOS Apple Silicon | `wx-macos-arm64` |\n| macOS Intel | `wx-macos-x86_64` |\n| Linux x86_64 | `wx-linux-x86_64` |\n| Linux arm64 | `wx-linux-arm64` |\n| Windows x86_64 | `wx-windows-x86_64.exe` |\n\nmacOS \u002F Linux：`chmod +x wx && sudo mv wx \u002Fusr\u002Flocal\u002Fbin\u002F`\n\n**从源码构建**\n\n```bash\ngit clone git@github.com:jackwener\u002Fwx-cli.git && cd wx-cli\ncargo build --release\n# 产物：target\u002Frelease\u002Fwx（Windows: wx.exe）\n```\n\n\u003C\u002Fdetails>\n\n---\n\n## 快速开始\n\n保持微信运行，然后初始化（只需一次）：\n\n**macOS**（需要先对微信做 ad-hoc 签名，才能扫描其内存）\n\n```bash\n# 1. 签名（只需做一次，WeChat 更新后重做）\ncodesign --force --deep --sign - \u002FApplications\u002FWeChat.app\n\n# 2. 重启微信，等待完全登录\nkillall WeChat && open \u002FApplications\u002FWeChat.app\n\n# 3. 初始化\nsudo wx init\n```\n\n> 如果 `codesign` 报 `signature in use`，先执行：\n> ```bash\n> codesign --remove-signature \"\u002FApplications\u002FWeChat.app\u002FContents\u002FFrameworks\u002Fvlc_plugins\u002Flibrtp_mpeg4_plugin.dylib\"\n> codesign --force --deep --sign - \u002FApplications\u002FWeChat.app\n> ```\n\n**Linux**\n\n```bash\nsudo wx init\n```\n\n**Windows**（以管理员身份运行 PowerShell）\n\n```powershell\nwx init\n```\n\n验证安装：\n\n```bash\nwx sessions\n```\n\n能看到最近会话即表示一切正常。daemon 在首次调用时自动启动。\n\n---\n\n## 命令\n\n### 消息\n\n```bash\nwx sessions                                      # 最近 20 个会话\nwx unread                                        # 有未读消息的会话\nwx unread --filter private,group                 # 只看真人未读（过滤公众号\u002F折叠入口）\nwx new-messages                                  # 上次检查后的新消息（增量）\nwx history \"张三\"                                # 最近 50 条记录\nwx history \"张三\" -n 2000                        # 拉更多历史消息\nwx history \"AI群\" --since 2026-04-01 --until 2026-04-15\nwx search \"关键词\"                               # 全库搜索\nwx search \"关键词\" -n 500                        # 放宽搜索结果条数\nwx search \"会议\" --in \"工作群\" --since 2026-01-01\n```\n\n`history` \u002F `search` \u002F `export` 都支持 `-n` \u002F `--limit` 指定条数。默认值只是为了避免一次性输出过多消息，不是硬上限。\n\n会话\u002F消息输出里都带 `chat_type` 字段，取值为 `private` \u002F `group` \u002F `official_account` \u002F `folded`。`official_account` 涵盖公众号、订阅号、服务号及 `mphelper` \u002F `qqsafe` 等系统通知；`folded` 对应微信里的\"订阅号折叠\"和\"折叠群聊\"两个聚合入口。\n\n### 朋友圈（SNS）\n\n三个独立命令，区分\"通知\"和\"帖子\"：\n\n```bash\nwx sns-notifications                             # 点赞\u002F评论通知（默认仅未读）\nwx sns-notifications --include-read -n 100       # 含已读\n\nwx sns-feed                                      # 近 20 条朋友圈（时间线）\nwx sns-feed --user \"张三\"                        # 限定作者\nwx sns-feed --since 2026-04-01 -n 100            # 按时间\n\nwx sns-search \"关键词\"                           # 全文搜索朋友圈正文\nwx sns-search \"婚礼\" --user \"李四\" --since 2023-01-01\n```\n\n- **sns-notifications** 返回互动通知：`type`（`like`\u002F`comment`）、`from_nickname`、`content`（评论正文）、`feed_preview` + `feed_author`（对应原帖）\n- **sns-feed** \u002F **sns-search** 返回朋友圈帖子：`author`、`content`（正文）、`media`、`media_count`、`location`、`timestamp`；`media` 字段含每张图的 url\u002Fthumb\u002Fkey\u002Ftoken\u002Fmd5\u002Fenc_idx\u002Fsize，供下游做图片代理或离线渲染。`media_count = media.len()`，按 DOM 解析的合法 `\u003Cmedia>` 子节点计数（malformed XML 返回 0）\n\n朋友圈数据只覆盖你本地刷到过的帖子（微信 app 按需下载）。\n\n### 联系人 & 群组\n\n```bash\nwx contacts                  # 联系人列表\nwx contacts --query \"李\"     # 按名字搜索\nwx members \"AI交流群\"        # 群成员列表\n```\n\n### 收藏 & 统计\n\n```bash\nwx favorites                          # 全部收藏\nwx favorites --type image             # 按类型筛选（text\u002Fimage\u002Farticle\u002Fcard\u002Fvideo）\nwx favorites --query \"关键词\"         # 搜索收藏内容\nwx stats \"AI群\"                       # 聊天统计\nwx stats \"AI群\" --since 2026-01-01   # 指定时间范围\n```\n\n### 导出\n\n```bash\nwx export \"张三\" --format markdown -o chat.md\nwx export \"张三\" -n 2000 --format markdown -o chat.md\nwx export \"AI群\" --since 2026-01-01 --format json\n```\n\n### 输出格式\n\n默认输出 YAML，更省 token & 易读；`--json` 可切换为 JSON（方便 `jq` 处理等）：\n\n```bash\nwx sessions --json\nwx search \"关键词\" --json | jq '.[0].content'\nwx new-messages --json\n```\n\n### Daemon 管理\n\n```bash\nwx daemon status\nwx daemon stop\nwx daemon logs --follow\n```\n\n---\n\n## 架构\n\n```\nwx (CLI) ──Unix socket──▶ wx-daemon (后台进程)\n                              │\n                    ┌─────────┴──────────┐\n               DBCache               联系人缓存\n           (mtime 感知复用)\n```\n\ndaemon 首次解密后将数据库和 mtime 持久化到 `~\u002F.wx-cli\u002Fcache\u002F`。重启后 mtime 未变则直接复用，无需重解密。\n\n```\n~\u002F.wx-cli\u002F\n├── config.json       # 配置\n├── all_keys.json     # 数据库密钥\n├── daemon.sock       # Unix socket\n├── daemon.pid \u002F .log\n└── cache\u002F\n    ├── _mtimes.json  # mtime 索引\n    └── *.db          # 解密后的数据库\n```\n\n---\n\n## 原理\n\n微信 4.x 使用 SQLCipher 4 加密本地数据库（AES-256-CBC + HMAC-SHA512，PBKDF2 256,000 次迭代）。WCDB 在进程内存中缓存派生后的 raw key，格式为 `x'\u003C64hex_key>\u003C32hex_salt>'`。\n\nwx-cli 通过 macOS Mach VM API（`mach_vm_region` + `mach_vm_read`）或 Linux `\u002Fproc\u002F\u003Cpid>\u002Fmem` 扫描微信进程内存，匹配该模式提取密钥，daemon 按需解密并缓存。\n\n---\n\n## 致谢\n\n本项目受 [ylytdeng\u002Fwechat-decrypt](https:\u002F\u002Fgithub.com\u002Fylytdeng\u002Fwechat-decrypt) 启发，在其基础上进行了重新设计与实现。感谢原作者的研究与探索。\n\n---\n\n## 免责声明\n\n本工具仅用于学习和研究目的，用于解密**自己的**微信数据。请遵守相关法律法规，不得用于未经授权的数据访问。\n","wx-cli 是一个用于从命令行查询本地微信数据的工具，采用 Rust 语言开发并以守护进程架构运行。其核心功能包括会话管理、聊天记录查询、搜索、联系人和群成员信息查看、收藏管理和数据导出等，并支持毫秒级响应及后台持久缓存解密数据库来提高效率。此外，它还提供了AI友好的YAML输出格式（可选JSON），确保所有操作都在用户本机上完成，无需将数据上传至云端。此项目特别适用于需要频繁通过脚本或自动化流程访问个人微信数据的技术人员或开发者。",2,"2026-06-11 02:40:11","CREATED_QUERY"]