Repository navigation
v0.68.0
Important
Everyone on Linux and Windows: lich has a native window, experimental.
Choose it in Settings › Appearance › Window, and the tray keeps the web window
one click away; if it fails to start, lich opens the web window instead.
Added
- Choose the native window in Settings. Settings › Appearance (web) and
Settings › General (native) gain a Window choice, Web or Native
(experimental); lich opens the chosen one at launch, from the tray and from
lich focus, and the tray gains an item that opens the other one. Changing
it offers to switch now, closing this window and opening the other one with
every session still running. If the native window is missing or fails to
start, lich opens the web window and says why. The native window ships in
the Linux packages, the AUR package, the Windows installer and both
archives, beside lich; macOS has no build of it yet, so the choice is not
offered there. lich nativeopens the native window. It is built in Go on Gio, beside
the web window, and opens on the running lich (starting one when none runs)
after closing the web window, so your sessions stay where they are. It
survives lich restarting after an update, shows lich in the tray, and Show
lich brings it back after you close it.- The native window's terminal takes the mouse and the agent's keys.
Dragging selects from the clicked cell to the one under the pointer and
copies on release, a double click takes the word and a triple click the
line; a program that asks for the mouse, as Claude Code and vim do, gets
clicks, drags and the wheel instead, andShiftselects over it; in a
full-screen program that does not, such asless, the wheel moves through
it.Ctrl+Shift+V(Cmd+Von macOS) pastes the clipboard's text, or hands
the agent an image or file it holds;Ctrl+Vattaches a clipboard image
(Alt+Von Windows),Shift+Enterbreaks the line andCtrl+Backspace
erases a word, as in the web window. Resizing a zsh, bash or fish session
redraws its prompt instead of stacking copies of it: lich starts those
shells with prompt marks (OSC 133). - Pull requests in the native window. The pull request button in the top
bar,Ctrl+Shift+P, or a card's or the footer's#123opens the repository's
pull requests beside the one in view, filtered by text and by All, Ready,
Drafts or Failing, open, closed or merged. A pull request shows its checks,
mergeability and review, the files that conflict, its description and
conversation in Markdown, its commits, and its files as the Review tab draws
them beside a file tree, each file tickable as viewed and each review thread
under its line. Folding a file you had scrolled into keeps the next one
right under it, here and in the Review tab. A thread is answered or resolved
there or in the conversation, where the pull request is commented on too. A
selection of lines is commented for the session's batch or on the pull
request, into a pending review sent as a comment, an approval or a change
request. Open in Session reuses or creates the branch's worktree,
Resolve conflicts and Fix CI errors hand the problem to that
session's prompt, and Merge follows the base branch's rules, squashes or
merges with the commit message as you edit it when you ask to, then offers to
remove the merged worktree. - A new worktree in the native window starts from the newest of its base.
The Worktree item of the + menu (or its shortcut) opens a dialog that
takes a name, words or a#123issue, the branch to start from and whether to
bring the checkout's uncommitted changes. When that branch is behind its
upstream, asmainis after a few merges, lich fetches it first and starts the
worktree from the upstream instead, saying so under the branch; a branch with
commits not pushed, an unreachable remote or uncommitted changes brought along
keep the local branch. Your local branch itself is left as it is. A worktree
opened from the command line or by an agent (open_session) on a local base
starts from the newer of the two the same way. - Claude Code profiles: more than one account, each with its full login, in
the native window. Open Settings › Providers › Claude Code inlich native
and make a profile per account: New profile takes a name and the plugins
to bring from Personal, then logs it in with Claude Code's own
claude auth loginin a dialog (or from a terminal card), and plan usage,
plugins and every Claude Code feature work for it as they do for your own; the
setup tokens a wrapper binary used to hand over carried none of that. Your
settings,CLAUDE.md, agents, commands, skills and hooks stay shared across
profiles, the plugins you pick are installed into the new one under its
account's policy, and the lich plugin is installed there for you and follows
Personal's: installing or updating it there updates every profile, and the
ones logged in before they got it get it at lich's next start. A confined
session of a profile can write to its plugins as it does to the profile. A
project picks the profile its new sessions start in (Profile, in the
Global and project scopes), a session keeps the one it was born in and its
card names it, and Continue in on the card's menu moves a session's
conversation to another logged-in account, with its five-hour usage beside
it, and carries on in the same card. The web window does not show profiles. - Codex profiles: more than one login, in the native window. Open Settings ›
Providers › Codex inlich nativeand make a profile per account: New
profile takes a name and logs it in with Codex's owncodex login, which
opens the browser and waits for its page on a local port, so one login at a
time. A profile keeps its own login, its own conversations and its own
plugins: the dialog asks which of Personal's plugins to bring, Copy plugins
from… on a profile's menu brings more later, and the lich plugin is
installed there for you and follows Personal's updates. Personal's
config.tomlsettings (model, features, MCP servers),AGENTS.md, hooks,
skills and rules are the same in all of them; a setting changed inside a
profile goes back to Personal's at its next session, so change it in
Personal. A project picks the profile its new Codex sessions start in, a
session keeps the one it was born in and its card names it, and Continue
in on the card's menu moves a Codex conversation to another logged-in
account, with its five-hour usage beside it, and carries on in the same card.
Searching a conversation, resuming it from the History tab and the context
and cost readouts look in every profile. - oh-my-pi profiles: more than one login, in the native window. Open
Settings › Providers › oh-my-pi inlich nativeand make a profile per set
of accounts: New profile takes a name and opens oh-my-pi's own
omp loginin a terminal card, where you pick the provider to log in to,
since that login is an interactive picker. A profile keeps its own logins and
its own conversations;config.yml,models.yml, MCP servers,AGENTS.md,
skills, rules, commands, prompts and extensions are the same in all of them,
and the plugins you install withomp plugin installare not. The row names
the accounts logged in there. A project picks the profile its new oh-my-pi
sessions start in, a session keeps the one it was born in and its card names
it, and Continue in on the card's menu moves an oh-my-pi conversation,
images included, to another profile and carries on in the same card.
Searching a conversation, resuming it from the History tab and the context
and cost readouts look in every profile. - opencode, Cursor CLI and Kiro CLI profiles on Linux, in the native
window. Open Settings › Providers › opencode, Cursor CLI or Kiro CLI in
lich nativeand make a profile per account: New profile takes a name
and opens the CLI's own login (opencode auth login,cursor-agent login,
kiro-cli login) in a terminal card. None of the three has a setting of its
own that moves its login, so a profile's sessions run with their own
XDG_DATA_HOME(opencode, Kiro CLI) orXDG_CONFIG_HOME(Cursor CLI), a
directory of links to yours in which only the provider's own folder is the
profile's:gh,git,miseand every other tool in the session keep
finding their state where it always was, and what a tool creates there for
the first time during a session stays in that profile. An opencode profile
keeps its own login and conversation history, and its sessions cannot
continue in another profile, since opencode keeps both in one database. A
Cursor CLI profile keeps its own login, chats and CLI settings, and
Continue in moves a chat to another logged-in profile. A Kiro CLI
profile keeps its own login; conversations are every profile's, so
Continue in carries on in the other account at once. On macOS and
Windows these three keep their logins outside the XDG directories, so they
have no profiles there;docs/ceilings.mdhas what was measured for each
provider. - See which binary of each agent lich runs, and its version. When several
copies of a CLI sit on yourPATH(say a global npm install, a mise shim and
a distro package of Codex), the first one silently drives every session,
login and plugin install. In the native window, Settings › Providers shows
the version beside a provider whose row has no plan reading, and a
provider's Binary block names the file a session runs, its version, and every
other versionPATHholds, with a hint to pin one; the row in the list says
"other versions on PATH".lich doctorwarns about the same thing and names
the setting that pins one (provider.<id>.bin). - Desktop notifications you can click, in the native window on Linux. A
session that needs your input or finished its turn raises a notification
with the provider's icon and a status badge, what the session asks (or the
last thing it said), and its project and branch. Open brings the window
up on that session, even from another workspace; each session keeps one
notification, replaced in place, and it goes away by itself once you answer
or open the session. Any notification server works (GNOME, KDE, mako, dunst,
swaync); one that draws buttons, like swaync, shows Open and Dismiss.
Windows and macOS keep the plain notification for now. - Themes can color the code, in the native window. A theme's new optional
syntaxsection styles the review, diff and file views by CodeMirror
highlighting tag, a color or a color with bold, italic, underline or
strikethrough per tag, so a theme's code reads the way its editor does. The
bundled themes mark a parameter's declaration in italics and give a
language's builtins (len,print,Math…) the type color, in Go, Java,
JavaScript, TypeScript, Python and Rust; a theme without the section keeps
the default palette, and the web window ignores it. Seedocs/themes.md. - A theme can follow your desktop from dark to light, in the native window.
A theme's new optionalpairnames its variant for the other scheme, and
with Auto light/dark on (Settings › Appearance, beside the theme list) the
native window draws that variant while the OS asks for its scheme, then goes
back. The bundled Light and Dark pair each other. Seedocs/themes.md. lich theme listandlich theme switch <theme>, for the script that
changes your desktop's theme to bring lich along: the native window repaints
at once. Seedocs/cli.md.- Choose the interface font and the code's font and size, in the native
window. Settings › Appearance has an interface font, and Settings › Editor
an editor font and text size for the code in the Code tab, the Review tab and
pull requests. Every font picker starts with System, the default: the
system's sans for the interface and its monospace for the terminal and the
code, which draws at 14px. The file names, paths and counts the interface
sets in monospace follow the editor font, and Onest is one of the choices. lich --no-windowstarts lich without opening its window. The sessions,
the tray and the CLI are all there; the tray's Show lich, or launching lich
again, opens the window when you want it.lich galleryopens the native UI kit gallery. It shows every primitive
of the native window in each variant and state, fully interactive, and needs
no running lich. It is not in the release packages: buildlich-gallery
fromnative/and put it besidelich, or pointLICH_GALLERYat it.
Changed
lich ragepacks the native window's log too. The bug report archive now
carrieslich-native.logand its rotated.oldbesidelich.log.
Removed
- Project run scripts and the Run card. The Run item in a checkout's
+ menu, the run command row in the New worktree dialog and
.lich/run-worktree.shsupport are gone. A Run card you already have keeps
running its command as an ordinary terminal with an entrypoint, and the file
in your repository is left alone; give a terminal the same entrypoint to keep
a dev server one click away..lich/setup-worktree.shis unchanged.
Fixed
- Files saved in ISO-8859-1 show their accents in the code view, the Review
tab and a pull request's files. A Latin-1 file, common in older Java and
XML projects, came up with�in place of every accented letter; lich now
reads it as Latin-1 for display and leaves the file as it is on disk.
Reverting one of its lines in the Review tab works too, where it used to
answer that the file had changed, and so does undoing that revert. - Apps started from a lich terminal reach D-Bus and GTK again. On
coreutils 9.x, lich read your shell's environment with the quotesenvadds
when it prints to a terminal, so every session got values like
DBUS_SESSION_BUS_ADDRESS='unix:path=…', and a notification daemon or any
GTK app launched from it failed to start. Sessions now get the values as
your shell has them. - A provider you never turned on no longer opens its login. lich read every
provider's plan usage, switched on or not, and asking a signed-out Antigravity
CLI opens its browser sign-in, so it popped up every few minutes. Plan usage
is now read only for the providers enabled in Settings › Providers. - A lich plugin installed only for one Claude Code project no longer shows
as installed. Settings and the install and update checks counted a copy
that loads only inside a single project as the plugin being there for every
session, so lich never offered to install it. Only the user-wide install
counts now. - Cursor CLI's plan usage and sandboxed sessions find your login. Without
XDG_CONFIG_HOMEset, lich looked for Cursor CLI's login in~/.cursor, but
the CLI keeps it in~/.config/cursoron Linux (%APPDATA%\Cursoron
Windows), so the plan gauge showed Cursor as signed out and a sandboxed Cursor
session opened at the login prompt.
