Apple Container Test Runner
RustPython/RustPython
Runs RustPython tests inside a Linux container built with Apple's container CLI, so macOS users can compare Linux results with their local ones.
wx-cli — 从本地微信数据库查询聊天记录、联系人、会话、收藏等。用户提到微信聊天记录、联系人、消息历史、群成员、收藏内容时,使用此 skill 安装并调用 wx-cli。
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jackwener/wx-cli-again wx-cli --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .claude/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jackwener/wx-cli-again wx-cli --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .agents/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jackwener/wx-cli-again wx-cli --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .cursor/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jackwener/wx-cli-again wx-cli --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .gemini/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jackwener/wx-cli-again wx-cliInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .github/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jackwener/wx-cli-again --skill wx-cli -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jackwener/wx-cli-again wx-cli --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "wx-cli" agent skill from https://github.com/jackwener/wx-cli-again/tree/main into .opencode/skills/wx-cli/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "wx-cli", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
wx-cliwx-cli — 从本地微信数据库查询聊天记录、联系人、会话、收藏等。用户提到微信聊天记录、联系人、消息历史、群成员、收藏内容时,使用此 skill 安装并调用 wx-cli。
Wx CLI is an agent skill from jackwener/wx-cli-again. wx-cli — 从本地微信数据库查询聊天记录、联系人、会话、收藏等。用户提到微信聊天记录、联系人、消息历史、群成员、收藏内容时,使用此 skill 安装并调用 wx-cli。
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 96 other files (for example `.claude/settings.local.json`, `.github/workflows/release.yml` and `AGENTS.md`).
It works with macOS, Linux and WeChat. The repository describes itself as: WeChat local data CLI (query/decrypt/export) — fresh start from wx-cli. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 077a54c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (PowerShell and Shell, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
jqgitcargoghFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Wx CLI loads about 2.3k tokens when it runs. Until then it costs about 24 tokens; SKILL.md has 490 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
sudo wx initsudo wx key extract --hook-seconds 90sudo wx init缺关键分片时**只**推荐:`sudo wx key extract --hook-seconds 90`(等待期间点开相关聊天)。不要循环 `init --force`。s`:磁盘上出现 daemon 不认识的新 `message_N.db`,先跑 `sudo wx key extract --hook-seconds 90`**微信重启后密钥失效 / 新分片没 key**:重新运行 `sudo wx key extract --hook-seconds 90`(微信必须正在运行;等待期间点开相关聊天)。Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jackwener/wx-cli-again at commit 077a54c, republished under its Apache-2.0 licence (© jackwener). 490 words, ~2,311 tokens.
.claude/skills/wx-cli/SKILL.md (or your agent's skills folder). This skill also uses 92 other files; get the full folder from GitHub.wx init 需要提升权限(macOS/Linux: sudo;Windows: 管理员)codesign / ad-hoc 重签 WeChat(默认路径不改 WeChat.app)源码仓库:botiverse/wx-cli(当前 private)。
git clone git@github.com:botiverse/wx-cli.git && cd wx-cli
cargo build --release
mkdir -p ~/.local/bin && cp target/release/wx ~/.local/bin/wx
wx --version升级已有安装:
cd /path/to/wx-cli && git pull && cargo build --release && cp target/release/wx ~/.local/bin/wxgh 权限时:gh release download -R botiverse/wx-cli -p 'wx-macos-arm64' -O ~/.local/bin/wx@jackwener/wx-cli(registry 上可能是旧版本)install.sh 在 private 仓库下会 404sudo wx initunknown_shards / 匹配数过低),加长 LLDB hook,并在等待期间点开相关聊天:sudo wx key extract --hook-seconds 90wx init 会:检测数据目录 → 内存扫描 + LLDB hook 取 per-DB 密钥 → 写入 ~/.wx-cli/config.json 与 all_keys.json。
不要默认执行 codesign --force --deep --sign - /Applications/WeChat.app:会打乱 TCC,导致截图/公众号等权限异常。仅 SSH 等无 GUI 场景下 attach 失败时才考虑有副作用的重签。
sudo wx initwx init初始化完成后,后续查询无需 sudo,daemon 在首次调用时自动启动;日常查询不要求微信进程一直运行。
预检:
wx doctor --json
wx key list --json缺关键分片时只推荐:sudo wx key extract --hook-seconds 90(等待期间点开相关聊天)。不要循环 init --force。
所有命令默认输出 YAML,更省 token & 易读;--json 可切换为 JSON(方便 jq 处理等)。
# 最近 20 个会话
wx sessions
# 有未读消息的会话
wx unread
# 只看真人(私聊 + 群聊)的未读,过滤公众号与折叠入口
wx unread --filter private,group
# 上次检查后的新消息(增量)
wx new-messages
wx new-messages --json # JSON 输出,适合 agent 解析
# 聊天记录(支持昵称/备注名)
wx history "张三"
wx history "张三" -n 2000
wx history "AI群" --since 2026-04-01 --until 2026-04-15 -n 100
# 全库搜索
wx search "关键词"
wx search "关键词" -n 500
wx search "会议" --in "工作群" --since 2026-01-01history / search / export 都支持 -n / --limit 指定返回条数。默认值只是为了避免一次输出过多,不是硬上限。
sessions / unread / history / new-messages / stats 的输出都带 chat_type 字段,agent 可据此分流:
| 取值 | 含义 | username 特征 |
|---|---|---|
private | 真人私聊 | wxid_* 或自定义短号 |
group | 群聊 | *@chatroom |
official_account | 公众号 / 订阅号 / 服务号 / 系统通知 | gh_*、biz_*、mphelper、qqsafe、@opencustomerservicemsg |
folded | 折叠入口(订阅号折叠、折叠群聊的聚合条目) | brandsessionholder、@placeholder_foldgroup |
wx unread --filter 支持 private / group / official / folded / all,逗号分隔多选。默认 all。
群聊消息里的 last_sender、sender 和 stats.top_senders 会优先显示群昵称(群名片)。如果本地数据库没有群昵称,再回退到联系人备注、微信昵称或 username。
history / search / new-messages / attachments 和 stats.top_senders 在群上下文里同时输出稳定身份三件套:sender_username(稳定 wxid,用来区分同名成员)/ sender_contact_display(备注 > 昵称 > wxid 兜底)/ sender_group_nickname(群名片,等价于 sender 的来源,免去再做字符串解析)。当 wxid 解析不到时,这三字段不会输出,避免空字符串污染下游过滤。
sessions / unread / history / search / new-messages / stats / attachments 的 stdout 现在统一是 wrapper:
{
"messages": [...],
"meta": {
"status": "ok",
"unknown_shards": [],
"chat_latest_timestamp": 1715750400,
"chat_latest_db": "message/message_2.db",
"session_last_timestamp": 1715760000
}
}其中:
status = possibly_stale_unknown_shards:磁盘上出现 daemon 不认识的新 message_N.db,先跑 sudo wx key extract --hook-seconds 90status = possibly_stale:session.db 记录的最新时间明显领先于本次查到的最新消息,结果可能漏消息status = windowed:这次查询本来就是窗口化/过滤后的局部视图,不应把它当作"全量最新状态"--with-meta:额外返回 per_shard_latest / cache_mode_per_shard--debug-source:在 --with-meta 基础上再暴露真实 shard_paths引用消息(appmsg type=57)在 history / search / new-messages 输出里会展开为两行:第一行是当前回复,第二行以 ↳ 开头显示被引用原文,例如:
[引用] 当前回复
↳ 发送者: 被引用内容--type link / --type file 会覆盖微信 appmsg 的链接、文件、合并聊天记录和引用消息等变体;search --type link 也会匹配解压并格式化后的引用原文。
# 联系人列表 / 搜索
wx contacts
wx contacts --query "李"
# 群成员列表
wx members "AI交流群"wx members --json 每个成员包含:
username:微信内部 usernamedisplay:推荐展示名,优先使用群昵称contact_display:联系人备注或微信昵称group_nickname:群昵称;没有记录时为空字符串is_owner:是否群主Agent 展示群成员时优先用 display。需要区分群昵称和联系人名时,再读取 group_nickname 与 contact_display。
三个命令,作用各不同:
# 1) 互动通知(点赞 / 评论,默认仅未读)
wx sns-notifications
wx sns-notifications --include-read --since 2026-04-01 -n 100
# 2) 时间线:浏览本地缓存的朋友圈帖子
wx sns-feed # 近 20 条
wx sns-feed --user "张三" # 只看某人
wx sns-feed --since 2026-04-01 --until 2026-04-18 -n 100
# 3) 全文搜索:在正文里找关键词
wx sns-search "关键词"
wx sns-search "婚礼" --user "李四" --since 2023-01-01 -n 50字段区分:
sns-notifications 返回"通知"条目:type(like/comment)、from_nickname、content(评论正文,点赞为空)、feed_preview + feed_author(对应的原帖)sns-feed / sns-search 返回"帖子"条目:author、content(朋友圈正文)、media、media_count(图片/视频数)、location、timestamp;media 字段含每张图的 url/thumb/key/token/md5/enc_idx/size,供下游做图片代理或离线渲染。media_count = media.len(),按 DOM 解析的合法 <media> 子节点计数(malformed XML 返回 0)只保存你本地刷到过的朋友圈(微信 app 按需下载)。没刷到过的帖子不在本地,任何命令都拿不到。
公众号的文章推送存在独立的 biz_message_*.db 分片,与普通 message_0.db 分开:
# 最近 50 篇(默认)
wx biz-articles
# 更多
wx biz-articles -n 200
# 限定公众号(名称模糊匹配 display name / username)
wx biz-articles --account "返朴"
# 时间范围(YYYY-MM-DD,发布时间,非接收时间)
wx biz-articles --since 2026-05-01 --until 2026-05-10
# 仅有未读消息的公众号,每号取最新 1 篇(适合"今天有什么新推送"扫描)
wx biz-articles --unread
wx biz-articles --unread --account "Datawhale" # 与 --account 取交集
# 下游消费:拿 URL 做内容抓取
wx biz-articles --since 2026-05-10 --json | jq '.[].url'每条返回的字段:account / account_username(gh_*)/ title / url(mp.weixin.qq.com 链接)/ digest / cover_url / time + timestamp(文章发布时间)/ recv_time_str + recv_time(微信接收推送的时间)。多图文推送会展开为多行。
聊天里的图片本体在 xwechat_files/<wxid>/msg/attach/... 下加密存储(.dat),需要按消息所在 message_resource.db 的 md5 + 平台相关 image key 才能解码。两步走:
# 1) 先列出图片附件,拿到不透明的 attachment_id
wx attachments "张三"
wx attachments "AI群" --kind image -n 100
wx attachments "AI群" --since 2026-04-01 --until 2026-04-15
# 2) 用 attachment_id 把单个资源解密写到指定路径
wx extract <attachment_id> -o ~/Desktop/photo.jpg
wx extract <attachment_id> -o /tmp/x.jpg --overwriteattachments 输出每条带:attachment_id / kind(当前固定 image)/ type / local_id / timestamp / time,群聊里另带 sender 和稳定身份三件套(同上文)。命令名保留成 attachments 是为了后续扩到其他附件类型时不 break CLI。
extract 报告里带:md5 / dat_path / dat_size / output / output_size / format(实际识别出的图片格式:jpg / png / gif / webp / hevc 等)/ decoder(实际选用的解码器:legacy_xor / v1_aes / v2)。
支持的解码档位:
07 08 V1 08 07):AES-128-ECB + 固定 key cfcd208495d565ef07 08 V2 08 07):AES-128-ECB + raw + XOR;AES key 平台派生V2 image key 提取(macOS / Windows 自动;Linux 暂不支持):
kvcomm cache(key_<uin>_*.statistic 文件名取 uin → md5(str(uin) + wxid)[:16])+ brute-force fallback;xor_key = uin & 0xffWeixin.exe 内存匹配 [A-Za-z0-9]{32|16} 候选,按 V2 template ciphertext-block 反验# 全部收藏
wx favorites
# 按类型筛选:text / image / article / card / video
wx favorites --type image
# 搜索收藏内容
wx favorites --query "关键词"
# 聊天统计(发言人、消息类型、活跃时段)
wx stats "AI群"
wx stats "AI群" --since 2026-01-01# 导出为 Markdown(默认)
wx export "张三" --format markdown -o chat.md
wx export "张三" -n 2000 --format markdown -o chat.md
# 导出为 JSON
wx export "AI群" --since 2026-01-01 --format json -o chat.jsonwx daemon status
wx daemon stop
wx daemon logs --follow查询结果需要程序处理时,统一加 --json:
wx sessions --json
wx new-messages --json
wx search "关键词" --json | jq '.results[0]'
wx history "张三" --json -n 50 | jq '.messages[0]'
wx history "张三" --json | jq '.meta'
wx history "张三" --json --with-meta | jq '.meta.cache_mode_per_shard'CHAT 参数支持昵称、备注名、微信 ID,模糊匹配。不确定准确名称时,先用 wx contacts --query 搜索。
~/.wx-cli/
├── config.json # 配置
├── all_keys.json # 数据库密钥(敏感,勿分享)
├── daemon.sock # Unix socket
├── daemon.pid / .log
└── cache/ # 解密后的数据库缓存是不是必须关 SIP?:不是。SIP 开着即可;init 用本机 Terminal + sudo。
是不是必须 ad-hoc 重签微信?:默认不需要。只有 SSH / 无 GUI 且 attach 失败时才考虑,且有副作用。
微信重启后密钥失效 / 新分片没 key:重新运行 sudo wx key extract --hook-seconds 90(微信必须正在运行;等待期间点开相关聊天)。
daemon 无响应:wx daemon stop 后重新调用任意命令自动重启。
找不到聊天:用 wx contacts --query 确认昵称/备注名,或用微信 ID 直接查询。
为什么只能获取 500 条消息?:这是默认输出条数,不是硬限制。显式传 -n 即可,例如 wx history "张三" -n 2000 或 wx export "张三" -n 2000 -o chat.md。
© jackwener, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 92 other files in the repository root of jackwener/wx-cli-again.
Open the folder on GitHubat commit 077a54c
Wx CLI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Wx CLI this skilljackwener/wx-cli-again | 797 | — | ~2.3k | Automated safety check: Notes | Apache-2.0 | |
| Apple Container Test RunnerRustPython/RustPython | 22k | — | ~467 | Automated safety check: Pass | MIT | |
| Native Feel Cross Platform Desktopyetone/native-feel-skill | 1.9k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| TreeSheets Agent Socketaardappel/treesheets | 3.2k | — | ~5.7k | Automated safety check: Notes | Zlib | |
| Open Computer UseiFurySt/open-codex-computer-use | 2.3k | — | ~1.5k | Automated safety check: Pass | MIT | |
| OrcaSlicer G-code Slicingearthtojake/text-to-cad | 18k | — | ~989 | Automated safety check: Pass | MIT |
RustPython/RustPython
Runs RustPython tests inside a Linux container built with Apple's container CLI, so macOS users can compare Linux results with their local ones.
yetone/native-feel-skill
A skill your agent uses when the user is designing, prototyping, or rewriting a desktop app that must run on multiple OSes (macOS + Windows, optionally Linux) AND feel indistinguishable from a…
aardappel/treesheets
Runs Lobster scripts against the document open in a running TreeSheets instance through its local agent socket, and returns the results or errors.
iFurySt/open-codex-computer-use
Platform-neutral guidance for using Open Computer Use, the open-source Computer Use MCP server and CLI for macOS, Linux, and Windows.
earthtojake/text-to-cad
Slices STL, 3MF or OBJ models into printer-ready G-code with OrcaSlicer, either headless from the command line or by opening the model in the app.
mcncarl/yichen-skills
Create, inspect, repair, and polish a second WeChat app on macOS by copying WeChat, changing the bundle identifier, ad-hoc re-signing, preparing it for the user to open manually, setting Chinese…
wx-cli — 从本地微信数据库查询聊天记录、联系人、会话、收藏等。用户提到微信聊天记录、联系人、消息历史、群成员、收藏内容时,使用此 skill 安装并调用 wx-cli。. Wx CLI is an agent skill from jackwener/wx-cli-again.
Run `npx skills add jackwener/wx-cli-again --skill wx-cli -a claude-code`. Or copy the skill folder (the jackwener/wx-cli-again repository) into .claude/skills/wx-cli in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jackwener/wx-cli-again --skill wx-cli -a codex`. Or copy the skill folder (the jackwener/wx-cli-again repository) into .agents/skills/wx-cli in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jackwener/wx-cli-again --skill wx-cli -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/wx-cli, .gemini/skills/wx-cli, .github/skills/wx-cli and .opencode/skills/wx-cli in your project.
Going by SKILL.md and its folder, Wx CLI needs PowerShell and a shell for the scripts in its folder and the command-line tools its instructions call (jq, git, cargo and gh). Our summary lists: Node.js; A Bash shell; PowerShell.
SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Wx CLI is published under the Apache-2.0 licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Wx CLI: Apple Container Test Runner (RustPython/RustPython, 22k stars), Native Feel Cross Platform Desktop (yetone/native-feel-skill, 1.9k stars), TreeSheets Agent Socket (aardappel/treesheets, 3.2k stars) and Open Computer Use (iFurySt/open-codex-computer-use, 2.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jackwener (a GitHub user) maintains it in jackwener/wx-cli-again, which has 797 GitHub stars. The repository was last updated on September 14, 2026.
Source: jackwener/wx-cli-again on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.