# Vv Horizon Briefing

> Fetch tech news from configured sources, score and filter with AI, generate daily briefing with deep analysis

- **Type:** Skill
- **Install:** `agentstack add skill-yubeizuihoudedanchun911-vv-horizon-briefing-vv-horizon-briefing`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Yubeizuihoudedanchun911](https://agentstack.voostack.com/s/yubeizuihoudedanchun911)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Yubeizuihoudedanchun911](https://github.com/Yubeizuihoudedanchun911)
- **Source:** https://github.com/Yubeizuihoudedanchun911/vv-horizon-briefing

## Install

```sh
agentstack add skill-yubeizuihoudedanchun911-vv-horizon-briefing-vv-horizon-briefing
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Horizon Briefing

Generate a daily tech briefing from configured data sources (GitHub, HackerNews, RSS, Reddit, Telegram). Fetches content via a Python script, then uses AI to score, filter, summarize, and deeply analyze top items. No external AI API key required.

## Trigger

User types `/vv-horizon-briefing` or asks to "generate a briefing" / "run horizon briefing".

## Phase 1: Environment Check

1. Locate `config.json` in the current working directory. If not found:
   - Show the user two options:
     - **A)** Create a custom config — read `references/config-schema.md` from this skill directory and show the example
     - **B)** Use the built-in preset — copy `assets/presets/default-config.json` to `config.json` (LLM/Agent engineering sources: HackerNews, Reddit r/LocalLLaMA + r/MachineLearning, 量子位, 新智元, Simon Willison, Hugging Face, LangChain, ArXiv cs.AI, Google Cloud Blog, GitHub releases for anthropics/anthropic-sdk-python and langchain-ai/langchain)
   - If user chooses B, copy the preset file and continue
   - Stop until config exists
2. Check Python deps: `python3 -c "import httpx; import feedparser; import bs4; print('OK')"`
3. If deps are missing, tell the user and ask if they want to run `scripts/install_deps.sh`. If the user declines, stop and explain manual install.

## Phase 2: Fetch Data

1. Ask the user: "抓取最近几天的内容？（默认 3 天，输入数字或直接回车）"
2. Read `config.json` and extract `output.output_dir` (if present). Determine the base output directory:
   - If `output.output_dir` is set, use it as `{base_dir}`
   - Otherwise, use `./data` as `{base_dir}`
3. Determine today's date as `{YYYY-MM-DD}`. Create the output directory `{base_dir}/{YYYY-MM-DD}/` if it does not exist.
4. Run with the user's input (default 3 if no input):
   `python3 /scripts/fetch.py --config config.json --days N`
5. If the script exits with a non-zero code or `fetched.json` is not created, report the error output to the user and stop — do not proceed to Phase 3.
6. Move `fetched.json` to `{base_dir}/{YYYY-MM-DD}/fetched.json`. Read it from that path. The file is a JSON object with an `items` array and a `config_snapshot` object.
7. Report item count and source count to the user.

## Phase 3: Score and Filter

Read `references/scoring-criteria.md` from this skill directory before scoring.

Score each item 0–10 using the 5-dimension rubric (新颖性, 影响力, 技术深度, 社区信号, 时效性 — 2 points each). Sort descending, take top N from `config_snapshot.top_n` (default 10).

- **For 100+ items:** score in batches of ~30. After all batches are complete, merge all scores into one list, sort descending, and take the global top N. In case of a tie, prefer the item with higher 时效性.
- **If total items ≤ top_n:** skip the "other items" section in the summary (Phase 4) — there are no non-top items to list.

Output a scoring summary table to the user showing rank, title, and score.

## Phase 3.5: Source Analysis

After scoring, before generating summaries:

1. Count items and average score per source
2. Identify the top source (most high-scoring items)
3. Extract 3 trending themes from top-N item titles and content
4. Compose the `{source_analysis}` paragraph:

```
共抓取 {total} 条，来自 {source_count} 个源。
最活跃源：{top_source}（{n} 条，均分 {avg}/10）
今日热点主题：{theme_1}、{theme_2}、{theme_3}
```

## Phase 4: Generate Summary

Read `references/summary-writing-guide.md` from this skill directory before writing.

For each language in `config_snapshot.languages`, generate a summary following `assets/templates/summary.md`:
- Language handling: `"en"` = English, `"zh"` = Chinese
- **CRITICAL Pangu Spacing Rule for zh:** Every CJK character MUST have a space on both sides when adjacent to any ASCII character (letters, digits, punctuation, symbols). [Note: if the ASCII character is a single digit, then do not insert space.] This applies to ALL text: headings, body, links, metadata, source analysis. Examples: `Anthropic 发布了 Claude 4` (not `Anthropic发布了Claude4`), `评分 8/10` (not `评分8/10`). No exceptions — even in markdown link text and bullet points. After writing the summary, scan every line and fix any violations before writing the file.
- Each item gets a `{one_sentence_abstract}` — one complete sentence, not a title rewrite. **CRITICAL: Every abstract MUST contain at least one specific fact — a number, version, percentage, metric, or named entity.** Vague abstracts like "某公司发布了新模型" FAIL — write "某公司发布了 405B 参数的模型 X v3.1，性能提升 23%". If the source content is too short to extract specific data, infer from title keywords or note the significance explicitly (e.g. "首次开源" counts as a specific claim).
- Include the `{source_analysis}` paragraph from Phase 3.5
- For `{other_items_by_category}`: take all scored items NOT in top-N, group them by category (infer category from title/content, e.g. 模型发布、工具框架、研究论文、行业动态), render each group as a markdown section with bullet links: `- [{title}]({url}) · {source_type} · {score}/10`

Write to: `{base_dir}/{YYYY-MM-DD}/summary-{lang}.md`

## Phase 4.5: Pangu Spacing Self-Check

After writing `summary-zh.md` (if `zh` is in config languages), run a self-check:

1. Re-read the written `summary-zh.md` file
2. Scan every line for CJK characters directly adjacent to ASCII characters without a space
3. Fix all violations: insert a space between every CJK-ASCII boundary (both directions) [Note: if the ASCII character is a single digit, then do not insert space.]
4. Rewrite the corrected version to the same file path

For articles in Phase 5, the Pangu spacing rule is embedded in each sub-agent prompt — no separate check needed here.

## Phase 5: Deep Analysis (Parallel)

Before dispatching, read both reference files from this skill directory:
- `references/article-writing-guide.md` → store as `{writing_guide}`
- `assets/templates/article.md` → store as `{article_template}`

Dispatch one independent agent per top-N item using the Agent tool. All agents run concurrently — do NOT generate articles yourself, delegate entirely.

### Sub-agent prompt template

Construct the following prompt for each item (substitute all placeholders with actual values, including the full contents of `{writing_guide}` and `{article_template}`):

---
You are writing a deep analysis article for a tech briefing.

**Pangu Spacing Rule (CRITICAL):** Every CJK character MUST have a space on both sides when adjacent to any ASCII character (letters, digits, punctuation, symbols). [Note: if the ASCII character is a single digit, then do not insert space.] Examples: `Anthropic 发布了 Claude 4` (not `Anthropic发布了Claude4`), `评分 8/10` (not `评分8/10`). No exceptions — apply to headings, body text, inline code references, and all content. Scan the entire article for violations before writing the file.

**Item data:**
- Title: {title}
- URL: {url}
- Source: {source_type} · {sub_source}
- Score: {score}/10
- Published: {published_time}
- Content: {content}
- Comments: {comments}  ← omit this line entirely if no comments data

**Article template** (fill every placeholder section):

{article_template}

**Writing guide** (follow strictly):

{writing_guide}

**Output:** Write the completed article to:
`{base_dir}/{YYYY-MM-DD}/articles/{N}-{title_slug}-{lang}.md`

- `{N}` = rank number (1-based)
- `{title_slug}` = lowercase title, spaces→hyphens, non-alphanumeric removed, truncated to 50 chars
- `{lang}` = language code from config (e.g. `zh`)

Do not return the article text in your response. Write the file and confirm the path written.
---

### Dispatch

Call Agent once per top-N item with the above prompt (all calls in a single message, in parallel). Wait for all agents to complete before proceeding to Phase 6.

Collect each agent's reported output path and any errors for the Phase 6 report.

## Phase 6: Completion Report

- Total items fetched, items selected, files generated (list paths), any errors

## Notes

- The fetch script handles all network requests. Do not use WebFetch or curl for source data.
- All AI analysis is done by Claude in-context. No external AI API calls.
- If 0 items are fetched, skip phases 3–5.
- RSS `content` fields may contain multiple article snippets separated by `--- From rss ---`. When scoring or writing articles, use only the text before the first separator as the primary content.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Yubeizuihoudedanchun911](https://github.com/Yubeizuihoudedanchun911)
- **Source:** [Yubeizuihoudedanchun911/vv-horizon-briefing](https://github.com/Yubeizuihoudedanchun911/vv-horizon-briefing)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-yubeizuihoudedanchun911-vv-horizon-briefing-vv-horizon-briefing
- Seller: https://agentstack.voostack.com/s/yubeizuihoudedanchun911
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
