mvanhorn/last30days-skill · error · RuntimeError
No sources are available for this run.
Error message
No sources are available for this run.
What it means
RuntimeError raised in run_pipeline after the available-sources list is assembled (including auto-added 'grounding' and 'jobs'). It means every candidate source was filtered out — either the caller requested sources that are all unavailable/unknown, or no source is currently available given the config (missing API keys, digg/yt-dlp binaries not on PATH, etc.). The pipeline refuses to run a sweep that could never fetch anything.
Source
Thrown at skills/last30days/scripts/lib/pipeline.py:2014
# submitted to the network executor below.
if corpus_requested and "corpus" not in excluded_sources and "corpus" not in available:
available.append("corpus")
if web_backend == "none":
available = [s for s in available if s != "grounding"]
elif web_backend in ("brave", "exa", "serper", "parallel", "keyless") and "grounding" not in available:
available.append("grounding")
if (
hiring_signals_mode
or (not requested_sources and _company_topic_likely(topic))
) and "jobs" not in available:
available.append("jobs")
if hiring_signals_mode:
config = dict(config)
config["_hiring_signals_mode"] = True
if not requested_sources:
available = ["jobs"]
if not available:
raise RuntimeError("No sources are available for this run.")
planner_requested_sources = requested_sources
if hiring_signals_mode and not planner_requested_sources:
planner_requested_sources = ["jobs"]
if external_plan is not None:
# External plan provided (e.g., from Claude Code via --plan flag).
# Explicit input is a contract: validate it before permissive sanitization.
planner.validate_external_plan(external_plan)
plan = planner._sanitize_plan(
external_plan, topic, available, planner_requested_sources, depth,
)
plan_source = "external"
else:
plan = planner.plan_query(
topic=topic,
available_sources=available,
requested_sources=planner_requested_sources,View on GitHub (pinned to c7460f6114)
Solutions
- Run without requested_sources to let the pipeline use whatever keyless sources are available (reddit, hackernews).
- Configure credentials for the sources you want: SCRAPECREATORS_API_KEY for x/instagram, and ensure digg-pp-cli / yt-dlp are on PATH.
- Check requested source names for typos; an unknown name yields no available source.
- Re-run setup (python3 skills/last30days/scripts/setup_wizard or the onboarding flow) to restore missing keys.
Example fix
# before: only x requested, but no key configured
run_pipeline(topic, requested_sources=["x"], config={})
# after: keyless sources, or provide the key
run_pipeline(topic, requested_sources=["reddit", "hackernews"], config={"SCRAPECREATORS_API_KEY": key}) Defensive patterns
Strategy: validation
Validate before calling
from skills.last30days.scripts.lib import pipeline
# dry-check availability first (same helper the pipeline uses)
avail = pipeline.available_sources(config, requested_sources or None, x_pending=False)
if not avail:
raise SystemExit("configure credentials or drop requested_sources") Try / catch
try:
result = run_pipeline(topic, requested_sources=sources, config=config)
except RuntimeError as exc:
if "No sources are available" in str(exc):
result = run_pipeline(topic, config=config) # keyless defaults
else:
raise Prevention
- Run the setup wizard before first use so at least one keyed backend is configured.
- Verify optional-source binaries (digg-pp-cli, yt-dlp) are on the subprocess PATH, not just on disk.
- Call with no requested_sources when credentials are uncertain — keyless reddit/hackernews still work.
When it happens
Trigger: requested_sources=['x'] with no X backend resolvable (no ScrapeCreators key, no bird session); requested_sources naming only sources whose availability check fails; hiring_signals_mode collapsing available to ['jobs'] but 'jobs' itself unavailable in a path that later intersects with requested; a mock-less run where available_sources() returns [] for every requested source.
Common situations: Fresh install with no credentials configured; ScrapeCreators key expired/revoked so x is unavailable; digg-pp-cli and yt-dlp not on the agent subprocess PATH (per AGENTS.md PATH gating); explicitly passing --sources with names that are all unavailable.
Related errors
- No X backend is available.
- Gemini selected but no Google API key is configured.
- xAI selected but XAI_API_KEY is not configured.
- OpenRouter selected but OPENROUTER_API_KEY is not configured
- Unknown search source in {flag_name}: {source}
AI-assisted analysis of mvanhorn/last30days-skill@c7460f6114 (2026-08-15).
Data as JSON: /api/errors/0f0cf7d21d8fb2fb.
Report an issue: GitHub.