Digital bounty hunter skill for finding, tracking, and managing online hackathon opportunities. Trigger when the user says "hunt", "find hackathons", "show m...
---
name: hunt
description: Digital bounty hunter skill for finding, tracking, and managing online hackathon opportunities. Trigger when the user says "hunt", "find hackathons", "show map", "add [numbers] to map", or anything related to searching for online/free hackathons, managing a hackathon bucket list, or living a digital nomad/bounty hunter lifestyle. Use to browse the web for upcoming online hackathons, present them as numbered options, add selections to a map.md tracker, and schedule reminders.
compatibility: Requires web fetching (web_fetch tool) to browse hackathon listings from public event pages. Requires cron scheduling for 1-day-before reminders. Requires file read/write for map.md persistence. Network access to mlh.com, devfolio.co, devpost.com, lablab.ai. Node.js 18+ for bundled CLI tools.
license: MIT
metadata:
author: lloyd-c137
version: "1.1.0"
repository: https://github.com/lloyd-c137/hunt-skill
---
# Hunt — Digital Bounty Hunter 🎯
Your mission: help the user find, track, and participate in online hackathons — no boss, no office, just freedom and code.
## Core Workflow
### 1. Trigger: "hunt" / "find hackathons"
When the user says **hunt** or asks to find hackathons, parse the optional argument:
- **`/hunt 1`** — user wants only hackathons **with prize money** (cash prizes)
- **`/hunt`** or **`/hunt 0`** — show all hackathons, prizes optional
Then:
1. **Check USER.md** for the user's skills, timezone (UTC+8 for Lloyd), and preferences.
2. **Browse the web** for upcoming online hackathons that are:
- **100% online/digital** — no in-person requirement
- **Free** to participate — no entry fee
- **No web3 required** — unless user explicitly asks for crypto/blockchain ones
- **Beginner-friendly** preferred — should suit their skill level from USER.md
3. Query these sources (in order):
- **MLH** — https://events.mlh.io/ (filter by "Digital")
- **Devpost** — https://devpost.com/hackathons (filter by online)
- **Devfolio** — https://devfolio.co/hackathons (filter by online)
- **lablab.ai** — AI-focused hackathons
4. **Verify each result** — check the event page to confirm it's truly online, free, and open for registration.
5. **Prize filter** (only if `/hunt 1`):
- For each candidate, fetch the event page and scan for prize information
- Look for keywords: cash prize, prize pool, $, bounty, grant, award
- If the page only lists swag bags / fellowship admissions / accelerator invites (no cash), **exclude** it
- If prize info is unclear, note it and keep it in with a "💰 Prize: Unknown — needs confirmation" label
- Present only qualifying results to the user
### 2. Present Results as Numbered List
**⚠️ Telegram formatting constraint:** Telegram does NOT support markdown tables. Use simple bullet lists and bold text only.
Format each result clearly (Telegram-friendly):
```
1. [Hackathon Name]
🗓 Dates: May 8-14, 2026
🏢 Host: [Organization]
🎯 Theme: [GenAI / FinTech / Open / etc.]
📍 Location: Online
💰 Cost: Free
💵 Prize: [Cash / Non-cash / None / Unknown]
🌐 Link: [URL]
📝 Briefing: [1-2 sentence summary]
```
**Always include a `💵 Prize` line** for every listing — even if the prize is none/unknown, so the user can see at a glance.
**Never use markdown tables** when the answer is going to Telegram. Use bullet-formatted lists instead.
### 3. User Commands
#### "add [numbers] to map"
- Parse the comma-separated list (e.g., "add 1,5,7 to map")
- For each number, append the corresponding hackathon to `map.md`
- Use the standard format (see `references/map-format.md`)
- Set a **cron job** reminder for 1 day before each event starts
- Confirm what was added
#### "remove [numbers] from map" / "delete [numbers]"
- Remove those entries from `map.md`
- Cancel any associated cron reminders
- Renumber the remaining entries sequentially
#### "show map" / "map"
- Read and present `map.md` in full — formatted nicely for Telegram
#### "clear map" / "reset map"
- Archive `map.md` to `map-archive-YYYY-MM-DD.md` and create a fresh empty one
- Remove all associated hackathon reminder cron jobs
### 4. Setting Reminders
When adding entries to map.md, set a cron job for each:
```json
{
"schedule": { "kind": "at", "at": "<1 day before event start, ISO-8601>" },
"payload": { "kind": "systemEvent", "text": "⏰ Hackathon Reminder: [Name] starts in 1 day! Check your map.md for details. https://..." },
"sessionTarget": "main",
"deleteAfterRun": true
}
```
Use the hackathon name or a short ID in the job name so you can find/cancel it later.
### 5. Map.md Format
The `map.md` file lives at `~/.openclaw/workspace/map.md`. See `references/map-format.md` for the exact format.
When adding entries, always renumber the full list sequentially (1, 2, 3...).
When removing entries, renumber to fill gaps.
## Criteria for Selection
Only suggest hackathons that meet ALL of these:
- **Online** — Fully digital. No travel or in-person required.
- **Free** — $0 to register and participate.
- **Open** — Registration still open (not ended).
- **Suitable** — Aligns with the user's skills from USER.md. If unknown, ask.
- **No web3** — Skip blockchain/crypto/NFT/DeFi events unless user explicitly asks.
- **Has prize money** — Only when `/hunt 1` is used. Must have cash or monetary prizes; swag-only or incubator-only events are excluded.
## User Profile
Default user is **Lloyd** (Sir):
- **Timezone:** UTC+8
- **Skills:** Coding & AI enthusiast (see USER.md for details)
- Prefers hackathons that don't require web3
## Notes
- Always verify links work before including them.
- If registration is via a form (not open yet), note that in briefing.
- Prefer hackathons starting within the next 2 months unless user asks for longer.
- If no suitable hackathons found, say so honestly — don't pad results with low-quality ones.
- Cron job names should follow: `hunt-reminder-<normalized-name>` for easy management.
## Telegram Output Rules
When delivering output to Telegram:
- **No markdown tables** — Telegram renders them as garbled code blocks
- No markdown headers (`##`, `###`) — Telegram can't render them inline
- Use simple bullet lists with `-` or `•` instead
- Bold with `**bold**` works, but keep it simple
- Numbers with `**bold**` titles for entries (e.g., `**1.** Name`)
- Use emojis as visual separators (🎯, ⏰, 🌐, etc.)
- Keep links plain or in angle brackets `<https://example.com>`
- When presenting map data, format like this:
```
🗺 Map - 5 active
**1.** GHW: GenAI
🗓 May 8-14 | 🏢 MLH
🎯 Generative AI | ⏰ Reminder May 7
🔗 https://events.mlh.io/events/13816
**2.** Midnight Hackathon
🗓 May 15-17 | 🏢 MLH
🎯 Open theme | ⏰ Reminder May 14
🔗 https://events.mlh.io/
```
don't have the plugin yet? install it then click "run inline in claude" again.