Changelog
All notable changes to Kward will be documented in this file.
[Unreleased]
[0.73.0] - 2026-06-29
Added
- Added persistent session-backed worker queue job metadata as the first step toward tab-based worker queues.
- Added experimental
/queue addand/queue listcommands for enqueueing the current tab session into the worker queue. - Added a first session-backed worker queue runner that executes one queued job and marks it ready for review after committing changes.
- Added clean-workspace blocking for queued workers so jobs do not start on top of existing local changes.
- Added
/queue runto manually drain queued tab worker jobs sequentially until the queue is empty or a job needs attention. - Added worker git stash helpers as groundwork for cooperative queue suspension.
- Added explicit queue runner suspend/resume primitives that stash and restore a running job's workspace changes.
- Added
/queue suspend <id>and/queue resume <id>commands for manually parking and resuming queued worker jobs. - Added
/queue open <id>to open a queued worker's session for review or follow-up. - Added
/diffto open the chronological file changes recorded in the current session in the integrated diff viewer. - Added
/scratchpad [text|markdown|ruby]for opening unsaved editor buffers, including Vibe:w filenamesave-as support and Ruby:run/ModernCtrl+Routput written after__END__. - Added
/pty <command>and theekwshpty <command>built-in for explicit interactive PTY passthrough sessions, enabling terminal-owned tools such as pagers to run from Kward. - Added minimal PTY execution for external
ekwshcommands so terminal-aware tools can detect a TTY and terminal width. - Added Ctrl+C cancellation for running
ekwshcommands and preserved tab-switch actions while shell commands are active. - Added quoted path completion and cached
$PATHexecutable completion forekwsh. - Added streaming
ekwshcommand output in the TUI transcript while commands run. - Added separate workspace-scoped
ekwshcommand history so embedded shell input no longer shares normal prompt history. - Added structured RPC
runtime/updateSettingdefaultModelvalues so clients can send provider and model separately while keeping the existing string format.
Changed
- Changed PTY-backed
ekwshcommands to refresh terminal window size while running so long-lived commands can adapt to resizes. - Changed
ekwshto defaultGIT_PAGERtocat, while preserving user-provided values, so Git commands do not unexpectedly enter an interactive pager under PTY execution. - Improved
ekwshPOSIX-oriented built-ins, includingexit [status], strictercd/pwd,export NAME, assignment persistence,unalias, and shared alias-name validation. - Changed
ekwshconfiguration to prefer a POSIX/bin/shdefault shell and validate runtime settings for command timeout, output cap, and shell history size.
Fixed
- Normalized ordinary PTY line endings in
ekwshcommand output so transcripts avoid stray carriage returns. - Added
ekwshtimeout and output-limit enforcement for external commands using the shared local command runner. - Consolidated workspace shell command execution on a shared local command runner with timeout, cancellation, bounded capture, and optional streaming support.
- Fixed
ekwshshell output sanitization so unsafe terminal controls are stripped before command output is shown while SGR color is preserved. - Split Vibe editor insert/readline key handling into a focused mixin without changing editor behavior.
- Consolidated compaction message-field reads through the shared message access helper.
- Consolidated RPC transcript tool metadata normalization with tool event metadata so tool names, args, diffs, and changed files stay aligned.
- Fixed RPC tool capabilities so
changedFilesis advertised when emitted in tool results. - Removed a stale
count-testsCLI branch that could crash instead of treating the input as a prompt. - Fixed tab failures and cancellations so red tab states always emit a runtime message explaining what happened.
- Fixed model and reasoning changes from CLI/RPC settings so active session runtime metadata is persisted before the next turn.
- Fixed
context_for_taskso candidate files with no task matches return a clear no-match message instead of only a header. - Fixed workspace file tools so expected filesystem permission and path-type errors are returned as tool errors instead of aborting a turn.
- Fixed composer
Ctrl+Cso it no longer exits the app when no process is running. - Fixed the Git diff viewer so
Ctrl+Cand terminal-forwardedCmd+Ccopy selected text. - Fixed pasted or dropped shell-escaped image paths so the composer hides the path text after adding the image badge.
- Fixed
read_skilltool transcript rendering so skill frontmatter starts on the line after the tool label. - Fixed built-in editor soft-wrap vertical movement so moving up or down preserves the visual column across wrapped visual rows and logical line boundaries.
[0.72.0] - 2026-06-28
Added
- Added a built-in editor that can be opened from the TUI with
$or directly from the CLI withkward edit <filename>, with modern, Emacs-style, and Vibe editing modes. - Added richer editor workflows including syntax highlighting, undo/redo, auto-indent, soft wrap, mouse support, multi-cursor editing, relative line numbers, and an expanded Vim-like Vibe mode with visual selections, text objects, registers, marks, macros, substitution, and Ruby navigation.
- Added
/shell, an embedded Kward shell (ekwsh) for running workspace commands without leaving the TUI, including command/path completion, safe color output, optional globalekwsh.ymlconfiguration, and rbenv shim autodetection. - Added
/files, a searchable project file browser that can open files in the editor and remembers cursor and folder expansion state per workspace. - Added persistent TUI tabs for session-backed conversations, plus tab commands, shortcuts, status colors, and restoration across restarts.
- Added
/gitworkflows for reviewing changes, viewing diffs, staging or unstaging files, and writing commit messages from inside the TUI. - Added TUI composer improvements including
@file mentions, persistent workspace prompt history with Ctrl+R search, and Tab/Shift+Tab reasoning-effort cycling. - Added CLI execution modes via
--mode auto|chat|oneshot|filterand--filterfor transforming piped input. - Added context-budgeting tools and workflows, including
read_filemodes, richer source outlines,context_for_task,context_budget_stats, and restored compacted tool-output inspection. - Added interactive plugin commands backed by a Kward-driven canvas render loop.
- Added experimental agent-worker support behind the existing experimental workflow.
- Added new and expanded guides for editor usage, tabs, project files, Git workflows, agent tools, context budgeting, workspace tools, web search, code search, plugins, RPC, authentication, memory, sessions, troubleshooting, and releasing.
Changed
- Changed the built-in editor to use the modern editing mode by default, with smarter indentation and improved keyboard handling across terminal encodings.
- Improved TUI interaction polish across pickers, tabs, editor rendering, Git workflows, composer refresh behavior, mouse handling, and modal input isolation.
- Improved embedded shell environment handling so Kward-managed environment values are preserved while workspace shell conveniences still work.
- Improved RPC and session internals around steering events, session cleanup, worker metadata, session-tree traversal, and config updates.
- Improved tool-output context budgeting so agents start with focused context, preserve inspectable originals, and report active-conversation savings more accurately.
- Expanded documentation and generated-doc navigation to better reflect current workflows and configuration options.
Fixed
- Fixed embedded-shell completion, environment preservation, and rbenv handling issues.
- Fixed editor and TUI input edge cases involving shifted keys, CSI-u encodings, Command/Ctrl shortcuts, selection preservation, mouse scrolling, tab switching, modal questions, and commit-message editing.
- Fixed many built-in editor behaviors around selection rendering, cursor movement, soft wrap, indentation, deletion/change operations, undo/search behavior, macro recording, registers, text objects, visual mode, and viewport positioning.
- Fixed Git overlay staging and commit-message behavior.
- Fixed session, tab, and worker state issues including tab restoration, session cleanup, worker handoff, foreground write locks, and plugin/test isolation.
- Fixed RPC steering, tool-output restoration, context-budget statistics, and session-manager lifecycle behavior.
- Fixed documentation rendering, navigation, tables, quote styling, and generated guide layout issues.
- Fixed persona time-of-day handling to use the current local time.
Removed
- Removed the placeholder message from
/statusoutput. - Removed unused RPC session helpers and temporarily hid worker labels behind the experimental worker flow.
[0.71.0] - 2026-06-21
Fixed
- Fixed generated YARD guide links so doc-to-doc Markdown links point at the generated
file.*.htmlpages. - Fixed web-tool results with BINARY/ASCII-8BIT response bodies so RPC tool events and TUI rendering receive UTF-8-safe content.
Changed
- Changed transcript rendering so assistant, reasoning, and tool output starts on the same line as its label.
- Changed the interactive startup screen to an info block.”
- Changed shell command output capture to allow larger raw output for Kward's own compactor, preserving stdout/stderr structure and test failure summaries before model-context trimming.
- Tightened the built-in system prompt wording to reduce repeated instruction tokens.
- Changed generated runtime system prompts to use a stable timestamp anchor so time-based persona modifiers do not churn provider cache prefixes each turn.
- Changed tool schema properties to be emitted in deterministic key order for more stable provider request payloads.
- Changed large source-file reads to return an outline plus a short preview before requiring offset/limit continuation.
- Changed large search and fetched-content tool results to preserve file, line, URL, and heading anchors during model-context compaction.
- Changed large tool results to be compacted before they enter model context while preserving full originals in session tool-execution records, reusing existing artifact ids for repeated outputs, avoiding storage for verbatim outputs, preserving short errors exactly, reverting automatically when compaction would not reduce context, and teaching conversation compaction to preserve tool artifact ids.
- Changed model context-window resolution to prefer cached OpenRouter metadata, infer matching provider models from that metadata when possible, and use conservative fallbacks for unknown selected models.
- Updated the authentication guide to describe model picker selection and OpenRouter model cache refresh/list commands.
Removed
- Removed the
banner.enabledconfig setting and/settingstoggle for hiding the interactive startup screen. - Removed the generated table of contents and source-checkout launch snippet from the RPC protocol guide.
Added
- Added a Sessions guide covering saved sessions, cloning, forking, rewinding, tree navigation, compaction, and exports.
- Added Agent Tools documentation pages covering workspace tools, context tools, and token-saving tool-output behavior.
- Added an API reference overview page and API docs navigation dropdown for generated Ruby indexes and key namespaces.
- Added Turbolinks-style navigation to the generated documentation site for same-origin HTML links.
- Added a
docs:checkRake task and HTMLProofer development dependency for checking generated documentation links, images, and scripts. - Added a
docs:serveRake task and WEBrick development dependency for previewing the built YARD documentation site locally with automatic rebuilds. - Added optional
compactiontelemetry logging for tool-output context savings. - Added a
summarize_file_structuretool for compact source-file outlines before reading full files. - Added a
retrieve_tool_outputtool for inspecting original outputs that were compacted out of model context. - Added
kward openrouter refreshandkward openrouter listfor caching key-scoped text-capable OpenRouter models in the Kward cache directory. - Added
/forkfor creating a new session from an earlier prompt and pre-filling that prompt for editing. - Added
fin the/sessionspicker to open the fork prompt selector for the selected session. - Added
/rename <name>for renaming the current interactive session. - Added
rin the/sessionspicker to rename the selected session without closing the picker. - Added
cin the/sessionspicker to clone the selected session and open the new clone, with a cloning spinner while it runs. - Added
d din the/sessionspicker to delete the selected session after an inline confirmation.
[0.70.0] - 2026-06-19
Added
- Added
/rewindfor revisiting earlier user prompts and continuing from there as a branch, while/treeremains the advanced full session tree navigator.
Changed
- Changed TUI selection search to start only after pressing
/, hiding the composer cursor until search mode is active and supporting shell-style editing keys while searching. - Changed the
/sessionspicker to show right-aligned relative timestamps like/rewind. - Changed TUI list navigation to keep long
/sessionsand/treepickers centered while scrolling, and removed wrap-around at list edges. - Changed the saved session picker slash command to
/sessions, with/resumekept as an alias.
Fixed
- Fixed overlay open/close rendering so the interactive composer stays visible instead of briefly blinking away.
- Fixed interactive session diff totals to show the net workspace diff instead of counting repeated edits to the same lines multiple times.
- Fixed
/sessionspicker cancellation so Escape closes smoothly without a blink, while keeping the loading spinner visible as saved sessions are loaded. - Fixed root-prompt session tree navigation so it no longer persists an empty active branch that makes cloned sessions resume with a blank transcript.
- Fixed
/resumesession picker entries to show cloned session ancestry as a tree. - Made
/treebranch indentation more visible in the terminal session picker. - Fixed
Encoding::CompatibilityErrorcrash during compaction when tool results contained ASCII-8BIT (BINARY) strings from HTTP response bodies or shell output. Tool content is now normalized to UTF-8 on append.
[0.69.1] - 2026-06-18
Fixed
- Fixed
/treesession rendering to tolerate malformed cyclic tree records instead of overflowing the Ruby stack.
[0.69.0] - 2026-06-17
Added
- Added a
docs:buildRake task for building the YARD documentation site. - Reworked core guide documentation around developer workflows, setup, authentication, memory, personas, extensibility, plugins, web search, and code search.
- Added
fetch_contentandfetch_rawweb tools for reading specific URLs after search discovery. - Added
enforce_workspace_agents_fileconfig support for forcing full workspaceAGENTS.mdinjection. - Added config-directory
PRINCIPLES.mdas the preferred global principles file, withAGENTS.mdkept as a legacy alias. - Added
kward syspromptfor inspecting the effective system prompt, with--rawfor unannotated prompt content.
Changed
- Changed workspace
AGENTS.mdhandling to inject a compact read-when-relevant instruction by default instead of the full file. - Changed interactive runtime command/status messages to use a
Runtime>transcript label instead of the assistant label. - Changed terminal tool transcript rendering to show a single
Tool>block containing the tool invocation summary and result summary. - Changed transcript label colors to a quieter palette, with failed tool calls rendered in red.
- Separated conversation system prompt state from durable transcript messages; provider request context still includes the current system prompt on every model request.
- Persisted system prompt snapshots as session audit metadata when the prompt changes, without adding them to transcript messages.
Fixed
- Fixed custom
ask_user_questionanswers so trailing spaces remain visible while typing. - Fixed inferred soft memory learning to canonicalize user preferences and avoid storing near-duplicate memories with slightly different wording.
- Fixed in-flight steering messages so they appear in the interactive transcript as
You>entries. - Fixed interactive plugin slash commands and OAuth login so they show the running spinner while executing.
- Fixed
/reloadso terminal plugin footers use the newly loaded plugin renderer without restarting Kward. - Fixed Codex GPT-5.5 RPC model metadata to report a 400k context window instead of the upstream OpenAI API context window.
- Fixed a bug that prevented proper context window calculation whenever an image is attached to a session
- Fixed persona selection so workspace and model personas override the default base persona instead of appending duplicate base personas.
- Fixed Codex Responses streaming to preserve ordered response items, replay assistant phase metadata, and keep commentary/tool-planning text out of visible assistant output.
- Fixed Codex multi-turn requests with
store: falseby not replaying server-assigned response item ids. - Fixed RPC session listing to include each session's persisted provider, model, and reasoning effort so pickers can show session-specific runtime state.
[0.68.0] - 2026-06-14
In this release, most changes are under the hood, as it included massive refactors to have an even more robust way forward.
Added
- Added Anthropic Claude Pro/Max subscription provider support with OAuth login, static Claude model choices, and Anthropic Messages streaming.
Changed
- Changed known context windows and reasoning effort choices to use provider/model-specific metadata for Codex, OpenRouter, Copilot, and Anthropic models.
- Changed the default Anthropic model to Claude Sonnet 4.6 and expanded direct Anthropic model choices to include newer Claude Opus/Sonnet releases.
- Changed resumed sessions to restore the session's last-used provider, model, and reasoning effort without rewriting default config.
- Documented the tool contract: schemas define strict generated/returned payloads, while runtime accepts tolerant incoming tool-call input for compatibility.
- Expanded RDoc coverage past 50% across message compatibility, tool-call normalization, session persistence, session tree helpers, model/client boundaries, config paths, workspace operations, telemetry, RPC, plugins, memory, auth, compaction, search internals, CLI mixins, and prompt interface components.
Fixed
- Fixed session tree editing and RPC fork text so prompt-template turns use the original visible slash command instead of expanded model content.
[0.67.1] - 2026-06-14
Fixed
- Fixed RPC session listing so it no longer deletes the active empty session file while UI clients are starting a first turn.
[0.67.0] - 2026-06-13
Added
- Added optional startup resume for the last active session in each workspace through
sessions.auto_resume: true, including immediate restored transcript/persona data for RPC clients. - Added
tools.workspace_guardrails: falseconfig support for allowing file tools to access paths outside the active workspace. - Added
banner.enabled: falseconfig support for hiding the interactive terminal banner. - Added colored CLI help/version commands, command-specific help, and stricter command precedence over one-shot prompts.
- Added
--working-directory PATHas a global option for running any CLI mode from another workspace. - Added
kward initfor installing the starter pack;--install-starter-packremains as a compatibility alias. - Added
kward doctorto check local config, workspace, auth hints, Pan credentials, and writable directories. - Added
--as a prompt delimiter so option-like text can be sent as a one-shot prompt. - Added
kward auth statusandkward auth logoutfor checking and clearing saved credentials without printing secrets. - Added
/reloadand RPC runtime reload support for reloading installed plugins without restarting Kward. - Added Session Tree support with a CLI
/treecommand plus RPC persisted entry IDs, labels, label timestamps, and branch navigation. - Added RPC
ui/footernotifications for Kward plugin footers. - Added
!shell commands in the interactive CLI composer. - Added the active persona label to RPC
runtime/stateresponses.
Changed
- Expanded the interactive
/settingscommand into categorized settings for model, accounts, memory, interface, tools, compaction, personalization, logging, and advanced config info. - Changed RPC session deletion to use the OS trash/recycle bin when available before falling back to permanent file deletion.
- Changed automatic session naming to persist the first visible user turn, keeping slash prompt names unexpanded while still saving expanded prompt content.
- Changed Pan mode to start with the
kward pancommand;--pan-moderemains as a compatibility alias. - Changed memory retrieval and listing to use a global core, workspace core, workspace soft hierarchy, and added
/memory relaxfor downgrading global core memories to the current workspace. - Changed session tree rendering to match Pi's active-path-first branch display, markers, tool rows, and connector prefixes.
- Changed session tree navigation so all persisted entry points are selectable without automatically running anything.
Fixed
- Fixed RPC session deletion so empty unnamed sessions are explicitly deleted instead of being consumed by unused-session cleanup first.
- Fixed the TUI
/treeselector to start on the current tree position, or the last item for a fresh tree. - Fixed the normal session list/resume picker to stay in recent modification-time order, delete empty unnamed sessions, return the full list by default, and avoid test-created session pollution.
- Fixed RPC model selection to accept lowercase provider IDs from UI clients.
- Fixed cloned sessions to keep the current session name after renaming.
Removed
- Removed the obsolete
/crewcommand reservation and unreleased RPC compatibility aliases.
[0.66.0] - 2026-06-12 - Codename: Order
Added
- Initial public release.
- Prepare RubyGems packaging for the initial public release.