aihot
查询 AIHOT 的中文 AI 资讯、精选、当前热点和日报。用户询问今天或最近的 AI 新闻、AI 圈动态、大模型或产品发布、OpenAI/Anthropic/Google 最新消息、AI 论文、AI 日报、AIHOT 精选、当前最热事件,或需要同步当前全部精选时使用。必须通过 aihot.news 的匿名只读…
Organize X/Twitter bookmark folders (collections) via GraphQL with Chrome cookie auth. Actions: list folders, list folder contents, add/remove/move a bookmark between folders, create a folder. Keywords: twitter, x, bookmark folder, collection, 收藏夹, 书签分类, 整理收藏夹, 移动书签.
$ npx -y skills add codingSamss/all-my-ai-needs --skill bird-bookmark-folders --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/bird-bookmark-foldersContext preview
The summary Claude sees to decide when to auto-load this skill.
Organize X/Twitter bookmark folders (collections) via GraphQL with Chrome cookie auth. Actions: list folders, list folder contents, add/remove/move a bookmark between folders, create a folder. Keywords: twitter, x, bookmark folder, collection, 收藏夹, 书签分类, 整理收藏夹, 移动书签.
name: bird-bookmark-folders description: "Organize X/Twitter bookmark folders (collections) via GraphQL with Chrome cookie auth. Actions: list folders, list folder contents, add/remove/move a bookmark between folders, create a folder. Keywords: twitter, x, bookmark folder, collection, 收藏夹, 书签分类, 整理收藏夹, 移动书签."
管理 X/Twitter 的书签收藏夹(bookmark collections)。与只读的 `bird-twitter` 分开,因为本 skill 包含**写操作**。
Bird CLI 没有收藏夹管理命令(只有 `bookmarks --folder-id` 读取),所以这里直接调 X 的 GraphQL 接口。
**每一次写操作都必须先获得用户对该次操作的明确同意。** 不要因为用户批准过一次移动就自行扩展到其他条目。
1. Chrome 中已登录 x.com(脚本从 Chrome cookie 数据库读取 `auth_token` / `ct0`) 2. 已安装 `bird-twitter` skill —— 本脚本复用它的 cookie 提取与 bearer token 常量 3. 网络走本地代理:`HTTP_PROXY=http://127.0.0.1:7897`、`HTTPS_PROXY=http://127.0.0.1:7897`
SKILLS_HOME="$HOME/.claude/skills" S="$SKILLS_HOME/bird-bookmark-folders/scripts/bookmark_folders.py" export HTTP_PROXY=http://127.0.0.1:7897 HTTPS_PROXY=http://127.0.0.1:7897
python3 "$S" list
输出 `<folder_id> <名称>`。后续命令的 folder 参数既接受 id 也接受**精确名称**。
python3 "$S" items 方法论 -n 100
配合 bird 读取推文详情:
bird --cookie-source chrome --timeout 20000 bookmarks --folder-id <id> --all --json
python3 "$S" --yes move <tweet_id> <源夹> <目标夹>
`move` = 先 `add` 到目标夹,确认返回 `Done` 后再从源夹 `remove`。add 失败时不会执行 remove。
python3 "$S" --yes add <tweet_id> <目标夹> python3 "$S" --yes remove <tweet_id> <源夹> python3 "$S" --yes create "投资"
2026-07-28 从 `bundle.BookmarkFolders` / `bundle.Bookmarks` / `shared~bundle.BookmarkFolders~bundle.Bookmarks` 三个 chunk 中提取,已实测可用:
| operationName | queryId | 类型 | 成功判据 | |---|---|---|---| | `BookmarkFoldersSlice` | `i78YDd0Tza-dV4SYs58kRg` | query | `bookmark_collections_slice.items` | | `BookmarkFolderTimeline` | `g5l-N4fpbp7B-1OAbOdGzw` | query | `bookmark_collection_timeline.timeline` | | `Bookmarks` | `aqjes8lRHRFG0HUglVTfNg` | query | — | | `bookmarkTweetToFolder` | `4KHZvvNbHNf07bsgnL9gWA` | mutation | `bookmark_collection_tweet_put == "Done"` | | `RemoveTweetFromBookmarkFolder` | `2Qbj9XZvtUvyJB4gFwWfaA` | mutation | `bookmark_collection_tweet_delete == "Done"` | | `createBookmarkFolder` | `6Xxqpq8TM_CREYiuof_h5w` | mutation | `bookmark_collection_create` | | `EditBookmarkFolder` | `a6kPp1cS1Dgbsjhapz1PNw` | mutation | `bookmark_collection_update` | | `DeleteBookmarkFolder` | `2UTTsO-6zs93XqlEUZPsSg` | mutation | — |
mutation 的 variables 统一是 `{"bookmark_collection_id": <folder_id>, "tweet_id": <tweet_id>}`;`createBookmarkFolder` 用 `{"name": "..."}`。
X 前端发版后 queryId 可能变化,表现为 `404 Query not found` 或 `422 GRAPHQL_VALIDATION_FAILED`(脚本会直接报出并指向本节)。
**注意:chunk 名到文件的映射表不在任何静态 JS 文件里**(`main.js`、`vendor.js`、`i18n/en.js`、HTML 内联脚本都没有),必须在浏览器里执行 webpack runtime 才能拿到。所以这个流程无法做成无人值守的脚本。
1. 用浏览器 MCP(chrome-devtools 或同类)打开 `https://x.com/explore`。**不需要登录态**,登录页同样会加载 webpack runtime。
2. 挂探针取出 webpack require:
window.webpackChunk_twitter_responsive_web.push([
['__probe_chunk__'],
{ '__probe_mod__': (m, e, r) => { window.__wr = r; } },
(rt) => { rt(rt.s = '__probe_mod__'); }
]);3. 从 `__wr.u` 的源码里筛出 bookmark 相关 chunk 的完整 URL:
const wr = window.__wr, src = wr.u.toString(); [...src.matchAll(/(\d+):"([^"]+)"/g)] .filter(([, , name]) => /bookmark/i.test(name)) .map(([, id]) => wr.p + wr.u(id));
4. 下载这些 chunk 并提取操作 id:
curl -s -o chunk.js "<chunk url>" grep -ohE 'queryId:"[A-Za-z0-9_-]+",operationName:"[A-Za-z]+",operationType:"[a-z]+"' chunk.js | sort -u
关键的两个文件通常是 `bundle.BookmarkFolders.<hash>.js` 和 `shared~bundle.BookmarkFolders~bundle.Bookmarks.<hash>.js`。
5. 用新值更新 `scripts/bookmark_folders.py` 里的 `OPS` 表和上面的操作表,并更新提取日期。
以下操作风险更高,刻意排除:
跨 Claude Code 与 Codex 两套 agent 的 skill 能力真源与同步规则。写入由 agent 执行,人只审校与决策。 把 Claude Code 与 Codex 的可复用能力收敛到一个仓库,按 platform-first 维护:每个平台独立持有自己的 skills/ 与运行约定,同名 skill 允许在两端并存,不强行抽象去重。 仓库要解决的是多端 AI 配置的漂移——GitHub 仓库、本地工作区、本地 CLI
Repo: codingSamss/all-my-ai-needs
查询 AIHOT 的中文 AI 资讯、精选、当前热点和日报。用户询问今天或最近的 AI 新闻、AI 圈动态、大模型或产品发布、OpenAI/Anthropic/Google 最新消息、AI 论文、AI 日报、AIHOT 精选、当前最热事件,或需要同步当前全部精选时使用。必须通过 aihot.news 的匿名只读…
通过 Apifox CLI 管理 Apifox 项目资源。触发场景:运行接口自动化测试/测试套件,查询/创建/更新/删除接口、环境、Schema、Mock、分支等项目资源,导入导出 API 文档,查看测试报告,管理 Runner、定时任务、通知等 CI/CD 配置。CLI 输出为结构化 JSON,常含…
Apifox 接口测试用例:test-case 与 test-data 的查询、创建、更新、删除、分类和运行;处理测试步骤、断言、提取变量、前后置处理器、数据集,以及“CLI 创建后前端测试步骤无法展示”等问题。
Read Bilibili (B站) content. Actions: search videos, view hot/rank feeds, read video details, prepare audio, and read subtitles through OpenCLI. Keywords:…
Read X/Twitter content via Bird CLI. Actions: read tweets, search, view all bookmarks or bookmark folders, trending, news, timeline, mentions, lists. Keywords:…
CC×Codex 交叉讨论。不确定性强的问题(事实核查 / 有争议或乐观的结论 / 重要技术决策)找 codex 交叉验证,避免单模型片面。关键词: 让codex看看, 跟codex讨论, codex审查, 帮我审查, review, 交叉讨论, battle, 发给codex, 继续讨论, 接着聊