
Mo Discover
- 323 installs
- 32 repo stars
- Updated July 29, 2026
- mowenxd/cli
Helps with ai & agent building tasks.
About
mo-discover is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- mo-discover
- AI & Agent Building
- AI-coding skill
Mo Discover by the numbers
- 323 all-time installs (skills.sh)
- +45 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #2,223 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/mowenxd/cli --skill mo-discoverAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 323 |
|---|---|
| repo stars | ★ 32 |
| Last updated | July 29, 2026 |
| Repository | mowenxd/cli ↗ |
What it does
Helps with ai & agent building tasks.
Files
前置约束
CRITICAL — 先阅读 [`共享规则`](../mo-shared/SKILL.md),其中包含 `mocli` 初始化、认证、输出解析以及安全规则
mocli discover - 墨问发现与动态
mocli disco activity [--recent]
本技能用于查看 当前认证用户 的墨问动态,包括被点赞、被评论(或被回复)、被关注、被收藏、关注的人发布新笔记、关注的人发布付费笔记/合集等活动。该命令只读取动态,不会产生写入或删除操作。
使用原则
- 用户要查看“我的动态/最近谁点赞评论关注我/关注的人发了什么”时,使用本命令。
- 展示时必须以
reply.events为主序列;每个事件用eid到favors、comments、follow_notes、follow_fee_notes等详情 Map 中查找补充信息。 - 不要直接遍历详情 Map 展示动态,否则会丢失原始排序。
- 动态详情里的笔记 ID(如
target_id、note_id、joins)都应到reply.notes中补齐标题、摘要和链接。 - 动态详情里的用户 UID(如
favor_uid、cmt_uid、note_uid)都应到reply.users中补齐昵称。
可选参数:
--recent string:时间范围。支持:today、yesterday、1h-24h。不指定时,默认1h。
使用示例
- 查看我的最新墨问动态
mocli disco activity - 查看今天的墨问动态
mocli disco activity --recent today - 查看昨天的墨问动态
mocli disco activity --recent yesterday - 查看最近 3 小时的墨问动态
mocli disco activity --recent 3h - 查看最近 24 小时的墨问动态
mocli disco activity --recent 24h
参数选择规则
- 用户说“今天”“今日”时,使用
--recent today。 - 用户说“昨天”“昨日”时,使用
--recent yesterday。 - 用户说“最近 N 小时”且
N在1-24范围内时,使用--recent Nh,例如--recent 6h。 - 用户给出的小时数超过
24h,或要求按天数筛选但不是today/yesterday时,说明当前命令只支持today、yesterday、1h-24h,并询问用户是否改用受支持范围。
输出示例
{
"code": 0,
"status": "OK",
"reply": {
"events": [
{
"eid": 2049020870318682148,
"uid": "gMiYUcJU0GjBfKIMTmzeN",
"type": 6,
"sub_type": 1,
"happened_at": 1777305989850
}
],
"follows": {},
"favors": {
"2048799112739434497": {
"favor_uid": "2dsiQjSN3hrWhQu3W8nEx",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
}
},
"collects": {},
"comments": {
"2048795933738192897": {
"cmt_uid": "0W1rAu9TJPU9ZFy_eOgqv",
"cmt_id": "td2dQ5WXhKKD-h4PeN-Ks",
"cmt_p_uid": "",
"cmt_p_id": "",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "rdIP8aEyBDz_c38q3h0TC"
},
"2048797711351394305": {
"cmt_uid": "ua2x-_O32fcaYuURPi1Eo",
"cmt_id": "eITFJYXSaElv_vIrVIeYs",
"cmt_p_uid": "vtv_PV1fEMBb-8_BPlmDu",
"cmt_p_id": "Eh8fTXFO-442JBUEmWCk4",
"target_uid": "vtv_PV1fEMBb-8_BPlmDu",
"target_id": "45JqKC3Y5PvSCj0htokSW"
}
},
"trades": {},
"follow_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"follow_fee_notes": {
"2049020870318682148": {
"note_id": "KS1x1z500bkEZa-PhsfQG",
"note_uid": "0PoXMWF-V43tuXOOu-7Yw",
"joins": []
},
"2048900500857122935": {
"note_id": "iHQFI49mKnP8RclPopQSK",
"note_uid": "_hA8gaYCCpwPkfpPhA4cA",
"joins": [
"GCwHPvJkl5Ox4lVB7fUWH"
]
}
},
"notes": {
"3jv1AiAjXJ4aBC83LqdMC": {
"note_id": "3jv1AiAjXJ4aBC83LqdMC",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "最近心情",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/3jv1AiAjXJ4aBC83LqdMC?from=mocli"
},
"ZVDGaChlin5voLpIp_9TM": {
"note_id": "ZVDGaChlin5voLpIp_9TM",
"uid": "Qiz5hxiY5wr5L76fyd8Kv",
"title": "大家好呀,我是小白",
"brief": "笔记摘要",
"url": "https://note.mowen.cn/detail/ZVDGaChlin5voLpIp_9TM?from=mocli"
}
},
"users": {
"Qiz5hxiY5wr5L76fyd8Kv": {
"uid": "xxxxxxxxxxxxxx",
"name": "精卫鸟.",
"intro": "一只小小鸟,订阅我的没几个人,所以你们都是特殊的。。"
}
}
}
}reply 字段说明
| 字段 | 类型 | 说明 | 引用字段 |
|---|---|---|---|
events | array | 动态事件列表(有序)。展示动态时应优先遍历该字段,再根据每条事件的 eid 到对应详情 Map 中取数据。 | `ActivityEvent - 动态事件` |
follows | map[string]object | 关注类事件详情 Map,键通常为事件 eid。用于展示谁关注了当前用户。 | - |
favors | map[string]ActivityEventFavor | 点赞类事件详情 Map,键通常为事件 eid。用于展示谁点赞了哪篇笔记。 | `ActivityEventFavor - 点赞动态` |
collects | map[string]object | 收藏类事件详情 Map,键通常为事件 eid。用于展示谁收藏了哪篇笔记。 | - |
comments | map[string]ActivityEventComment | 评论类事件详情 Map,键通常为事件 eid。用于展示谁评论\回复了哪篇笔记。 | `ActivityEventComment - 评论动态` |
trades | map[string]object | 交易/付费相关事件详情 Map,键通常为事件 eid。用于展示谁购买了当前用户笔记或专栏 | - |
follow_notes | map[string]ActivityEventFollowNote | 当前用户关注的人发布普通笔记(joins 无数据)、更新合集(joins 有数据)事件详情 Map, 键为事件 eid。 | `ActivityEventFollowNote - 关注笔记动态` |
follow_fee_notes | map[string]ActivityEventFollowFeeNote | 当前用户关注的人发布付费笔记(joins 无数据)、更新付费合集(joins 有数据)事件详情 Map,键为事件 eid。 | `ActivityEventFollowFeeNote - 关注付费笔记动态` |
notes | map[string]NoteInfo | 笔记信息 Map,键为笔记 ID。动态详情中出现 note_id、target_id、joins 等代表笔记 id 的字段时,可用该字段补齐笔记标题、摘要、链接等信息。 | `NoteInfo - 笔记信息` |
users | map[string]UserInfo | 用户信息 Map,键为用户 UID。可用于补齐事件发起人、笔记作者等用户信息。 | `UserInfo - 用户信息` |
<a id="activity-event"></a>
ActivityEvent - 动态事件
| 字段 | 类型 | 说明 |
|---|---|---|
eid | integer/string | 事件 ID。用于到 follows、favors、collects、comments、trades、follow_notes、follow_fee_notes 等详情 Map 中查找事件详情。注意 JSON 解析时可能以数字或字符串出现,做关联时统一转成字符串更稳妥。 |
uid | string | 与事件相关的用户 UID。可到 users[uid] 获取昵称、简介等信息。 |
type | integer | 事件类型。1 点赞事件 2 评论\回复事件 3 收藏事件 4 关注事件 5 交易事件 6 表示关注的人发布笔记、更新合集事件 7 表示关注的人发布付费笔记、更新付费合集事件 |
happened_at | integer | 事件发生时间。通常为毫秒级时间戳,展示前需格式化为可读时间。 |
<a id="activity-event-favor"></a>
ActivityEventFavor - 点赞动态
| 字段 | 类型 | 说明 |
|---|---|---|
favor_uid | string | 点赞用户 UID。到 users[favor_uid] 获取点赞用户昵称、简介等信息。 |
target_uid | string | 被点赞笔记的作者 UID。通常是当前认证用户,也可到 users[target_uid] 获取作者信息。 |
target_id | string | 被点赞笔记 ID。到 notes[target_id] 获取笔记标题、摘要、链接等信息。 |
点赞展示规则
- 展示文案优先使用:
users[favor_uid].name点赞了notes[target_id].title。 - 如果
notes[target_id]不存在,仍展示target_id,不要丢弃该事件。 - 如果
users[favor_uid]不存在,展示 UID。
<a id="activity-event-comment"></a>
ActivityEventComment - 评论动态
| 字段 | 类型 | 说明 |
|---|---|---|
cmt_uid | string | 评论发起者 UID。到 users[cmt_uid] 获取评论用户昵称、简介等信息。 |
cmt_id | string | 评论 ID。当前动态列表通常只给出评论 ID,不一定包含评论正文。 |
cmt_p_uid | string | 被回复评论的作者 UID。为空时表示这是对笔记的直接评论;非空时表示回复某人的评论。 |
cmt_p_id | string | 被回复评论 ID。为空时表示这是对笔记的直接评论;非空时表示回复某条评论。 |
target_uid | string | 被评论笔记的作者 UID。通常是当前认证用户,也可到 users[target_uid] 获取作者信息。 |
target_id | string | 被评论笔记 ID。到 notes[target_id] 获取笔记标题、摘要、链接等信息。 |
评论展示规则
- 当
cmt_p_id为空时,展示为:users[cmt_uid].name评论了notes[target_id].title。 - 当
cmt_p_id非空时,展示为:users[cmt_uid].name回复了users[cmt_p_uid].name在notes[target_id].title下的评论。 - 如果评论正文不在
comments[eid]中,不要编造正文;只展示评论 IDcmt_id和关联笔记信息。 - 如果
notes[target_id]或相关用户信息缺失,保留 ID 展示。
<a id="activity-event-follow-note"></a>
ActivityEventFollowNote - 关注笔记动态
| 字段 | 类型 | 说明 |
|---|---|---|
note_id | string | 主笔记 ID。到 notes[note_id] 获取标题、摘要、链接等信息。 |
note_uid | string | 主笔记作者 UID。到 users[note_uid] 获取作者信息。 |
joins | array[string] | 关联笔记 ID 列表,通常用于合集更新的场景,表示被加入到主笔记中的笔记 ID。可逐个到 notes[join_note_id] 获取标题。 |
<a id="activity-event-follow-fee-note"></a>
ActivityEventFollowFeeNote - 关注付费笔记动态
当前字段与 `ActivityEventFollowNote` 一致,但语义独立:该结构只用于 follow_fee_notes,表示关注的人发布付费笔记或更新付费合集。后续如果付费动态增加价格、订单、权限等字段,应扩展本结构,而不是合并到 ActivityEventFollowNote。
| 字段 | 类型 | 说明 |
|---|---|---|
note_id | string | 主付费笔记或付费合集 ID。到 notes[note_id] 获取标题、摘要、链接等信息。 |
note_uid | string | 主付费笔记作者 UID。到 users[note_uid] 获取作者信息。 |
joins | array[string] | 关联笔记 ID 列表,通常用于付费合集更新的场景,表示被加入到主付费合集中的笔记 ID。可逐个到 notes[join_note_id] 获取标题。 |
动态解析规则
- 以
reply.events的顺序作为展示顺序,不要直接遍历各类详情 Map。 - 对每个事件,将
eid转为字符串后,依次在follows、favors、collects、comments、trades、follow_notes、follow_fee_notes中查找对应详情。 - 若命中
favors[eid],展示为某用户点赞了某篇笔记;使用favor_uid找点赞用户,使用target_id找笔记,使用target_uid找笔记作者。 - 若命中
comments[eid],展示为某用户评论或回复了某篇笔记;使用cmt_uid找评论用户,使用target_id找笔记;当cmt_p_id非空时,再使用cmt_p_uid找被回复用户。 - 若命中
follow_notes[eid],展示为当前用户关注的人发布了新笔记或者更新了合集;使用note_uid找作者,使用note_id找笔记标题、摘要和链接;如果joins不为空,使用joins中的笔记 ID 找子笔记的标题、摘要和链接。 - 若命中
follow_fee_notes[eid],展示为当前用户关注的人发布了付费笔记或更新付费合集;使用note_uid找作者,使用note_id找笔记标题、摘要和链接;如果joins不为空,使用joins中的笔记 ID 找子笔记的标题、摘要和链接。 - 若命中收藏、关注、交易等 Map,应优先使用详情对象里的 UID、note_id、target_id、comment/content 等字段,并通过
users、notes补齐昵称和笔记标题。 - 若某个事件没有命中任何详情 Map,不要丢弃;展示事件 ID、用户、类型、发生时间,并说明该事件类型暂未识别。
- 时间戳
happened_at可能是微秒级;格式化时需要按长度/数值判断,避免误当秒级时间戳。
展示建议
- 数据较少时,按时间倒序逐条展示:时间、动态类型、用户、笔记标题、摘要、链接。
- 数据较多时,可先按类型汇总数量,再列出最近若干条重点动态。
- 笔记标题优先使用
notes[note_id].title如果标题本身不包含「」或『』,就用『』包裹,作者优先使用users[note_uid].name。 - 对付费笔记/合集,如果
flag.with_fee为 true,可明确标注“付费”。
展示规则
参考 `公共展示规则`