[go: up one dir, main page]

Skip to content

jouet pronounced “zhweh” · French for “toy”Wind-up tools for coding agents

jouet tells an agent which builds and tests are slow before it runs them, and turns what keeps going wrong into rules, tasks and routines for later sessions. It also has commands for the edits, searches, CI waits and PR reviews that agents otherwise script by hand.

mise use -g jouet

Linux · macOS (Apple Silicon) · WindowsMore install options

Next: connect your agent, then ask it to use jouet-init in your project.

Early development. How much jouet helps depends on your project, and yours may need some configuration, or a fix in jouet, before it does. Commands and output may change incompatibly until 1.0. What to expect →

The jouet logo, a coral wind-up tin robot with a brass key on top

How it works

Learning from past sessions

jouet keeps the timings, failures and corrections from past sessions, and uses them to steer the next one.

Examples

Before and after

jouet also has commands for work agents usually script by hand: a code graph, searches and reads that stay within a budget, only the tests a change affects, edits that check before they write, and waits that poll for you. Three of them, next to the scripts they replace:

beforeA Python heredoc edits one file at a time
CheckWritesrc/main.rs1 assert passes2 writtenCargo.toml3 AssertionError never runs

Each file is written as soon as its own assert passes.

exit 1Half edited. src/main.rs changed, Cargo.toml did not, and the error does not say so.

inside python3 - <<'EOF'

python
for path, old, new in edits:
    s = Path(path).read_text()
    assert s.count(old) == 1, path
    Path(path).write_text(s.replace(old, new))
output
Traceback (most recent call last):
  File "<stdin>", line 7, in <module>
AssertionError: Cargo.toml
afterjouet edit checks every edit, then writes all or none
1 · Check every edit2 · Write all or nonesrc/main.rs1 matches once3 not writtenCargo.toml2 no match3 failed

1 of 2 edits failed, so no file is written.

exit 4Refused, so nothing changed. The closest match shows that Cargo.toml moved on to 0.1.1.

the spec, on stdin

spec
=== src/main.rs
<<<<<<< SEARCH
    let x = 1;
=======
    let x = 2;
>>>>>>> REPLACE
=== Cargo.toml
<<<<<<< SEARCH
version = "0.1.0"
=======
version = "0.2.0"
>>>>>>> REPLACE
output
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 written

Reference

Commands

Each replaces a script or loop that agents commonly write. When an agent writes one anyway, a hook points it to the command.

Code and data

Running and waiting

Pull requests

Git and sessions

Measuring

Every command and flag in the CLI reference

Conventions

Shared by every command

Every jouet command handles prompts, exit codes, JSON and long output the same way.

  • Never prompts

    Every command runs without a TTY: under an agent harness, in CI or in a pipe.

  • One table of exit codes

    1 means the answer is no. 4 means jouet refused and changed nothing.

  • One JSON document

    --json prints exactly one document on stdout, errors included.

  • Nothing cut silently

    Shortened output says so and names the log file that holds the rest.

Read the shared conventions
MIT LicenseCopyright © 2026jdx.dev