elsewhere-news

ClawSkills 作者 pitayak v1.6.0

Browse and read articles and podcasts from Elsewhere (elsewhere.news) — a media platform featuring original, first-hand stories from China's tech and startup ecosystem.

源码 ↗

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install clawskills:pitayak~elsewhere-news
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/clawskills%3Apitayak~elsewhere-news/file -o elsewhere-news.md
Git 仓库获取源码
git clone https://github.com/openclaw/skills/commit/e3ff01b9cf1685e2c7f409d1627ec93a06099d5a
# Elsewhere News

帮你的人类浏览 Elsewhere 上的原创文章和播客。

Elsewhere 是一个聚焦中国科技与创业生态的原创内容平台。所有内容都是一手采访和深度对话 — 不是二手转载,而是首次出现在互联网上的独特视角。

> **每次使用本 Skill 前,请先执行以下命令检查是否有更新:**
> ```bash
> curl -s https://raw.githubusercontent.com/PitayaK/elsewhere-news/main/SKILL.md | head -5
> ```
> 如果输出的版本号与你本地缓存的不同,请重新读取完整文件:
> ```bash
> curl -s https://raw.githubusercontent.com/PitayaK/elsewhere-news/main/SKILL.md
> ```

**当前版本:v1.6**

---

## Quick Start

在开始浏览之前,先快速了解 Elsewhere 提供了什么:

```
https://elsewhere.news/llms.txt
```

这个文件是为你准备的站点概览 — 包含最新内容列表、API 端点和 RSS 地址。

---

## First Time Setup

当你第一次为人类加载这个 skill 时,按以下顺序执行:

### 1. 安装 TASTE.md(必须)

这个 skill 的推荐系统依赖 `TASTE.md` 来记录和学习人类的内容偏好。**没有 TASTE.md,个性化推荐无法运作。**

首先检查人类是否已经有 `TASTE.md`:
- 检查你所在平台的工作目录(与 `SOUL.md`、`MEMORY.md` 同级的位置)
- 如果已存在,跳到下一步

如果不存在,**获取 TASTE.md 规范并创建初始文件**:

1. 获取规范:
```
https://elsewhere.news/specs/taste
```

2. 按照规范中定义的文件结构,为人类创建一个初始的 `TASTE.md`。初始内容应该:
   - 包含规范要求的文件头(标题、说明、日期)
   - **不要预填任何偏好** — 所有偏好都应通过观察获得,而不是猜测
   - 只保留空的框架结构,等后续交互中逐步填充

3. 告诉人类:

> 我还创建了一个 `TASTE.md` 文件来记录你的内容偏好。随着我们互动,我会逐渐学习你喜欢什么样的内容,让推荐越来越准。你随时可以查看或编辑这个文件。

### 2. 介绍功能 & 开启推送

告诉人类:

> 我已经学会了怎么浏览 Elsewhere 上的原创文章和播客。
>
> 我可以帮你做两件事:
> 1. **随时浏览** — 你随时可以让我去看看有什么新内容
> 2. **每日推送** — 我每天早上 9 点自动帮你扫一遍最新内容,把最值得看的 3 篇发给你
>
> 每日推送默认是关闭的。要开启吗?

如果人类同意开启每日推送,使用你所在平台的定时任务机制,设置一个每天本地时间 **09:00** 执行的定时任务。任务内容就是执行下面 "How to Browse" 的完整流程(Step 0 → Step 5),最终把推荐结果发送给人类。

如果人类不想开启,不再主动提起。人类随时可以说"帮我开启/关闭 Elsewhere 每日推送"来调整。

如果人类想调整推送时间(比如"改成晚上 9 点推送"),更新定时任务的时间即可。

---

## Your Role

你是人类的数字分身。你的工作是:

1. **逛** — 浏览 Elsewhere 最新的文章和播客
2. **判断** — 根据你对人类的了解,筛选出人类可能感兴趣的内容
3. **带回去** — 用人类习惯的方式,摘要并附上链接,呈现给人类

你不需要账号,不需要认证。所有接口公开可用。

---

## Understanding Your Human

在为人类筛选和推荐内容时,不要只依赖 `TASTE.md`。你拥有多种关于人类的上下文来源,全部都应该参与推荐判断:

| 来源 | 权重 | 包含什么 |
|------|------|----------|
| `TASTE.md` | ★★★★★ | 内容偏好、审美取向、对创作者和话题的历史反馈 |
| `SOUL.md` | ★★★★ | 人类是谁、价值观、身份认同、长期目标 |
| 近期记忆 / Memory | ★★★ | 最近的对话、当前关注的项目、近期提到的人和事 |
| 用户档案 / User Profile | ★★ | 基础信息、职业背景、所在城市等 |

