stock-price-checker-prostock-fundamentalsremind-meequity-researchstock-price-checker-proThis 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.
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 , right?"
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:
Scan sources in priority order. Stop as soon as a confirmed event is found.
Run the local script to get the next earnings date:
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py <TICKER>
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
> 📊 Earnings Release —
>
> Earnings releases are the most common price-moving events. Use this?
If user says yes → set event_type = "Earnings Release", event_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
If the script returns an error (no earnings date found), proceed directly to 3b.
Search the web broadly for the company's upcoming events that could move the stock price. Use queries like:
" upcoming events " " investor day " " product launch event " " AGM annual general meeting " " FDA decision date " (for pharma/biotech stocks)" shareholder vote " 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
> 🗓
>
> 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
> 1. 📊 Earnings Release —
> 2. 🎤 Investor Day —
> 3. 🏛 AGM —
>
> 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
If the user provides a manual date, confirm and proceed.
event_date − lead_days (7 or 14)cron: * (daily at the specified time in the user's timezone)cron:0 10 *cron:30 9 *⚠️ 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?
The cron message must contain clear instructions for the agent that fires it each day. The template uses the discovered (e.g. "Earnings Release", "AGM", "Product Launch", "Investor Day") and the confirmed .
The message tells the agent to:
stock-price-checker-pro + stock-fundamentals, and cancel this reminderstock-price-checker-pro + stock-fundamentals, and send a countdown briefinguv run /root/.openclaw/workspace/skills/remind-me/src/main.py create \
"<TICKER> <SHORT_EVENT_TYPE> Countdown - Daily <HH:MM>" \
"📊 <TICKER> (<COMPANY>) <EVENT_TYPE> Countdown. Event date: <EVENT_DATE_ISO>.\n\nIf today is on or after <EVENT_DATE_ISO>:\n1. Say '🔔 <COMPANY> (<TICKER>) — <EVENT_TYPE> is TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py <TICKER>\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py <TICKER>\n4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\n5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name '<TICKER> <SHORT_EVENT_TYPE> Countdown - Daily <HH:MM>'\n\nIf today is before <EVENT_DATE_ISO>:\n1. Compute days_remaining = days between today and <EVENT_DATE_ISO>\n2. Say '🔔 <COMPANY> (<TICKER>) — <EVENT_TYPE> in {days_remaining} days. Briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py <TICKER>\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py <TICKER>\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:<MINUTE> <HOUR> * * *" \
"<channel>" \
"<chatId>" \
"tz:<IANA timezone>"
Template variables:
| Variable | Description | Example |
|---|---|---|
| ---------- | ------------- | --------- |
| Stock ticker | NVDA |
| Full company name | NVIDIA Corporation |
| Human-readable event type | Earnings Release, Product Launch, AGM |
| Short label for cron name | Earnings, Product-Launch, AGM |
| Event date in YYYY-MM-DD | 2026-06-15 |
| Time from Step 2 | 0 10 for 10:00 AM |
| 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:) must match the one resolved in Step 2.
After the cron is created, report back:
> ✅ Done! Your event countdown is set up:
> 📊
> 🗓
> ⏰ Daily briefing at:
> 🔁 Starting:
> 📱 Delivered to: This chat
uv run /root/.openclaw/workspace/skills/event-countdown-pro/src/main.py <TICKER>
# 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
The script returns three lines:
Ticker: <SYMBOL>
Company: <COMPANY_NAME>
Next Earnings Date: <YYYY-MM-DD>
Or an error:
Error: <message>
User: "Set up a countdown for NVIDIA"
NVDAcron:0 10 *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.\n\nIf today is on or after 2026-06-15:\n1. Say '🔔 NVIDIA Corporation (NVDA) — Earnings Release is TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\n4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\n5. Cancel this reminder by running: uv run /root/.openclaw/workspace/skills/remind-me/src/main.py cancel name 'NVDA Earnings Countdown - Daily 10:00'\n\nIf today is before 2026-06-15:\n1. Compute days_remaining = days between today and 2026-06-15\n2. Say '🔔 NVIDIA Corporation (NVDA) — Earnings Release in {days_remaining} days. Briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py NVDA\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py NVDA\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 10 * * *" \
"telegram" \
"<chatId>" \
"tz:Europe/Paris"
User: "Set up a countdown for Apple's next event, 1 week before, 9 AM New York"
AAPLcron:0 9 *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.\n\nIf today is on or after 2026-06-09:\n1. Say '🔔 Apple Inc. (AAPL) — Product Launch is TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py AAPL\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py AAPL\n4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\n5. 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'\n\nIf today is before 2026-06-09:\n1. Compute days_remaining = days between today and 2026-06-09\n2. Say '🔔 Apple Inc. (AAPL) — Product Launch in {days_remaining} days. Briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py AAPL\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py AAPL\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 9 * * *" \
"telegram" \
"<chatId>" \
"tz:America/New_York"
User: "Set up an AGM countdown for Shell, 2 weeks before, 9 AM London"
SHEL.Lcron:0 9 *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.\n\nIf today is on or after 2026-05-20:\n1. Say '🔔 Shell plc (SHEL.L) — AGM is TODAY! 🎯'\n2. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py SHEL.L\n3. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py SHEL.L\n4. Send a comprehensive event-day briefing with price, fundamentals, and a quick take.\n5. 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'\n\nIf today is before 2026-05-20:\n1. Compute days_remaining = days between today and 2026-05-20\n2. Say '🔔 Shell plc (SHEL.L) — AGM in {days_remaining} days. Briefing below.'\n3. Run: uv run /root/.openclaw/workspace/skills/stock-price-checker-pro/src/main.py SHEL.L\n4. Run: uv run /root/.openclaw/workspace/skills/stock-fundamentals/src/main.py SHEL.L\n5. Send a daily countdown briefing summarizing price, key fundamentals, and recent company news." \
"cron:0 9 * * *" \
"telegram" \
"<chatId>" \
"tz:Europe/London"
User: "Set up a countdown for Pfizer's next FDA decision"
PFEcron:0 10 *| 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 |
uv run reads the inline # /// script dependency block in main.py and auto-installs yfinance in an isolated environment — no pip install or venv setup needed.stock-price-checker-pro.remind-me's 3-tier system (message → USER.md → ask user).stock-price-checker-pro and stock-fundamentals and synthesize a briefing — this applies to all event types.uv run src/main.py directly as shown above.共 1 个版本