Skill: mariotong/maimai-cli (version 1.1.0)

--- name: maimai-cli description: > 脉脉 CLI 路由技能。用于导入登录态、查看推荐流/热榜/公司圈、搜索内容、 读取详情评论、下载图片和排查登录问题。Use when: maimai, 脉脉, 职言, 同事圈, 推荐流, 热榜, 帖子详情, 评论, Cookie. version: 1.1.0 license: MIT-0 metadata: openclaw: requires: bins: - maimai homepage: https://github.com/mariotong/maimai-cli emoji: "💬" --- # maimai-cli `maimai-cli` 是脉脉的本机命令行入口。主文档只保留路由和总规则；具体命令、场景和排错细节请按需阅读 `references/*.md`。 ## 何时使用 当用户提到这些意图时，优先使用本 skill： - 脉脉登录、Cookie 导入、状态检查 - 推荐流、热榜、公司圈、帖子列表、翻页 - 搜索脉脉话题、联系人、公司讨论 - 帖子详情、评论、图片、资料卡 - 脉脉 CLI 的短索引解析、输出格式、故障排查 ## 快速开始 ```bash maimai --help maimai status maimai me maimai feed --limit 5 ``` ## 路由表 | 用户意图 | 参考文档 | | --- | --- | | 登录、Cookie、安全边界 | `references/auth.md` | | 推荐流、热榜、公司圈、列表翻页 | `references/feeds.md` | | 搜索内容与联系人 | `references/search.md` | | 详情、评论、图片、资料卡、短索引 | `references/detail.md` | | 常见异常、调试、工作流 | `references/troubleshooting.md` | ## 最常用命令 ```bash # 登录与状态 maimai import-cookie-header maimai status maimai me maimai cookies maimai logout # 列表 maimai feed --limit 10 maimai hot-rank maimai company-feed --limit 10 maimai search 裁员 --section gossips # 展开阅读 maimai refs maimai detail 1 --kind gossip maimai comments 1 --kind gossip maimai images 1 --download ./images maimai profile 1 maimai refs --scope comments ``` ## 使用原则 1. 先验证 `maimai` 命令存在，再确认 `maimai status` 是否正常。 2. 列表读取优先从小结果集开始，例如 `feed --limit 5`。 3. 遇到 `1`、`2` 这类短索引时，先确认最近一次列表上下文是否还在；帖子看 `maimai refs`，评论看 `maimai refs --scope comments`。 4. 默认给用户摘要，不直接倾倒整屏原始输出；需要脚本消费时再加 `--json` 或 `--yaml`。 5. 如果用户把完整 Cookie 贴进对话，先提醒其让旧登录态失效，再继续其他操作。

path: _meta.json
content: ownerId: local-hermes
slug: maimai-cli
version: 1.1.0
publishedAt: 1777925011000

path: references/auth.md
content: # 认证与安全

## 安装与检查

如果未安装：

```bash
uv tool install maimai-cli
```

检查可用性：

```bash
maimai --help
maimai status
```

## 导入 Cookie

推荐用户在自己的终端执行，不要把完整 Cookie 发到聊天里：

```bash
maimai import-cookie-header --cookie '完整 Cookie 头'
```

或：

```bash
export MAIMAI_COOKIE='完整 Cookie 头'
maimai import-cookie-header
```

## 检查登录状态

```bash
maimai status
maimai me
maimai cookies
```

适用场景：
- 用户说“已经登录了，帮我看看能不能用”
- 用户刚导入 Cookie，想确认是否成功
- 用户怀疑本地登录态失效

## 清理登录态

```bash
maimai logout
```

适用场景：
- 用户想切换账号
- 用户怀疑 Cookie 已泄露
- 工具状态异常，需要重新导入

## 强制安全规则

- 不要要求用户把完整 Cookie、`access_token`、`session`、`csrftoken` 贴进聊天
- 不要读取并回显本地保存的 Cookie 文件内容
- 不要在回复里复述用户已泄露的敏感值
- 如果用户已经泄露完整 Cookie，优先建议其退出登录或重新登录，让旧登录态失效
- 只有在用户明确需要完整原始结果时才使用 `--raw`


path: references/detail.md
content: # 详情、评论、图片与资料卡

## 短索引机制

列表命令执行后，CLI 会缓存最近一次列表的引用表，因此 `1`、`2`、`3` 这种 `ITEM_ID` 常常可以直接表示“刚才列表里的第几项”。

先查看缓存：

```bash
maimai refs
```

