zazzles is a worktree-native Git orchestration project for humans and agents. Its goal is to make isolated branch-per-worktree development practical for stacked or graph-shaped changes, with a scriptable CLI exposed as zaz and a future desktop app for graph visibility and review workflows.
The product direction combines:
- a CLI that agents and power users can script, exposed publicly as
zaz - an installable desktop app for graph visualization, review, and conflict resolution
- worktree-native Git orchestration instead of virtual-branch indirection
The repository now contains an initial Rust workspace and a working M1 CLI slice.
Implemented today:
zaz init <repo-name> [--integration <branch>]zaz add <name>- human-readable and
--jsonoutput for both commands - repo-local state in
.zazz/ - user-global config lookup in
~/.zazz/config.toml - bootstrap and add behavior aligned to the current M1 deliverable docs
Current M1 behavior in plain language:
zaz initbootstraps a new managed repo container from the parent directory where the repo root should be createdzaz initkeeps the repo root name identical to the repo name argumentzaz initcurrently usesgh repo view <repo-name>plusgh auth statusas part of its bootstrap contractzaz addcreates a new worktree from the synced local integration worktree flow defined for M1zaz addmaterializes configured untracked files from repo-local.zazzstate
Not implemented yet:
- the full planned CLI surface described in the feature docs, such as
status,list,graph,sync,conflicts,resolve, account/profile commands, and PR lifecycle commands - the desktop application
- native GitHub API replacement for the current M1
ghdependency
The repo is intentionally lightweight and currently contains:
- repo-level agent guidance in
AGENTS.md - imported Zazz framework skills in
.agents/skills/ - proposal and framework docs under
docs/ - a Rust workspace with the CLI in
apps/cliand shared orchestration logic incrates/core
Product naming note:
- the product name is
zazzles - the company/framework name remains Zazz / zazzcode where applicable
- repo-local and user-global hidden state should continue to use
.zazz/and~/.zazz/
The CLI binary is named zaz and lives in apps/cli.
Prerequisites for local use:
- Rust toolchain with
cargo - system
git - GitHub CLI
gh - for the current M1
zaz initflow, a workinggh auth status
Compile the debug build:
cargo build -p zazCompile the release build:
cargo build --release -p zazInstall the CLI into Cargo's bin directory:
cargo install --path apps/cli --forceIf Cargo's bin directory is on your PATH, you can then run:
zaz --helpRun the CLI through Cargo without installing:
cargo run -p zaz -- --helpRun the compiled binaries directly:
- debug:
target/debug/zaz - release:
target/release/zaz
Current implemented commands:
zaz init <repo-name> [--integration <branch>] [--json]
zaz add <name> [--json]Examples:
# initialize from the parent directory where the repo root should be created
cargo run -p zaz -- init zazz-skills --integration main
# after init, run add from inside the managed repo root
cd zazz-skills
cargo run -p zaz -- add smoke-test-1The same commands work with the installed binary:
zaz init zazz-skills --integration main
cd zazz-skills
zaz add smoke-test-1JSON mode examples:
zaz init zazz-skills --integration main --json
zaz add smoke-test-1 --json- From a parent directory, run
zaz init <repo-name> [--integration <branch>]. - Let
zaz initcreate the managed repo root,.bare/, integration worktree, and.zazz/state. - Change into the new repo root.
- Run
zaz add <name>to create a new sibling worktree and branch from the synced local integration worktree. - Work inside the new worktree directory that was created under the managed repo root.
Important M1 constraints:
- pass a bare repo name such as
zazz-skills, not a clone URL - run
zaz initfrom the parent directory where the repo root should be created - run
zaz addfrom inside an already initialized managed repo root - M1 is greenfield bootstrap only; existing compatible
.bare/layouts are described in feature docs as future adoption work, not current CLI behavior
Recommended verification:
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspacePrimary docs:
- proposal:
docs/proposals/worktree-native-pr-orchestrator.md - main CLI feature doc:
docs/features/worktree-orchestration-cli.md - CLI companion docs index:
docs/features/worktree-orchestration-cli/README.md - worktree setup guidance:
docs/worktree-setup-instructions.md
Docs layout:
docs/
├── proposals/
├── features/
├── standards/
└── deliverables/
The current proposal recommends a phased build:
- ship a CLI-first linear stacked-branch MVP
- add GitHub-aware cascade sync and migration workflows
- add a desktop graph/review experience
- expand to DAG-style dependency graphs once the linear path is stable
See docs/proposals/worktree-native-pr-orchestrator.md for the detailed analysis, feature breakdown, sequence diagrams, and implementation recommendation, and docs/features/worktree-orchestration-cli.md for the current CLI feature direction.