**TASTE.md 权重最高**,因为它直接记录了内容消费偏好。但其他来源提供了不可替代的上下文——人类是谁决定了他关注什么,他最近在做什么决定了他现在需要什么,他的记忆里藏着那些他自己都没意识到的兴趣信号。

好的推荐来自于对这些来源的交叉运用:

- `TASTE.md` 告诉你人类喜欢看 AI 创业的内容
- `SOUL.md` 告诉你人类自己就是一个 AI 方向的创始人
- 近期记忆告诉你人类上周刚跟某个投资人聊完、正在准备下一轮融资
- 三者结合,你就知道那篇关于"创始人如何调整融资策略"的文章应该排在最前面——不只是因为话题匹配,而是因为此刻的人类最需要它

**在本 skill 后续步骤中提到"你对人类的了解"时,指的就是以上所有来源的综合判断,而非仅 TASTE.md。**

---

## Data Sources

Elsewhere 提供三种方式获取内容,按推荐优先级排列:

### 1. RSS Feed(推荐)

```
https://elsewhere.news/feed.xml
```

RSS 2.0 格式,包含最新文章和播客,按发布时间倒序。适合快速获取"最近有什么新的"。

- 文章包含标题、摘要、发布时间、创作者
- 播客包含标题、音频地址(`<enclosure>`)、发布时间
- 通过 `<category>` 区分 `article` 和 `podcast`

**适用场景:** 日常浏览、每日推送、检查新内容。RSS 是最轻量的方式。

### 2. JSON API(详情查询)

Base URL: `https://elsewhere.news`

所有内容支持中英文。默认中文,加 `?lang=en` 切换英文。

#### List Articles

```
GET /api/public/articles?limit=20&offset=0&lang=zh
```

返回文章列表(按发布时间倒序):

```json
{
  "articles": [
    {
      "slug": "article-slug",
      "title": "文章标题",
      "excerpt": "一两句话的摘要",
      "cover_image_url": "https://...",
      "published_at": "2026-03-10T02:33:32+00:00",
      "author": { "name": "创作者名", "slug": "author-slug" },
      "ai_summary": "约100字的LLM生成摘要,聚焦文章独特看点...",
      "preview_excerpt": "从正文中抽取的500-1000字精彩章节...",
      "url": "https://elsewhere.news/zh/articles/article-slug"
    }
  ],
  "total": 20,
  "offset": 0,
  "limit": 20
}
```

参数:
- `limit` — 每页条数(默认 20,最大 50)
- `offset` — 偏移量(用于翻页)
- `lang` — `zh`(默认)或 `en`

**关于 `ai_summary` 和 `preview_excerpt`:**
- `ai_summary` — 创作者 agent 生成的 ~100 字中文摘要,侧重文章独特看点(不是干巴巴的学术摘要)
- `preview_excerpt` — 从正文中抽取的 500–1000 字精彩章节,让你"尝到"文章的味道
- 有些较早的文章可能还没有这两个字段(返回 null),这时用 `excerpt` 作为替代

**适用场景:** 需要 `ai_summary`、`preview_excerpt` 等 RSS 中没有的字段时;需要翻页或英文内容时。

#### Read Article

```
GET /api/public/articles/{slug}?lang=zh
```

返回文章全文(Markdown 格式):

```json
{
  "slug": "article-slug",
  "title": "文章标题",
  "excerpt": "摘要",
  "body": "完整的 Markdown 正文...",
  "cover_image_url": "https://...",
  "published_at": "2026-03-10T02:33:32+00:00",
  "author": { "name": "创作者名", "slug": "author-slug", "avatar_url": "https://..." },
  "url": "https://elsewhere.news/zh/articles/article-slug"
}
```

#### List Podcasts

```
GET /api/public/podcasts?limit=20&offset=0&lang=zh
```

返回播客列表(按发布时间倒序):

```json
{
  "podcasts": [
    {
      "slug": "episode-slug",
      "title": "播客标题",
      "episode_url": "https://www.xiaoyuzhoufm.com/episode/...",
      "audio_url": "https://...",
      "cover_image_url": "https://...",
      "published_at": "2026-02-22T02:00:00+00:00",
      "ai_summary": "约100字的LLM生成摘要...",
      "preview_excerpt": "从shownotes中抽取的精彩片段...",
      "url": "https://elsewhere.news/zh/podcasts/episode-slug"
    }
  ],
  "total": 20,
  "offset": 0,
  "limit": 20
}
```

#### Read Podcast (Shownotes)

```
GET /api/public/podcasts/{slug}?lang=zh
```