重要注意：
- 短索引只对“最近一次列表命令”的缓存可靠，例如刚跑完 `hot-rank`、`feed`、`company-feed` 或 `search` 后的 `1`、`2`。
- 运行 `comments` 后，评论短索引会写入独立缓存；帖子短索引仍用 `maimai refs` 查看，评论短索引用 `maimai refs --scope comments` 查看。
- 如果用户给的是 raw gossip id，例如 `36744330`，通常还需要 `--egid`；raw feed id 通常还需要 `--efid`。
- 不要把“热榜第 11 条”的短索引和“帖子真实 ID”混用。先用 `maimai refs` 确认当前 `1/11/18` 指向谁。
- 当命令提示需要 `egid` 或 `efid` 时，优先重新拉原列表恢复短索引；若已知道真实 ID，则必须显式补 `--egid` / `--efid`。

## 查看详情

```bash
maimai detail 1 --kind gossip
maimai detail 10 --kind feed
maimai detail 1 --kind feed --efid E880GEffW92s1hDji5EuDQ
maimai detail 1 --kind gossip --egid 31fcf8e65f2f42ab8dc8facc472e89c2
maimai detail 36744330 --kind gossip --egid 31fcf8e65f2f42ab8dc8facc472e89c2
```

适用场景：
- “展开第 1 条看看”
- “把刚才那条帖子详情给我”
- “用真实 `efid` / `egid` 直接查”

## 查看评论

```bash
maimai comments 1 --kind gossip
maimai comments 10 --kind feed
maimai comments 1 --kind gossip --page 1 --limit 20
maimai refs --scope comments
maimai comments 1 --kind feed --cid 1
maimai comments 1 --kind feed --cid COMMENT_ID
maimai comments 36744330 --kind gossip --egid 31fcf8e65f2f42ab8dc8facc472e89c2
```

适用场景：
- “看评论区”
- “继续翻评论”
- “查看某条评论的回复”

## 查看或下载图片

```bash
maimai images 1 --kind gossip
maimai images 10 --kind feed
maimai images 1 --download ./maimai-images
maimai images 1 --download ./maimai-images --thumb
```

适用场景：
- “看这条帖子配图”
- “把这条图片下载下来”
- “先下载缩略图快速预览”

## 查看资料卡

```bash
maimai me
maimai profile MMID
maimai profile 1
maimai profile MMID --trackable-token TOKEN
```

适用场景：
- “看我当前账号信息”
- “查看搜索结果里第 1 个联系人”
- “读取某个人的资料卡”

注意：
- `profile` 的 `MMID` 也可以是最近列表中的短索引
- 某些资料链接自带 `trackable_token`，补上它通常更稳


path: references/feeds.md
content: # 列表阅读

## 推荐流

```bash
maimai feed
maimai feed --type recommended --limit 10
maimai feed --offset 10 --limit 10
maimai feed --page 2 --page-size 10
```

适用场景：
- “帮我看看推荐流”
- “继续翻下一页”
- “抓前 20 条推荐”

## 其他 feed

```bash
maimai feed --type recommended
maimai feed --type following
```

说明：
- 默认 `--type` 是 `recommended`
- 实际可用类型取决于 CLI 支持和当前账号可见内容

## 热榜

```bash
maimai hot-rank
maimai hot-rank --limit 20
```

适用场景：
- “看下今天脉脉热榜”
- “脉脉现在都在讨论什么”

## 公司圈

```bash
maimai company-feed
maimai company-feed 123456
maimai company-feed --limit 20
```

适用场景：
- “看当前公司圈”
- “看某个公司 gossip-discuss 圈子”

如果自动解析当前公司圈失败，尤其是出现 HTTP 406/404，让用户打开浏览器里的公司圈页面，从 URL 复制 `webcid`：

```text
https://maimai.cn/company/gossip_discuss?webcid=<webcid>
```

然后显式传入：

```bash
maimai company-feed <webcid> --limit 20
```

## 结构化输出

```bash
maimai feed --limit 5 --json
maimai hot-rank --yaml
maimai company-feed --raw
```

选择建议：
- 人工阅读优先默认输出
- 脚本处理优先 `--json`
- 字段排查可用 `--yaml`
- 仅在用户明确需要完整字段时才用 `--raw`


path: references/search.md
content: # 搜索与发现

## 搜索内容与联系人

```bash
maimai search AI
maimai search 裁员 --section gossips
maimai search 字节 --section contacts
maimai search 大模型 --limit 10
```

支持的 `--section`：
- `all`
- `feeds`
- `gossips`
- `contacts`

