v2.13.0
Release notes for orun v2.13.0.
Highlights
orunopens the cockpit by default. Runningorunwith no arguments on an interactive terminal now launches the Cockpit TUI — the same asorun tui. In non-interactive shells (CI, pipes, redirected output) or whenORUN_NO_TUIis set, a bareorunprints help instead, so scripts and pipelines stay predictable. Explicit subcommands (orun plan,orun run, …) are unaffected, and an unknown command (orun bogus) still errors rather than being swallowed.- Real runs from the cockpit. Plan Studio's
R(real run) now actually executes. It pops a confirmation modal, then runs the plan through the same internal runner asorun run, persisting run state and per-step logs to.orun/. The previous build rejected real runs from the TUI ("real execution remains CLI-only"); that limit is gone. - Live logs while running. Logs now stream into the cockpit as a real run executes — in both the Activity → Step view and the Run dashboard's Log Explorer — instead of only appearing after the run finished. Follow-mode tailing is scoped to the in-flight run's execution ID and shuts down automatically when the run completes, when you attach a different job/step, or when you leave the logs surface.
Default command behavior
| Invocation | Result |
|---|---|
orun (interactive TTY) | Opens the Cockpit TUI |
orun (non-TTY: pipe, redirect, CI) | Prints help |
ORUN_NO_TUI=1 orun | Prints help, even on a TTY |
orun tui | Opens the Cockpit TUI (unchanged) |
orun plan / orun run / … | Runs the subcommand (unchanged) |
orun <unknown> | Errors with "unknown command" |
ORUN_NO_TUI accepts the usual truthy values (1, true, yes); any
other value (or unset) leaves the default behavior in place. The bare
invocation also auto-discovers the nearest intent.yaml from the current
directory, so it works the same way orun tui does from a subdirectory.
Running plans in the cockpit
From Plan Studio:
| Key | Action |
|---|---|
d | Dry run — previews execution; runs no commands, writes no logs |
R | Real run — confirms, then executes locally and persists state + logs |
A real run streams lifecycle events into Activity (the in-flight run is
pinned to the top of the run list and pulses until it reaches a terminal
state) and writes per-step logs under
.orun/.../logs/<job>/<step>.log — exactly like orun run.
Watching logs live
- Activity → Step. Drill into a running job's step (
⏎); the log pane attaches to the active run and follows it, surfacing each step's output as the step completes. - Run dashboard. Press
⏎on a job row to open the Log Explorer for that job; it follows live output during the run and replays stored logs once for a finished run.
Dry runs intentionally produce no logs (they execute nothing) — use a
real run (R) to watch live output.
Implementation notes
- The TUI run service (
internal/tui/services) now permits non-dry-run execution (remote state remains gated) and constructs the runner with the requested dry-run flag rather than forcing a dry-run. - Every streamed
RunEventcarries the resolved execution ID so the cockpit can scope live log tailing without an extra lookup. TailLogsgained a follow mode: it streams existing per-step logs, then watches the job's log directory for new step logs until its context is cancelled. One-shot reads (completed/historical runs) are unchanged.
Compatibility
This release is additive and backward-compatible:
orun tuiand every other subcommand behave exactly as before.- Scripts that run a bare
orunto print help keep working in non-interactive shells; setORUN_NO_TUI=1to force help on a TTY. - On-disk state and log layout are unchanged — real runs from the TUI
write the same
.orun/records asorun run.
References
orun tui— default command, run, and live-log workflow.- Cockpit overview — surfaces and the shared view-model.
orun run— the equivalent CLI run path.