Getting started
jouet is one static binary with no runtime dependencies. It runs on Linux, macOS (Apple Silicon) and Windows.
Early development
jouet edit and jouet wait's local subjects have shipped; waiting on CI and the PR commands are being built. Commands, flags, exit codes and JSON output may still change incompatibly between releases.
Install
With mise
mise use -g jouetThe short name needs mise 2026.10.25 or later. With an older mise, name the repository instead:
mise use -g github:jdx/jouetWith cargo
cargo install jouet --lockedTo build the latest unreleased code instead:
cargo install --git https://github.com/jdx/jouet --lockedFrom a release
Each GitHub release has an archive per target, a SHA256SUMS file, and a signed packslip that records how every archive was built:
| Platform | Archive |
|---|---|
| Linux x64 (glibc) | jouet-x86_64-unknown-linux-gnu.tar.gz |
| Linux x64 (musl) | jouet-x86_64-unknown-linux-musl.tar.gz |
| Linux arm64 (glibc) | jouet-aarch64-unknown-linux-gnu.tar.gz |
| Linux arm64 (musl) | jouet-aarch64-unknown-linux-musl.tar.gz |
| macOS (Apple Silicon) | jouet-aarch64-apple-darwin.tar.gz |
| Windows x64 | jouet-x86_64-pc-windows-msvc.zip |
| Windows arm64 | jouet-aarch64-pc-windows-msvc.zip |
Unpack the archive and put jouet (jouet.exe on Windows) on your PATH.
Check it works
jouet --version
jouet edit --helpMake a first edit
Hand jouet edit a spec on stdin. It checks every edit before it writes any file, so this changes both files or neither:
jouet edit <<'JOUET_EDIT'
=== src/main.rs
<<<<<<< SEARCH
let x = 1;
=======
let x = 2;
>>>>>>> REPLACE
=== Cargo.toml
<<<<<<< SEARCH
version = "0.1.0"
=======
version = "0.2.0"
>>>>>>> REPLACE
JOUET_EDITok src/main.rs 1 edit +1 -1
ok Cargo.toml 1 edit +1 -1
2 of 2 files writtenIf Cargo.toml had moved on to 0.1.1 since you read it, neither file would change, and the report would show the closest match:
not written src/main.rs 1 edit +1 -1
failed Cargo.toml 1 edit
edit 1: no match
closest at line 3 (94% similar), - spec / + file:
-version = "0.1.0"
+version = "0.1.1"
0 of 2 files writtenFor a single replacement, skip the spec:
jouet edit replace src/main.rs --old 'let x = 2;' --new 'let x = 3;'jouet edit covers the other spec formats, --check, --revert-on-fail and --expect-hash.
Tell your agent
Agents use what their instructions mention. Add a line like this to AGENTS.md, CLAUDE.md or a skill:
Edit files with `jouet edit` (search/replace blocks or a Codex-style patch on stdin)
instead of Python heredocs, and wait with `jouet wait` instead of sleep loops.
Run `jouet edit --help` and `jouet wait --help` for details. Exit code 4 means
jouet refused and changed nothing; 124 means a wait timed out.jouet notices when an agent runs it and switches to compact output by itself. See display modes.