Agent skill

Rsky Pds Crawler Notify Hang

by divinevideo in divinevideo/divine-mobile

Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs.

MPL-2.0Auto-check passedData & Analytics

Install Rsky Pds Crawler Notify Hang

skills CLI
$ npx skills add divinevideo/divine-mobile --skill rsky-pds-crawler-notify-hang -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install divinevideo/divine-mobile rsky-pds-crawler-notify-hang --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/divinevideo/divine-mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/rsky-pds-crawler-notify-hang .claude/skills/rsky-pds-crawler-notify-hang && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
rsky-pds-crawler-notify-hang
GitHub stars
266
Token cost
~1.1k tokens
SKILL.md length
332 words
Files
1
Skills in repo
103
Repo updated
First seen
Licence
MPL-2.0

At a glance

Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs.

  • Works in 2 steps: createRecord -> process_writes ->… → sequence_commit -> sequence_evt ->…
  • CreateSession succeeds but createRecord never returns
  • SKILL.md covers Problem, Context / Trigger Conditions, Solution and Root Cause Analysis, plus 2 more sections
  • Calls kubectl and curl; reaches bsky.network

What it does

Rsky Pds Crawler Notify Hang is an agent skill from divinevideo/divine-mobile. Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs. Use when: (1) createSession succeeds but createRecord never returns, (2) No error appears in PDS logs despite request hanging for 60+ seconds, (3) PDS health endpoint works but write operations hang, (4) readiness probes intermittently fail on rsky-pds pod. Root cause: PDSCRAWLERS env var configures crawler notification URLs that are called via reqwest HTTP client WITHOUT any timeout in crawlers.rs. If the crawler URL is unreachable from…

Its SKILL.md is about 1.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Data & Analytics, covering Web scraping. The licence is MPL-2.0.

When your agent uses it

  • CreateSession succeeds but createRecord never returns
  • No error appears in PDS logs despite request hanging for 60+ seconds
  • PDS health endpoint works but write operations hang
  • Readiness probes intermittently fail on rsky-pds pod

Example prompts

  • “produces [”
  • “] (one empty string element) which causes a”
  • “/rsky-pds-crawler-notify-hang”

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. createRecord -> process_writes -> format_commit (DB, works fine)
  2. sequence_commit -> sequence_evt -> crawlers.notify_of_update() (HANGS)

What it can do on your machine

Read from SKILL.md and the folder at commit c3d6f7e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • kubectl
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • bsky.network

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Rsky Pds Crawler Notify Hang loads about 1.1k tokens when it runs. Until then it costs about 183 tokens; SKILL.md has 332 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~183
When it runs · the whole SKILL.md, loaded when a task matches
~1.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from divinevideo/divine-mobile at commit c3d6f7e, republished under its MPL-2.0 licence (© divinevideo). 332 words, ~1,097 tokens.

