ccgarden
Grow a garden from your local Claude Code session history.
ccgarden reads the JSONL transcripts under ~/.claude/projects, rolls
them up into a small sqlite history db, and renders the result as an SVG
garden: by default a top-down kitchen garden plot, or with --tree one
growing tree that represents everything you've built with Claude Code on
this machine.
(These are dummied-up examples with a few months of synthetic data across five repos, several models, and a handful of tools — enough to show every shape the renderers draw. Your own garden will look sparser at first and fill in as you work.)
The plot (default)
A bird's-eye kitchen garden. Each repo is a raised bed (area = lines added + sessions). Every model and effort combo is its own plant: Opus grows brassicas and fruiting plants, Sonnet leafy greens, Haiku herbs. More plants mean more sessions, bigger plants mean more effort, and the legend lists which plant is which and its share of replies — hover one to find it in the beds. Skills bloom in the flower border. The potting bench holds your busiest tools, the rain barrel fills with tokens, and the sundial shows the hours you prompt (blue petals = night). Butterflies come out on working days, fireflies at night, and rain and weeds when you stay away. A bed you've worked in the last 14 days has its sprinklers running and dark, wet soil — the more sessions in that window, the wider the spray and the wetter the soil; both dry up the longer the bed is left. In the timelapse each plant sprouts and grows as its repo's sessions add up, and each flower swells with its skill's calls; it has a Replay button and a day slider.
The tree (--tree)
| Shape | Grows with |
|---|---|
| Trunk | Total sessions, across all repos |
| Rings | One per day worked; bolder rings mean busier days |
| Branches | One per repo — longer branches mean more lines changed, thicker branches mean more tokens |
| Leaves | One per session; more leaves means a busier repo, bigger leaves mean deeper (more turns/session) sessions |
| Flowers | One per whole ratio of cache reads to cache writes |
| Clouds | One per model + reasoning-effort combination used; bigger and darker clouds mean more tokens and heavier thinking |
| Sun | Rises and brightens with your all-in token total (output + input + cache read + cache write) |
| Bushes | One per tool (Bash, Edit, Read, ...); bigger bushes mean more calls |
| Sunflowers | One per repo; taller stalks mean more prompts |
| Sky | Darkens toward night with the share of prompts you type after 21:00 — stars come out for a committed night owl |
| Season | Leaves turn gold and thin out the longer the garden goes untended, and green back up when you return |
| Birds | One per cartoon adapter that saved tokens; bigger birds mean more tokens saved. Only appears if cartoon is installed |
Hover (or tap, on mobile) any shape for the exact numbers behind it.
Install
uv tool install ccgarden
(or pipx install ccgarden). This installs two commands: ccgarden and
ccstats.
To hack on it instead, clone the repo and run uv sync, which puts the
same two commands in the project's virtualenv.
Usage
uv run ccgarden
This will:
- Scan
~/.claude/projectsand record today's snapshot into~/.claude/ccstats.db(same as runningccstats— see below). - Replay the full day-by-day history from that db into an animated SVG timelapse of the garden growing.
- Write it to
~/.claude/ccgarden.svgand open it in your browser (add--no-opento skip that last step).
Run it again any day and the garden picks up where it left off — new rings, longer branches, bigger clouds, more leaves.
Options
| Flag | Effect |
|---|---|
--no-open |
write the SVG without opening a browser |
-o, --output PATH |
where to write the SVG |
--db PATH |
which stats db to render from |
--log-root DIR |
transcript root to record from (repeatable) |
--static |
render one still garden instead of the timelapse |
--since, --until |
limit the garden to a date range |
--no-record |
render the db as-is, skipping today's snapshot |
--tree |
draw the side-on tree instead of the plot |
--poster |
open on the finished garden, scrubber showing, no auto-play |
--web |
tree for a web page: light wind, no scrubber (implies --tree) |
--exclude-repo REPO |
leave a repo out (repeatable) |
--version |
print the installed version |
So a still image of just this year's garden, written somewhere else and without touching the db, is:
ccgarden --static --since 2026-01-01 --no-record --no-open -o garden.svg
ccstats
The underlying stats engine can also be run on its own, for a terminal-native usage report instead of (or before) rendering a garden:
uv run ccstats # summarize all local session logs
uv run ccstats --since 2026-06-01 # limit the window
uv run ccstats --json # machine-readable output
uv run ccstats --record --since 2026-01-01 --until 2026-07-01 # backfill history
Run uv run ccstats --help for the full list of flags.
Development
uv run pytest
uv run ruff check .
License
MIT — see LICENSE.
Metadata
Release files for ccgarden 0.7.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ccgarden-0.7.8.tar.gz | 1.2 MB | With provenance | Details for ccgarden-0.7.8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ccgarden-0.7.8-py3-none-any.whl | Python 3 | none | any | Details for ccgarden-0.7.8-py3-none-any.whl |
Total release size: 1.3 MB
Release files / ccgarden-0.7.8.tar.gz
| Download URL | ccgarden-0.7.8.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
084cf19444bb9603da69759f04bad3ae19ca69c7200102a1bd78d04100576c06
|
|
BLAKE2b-256 checksum How to use checksums |
122ba4d006f85d3a03986c7e8673c5c2e5c7aef1c36dd4c244b64a77821503a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / ccgarden-0.7.8-py3-none-any.whl
| Download URL | ccgarden-0.7.8-py3-none-any.whl |
|---|---|
| Size | 136.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9071127255d4131fb0e078750300d4c51503091acd66156472e2cd0ece58edc4
|
|
BLAKE2b-256 checksum How to use checksums |
63838e6edbeb5b5943e3e6358787d9d654be70f90bdd5bcdfb1f3463bdcc4aaa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logSecurity for ccgarden 0.7.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ccgarden-0.7.8.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.