Leviath v0.3.6
Stable release - v0.3.6
Source commit: 6d7ba98
Install
Homebrew (macOS):
brew tap gemisis/leviath https://github.com/GEMISIS/leviath-dist.git
brew install leviathLinux:
curl -fsSL https://raw.githubusercontent.com/GEMISIS/leviath-dist/main/install.sh | bashWindows (Scoop):
scoop bucket add leviath https://github.com/GEMISIS/leviath-dist.git
scoop install leviathManual:
# Download the archive for your platform, then:
tar xzf leviath-*.tar.gz # or unzip for Windows
sudo mv lev /usr/local/bin/From source:
cargo install --git https://github.com/GEMISIS/leviath.git --tag v0.3.6 --bin levWhat's Changed
- Make tool approvals feel normal, and fix four things that made them not by @GEMISIS in #243
- feat(serve): paginated runs, server-side search, and run file listing for The Lair by @GEMISIS in #244
- feat: agents can produce a final output by @GEMISIS in #245
- Add Perf Tools + Clean Commit Hooks by @GEMISIS in #246
- perf: halve the daemon's live memory, drop it after runs finish, and stop dead-ended graphs from reporting success by @GEMISIS in #247
- fix(control): survive daemon restarts + authenticate subscribe; perf-tools: rigorous cross-OS memory metrics by @GEMISIS in #248
- perf: MCP idle disconnect, tool-lane relief decay, dash parse cache; allocator decided by measurement by @GEMISIS in #249
- perf-tools: honest macOS live memory and exact session concurrency by @GEMISIS in #250
- perf-tools: explain the post-burst live-memory floor by @GEMISIS in #251
- feat(run): batch spawning with lev run --count N by @GEMISIS in #253
- fix(daemon): provision 2048 blocking threads for script-provider pools by @GEMISIS in #254
- fix(alloc): purge freed memory at free time, in the binary itself by @GEMISIS in #255
- perf-tools: record the raw footprint alongside the corrected series by @GEMISIS in #256
- fix(cli): adaptive daemon-readiness polling by @GEMISIS in #257
- chore(perf-tools): move the monitor to leviath-benchmarks by @GEMISIS in #258
- fix(security): nine fixes to the approval and tool-execution layers by @GEMISIS in #259
- refactor(core): one implementation behind the five entry-add methods by @GEMISIS in #262
- refactor(providers): anthropic and ollama use the shared HTTP send by @GEMISIS in #263
- refactor: delete dead MCP surface, gate the test-only runstate writers by @GEMISIS in #264
- refactor(manifest): finish the parse_manifest section extraction (927 lines to 180) by @GEMISIS in #265
- fix(release): check the version pin and release profile that live outside the root manifest by @GEMISIS in #267
- chore(testkit): finish the subscriber consolidation; measure missing_docs rather than enable it by @GEMISIS in #272
- docs: fix stale file references and changelog-shaped comments by @GEMISIS in #268
- refactor(pipeline): split transition.rs into its five concerns by @GEMISIS in #266
- test(dashboard): 103 render tests asserted nothing; now none do by @GEMISIS in #271
- chore(deps): raise version floors to what is tested, route four through the workspace by @GEMISIS in #274
- fix(coverage): stop the poll-loop flake instead of re-running it by @GEMISIS in #275
- refactor(main): move the daemon-readiness backoff into the measured library by @GEMISIS in #273
- fix(persist): the answer's descriptor and its sidecar now travel together (#276) by @GEMISIS in #277
- feat(hooks): the stage-hook framework and its outcome contract (#260, 1/5) by @GEMISIS in #278
- feat(run): confirm a workdir an agent should probably not be pointed at (#252) by @GEMISIS in #279
- feat(hooks): fire on_stage_enter, and resolve hook scripts at spawn (#260, 2/5) by @GEMISIS in #280
- feat(hooks): before_inference and after_inference (#260, 3/5) by @GEMISIS in #281
- feat(hooks): on_tool_call, ordered so it can only narrow (#260, 4/5) by @GEMISIS in #283
- feat(hooks): on_stage_exit, on_completion and on_error - completing #260 by @GEMISIS in #284
- fix(output): the resolved output spec outranks the stage prompt (#282) by @GEMISIS in #285
- fix(shell): bound how much of a command's output is captured (#252) by @GEMISIS in #287
- fix(security): confine blueprint-declared seed and script paths by @GEMISIS in #288
- docs: require doc comments on the published crates, and write the 159 missing by @GEMISIS in #291
- docs: document leviath-cli, and drop the last missing_docs exemption (#290) by @GEMISIS in #294
- refactor(manifest): split the 5,293-line manifest.rs by concern by @GEMISIS in #295
- feat(release): ship static musl Linux binaries (#286) by @GEMISIS in #293
- refactor(daemon): move the lifecycle decisions out of the unmeasured binary by @GEMISIS in #297
- fix(security): confine shell redirect targets to the workdir (#289) by @GEMISIS in #292
- ci: run the tests on ARM Linux by @GEMISIS in #298
- feat(limits): bound what a run writes, and never fill the disk (#252) by @GEMISIS in #299
- feat(serve): optional TLS, and a page a browser can accept a certificate on (#300) by @GEMISIS in #301
- fix(runtime): pin the stall watchdog's clock in tests instead of racing it by @GEMISIS in #302
- fix: three findings from the round-3 audit by @GEMISIS in #303
- test(security): state the safe-list property once, over every entry by @GEMISIS in #304
- test(security): pin which tools may run without asking by @GEMISIS in #305
- refactor(runtime): split host.rs by concern by @GEMISIS in #306
- test: one real agent, one real tool call, end to end by @GEMISIS in #307
- refactor(cli): split config.rs by the table each section describes by @GEMISIS in #308
- refactor(daemon): give the spawn path a SpawnDeps struct by @GEMISIS in #310
- refactor(core): split blueprint.rs by concept by @GEMISIS in #309
- refactor(daemon): name build_tool_state's twenty-one arguments by @GEMISIS in #311
- refactor(runtime): name every ECS query instead of suppressing the lint by @GEMISIS in #312
- refactor: split the files over 1,200 lines, and add the rule that keeps them there by @GEMISIS in #313
- refactor: make lint suppressions expire, and delete the ones that already had by @GEMISIS in #315
- fix(test): make expect_tool_call work, honour max_tokens, and document the format by @GEMISIS in #316
- refactor: param structs for four of the long signatures by @GEMISIS in #317
- refactor: remove every string_slice suppression by @GEMISIS in #318
- build: make suppressing a lint a compile error by @GEMISIS in #319
- fix: lock poisoning and HTTPS-client failure stop aborting the daemon by @GEMISIS in #320
- fix: OpenAI and Ollama could not complete work, for two wire-format reasons by @GEMISIS in #321
- fix(windows): decide the console once, at construction by @GEMISIS in #322
- refactor(spawn): lift four phases out of build_agent_inner by @GEMISIS in #323
- test(runtime): pin what multi-world rests on, and the one thing it does not by @GEMISIS in #324
- fix(runtime): an agent id remembers which world minted it by @GEMISIS in #325
- fix(runtime): a raw World can check an agent id too by @GEMISIS in #328
- docs: cleanup, accuracy, and discoverability pass by @GEMISIS in #329
- fix(spawn): a task the blueprint cannot hold is an error, not a shrug by @GEMISIS in #330
- chore(release): 0.3.0 by @GEMISIS in #331
- fix(openai): let the API say when tools need no reasoning effort (0.3.1) by @GEMISIS in #334
- fix(openai): omit a temperature the model does not take by @GEMISIS in #336
- fix(list): make --filter do what it says by @GEMISIS in #348
- fix(config): a [model_capabilities] entry corrects, it does not replace by @GEMISIS in #349
- feat(stages): an escape that is not also a shortcut by @GEMISIS in #350
- fix(anthropic): stop throwing away the cache breakpoint, and let the 1h TTL be chosen by @GEMISIS in #351
- fix(tools): bound read_file, and let a stage cap tools separately by @GEMISIS in #352
- fix(runtime): a run that owed an answer and gave none is not complete by @GEMISIS in #353
- fix(context): a stage that omits a region hides it, rather than destroying it by @GEMISIS in #354
- feat(stages): a gate that requires a revision, not a repetition by @GEMISIS in #355
- feat(observability): make a staged agent's cost legible by @GEMISIS in #356
- feat(context): a checklist region whose items carry state by @GEMISIS in #357
- chore(release): 0.3.2 by @GEMISIS in #358
- test(mcp): a live-server test that can fail for the reason it names by @GEMISIS in #359
- fix(manifest): a blueprint key that does nothing is refused, not dropped by @GEMISIS in #363
- fix(openrouter): take a model's window from OpenRouter, not from our table by @GEMISIS in #364
- fix(config): a setting that does nothing says so, wherever it is by @GEMISIS in #367
- feat(context): stage instructions get a region with a name on it by @GEMISIS in #368
- fix(runs): a stage the run never entered says so by @GEMISIS in #380
- fix(blueprint): a stage may only route results where it can read them by @GEMISIS in #381
- fix(tools): the null device is not an escape from the workspace by @GEMISIS in #379
- feat(gates): a gate that can require a region, and a record when one gives up by @GEMISIS in #382
- fix(context): a region can refuse to be paraphrased by @GEMISIS in #383
- ci: bump taiki-e/install-action from 2.85.5 to 2.85.10 by @dependabot[bot] in #375
- ci: bump Swatinem/rust-cache from e18b497796c12c097a38f9edb9d0641fb99eee32 to 6323deb102c322ba6fcbdcafc7e3dddab59af2b6 by @dependabot[bot] in #376
- ci: bump actions/attest-build-provenance from 4.1.1 to 4.2.2 by @dependabot[bot] in #377
- deps: bump the patch-and-minor group with 4 updates by @dependabot[bot] in #378
- chore(deps): accept the smartstring unmaintained advisory, with its reasoning by @GEMISIS in #385
- docs: overview page, honest framing, better diagrams by @GEMISIS in #384
- refactor(core): the outbound-request policy gets its own crate by @GEMISIS in #387
- Update Version to 0.3.3 by @GEMISIS in #389
- feat(serve): a route for the per-stage ledger by @GEMISIS in #390
- docs: write the engine page for someone who has never met an ECS by @GEMISIS in #391
- Validate the changelog the site publishes from, and index the docs for search by @GEMISIS in #392
- docs: fix a schema that rejected shipped features, and add a build-your-first-agent tutorial by @GEMISIS in #393
- fix(agents): explain a stale install, cut the set to seven, and fan out the research agents by @GEMISIS in #395
- Install a channel with --channel, not an assignment the pipe eats by @GEMISIS in #394
- chore(release): 0.3.4 by @GEMISIS in #396
- UX batch: a wizard that scrolls, clicks and explains itself, plus lev update and a run launcher by @GEMISIS in #397
- Dashboard help that lists every key, unattended runs, and the reason no run had a title by @GEMISIS in #398
- Fan-out agents skipped their own fan-out: gate the escape edge behind dead_end by @GEMISIS in #399
- chore(agents): patch-bump the six blueprints that changed by @GEMISIS in #401
- chore(release): 0.3.5 by @GEMISIS in #402
- docs: catch the reference up with what 0.3.5 actually does by @GEMISIS in #403
- docs: tighten the README down to what a first-time reader needs by @GEMISIS in #404
- docs: lay the README features out as cards, and fix three claims in them by @GEMISIS in #405
- docs: take the prose out of the crate map's node labels by @GEMISIS in #406
- fix(mcp): stop pushing a header-authenticated server into an OAuth login by @GEMISIS in #407
- fix(mcp): three faults a sweep of the other server shapes turned up by @GEMISIS in #408
- chore(release): 0.3.6 by @GEMISIS in #409
Full Changelog: v0.2.0...v0.3.6