Skip to content

Leviath v0.3.6

Choose a tag to compare

@GEMISIS GEMISIS released this 13 Aug 17:04

Stable release - v0.3.6

Source commit: 6d7ba98

Install

Homebrew (macOS):

brew tap gemisis/leviath https://github.com/GEMISIS/leviath-dist.git
brew install leviath

Linux:

curl -fsSL https://raw.githubusercontent.com/GEMISIS/leviath-dist/main/install.sh | bash

Windows (Scoop):

scoop bucket add leviath https://github.com/GEMISIS/leviath-dist.git
scoop install leviath

Manual:

# 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 lev

What'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