Track finance headlines, daily market radar, and source-backed financial news through Fin Pulse.
60
71%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./plugins/fin-pulse/SKILL.mdUse this skill whenever the user asks about finance headlines, daily
briefs, hot-topic keyword alerts, or scheduled IM pushes from the
fin-pulse plugin. The plugin exposes seven agent tools that let you
create ingest / daily_brief / hot_radar tasks, inspect their status,
paginate tasks, cancel a running job, read / write the plugin config,
and search the article index by keyword / source / days window.
Call fin-pulse tools when the user says (or implies):
fin_pulse_search_newsfin_pulse_create(mode="daily_brief", session=...)fin_pulse_create(mode="hot_radar", ...)
targets=[{"channel":"feishu","chat_id":"..."}]fin_pulse_search_news(q="X")fin_pulse_create(mode="ingest")fin_pulse_status(task_id="Y")fin_pulse_listfin_pulse_settings_setfin_pulse_settings_getDo not call these tools when the user only wants general finance commentary; prefer web search for commentary and fin-pulse only for their plugin state.
fin_pulse_createCreates + runs a task synchronously (returns when done). mode is
required and must be one of ingest / daily_brief / hot_radar.
Pass extra params either nested under params or flat — both work.
Canonical shapes:
{"mode": "ingest", "since_hours": 24}
{"mode": "daily_brief", "session": "morning", "since_hours": 12, "top_k": 20, "lang": "zh"}
{"mode": "hot_radar", "rules_text": "+美联储\n+降息\n!传闻",
"targets": [{"channel": "feishu", "chat_id": "oc_xxx"}],
"since_hours": 24, "cooldown_s": 600}since_hours: int in [1, 72] for ingest / daily_brief,
[1, 168] for hot_radar — out of range values clamp silently.top_k: int in [1, 60], defaults to 20.session: morning / noon / evening. Reject anything else
instead of guessing.min_score: float in [0, 10]. Optional.The returned envelope always has ok: bool and either a typed
payload (task_id, digest, result) or an error / hint.
Never retry on invalid_mode / missing_rules — surface to the user.
fin_pulse_status(task_id) / fin_pulse_cancel(task_id)status returns the full task row (params + progress +
error_kind if failed).cancel is idempotent and safe to call twice.fin_pulse_listlimit clamps to [1, 200] default 50. Filter by mode / status
as needed. Use it to confirm state before suggesting a fresh
ingest.
fin_pulse_settings_get / fin_pulse_settings_setget returns a redacted map — any key containing api_key,
token, webhook, secret, or password is masked as ***.
Never surface the *** value to the user as real data.
set takes {"updates": {k: v}} where values are stringified on
store. Don't write large JSON blobs through this tool.
fin_pulse_search_newsThe daily-driver search tool:
{"q": "美联储", "days": 1, "min_score": 6, "limit": 20}
{"source_id": "wallstreetcn", "days": 7, "sort": "score"}q supports plain LIKE matching today; the +must / !exclude
DSL is evaluated by hot_radar, not by this search — don't
promise that syntax here.days clamps to [1, 90].items sorted by time (default) or AI score
(sort=score). Each item has title, url, summary,
source_id, ai_score, fetched_at, published_at.ok=false, quote the error kind plus any
hint — don't invent explanations.fin_pulse_create(mode="ingest") first or
widen the days window.digest.stats (total_selected,
source_breakdown). Surface the count so the user knows whether
the digest is meaningful.fp-<uuid>; include it in your reply so
the user can reference it later.fin_pulse_search_news(q="美联储", days=1, min_score=5, limit=10).items.length < 3, follow up with
fin_pulse_create(mode="ingest", since_hours=6) and retry.fin_pulse_create(mode="daily_brief", session="morning", since_hours=12, top_k=20, lang="zh") → get task_id + digest.digest.title and article count so the user
can confirm.channel + chat_id 告诉我我再帮你补
发 hot_radar 任务推一次。" (Do not try to call
dispatch/send from the tool surface — the REST surface is the
right entry point and requires an explicit chat_id.)fin_pulse_settings_set({"updates": {"radar_rules": "+美联储\n+降息\n!传闻"}}).POST /schedules) or an explicit
fin_pulse_create(mode="hot_radar", ...) with targets.dispatch/send or hot_radar/run without an explicit
chat_id from the user — IM pushes are user-visible and spamming
them is a support incident.fin_pulse_settings_get reveals newsnow.mode=off, don't
pretend NewsNow data is present.2ede7c6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.