# Coin News Openclaw

> Collect and summarize cryptocurrency and coin market news with OpenClaw-friendly workflows. Use when users request coin news, crypto news, token-specific news, daily market briefings, or a replacement for Dify-based news aggregation. Supports configurable sources, keyword scoring, source weighting, deduplication, and structured JSON output for downstream tuning.

- Skill: `feed-mob-agent-skills/coin-news-openclaw` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add feed-mob-agent-skills/coin-news-openclaw`
- Raw SKILL.md: https://api.skillmd.com/api/skills/feed-mob-agent-skills/coin-news-openclaw/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: feed-mob (https://skillmd.com/u/feed-mob-agent-skills)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/feed-mob-agent-skills/coin-news-openclaw

---


# Coin News OpenClaw

Collect cryptocurrency news from configurable sources, normalize the articles, score relevance, and return a structured digest that can be tuned over time.

## Use This Skill When

- The user wants a daily or on-demand crypto news digest
- The user wants news for a specific token or narrative
- The user wants to replace or compare against an existing Dify news workflow
- The user wants a configurable pipeline that PA can tune later

## Workflow

1. Read `references/sources.yaml` to determine enabled sources and source weights.
2. Read `references/scoring.yaml` to determine token aliases, topic keywords, negative keywords, and ranking logic.
3. If deterministic collection is needed, run `scripts/fetch_coin_news.py`.
4. Filter the normalized article list to the user’s requested scope.
5. Rank articles using source weight, keyword matches, recency, and duplicate suppression.
6. Return a short digest or a structured JSON array for downstream workflow use.

## CLI Usage

```bash
# Basic usage - JSON output (default)
python3 scripts/fetch_coin_news.py --days 1

# ⭐ Markdown output with clickable links (recommended for reading)
python3 scripts/fetch_coin_news.py --days 1 --format markdown

# Limit number of articles
python3 scripts/fetch_coin_news.py --days 1 --limit 10 --format markdown

# Filter by specific tokens
python3 scripts/fetch_coin_news.py --days 1 --token BTC --token ETH

# Filter by specific topics
python3 scripts/fetch_coin_news.py --days 1 --topic etf --topic regulation

# Adjust token fetch limit (default: 100, max: 250)
python3 scripts/fetch_coin_news.py --days 1 --token-limit 50

# Disable dynamic token fetching (use only YAML config)
python3 scripts/fetch_coin_news.py --days 1 --no-dynamic-tokens
```

## Output Formats

### JSON (default)
```bash
python3 scripts/fetch_coin_news.py --days 1
```
Returns structured JSON for programmatic use.

### Markdown (recommended for reading)
```bash
python3 scripts/fetch_coin_news.py --days 1 --format markdown
```
Returns formatted markdown with **clickable links** for each article:

```markdown
## 1. [Article Title](https://example.com/article)
**来源**: CoinDesk | **时间**: 2026-03-25 | **分数**: 78
**Token**: BTC, ETH
**主题**: etf

Summary text here...
---
```

## Time Range

- Default: last 24 hours
- Support explicit day windows such as:
  - recent 2 days
  - recent 3 days
  - recent 7 days
- Support common Chinese requests such as:
  - 最近2天
  - 最近3天
  - 最近一周
  - 过去7天
- For deterministic runs, prefer `--days <n>` over manually converting to hours.
- If both `--days` and `--hours` are provided, `--days` takes precedence.
- Recommended mapping:
  - 最近2天 -> `--days 2`
  - 最近3天 -> `--days 3`
  - 最近一周 -> `--days 7`
  - 过去7天 -> `--days 7`

## Dynamic Token Fetching

The skill automatically fetches the top 100 tokens (by market cap) from CoinGecko API and merges them with the YAML config:

- **Source**: CoinGecko API (free, no API key required)
- **Cache TTL**: 24 hours (stored in `scoring.yaml` under `dynamic_tokens`)
- **Merge logic**: YAML `token_aliases` overrides dynamic tokens (for manual tuning)
- **Disable**: Use `--no-dynamic-tokens` to use only YAML config

## Output Contract

Prefer this JSON structure for workflow handoff:

```json
[
  {
    “title”: “Example headline”,
    “url”: “https://example.com/article”,
    “source”: “CoinDesk”,
    “published_at”: “2026-03-20T09:00:00Z”,
    “summary”: “One paragraph summary.”,
    “score”: 78,
    “matched_topics”: [“bitcoin”, “etf”],
    “matched_tokens”: [“BTC”],
    “duplicate_group_key”: “normalized-title-key”
  }
]
```

## Tuning Rules

- Do not hardcode source lists in prompts. Update `references/sources.yaml`.
- Do not hardcode scoring logic in prompts. Update `references/scoring.yaml`.
- Prefer established publications before secondary aggregators.
- If the user asks for “latest” or “today”, prioritize the last 24 hours and show exact dates.

## References

- `references/sources.yaml`: source registry and weights
- `references/scoring.yaml`: token aliases, topic keywords, penalties, thresholds
- `scripts/fetch_coin_news.py`: deterministic RSS collector and scorer

