Joelclaw monitor

Manage feed subscriptions that track blogs, repos, and living pages for changes. Use when adding, listing, removing, or checking monitored resources. Also use when the discovery skill flags a resource as monitorable. Triggers on: 'monitor this', 'subscribe to', 'track this repo', 'watch this blog', 'what are we monitoring', 'check feeds', 'unsubscribe', 'stop monitoring', or any task involving feed subscriptions.

install
source · Clone the upstream repo
git clone https://github.com/joelhooks/joelclaw
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/joelhooks/joelclaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/monitor" ~/.claude/skills/joelhooks-joelclaw-monitor && rm -rf "$T"
manifest: skills/monitor/SKILL.md
source content

Resource Monitor — Track What Matters

Manage the feed subscription system (ADR-0127). Inngest cron checks subscriptions hourly, detects changes, summarizes via LLM, and notifies Joel via gateway with approve/dismiss for

/cool
publishing.

Joel's Interest Profile

Use this to assess whether a discovered resource is worth monitoring. If a resource clearly maps to 2+ of these, recommend monitoring with a brief explanation.

  • Agentic AI — agent patterns, agent infrastructure, tool use, MCP, multi-agent systems
  • Developer education — course platforms, learning design, course-builder ecosystem
  • TypeScript tooling — Effect ecosystem, Bun, type-level programming, compiler work
  • Inngest / durable workflows — event-driven systems, step functions, background jobs
  • Personal AI systems — local-first AI, semantic memory, knowledge management, RAG
  • BEAM / Elixir / OTP — Erlang ecosystem, actor model, fault tolerance
  • Video infrastructure — Mux, transcription, media pipelines
  • Next.js / React — RSC, App Router, cache components, Vercel platform
  • CLI design — agent-first interfaces, HATEOAS, terminal UIs
  • Knowledge management — Obsidian, digital gardens, PKM, zettelkasten
  • Self-hosted infra — homelab, k8s, Tailscale, NAS, local services
  • AT Protocol / Bluesky — decentralized web, PDS, lexicons
  • Convex — real-time database, reactive backends

CLI Commands

# List all monitored subscriptions
joelclaw subscribe list

# Add a subscription (auto-detects type from URL)
joelclaw subscribe add <url> --name "Simon Willison" --interval hourly
joelclaw subscribe add <url> --name "json-render" --type github --interval daily

# Remove a subscription
joelclaw subscribe remove <id>

# Force-check a specific subscription now
joelclaw subscribe check --id <id>

# Force-check all subscriptions
joelclaw subscribe check

# Show recent updates across all subscriptions
joelclaw subscribe summary

Direct Inngest Fallback (alternative)

# Add subscription via event
joelclaw send subscription/add -d '{
  "id": "simon-willison-blog",
  "name": "Simon Willison",
  "feedUrl": "https://simonwillison.net/atom/everything/",
  "type": "atom",
  "checkInterval": "hourly",
  "notify": true,
  "summarize": true,
  "publishToCool": false,
  "active": true
}'

# Force check all
joelclaw send subscription/check-feeds

# Check single
joelclaw send subscription/check-single -d '{"subscriptionId": "simon-willison-blog"}'

Subscription Types

TypeDetectionMethodBest For
atom
/
rss
URL ends in
/atom/
,
/feed/
,
/rss
or has XML content-type
Standard feed parseBlogs, newsletters
github
github.com/<owner>/<repo>
GitHub API (releases, commits)Open source projects
page
Any other URLContent hash diff via defuddleLiving documents, guides
bluesky
bsky.app
or AT Protocol handle
AT Protocol feedSocial/microblog

Auto-Detection Heuristics

When adding a subscription, detect the type:

  1. GitHub URL
    github
    type, check releases + significant commits
  2. URL with
    /atom/
    or
    /feed/
    atom
    type
  3. URL with
    /rss
    rss
    type
  4. Blog root URL → try
    {url}/atom/
    ,
    {url}/feed/
    ,
    {url}/rss.xml
    before falling back to
    page
  5. Everything else
    page
    type (content hash diff)

How Updates Flow

Inngest cron (hourly) → subscription/check-feeds
  → fans out: subscription/check-single per subscription
    → fetch feed / API / page hash
    → new entries detected?
      → YES: subscription/summarize → LLM summary
        → gateway notification with [Publish to /cool] [Dismiss]
        → Joel approves → discovery/noted → vault note → /cool
      → NO: log quiet check, move on

Notification Format

Gateway notifications for feed updates include:

  • Source name and subscription type
  • Brief LLM summary of what changed
  • Entry count and links to significant items
  • Relevance tag (which interest areas it maps to)
  • Action buttons: [Publish to /cool] [Dismiss]

Adding from Discovery

When the discovery skill fires and the agent assesses the resource is monitorable, use MCQ to recommend:

After firing joelclaw discover:

1. Assess: Is this a blog, repo, or living page with ongoing updates?
2. Assess: Does it map to 2+ items in Joel's Interest Profile above?
3. If both yes → recommend monitoring via MCQ with brief reasoning
4. If monitorable but low relevance → mention it's monitorable but don't push
5. If not monitorable (one-shot article, tweet, etc.) → don't mention monitoring

Backend

  • Redis storage:
    joelclaw:subscriptions
    hash (lib at
    packages/system-bus/src/lib/subscriptions.ts
    )
  • Inngest functions:
    packages/system-bus/src/inngest/functions/subscriptions.ts
  • Feed checker:
    packages/system-bus/src/lib/feed-checker.ts
  • ADR:
    ~/Vault/docs/decisions/0127-feed-subscriptions-and-resource-monitoring.md