a16z-blog

star 0

Browse and read posts on a16zcrypto.com. Use when the user asks to find, list, or read articles from a16z crypto's blog (https://a16zcrypto.com), filter posts by tag or author, or pull article text into the conversation. The site has no llms.txt, sitemap, or RSS, so this skill scrapes the embedded Algolia JSON on tag pages instead.

ClementWalter By ClementWalter schedule Updated 4/30/2026

name: a16z-blog description: Browse and read posts on a16zcrypto.com. Use when the user asks to find, list, or read articles from a16z crypto's blog (https://a16zcrypto.com), filter posts by tag or author, or pull article text into the conversation. The site has no llms.txt, sitemap, or RSS, so this skill scrapes the embedded Algolia JSON on tag pages instead.

a16z crypto blog CLI

A small uv-based CLI that enumerates and reads posts from https://a16zcrypto.com. Bundled as a16z.py next to this SKILL.md.

When to use this skill

  • "What has a16z written about ${topic}?"
  • "List posts tagged X on a16z crypto."
  • "Read the article about Y from a16z and summarize it."
  • "Pull the full text of <a16zcrypto.com URL>."

If the user wants any post on a16zcrypto.com, prefer this skill over a generic curl/WebFetch — it returns clean, anchored body text without site chrome.

Why a CLI (and not just WebFetch)

The site is a static Astro app behind CloudFront with no llms.txt, robots.txt, sitemap.xml, or RSS feed. Tag pages render their post lists client-side via an Algolia search that is gated behind a WAF challenge (/api/generate-key returns HTTP 202 with a challenge). However, every tag page server-renders a single page of Algolia hits as escaped JSON in the HTML source, with rich post metadata (title, date, permalink, description, authors, tag_slugs). This CLI parses that JSON for listings and parses the static post HTML for body text.

Invocation

The CLI is a16z.py in this skill's directory. It uses uv inline script metadata, so dependencies (httpx, click, beautifulsoup4) are auto-installed on first run — no venv, no pip install. Requires uv on PATH.

Run it via:

uv run "$CLAUDE_SKILL_DIR/a16z.py" <command> [args...]

…or, if executable, just "$CLAUDE_SKILL_DIR/a16z.py" <command>. (When this skill is installed by npx skills, $CLAUDE_SKILL_DIR resolves to the skill's install path, e.g. ~/.claude/skills/a16z-blog/.)

Commands

list — list articles

a16z.py list                         # full archive (~770 posts; ~2s warm)
a16z.py list -n 20                   # cap at N
a16z.py list -t ai-crypto            # filter by tag slug (AND, repeatable)
a16z.py list -t stablecoins -t defi  # multiple tags (AND-filter)
a16z.py list -a "Chris Dixon"        # filter by author substring (repeatable)
a16z.py list --json                  # JSON for downstream piping
a16z.py list ai-agents-agentic-ai    # SINGLE-tag mode: faster but capped at 20

Default output columns: date | slug | tags | title.

The bare list form (no tag arg) does a BFS crawl over every tag page on the site and unions the results. This is necessary because no global enumeration endpoint exists; a post truncated by Algolia's 20-hit cap on one tag is recovered via its other tags.

read — fetch one article

a16z.py read ai-agents-defi-exploits                       # bare slug
a16z.py read /posts/article/ai-agents-defi-exploits/       # path
a16z.py read https://a16zcrypto.com/posts/article/...      # full URL
a16z.py read <slug> -o article.md                          # write to file
a16z.py read <slug> --no-meta                              # skip title/source header

Bare slugs default to /posts/article/<slug>/ and fall back to /posts/podcast/<slug>/ on a 404 (podcasts and articles share the slug namespace).

Output is plain Markdown-ish text: title, source URL, optional description, then headings/paragraphs/list items in document order. Site chrome (<nav>, <header>, <footer>) is stripped; body extraction is anchored at the article's <h1> so sidebar items don't leak in.

tags — list tags by post count

a16z.py tags                  # all tags across the blog with post counts
a16z.py tags ai-crypto        # tags co-occurring with this one

Useful for discovering tag slugs to feed back into list -t.

Output discipline

list writes a one-line crawling all tags… notice and a final found N posts across the site. to stderr. Stdout is always machine-parseable (plain text table or JSON with --json). When piping into another tool, the stderr lines won't pollute the data.

For the read command, prefer --no-meta if you're going to add your own header to the output downstream.

Pitfalls and known limits

  • 20-hit cap per tag page. Single-tag mode (list TAG) returns at most 20 posts because that's all the static HTML embeds. Use the bare list form with -t TAG for the full set.
  • No author enumeration. The CLI filters on author substrings in the metadata it already has — there's no authors command. Listing all authors requires list --json | jq '.[].authors[]' | sort -u.
  • Algolia search is WAF-gated. Free-text search across the blog is not available without a real browser. Use tags + list -t for discovery.
  • Layout. SKILL.md and a16z.py both live at the repo root; the whole repo is the skill. npx skills add copies/symlinks both into ~/.claude/skills/a16z-blog/.
Install via CLI
npx skills add https://github.com/ClementWalter/a16z-blog-llm --skill a16z-blog
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
ClementWalter
ClementWalter Explore all skills →