Releases: CorvidLabs/rune
Release list
v0.2.1
Fixed
- Preserve
--jsonand--ndjsonflags after the command separator instead of consuming flags intended for the wrapped process. - Decode UTF-8 incrementally so multi-byte characters split across PTY reads remain intact.
- Mirror terminal dimensions into watched child processes and track resize changes while polling.
- Kill and reap watched children when an output sink closes with
EPIPE. - Create default watch logs as collision-safe, symlink-resistant, owner-only
0600files.
Changed
- Test every supported Ruby minor from 3.0 through 4.0 and enforce strict SpecSync, risk, and provenance gates.
- Include linked documentation and examples in the built gem and correct installation guidance.
- Add release version parity, package, smoke, and provenance checks before publishing.
Full Changelog: v0.2.0...v0.2.1
v0.2.0
Highlights
New: rune watch โ live, bidirectional interactive passthrough for driving a command in a PTY. Puts your terminal in raw mode, forwards keystrokes to the child live (including raw escape sequences like arrow keys), streams output to your screen as it happens, and logs every chunk as an NDJSON event to a temp file so an AI agent can tail the session live while a human drives it.
Refined through real, live-terminal dogfooding โ including driving fledge plugins search --interactive (a genuinely different Rust TUI: animated spinner, type-ahead fuzzy filtering, arrow-key navigation, a nested y/n confirmation) end-to-end.
rune run --timeout=SECONDS and TableParser.parse(format:) (:auto/:pipe/:space).
Test coverage: 57 โ 153 RSpec examples, ~98% line / ~83% branch coverage.
Fixes
- A root-cause raw-mode bug where arrow keys never registered in real
rune watchusage (missingrequire 'io/console'). - Missing
require 'io/wait'inpty_runner.rb/pty_watcher.rbโ this was a hard crash on Ruby 3.0/3.1, inside the gem's declared>= 3.0support range. rune run --timeoutnow actually kills the timed-out child instead of leaving it running as an orphan.- A double-execution bug where an unrelated error could silently re-run an already-spawned
rune watchsession. PromptDetectorfalse positives on progress output and<placeholder>-style lines.- Signal forwarding,
Script.new { ... }, exit-code composability, PTY-unavailable/allocation-failure handling, and non-UTF-8 output crashes. - A full triage of all 21 automated review comments on #3 โ 9 fixed with regression tests, 7 documented as known limitations for 0.2.1 (see
ROADMAP.md).
Install
gem install rune
# or
fledge plugins install runeFull details in ROADMAP.md and docs/getting_started.md.
v0.1.3
What's Changed
- fix(v0.1.2): fix Ruby requirement, TableParser overflow, PTY prompt detection & script execution, and add PTY architecture docs by @0xLeif in #1
- fix(pty): add signal forwarding, ANSI stripping in TableParser, and non-blocking stdin writes by @0xLeif in #2
New Contributors
Full Changelog: v0.1.1...v0.1.3
v0.1.2
v0.1.1 โ Active Script Execution & Robust TTY Parsing
Rune v0.1.1 Release Notes
- Active Rune::Script Execution: Connected step-by-step TUI script execution directly into PTYRunner (wait_for, send_keys, pause).
- Enhanced Prompt Detection: Updated regex to detect shell & TUI prompts (>, >>, %, โฏ, โบ, โ, ?, :, $, #).
- Live Streaming Output: Added on_output callback to PTYRunner to yield output lines in real-time.
- Fixed-Width Column Table Parser: TableParser now calculates header column span positions to handle cell values containing internal spaces.
- CorvidLabs Trust & Package Automation: Added trust toolchain integration and GitHub Packages auto-publishing workflow.
v0.1.0 โ Initial Release: Universal TTY โ AI Agent Bridge
Rune v0.1.0 โ Initial Release
Rune is a Ruby CLI tool and library designed from the ground up to be human and AI agent first-class. It serves as a universal pseudo-terminal (PTY) runner and structured data bridge for any CLI command or interactive TUI application.
Features
- Dual Output Modes: Formatted terminal output for humans, raw structured JSON (--json) or streaming NDJSON (--ndjson) for AI agents.
- Universal PTY Process Runner (Rune::PTYRunner): Spawns any binary or TUI in a pseudo-terminal session, stripping ANSI codes and measuring duration in milliseconds.
- Terminal Pager Bypass: Automatically injects PAGER=cat / GIT_PAGER=cat so commands like git log return immediately without hanging.
- Auto-Parsers (Rune::Parsers):
- TableParser: Parses space or pipe-delimited terminal tables into array of hashes.
- KeyValueParser: Parses key-value output into typed hashes.
- TextSanitizer: Normalizes line endings and cleans ANSI escape codes.
- Interactive Script DSL (Rune::Script): Step-by-step TUI script automation DSL for driving interactive prompts.
- CorvidLabs Integration: Pre-configured with fledge task runner, spec-sync contracts (specs/), and GitHub Actions CI workflow.
Install
gem install rune