Agent skill

Atprotoing

by oaustegard in oaustegard/claude-skills

Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and…

MITAuto-check passedMarketing & SEO

Install Atprotoing

skills CLI
$ npx skills add oaustegard/claude-skills --skill atprotoing -a claude-code

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

GitHub CLI
$ gh skill install oaustegard/claude-skills atprotoing --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/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/atprotoing .claude/skills/atprotoing && 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
atprotoing
GitHub stars
150
Token cost
~1.8k tokens
SKILL.md length
875 words
Files
9 (incl. scripts)
Skills in repo
67
Repo updated
First seen
Licence
MIT

At a glance

Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and…

  • The AppView is down
  • SKILL.md covers Invoke, Source model, Cost shape and Handling failure, plus 2 more sections
  • Runs Python scripts from its folder; calls python3
  • A Bluesky read returns timeouts

What it does

Atprotoing is an agent skill from oaustegard/claude-skills. Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis. Use when bsky.app or the AppView is down or slow, when a Bluesky read returns timeouts or 5xx, when asked who liked/replied/quoted/reposted something, when pulling live Bluesky context cheaply, when reading records straight…

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts (for example `CHANGELOG.md`, `README.md` and `__init__.py`).

It sits in Marketing & SEO, covering Incident response and Link building. It works with Bluesky. The repository describes itself as: My collection of Claude skills. The licence is MIT.

When your agent uses it

  • The AppView is down
  • A Bluesky read returns timeouts
  • Asked who liked/replied/quoted/reposted something
  • Pulling live Bluesky context cheaply

Example prompts

  • “s AppView — interactions on a user”
  • “s records, network-wide backlinks across every lexicon, an account”
  • “/atprotoing”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit 90b0f1b. 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

    Ships 4 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3

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

  • Network

    No URLs in SKILL.md.

    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

Atprotoing loads about 1.8k tokens when it runs. Until then it costs about 207 tokens; SKILL.md has 875 words of instructions outside code blocks.

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

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); the scripts in this folder are not scanned.

SKILL.md

The full file from oaustegard/claude-skills at commit 90b0f1b, republished under its MIT licence (© oaustegard). 875 words, ~1,760 tokens.

Download SKILL.mdSave it as .claude/skills/atprotoing/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
atprotoing
description
Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis. Use when bsky.app or the AppView is down or slow, when a Bluesky read returns timeouts or 5xx, when asked who liked/replied/quoted/reposted something, when pulling live Bluesky context cheaply, when reading records straight from a PDS, when asked who references a record or account anywhere on the network, whether an account has changed handle or migrated servers, or which lexicons and non-Bluesky apps are active on atproto. Complements browsing-bluesky, which routes everything through the AppView and fails when it does.
metadata.version
0.3.0

ATProtoing

Reads the atmosphere from sources that stay up when Bluesky PLC's AppView does not. On 2026-08-16 the AppView timed out and Jetstream returned 503 while PDSes and Constellation served every request — this skill is built around that split.

Invoke

bash
python3 <skill>/scripts/atproto.py <command> [--json]

Digest output is the default and is what belongs in a transcript. Reach for --json only when the result will be transformed programmatically; raw records are large and re-reading them into context defeats the purpose.

CommandAnswers
feed [actor] [--hours 3] [--html PATH]The Following timeline, threaded
status [--actor X]Which layer is broken right now
interactions <actor> [--hours 8] [--scan 100]Who liked/replied/reposted/quoted recent posts
thread <at-uri>Replies to a post
posts <actor> [--limit]An actor's posts, from their own PDS
records <actor> <collection>Any collection in any repo
resolve <actor>DID, handle, PDS host
backlinks <target> [--collection C --path P]What references a record or account, in ANY lexicon
identity <actor>Handle renames and PDS migrations, from the PLC audit log
lexicons [query] [--hours N] [--others] [--schema NSID]Which collections are active network-wide

Source model

Each read targets the cheapest source that survives independently. Prefer the PDS for anything a repo owns — it is authoritative and had no outage.

NeedSource
Records of a known repoThat repo's PDS
Who interacted with a URIConstellation (constellation.microcosm.blue)
handle ↔ DID ↔ PDS, and its historyplc.directory, entryway resolveHandle
Which collections are active network-wideUFOs (ufos-api.microcosm.blue)
Search, feed generators, chatAppView only — no substitute; say so

feed is the one composite read: there is no AppView-free getTimeline, so it rebuilds the Following timeline from follows → PLC → each followee's PDS, then hydrates what the AppView would have inlined — facet byte-ranges to character ranges, blob CIDs to cdn.bsky.app URLs, quote and parent URIs to fetched records — and threads the result by reply root. --html writes a self-contained Preact reader (same components as austegard.com/bsky/thread-reader.html), so a feed request is one call, not a fan-out the caller re-derives by hand. Ranking, mutes, and blocks live in the AppView and are absent by construction: this is the raw follow graph.

