bluesky-cascade-fetch
SKILL.md
Bluesky Cascade Fetch
Core Goal
- Fetch seed posts from Bluesky using one of:
searchPostsgetAuthorFeedgetFeedgetListFeed
- Expand each seed into a reply cascade with
getPostThread. - Enforce UTC time-window filters (
startinclusive,endexclusive). - Return machine-readable JSON and optional artifact files.
- Keep execution observable with structured logs.
Required Environment
- Configure runtime via environment variables (see
references/env.md). - Start from
assets/config.example.env. - Load env values before running commands:
set -a
source assets/config.example.env
set +a
Workflow
- Validate effective configuration.
python3 scripts/bluesky_cascade_fetch.py check-config --pretty
- Dry-run the fetch plan first.
python3 scripts/bluesky_cascade_fetch.py fetch \
--source-mode search \
--query "environment policy" \
--start-datetime 2026-03-10T00:00:00Z \
--end-datetime 2026-03-11T00:00:00Z \
--max-pages 2 \
--max-posts 50 \
--max-threads 20 \
--dry-run \
--pretty
- Run fetch with cascade expansion and output artifacts.
python3 scripts/bluesky_cascade_fetch.py fetch \
--source-mode search \
--query "environment policy" \
--search-sort latest \
--start-datetime 2026-03-10T00:00:00Z \
--end-datetime 2026-03-11T00:00:00Z \
--max-pages 5 \
--max-posts 120 \
--max-threads 40 \
--thread-depth 8 \
--thread-parent-height 5 \
--output-dir ./data/bluesky-cascade \
--log-level INFO \
--log-file ./logs/bluesky-cascade-fetch.log \
--pretty
Built-in Robustness
- Retry transient failures (
429/500/502/503/504) with exponential backoff. - Respect
Retry-Afterand fail fast when it exceeds configured cap. - Throttle request rate with minimum request interval.
- Enforce run safety caps:
- max pages
- max posts
- max threads
- Validate transport:
- JSON content-type
- UTF-8 decode
- JSON object parse
- Validate structure:
- seed URI/timestamp checks
- duplicate/orphan thread-node checks
- cascade topology stats (
max_depth,max_branching_factor)
Scope Decision
- Keep the skill atomic and request-driven:
- one invocation = one configured windowed fetch task
- No built-in scheduler/poller loops.
- If periodic polling is needed, orchestrate repeated invocations externally.
- If
public.api.bsky.appreturns route-level403, switch to--base-url https://api.bsky.app.
References
references/env.mdreferences/bluesky-api-notes.mdreferences/bluesky-limitations.mdreferences/openclaw-chaining-templates.md
Script
scripts/bluesky_cascade_fetch.py
OpenClaw Invocation Compatibility
- Keep trigger metadata in
name,description, andagents/openai.yaml. - Invoke with
$bluesky-cascade-fetch. - Keep calls atomic and parameterized by time window and source mode.
- Use OpenClaw orchestration (not this script) for recurring jobs.
OpenClaw Prompt Templates
Use these templates directly in OpenClaw and only replace bracketed placeholders.
- Recon (plan check)
Use $bluesky-cascade-fetch.
Run:
python3 scripts/bluesky_cascade_fetch.py fetch \
--source-mode search \
--query "[QUERY]" \
--start-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--end-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--max-pages [N] \
--max-posts [M] \
--dry-run \
--pretty
Return only the JSON result.
- Fetch (windowed cascade data)
Use $bluesky-cascade-fetch.
Run:
python3 scripts/bluesky_cascade_fetch.py fetch \
--source-mode search \
--query "[QUERY]" \
--search-sort latest \
--start-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--end-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--max-pages [N] \
--max-posts [M] \
--max-threads [K] \
--output-dir [OUTPUT_DIR] \
--pretty
Return only the JSON result.
- Validate (quality gate)
Use $bluesky-cascade-fetch.
Run:
python3 scripts/bluesky_cascade_fetch.py fetch \
--source-mode author-feed \
--actor [HANDLE_OR_DID] \
--start-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--end-datetime [YYYY-MM-DDTHH:MM:SSZ] \
--max-pages 1 \
--max-posts 30 \
--max-threads 10 \
--pretty
Check validation_summary.total_issue_count and thread_fetch.success_count.
Return JSON plus one-line pass/fail verdict.
Weekly Installs
1
Repository
tiangong-ai/skillsGitHub Stars
4
First Seen
3 days ago
Security Audits
Installed on
amp1
cline1
openclaw1
opencode1
cursor1
kimi-cli1