TimesFM Forecasting
google-research/timesfm
Forecasts any univariate time series zero-shot with Google's TimesFM model, returning point forecasts and calibrated prediction intervals without training.
Browse Bluesky content via API and firehose - search posts, fetch user activity, sample trending topics, read feeds and lists, analyze and categorize accounts.
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install oaustegard/claude-skills browsing-bluesky --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/browsing-bluesky .claude/skills/browsing-bluesky && rm -rf skills-srcUse ~/.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/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .claude/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/oaustegard/claude-skills/tree/main/browsing-blueskyType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install oaustegard/claude-skills browsing-bluesky --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/browsing-bluesky .agents/skills/browsing-bluesky && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .agents/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install oaustegard/claude-skills browsing-bluesky --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/browsing-bluesky .cursor/skills/browsing-bluesky && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .cursor/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/oaustegard/claude-skills.git --path browsing-bluesky--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install oaustegard/claude-skills browsing-bluesky --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/browsing-bluesky .gemini/skills/browsing-bluesky && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .gemini/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install oaustegard/claude-skills browsing-blueskyInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/browsing-bluesky .github/skills/browsing-bluesky && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .github/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill browsing-bluesky -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install oaustegard/claude-skills browsing-bluesky --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/browsing-bluesky .opencode/skills/browsing-bluesky && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "browsing-bluesky" agent skill from https://github.com/oaustegard/claude-skills/tree/main/browsing-bluesky into .opencode/skills/browsing-bluesky/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "browsing-bluesky", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
browsing-blueskyBrowse Bluesky content via API and firehose - search posts, fetch user activity, sample trending topics, read feeds and lists, analyze and categorize accounts.
Browsing Bluesky is an agent skill from oaustegard/claude-skills. Browse Bluesky content via API and firehose - search posts, fetch user activity, sample trending topics, read feeds and lists, analyze and categorize accounts. Supports authenticated access for personalized feeds. Use for Bluesky research, user monitoring, trend analysis, feed reading, firehose sampling, account categorization.
Its SKILL.md is about 3.3k 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 Data & Analytics, covering Forecasting and time series. It works with Bluesky. The repository describes itself as: My collection of Claude skills. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 90b0f1b. It shows what the files ask for, not the result of running them.
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.
Ships 4 files in scripts/ (Python and JavaScript), which the agent can run.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
bsky.appapi.bsky.appbsky.socialFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
BSKY_APP_PASSWORDMUNINN_BSKY_APP_PASSWORDANTHROPIC_API_KEYAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Browsing Bluesky loads about 3.3k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 951 words of instructions outside code blocks.
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.
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.
The full file from oaustegard/claude-skills at commit 90b0f1b, republished under its MIT licence (© oaustegard). 951 words, ~3,290 tokens.
.claude/skills/browsing-bluesky/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Access Bluesky content through public APIs and real-time firehose. Supports optional authentication for personalized feeds. Includes account analysis for categorization.
Add skill directory to path and import:
import sys
sys.path.insert(0, '/path/to/skills/browsing-bluesky') # or use .claude/skills symlink path
from browsing_bluesky import (
# Core browsing
search_posts, get_user_posts, get_profile, get_feed_posts, sample_firehose,
get_thread, get_quotes, get_likes, get_reposts,
get_followers, get_following, search_users,
# Trending
get_trending, get_trending_topics,
# Account analysis
get_all_following, get_all_followers, extract_post_text,
extract_keywords, analyze_account, analyze_accounts,
# Authentication utilities
is_authenticated, get_authenticated_user, authenticated_identity,
clear_session
)Authentication enables personalized feeds (like Paper Skygest) that require knowing who's asking.
export BSKY_HANDLE="yourhandle.bsky.social"
export BSKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"Two credential pairs are recognised, and the prefix is the only difference:
| Pair | Identity |
|---|---|
MUNINN_BSKY_HANDLE / MUNINN_BSKY_APP_PASSWORD | muninn — preferred |
BSKY_HANDLE / BSKY_APP_PASSWORD | owner — used when no Muninn pair is set |
BSKY_IDENTITY=muninn|owner picks one outright, and a pair named that way is
never substituted for: asking for muninn with no Muninn pair set reads as
public rather than quietly reading as the owner. An unrecognised value raises.
This matters because a booted container holds both pairs. Until
2026-08-28 the unprefixed one won, so every authenticated read — the following
timeline, and the mutes, blocks and labelers that shape all of them — came back
as the account owner with nothing in the output saying so, from a skill
documented as read-only that was nonetheless holding an app password carrying
write scope on his account. On a machine with only the documented BSKY_*
pair, nothing changes.
BSKY_IDENTITY is configuration, not auth failure, and raises insteadif is_authenticated():
print(f"Logged in as: {get_authenticated_user()}")
else:
print("Using public access")
# Which pair answered — a handle alone does not say whether it was chosen
# or simply the only one set.
authenticated_identity() # {'identity': 'muninn', 'handle': ..., 'did': ...}
# Clear session if needed (e.g., switching accounts or identities)
clear_session()Use search_posts() with query syntax matching bsky.app advanced search:
event sourcing"event sourcing"from:acairns.co.uk or use author= paramsince:2025-01-01 or use since= param#python mentions:user domain:github.comCombine query syntax with function params for complex searches.
get_profile(handle) for context (bio, follower count, post count)get_user_posts(handle, limit=N)search_posts(query, author=handle)Recommended workflow — trending API first, firehose for deep dives:
topics = get_trending_topics(limit=10)
# Returns: {topics: [{topic, display_name, description, link}, ...],
# suggested: [...]}trends = get_trending(limit=10)
for t in trends:
print(f"{t['display_name']} — {t['post_count']} posts ({t['status']})")
# Each trend includes: topic, display_name, link, started_at,
# post_count, status, category, actorsposts = search_posts(trend["topic"], limit=25)Prerequisites: Install Node.js dependencies once per session:
cd /home/claude && npm install ws https-proxy-agent 2>/dev/nulldata = sample_firehose(duration=30) # Full firehose sample
data = sample_firehose(duration=20, filter="python") # Filtered sampleReturns dict with keys:
{startTime, endTime, durationSeconds} — sampling time range{totalReceived, totalPosts, postsPerSecond, filter, languages} — volume metrics and language breakdown[[word, count], ...] — top 50 words (count >= 3)[[bigram, count], ...] — top 30 bigrams (count >= 2)[[trigram, count], ...] — top 20 trigrams (count >= 2)[[entity, count], ...] — top 25 handles/hashtags (count >= 2)[{text, altTexts, hasImages}, ...] — first 50 matching postsget_feed_posts() accepts:
https://bsky.app/profile/austegard.com/lists/3lankcdrlip2fhttps://bsky.app/profile/did:plc:xxx/feed/feednameat://did:plc:xxx/app.bsky.graph.list/xyzThe function extracts the AT-URI from URLs automatically.
Fetch full thread context for a post with parents and replies:
thread = get_thread("https://bsky.app/profile/user/post/xyz", depth=10)
# Returns: {post: {...}, parent: {...}, replies: [...]}Discover posts that quote a specific post:
quotes = get_quotes("https://bsky.app/profile/user/post/xyz")
for q in quotes:
print(f"@{q['author_handle']}: {q['text'][:80]}")Get users who engaged with a post:
likes = get_likes(post_url)
reposts = get_reposts(post_url)
# Accepts both URLs and AT-URIs
likes = get_likes("at://did:plc:.../app.bsky.feed.post/...")Every parsed post carries an images field — a list of
{alt, url, transcription} dicts, one per embed image. The legacy
image_alts: list[str] field is preserved (non-empty alts only).
When alt text is missing and the image content matters, opt in to model
transcription via the transcribe parameter on any post-fetch function
(get_user_posts, search_posts, get_feed_posts, get_thread,
get_quotes):
# Routine/bulk work (zeitgeist, inbox review, news scans) —
# gemini-2.5-flash-lite is the recommended default. Cheapest production
# model anywhere ($0.10/$0.40 per 1M tokens), ~95% accuracy on dense
# screenshots in May 2026 benchmarks:
posts = get_user_posts("ayourtch.bsky.social", limit=40, transcribe="gemini-lite")
# Token-perfect transcription, still cheap:
posts = get_user_posts(..., transcribe="gemini-flash")
# Frontier model with thinking_level=minimal — for cases where the image
# content needs reasoning, not just transcription:
posts = get_user_posts(..., transcribe="gemini-3.5-flash")
# Anthropic single-vendor option (note: empirically weaker prompt-following
# than Gemini on dense transcription — Haiku tends to summarize rather
# than transcribe):
posts = get_user_posts(..., transcribe="haiku")
# Interactive sessions where image is part of the active task and you want
# conversation context to inform interpretation (only available on Anthropic):
thread = get_thread(post_url, transcribe="opus")
# Default (no transcription) — current behavior preserved:
posts = get_user_posts("ayourtch.bsky.social", limit=40)Policy is invariant across all callers: images with non-empty alt text are
never transcribed (the author already described the image; trust it).
Only images with missing or empty alt are sent to the model. Network or
API failures leave transcription as None; callers degrade silently.
Cost/quality empirics (May 2026, n=3 dense terminal screenshots, single run each — sample size is small, treat as directional):
| Alias | Latency | $/image | Chord-token recall |
|---|---|---|---|
gemini-lite | ~8s | ~$0.001 | 95% |
gemini-flash | ~10s | ~$0.003 | 100% |
gemini-3.5-flash | ~10s | ~$0.014 | 100% |
haiku | ~7s | ~$0.008 | 18% (summarizes) |
opus | ~20s | ~$0.12 | 91% |
The haiku and opus rows were measured on Haiku 4.5 and Opus 4.7. The aliases now
resolve to claude-haiku-5-5 and claude-opus-5-5; those rows have not been re-measured.
Requires either ANTHROPIC_API_KEY (or API_KEY in /mnt/project/claude.env)
for the haiku / opus aliases, or CF AI Gateway credentials in
/mnt/project/proxy.env for the gemini-* aliases. Transcription only
fires when the parameter is set, so callers without the relevant
credentials can simply pick a different alias or leave the feature off.
Navigate follower/following relationships:
followers = get_followers("handle.bsky.social")
following = get_following("handle.bsky.social")
# Returns list of actor dicts with handle, display_name, did, description, etc.Search for users by name, handle, or bio:
users = search_users("machine learning researcher")
for u in users:
print(f"{u['display_name']} (@{u['handle']}): {u['description'][:100]}")https://api.bsky.app/xrpc/ for unauthenticated readshttps://bsky.social/xrpc/ for authenticated requestsapp.bsky.unspecced.getTrends (rich) and app.bsky.unspecced.getTrendingTopics (lightweight)wss://jetstream1.us-east.bsky.network/subscribeAll API functions return structured dicts with:
uri: AT protocol identifiertext: Post contentcreated_at: ISO timestampauthor_handle: User handleauthor_name: Display namelikes, reposts, replies: Engagement countslinks: Full URLs extracted from post facets (post text truncates URLs with "...")image_alts: Alt text from embedded imagesurl: Direct link to post on bsky.appProfile function returns: handle, display_name, description, followers, following, posts, did
Analyze accounts for categorization by topic. Fetches profile and posts, extracts keywords, and returns structured data for Claude to categorize.
# Analyze accounts you follow
results = analyze_accounts(following="yourhandle.bsky.social", limit=50)
# Analyze your followers
results = analyze_accounts(followers="yourhandle.bsky.social", limit=50)
# Analyze specific handles
results = analyze_accounts(handles=["user1.bsky.social", "user2.bsky.social"])analysis = analyze_account("user.bsky.social")
# Returns: {handle, display_name, description, keywords, post_count, followers, following}Stopwords parameter filters domain-specific noise:
"en": English (general purpose, default)"ai": AI/ML domain (filters tech boilerplate)"ls": Life Sciences (filters research methodology)results = analyze_accounts(following="handle", stopwords="ai")Requires: extracting-keywords skill with YAKE venv for keyword extraction.
results = analyze_accounts(
following="handle",
exclude_patterns=["bot", "spam", "promo"] # Skip accounts matching these
)For large account lists beyond the 100 limit of get_following/get_followers:
all_following = get_all_following("handle", limit=500) # Handles pagination
all_followers = get_all_followers("handle", limit=500)Each analyzed account returns:
{
"handle": "user.bsky.social",
"display_name": "User Name",
"description": "Bio text here",
"keywords": ["keyword1", "keyword2", "keyword3"],
"post_count": 20,
"followers": 1234,
"following": 567
}Claude uses bio + keywords to categorize accounts by topic without hardcoded rules
© oaustegard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (scripts) in browsing-bluesky of oaustegard/claude-skills.
Open the folder on GitHubat commit 90b0f1b
Browsing Bluesky 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Browsing Bluesky this skilloaustegard/claude-skills | 150 | — | ~3.3k | Automated safety check: Pass | MIT | |
| TimesFM Forecastinggoogle-research/timesfm | 34k | — | ~4.7k | Automated safety check: Pass | Apache-2.0 | |
| StatsmodelszLanqing/codex-claude-academic-skills | 4.7k | 15 repos | ~4.9k | Automated safety check: Pass | BSD-3-Clause | |
| Timesfm ForecastingzLanqing/codex-claude-academic-skills | 4.7k | 3 repos | ~7.5k | Automated safety check: Notes | Apache-2.0 | |
| Find Hypertable Candidatestimescale/pg-aiguide | 1.9k | 1 repos | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| Pensieve Searcharkohut/pensieve | 1.4k | — | ~8.2k | Automated safety check: Pass | Apache-2.0 |
google-research/timesfm
Forecasts any univariate time series zero-shot with Google's TimesFM model, returning point forecasts and calibrated prediction intervals without training.
zLanqing/codex-claude-academic-skills
Statistical models library for Python. An agent skill from zLanqing/codex-claude-academic-skills.
zLanqing/codex-claude-academic-skills
Zero-shot time series forecasting with Google's TimesFM foundation model.
timescale/pg-aiguide
A skill your agent uses to analyze an existing PostgreSQL database and identify which tables should be converted to Timescale/TimescaleDB hypertables.
arkohut/pensieve
Search the user's local Pensieve screenshot archive by text, app, or time range.
ninehills/skills
Market prediction skill using Kronos. An agent skill from ninehills/skills.
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.
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.
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…
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.
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.
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.
Works with
Categories
Browse Bluesky content via API and firehose - search posts, fetch user activity, sample trending topics, read feeds and lists, analyze and categorize accounts. Browsing Bluesky is an agent skill from oaustegard/claude-skills. Browse Bluesky content via API and firehose - search posts, fetch user activity, sample trending topics, read feeds and lists, analyze and categorize accounts.
Browsing Bluesky fits situations like: bluesky research; user monitoring; firehose sampling; account categorization.
Run `npx skills add oaustegard/claude-skills --skill browsing-bluesky -a claude-code`. Or copy the skill folder (browsing-bluesky in oaustegard/claude-skills) into .claude/skills/browsing-bluesky in your project. Claude Code loads it when a task matches its description.
Run `npx skills add oaustegard/claude-skills --skill browsing-bluesky -a codex`. Or copy the skill folder (browsing-bluesky in oaustegard/claude-skills) into .agents/skills/browsing-bluesky in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add oaustegard/claude-skills --skill browsing-bluesky -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/browsing-bluesky, .gemini/skills/browsing-bluesky, .github/skills/browsing-bluesky and .opencode/skills/browsing-bluesky in your project.
Going by SKILL.md and its folder, Browsing Bluesky needs Python and JavaScript for the scripts in its folder, the command-line tools its instructions call (npm) and credentials named BSKY_APP_PASSWORD, MUNINN_BSKY_APP_PASSWORD, ANTHROPIC_API_KEY and API_KEY. Our summary lists: Python 3; Node.js; A credential in ANTHROPIC_API_KEY; A credential in API_KEY.
SKILL.md names 3 domains. In commands or code: bsky.app, api.bsky.app and bsky.social; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
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.
Browsing Bluesky is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Browsing Bluesky: TimesFM Forecasting (google-research/timesfm, 34k stars), Statsmodels (zLanqing/codex-claude-academic-skills, 4.7k stars), Timesfm Forecasting (zLanqing/codex-claude-academic-skills, 4.7k stars) and Find Hypertable Candidates (timescale/pg-aiguide, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.