Download SKILL.mdSave it as .claude/skills/rsky-pds-crawler-notify-hang/SKILL.md (or your agent's skills folder).
name
rsky-pds-crawler-notify-hang
description
Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs. Use when: (1) createSession succeeds but createRecord never returns, (2) No error appears in PDS logs despite request hanging for 60+ seconds, (3) PDS health endpoint works but write operations hang, (4) readiness probes intermittently fail on rsky-pds pod. Root cause: PDS_CRAWLERS env var configures crawler notification URLs that are called via reqwest HTTP client WITHOUT any timeout in crawlers.rs. If the crawler URL is unreachable from the cluster, every write hangs forever. Also: setting PDS_CRAWLERS="" produces [""] (one empty string element) which causes a "builder error" instead — must fully unset the env var.
author
Claude Code
version
1.0.0
date
2026-03-21

rsky-pds Crawler Notification Hang

Problem

All write operations on rsky-pds (createRecord, putRecord, deleteRecord) hang indefinitely with no error output. The PDS appears healthy (health endpoint returns 200, createSession works) but any operation that modifies the repo never completes.

Context / Trigger Conditions

  • createSession returns a valid JWT instantly
  • createRecord or putRecord with that JWT hangs forever (60s+ timeout)
  • PDS logs show only Rocket has launched from http://0.0.0.0:8000 with no error
  • _health endpoint returns {"version":"0.3.0-beta.3"} (or similar)
  • Kubernetes readiness probes may intermittently fail due to the pod being overwhelmed by hung requests
  • The PDS_CRAWLERS env var is set (e.g., https://bsky.network)

Solution

Quick Fix (Runtime)

Unset the PDS_CRAWLERS environment variable entirely:

bash
# IMPORTANT: Use the trailing dash to UNSET, don't set to empty string
kubectl set env deployment/rsky-pds -n <namespace> PDS_CRAWLERS-

# Wait for rollout
kubectl rollout status deployment/rsky-pds -n <namespace> --timeout=120s

Do NOT set PDS_CRAWLERS="" — the env_list() parser splits on commas, so an empty string produces vec![""] (one empty-string element), which causes a "builder error" when reqwest tries to build a URL from "".

Code Fix (Permanent)

In rsky-pds/src/crawlers.rs, add a timeout to the reqwest client:

rust
let client = reqwest::Client::builder()
    .user_agent(APP_USER_AGENT)
    .timeout(std::time::Duration::from_secs(5))  // Add this
    .connect_timeout(std::time::Duration::from_secs(3))  // Add this
    .build()?;

Also consider making the error non-fatal (use let _ = to ignore failures instead of propagating with ?), since crawler notification is not critical to the write operation succeeding.

Root Cause Analysis

The write path in rsky-pds is:

  1. createRecord -> process_writes -> format_commit (DB, works fine)
  2. sequence_commit -> sequence_evt -> crawlers.notify_of_update() (HANGS)

notify_of_update() in crawlers.rs creates a reqwest::Client with no timeout configured and POSTs to each crawler URL. From within a GKE cluster, the request to https://bsky.network/xrpc/com.atproto.sync.requestCrawl may hang at the TCP level with no response, causing the entire write to block.

Key files:

  • rsky-pds/src/crawlers.rs:30-61 — notify_of_update() method
  • rsky-pds/src/sequencer/mod.rs:215 — calls crawlers.notify_of_update()
  • rsky-pds/src/apis/com/atproto/repo/create_record.rs:100 — acquires sequencer lock
  • rsky-common/src/env.rs:28-33 — env_list() parser that splits empty strings

Verification

After unsetting PDS_CRAWLERS:

bash
# Should return in <10 seconds instead of hanging
curl -X POST "$PDS_URL/xrpc/com.atproto.repo.createRecord" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -d '{"repo":"$DID","collection":"app.bsky.feed.post","record":{"$type":"app.bsky.feed.post","text":"test","createdAt":"2026-01-01T00:00:00Z"}}'

Notes

  • This affects ALL rsky-pds deployments that set PDS_CRAWLERS to an unreachable URL
  • The upstream TypeScript atproto PDS has proper timeouts; this is an rsky-specific bug
  • The notify_of_update() has a 20-minute throttle, so the first write after startup always triggers the notification (and hangs if unreachable)
  • The sequencer write lock at line 99 means a single hung notification blocks ALL subsequent write requests, not just the one that triggered it

© divinevideo, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/rsky-pds-crawler-notify-hang of divinevideo/divine-mobile.

Open the folder on GitHubat commit c3d6f7e

Compare with similar skills

Rsky Pds Crawler Notify Hang next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Rsky Pds Crawler Notify Hang compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Rsky Pds Crawler Notify Hang this skilldivinevideo/divine-mobile266—~1.1kAutomated safety check: PassMPL-2.0
Tmuxtrpc-group/trpc-agent-go1.9k23 repos~868Automated safety check: PassApache-2.0
Ketch1broseidon/ketch7021 repos~3.9kAutomated safety check: PassMIT
Boss Zhipin Scrapereatmoreduck/boss-zhipin-scraper1.5k—~2.6kAutomated safety check: PassMIT
Crawl4AI Web Scrapingsmallnest/goclaw5991 repos~2.5kAutomated safety check: PassMIT
Axyusukebe/ax7191 repos~918Automated safety check: PassMIT

Similar skills

  • Tmux

    trpc-group/trpc-agent-go

    Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.

    1.9k GitHub starsUsed in 23 repos~868 tokens
    Data & AnalyticsAuto-check passed
  • Ketch

    1broseidon/ketch

    Research skill for ketch — a fast stateless CLI for web search, OSS code search, curated library docs, page scraping, and site crawling; an optional MCP server exists for operators who want it, but…

    702 GitHub starsUsed in 1 repo~3.9k tokens
    Data & AnalyticsAuto-check passed
  • Boss Zhipin Scraper

    eatmoreduck/boss-zhipin-scraper

    Scrape BOSS直聘 (job listing site) via Chrome CDP. An agent skill from eatmoreduck/boss-zhipin-scraper.

    1.5k GitHub stars~2.6k tokensUpdated today
    Data & AnalyticsAuto-check passed
  • Crawl4AI Web Scraping

    smallnest/goclaw

    Scrapes sites, handles JavaScript-heavy pages and extracts structured data with Crawl4AI, through its crwl CLI or Python SDK, including schema-based extraction without an LLM.

    599 GitHub starsUsed in 1 repo~2.5k tokens
    Data & AnalyticsAuto-check passed
  • Ax

    yusukebe/ax

    Use the ax CLI instead of curl + throwaway parsing scripts whenever you fetch a URL, explore an unknown web page, or extract structured data from HTML.

    719 GitHub starsUsed in 1 repo~918 tokens
    Data & AnalyticsAuto-check passed
  • Anakinscraper

    Anakin-Inc/anakin

    Scrape any website into clean markdown or structured JSON. An agent skill from Anakin-Inc/anakin.

    4.5k GitHub stars~859 tokensUpdated 1 mo ago
    Data & AnalyticsAuto-check passed

More from divinevideo/divine-mobile

All 103 skills in this repo
  • Fix ArgoCD ExternalSecret deployment failing with "namespace X is not permitted in project Y".

    266 GitHub stars~931 tokensUpdated today
    Auto-check passed
  • Art Direct

    divinevideo/divine-mobile

    Art direction for any content — reads text, PDF, Word, HTML, PPT, then proposes 2-3 creative directions with photography style, mood, and visual language.

    266 GitHub stars~4.8k tokensUpdated today
    Auto-check passed
  • Async Await Null Race Condition

    divinevideo/divine-mobile

    Fix "Null check operator used on a null value" errors when an object is set to null during an async await.

    266 GitHub stars~881 tokensUpdated today
    Auto-check passed
  • AWS V4 Signing Custom Headers Gcs

    divinevideo/divine-mobile

    Add custom metadata headers (x-amz-meta-) to AWS v4 signed requests for GCS S3-compatible API.

    266 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Bash Herestring Newline Secrets

    divinevideo/divine-mobile

    Fix password/secret authentication failures caused by trailing newlines when creating Google Cloud secrets (or similar) with bash here-strings.

    266 GitHub stars~791 tokensUpdated today
    Auto-check passed
  • Fix silent video/media processing failures caused by URL extraction code that filters on file extensions (.mp4, .webm, .webp).

    266 GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Questions about Rsky Pds Crawler Notify Hang

What does Rsky Pds Crawler Notify Hang do?

Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs. Rsky Pds Crawler Notify Hang is an agent skill from divinevideo/divine-mobile. Fix rsky-pds createRecord/putRecord hanging indefinitely with no error logs.

When should I use Rsky Pds Crawler Notify Hang?

Rsky Pds Crawler Notify Hang fits situations like: createSession succeeds but createRecord never returns; no error appears in PDS logs despite request hanging for 60+ seconds; PDS health endpoint works but write operations hang; readiness probes intermittently fail on rsky-pds pod.

How do I install Rsky Pds Crawler Notify Hang in Claude Code?

Run `npx skills add divinevideo/divine-mobile --skill rsky-pds-crawler-notify-hang -a claude-code`. Or copy the skill folder (.agents/skills/rsky-pds-crawler-notify-hang in divinevideo/divine-mobile) into .claude/skills/rsky-pds-crawler-notify-hang in your project. Claude Code loads it when a task matches its description.

How do I install Rsky Pds Crawler Notify Hang in Codex?

Run `npx skills add divinevideo/divine-mobile --skill rsky-pds-crawler-notify-hang -a codex`. Or copy the skill folder (.agents/skills/rsky-pds-crawler-notify-hang in divinevideo/divine-mobile) into .agents/skills/rsky-pds-crawler-notify-hang in your project. Codex loads it when a task matches its description.

Can I use Rsky Pds Crawler Notify Hang in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add divinevideo/divine-mobile --skill rsky-pds-crawler-notify-hang -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rsky-pds-crawler-notify-hang, .gemini/skills/rsky-pds-crawler-notify-hang, .github/skills/rsky-pds-crawler-notify-hang and .opencode/skills/rsky-pds-crawler-notify-hang in your project.

What does Rsky Pds Crawler Notify Hang need to run?

Going by SKILL.md and its folder, Rsky Pds Crawler Notify Hang needs the command-line tools its instructions call (kubectl and curl).

Does Rsky Pds Crawler Notify Hang access the network?

SKILL.md names 1 domain. In commands or code: bsky.network; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Rsky Pds Crawler Notify Hang safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Rsky Pds Crawler Notify Hang use?

Rsky Pds Crawler Notify Hang is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Rsky Pds Crawler Notify Hang use?

About 1.1k tokens (SKILL.md is roughly 4.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Rsky Pds Crawler Notify Hang?

Skills that share tags, products or a category with Rsky Pds Crawler Notify Hang: Tmux (trpc-group/trpc-agent-go, 1.9k stars), Ketch (1broseidon/ketch, 702 stars), Boss Zhipin Scraper (eatmoreduck/boss-zhipin-scraper, 1.5k stars) and Crawl4AI Web Scraping (smallnest/goclaw, 599 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Rsky Pds Crawler Notify Hang?

divinevideo (a GitHub organization) maintains it in divinevideo/divine-mobile, which has 266 GitHub stars. The repository holds 103 skills in this directory. The repository was last updated on October 10, 2026.

Source: divinevideo/divine-mobile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.