Releases: raya-ac/kiln
Releases · raya-ac/kiln
Release list
Kiln 1.9.3
Changelog
All notable changes to Kiln land here. Format loosely follows
Keep a Changelog. Dates are
YYYY-MM-DD, versions follow SemVer.
[1.9.3] — 2026-04-24
Added
- Real GPT-5.4 Fast mode for ChatGPT-backed sessions. Kiln's
Fast
button no longer swaps models or piggybacks on reasoning effort. For
GPT-5.4 sessions it now maps to Codex's own fast mode settings, persists
per session, and survives forks, clones, imports, and duplicates.
Changed
- Model branding now distinguishes Claude, ChatGPT, and Codex. GPT
models no longer inherit the generic Codex terminal treatment in the
picker and chat chrome. Kiln now shows separate brand marks for Claude,
ChatGPT, and Codex anywhere the active model is surfaced. - Assistant avatars now follow model brand instead of only provider.
ChatGPT-backed sessions look like ChatGPT sessions in the transcript and
live response row instead of falling back to the same visual identity as
Codex tool sessions. - Chat disclaimers now link to the right provider docs. Claude sessions
point to Anthropic's disclaimer page, while ChatGPT/Codex-backed sessions
point to OpenAI's accuracy and limitations page. - Residual Claude-only UI copy was cleaned up again. Remaining helper
text in prompts, settings, shortcuts, and chat placeholders now uses
provider-neutral assistant wording where the app is not specifically
talking about Claude.
[1.9.2] — 2026-04-22
Changed
- Codex sessions now respect Kiln's
Askpermission mode more honestly.
Kiln passes Codex's ownon-requestapproval policy through instead of
silently treating most Codex sessions like bypass mode. - Codex resume no longer flips into
--full-autofor plan sessions.
That behavior was backwards and could turn a read-only planning session
into a more permissive execution mode after resume. - Codex
Denysessions now get an explicit no-tools instruction.
Read-only sandboxing was already in place, but the prompt now also tells
Codex not to run shell commands or modify files.
[1.9.1] — 2026-04-22
Added
- Codex edit-event bridging. Codex
file_changeevents now get mapped
into Kiln's existing edit/tool runtime so changed files surface through
the same editor flow Claude already uses for auto-open, pending edit,
and diff/revert handling.
Changed
- Chat copy is more provider-neutral. The main chat disclaimer now says
Kiln can make mistakes. Please double-check responses.instead of
claiming every session is Claude. - Codex sessions look like Codex sessions. Provider-specific avatar and
model icon treatment now show a terminal-style Codex mark instead of
reusing Claude branding in the chat UI and model pill. - The remote control composer placeholder no longer says
Message Claude….
[1.9.0] — 2026-04-22
Added
- Codex CLI backend. Kiln can now run Codex-backed sessions alongside
the existing Claude ones instead of pretending every session is the same
subprocess under the hood. Codex sessions usecodex exec --json,
persist their thread IDs for resume, and surface command executions in
the same activity/timeline model Kiln already uses for tool calls. - Codex models in the picker.
gpt-5.4,gpt-5.4-mini,gpt-5.2,
andgpt-5.3-codex-sparkare available anywhere Kiln chooses a model:
defaults, new-session creation, template editing, and in-session model
switching. - Provider-grouped model menus. Model pickers now separate Claude and
Codex into distinct sections instead of dumping every model into one flat
row. It reads better, and it stops the UI from feeling like a pile of
raw IDs once both backends exist.
Changed
- The app no longer overclaims that it is Claude-only. The onboarding
flow, stats hero copy, notifications, search results, markdown export,
and key chat labels now use the active provider where it matters, and
more neutral wording where it doesn't. - Workdir changes on Codex sessions now reset the saved thread mapping.
Claude transcripts can be migrated between workdirs because the resume
files are path-scoped on disk. Codex resume threads are global, but the
non-interactive resume flow doesn't expose a clean way to rebind cwd, so
Kiln drops the mapping and starts fresh in the new directory instead of
resuming under the wrong root.
Notes
- This is a first Codex pass, not full parity. Codex
exec --json
doesn't stream token deltas the same way Claude does, so live text
updates are coarser. Claude's PreToolUse approval flow also hasn't been
ported across yet.
[1.8.4] — 2026-04-21
Fixed
- Workdir migration now waits for the live subprocess to exit before
copying the CLI transcript. Previouslyclaude.killreturned
immediately while the child was still flushing writes to
<cliId>.jsonl, so the copy at the destination could be truncated.
Also migrates the sibling<cliId>/sidecar directory (subagent
state, cached tool results) so agents don't lose their scratch data
across a workdir move. - Migration refuses to clobber an existing destination transcript.
If<cliId>.jsonlalready exists in the new workdir's project dir
— say because a backup was restored — Kiln drops the mapping
instead of silently resuming a different conversation. The next
send starts a fresh CLI session in the new dir. /saveis now confined to the session's workdir. Absolute paths
(/…or~/…) and relative paths that climb above the workdir via
..are rejected. The old behaviour would silently write anywhere
the user could write, which combined with an untrusted code block
was a real-world overwrite risk.lastCodeBlockno longer drops content on an unterminated fence.
Interrupted or mid-stream replies often end without the closing
``` —/saveand `/copycode` used to report "no code block" on
visibly-present code. Now the open block is returned as the last
one.- Slash commands that shell out now run off the main thread.
/log,
/branch,/checkout,/stash,/unstash,/blame,/find,
/recent,/repo,/diffstat,/upstream,/changed— all move
toTask.detached. Previously they blocked the UI whilegitor
findran; on a large monorepo that was a visible beachball. - Translation polish. Italian / Portuguese
forkedis now
biforcato/bifurcado(was bare Englishfork). Korean
think/noThinkuses생각/생각 안 함instead of 사고
(which reads as "accident"). Hindi time abbreviations gained the
पहलेsuffix so they read as "N min ago". Russianpush/pull
nowПуш/Пулto match the translatedКоммит. Taglines in
Turkish, Polish, and Swedish dropped the anglicisms.
[1.8.3] — 2026-04-21
Added
- Full UI translations for the ten new languages. Italian,
Portuguese, Russian, Korean, Dutch, Hindi, Arabic, Polish, Turkish,
and Swedish now translate every label that German / Spanish /
Chinese / French / Japanese already did — sidebar, composer,
settings sections, git chips, activity panel, stats, relative
timestamps, effort labels, the whole lot. Switching language in
Settings now actually repaints the UI rather than only steering
Claude's replies.
[1.8.2] — 2026-04-21
Added
- Ten more languages available in Settings → Language: Italian,
Portuguese, Russian, Korean, Dutch, Hindi, Arabic, Polish, Turkish,
Swedish. For these, Claude's chat output is steered into the chosen
language via the system prompt; the Kiln UI stays in English (full
UI translations only ship for the six previously supported locales).
The settings description updates accordingly so it doesn't overclaim. - English flag is now 🇦🇺. Because.
Changed
- Language picker is a native dropdown instead of a scrolling pill
row. The old layout squeezed each language name into a 40-pt pill
and wrapped "English" into "Eng/lish" when the settings column was
narrow.Picker(.menu)renders the selected flag + label at rest
and drops a proper menu on click — same affordance as the model /
mode / permissions rows above it.
[1.8.1] — 2026-04-21
Fixed
- Changing a session's workdir no longer breaks the Claude CLI
conversation. Claude Code stores each conversation under
~/.claude/projects/<dashed-abs-path>/<cliId>.jsonl, so the resume
ID created in workdir A couldn't be resolved from workdir B — the
next send errored with "No conversation found with session ID …"
and the run aborted. Kiln now migrates the conversation file across
project dirs when the workdir changes, so the same CLI session
keeps resolving in the new location with full context intact. Any
live subprocess is killed first (you can't chdir mid-run). - Pipe-drain deadlock in the shell helper.
Process.waitUntilExit
beforereadDataToEndOfFileblocks when the child writes past the
~64 KB pipe buffer —git statusin a dir with many untracked
files hit this easily. Stdout and stderr are now drained
concurrently via a DispatchGroup before we wait on exit. - Workdir activity scan guards a missing directory. If the
session's workdir doesn't exist or isn't a directory,git status
is skipped instead of raising insideProcess.run.
[1.8.0] — 2026-04-21
Added
- Workdir activity chip — above the composer, a small pill shows
how many files have uncommitted changes in the session's workdir.
Click it for a popover listing each file with its git status letter
(M,A,D,R,??). Click a row to open the file's diff in
the existing DiffSheet, or use the "Open all in diff" button for
the combined view. The chip disappears when the tree is clean or
the session isn't in a git repo — so it only draws attention when
there's actually something to see. - Event-driven refresh. The ch...