discovery
npx skills add https://github.com/joelhooks/joelclaw --skill discovery
Agent 安装分布
Skill 文档
Discovery â Capture What’s Interesting
When Joel flags something as interesting, fire it into the pipeline and keep moving.
Trigger Detection
Signal words/patterns (case-insensitive):
- “interesting”, “cool”, “neat”, “nice”, “wild”, “clever”
- “check this out”, “look at this”, “came across”, “found this”
- “bookmarking”, “save this”, “remember this”
- Bare URL/repo link with minimal context (1-2 words + link)
- Sharing a link then immediately moving on
When NOT to trigger: If Joel is asking for help with the thing (debugging, implementing, reviewing), that’s a task â not a discovery.
Workflow
1. Fire joelclaw discover
joelclaw discover <url>
# or with context if Joel said something specific:
joelclaw discover <url> -c "what Joel said about it"
That’s it. The pipeline handles investigation, titling, tagging, writing, and slogging.
2. Assess for Monitoring (before moving on)
After firing the discovery event, quickly assess:
- Is this monitorable? â Does it have ongoing updates? (blog with feed, GitHub repo with releases, living document that changes)
- Is it relevant to Joel’s interests? â Check the interest profile in the
monitorskill. If it maps to 2+ areas, it’s a strong candidate.
If both yes â recommend monitoring via MCQ:
"This looks like an active [blog/repo/guide] covering [matched interests]. Want to add it to the monitoring list?"
1. Yes, monitor it (hourly/daily)
2. Not now
If the agent recommends monitoring and Joel accepts, add the subscription per the monitor skill workflow.
If monitorable but low relevance â mention briefly: “This has a feed if you ever want to track it” â don’t push.
If not monitorable (one-shot article, tweet, static page) â skip, don’t mention monitoring at all.
3. Continue conversation
Don’t wait. Joel flagged something and moved on â match that energy.
What the Pipeline Does (background, in system-bus worker)
- Investigate â clone repos, extract articles via defuddle, read content
- Analyze via pi â decides title, tags, relevance, writes summary in Joel’s voice
- Embed media â if source is a video (YouTube, etc.), auto-embeds
<YouTubeEmbed url="..." />in the note - Write â vault note to
~/Vault/Resources/discoveries/{slug}.md - Sync â fires
discovery/capturedevent which syncs to joelclaw.com/cool/ - Log â
slog write --action noted --tool discovery
X/Twitter URL Enrichment
When the source URL is an X/Twitter post (x.com/*/status/* or twitter.com/*/status/*):
- X blocks web scraping â do NOT use url_to_markdown or web_search for tweet content
- Instead, use the x-api skill to fetch tweet text, author, and metrics via the Twitter API v2
- Extract the tweet ID from the URL and call
GET /2/tweets/:id?tweet.fields=text,author_id,created_at,public_metrics&expansions=author_id&user.fields=name,username - Include tweet text, author handle, and engagement metrics in the discovery note
- See
x-apiskill for OAuth 1.0a signing details
Deep Dig â Inngest Enrichment Pipeline (ADR-0150)
Enrichment is not manual agent work. The discovery/noted event triggers a durable Inngest function (discovery/enrich) that handles all enrichment automatically:
- Classify URL â tweet, repo, article, video
- Fetch content â X API for tweets, defuddle for articles, repo clone for repos
- Match tracked projects â opencode, opentui, course-builder, pi-tools
- Deep dig if matched â recent commits, PRs, issues from upstream
- Profile the poster â git authors, web search, contact lookup (fires
contact/enrichif new) - Write enriched vault note â full context, not a bare URL
The agent’s job is just to fire discovery/noted with whatever context Joel provided. The pipeline does the rest.
Tracked projects (canonical list in packages/system-bus/src/config/tracked-projects.ts)
anomalyco/opencode(fork ofsst/opencode)anomalyco/opentui(fork ofsst/opentui)badass-courses/course-builderjoelhooks/pi-toolsjoelhooks/joelclaw
Video/Media Handling
When the source URL is a YouTube video (youtube.com or youtu.be):
- The discovery note gets a
<YouTubeEmbed url="..." />component right after the title - This renders an embedded video player on the cool page at joelclaw.com
- The note body still includes analysis/summary â the embed is supplemental, not a replacement for writing about it