A collection of ATProtocol agent skills
Overview
A Claude Code plugin that packages ATProtocol-specific skills — lexicon design, DID resolution, XRPC, DAG-CBOR, MST/repo inspection, OAuth flows, record parsing — so agents can load specialized knowledge on demand instead of relying on generic recall. - atproto-attestation — badge.blue record attestations (inline + remote), ECDSA low-S, two-CID model. Rust · TypeScript · Go. - atproto-cid — CID parsing, construction, and validation (DASL / BDASL). Rust · TypeScript · Go. - atproto-identity-resolution — handle ↔ DID resolution, DID documents, bidirectional verification. Rust · TypeScript · Go. - atproto-lexicon — lexicon authoring, schema validation, XRPC invocation, record parsing. Rust · TypeScript · Go. - atproto-oauth — OAuth 2.1 + AT Proto profile (PAR, DPoP, PKCE, private_key_jwt). Rust · TypeScript (Node + Browser) · Go. - atproto-publish-lexicon — publish lexicons as com.atproto.lexicon.schema records; NSID authority binding.
README
atproto-skills
A Claude Code plugin that packages ATProtocol-specific skills — lexicon design, DID resolution, XRPC, DAG-CBOR, MST/repo inspection, OAuth flows, record parsing — so agents can load specialized knowledge on demand instead of relying on generic recall.
Status
Active. Seven skills shipped:
atproto-attestation— badge.blue record attestations (inline + remote), ECDSA low-S, two-CID model. Rust · TypeScript · Go.atproto-cid— CID parsing, construction, and validation (DASL / BDASL). Rust · TypeScript · Go.atproto-identity-resolution— handle ↔ DID resolution, DID documents, bidirectional verification. Rust · TypeScript · Go.atproto-lexicon— lexicon authoring, schema validation, XRPC invocation, record parsing. Rust · TypeScript · Go.atproto-oauth— OAuth 2.1 + AT Proto profile (PAR, DPoP, PKCE,private_key_jwt). Rust · TypeScript (Node + Browser) · Go.atproto-publish-lexicon— publish lexicons ascom.atproto.lexicon.schemarecords; NSID authority binding.atproto-repository— CAR v1, MST, DRISL canonical CBOR, commit signing/verification. Rust · TypeScript · Go.
Six are polyglot (language-neutral spec with per-language guides); atproto-publish-lexicon is a single-file skill. Skills load automatically when their trigger terms appear in conversation — see each skill’s description for the full trigger surface.
Bluesky-domain record idioms (app.bsky.* facets, richtext, embeds, threadgates, labels) are out of scope for this plugin.
Install
The repo ships a marketplace manifest at .claude-plugin/marketplace.json. Add it to your Claude Code config:
{
"extraKnownMarketplaces": {
"atproto-skills": {
"source": {
"source": "github",
"repo": "ngerakines/atproto-skills"
}
}
},
"enabledPlugins": {
"atproto-skills@atproto-skills": true
}
}
Prefer to work from a local clone? Swap the source:
"source": { "source": "filesystem", "path": "/absolute/path/to/atproto-skills" }
Use
Skills are loaded by Claude Code on demand based on their description field. You don’t invoke them directly — just work on ATProto code and talk about what you’re doing in natural language (“my did:plc lookup is returning 404”, “help me design a lexicon for…”). When a skill matches, the agent pulls it into context automatically.
Skills
Each skill lives at skills// with a polyglot structure (shared/ + rust/ / typescript/ / go/) unless noted otherwise. The scenarios below are the kinds of prompts that will load the skill.
atproto-attestation
Inline and remote record attestations per the badge.blue specification. Rust · TypeScript · Go.
- “Sign this record with an inline ECDSA attestation and append it to
signatures[].” - “Write a remote attestation: put a proof record in my repo, reference it from the subject via
strongRef.” - “Verify the attestations on this record I just fetched — inline and remote both.”
- “I’m getting
RemoteAttestationCidMismatch/SignatureValidationFailed— walk me through what could be off.” - “Port my Rust
atproto-attestationsigning code to@noble/curvesin TypeScript.”
atproto-cid
CID parsing, construction, and validation under the DASL / BDASL profile. Rust · TypeScript · Go.
- “Parse
bafyreib...and tell me whether it’s a valid DASL CID.” - “Compute the CID for this DAG-CBOR record / this raw blob.”
- “Decode the
$linkform in this JSON and the CBOR tag-42 form in this binary.” - “My encoder and my PDS disagree on the CID — what’s wrong with my canonicalization?”
- “Add BLAKE3 (BDASL) support for hashing large video blobs.”
atproto-identity-resolution
Handle ↔ DID resolution, DID document handling, and bidirectional verification. Rust · TypeScript · Go.
- “Resolve
alice.bsky.socialto a DID — try DNS TXT and/.well-known/atproto-didconcurrently.” - “Resolve
did:plc:…to a DID document, extract the PDS endpoint and signing key.” - “Run bidirectional verification: handle → DID →
alsoKnownAs→ handle.” - “My user’s handle is showing
handle.invalid— what’s the recovery flow?” - “Why does this
did:webresolve butdid:webvhrejects at fetch time in my library?”
atproto-lexicon
Lexicon authoring, schema validation, XRPC invocation, and protocol-level record parsing. Rust · TypeScript · Go.
- “Author a lexicon for a
com.example.notes.entryrecord with an open union and astrongRef.” - “Validate this record against its lexicon — strict on write, lenient on read.”
- “Invoke
com.atproto.repo.listRecordswith typed inputs/outputs from my Go client.” - “Consume the firehose and dispatch on
$typewithout a codegen step.” - “I want to add a field to an existing lexicon — is this change backward-compatible?”
atproto-oauth
OAuth 2.1 + AT Protocol profile: PAR, DPoP, PKCE, private_key_jwt, client metadata, session storage. Rust · TypeScript (Node + Browser) · Go.
- “Stand up a confidential BFF client:
/oauth/authorize,/oauth/callback,/oauth/refresh,/oauth/logout.” - “Publish my
/oauth-client-metadata.jsonwith the correct keys, scopes, anddpop_bound_access_tokens.” - “Build a public SPA client that authenticates with DPoP alone — no client secret.”
- “I’m getting
use_dpop_nonceon resource requests — how do I handle the nonce cycle?” - “Two nodes both tried to refresh the same token and one got
invalid_grant— mitigate the race.” - “Design a permission set with
repo:*,rpc:*, andinclude:clauses.”
atproto-publish-lexicon
Publishing lexicons as com.atproto.lexicon.schema records and resolving them back by NSID. Single-file skill.
- “Publish my new
com.example.foo.getBarlexicon to my PDS — full pipeline.” - “Bump the revision on an existing lexicon and gate the publish on a compatibility check.”
- “Resolve an unknown NSID back to its lexicon document: DNS
_lexicon.→ DID → PDS → record.” - “My lexicon published fine but consumers can’t resolve it — check authority, rkey, and the
_lexicon.TXT binding.” - “What’s the social contract for
revisionbumps vs. minting a new NSID?”
atproto-repository
CAR v1, MST, DRISL canonical CBOR, commit signing and verification. Rust · TypeScript · Go.
- “Parse a CAR v1 export from
com.atproto.sync.getRepoand walk the MST.” - “Verify the commit signature on this CAR against the account’s signing key.”
- “Insert a record, recompute the MST root, produce a signed commit.”
- “Diff two MSTs and emit firehose-style create/update/delete ops.”
- “I’m hitting
prev: nullvs. omitted behavior mismatch between two implementations — how do I align?” - “My block store says
CID mismatchon one block — which canonical-CBOR rule did I break?”
Add a skill
- Pick the right template:
templates/SKILL.md.templatefor a single-file skill (narrow topic, or a topic that doesn’t diverge meaningfully across languages).templates/POLYGLOT-SKILL.md.template+ the scaffolding undertemplates/polyglot/when the topic is language-neutral but the idioms differ across Rust, TypeScript, or Go. Seetemplates/polyglot/README.mdfor the layout it produces.
- Copy it into
skills//and fill in the frontmatter (namemust match the directory) plus the body. - Read
CLAUDE.md— the authoring guide covering skill anatomy,descriptionfield conventions, and the local testing loop. - Open a PR; see
CONTRIBUTING.mdfor the checklist.
License
MIT. See LICENSE.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add ngerakines/atproto-skills