/install event-countdown-pro
Skill: Event Countdown
When to use
- User wants a daily reminder leading up to a company's next price-moving event.
- User says "set up a countdown for NVIDIA".
- User says "notify me 1 week before Apple's next event every day at 10 AM".
- User says "remind me daily before Tesla's financial release".
- User says "set up an AGM countdown for Shell".
- User says "notify me before Microsoft's product launch".
- User wants to track an upcoming corporate event with daily price + fundamentals updates.
When NOT to use
- User just wants the current stock price → use
stock-price-checker-pro - User just wants fundamentals → use
stock-fundamentals - User wants a generic reminder (not event-related) → use
remind-me - User wants a full research report right now → use
equity-research - User wants to check the earnings date without scheduling → use
stock-price-checker-pro
Overview
This skill discovers the next price-moving corporate event for a stock and creates a daily countdown to it. It scans two data sources in priority order:
| Priority | Source | Data | Examples |
|---|---|---|---|
| 1 | yfinance (Python script) | Earnings dates, dividend dates | 2026-07-30 (AAPL earnings) |
| 2 | Web search (agent) | AGMs, product launches, investor days, FDA decisions, splits, M&A votes — any event likely to move the stock price | 2026-06-10 (NVIDIA GTC) |
Once the event is found and confirmed, a daily cron fires at the specified time, running stock-price-checker-pro + stock-fundamentals every day leading up to the event.
Conversation Flow
Step 1 — Resolve the company name to a ticker
Map the user's company name to its ticker symbol. Use the same approach as stock-price-checker-pro: the LLM agent resolves common company names to their Yahoo Finance tickers.
| Company | Ticker |
|---|---|
| NVIDIA | NVDA |
| Apple | AAPL |
| Tesla | TSLA |
| Microsoft | MSFT |
| Amazon | AMZN |
| Google / Alphabet | GOOGL |
| Meta / Facebook | META |
| Pfizer | PFE |
| Rheinmetall | RHM.DE |
| SAP | SAP.DE |
| ASML | ASML.AS |
| Shell | SHEL.L |
If unsure, ask: "Just to confirm — that's the ticker \x3CTICKER>, right?"
Step 2 — Collect lead time and notification time
Ask the user two questions. Apply defaults if they do not specify.
| Question | Default | Options |
|---|---|---|
| How many weeks before the event? | 1 week (7 days) | 1 or 2 weeks |
| At what time? (with timezone) | 10 AM CET (Europe/Paris) | Any time in any timezone |
Examples of user input and how to parse it:
- "1 week, 9 AM New York time" → lead_days=7, hour=9, minute=0, tz=America/New_York
- "2 weeks, 8 AM London" → lead_days=14, hour=8, minute=0, tz=Europe/London
- "just use defaults" → lead_days=7, hour=10, minute=0, tz=Europe/Paris
- (no lead time or time given) → apply defaults, confirm with user
Step 3 — Discover the next price-moving event
Scan sources in priority order. Stop as soon as a confirmed event is found.
3a — Check yfinance (earnings + dividends)
Run the local script to get the next earnings date:
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py \x3CTICKER>
The command outputs:
Ticker: NVDA
Company: NVIDIA Corporation
Next Earnings Date: 2026-06-15
If the output is valid (no Error:), present it to the user:
I found the next event for \x3CCOMPANY> (\x3CTICKER>): 📊 Earnings Release — \x3CEARNINGS_DATE> (source: Yahoo Finance)
Earnings releases are the most common price-moving events. Use this?
If user says yes → set event_type = "Earnings Release", event_date = \x3CEARNINGS_DATE>, proceed to Step 4.
If user says no (or user specifically mentioned a different event type in their request), proceed to 3b.
Also check for upcoming dividend dates from the script output or from a quick yf.Ticker call. If a dividend ex-date is coming up sooner than earnings:
I also noticed an upcoming Ex-Dividend Date on \x3CDIVIDEND_DATE>. Would you prefer to track that instead?
If the script returns an error (no earnings date found), proceed directly to 3b.
3b — Web search for other events
Search the web broadly for the company's upcoming events that could move the stock price. Use queries like:
"\x3CCOMPANY_NAME> upcoming events \x3CCURRENT_YEAR>""\x3CCOMPANY_NAME> investor day \x3CCURRENT_YEAR>""\x3CCOMPANY_NAME> product launch event \x3CCURRENT_YEAR>""\x3CCOMPANY_NAME> AGM annual general meeting \x3CCURRENT_YEAR>""\x3CCOMPANY_NAME> FDA decision date \x3CCURRENT_YEAR>"(for pharma/biotech stocks)"\x3CCOMPANY_NAME> shareholder vote \x3CCURRENT_YEAR>"
Look for events in the near future. Event types to watch for:
| Event Type | What it is | Price impact |
|---|---|---|
| Earnings Release | Quarterly financial results | High — the #1 price mover |
| Product Launch / Keynote | New product announcement (e.g. Apple WWDC, NVIDIA GTC, Tesla AI Day) | High — can swing 5-10% |
| Investor Day | Management presents strategy and long-term outlook to investors | Medium-High — often moves on guidance updates |
| AGM (Annual General Meeting) | Yearly shareholder gathering where leadership presents results and shareholders vote on key proposals | Medium — can move if major votes or surprises |
| FDA / Regulatory Decision | Drug approval, regulatory ruling (pharma, biotech, energy) | Very High — binary events, can swing 20%+ |
| Ex-Dividend Date | Cutoff date to receive the next dividend payment | Low-Medium — routine but relevant for income investors |
| Stock Split | Share split (e.g. 10-for-1) | Medium — often runs up into the split date |
| M&A Vote / Ruling | Shareholder vote or regulatory approval on a merger | Very High — can swing 15-30% |
| Analyst Day | Company hosts analysts for deep dives | Medium — similar to investor day |
Pick the most impactful, soonest event. Present it to the user:
I found the next price-moving event for \x3CCOMPANY> (\x3CTICKER>): 🗓 \x3CEVENT_TYPE> — \x3CEVENT_DATE> (source: \x3CSOURCE_URL>)
Is this the event you want to track? If not, I can search for others.
If multiple events are close together, list them and let the user pick:
I found multiple upcoming events for \x3CCOMPANY> (\x3CTICKER>):
- 📊 Earnings Release — \x3CDATE1> (source: Yahoo Finance)
- 🎤 Investor Day — \x3CDATE2> (source: \x3CURL>)
- 🏛 AGM — \x3CDATE3> (source: \x3CURL>)
Which one should I set up the countdown for?
If the user confirms, set event_type and event_date.
If no event can be found at all, tell the user:
I couldn't find any upcoming price-moving events for \x3CCOMPANY>. Would you like to provide a date and event type manually? (Format: YYYY-MM-DD, Event Type)
If the user provides a manual date, confirm and proceed.
Step 4 — Compute the reminder schedule
- reminder_start_date =
event_date−lead_days(7 or 14) - cron_expression =
cron:\x3Cminute> \x3Chour> * * *(daily at the specified time in the user's timezone)- e.g. 10 AM →
cron:0 10 * * * - e.g. 9:30 AM →
cron:30 9 * * *
- e.g. 10 AM →
⚠️ If reminder_start_date is today or in the past, start the daily reminders today (the cron will fire at the next occurrence of the specified time). Mention this to the user:
The event date is close — reminders will start today at 10 AM CET.
⚠️ If reminder_start_date is after the event date (the event is very soon), tell the user:
The event date is less than your chosen lead time away. Daily reminders may not be useful. Do you still want to proceed?
⚠️ If the event date is today, say:
The event is today! Would you like me to run a full briefing now instead of scheduling a reminder?
Step 5 — Create the daily cron reminder via remind-me
The cron message must contain clear instructions for the agent that fires it each day. The template uses the discovered \x3CEVENT_TYPE> (e.g. "Earnings Release", "AGM", "Product Launch", "Investor Day") and the confirmed \x3CEVENT_DATE>.
The message tells the agent to:
- Check if today is on or after the event date
- If so: send a final event-day message, run
stock-price-checker-pro+stock-fundamentals, and cancel this reminder - If not: compute days remaining, run
stock-price-checker-pro+stock-fundamentals, and send a countdown briefing
Cron template (all event types)
uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
"\x3CTICKER> \x3CSHORT_EVENT_TYPE> Countdown - Daily \x3CHH:MM>" \
"📊 \x3CTICKER> (\x3CCOMPANY>) \x3CEVENT_TYPE> Countdown. Event date: \x3CEVENT_DATE_ISO>.\
\
If today is on or after \x3CEVENT_DATE_ISO>:\
1. Say '🔔 \x3CCOMPANY> (\x3CTICKER>) — \x3CEVENT_TYPE> is TODAY! 🎯'\
2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py \x3CTICKER>\
3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py \x3CTICKER>\
4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\
5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name '\x3CTICKER> \x3CSHORT_EVENT_TYPE> Countdown - Daily \x3CHH:MM>'\
\
If today is before \x3CEVENT_DATE_ISO>:\
1. Compute days_remaining = days between today and \x3CEVENT_DATE_ISO>\
2. Say '🔔 \x3CCOMPANY> (\x3CTICKER>) — \x3CEVENT_TYPE> in {days_remaining} days. Briefing below.'\
3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py \x3CTICKER>\
4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py \x3CTICKER>\
5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:\x3CMINUTE> \x3CHOUR> * * *" \
"\x3Cchannel>" \
"\x3CchatId>" \
"tz:\x3CIANA timezone>"
Template variables:
| Variable | Description | Example |
|---|---|---|
\x3CTICKER> |
Stock ticker | NVDA |
\x3CCOMPANY> |
Full company name | NVIDIA Corporation |
\x3CEVENT_TYPE> |
Human-readable event type | Earnings Release, Product Launch, AGM |
\x3CSHORT_EVENT_TYPE> |
Short label for cron name | Earnings, Product-Launch, AGM |
\x3CEVENT_DATE_ISO> |
Event date in YYYY-MM-DD | 2026-06-15 |
\x3CMINUTE> \x3CHOUR> |
Time from Step 2 | 0 10 for 10:00 AM |
\x3CHH:MM> |
Formatted time for cron name | 10:00 |
⚠️ Critical: Channel, chatId, and timezone resolution follow the same rules as
remind-me(see its SKILL.md). Auto-detect from session context. The timezone passed here (tz:\x3CIANA>) must match the one resolved in Step 2.
Step 6 — Confirm completion
After the cron is created, report back:
✅ Done! Your event countdown is set up: 📊 \x3CTICKER> (\x3CCOMPANY>) 🗓 \x3CEVENT_TYPE>: \x3CEVENT_DATE_ISO> ⏰ Daily briefing at: \x3CHH:MM> \x3CTIMEZONE_LABEL> 🔁 Starting: \x3CREMINDER_START_DATE_ISO> (\x3CDAYS_UNTIL_START> days from now) 📱 Delivered to: This chat
Commands
Fetch the next earnings date (yfinance)
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py \x3CTICKER>
Examples
# US stocks
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py NVDA
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py AAPL
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py TSLA
# European stocks
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py RHM.DE
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py SAP.DE
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py ASML.AS
Output
The script returns three lines:
Ticker: \x3CSYMBOL>
Company: \x3CCOMPANY_NAME>
Next Earnings Date: \x3CYYYY-MM-DD>
Or an error:
Error: \x3Cmessage>
Full Walkthrough
Example 1 — Earnings (NVIDIA, all defaults)
User: "Set up a countdown for NVIDIA"
-
Resolve ticker: NVIDIA →
NVDA -
Apply defaults: 1 week, 10 AM CET → lead_days=7, hour=10, minute=0, tz=Europe/Paris
-
Discover event: Run script → earnings on 2026-06-15. Present to user, user confirms.
-
Compute: event_date=2026-06-15, reminder_start=2026-06-08, cron=
cron:0 10 * * * -
Create cron:
uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
"NVDA Earnings Countdown - Daily 10:00" \
"📊 NVDA (NVIDIA Corporation) Earnings Release Countdown. Event date: 2026-06-15.\
\
If today is on or after 2026-06-15:\
1. Say '🔔 NVIDIA Corporation (NVDA) — Earnings Release is TODAY! 🎯'\
2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\
3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\
4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\
5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name 'NVDA Earnings Countdown - Daily 10:00'\
\
If today is before 2026-06-15:\
1. Compute days_remaining = days between today and 2026-06-15\
2. Say '🔔 NVIDIA Corporation (NVDA) — Earnings Release in {days_remaining} days. Briefing below.'\
3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\
4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\
5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 10 * * *" \
"telegram" \
"\x3CchatId>" \
"tz:Europe/Paris"
- Confirm.
Example 2 — Product Launch (Apple WWDC, 1 week, 9 AM New York)
User: "Set up a countdown for Apple's next event, 1 week before, 9 AM New York"
-
Resolve ticker: Apple →
AAPL -
Parse: lead_days=7, hour=9, minute=0, tz=America/New_York
-
Discover event:
- Run script → earnings on 2026-07-30 (still 2 months away)
- User said "next event" not "earnings", so search web for other events
- Web search finds Apple WWDC 2026 keynote on 2026-06-09
- Present: "I found Apple WWDC 2026 Keynote on 2026-06-09" → user confirms
-
Compute: event_date=2026-06-09, reminder_start=2026-06-02, cron=
cron:0 9 * * * -
Create cron:
uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
"AAPL Product-Launch Countdown - Daily 09:00" \
"📊 AAPL (Apple Inc.) Product Launch Countdown. Event date: 2026-06-09.\
\
If today is on or after 2026-06-09:\
1. Say '🔔 Apple Inc. (AAPL) — Product Launch is TODAY! 🎯'\
2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py AAPL\
3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py AAPL\
4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\
5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name 'AAPL Product-Launch Countdown - Daily 09:00'\
\
If today is before 2026-06-09:\
1. Compute days_remaining = days between today and 2026-06-09\
2. Say '🔔 Apple Inc. (AAPL) — Product Launch in {days_remaining} days. Briefing below.'\
3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py AAPL\
4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py AAPL\
5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 9 * * *" \
"telegram" \
"\x3CchatId>" \
"tz:America/New_York"
- Confirm.
Example 3 — AGM (Shell, 2 weeks, 9 AM London)
User: "Set up an AGM countdown for Shell, 2 weeks before, 9 AM London"
-
Resolve ticker: Shell →
SHEL.L -
Parse: lead_days=14, hour=9, minute=0, tz=Europe/London
-
Discover event: User explicitly said AGM → skip yfinance, go straight to web search. Find Shell AGM on 2026-05-20. Confirm with user.
-
Compute: event_date=2026-05-20, reminder_start=2026-05-06, cron=
cron:0 9 * * * -
Create cron:
uv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
"SHEL.L AGM Countdown - Daily 09:00" \
"📊 SHEL.L (Shell plc) AGM Countdown. Event date: 2026-05-20.\
\
If today is on or after 2026-05-20:\
1. Say '🔔 Shell plc (SHEL.L) — AGM is TODAY! 🎯'\
2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py SHEL.L\
3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py SHEL.L\
4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\
5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name 'SHEL.L AGM Countdown - Daily 09:00'\
\
If today is before 2026-05-20:\
1. Compute days_remaining = days between today and 2026-05-20\
2. Say '🔔 Shell plc (SHEL.L) — AGM in {days_remaining} days. Briefing below.'\
3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py SHEL.L\
4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py SHEL.L\
5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 9 * * *" \
"telegram" \
"\x3CchatId>" \
"tz:Europe/London"
- Confirm.
Example 4 — Regulatory Decision (Pfizer FDA date)
User: "Set up a countdown for Pfizer's next FDA decision"
-
Resolve ticker: Pfizer →
PFE -
Apply defaults: 1 week, 10 AM CET
-
Discover event: User said FDA → skip yfinance, search web for "Pfizer FDA decision date 2026". Find PDUFA date on 2026-07-15. Confirm.
-
Compute: event_date=2026-07-15, reminder_start=2026-07-08, cron=
cron:0 10 * * * -
Create cron using event_type="FDA Decision" and event_date="2026-07-15".
-
Confirm.
Ticker Format Reference
| Market | Format | Example |
|---|---|---|
| US stocks | Plain | AAPL, NVDA |
| German stocks | .DE suffix |
RHM.DE, SAP.DE |
| UK stocks | .L suffix |
SHEL.L, BP.L |
| Dutch stocks | .AS suffix |
ASML.AS |
| Japanese | .T suffix |
7203.T |
| Korean | .KS suffix |
005930.KS |
Notes
uv runreads the inline# /// scriptdependency block inmain.pyand auto-installsyfinancein an isolated environment — no pip install or venv setup needed.- Company name → ticker resolution is done by the LLM agent, following the same pattern as
stock-price-checker-pro. - Channel, chatId, and timezone are always auto-detected from session context — never ask the user for these.
- Timezone resolution follows
remind-me's 3-tier system (message → USER.md → ask user). - The daily cron message tells the agent to run
stock-price-checker-proandstock-fundamentalsand synthesize a briefing — this applies to all event types. - The cron auto-cancels on the event day after delivering the final briefing.
- For earnings dates: always use the Python script (yfinance). Do NOT use web search or curl.
- For all other event types: the agent discovers the date via web search. Always confirm the date and source with the user before creating the cron.
- If no event date can be found after exhausting both sources, tell the user and offer manual date entry.
- Do NOT use the shell wrapper pattern — call
uv run src/main.pydirectly as shown above. - Handles ALL price-moving corporate events — earnings, AGMs, product launches, investor days, FDA decisions, dividend dates, stock splits, M&A votes, and analyst days.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install event-countdown-pro - 安装完成后,直接呼叫该 Skill 的名称或使用
/event-countdown-pro触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Event Countdown Pro 是什么?
Set up a daily countdown reminder for a stock's next price-moving corporate event — earnings releases, AGMs, product launches, investor days, dividend dates,... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 46 次。
如何安装 Event Countdown Pro?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install event-countdown-pro」即可一键安装,无需额外配置。
Event Countdown Pro 是免费的吗?
是的,Event Countdown Pro 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Event Countdown Pro 支持哪些平台?
Event Countdown Pro 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Event Countdown Pro?
由 youpele52(@youpele52)开发并维护,当前版本 v1.0.0。