Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Introduction

troposphere is the AT Protocol arm of Coop, ROOST’s open-source trust & safety platform. Together they are a full alternative to Ozone: troposphere ingests AT Protocol content into Coop, signs and serves moderation labels (the standard subscribeLabels firehose and queryLabels endpoint), routes user reports into Coop’s review queue, and enforces takedowns on your PDS.

Ozone bundles two things: a moderation console with its own data model, and the plumbing that signs and publishes labels. Coop is the moderation tool, where you set up your own policies and actions and where your reviewers work; troposphere is the atproto plumbing it uses. It works for any AT Protocol project regardless of its lexicons, PDS, or AppView.

It is built on the maintained @atproto/* primitives (@atproto/crypto, @atproto/xrpc-server, @atproto/common). The label and enforcement endpoints are plain authenticated HTTP, so non-Coop tooling can use them too, but Coop is what troposphere is designed for.

About this project. troposphere and this documentation were generated by Claude Code, Anthropic’s agentic coding tool. Spot something wrong or unclear? Reach out to @julietshen.bsky.social on Bluesky, or open a pull request.

Who this is for

  • A project on the AT Protocol that wants trust & safety on Coop: content ingested into a review queue, labels published under its own signing key, reports triaged, takedowns enforced.
  • Any such project regardless of its stack: custom lexicons, its own PDS, its own AppView. See Building on the AT Protocol.
  • Teams evaluating an alternative to running Ozone.

Coop is the moderation tool troposphere is built for. If you are not using Coop, the label and enforcement endpoints are plain authenticated HTTP, so other tooling can use them too.

What it does today

  • Ingests AT Protocol content (Jetstream) into Coop’s item intake (npm run ingest).
  • Signs labels with a secp256k1 key, verifiable against the labeler’s DID.
  • Serves com.atproto.label.queryLabels (public HTTP).
  • Serves com.atproto.label.subscribeLabels (WebSocket firehose) with cursor backfill and a live tail.
  • Exposes POST /admin/labels (create/negate) and POST /coop/action (Coop’s action shape).
  • Accepts com.atproto.moderation.createReport from any AT Protocol AppView, enriches it, and forwards it to Coop’s review queue.
  • Enforces takedowns and restores on your own PDS via POST /admin/enforce.
  • Persists labels and reports in Postgres, with a monotonic sequence for firehose cursors.

What it does not do

troposphere is the atproto plumbing, not the moderation tool. It does not decide what to label or take down. Coop does that: Coop is the tool where you set up your own policies, rules, and actions and where your reviewers work, and it calls troposphere’s APIs to carry a decision out. Coop does not come with its own policies or reviewers; those are yours. Identity provisioning helpers and multi-tenant operation are on the roadmap.

The fastest way to see it work is Getting started.