atproto-attestation

Compute content CIDs for AT Protocol attestations with inline or remote signatures.

46|3|Updated Apr 21, 2026
One-click install
npx skills add https://github.com/ngerakines/atproto-skills --skill atproto-attestation
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: atproto-attestation
Source: https://github.com/ngerakines/atproto-skills/tree/main/skills/atproto-attestation
Command: npx skills add https://github.com/ngerakines/atproto-skills --skill atproto-attestation

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This skill provides end-to-end tooling and guidance to implement, debug, and reason about AT Protocol attestations (inline with embedded ECDSA signatures or remote with a strongRef) across Rust, TypeScript, and Go, enabling cross-language interoperability for content-CID-based attestations.

Core Features & Use Cases

  • CID-first signing: compute the 36-byte content CID over the subject record plus the merged $sig metadata (including repository) and sign or reference it.
  • Inline and remote attestations: generate in-process inline signatures or publish a separate proof record and attach a strongRef in the subject record.
  • Cross-language interop: follow language-specific guides to port signing, verification, and normalization between Rust, TypeScript, and Go.

Quick Start

Create an inline attestation for a sample ATProto record using a P-256 or K-256 key and inspect the generated content CID and signature.

Frequently Asked Questions about atproto-attestation

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I sign ATProto records with ECDSA for verifiable attestations?▼

Inline attestations embed the ECDSA signature directly into the subject record by merging the $sig metadata before computing the 36-byte DAG-CBOR content CID. This allows in-process signature generation without publishing a separate proof record.

What is the difference between inline and remote attestations in ATProto?▼

Inline attestations embed the signature directly in the record, while remote attestations publish a separate proof record and attach a strongRef. Remote attestations add replay protection by binding the proof to a specific repository.

How does DAG-CBOR content CID computation work for ATProto attestations?▼

The content CID is computed over the subject record merged with $sig metadata and repository information, producing a 36-byte DAG-CBOR representation. This CID is then signed or referenced to create the attestation proof.

Can I implement ATProto attestations across Rust, TypeScript, and Go?▼

The Skill provides language-specific libraries and shared specs for Rust, TypeScript, and Go to ensure cross-language compatibility. It guides porting signing, verification, and normalization logic between these languages.

How do remote attestations prevent replay attacks in ATProto?▼

Remote attestations prevent replay attacks by binding the proof record to a specific repository. The strongRef and repository binding ensure the attestation cannot be reused across different repositories or contexts.

Does this Skill require low-s signature normalization for ECDSA attestations?▼

The Skill supports low-s signature normalization for ECDSA attestations, ensuring deterministic signatures compatible across different language implementations and cryptographic libraries.