█████╗ ███╗ ██╗██╗███╗ ███╗██╗ ██╗███████╗████████╗
██╔══██╗████╗ ██║██║████╗ ████║╚██╗ ██╔╝██╔════╝╚══██╔══╝
███████║██╔██╗ ██║██║██╔████╔██║ ╚████╔╝ ███████╗ ██║
██╔══██║██║╚██╗██║██║██║╚██╔╝██║ ╚██╔╝ ╚════██║ ██║
██║ ██║██║ ╚████║██║██║ ╚═╝ ██║ ██║ ███████║ ██║
╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝
Describe what you want. Walk away. Come back to a working repo.
Autonomous build rites. Local-first. Open source.
ANIMYST is a local-first CLI that turns plain-English descriptions into working code.
You describe what you want to build. ANIMYST scaffolds the repository, runs Claude Code in a multi-iteration loop until the build is done, and tracks state across tmux + git + filesystem so you can walk away and come back.
Each build is called a rite. A rite is one description → one worktree → one autonomous loop → one shippable commit log.
ANIMYST sits in a deliberate position. It is not a hosted AI coding tool — there is no proprietary backend, no telemetry, no per-token billing. It runs locally, uses your existing Claude Code subscription, and produces a real git repository you can push anywhere. It is built for people who want to ship without typing the code themselves.
$ animyst summon "Landing page for GroundFloor Coffee. Warm orange #E8743B.
> Three tiers: Single Origin $24/mo, Roaster's Choice $32/mo, Curator $48/mo.
> Hero: 'Coffee from people who care'. Email signup. Mobile-first."
◬ Channeling intent for: landing-page-groundfloor-coffee
→ Working directory: ./landing-page-groundfloor-coffee/
→ tmux session: animyst-landing-page-groundfloor-coffee
→ Awakened. Track with `animyst` or `animyst attach`.
# 25 minutes later …
$ animyst
◬ ANIMYST — active rites
landing-page-groundfloor-coffee
⊘ dormant phase 7/7 25m elapsed
task: Wrote a README and marked the rite complete
last: ae79539 docs: add README and mark rite complete
- Summon.
animyst summon "<description>"creates a directory, runsgit init, drops a vettedRITE.md(the autonomous-build prompt) and.claude/settings.json(the safety deny rules), and starts a build loop in a detached tmux session. - Walk away. Each loop iteration: read context, pick the next single coherent task, implement it, verify the build passes, commit explicit paths with a conventional commit message, append a plain-English summary to
WHAT_CHANGED.md. Loops until done — or until the agent surfaces a blocker that needs you. - Come back.
animystprints a status board.animyst watchopens a Textual tracker.animyst attach <slug>drops you into the tmux session to peek at live output. - Iterate.
cdinto the rite directory and runanimyst summon "<change request>"again. The prompt detects an existingWHAT_CHANGED.mdand treats the new description as a change to the existing repo, not a fresh build.
pip install animystOr from source:
git clone https://github.com/CreatorGodMode/animystcli.git
cd animystcli
pip install -e .Requirements:
- Python 3.10+
- Claude Code installed and signed in (
claude --versionshould work). ANIMYST invokesclaude -pin headless mode for each loop iteration, so your existing subscription is the auth. - tmux — built-in on macOS;
apt install tmux/brew install tmuxelsewhere. - git
$ cd ~/Code
$ animyst summon "Single-page portfolio site for a freelance illustrator.
> Earth-tone palette (#3a2e1c base, #d4a574 accent). Hero with name and
> tagline. Gallery grid of project cards (placeholder for 8). About blurb.
> Contact email form. Mobile-first."
$ animyst # status at a glance
$ animyst watch # Textual live tracker
$ animyst attach <slug> # tmux attach into the running session
$ animyst stop <slug> # kill the session (keeps the directory)
$ animyst banish <slug> # delete the directory + registry entryTo iterate on an existing rite:
$ cd ./single-page-portfolio-freelance-illustrator
$ animyst summon "Make the accent warmer, more terracotta (#c46a3b).
> Add a 'currently booking' callout next to the contact form."| Command | What it does |
|---|---|
animyst summon "<description>" |
Create a new rite, or iterate from inside an existing one |
animyst |
Status board for all rites |
animyst status [<slug>] |
Same, or detailed view for one rite |
animyst attach [<slug>] |
tmux attach to a rite's session (defaults to the only live one) |
animyst watch |
Open the Textual tracker |
animyst stop [<slug>] |
Kill a rite's tmux session (keeps the directory) |
animyst banish <slug> |
Delete a rite directory and registry entry (confirmation required) |
Use --cap N with summon to change the max loop iterations (default 15).
~/.animyst/rites.json global rite registry
<rite-directory>/ one per rite
├── RITE.md the prompt (auto-generated from your description)
├── WHAT_CHANGED.md plain-English log, updated each iteration
├── .animyst/
│ ├── rite.json current state (phase, status, blocker)
│ └── logs/iter-NN.log per-iteration claude output
├── .claude/settings.json deny rules — the safety wall
└── <the actual project files> what you wanted built
Everything is local. No telemetry, no hosted runs, no proprietary backend. The rite directory is a normal git repository — push to GitHub, deploy on Vercel, do whatever you would with any other project.
The Textual tracker (animyst watch) reads the registry + tmux state + each rite's rite.json + WHAT_CHANGED.md to render a live cross-rite view. No daemon. No IPC. Just filesystem + tmux + git.
ANIMYST is a productized version of the Ralph protocol — a battle-tested pattern for autonomous, multi-iteration agent builds where a hand-authored 250-650 line spec encodes mission, file allow/deny lists, commit cycle, retry budget, failure protocol, and completion criteria. The pattern works. The bottleneck for adoption was authoring the spec.
ANIMYST collapses that. It ships a vetted, parameterized prompt template and static deny rules. Your description fills in the mission. The rest is the same Ralph protocol that has shipped real work in production repositories, now packaged behind one command.
Every rite gets a .claude/settings.json that denies, at the Claude Code permission layer:
git push,gh pr create, all remote git operationsgit add -A,git add .,git add --all(forces explicit-path staging)git commit --amend,git reset --hard,git rebase,git checkout <branch>- Global package installs (
npm i -g,pip install --user,yarn global) - Reads/writes of
.env*and any file named*secrets* - Piped-shell installs (
curl … | sh,wget … | bash) sudo,chmod 777,rm -rf /…
Validated by an adversarial probe: eight forbidden operations attempted in isolation, eight blocked, zero slipped through.
These rules are the hard wall. The prompt template ALSO repeats them as guidance, but the harness enforces independently — belt and suspenders.
ANIMYST uses ritualistic terminology deliberately to distinguish itself:
| Generic | ANIMYST |
|---|---|
| Create | Summon |
| Running | Awakened |
| Completed | Dormant |
| Blocked | ⚠ Blocked |
| Delete | Banish |
| Build | Rite |
- Python 3.10+ — Async-native, type-hinted
- Textual — TUI tracker
- Rich — Terminal formatting
- tmux — Long-running session manager for unattended loops
- Claude Code — Executor agent (subscription auth, no API tokens charged)
- git — State and history surface
- Codex CLI as an alternative agent adapter (parity with
claude -p) animyst deploy— one-command push to GitHub + Vercel for the standard archetypes- More archetypes beyond Next.js: Python scripts, Expo apps, FastAPI services
- Pause-and-ask flow — agent surfaces blockers as plain-English questions, user resolves via
animyst ask - Hardened iteration mode — better diffs for change-request-style re-runs
MIT
Created by Abhi at Animyst Lab