Skip to main content

cc-warehouse

Content-addressed, immutable warehouse for AI conversation sessions (Claude Code, claude.ai exports, future sources), projected into uniform markdown/HTML files. CLI: ccw.

Status: v1 is CLOSED. Every slice in the DESIGN section 16 build order landed and carries its milestone tag, slice-01..13 including slice-12a and slice-12b, 14 tags in all (store; catalog + registry; parser + conversation model; capture hook + notify; sweep; markdown emitters; HTML emitters + manifest; build/render orchestration; status + verify; migrate + retire; share + redaction; relocate containers; relocate content; config + CLI + flags). The render carries the full exporter-v8.10.1 chrome, each content class an independent toggle. Gates are green: ruff clean, pyright strict 0 errors, 763 tests passing, zero stubs.

Entry-type coverage was OVERCLAIMED here until 2026-08-02 and the correction is worth keeping. This paragraph used to say "complete Claude Code entry-type coverage"; a census of 13,836 real sessions then found eight entry types and three content-block types that rendered nothing and incremented no counter, 62,577 entries carrying loss: 0 beside them. Ticket 18 closed that, and the durable half is that anything the parser does not name now renders a marker AND increments a new top-level unrecognised manifest key, so the next type Claude Code ships announces itself instead of vanishing. The word "complete" is not used again on purpose.

The v1 exit review has been held and closed. It reconciled the contract against the code rather than against the tickets, which is how it found the two gaps no milestone tag or green test could surface: ccw project was implemented one subcommand of five, and the dispatcher accepted an undocumented internal verb. Both are fixed, and the two decisions the review left open were also ruled: shared pages now inline highlight.js and make no third-party requests, while personal projections keep the CDN reference for exporter parity; pages stay dark-only.

v1.1 flag groups: COMPLETE 2026-08-01 (per-variant matrix, HTML chrome defaults, truncation, --since/--until), tags slice-14..slice-17.

Archive-first layout: 6 of 7 slices done, 2026-08-02. The product is a readable archive: one self-contained folder per session holding the raw JSONL beside its four projections and a manifest, named <YYYYMMDD-HHMMSS><offset>_<uuid> in a zone pinned in config so the same session yields the same folder on any machine. ccw archive builds it. It has been run on a real 13,836-session corpus: 13,829 folders in six minutes, zero failures, then verified with zero problems. Nothing has been swapped: the content-addressed store is still the live warehouse and the hook still writes to it.

Then FTS5 with ccw search and ccw import, then ccw mcp in v1.2.

Not published, and not planned for publication for now (principal, 2026-07-24). The distribution name is cc-warehouse and the console scripts are ccw and cc-warehouse, but nothing is on PyPI. Install from a git checkout with uv sync.

The contract lives in contract/ (BRAINSTORM, SPEC, DESIGN, FINDINGS, HARNESS); the oracle suite in tests/ was written before the implementation.

Verbs

ccw hook       SessionEnd capture from a stdin payload
ccw sweep      import anything the hook missed
ccw build      rebuild projections from the catalog (incremental by default)
ccw render     (re)build one session's four files, or render an ad-hoc file
ccw project    list / show / rename / move OLD NEW / merge A B
ccw share      build a sanitized static site for chosen sessions
ccw migrate    one-shot import of a legacy archive (+ --retire)
ccw relocate   repair the external world after a repo move (dry-run by default)
ccw status     recent captures, counts, store size, last errors
ccw verify     re-hash objects and cross-check them against the catalog
ccw archive    build (or --verify) the archive-first tree at --to DIR
ccw version    print the version (also -v)

Every session is projected into four files: transcript.md, transcript.compact.md, conversation.html and conversation.compact.html, plus a manifest.json recording the settings and counts that produced them.

manifest.json answers three separate questions and keeps them separate on purpose: loss is what the renderer dropped, unrecognised is what Claude Code's format grew that this parser does not name yet, and withheld is what never arrived (thinking text stopped reaching the JSONL upstream at Claude Code v2.1.69). A rendered entry is not a lost one, so none of the last two is filed under loss.

Development

uv sync
uv run pytest          # oracle suite
uv run pyright         # strict mode (configured in pyproject)
uv run ruff check

License: PolyForm Noncommercial 1.0.0 (see LICENSE).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cc_warehouse-0.1.0.tar.gz (588.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cc_warehouse-0.1.0-py3-none-any.whl (224.8 kB view details)

Uploaded Python 3

File details

Details for the file cc_warehouse-0.1.0.tar.gz.

File metadata

  • Download URL: cc_warehouse-0.1.0.tar.gz
  • Upload date:
  • Size: 588.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cc_warehouse-0.1.0.tar.gz
Algorithm Hash digest
SHA256 33c9210cea5463733425e209a1ad17e305d4a9ec0859411574e455e6cd822470
MD5 ab485533cd65c8c5da89290fa319255d
BLAKE2b-256 332e44b0c1f86f24e497b1ba3c8cf574d78cbbbeb2638353b3042e96391e1151

See more details on using hashes here.

File details

Details for the file cc_warehouse-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cc_warehouse-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 224.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for cc_warehouse-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 030c5be36645c3a0e481b7813df149c6107e21b83f03ec01dd5f827c8803651d
MD5 dd731e8b6219cf8cab48becec0802f0c
BLAKE2b-256 ab3de69179785b810c7d0b80cde94d40c8b32f9481c4e56af26121ecda7bf1c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page