Skip to content

v0.68.0

Choose a tag to compare

@github-actions github-actions released this 16 Oct 13:27
· 55 commits to main since this release
f121206

lich: a terminal-first ADE for the coding agents you already use

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 native opens 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, and Shift selects over it; in a
    full-screen program that does not, such as less, the wheel moves through
    it. Ctrl+Shift+V (Cmd+V on macOS) pastes the clipboard's text, or hands
    the agent an image or file it holds; Ctrl+V attaches a clipboard image
    (Alt+V on Windows), Shift+Enter breaks the line and Ctrl+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 #123 opens 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 #123 issue, the branch to start from and whether to
    bring the checkout's uncommitted changes. When that branch is behind its
    upstream, as main is 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 in lich 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 login in 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 in lich native and make a profile per account: New
    profile
    takes a name and logs it in with Codex's own codex 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.toml settings (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 in lich native and make a profile per set
    of accounts: New profile takes a name and opens oh-my-pi's own
    omp login in 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 with omp plugin install are 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 native and 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) or XDG_CONFIG_HOME (Cursor CLI), a
    directory of links to yours in which only the provider's own folder is the
    profile's: gh, git, mise and 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.md has 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 your PATH (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 version PATH holds, with a hint to pin one; the row in the list says
    "other versions on PATH". lich doctor warns 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
    syntax section 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. See docs/themes.md.
  • A theme can follow your desktop from dark to light, in the native window.
    A theme's new optional pair names 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. See docs/themes.md.
  • lich theme list and lich theme switch <theme>, for the script that
    changes your desktop's theme to bring lich along: the native window repaints
    at once. See docs/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-window starts 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 gallery opens 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: build lich-gallery
    from native/ and put it beside lich, or point LICH_GALLERY at it.

Changed

  • lich rage packs the native window's log too. The bug report archive now
    carries lich-native.log and its rotated .old beside lich.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.sh support 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.sh is 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 quotes env adds
    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_HOME set, lich looked for Cursor CLI's login in ~/.cursor, but
    the CLI keeps it in ~/.config/cursor on Linux (%APPDATA%\Cursor on
    Windows), so the plan gauge showed Cursor as signed out and a sandboxed Cursor
    session opened at the login prompt.