Constellation is the persistent index. Do not rebuild one locally: it already indexes the whole network, is operated independently of Bluesky PLC, and is reachable when the AppView is not.

interactions walks the five Bluesky paths in LINK_PATHS. backlinks walks whatever Constellation has indexed — tangled issues, vouches, list membership, lexicons nobody here has heard of — so reach for it when the question is "who references this, anywhere" rather than "who liked this post". Both are two-phase for the same reason: links/all reports which sources are non-empty, and only then does enumeration cost anything.

lexicons answers a different question from sample_firehose in browsing-bluesky: UFOs consumes Jetstream and rolls it up per NSID, so a single call reports what is running across the whole network without sampling anything here. --others drops app.bsky., chat.bsky. and com.atproto., which is what turns the leaderboard from "Bluesky is large" into a list of the other apps. --schema NSID fetches the published lexicon document from the publisher's own repo, deriving the publisher by the reverse-DNS convention (com.whtwnd.blog.entry → whtwnd.com); publishing that record is optional and plenty of busy collections skip it, so a miss is a fact about the publisher, not a failure.

Show full SKILL.md (337 more words)Show less

Cost shape

State is a /tmp SQLite scratch (ATPROTO_CACHE to relocate), session-scoped by design. Cold start is the only start, and that is fine because wall-clock and token cost are decoupled — the script absorbs the HTTP fan-out and returns a digest. Measured: interactions --hours 8 over 100 posts ≈ 18s and ~30 output lines, against ~15 tool calls doing it by hand.

interactions is two-phase on purpose: one cheap links/all per post reports which link paths are non-empty, so per-path enumeration only runs where something exists. Preserve that when extending.

Handling failure

Unavailable is raised for egress blocks, 4xx, and exhausted retries; the CLI exits 2 with the reason on stderr. Report which layer failed rather than retrying blindly — "the AppView is down" and "atproto is down" are different facts and the distinction is usually the answer the user wants.

Two known limits worth stating plainly when they bite:

  • Third-party PDSes may be egress-blocked. ~3% of a typical follow graph self-hosts (eurosky.social, blacksky.app, personal PDSes). Those reads fail with a clear allowlist message; add the host to project egress settings.
  • Times come from TIDs, decoded from the record key rather than fetched. Client-generated, so treat them as approximate ordering, not attestation.

Overlap with the Atmosphere MCP

aturi.to/api/mcp (hosted, keyless, read-only, beta) covers the same three areas and about 30 more. It was measured on 2026-08-28 at 38 tools / ~8.6k tokens of schema resident per session, returning pretty-printed JSON rather than digests, with every read routed through one host. These commands go straight to plc.directory, Constellation and UFOs, which is the point of this skill — the 2026-08-16 split is exactly the case a single upstream reintroduces. Use the MCP for what it alone has: the waypoint catalog and the atproto docs search. Do not route these three through it.

Writing

This skill reads. For posting, use muninn_utils.bsky_card — it already writes straight to the PDS (facets, blobs, embeds, create_session) and therefore works during an AppView outage. muninn_utils.bsky_limit enforces the 300-grapheme cap, which len() gets wrong on emoji and combining marks.

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

Files

SKILL.md and 8 other files (scripts) in atprotoing of oaustegard/claude-skills.

  • SKILL.md
  • CHANGELOG.md
  • README.md
  • __init__.py
  • scripts/__init__.py
  • scripts/atproto.py
  • scripts/feed.py
  • scripts/feed_reader.html
  • tests/test_atproto_cli.py

Open the folder on GitHubat commit 90b0f1b

Compare with similar skills

Atprotoing 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.

Atprotoing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Atprotoing this skilloaustegard/claude-skills150—~1.8kAutomated safety check: PassMIT
FLOW SEO FrameworkAgriciDaniel/claude-seo19k2 repos~1.4kAutomated safety check: PassMIT
SEO DataforseoAgriciDaniel/codex-seo7992 repos~4.6kAutomated safety check: PassMIT
Backlink CheckRyze-AI-Adgent/open-seo-mcp-skills4.7k—~515Automated safety check: PassMIT
Beyondseobeyondtahir/beyondseo161—~4.3kAutomated safety check: PassMIT
Webobsidianxnohat/webobsidian268—~2.1kAutomated safety check: PassMIT