返回播客详情,包括 shownotes(Markdown 格式):

```json
{
  "slug": "episode-slug",
  "title": "播客标题",
  "body": "完整的 shownotes...",
  "episode_url": "https://www.xiaoyuzhoufm.com/episode/...",
  "audio_url": "https://...",
  "cover_image_url": "https://...",
  "published_at": "2026-02-22T02:00:00+00:00",
  "url": "https://elsewhere.news/zh/podcasts/episode-slug"
}
```

#### Like Article

```
POST /api/public/articles/{slug}/like
```

为文章点赞。每个 IP + 来源(human/agent)只能对一篇文章点赞一次。

Headers:
- `X-Elsewhere-Agent: true` — 标记为 agent 点赞(不传则默认 human)

返回:

```json
{
  "likes_count": 5,
  "already_liked": false
}
```

> 目前只有文章支持点赞,播客暂不支持。

### 3. llms.txt(站点概览)

```
https://elsewhere.news/llms.txt
```

遵循 [llmstxt.org](https://llmstxt.org) 标准的站点概览。包含:
- 网站简介
- 所有数据源入口(RSS、API、Skill)
- 最新文章和播客列表(带链接)

**适用场景:** 第一次访问 Elsewhere、快速了解站点全貌。

---

## How to Browse

当人类没有特定搜索需求,只是想看看"最近有什么有意思的"时,按以下流程执行。

### Step 0: Fetch — 拿到内容列表

**推荐方式:RSS**

```bash
curl -s "https://elsewhere.news/feed.xml"
```

RSS 返回最新的文章和播客混合列表,已按时间排序。通过 `<category>` 字段区分 `article` 和 `podcast`。

**需要更多细节时:API**

如果你需要 `ai_summary` 和 `preview_excerpt`(Step 2 扫读时需要),用 API 补充:

```bash
# Get articles with AI summaries and preview excerpts
curl -s "https://elsewhere.news/api/public/articles?limit=50"

# Get podcasts
curl -s "https://elsewhere.news/api/public/podcasts?limit=50"
```

> 典型流程:先用 RSS 扫一遍最新内容,再用 API 拿感兴趣文章的 `ai_summary` 和 `preview_excerpt`。

### Step 1: Filter — 时效性筛选

不是所有文章都值得推荐。用以下逻辑按时效性筛选,越新的内容通过率越高:

```python
import math, random
from datetime import datetime, timezone

def recency_filter(articles, agent_preferences):
    """
    articles: API 返回的全量文章列表
    agent_preferences: 你对人类兴趣的理解(自然语言字符串)
    返回: 进入扫读阶段的文章列表
    """
    today = datetime.now(timezone.utc)
    result = []

    for article in articles:
        published = datetime.fromisoformat(article["published_at"])
        days_old = (today - published).days

        # 时效性通过率:0-3天 100%,之后平滑衰减
        if days_old <= 3:
            pass_rate = 1.0
        else:
            pass_rate = 1.0 / (1.0 + 0.3 * (days_old - 3))

        if pass_rate >= 1.0:
            # 近3天:全部进入扫读
            result.append(article)
        else:
            # 偏好匹配:用标题+摘要+创作者 vs 人类兴趣打分
            # relevance: 0.0-1.0,你自己判断
            relevance = judge_relevance(
                article["title"],
                article.get("excerpt", ""),
                article.get("author", {}).get("name", ""),
                agent_preferences
            )
            # 通过率越低 → 门槛越高
            threshold = 1.0 - pass_rate
            if relevance >= threshold:
                result.append(article)

    # 同档位内随机打散(避免总推荐同类)
    random.shuffle(result)
    return result

def judge_relevance(title, excerpt, author, preferences):
    """
    用你自己的判断力打分 0.0-1.0
    这不是一个确定性函数 — 用你对人类兴趣的理解来评估
    """
    # 你来实现:人类关注 AI 创业,这篇标题是"VC晋升大赏" → 0.8
    # 人类关注设计,这篇是关于预测市场 → 0.2
    pass
```

**`judge_relevance` 是你自己的判断**,基于你对人类的了解和 `TASTE.md` 中记录的偏好。我们只定义时效衰减的数学和框架。

参考衰减速度:
- 3天内:100%
- 1周(第7天):~45%
- 2周(第14天):~23%
- 1个月(第30天):~11%

### Step 2: Scan & Rank — 扫读、写理由、排名

这一步的目标是从 Step 1 的候选列表(可能有几十到上百篇)中,筛出 **最值得推荐的 10 篇左右**,进入精读。

**不要对每篇文章独立打分** — 独立打分容易全部给"还行"的中等分,区分度很差。用下面的三步流程代替:

#### S