Skip to main content

A virtual pet for every git repo. Your codebase as a tamagotchi.

Project description

gitchi

A virtual pet for every git repo. Your codebase as a tamagotchi.

gitchi scans your filesystem, finds every git repository, and spawns a virtual pet for each one. The pet's health, mood, and species are derived from the repo itself — language, commit cadence, open issues, age. Pets get hungry when you don't commit, sick when CI breaks, and turn into ghosts when abandoned.

It's a glanceable, slightly absurd, and surprisingly honest dashboard for the state of every project you've ever started.

╭───────────────────────── gitchi ─────────────────────────╮
│                                                        │
│   ◉ rasteira       🐍 baby snake     hungry  ░░░░░░░  │
│   ◉ gitchi           🟢 baby blob      thriving █████░  │
│   ◉ coldpipe       🐍 adult snake    content  ████░░  │
│   ◉ flight-project 👻 ghost          buried   ░░░░░░  │
│   ◉ uw-copilot     🐉 teen dragon    happy    ██████  │
│                                                        │
│  press ↑↓ to select · enter for details · q to quit   │
╰────────────────────────────────────────────────────────╯

Why

Most developers have a graveyard of half-started repos. You don't know which ones are alive, which are dying, and which deserve a funeral. A static list won't tell you. A linter won't tell you. Your inbox certainly won't tell you.

A pet that visibly suffers when you ignore it might.

Install

# recommended: isolated install via pipx
pipx install gitchi

# or with uv's pipx-equivalent
uv tool install gitchi

# or classic pip
pip install gitchi

# from source (for development)
git clone https://github.com/PedroCorreiaLuis/gitchi
cd gitchi
uv sync --extra menubar --extra dev   # `menubar` is macOS-only; drop it on Linux

Quick start

# scan and view
gitchi                          # opens the TUI dashboard

# inspect a single pet
gitchi show <repo>

# interact
gitchi feed <repo>              # nudges you to commit (suggests a stale TODO)
gitchi play <repo>              # runs the test suite
gitchi pet <repo>               # opens the repo in $EDITOR
gitchi bury <repo>              # marks an abandoned repo at peace
gitchi revive <repo>            # un-buries a ghost

# config
gitchi config show
gitchi config set scan.paths ~/code,~/projects
gitchi config set scan.depth 4

# bring optional services online
export GITHUB_TOKEN=ghp_...           # enriches Energy with real issue/PR data
export ANTHROPIC_API_KEY=sk-ant-...   # enriches Mood from commit-message tone

# automation (macOS)
gitchi cron install             # writes a launchd plist that refreshes nightly
gitchi menubar install          # registers the menu-bar app at login

Stats

Every pet has five vital signs. Each is a 0–100 score; higher is healthier.

Stat Source
Hunger Days since last commit. >90 days = starving = ghost.
Health Test discovery + last test run result + dependency staleness.
Energy Open issue/PR rot from GitHub (optional). Stale = drained.
Mood Sentiment of last 30 commit messages via Claude (optional).
Age Days since first commit. Drives evolution stage.

Species

Pet species is derived from the repo's primary language. Body size scales with repo size; accessories appear with milestones (releases, stars, big commit counts).

Language Species
Rust dragon 🐉
Python snake 🐍
TypeScript / JS blob 🟢
Go gopher 🦫
Swift falcon 🦅
Ruby gem 💎
GDScript ghost-cat 👻🐈
Markdown-only scroll 📜
other / mixed generic blob

Evolution

Stage Trigger
egg repo age 0–7 days
baby 8–30 days
teen 31–90 days
adult 91–365 days
elder 365+ days
ghost 90+ days with no commits (overrides)

A git tag or GitHub release accelerates the next evolution.

Architecture

src/gitchi/
├── cli.py        # typer entrypoint
├── tui.py        # textual dashboard
├── menubar.py    # rumps menu-bar (macOS)
├── scanner.py    # find .git repos
├── stats.py      # compute the five vitals
├── species.py    # repo → species mapping
├── art.py        # ASCII pixel-art per species × stage
├── store.py      # SQLite persistence (~/.local/share/gitchi/)
├── verbs.py      # feed / play / pet / bury / revive
├── config.py     # ~/.config/gitchi/config.toml
├── github.py     # optional GitHub enrichment
├── claude.py     # optional commit-mood sentiment
└── cron.py       # launchd plist generator

Configuration

Config lives at ~/.config/gitchi/config.toml (platformdirs resolves the right path on each OS).

[scan]
paths = ["~/"]
depth = 3
ignore = ["node_modules", ".venv", "venv", "vendor", "target", ".Trash"]

[stats]
ghost_after_days = 90
weights = { hunger = 1.0, health = 1.0, energy = 1.0, mood = 1.0 }

[claude]
enabled = false
model = "claude-haiku-4-5-20251001"
monthly_token_cap = 100_000

[github]
enabled = false

Contributing

See CONTRIBUTING.md. New species are especially welcome — they're a few lines of art plus a language mapping.

License

MIT

Project details


Download files

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

Source Distribution

gitchi-0.3.0.tar.gz (34.3 kB view details)

Uploaded Source

Built Distribution

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

gitchi-0.3.0-py3-none-any.whl (42.5 kB view details)

Uploaded Python 3

File details

Details for the file gitchi-0.3.0.tar.gz.

File metadata

  • Download URL: gitchi-0.3.0.tar.gz
  • Upload date:
  • Size: 34.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gitchi-0.3.0.tar.gz
Algorithm Hash digest
SHA256 d2376b2e8d6686082c3e6e31ab76277654c4de2b9ae3dfeba29a37011c88bdfd
MD5 463ad168c600ff6d7629932ba7fc5f0d
BLAKE2b-256 875e419b7c7682b5dc986d986b8ef5b02fafef4d280c46c2ffb72a876634198c

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitchi-0.3.0.tar.gz:

Publisher: release.yml on PedroCorreiaLuis/gitchi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gitchi-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: gitchi-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 42.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for gitchi-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 484d9ba0c4ccfc3f1cef8d451af1219224f494f5f49b074137d9fe11c63093e2
MD5 0143d07968dae85000f5ac2693ee573d
BLAKE2b-256 2bba6261f262d5300586e45da535efb9c2a0f9d1db7770cbfaff250a9f690fcc

See more details on using hashes here.

Provenance

The following attestation bundles were made for gitchi-0.3.0-py3-none-any.whl:

Publisher: release.yml on PedroCorreiaLuis/gitchi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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