discovery
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. Resolve site + visibility first
Preferred explicit fields:
site:joelclaw|wizardshit|sharedvisibility:public|private|archived|migration-only
Sensible default when not specified:
site = joelclawvisibility = public
2. Canonical operator path when you need the final link back
Use the event surface directly and follow the run to completion:
joelclaw send discovery/noted --data '{"url":"<url>","context":"<optional context>","site":"joelclaw","visibility":"public"}' --follow
The terminal run result now includes the final link for the created piece:
- public joelclaw discoveries →
https://joelclaw.com/cool/<slug> - non-public or off-site captures →
vault:Resources/discoveries/<Title>.md
Always return that finalLink to Joel.
If Joel explicitly wants the piece published somewhere other than joelclaw and that venue has its own durable publish surface, route to that venue-specific workflow instead of pretending the joelclaw discovery pipeline published it there. The joelclaw discovery pipeline can carry site/visibility metadata, but it only gives you a public joelclaw URL when the capture is actually eligible for joelclaw publication.
3. Compatibility shortcut
joelclaw discover still works as the thin fire-and-forget shortcut and now accepts explicit site/visibility too:
joelclaw discover <url> --site joelclaw --visibility public
joelclaw discover <url> -c "what Joel said about it" --site wizardshit --visibility private
But if Joel needs the final link in the same turn, prefer joelclaw send discovery/noted --follow.
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