Similar skills

  • FLOW SEO Framework

    AgriciDaniel/claude-seo

    Brings the FLOW framework's stage-specific SEO prompts into the agent, from keyword discovery through backlinks, on-page work and conversion to local SEO, loaded on demand.

    19k GitHub starsUsed in 2 repos~1.4k tokens
    Marketing & SEOAuto-check passed
  • SEO Dataforseo

    AgriciDaniel/codex-seo

    Live SEO data via DataForSEO MCP server. An agent skill from AgriciDaniel/codex-seo.

    799 GitHub starsUsed in 2 repos~4.6k tokens
    Marketing & SEOAuto-check passed
  • Backlink Check

    Ryze-AI-Adgent/open-seo-mcp-skills

    Backlink profile for any domain — referring domains, authority, anchors, new/lost links, and a side-by-side vs a competitor.

    4.7k GitHub stars~515 tokensUpdated 16 days ago
    Marketing & SEOAuto-check passed
  • Beyondseo

    beyondtahir/beyondseo

    Audit websites, apply authorised SEO improvements and plan content, competitors and backlinks with evidence, design checks and optional project monitoring.

    161 GitHub stars~4.3k tokensUpdated 15 days ago
    Marketing & SEOAuto-check passed
  • Webobsidian

    xnohat/webobsidian

    Read, write, search, and manage notes in a WebObsidian vault through its Agent REST API (/api/v1).

    268 GitHub stars~2.1k tokensUpdated 3 mo ago
    Marketing & SEOAuto-check passed
  • Roblox Homepage Ranking Auditor

    kennyzir/7deer_skills

    Audit a Roblox or game-site homepage against the RB Auto Golden Homepage model.

    322 GitHub stars~3.8k tokensUpdated 11 days ago
    Marketing & SEOAuto-check passed

More from oaustegard/claude-skills

All 67 skills in this repo
  • Vega-Lite Interactive Charts

    oaustegard/claude-skills

    Builds interactive Vega-Lite charts from uploaded data: analyzes the fields, picks five to ten fitting chart types, and produces a React artifact with the data embedded inline.

    150 GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Single-File HTML Composer

    oaustegard/claude-skills

    Builds self-contained single-file HTML pages such as reports, decks, postmortems, flowcharts and prototypes from a small spec using a bundled Python composer and templates.

    150 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Deciding With Confidence

    oaustegard/claude-skills

    Routes, triages, flags and rates a piece of text with a probability for every option: which department or queue a ticket goes to, which intent a message expresses, whether a yes/no condition holds…

    150 GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Declauding

    oaustegard/claude-skills

    Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.

    150 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Preact Developer

    oaustegard/claude-skills

    Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.

    150 GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Bluesky Zeitgeist Sampler

    oaustegard/claude-skills

    Deprecated sampler that captures short windows of the Bluesky firehose, clusters trending terms and builds an HTML report; replaced by the browsing-bluesky skill.

    150 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Atprotoing

What does Atprotoing do?

Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and…. Atprotoing is an agent skill from oaustegard/claude-skills. Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis.

When should I use Atprotoing?

Atprotoing fits situations like: the AppView is down; A Bluesky read returns timeouts; asked who liked/replied/quoted/reposted something; pulling live Bluesky context cheaply.

How do I install Atprotoing in Claude Code?

Run `npx skills add oaustegard/claude-skills --skill atprotoing -a claude-code`. Or copy the skill folder (atprotoing in oaustegard/claude-skills) into .claude/skills/atprotoing in your project. Claude Code loads it when a task matches its description.

How do I install Atprotoing in Codex?

Run `npx skills add oaustegard/claude-skills --skill atprotoing -a codex`. Or copy the skill folder (atprotoing in oaustegard/claude-skills) into .agents/skills/atprotoing in your project. Codex loads it when a task matches its description.

Can I use Atprotoing 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 oaustegard/claude-skills --skill atprotoing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/atprotoing, .gemini/skills/atprotoing, .github/skills/atprotoing and .opencode/skills/atprotoing in your project.

What does Atprotoing need to run?

Going by SKILL.md and its folder, Atprotoing needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.

Does Atprotoing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Atprotoing 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Atprotoing use?

Atprotoing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Atprotoing use?

About 1.8k tokens (SKILL.md is roughly 7k 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 Atprotoing?

Skills that share tags, products or a category with Atprotoing: FLOW SEO Framework (AgriciDaniel/claude-seo, 19k stars), SEO Dataforseo (AgriciDaniel/codex-seo, 799 stars), Backlink Check (Ryze-AI-Adgent/open-seo-mcp-skills, 4.7k stars) and Beyondseo (beyondtahir/beyondseo, 161 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Atprotoing?

oaustegard (a GitHub user) maintains it in oaustegard/claude-skills, which has 150 GitHub stars. The repository holds 67 skills in this directory. The repository was last updated on October 9, 2026.

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