Claude Transcripts — documentation
Self-hosted history for your Claude Code sessions. A hook logs every session to your own CouchDB + S3; a web API serves it back; a web UI, a CLI, and agents read it. Nothing leaves your network.
Work in progress — not tested as ready for use. No installation has been walked end to end on a clean machine. Breaking changes land without notice, stored data may need discarding between revisions, and there is no auth or security model (Tier 1 assumes one user on one trusted machine). These docs describe the intended design as much as the current state.
Start here
| If you want to… | Go to |
|---|---|
| Run it on your machine | Installation |
| Configure it — ports, stores, feature flags | Configuration |
| Record sessions — install the hook | Hook setup |
| Work on it | Getting started (development) |
| Release, run, migrate it | Releasing |
| Understand the shape and the reasoning | Specification · Architecture · ADRs |
How these docs are organised
- Getting started — installing, configuring, and recording your first session. Written for someone running the project.
- Development — setup, conventions, tests, and the generators. Written for someone changing the code.
- Operations — releasing, containers, migrations, and application logging.
- Reference — per-component and per-surface detail: webapi, webui, CLI, the hook, routes, CouchDB documents.
- Design & specification — what the system is meant to be, the tier model, the roadmap, and the technology choices.
- Decisions — one ADR per architectural decision, nested under design.
Technical design is treated as a first-class deliverable here. This is a fresh rebuild: the design set was re-written rather than copied from the predecessor project, with naming, ports, paths, and reversed decisions reconciled to this repo's conventions.
The published site at vredchenko.github.io/claude-transcripts/docs renders the same tree with this structure as its navigation, and its index lists every page — generated from what actually shipped, so it can't drift.
Conventions
Naming, components, ports, and stack conventions are in conventions.md. Repo-level rules for agents working in this codebase are in CLAUDE.md.
Getting started
Install it, point it at your stores, and record your first session.
Development
Working on Claude Transcripts itself: setup, conventions, tests, automation.
Operations
Running and shipping it: releases, containers, migrations, logs.
Reference
Per-component and per-surface detail — the codebase as documented.
Design & specification
What the system is meant to be, and the reasoning behind it.
- Technical specification — claude-transcripts
- Architecture
- Feature tiers
- Roadmap
- Export / import bundles — design
- Competitive landscape
- Database & search-engine choice
- Installation & first run — design
- Notes — mid-flight transcript chunking (issue #4, P1)
- Design discussion — agent-first session corpus (working notes)
Decisions (ADRs)
One record per architectural decision, in the order they were taken.
- Architecture Decision Records
- 1. Record architecture decisions
- 2. Single combined container serves the API and the SPA
- 3. Vendor-neutral S3 via Bun's S3 client; drop MinIO and rclone
- 4. Bun workspace monorepo; the hook ships as a standalone plugin
- 5. Tag-driven image releases
- 6. Webui consumes shared workspace types directly; no OpenAPI client codegen
- 7. CouchDB as the primary store
- 8. Garage as the S3 object store
- 9. Meilisearch for search (Phase 2)
- 10. Claude-Code-specific scope (not a generic agent-session logger)
- 11. Read CouchDB attachments over HTTP, not nano's attachment.get
- 12. GitHub Actions + GHCR for releases
- 13. S3 is the transcript's durable home; the CouchDB attachment is opt-in
- 14. Transcripts live in S3 only — CouchDB attachment support removed
- 15. Tiered architecture (Tier 1 / 2 / 3)
- 16. The webapi is the sole I/O gateway and stability column
- 17. Hooks and actions are decoupled (many-to-many)
- 18. Application/operational logs go to CouchDB (separate database)
- 19. OpenAPI spec is the source of truth; clients are generated
- 20. Bundled backing services default to no auth
- 21. Self-built CouchDB migrations (up/down + views + export/import)
- 22. / serves a machine-readable app manifest (agent entrypoint)
- 23. Lockstep versioning; components built separately, then combined into one image
- 24. Mirror third-party backing-service images to the container registry
- 25. Claude Code compatibility is a generated, structured definition
- 26. A single main branch
- 27. Full-content chunks in CouchDB (per-turn content, not just byte ranges)
- 28. External vs bundled Meilisearch