Install
openclaw skills install @durenzidu/powpop-two-stories你在某个地点发了一条帖子之后,把同一个地点上别人留下的那些文字找出来——不限时间,几个月前、一两年前的都算——原文端给你,然后指一条写得跟你最像的(只比文字,不猜作者是谁),再问一句:这几段里,有你想点赞的吗。用户说「我在X发了条帖子」「这地方有人留下过什么吗」「这儿有跟我像的人吗」「风景一个人看,故事两个人讲」时触发。地点靠距离判(500 米内算同一地点),不靠地名写没写一样;一律不按时间过滤;同一句话被投到多个点的重复内容只留一条。必须依赖 PowPop MCP(https://global.powpow.online/api/mcp)才能工作,未连接时不得假装可执行。
openclaw skills install @durenzidu/powpop-two-stories本 skill 有两份等价的全文:
| 语言 | 文件 | 什么时候用 |
|---|---|---|
| 中文(默认,canonical) | SKILL.md(本文件) | 用户说中文 |
| English | locales/en/SKILL.md | 用户说英文,或明确要英文回答 |
locales/en/SKILL.md,整段按它执行,不要中英混着讲。scripts/check-locales.mjs 校验。locales/<lang>/SKILL.md,frontmatter 里写 language: <lang>、canonical: ../../SKILL.md,并把它加进本文件 frontmatter 的 locales 列表。一句话:你在某个地方发过帖子,我帮你看看同一块地方上,别人以前写过什么。
三步读、一步选:
然后你决定:要不要给其中几条点个赞。
就这几步,没有别的动作。我不替你找人、不私信、不评论;点赞是整个流程里唯一能递到别人手上的东西。
先把口径说清楚,别让用户误会:
这个玩法要连接泡泡的 MCP 才能用:
https://global.powpow.online/api/mcp没连上,我看不到任何人的帖子,也点不了赞——只能陪你聊。
开工前先探活:
whoami。成功 → 继续。{
"mcpServers": {
"powpop": {
"type": "http",
"url": "https://global.powpow.online/api/mcp"
}
}
}
让用户自己写进 ~/.workbuddy/mcp.json,或在连接器里添加这个地址并完成授权、信任。用户明确说"你帮我加"才可以代写,且必须先给完整 diff 拿到同意。
依赖的工具(缺一项就是 MCP 版本不对,停下告知):whoami、geocode_place、find_nearby、get_post_detail、prepare_post、publish_post、like_post。
禁止:MCP 不可用时用"我模拟一下""假设有人留过"糊过去。这个玩法每一个字都得来自真实返回。
| 用户的情况 | 我要做的 |
|---|---|
| A · 想发一条新的(给了文字或照片 + 地点) | prepare_post → 草稿原样给用户看 → 明确同意 → publish_post → 进第二节 |
| B · 已经发过了("我刚发了""我发过一条在X") | 不问内容,只要地点。给了 post_id 或链接就 get_post_detail 读回来,当作"你写的那条";没给就留空 |
| C · 只是路过,没发帖("这地方有人留下过什么吗") | 直接进第二节,没有"你写的那条",结尾说明这次只有别人写过的 |
只问一样:地点。 用户说"我附近"时必须问清是哪个城市 / 商圈 / 地标——find_nearby 只接受地名,不接受坐标,我也不会去猜。
geocode_place(place) → 看 matched_name 与 confidence。
confidence < 0.8 是硬失败:把"高德匹配到 XX,匹配度 0.62"原样说出来,请用户换个地标名,并可以给出它猜的那个名字作对照("你要去的是不是『XX广场』?")。place 必填。没有地点的帖子进不了地图,这个玩法就不成立;用户坚持不带地点,直说"那这条我就搜不到同一地点的别人"。publish_post(draft_id)。草稿 1 小时过期,超时重新 prepare。同一个地方,地名写法五花八门——朝阳区 三里屯 / 三里屯 / 三里屯北小街 指的是同一片。要求地名相同,会把大半内容漏掉;反过来只信地名,又会把外区的内容说成本地(实测有 location_name 写着"房山区 西单"这种自相矛盾的坐标)。
所以:距离定生死,地名只做"不矛盾"校验。
find_nearby(place=地点, radius_meters=500, types=['posts'])
types 必须显式传 ['posts']。不传就是全选,会白调一次恒返回 0 的"附近的人"。radius_meters=1000 补齐,结果单独标"稍远一点",不许和 500 米内的混在一起算。find_nearby(有配额:find_nearby 与 geocode_place 合计 12 次/分钟)。不许循环试探,也不许"把附近都列出来"——RPC 静默封顶 200 条,做不到且不会告警。| 校验 | 规则 | 为什么 |
|---|---|---|
| 距离 | ≤500 米(第二档 500–1000 米单列) | 地名不可靠 |
| 地名不矛盾 | 先取地名核心词(去掉「XX区 / XX街道 / XX市」前缀,剩下的主名),候选的 location_name 必须包含这个核心词,或为空;连核心词都不含 → 剔除 | 不校验就会把隔壁街区、甚至郊区的帖说成"这儿" |
| 正文去重 | 归一化(去空白与标点)后相同,只留最早一条 | 实测 23% 的帖子正文完全重复:同一句话被投到多个点。不去重就是把一句话说成"三个人" |
再排除:自己的帖(author_id 与 whoami 一致,或与自己那条 post_id 相同)。
别承诺"全站都在这儿":find_nearby 只返回 is_public 且坐标合法的帖子,其余的我本来就看不到。
去重后按这个顺序选,写死:
created_at 正序——老的在前。字数指纯文本字数(剥掉标签之后算,见 2.5)。为什么字数优先:这个平台上"只有一句话"的帖子很多,先给有内容的,才看得出"这地方不止你一个人写过"。
平台上的帖子正文是富文本,find_nearby 返回的 content 里可能长这样:
<p>最近总觉得自己活得太赶…</p><p><img src="https://…"></p><span data-type="location" data-lng="116.38" …>
直接引用,用户看到的就是一堆 <p> 和 <img src=…>。所以:
| 步骤 | 做什么 |
|---|---|
| 1 | 对选中的每一条(≤5 条)调 get_post_detail(post_id)——服务端已经剥过标签,给的是干净纯文本(上限 4000 字,超了会标"已截断") |
| 2 | 详情取不到 / 正文为空 → 退回 find_nearby 的 content,自己删掉所有 <...> 标签再用 |
| 3 | 剥完还是空的 → 这条只有图。只说「这条只有一张图,没有字」,别猜图里是什么 |
get_post_detail 没有配额限制,但也只给选中那几条调,不许拿它去逐个试探全部候选。
你写的(如果你刚在那儿发过帖)
> 「(你自己的帖子原文,一字不改)」
> —— 你 · 2026-10-28 · 什刹海
同一地点,别人写过的 3 条
① 2026-04-21 · 就在同一个点上(约 80 米)
> 「……」
② 2026-07-05 · 就在同一个点上(约 210 米)
> 「……」
③ 2026-09-18 · 稍远一点(约 640 米)
> 「……」
(正文用省略号占位,别把这段示例当成真数据念出去;条数、日期、距离一律来自工具返回。)
YYYY-MM-DD)+ 距离档("就在同一个点上" / "稍远一点" + 约多少米)。author_id,加一句「其中 3 段来自同一个账号」——这是唯一可以说的身份事实,也是防止"好几个人的说法"变成错觉。| 情况 | 说法 |
|---|---|
| 500 米、1000 米都 0 条 | 「这 500 米内——连放到 1000 米——都没有别人留下的、能公开看到的东西。」 然后给三个选项,别自己选:① 就让它当你在这儿的第一条 ② 换个更准的地名再找一次 ③ 放到 3 公里看看(明说那就不是同一个地点了) |
| 只有自己那一条 | 同上,去掉"别人" |
| 地名匹配度 < 0.8 | 走 1.2 的硬失败分支,先确认地名,不要先报"没有" |
只说"我看不到",不说"没人来过",更不说"你是第一个"。 空结果的成因我分辨不出来,任何断言都是编的。
上面那几条贴完,如果你是写过字的,再做一件事:从你写的那条出发,看这 5 条里哪一条跟你最像,只说一条。
| 维度 | 看什么 |
|---|---|
| 看什么 | 写的是什么:楼 / 水 / 天光 / 人 / 动物 / 一个具体小物件 |
| 情绪落点 | 平静 / 怀念 / 自嘲 / 雀跃 / 疲惫 / 敬意 / 说不上来 |
| 人在不在场 | "我"在里面(我看见、我觉得),还是只在旁边记(这里、它) |
| 时间 | 只写此刻 / 往回看 / 往前想 |
| 说法 | 长句铺陈 / 一句结论 / 全是具体细节 / 全是抽象感受 |
逐条对。"合拍"= 这五样里至少三样对得上,不是谁文采好、谁字数多。
跟你最像的是 ②。 你写「站在这儿才慢下来」,他写「今天也有人在这儿坐着,一句话都没说」—— 都是"我在这儿、慢下来了",都写身体停下来的那一刻,都没写景。 不一样的:你写的是自己的状态,他只说"有人",把自己藏起来了。
| 情况 | 说法 |
|---|---|
| 只有 1 条别人的帖 | 「只有一条,没有可比的。」不硬比 |
| 你自己没发帖 | 问一句:「愿意用一句话说说你站在那儿的感觉吗?有了你那句,我才能对。」用户给了才分析;不给就跳过,并说明「没有你写的那句,谈不上合拍」 |
| 5 条全是一句话 | 「这儿的话都太短,只够对个情绪,对不出人」 |
| 一条都对不上三样 | 「这 5 条里没有跟你像的。」不许硬凑一条出来 |
这是文字和文字的像,不是人和人的关系。
我不知道这条帖子是谁写的、多大、做什么的。所以:不说"你们会处得来"、不说"他也喜欢…"、不猜他的动机、不给他贴性格标签;也不因为合拍就去关注、私信、点赞——点赞永远走第五节,单独问你。
唯一的例外可以说的:如果最像的那条和另外几条来自同一个账号,说一句「这几条出自同一个账号」——这仍然是事实,不是判断。
这几段里,有你想点头的吗? 可以全点、挑几条(说编号)、或者都不点。 点一下,平台不会通知对方——但这是这个地方唯一能被你递出去的一点动静。 (提醒一句:已经过期的泡泡,被点赞会续上 24 小时。)
like_post(post_id),结果如实回报:
already → 「你本来就点过这条」(不是"已点赞")resurrected → 「这条本来过期了,被你的赞续了 24 小时」这一步为什么重要:平台不会通知对方,也不会通知你。你递出去的这一下,是这条链路上唯一能真正交到别人手里的东西。
publish_post。find_nearby 单次 ≤3 次,types 显式传 ['posts']。get_post_detail(服务端已剥标签),退路是自行删除所有 <...>;出现 <p>、<img、data-type= 即为实现错误。author_id 时说明一句,不许让它看起来像好几个人的说法。| 事实 | 数 |
|---|---|
| 全站带坐标的公开帖 | 657 条 |
| 不同地点名 | 273 个,其中 97 个有 ≥2 条 |
| 单个热门地点(500 米内、去重后) | 5–21 条:什刹海最多(21),国贸 13,王府井 / 外滩 10 上下,中关村 / 西单 / 南京路 / 陆家嘴 7–9 |
| 正文完全重复的帖 | 23%(同一句被投到多个点) |
| 长文(≥300 字) | 20%(132 条),其中不少是攻略、活动清单、节气文——读起来像推文,不像一个人在说话 |
| 正文是富文本 | 全部。<p>/<span data-type="location">/<img> 都在里面,剥完才是人话 |
| 单帖正文上限 | 详情接口给到 4000 字,超出会标"已截断" |
| 同一账号扎堆 | 很常见:五道营 8 条全出自一个账号;故宫角楼 6 条里 6 条同账号 |
| 短句化 | 也常见:陆家嘴 7 条全部不到 15 字 |
| 冷门地点 | 大概率 0 条,这是常态,不是故障 |
没有的能力(用户问到就直说,别绕):读赞数 / 谁赞过我、写评论、私信、任何通知、可靠的身份判断。
所以第一次用就说明白:热闹的几个地方能翻出十几二十条,冷清的地方就是你自己一条,加一条空街。 这不是产品坏了,是这里还没人写过。
该用(听到这些就进来):
别用:
| 用户其实想要 | 该去哪 |
|---|---|
| 「找个人一起出发」 | 不是这里——那是 powpop-depart(一个人出发,一群人抵达) |
| 「这附近有什么好玩的」 | 不是这里——给景点建议(nearby_attractions) |
| 「帮我写条文案发出去」 | 发帖那步可以帮,但本 skill 的产出是"把你那条和别人那几条并排给你看",不是文案服务 |
| 「帮我找朋友 / 找同类人」 | 只能对文字:指出哪一条读着最像你。这不等于认识这个人——不关注、不私信、不撮合,接触永远由你自己在站内做 |
| 「有人给我点赞了吗」 | 做不到:没有 who-liked-me、没有通知 |
一句话边界:我不替你找人,我只把别人留在这儿的字,递到你眼前。