AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
A cozy, safety-first desktop Git client: a fast commit graph, line-level staging, drag-and-drop cherry-pick and merge, rebase, bisect, and a Safety Manager that snapshots before every mutation so Undo
Developer toolsTypeScript · RustGitHub @zangjiuchengOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
A cozy, safety-first desktop Git client, with a cat mascot and a Safety Manager that snapshots before every mutation so Undo is always one keystroke away
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Git you can take back.
A cozy, safety-first desktop Git client — Tauri 2 + Rust + Svelte 5. Every mutation snapshots first, so ⌘Z always works.
Every Git GUI makes it easy to run a dangerous command. GitCat is built so you can take it back: a Safety Manager snapshots refs, index, worktree and stash before every mutation, so a global Undo (⌘Z) is always one keystroke away — and Undo is itself undoable.Read the full README ↗Git you can take back.
A cozy, safety-first desktop Git client — Tauri 2 + Rust + Svelte 5. Everyday history-changing operations snapshot your branches first, so ⌘Z can put them back.
Website & docs · Download · User guide
Every Git GUI makes it easy to run a dangerous command. GitCat is built so you can take it back: before everyday history-changing operations (commit, merge, rebase, reset, cherry-pick, revert, …) the Safety Manager pins a snapshot of HEAD and every local branch tip, so a global Undo (⌘Z) rewinds them in one keystroke — and Undo is itself undoable. Uncommitted work isn't in that snapshot, but some of it has its own safety nets: discarded changes are backed up under .git/gitgui/discard-backup/ first, deleted branches, tags and dropped stashes are pinned under refs/gitgui/ so they stay recoverable, and if Undo finds a dirty working tree it offers to stash, undo and re-apply rather than overwrite it. A hard reset discards uncommitted changes for good, so it asks for a typed confirmation, and git-filter-repo sits outside ⌘Z with its own full git bundle backup instead.
git bisect, git blame with rename-following, per-file history, author and pickaxe search, a git-filter-repo wizard, external diff/merge tools, reflog rescue and dangling-object recovery. Partial clones (--filter=blob:none) work too, fetching file contents on demand.git(). Browse and install ready-made ones from inside the app (Tools ▸ Plugins… → Browse), backed by the community plugin index.gitcat . — open a repo from your terminal the way code . does (gitcat --help for the rest). WSL-aware.Full list: Features.
| Commit detail & diff | ⌘K command palette |
| Settings | Chinese (中文) interface |
| Korean (한국어) interface | Light theme |
Tama is the Safety Manager, not a mascot bolted on for cuteness — she's the one pinning the snapshot. Eight expressions wired to real moments: curious while you search, thinking hard mid-rebase, genuinely alarmed right before something irreversible, celebrating once it's safely done.
Grab an installer from the Releases page — macOS (Apple Silicon + Intel), Windows (x86_64 + arm64) and Linux (x86_64 + arm64; .deb/.rpm/.AppImage), all built from the same tag.
Builds are unsigned for now. macOS: right-click → Open the first time. Windows: More info → Run anyway. Full per-platform steps, including macOS Sequoia, are in the install guide.
gitcat on your PATHRun Install 'gitcat' command from Settings → Command line (or ⌘K), then open a new terminal:
gitcat . # open the repo in the current directory
gitcat ~/src/my-project # open a repo by path
gitcat -- -odd-name # a path that starts with '-'
gitcat --version # print the version (-V); --help (-h) prints usage
It writes a launcher to /usr/local/bin (macOS), ~/.local/bin (Linux), or %LOCALAPPDATA%\Microsoft\WindowsApps (Windows, plus one inside each WSL distro). The .deb/.rpm packages already put gitcat on PATH.
Needs Rust, Node 22+ and pnpm 10 (corepack enable pnpm if you don't have it — the exact version is pinned in package.json's packageManager). On Linux, Tauri also wants WebKitGTK/GTK3 dev headers; on NixOS, nix develop has everything.
pnpm install
pnpm tauri dev # launch the app
pnpm demo # build a rich throwaway repo at ~/gitcat-demo to poke at
| Command | What it does |
|---|---|
pnpm check | svelte-check (type-check the frontend) |
pnpm test | vitest (frontend unit tests) |
pnpm test:e2e | playwright (real browser, mocked IPC) |
pnpm screenshots | regenerate docs/public/screenshots/ |
pnpm docs:dev | run the docs site locally |
cargo test | the Rust suite (from src-tauri/) |
See CONTRIBUTING.md before opening a PR.
src-tauri/) — git2 for reads, the git CLI for writes (everyday history-changing writes snapshot first), tauri-specta for a typed IPC boundary generated into src/ipc/bindings.tscargo test + pnpm test on every push, a 6-platform release matrix on tags, and a VitePress site auto-deployed to GitHub PagesGitCat is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details, or https://www.gnu.org/licenses/.
Copyright © 2026 Jiucheng Zang [email protected]