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.