Loading...
Loading...
Manage daily briefing pipelines (日报/简报) — run briefings, check status, list domains, trigger keyword evolution. Use when the user asks about daily briefings (日报/简报), news digests (新闻推送), briefing status, adding domains, keyword management (关键词), or content collection.
npx skill4agent add midnightv1/claude-code-feishu briefingpython3 scripts/briefing_run.py <command> [options]# Run full pipeline for a domain
python3 scripts/briefing_run.py run --domain ai-drama [--date 2026-03-03]
# Run keyword evolution only
python3 scripts/briefing_run.py evolve --domain ai-drama [--date 2026-03-03]
# Check last run status
python3 scripts/briefing_run.py status --domain ai-drama
# List all configured domains
python3 scripts/briefing_run.py domains
# Run collection step only
python3 scripts/briefing_run.py run --domain ai-drama --step collect--config config.yaml~/briefing/
config/
email.json # Global fallback email config (only user's own email)
engine/
collector.py # Domain-aware RSS/API collector
notify.py # Domain-aware email sender
prompt_init.py # Prompt initialization and evolution
templates/
generate_base.md # Base template for generation prompts
review_base.md # Base template for review prompts
domains/<name>/
domain.yaml # Core config: models, distribution, keyword_evolution, schedule
sources.yaml # Keywords (by supply-chain layer) + source definitions (RSS, API)
config/
email.json # Domain-specific email config (overrides global)
prompts/
generate.md # Gemini generation prompt
review.md # Claude review prompt
data/
today_context.json # Latest collector output
keyword_feedback.json # Per-keyword hit stats (30-day rolling)
keywords_dynamic.yaml # Auto-evolved keywords (candidate/active/deprecated)
keywords_meta.json # Evolution history + idempotency
run_status.json # Latest pipeline run status
output/ # Final briefing markdown filesemail.jsondomains/<name>/config/email.json~/briefing/config/email.json{
"sender": "user@example.com",
"app_password": "smtp_app_password",
"recipients": ["a@example.com", "b@example.com"],
"cc": ["c@example.com"],
"smtp_host": "smtp.qq.com",
"smtp_port": 465
}domains/<name>/config/email.json~/briefing/domains/<new-name>/domain.yamlsources.yamlprompts/generate.mdprompts/review.mdbriefing:<new-name>models:
generate: { model: "3-Flash", thinking: medium, fallback_model: sonnet }
review: { enabled: true, model: sonnet }
distribution:
email: { enabled: true, subject_template: "{name} | {date}" }
feishu: { enabled: true, chat_id: "oc_xxx" }
keyword_evolution:
enabled: true
max_auto_additions_per_cycle: 5
schedule: "0 8 * * *"| Change | Needs restart? |
|---|---|
Pipeline logic ( | No — runs as subprocess |
| Keyword evolution logic | No — same file |
| No — read fresh each run |
| No — read fresh by collector |
| This SKILL.md | No |
| Yes — but it never changes |
| Yes — tell user to send |
~/briefing/domains/| Handler | Domain | Cron | Description |
|---|---|---|---|
| (default domain) | | Daily briefing for the default domain |
| | user-defined | Per-domain briefing |
briefingbriefing.default_domainbriefing:<name>briefing_run.py