Skip to main content

v2.13.0

Release notes for orun v2.13.0.

Highlights​

  • orun opens the cockpit by default. Running orun with no arguments on an interactive terminal now launches the Cockpit TUI — the same as orun tui. In non-interactive shells (CI, pipes, redirected output) or when ORUN_NO_TUI is set, a bare orun prints 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 as orun 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​

InvocationResult
orun (interactive TTY)Opens the Cockpit TUI
orun (non-TTY: pipe, redirect, CI)Prints help
ORUN_NO_TUI=1 orunPrints help, even on a TTY
orun tuiOpens 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:

KeyAction
dDry run — previews execution; runs no commands, writes no logs
RReal 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 RunEvent carries the resolved execution ID so the cockpit can scope live log tailing without an extra lookup.
  • TailLogs gained 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 tui and every other subcommand behave exactly as before.
  • Scripts that run a bare orun to print help keep working in non-interactive shells; set ORUN_NO_TUI=1 to force help on a TTY.
  • On-disk state and log layout are unchanged — real runs from the TUI write the same .orun/ records as orun run.

References​