The opam repository for my Advent of Agentic Humps 2025

Add ocaml-atp dev packages

Core libraries:
- atp: AT Protocol IPLD implementation
- atp-xrpc: XRPC client for AT Protocol
- xrpc-auth: Authentication helpers for CLI apps

Code generation:
- hermest: Lexicon code generator
- hermest-cli: CLI for hermest

Generated lexicon libraries:
- atp-lexicon-atproto: com.atproto.* types
- atp-lexicon-bsky: app.bsky.* types
- atp-lexicon-tangled: sh.tangled.* types
- atp-lexicon-standard-site: site.standard.* types

Application CLIs:
- bsky: Bluesky client
- tangled: Tangled git collaboration client
- standard-site: Blog/publication management client

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+446
+34
packages/atp-lexicon-atproto/atp-lexicon-atproto.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "AT Protocol core lexicon types for OCaml" 3 + description: 4 + "Generated OCaml types and jsont codecs for com.atproto.* lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp" {= version} 15 + "jsont" {>= "0.1"} 16 + "odoc" {with-doc} 17 + ] 18 + build: [ 19 + ["dune" "subst"] {dev} 20 + [ 21 + "dune" 22 + "build" 23 + "-p" 24 + name 25 + "-j" 26 + jobs 27 + "@install" 28 + "@runtest" {with-test} 29 + "@doc" {with-doc} 30 + ] 31 + ] 32 + url { 33 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 34 + }
+34
packages/atp-lexicon-bsky/atp-lexicon-bsky.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Bluesky lexicon types for OCaml" 3 + description: 4 + "Generated OCaml types and jsont codecs for app.bsky.* lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp" {= version} 15 + "jsont" {>= "0.1"} 16 + "odoc" {with-doc} 17 + ] 18 + build: [ 19 + ["dune" "subst"] {dev} 20 + [ 21 + "dune" 22 + "build" 23 + "-p" 24 + name 25 + "-j" 26 + jobs 27 + "@install" 28 + "@runtest" {with-test} 29 + "@doc" {with-doc} 30 + ] 31 + ] 32 + url { 33 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 34 + }
+34
packages/atp-lexicon-standard-site/atp-lexicon-standard-site.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Standard Site lexicon types for OCaml" 3 + description: 4 + "Generated OCaml types and jsont codecs for site.standard.* lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp" {= version} 15 + "jsont" {>= "0.1"} 16 + "odoc" {with-doc} 17 + ] 18 + build: [ 19 + ["dune" "subst"] {dev} 20 + [ 21 + "dune" 22 + "build" 23 + "-p" 24 + name 25 + "-j" 26 + jobs 27 + "@install" 28 + "@runtest" {with-test} 29 + "@doc" {with-doc} 30 + ] 31 + ] 32 + url { 33 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 34 + }
+34
packages/atp-lexicon-tangled/atp-lexicon-tangled.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Tangled.sh lexicon types for OCaml" 3 + description: 4 + "Generated OCaml types and jsont codecs for sh.tangled.* lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp" {= version} 15 + "jsont" {>= "0.1"} 16 + "odoc" {with-doc} 17 + ] 18 + build: [ 19 + ["dune" "subst"] {dev} 20 + [ 21 + "dune" 22 + "build" 23 + "-p" 24 + name 25 + "-j" 26 + jobs 27 + "@install" 28 + "@runtest" {with-test} 29 + "@doc" {with-doc} 30 + ] 31 + ] 32 + url { 33 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 34 + }
+39
packages/atp-xrpc/atp-xrpc.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "XRPC client for AT Protocol" 3 + description: 4 + "XRPC client library for communicating with AT Protocol Personal Data Servers (PDS). Provides query and procedure calls, session management with automatic JWT token refresh, and structured error handling integrated with Eio." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "dune" {>= "3.20"} 13 + "atp" {= version} 14 + "requests" {>= "0.1"} 15 + "jsont" {>= "0.1"} 16 + "jsonwt" {>= "0.1"} 17 + "ptime" {>= "1.0"} 18 + "uri" {>= "4.0"} 19 + "eio" {>= "1.0"} 20 + "fmt" 21 + "odoc" {with-doc} 22 + ] 23 + build: [ 24 + ["dune" "subst"] {dev} 25 + [ 26 + "dune" 27 + "build" 28 + "-p" 29 + name 30 + "-j" 31 + jobs 32 + "@install" 33 + "@runtest" {with-test} 34 + "@doc" {with-doc} 35 + ] 36 + ] 37 + url { 38 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 39 + }
+39
packages/atp/atp.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "AT Protocol IPLD implementation for OCaml" 3 + description: 4 + "This library implements IPLD (InterPlanetary Linked Data) with specific support for the AT Protocol's data encoding conventions. It provides Content Identifiers (CID), DAG-CBOR encoding, Merkle Search Trees (MST), repository serialization (CAR format), and synchronization primitives." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "bytesrw" {>= "0.1"} 15 + "jsont" {>= "0.1"} 16 + "digestif" {>= "1.2"} 17 + "multibase" {>= "0.1"} 18 + "eio" {>= "1.0"} 19 + "base64" {>= "3.5"} 20 + "fmt" 21 + "odoc" {with-doc} 22 + ] 23 + build: [ 24 + ["dune" "subst"] {dev} 25 + [ 26 + "dune" 27 + "build" 28 + "-p" 29 + name 30 + "-j" 31 + jobs 32 + "@install" 33 + "@runtest" {with-test} 34 + "@doc" {with-doc} 35 + ] 36 + ] 37 + url { 38 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 39 + }
+43
packages/bsky/bsky.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Bluesky client library and CLI" 3 + description: 4 + "Library and command-line interface for Bluesky using AT Protocol." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp" {= version} 15 + "atp-xrpc" {= version} 16 + "atp-lexicon-atproto" {= version} 17 + "atp-lexicon-bsky" {= version} 18 + "cmdliner" {>= "1.2"} 19 + "jsont" {>= "0.1"} 20 + "tomlt" {>= "0.1"} 21 + "xdge" {>= "0.1"} 22 + "re" {>= "1.0"} 23 + "eio_main" 24 + "fmt" 25 + "odoc" {with-doc} 26 + ] 27 + build: [ 28 + ["dune" "subst"] {dev} 29 + [ 30 + "dune" 31 + "build" 32 + "-p" 33 + name 34 + "-j" 35 + jobs 36 + "@install" 37 + "@runtest" {with-test} 38 + "@doc" {with-doc} 39 + ] 40 + ] 41 + url { 42 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 43 + }
+34
packages/hermest-cli/hermest-cli.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "CLI for hermest lexicon code generator" 3 + description: 4 + "Command-line interface for generating OCaml code from AT Protocol lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "hermest" {= version} 15 + "cmdliner" {>= "1.2"} 16 + "odoc" {with-doc} 17 + ] 18 + build: [ 19 + ["dune" "subst"] {dev} 20 + [ 21 + "dune" 22 + "build" 23 + "-p" 24 + name 25 + "-j" 26 + jobs 27 + "@install" 28 + "@runtest" {with-test} 29 + "@doc" {with-doc} 30 + ] 31 + ] 32 + url { 33 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 34 + }
+33
packages/hermest/hermest.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "AT Protocol lexicon code generator for OCaml" 3 + description: 4 + "Hermest generates OCaml types and jsont codecs from AT Protocol lexicon JSON schemas. The generated code uses the atp library for IPLD primitives." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "yojson" {>= "2.0"} 15 + "odoc" {with-doc} 16 + ] 17 + build: [ 18 + ["dune" "subst"] {dev} 19 + [ 20 + "dune" 21 + "build" 22 + "-p" 23 + name 24 + "-j" 25 + jobs 26 + "@install" 27 + "@runtest" {with-test} 28 + "@doc" {with-doc} 29 + ] 30 + ] 31 + url { 32 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 33 + }
+41
packages/standard-site/standard-site.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Standard Site client library and CLI for AT Protocol" 3 + description: 4 + "High-level library and command-line interface for managing blogs and publications on AT Protocol using the Standard Site lexicons." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp-xrpc" {= version} 15 + "atp-lexicon-atproto" {= version} 16 + "atp-lexicon-standard-site" {= version} 17 + "jsont" {>= "0.1"} 18 + "eio" {>= "1.0"} 19 + "ptime" {>= "1.0"} 20 + "cmdliner" {>= "1.2"} 21 + "eio_main" 22 + "fmt" 23 + "odoc" {with-doc} 24 + ] 25 + build: [ 26 + ["dune" "subst"] {dev} 27 + [ 28 + "dune" 29 + "build" 30 + "-p" 31 + name 32 + "-j" 33 + jobs 34 + "@install" 35 + "@runtest" {with-test} 36 + "@doc" {with-doc} 37 + ] 38 + ] 39 + url { 40 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 41 + }
+42
packages/tangled/tangled.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Tangled client library and CLI for AT Protocol" 3 + description: 4 + "High-level library and command-line interface for interacting with Tangled decentralized git collaboration platform on AT Protocol." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp-xrpc" {= version} 15 + "atp-lexicon-tangled" {= version} 16 + "jsont" {>= "0.1"} 17 + "eio" {>= "1.0"} 18 + "ptime" {>= "1.0"} 19 + "tomlt" {>= "0.1"} 20 + "xdge" {>= "0.1"} 21 + "cmdliner" {>= "1.2"} 22 + "eio_main" 23 + "fmt" 24 + "odoc" {with-doc} 25 + ] 26 + build: [ 27 + ["dune" "subst"] {dev} 28 + [ 29 + "dune" 30 + "build" 31 + "-p" 32 + name 33 + "-j" 34 + jobs 35 + "@install" 36 + "@runtest" {with-test} 37 + "@doc" {with-doc} 38 + ] 39 + ] 40 + url { 41 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 42 + }
+39
packages/xrpc-auth/xrpc-auth.dev/opam
··· 1 + opam-version: "2.0" 2 + synopsis: "Authentication helpers for AT Protocol CLIs" 3 + description: 4 + "Shared authentication library for AT Protocol CLI applications. Provides session persistence, credential management with automatic token refresh, and Cmdliner helpers for building auth commands." 5 + maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 6 + authors: ["Anil Madhavapeddy"] 7 + license: "ISC" 8 + homepage: "https://tangled.org/@anil.recoil.org/ocaml-atp" 9 + bug-reports: "https://tangled.org/@anil.recoil.org/ocaml-atp/issues" 10 + dev-repo: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git" 11 + depends: [ 12 + "ocaml" {>= "5.1"} 13 + "dune" {>= "3.20"} 14 + "atp-xrpc" {= version} 15 + "jsont" {>= "0.1"} 16 + "eio" {>= "1.0"} 17 + "ptime" {>= "1.0"} 18 + "cmdliner" {>= "1.2"} 19 + "eio_main" 20 + "fmt" 21 + "odoc" {with-doc} 22 + ] 23 + build: [ 24 + ["dune" "subst"] {dev} 25 + [ 26 + "dune" 27 + "build" 28 + "-p" 29 + name 30 + "-j" 31 + jobs 32 + "@install" 33 + "@runtest" {with-test} 34 + "@doc" {with-doc} 35 + ] 36 + ] 37 + url { 38 + src: "git+https://tangled.org/@anil.recoil.org/ocaml-atp.git#main" 39 + }