Run without a clone: bare sausage creates ./world if needed and runs it
ci / check (push) Successful in 14m24s

- cli: the subcommand is optional; without one, sausage runs ./world and
  runs init first when ./world is not a world yet (test: cli/tests/cli.rs).
- flake: .#loop without a folder runs bare sausage.
- README: nix run git+https://gitea.surma.technology/surma/sausage(#loop),
  clone only for working on Sausage.
This commit is contained in:
Sausage agent
2026-10-16 20:56:59 +00:00
parent d0876626df
commit 8a533f0158
4 changed files with 78 additions and 13 deletions
+20 -8
View File
@@ -11,31 +11,43 @@ change its own code.
## Start
You need [Nix](https://nixos.org/download) with flakes, and an API token for
an LLM (OpenAI Responses or Anthropic Messages API).
an LLM (OpenAI Responses or Anthropic Messages API). No clone needed:
```sh
git clone https://gitea.surma.technology/surma/sausage && cd sausage
nix run -- init # creates ./world and builds the agent (a few minutes)
nix run -- run # starts the world and a console
nix run git+https://gitea.surma.technology/surma/sausage
```
This creates a world in `./world` the first time (it builds the agent, which
takes a few minutes) and then starts it with a console. Later runs start the
existing world. The two steps also exist on their own:
```sh
nix run git+https://gitea.surma.technology/surma/sausage -- init # create ./world
nix run git+https://gitea.surma.technology/surma/sausage -- run # start it
```
`init` asks for the API shape (`openai-responses` or `anthropic-messages`),
the base URL, the model, and the token. It reads `SAUSAGE_API`,
`SAUSAGE_BASE_URL`, `SAUSAGE_MODEL`, and `SAUSAGE_API_TOKEN` first. The
values go to `world/actor/agent/data/config.json`. Both commands take another
folder as an argument, for example `nix run -- run my-world`.
values go to `world/actor/agent/data/config.json`. `init` and `run` take
another folder as an argument, for example `-- run my-world`.
To keep a world on the newest version, run it in a loop:
```sh
nix run .#loop -- my-world
nix run git+https://gitea.surma.technology/surma/sausage#loop # ./world
nix run git+https://gitea.surma.technology/surma/sausage#loop -- my-world # an existing world
```
The loop runs `nix run --refresh git+https://gitea.surma.technology/surma/sausage -- run my-world`.
The loop runs the newest `sausage` from that URL (`nix run --refresh`).
When the host crashes or an actor sends `@broker {"type":"exit"}`, the loop
fetches the newest commit and starts it again. `/quit` ends the loop. Set
`SAUSAGE_FLAKE` to run another flake URL instead, for example your fork.
To work on Sausage itself, clone it
(`git clone https://gitea.surma.technology/surma/sausage`) and use `nix run`,
`nix run .#loop` and `nix develop` in the checkout.
In the console:
```text