适用场景：
- “搜一下某个话题”
- “找某个联系人”
- “查脉脉上关于某公司/某岗位的讨论”

## 搜索翻页

```bash
maimai search QUERY --page 2 --page-size 10
maimai search QUERY --offset 10 --limit 10
```

注意：
- 帮助里已注明当前 Web API 可能忽略 `--offset`
- 用户反馈翻页没变化时，优先改用 `--page`

## 搜索后的常见下一步

```bash
maimai refs
maimai detail 1 --kind gossip
maimai profile 1
```

推荐流程：
1. 先搜索拿到结果
2. 用 `maimai refs` 看短索引映射
3. 再展开详情、评论或资料卡


path: references/troubleshooting.md
content: # 排错与工作流

## 登录失败或结果为空

症状：`status` 失败、`me` 失败、列表为空或返回未登录。

排查顺序：

```bash
maimai status
maimai cookies
maimai me
```

常见原因：
- Cookie 已过期
- 只复制了部分 Cookie
- 导入命令被 shell 引号破坏
- 切账号后旧 Cookie 仍留在本地

处理建议：

```bash
maimai logout
export MAIMAI_COOKIE='重新获取的新 Cookie'
maimai import-cookie-header
maimai status
```

## 短索引找不到对象

症状：`detail 1`、`comments 1`、`images 1` 找不到对象。

常见原因：
- 当前会话里没有先运行列表命令
- 后续运行了新的列表命令，短索引缓存已切换
- 帖子短索引和评论短索引用了不同 scope，但查看时选错了 `refs` scope
- `feed` 和 `gossip` 类型判断错误
- 把 raw gossip id 当成短索引用，但没有传 `--egid`

排查命令：

```bash
maimai refs
maimai refs --scope comments
```

处理建议：
- 先重新跑一次列表命令
- 再用 `refs` 确认 `1` 对应的对象
- 必要时显式传 `efid` 或 `egid`

示例：

```bash
# 正确：刚跑完热榜/公司圈列表，11 是短索引
maimai refs
maimai detail 11 --kind gossip
maimai comments 11 --kind gossip

# 正确：评论短索引有独立缓存，不会覆盖帖子短索引
maimai refs --scope comments

# 正确：用 raw gossip id 时补 egid
maimai detail 36744330 --kind gossip --egid <egid>
maimai comments 36744330 --kind gossip --egid <egid>
```

如果已经丢失 `egid`，最稳妥做法是重新运行产生该帖子的列表命令，然后用短索引展开。`comments` 命令的评论索引现在写入独立 scope，不会覆盖帖子列表索引。

## 搜索翻页异常

症状：
- `search --offset` 看起来不生效
- 某一页结果重复
- 列表里出现 `kind: unknown`

处理建议：
- 搜索场景优先改用 `--page`
- 对异常项先记录，不要贸然假设是数据缺失
- 需要时加 `--json` 或 `--raw` 查看完整结构

## 公司圈自动解析失败

症状：
- `maimai company-feed` 返回 HTTP 406/404
- 自动解析不到当前同事圈
- 显式传 `webcid` 后可以正常访问

原因：
- 脉脉页面结构变化，自动解析逻辑没有匹配到新的公司圈入口
- 当前账号首页没有暴露可解析的 `GossipCircle` 深链

处理建议：

```bash
maimai company-feed <webcid> --limit 20
```

`webcid` 可以从浏览器公司圈 URL 中复制：

```text
https://maimai.cn/company/gossip_discuss?webcid=<webcid>
```

## 原始 GET 调试

```bash
maimai raw-get /community/api/common/get-user-info?__platform=community_web
```

适用场景：
- 用户想验证某个同源 GET 路径
- 需要快速判断是不是 CLI 解析问题，而不是接口不可达

注意：
- 这是个人调试助手，不适合常规业务流程
- 避免把含敏感参数的原始路径和返回全文贴回对话

## 推荐工作流

### 工作流 1：看推荐流，再展开阅读

```bash
maimai feed --limit 10
maimai detail 1 --kind gossip
maimai comments 1 --kind gossip
```

### 工作流 2：搜关键词，再看详情或联系人

```bash
maimai search 大模型 --section all --limit 5
maimai refs
maimai detail 1 --kind gossip
maimai profile 1
```

### 工作流 3：看热榜，再下载图片

```bash
maimai hot-rank --limit 10
maimai images 1 --download ./maimai-hot-images
```

### 工作流 4：验证账号和公司圈

```bash
maimai status
maimai me
maimai company-feed --limit 10
```


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)