leonard_cli 0.4.3-dev.1
leonard_cli: ^0.4.3-dev.1 copied to clipboard
CLI frontend for Leonard.
Changelog #
0.4.3-dev.1 #
- The bundled leonard-drive agent, drive-with-leonard skill and AGENTS.md
template read
observation.core.routeLayers(the routes on screen) in place of the deprecatedrouteStack(lenny-kyfdc).leonard_agentrises to^0.3.4-dev.2, which carries the field.
0.4.2 #
Stable promotion of 0.4.2-dev.1 on Nico's promotion call (2026-10-21). One change on top: the runtime leonard_native constraint rises from ^0.6.0 to ^0.6.1, so depending on leonard_cli brings in the lenny#198 and lenny#200 backend fixes without a separate pin. The prerelease entry below carries the details.
0.4.2-dev.1 #
Fixes lenny#199: the lenny#160 fix found the native host through the package config, but leonard_native was only a dev dependency, so a consumer that depended on leonard_cli alone had no leonard_native to find and leonard_drive up fell back to paths that exist only inside a lenny checkout.
leonard_native(^0.6.0) is now a runtime dependency ofleonard_cli, so depending onleonard_cliputs it in your package config. You no longer need to addleonard_nativeyourself to useup's native path.- When
upcannot find the native host and no--native-hostwas passed, it exits 64 with an error that saysleonard_nativeis missing from the program's package config and how to fix it (addleonard_nativeto your dependencies, or pass--native-host), instead of the generic "requires --native-host" message. The working-directory fallback still serves development inside a lenny checkout. --summary-jsonnow carries the run's verdict:verdict(pass,failorinfra), a one-linereason, anddigest, the last turns as one line each (action, result, and the final rationale) under 3000 UTF-8 bytes. A run fails only when Leonard drove the app and the goal was not met (budget exhausted, the app's VM service gone mid-drive, a golden mismatch); every outcome that kept it from judging the app isinfra, including goldens that could not be read or written, which now exit 70 rather than 1 (lenny#177).- Add
--gate-exit-codes: exit 0 pass, 75 infra, 1 fail. 75 isEX_TEMPFAIL, Gas City's infrastructure code for checks. A usage error exits 75 too (lenny#177).
0.4.1 #
Stable promotion of 0.4.1-dev.1 on Nico's promotion call (2026-10-20), on stable leonard_agent 0.3.3 and leonard_native 0.6.0. The prerelease entry below carries the full list. One change on top:
--model claudenow defaults toclaude-sonnet-5-5(wasclaude-sonnet-4-6), with vision on. On the sample-app goal it finished in 20 s for $0.26, against 35 s and $0.35 for Sonnet 4.6. Pass--model-id claude-sonnet-4-6for the old default.
0.4.1-dev.1 #
- Raise the
leonard_agentfloor to^0.3.3-dev.2, so a run's usage counts model calls its turn budget abandoned (lenny-c55p6). - Raise the
leonard_nativefloor to^0.6.0-dev.1(lenny#180 to #183). - Add
--summary-json <path>: writes the run's exit code, outcome, turn count, duration, trajectory path and usage totals as one JSON file, so CI can collect token and cost figures across runs (lenny#178). - Add
--price-input-per-mtok/--price-output-per-mtok, and theLEONARD_PRICE_INPUT_PER_MTOK/LEONARD_PRICE_OUTPUT_PER_MTOKenvironment pair, to override the built-in price table for the cost estimate. The flags outrank the environment. - Trajectories record per-turn and per-run model usage; the header's
harness_versionis now0.6.0. - Require
leonard_agent ^0.3.3-dev.1.
0.4.0 #
Stable promotion of 0.4.0-dev.1: the same content, published on the stable rung on Nico's promotion call (2026-10-15), after the Android (Pixel 7a), iOS 26.5 simulator and macOS live suites passed. The prerelease entries below carry the full list.
0.4.0-dev.1 #
- Breaking —
leonard_drive up's native dual path takes--app-idinstead of--app. The native host now attaches to the appflutter runlaunched, on iOS and Android alike, instead of being handed the build to install; on Android that relaunch would have dropped the Flutter VM-service channel. Migration: replace--app <Runner.app>with--app-id <bundle id or package>. A stale--appexits 64 with this migration message. - Requires
leonard_native ^0.5.0-dev.1andleonard_agent ^0.3.2-dev.2. - Fix:
leonard_drive upfinds the native host through the package config, so--native-hostauto-resolution works outside the lenny repo (lenny#160, #166).
0.3.1-dev.1 #
- Add ACP harness inference: drive the loop through a
leonard_acpharness and select it among the registered agent specs. - Add
--wall-clock-minutes, the whole-session wall-clock budget (default 15). - Fix: provider-build errors are caught only for configuration failures.
0.3.0 #
Promotes 0.3.0-rc.1 to stable. The candidate's full change list is under that
entry below.
- Breaking: requires
leonard_agent ^0.3.0and adopts its I/O entrypoint. Migration for anything embedding this package's library surface: importpackage:leonard_agent/leonard_agent_io.dartfor owning connections. - Fix:
coretool descriptors are read from the handshake and passed as the driver'scoreToolsinstead of being projected as bare names, so the model sees each core tool's description and input schema (lenny#123). - Add:
tool/live_macos_smoke.dart— the live macOS smoke that gates aleonard_flutterrelease (lenny#120).
0.3.0-rc.1 #
- Breaking: requires
leonard_agent ^0.3.0-rc.1and adopts its I/O entrypoint. Migration for anything embedding this package's library surface: importpackage:leonard_agent/leonard_agent_io.dartfor owning connections. - Add observation frame goldens:
leonard_drivepersists observation frames and compares them against a stored golden. - Add the
test-with-leonardskill router. - Provider model ids are configurable, and driver token and effort defaults are exposed as operator overrides.
- The portable pure-Dart mutation runner ships with its Flutter delegate; dry output counts as sizing evidence, and zero uncovered mutation lines is accepted rather than failed.
- Self-drive: completion is gated on observed timeline evidence, a model must be selected before Start, diagnostic evidence survives an observation failure, and panel session markers are durable.
- Raise the sibling floors to the published wave:
leonard_contract ^0.2.2,leonard_host ^0.2.2,leonard_native ^0.4.1.
0.2.1 #
install --copilotnow overlays.github/agents/— the location GitHub Copilot (CLI, coding agent, VS Code) actually scans — instead of the retired repo-rootagents/+skills/plugin layout. Skills need no overlay:.agents/skills/is a first-class Copilot skill location, andgh skill install memento-engineering/lenny drive-with-leonardinstalls straight from this package's vendored assets.- The vended
leonard-driveagent's tools list carries both harness vocabularies (Bash, Read, execute), so the same file drives Claude Code and Copilot unchanged.
0.2.0 #
- Breaking:
leonard_drivespeaks theext.leonard.*VM-service namespace (protocol version 2). Target apps must runleonard_*0.2.0 — a 0.1.x app still registersext.exploration.*and will not answer the handshake.
0.1.5 #
- Bundled
AGENTS.mdtemplate documents the perceptionidentifier/valuefields and the addressing-vs-inference guidance, matchingleonard_agent0.1.5 (kDefaultAgentsMd); depends onleonard_agent ^0.1.5.
0.1.4 #
leonard_drive upgains a native dual path: boot a Flutter target AND theleonard_nativehost against ONE shared device, expose both VM-service endpoints (DualLaunchHandle{flutterWsUri, nativeEndpoint, deviceId}), and tear both down via a single--pid-file. The single-target path is unchanged.- New
drive-dualsubcommand (tools/observe/invoke) drives a multi-hostMultiHostSessionover both endpoints — merged manifest, merged observation, namespace-routed tool calls — so an external brain can perceive and drive a Flutter app and the native channel together.
0.1.3 #
leonard_drive toolsnow prints acapabilitiesarray next tonamespaces. It surfaces reachable host features that are not namespaced tools — notablyscreenshot(use thescreenshotsubcommand), which is absent fromnamespacesby design. Stops the recurring "the manifest has no screenshot, so there is no screenshot capability" mistake. Requiresleonard_agent^0.1.3(the handshake parse that decodescapabilities).leonard_drivegainsup/downlifecycle subcommands that erase the manual boot-grep-convert dance.up --runner flutter -d <device> -t <entry>(or--runner dart -t <entry>for a pure-Dart target) boots the app, discovers the VM-service URI, prints it machine-readably ({event:"vm_service_ready", ws_uri, …}plus optional--uri-file/--pid-file), then HOLDS the process alive (teeing its log to stderr) until a signal ordown. No model, no goal, no loop — the external brain attaches statelessobserve/invoke/screenshotcalls tows_uri.down --pid-file <p>stops a held target. New sharedlauncher.dartprimitive (spawn + scrape + hold + teardown) backs it.leonard_cligains--launchfor the autonomous loop: instead of a caller-supplied--vm-uri, boot the target (--runner flutter -d <device> -t <entry>, or--runner dart -t <entry>) via the shared launcher, drive the discovered URI with lenny's own LLM toward--goal, then tear the target down.--launchand--vm-uriare mutually exclusive (and the boot-only flags error without--launch) — no dual-mode interface.
0.1.2 #
leonard_drivegains ascreenshotsubcommand: capture a still and write the PNG to--out path.png(decodescore.screenshot; prints width/height/device-pixel-ratio). Just pixels — no settle, no golden compare.
0.1.1 #
- Provider construction moves to the
DartanticModelProviderseam (the agent's unified backend factory). - Ship consumer coding-agent assets plus an
installcommand, with harness-specific overlays (--claude/--copilot/--all). The bundled assets are target-agnostic (Dart-VM, not Flutter-specific).
0.1.0 #
Initial release.