discovery
Capture interesting finds to the Vault via Inngest. Triggers when the user shares a URL, repo, or idea with signal words like "interesting", "cool", "neat", "check this out", "look at this", "came across", or when sharing content with minimal context that implies it should be remembered. Also triggers on bare URL drops with no explicit ask. Fires a discovery/noted event and continues the conversation — the pipeline handles everything else.
What this skill does
# 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` | `shared`
- `visibility`: `public` | `private` | `archived` | `migration-only`
**Sensible default when not specified**:
- `site = joelclaw`
- `visibility = public`
### 2. Canonical operator path when you need the final link back
Use the event surface directly and follow the run to completion:
```bash
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:
```bash
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:
1. **Is this monitorable?** — Does it have ongoing updates? (blog with feed, GitHub repo with releases, living document that changes)
2. **Is it relevant to Joel's interests?** — Check the interest profile in the `monitor` skill. 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)
1. **Investigate** — clone repos, extract articles via defuddle, read content
2. **Analyze via pi** — decides title, tags, relevance, writes summary in Joel's voice
3. **Embed media** — if source is a video (YouTube, etc.), auto-embeds `<YouTubeEmbed url="..." />` in the note
4. **Write** — vault note to `~/Vault/Resources/discoveries/{Title}.md` (normal path) or a unique `{Title} {fingerprint}.md` degraded fallback
- If pi note generation times out or errors, the function writes a source-grounded degraded fallback note (`captureStatus: degraded`, `needs-review`) and still forwards `discovery/captured` with `captureStatus: degraded`. This keeps `/cool` capture durable instead of losing the find behind a model stall.
5. **Sync** — fires `discovery/captured` event which syncs to joelclaw.com/cool/
6. **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-api` skill 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:
1. **Classify URL** — tweet, repo, article, video
2. **Fetch content** — X API for tweets, defuddle for articles, repo clone for repos
3. **Match tracked projects** — opencode, opentui, course-builder, pi-tools
4. **Deep dig if matched** — recent commits, PRs, issues from upstream
5. **Profile the poster** — git authors, web search, contact lookup (fires `contact/enrich` if new)
6. **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 of `sst/opencode`)
- `anomalyco/opentui` (fork of `sst/opentui`)
- `badass-courses/course-builder`
- `joelhooks/pi-tools`
- `joelhooks/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
Related in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.