Un ADE de terminal para los agentes de código que ya usas.
-
- Abre tus proyectos, corre agentes como Claude Code, Codex y opencode en
- terminales de verdad y ten git (worktrees, diffs y pull requests) a la vista
- sin salir de la ventana. Sin Electron y sin navegador: lich dibuja su propia
- ventana nativa con Gio, en Linux, Windows y macOS.
-
+ Tus agentes de código lado a lado, cada uno en su propia rama.
+ Claude Code, Codex, opencode o el agente que ya usas, cada uno en su propio worktree, todos en una sola ventana.
+
+
+
-## Por qué lich
-
-lich te permite:
-
-- **Usar el agente que ya tienes.** [Claude Code](https://www.anthropic.com/claude-code),
- [Codex](https://github.com/openai/codex), Antigravity,
- [opencode](https://github.com/sst/opencode), oh-my-pi,
- [Crush](https://github.com/charmbracelet/crush), el
- [Cursor CLI](https://cursor.com/docs/cli) y el
- [Kiro CLI](https://kiro.dev/docs/cli/) funcionan aquí todos igual. Le
- indicas a lich una sola vez dónde está cada binario y después eliges el
- predeterminado o uno distinto por sesión. Lo que lich consigue *leer* de una
- sesión depende del proveedor; el detalle está en la tabla de
- [Compatibilidad por proveedor](#compatibilidad-por-proveedor).
-- **Tener una terminal de verdad.** Shells sobre PTY, varios por proyecto,
- renderizados en la GPU, con un historial en el que puedes buscar y que
- sobrevive a cerrar y volver a abrir la ventana. Lo que un proyecto mantiene en
- marcha (un servidor de desarrollo, un túnel, un `lazydocker`) se guarda una
- vez como servicio, que arrancas, detienes y lees desde el pie de la barra
- lateral, y que puede arrancar junto con lich. El pie de ventana
- sigue cada `cd` y muestra la rama. En una sesión de Claude Code, Codex o Kiro
- CLI muestra además el modelo y la ventana de contexto en uso; con Claude Code,
- Codex, Antigravity, Cursor CLI y una suscripción de OpenCode Go, cuánto te
- queda de la ventana móvil del plan; y, si lo pides, cuánto lleva gastado la
- sesión, en los proveedores que lo registran.
-- **Poner una sesión a trabajar para otra.** Le pasas una tarea a otra tarjeta y
- el agente de esa tarjeta te devuelve la respuesta, sea cual sea el agente de
- cada lado: llega a las demás sesiones con herramientas que recibe al
- arrancar (MCP en Claude Code y Codex) o que trae el plugin. Todo eso también
- está disponible como el comando `lich` en cualquier shell, con `--json`
- incluido, así que un script puede controlar una sesión sin ningún agente de
- por medio ([`docs/cli.md`](docs/cli.md)).
-- **Seguir varias a la vez.** Pon cualquier sesión en un grupo junto a la que
- estás usando y lich acomoda los paneles por su cuenta, según cuántos sean y el
- espacio que tenga la ventana: ocho sesiones quedan en filas de cuatro en un
- monitor ultrawide y de dos en un portátil. Una sesión que delegó trabajo en
- otras arma el grupo a su alrededor con un clic. Cada grupo tiene nombre, un
- proyecto puede tener todos los que quieras, y cada uno aparece como un bloque
- en la barra lateral que puedes plegar, renombrar o deshacer.
-- **Crear un worktree sin preparar nada a mano.** Créalo a partir de cualquier
- rama base y lich le copia tus archivos `.env*` ignorados por git y le asigna un
- puerto para el servidor de desarrollo que no usa ningún otro checkout ni
- ningún proceso de la máquina. Si partes de los cambios sin commitear del
- checkout, se vienen con él, incluidos los archivos sin seguimiento.
-- **Correr una sesión aislada.** Un agente puede abrirse dentro de un sandbox del
- sistema operativo: un home nuevo y vacío, solo con el estado de ese proveedor,
- el resto de la máquina en solo lectura y permiso de escritura únicamente en el
- checkout para el que se abrió. Las claves ssh, las credenciales de la nube y
- los demás repositorios del disco simplemente no están ahí, y eso compensa
- dejar que el agente se salte las confirmaciones de permisos. En Linux usa
- bubblewrap y en macOS `sandbox-exec`; no protege frente a código malicioso, y
- [`docs/ceilings.md`](docs/ceilings.md) explica qué es lo que no frena.
-- **Revisar el diff justo donde lo lees.** Un panel de diff muestra los
- cambios del working tree junto a un árbol de archivos en vivo, pliega si se lo
- pides los que solo tocan espacios en blanco, y muestra el antes y el después de
- una imagen o un PDF modificado. Haz clic derecho sobre una selección para
- comentar esas líneas; todo el lote se pega en la sesión como un solo prompt,
- sin enviarlo. Su pestaña Código permite navegar el checkout y buscar en el
- texto de sus archivos.
-- **Llevar el pull request hasta el final sin salir de aquí.** Ve los pull
- requests abiertos del repositorio, haz checkout de uno en su propio worktree,
- lee el diff, revísalo inline y fusiónalo con los métodos que la rama base
- acepta de verdad. En una rama que todavía no tiene pull request, **Crear con el
- agente** le pide a la sesión de esa rama que lo abra, y no se envía nada hasta
- que presiones Enter.
-
-Y además: [temas](docs/themes.md) que importas como JSON o instalas desde un
-repositorio git, una paleta `Ctrl`/`Cmd`+`K` que te lleva a una sesión por su
-nombre o por algo que se dijo en la conversación, una notificación de escritorio
-cuando una sesión te está esperando, y `lich rage` / `lich doctor` para cuando
-directamente no arranca.
-
-El proyecto está en desarrollo activo: los bugs y los pedidos de funciones van a
-[Issues](https://github.com/lichdotdev/lich/issues), y lo que cambió en cada
-versión está en [CHANGELOG.md](CHANGELOG.md).
+## Funciones
+
+
+
+
+
+### Agentes lado a lado
+
+Pon las sesiones en un grupo y lich acomoda los paneles por ti. Mira de un vistazo cuál está ocupada, cuál te está esperando y cuánto contexto le queda.
+
+
+
+
+
+
+
+### Un worktree por tarea, sin preparar nada
+
+Crea una sesión a partir de cualquier rama base y lich le copia tus archivos `.env` y le asigna un puerto libre para el servidor de desarrollo. Tus cambios sin commitear pueden venir con ella.
+
+
+
+
+
+
+
+### Revisa el diff, comenta las líneas
+
+Lee lo que cambió el agente junto a su sesión, comenta las líneas que necesitan retoque y devuelve todas las notas como un solo prompt.
+
+
+
+
+
+
+
+### Pull requests sin el navegador
+
+Abre un pull request, pídele al agente de la rama que lo escriba, revísalo inline y fusiónalo, todo desde la misma ventana.
+
+
+
+
+
+
+
+### Hazlo tuyo
+
+Importa un tema como JSON o instala uno desde un repositorio git.
+
+[Docs →](docs/themes.md)
+
+
+
+
+
+
+Y además:
+
+- **Sesiones que delegan.** Un agente le pasa una tarea a otra sesión y recibe la respuesta. Lo mismo funciona desde tu shell con el comando `lich` ([docs](docs/cli.md)).
+- **Agentes en sandbox.** Deja que un agente se salte las confirmaciones de permisos dentro de un sandbox que no ve tus claves, tus credenciales ni tus otros repositorios ([límites](docs/ceilings.md)).
+- **Tus servidores de desarrollo en la barra lateral.** Guarda lo que un proyecto mantiene en marcha y arráncalo o detenlo con un clic.
+- **Encuentra lo que sea.** `Ctrl`/`Cmd`+`K` te lleva a una sesión por su nombre o por algo que se dijo en ella.
+- **Entérate cuando te necesitan.** Una notificación de escritorio cuando una sesión te está esperando.
+
+## Instalación
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
+```
+
+Una sola línea: detecta tu distro, verifica la descarga e instala lich con tu gestor de paquetes.
+
+| Plataforma | Cómo obtenerlo |
+| --- | --- |
+| **Linux** | el `install.sh` de arriba, o AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`). Necesita `zenity` y glibc 2.34 o posterior (Debian 12, Ubuntu 22.04, RHEL 9 y posteriores). |
+| **macOS** | `brew install --cask lichdotdev/tap/lich` |
+| **Windows** | instalador o zip portable de [Releases](https://github.com/lichdotdev/lich/releases), o `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` |
+
+Los binarios de macOS y Windows todavía no están firmados, así que Gatekeeper y
+SmartScreen avisan al descargar desde Releases; Homebrew evita el aviso de
+Gatekeeper. Los paquetes manuales por distro, el tarball de Linux, cómo quitar la
+marca de cuarentena y cómo actualizar desde la fórmula antigua de Homebrew están
+en [INSTALL.md](INSTALL.md).
+
+## Primeros pasos
+
+1. **Abre un proyecto.** El `+` de la barra de pestañas lista lo que cerraste
+ hace poco y abre un selector de carpetas. Apúntalo a un repositorio git.
+2. **Elige tu agente.** La primera vez que lo abres, lista los agentes que
+ encontró en tu máquina. En Ajustes › Proveedores defines el predeterminado y
+ la ruta de cada binario.
+3. **Inicia una sesión.** *Nueva sesión* abre tu agente en el proyecto. El `+` del
+ encabezado de un checkout abre cualquier agente, o una terminal sin agente,
+ en ese checkout.
+4. **Dale un worktree** *(opcional)*. Créalo a partir de cualquier rama base y
+ lich abre una sesión nueva en él.
## Compatibilidad por proveedor
-Todos los proveedores arrancan en una terminal de verdad, se reanudan por id de
-conversación, se aíslan con el mismo sandbox y reciben la misma forma de llegar
-a tus otras sesiones. Lo que cambia es lo que lich puede *leer* de cada sesión,
-porque lee lo que cada CLI deja escrito, y no hay dos que registren lo mismo.
+Todos los agentes corren en una terminal de verdad, reanudan su conversación,
+funcionan en el sandbox y llegan a tus otras sesiones. Lo que cambia de uno a
+otro es lo que lich puede *leer* de él, porque cada CLI deja escrito algo
+distinto.
+
+
+Ver qué admite cada agente
| Lo que obtienes | Claude Code | Codex | Antigravity | opencode | oh-my-pi | Crush | Cursor CLI | Kiro CLI |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -149,113 +169,59 @@ porque lee lo que cada CLI deja escrito, y no hay dos que registren lo mismo.
| Se le indica al iniciarse, en el idioma de prompt, que reparta el trabajo como sesiones de lich en vez de subagentes ocultos | sí | no | no | no | sí | no | no | no |
| La tarjeta de la sesión abre un navegador que el agente conduce, en una pestaña junto a la sesión | sí | sí | sí | la tarjeta lo abre; el agente usa `lich browser`, no las tools `browser_*` | sí | sí | sí | sí |
-Ninguna de estas diferencias es un descuido, y en ningún caso lich se guarda
-algo que el CLI informe; [`docs/ceilings.md`](docs/ceilings.md) cuenta qué se
-midió detrás de cada una.
-
-## Instalación
+
-Con una sola línea: el script detecta tu distro, verifica el checksum e instala
-el paquete nativo y sus dependencias con tu gestor de paquetes:
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
-```
-
-| Plataforma | Cómo obtenerlo | Necesita en ejecución |
-| --- | --- | --- |
-| **Linux** | el `install.sh` de arriba, o AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`) | `zenity`, además de glibc 2.34 o posterior para la ventana que viene en el paquete (Debian 12, Ubuntu 22.04, RHEL 9 y posteriores) |
-| **macOS** | `brew install --cask lichdotdev/tap/lich` | nada, la ventana viene en la app tanto en Apple Silicon como en Intel |
-| **Windows** | instalador o zip portable de [Releases](https://github.com/lichdotdev/lich/releases), o Scoop: `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` | nada, la ventana viene con cada uno |
-
-Paquetes manuales por distro, el tarball de Linux y el zip portable de Windows:
-[INSTALL.md](INSTALL.md). Los binarios de macOS y Windows no están firmados:
-Gatekeeper y SmartScreen avisan hasta que lleguen la notarización y la firma.
-Si instalas con Homebrew no ves el aviso de Gatekeeper; si descargas desde la
-página de Releases, tienes que quitarle a mano la marca de cuarentena.
-En macOS el cask instala `Lich.app`, así que lich tiene su propio icono en
-`/Applications` y en el Dock mientras se ejecuta. Actualizar desde la fórmula
-antigua requiere `brew uninstall lich` primero: [INSTALL.md](INSTALL.md) explica
-por qué.
-
-## Primeros pasos
-
-1. **Instala** y abre `lich`.
-2. **Abre un proyecto**: el `+` de la barra de pestañas lista lo que cerraste
- hace poco y abre el selector de carpetas de tu sistema operativo; apúntalo a
- un repositorio git.
-3. **Indícale a lich tu agente**: la primera vez que lo abres, lista los agentes
- que encontró en tu máquina; en Ajustes › Proveedores puedes definir la ruta de
- cada binario y elegir el predeterminado. En esa misma pantalla, cada proyecto
- puede usar ese predeterminado o elegir otro proveedor.
-4. **Inicia una sesión**: *Nueva sesión* abre una terminal con tu agente
- corriendo en el proyecto. El encabezado de cada checkout también tiene un menú
- `+` para abrir cualquier proveedor habilitado, o una terminal sin agente,
- justo en ese checkout; haz clic en el encabezado para contraer o expandir sus
- sesiones.
-5. **Crea un worktree** *(opcional)*: créalo a partir de cualquier rama base;
- lich lo prepara y te deja en una sesión nueva.
+Ninguna de estas diferencias es un descuido, y [`docs/ceilings.md`](docs/ceilings.md)
+cuenta qué se midió detrás de cada una.
## Configuración
-- **Proveedores**: en Ajustes › Proveedores defines la ruta del binario de cada
- proveedor y el predeterminado para todos los proyectos. La fila del proyecto
- abierto puede sobrescribir esa elección; **Borrar** quita esa excepción, así
- que los cambios que hagas después en el predeterminado le llegan solos. Si no
- defines ninguna ruta, la sesión ejecuta el primer binario del proveedor que
- encuentre en el `PATH` de tu login shell; el bloque
- Binario muestra qué archivo es y su versión, y lista cualquier otra versión que
- haya en el `PATH`, algo de lo que `lich doctor` también avisa. Para quedarte
- con una, pon su ruta en Binario (el ajuste `provider..bin`, p. ej.
- `provider.codex.bin`).
- La sección de cada proveedor empieza mostrando
- cuánto te queda del plan, cuando lich puede leerlo. Lo que aparece en el pie de
- ventana se elige en Ajustes › Apariencia arrastrando sus elementos; el costo
- arranca oculto, porque esa cifra solo tiene sentido si pagas por token.
-- **Worktrees**: con un archivo `.worktreeinclude` en el checkout del proyecto
- eliges qué archivos ignorados por git se copian a cada worktree nuevo.
-- **Hooks de sesión**: con el
- [plugin de lich](https://github.com/lichdotdev/lich-plugin) instalado desde
- Ajustes, cada sesión le pone título a su propia tarjeta y refresca el estado
- de git en cuanto escribe un archivo.
-- **Estabilidad**: en [docs/stability.md](docs/stability.md) está escrito en qué
- partes de lich puedes apoyarte desde un script y cuáles pueden cambiar en
- cualquier versión.
+- **Proveedores.** En Ajustes › Proveedores defines la ruta del binario de cada
+ agente y el predeterminado para todos los proyectos; un proyecto puede elegir
+ el suyo. Si no defines ninguna ruta, lich ejecuta el primer binario que
+ encuentre en el `PATH` de tu login shell, y `lich doctor` avisa cuando hay más
+ de una versión.
+- **Pie de ventana.** En Ajustes › Apariencia, arrastra sus elementos para elegir
+ qué muestra. El costo arranca oculto, porque esa cifra solo tiene sentido si
+ pagas por token.
+- **Worktrees.** Con un archivo `.worktreeinclude` en el proyecto eliges qué
+ archivos ignorados por git se copian a cada worktree nuevo.
+- **Hooks de sesión.** Instala el
+ [plugin de lich](https://github.com/lichdotdev/lich-plugin) desde Ajustes y
+ cada sesión le pone título a su propia tarjeta y refresca el estado de git en
+ cuanto escribe un archivo.
+- **Scripts.** En [docs/stability.md](docs/stability.md) está escrito en qué
+ partes de lich puedes apoyarte desde un script.
## Privacidad y actualizaciones
-Todo corre en tu máquina. Sin cuenta, sin login, sin telemetría: el backend es un
-listener en loopback autenticado con token. Por iniciativa propia, lich solo se
+Todo corre en tu máquina: sin cuenta, sin login, sin telemetría. lich solo se
conecta a la red para esto:
- **Actualizaciones**: consulta la última versión en GitHub Releases al arrancar
- y cada hora, y la lista de versiones del plugin de lich en GitHub al arrancar.
+ y cada hora, y la lista de versiones del plugin de lich al arrancar.
- **Uso del plan**: el endpoint de uso de cada proveedor (Anthropic, OpenAI,
- Cursor, OpenCode Go), con el mismo login que ya usa el CLI de la sesión, como
- mucho cada cinco minutos. El plan de Antigravity se lee del propio `agy`.
+ Cursor, OpenCode Go), con el mismo login que ya usa el agente, como mucho cada
+ cinco minutos. El plan de Antigravity se lee del propio `agy`.
- **Precios**: la tabla pública de precios de LiteLLM en GitHub, una sola vez por
cada modelo que no esté en la tabla que trae lich.
-La versión del instalador de Windows se actualiza sola; si instalaste con
-Homebrew, Scoop, AUR o un paquete de Linux, la actualización pasa por tu gestor
-de paquetes y lich te da el comando.
-Antes de que adjuntes el archivo de log a un reporte de bug, Ajustes › Ayuda te
-dice qué contiene (rutas, nombres de proyectos y de ramas, tu login de gh, nunca
-un token de sesión), y `lich rage` junta ese reporte en un solo archivo sin
-subir nada a ningún lado.
+El instalador de Windows se actualiza en el lugar; Homebrew, Scoop, AUR y los
+paquetes de Linux se actualizan con su gestor de paquetes, y lich te da el
+comando. ¿Algo no funciona? `lich doctor` revisa tu instalación y `lich rage`
+junta un reporte de bug en un solo archivo sin subir nada. Antes de que adjuntes
+el archivo de log, Ajustes › Ayuda te dice qué contiene (rutas, nombres de
+proyectos y de ramas, tu login de gh, nunca un token de sesión). Los bugs y los
+pedidos de funciones van a [Issues](https://github.com/lichdotdev/lich/issues);
+lo que cambió en cada versión está en [CHANGELOG.md](CHANGELOG.md).
## Compilar desde el código fuente
-lich son dos binarios. El backend, `lich`, es Go puro (Go 1.27, `CGO_ENABLED=0`,
-un único binario estático) y sirve las sesiones a través de un listener en
-loopback autenticado con token (RPC por HTTP + WebSockets). La ventana,
-`lich-native`, es un módulo de Go propio en `native/`, compilado con cgo:
-[Gio](https://gioui.org) la dibuja, `libghostty-vt` ejecuta sus terminales y
-[godemirror](https://github.com/lichdotdev/godemirror) sus vistas de código y de
-diff. Necesitas **Go 1.27.0+** y **[Task](https://taskfile.dev)**; la ventana
-suma un toolchain de C, los paquetes de sistema de Gio y una `libghostty-vt`
-compilada con Zig 0.16 desde el commit de Ghostty en `native/GHOSTTY_COMMIT`.
-[`native/slice.sh`](native/slice.sh) explica cómo compilarla, y
+lich son dos binarios: `lich`, un backend estático en Go puro, y `lich-native`,
+la ventana, compilada con cgo desde `native/`. Necesitas **Go 1.27.0+** y
+**[Task](https://taskfile.dev)**; la ventana suma un toolchain de C, los
+paquetes de sistema de Gio y una `libghostty-vt` compilada desde el commit en
+`native/GHOSTTY_COMMIT`. [`native/slice.sh`](native/slice.sh) explica cómo, y
[`docs/native-window.md`](docs/native-window.md) describe la ventana.
```bash
@@ -263,18 +229,11 @@ task build # binario del backend -> bin/lich
task build:native # ventana -> bin/lich-native
task run # compila + ejecuta
task test # suites de Go
+task package # .deb + .rpm + Arch .pkg.tar.zst en bin/ (requiere nfpm)
```
-Para empaquetar una versión de Linux en local (requiere
-[nfpm](https://nfpm.goreleaser.com/)):
-
-```bash
-task package # .deb + .rpm + Arch .pkg.tar.zst in bin/
-```
-
-Sumar otro CLI de agente a los ocho que ya corre lich es un cambio que toca una
-docena de archivos repartidos en dos repositorios; el mapa está en
-[`docs/adding-a-provider.md`](docs/adding-a-provider.md).
+Sumar otro agente toca una docena de archivos repartidos en dos repositorios:
+[`docs/adding-a-provider.md`](docs/adding-a-provider.md) es el mapa.
## Patrocinadores
diff --git a/README.ja.md b/README.ja.md
index bef67d470..13b82bb78 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -2,97 +2,124 @@
- 프로젝트를 열고, Claude Code, Codex, opencode 같은 에이전트를 실제 터미널에서
- 실행하고, worktree와 diff, 풀 리퀘스트까지 git 작업을 창을 벗어나지 않고 한눈에
- 볼 수 있습니다. Electron도 브라우저도 쓰지 않습니다. Linux, Windows, macOS 모두에서
- lich는 Gio로 직접 그리는 네이티브 창으로 열립니다.
-
-
+
-> 이 문서는 영문 [README.md](README.md)를 번역한 것입니다. 기준은 영문판이며, 두 문서의 내용이 다르면 영문판을 따릅니다.
-
-## 왜 lich인가
-
-lich로 할 수 있는 일:
-
-- **이미 쓰고 있는 에이전트를 그대로 실행합니다.** [Claude Code](https://www.anthropic.com/claude-code),
- [Codex](https://github.com/openai/codex), Antigravity,
- [opencode](https://github.com/sst/opencode), oh-my-pi,
- [Crush](https://github.com/charmbracelet/crush),
- [Cursor CLI](https://cursor.com/docs/cli),
- [Kiro CLI](https://kiro.dev/docs/cli/) 모두 같은 방식으로 실행됩니다. 바이너리 경로를
- 한 번씩만 지정해 두면 기본값을 쓰거나 세션마다 골라 쓸 수 있습니다. 세션에서 lich가
- *읽어 올* 수 있는 정보는 프로바이더마다 다르며,
- [프로바이더 지원](#프로바이더-지원) 표에 정리해 두었습니다.
-- **실제 터미널을 그대로 씁니다.** 프로젝트마다 PTY 기반 셸을 여러 개 띄울 수 있고,
- 렌더링은 GPU가 맡습니다. 스크롤백은 검색할 수 있고 창을 닫았다가 다시 열어도
- 사라지지 않습니다. 개발 서버, 터널, `lazydocker`처럼 프로젝트에서 계속 띄워 두는
- 것은 한 번 서비스로 저장해 두면 사이드바 아래에서 시작하고 멈추고 출력을 볼 수
- 있으며, lich와 함께 시작되게 할 수도 있습니다. 하단 바는 `cd`를 따라가며 브랜치를 보여 줍니다.
- Claude Code, Codex, Kiro CLI 세션이라면 사용 중인 모델과 컨텍스트 윈도우를, Claude
- Code, Codex, Antigravity, Cursor CLI와 OpenCode Go 구독이라면 플랜의 롤링 윈도우가
- 얼마나 남았는지를 보여 주고, 원하면 세션에서 쓴 비용도 표시합니다(비용을 기록하는
- 프로바이더만 해당).
-- **한 세션에 다른 세션의 일을 맡깁니다.** 다른 카드에 작업을 넘기면 양쪽에서 무엇이
- 돌고 있든 그 카드의 에이전트가 직접 답을 써서 돌려줍니다. 에이전트는 세션을 시작할 때
- 받은 도구(Claude Code와 Codex는 MCP)나 플러그인이 제공하는 도구로 다른 세션에
- 접근합니다. 이 기능은 전부 어느 셸에서나 `lich` 명령으로도 쓸 수 있고 `--json`도
- 지원하므로, 에이전트 없이 스크립트만으로 세션을 조작할 수 있습니다([`docs/cli.md`](docs/cli.md)).
-- **여러 세션을 한꺼번에 지켜봅니다.** 지금 보고 있는 세션 옆 분할 화면에 어떤 세션이든
- 올려 두면 패널 수와 창 크기에 맞춰 lich가 알아서 배치합니다. 세션 8개라면 울트라와이드
- 모니터에서는 한 줄에 4개씩, 노트북에서는 2개씩 놓입니다. 다른 세션에 일을 넘긴 세션은
- 클릭 한 번으로 자신을 중심으로 분할 화면을 구성합니다. 분할 화면마다 이름이 붙고,
- 프로젝트 하나에 원하는 만큼 둘 수 있으며, 사이드바에 생기는 블록에서 접거나 이름을
- 바꾸거나 해체할 수 있습니다.
-- **번거로운 설정 없이 worktree를 만듭니다.** 원하는 베이스 브랜치에서 worktree를 만들면
- lich가 gitignore된 `.env*` 파일을 채워 넣고, 다른 체크아웃도 머신의 다른 프로세스도
- 쓰지 않는 개발 서버 포트를 배정합니다. 체크아웃의 커밋하지 않은 작업에서 시작하면 untracked 파일을
- 포함한 변경 사항도 함께 옮겨 갑니다.
-- **세션을 격리해서 실행합니다.** 에이전트를 OS 샌드박스 안에서 열 수 있습니다. 해당
- 프로바이더의 상태만 담긴 빈 홈 디렉터리가 새로 주어지고, 머신의 나머지 부분은 읽기
- 전용이며, 쓰기는 세션을 연 체크아웃에만 허용됩니다. ssh 키, 클라우드 자격 증명,
- 디스크에 있는 다른 저장소는 샌드박스 안에서 아예 보이지 않습니다. 에이전트가 권한
- 확인을 건너뛰도록 허용할 때 위험을 상쇄해 주는 장치입니다. Linux에서는 bubblewrap,
- macOS에서는 `sandbox-exec`를 씁니다. 악성 코드를 막아 주는 보안 경계는 아니며, 무엇을
- 막지 못하는지는 [`docs/ceilings.md`](docs/ceilings.md)에 정리되어 있습니다.
-- **diff를 읽는 바로 그 자리에서 리뷰합니다.** diff 독이 작업 중인 변경 사항을
- 실시간 파일 트리 옆에 보여 줍니다. 원하면 공백만 바뀐 변경은 접어 두고, 바뀐 이미지나
- PDF는 변경 전후를 함께 보여 줍니다. 선택 영역을 우클릭하면 해당 줄에 코멘트를 달 수
- 있고, 모아 둔 코멘트는 프롬프트 하나로 묶여 세션에 붙여 넣어지며 전송되지는 않습니다.
- 코드 탭에서는 체크아웃을 둘러보고 파일 내용을 검색할 수 있습니다.
-- **풀 리퀘스트까지 여기서 끝냅니다.** 저장소의 열린 풀 리퀘스트 목록을 보고, 그중 하나를
- 별도의 worktree에 체크아웃해 diff를 읽고, 인라인으로 리뷰하고, 베이스 브랜치가 실제로
- 허용하는 방식으로 병합합니다. 아직 풀 리퀘스트가 없는 브랜치에서는 **에이전트로
- 만들기**를 누르면 그 브랜치의 세션에 PR을 열어 달라고 요청하며, Enter를 누르기 전에는
- 아무것도 전송되지 않습니다.
-
-그 밖에도 JSON으로 가져오거나 git 저장소에서 설치하는 [테마](docs/themes.md), 세션 이름이나
-대화 내용으로 바로 이동하는 `Ctrl`/`Cmd`+`K` 팔레트, 세션이 내 응답을 기다릴 때 뜨는 데스크톱
-알림, lich가 아예 시작되지 않을 때 쓰는 `lich rage` / `lich doctor`가 있습니다.
-
-현재 활발하게 개발하고 있습니다. 버그와 기능 요청은
-[이슈](https://github.com/lichdotdev/lich/issues)에 남겨 주세요. 버전별 변경 사항은
-[CHANGELOG.md](CHANGELOG.md)에서 볼 수 있습니다.
+## 주요 기능
+
+
+
+
+
+### 에이전트를 나란히
+
+세션을 분할 화면에 올려 두면 lich가 패널을 알아서 배치합니다. 어느 세션이 작업 중인지, 어느 세션이 내 응답을 기다리는지, 컨텍스트가 얼마나 남았는지 한눈에 보입니다.
+
+
+
+
+
+
+
+### 설정 없이 작업마다 worktree
+
+원하는 베이스에서 세션을 분기하면 lich가 `.env` 파일을 복사하고 비어 있는 개발 서버 포트를 배정합니다. 커밋하지 않은 작업도 함께 가져갈 수 있습니다.
+
+
+
+
+
+
+
+### diff를 읽고, 줄마다 코멘트
+
+에이전트가 바꾼 내용을 세션 옆에서 읽고, 손볼 줄에 코멘트를 달고, 모아 둔 코멘트를 프롬프트 하나로 세션에 돌려보냅니다.
+
+
+
+
+
+
+
+### 브라우저 없이 풀 리퀘스트
+
+풀 리퀘스트를 열고, 그 브랜치의 에이전트에게 작성을 맡기고, 인라인으로 리뷰하고, 병합까지 한 창에서 끝냅니다.
+
+
+
+그 밖에도:
+
+- **일을 넘기는 세션.** 한 에이전트가 다른 세션에 작업을 넘기고 답을 돌려받습니다. 셸에서도 `lich` 명령으로 똑같이 쓸 수 있습니다([문서](docs/cli.md)).
+- **샌드박스 에이전트.** 키, 자격 증명, 다른 저장소가 보이지 않는 샌드박스 안에서 에이전트가 권한 확인을 건너뛰도록 허용할 수 있습니다([한계](docs/ceilings.md)).
+- **개발 서버를 사이드바에.** 프로젝트에서 계속 띄워 두는 것을 저장해 두면 클릭 한 번으로 시작하고 멈출 수 있습니다.
+- **뭐든 바로 찾기.** `Ctrl`/`Cmd`+`K`로 세션 이름이나 세션에서 오간 내용으로 바로 이동합니다.
+- **내가 필요할 때 알림.** 세션이 내 응답을 기다리면 데스크톱 알림이 뜹니다.
+
+## 설치
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
+```
+
+한 줄이면 됩니다. 배포판을 감지하고 다운로드를 검증한 다음, 패키지 매니저로 lich를 설치합니다.
+
+| 플랫폼 | 설치 방법 |
+| --- | --- |
+| **Linux** | 위의 `install.sh` 또는 AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`). `zenity`와 glibc 2.34 이상(Debian 12, Ubuntu 22.04, RHEL 9 이상)이 필요합니다. |
+| **macOS** | `brew install --cask lichdotdev/tap/lich` |
+| **Windows** | [Releases](https://github.com/lichdotdev/lich/releases)의 설치 프로그램이나 포터블 zip, 또는 `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` |
+
+macOS와 Windows 빌드는 아직 서명되지 않아, Releases에서 받은 파일에는 Gatekeeper와
+SmartScreen이 경고를 띄웁니다. Homebrew로 설치하면 Gatekeeper 경고는 뜨지 않습니다.
+배포판별 패키지, Linux tarball, quarantine 플래그 지우기, 예전 Homebrew formula에서
+업그레이드하는 방법은 [INSTALL.md](INSTALL.md)에 있습니다.
+
+## 시작하기
+
+1. **프로젝트를 엽니다.** 탭 줄의 `+`를 누르면 최근에 닫은 항목이 나오고 폴더 선택기가
+ 열립니다. 여기서 git 저장소를 고르세요.
+2. **에이전트를 고릅니다.** 처음 실행하면 머신에서 찾은 에이전트 목록이 나옵니다.
+ 설정 › 프로바이더에서 기본값과 바이너리 경로를 지정할 수 있습니다.
+3. **세션을 시작합니다.** *새 세션*을 누르면 프로젝트에서 에이전트가 열립니다. 체크아웃
+ 헤더의 `+`로는 원하는 에이전트나 일반 터미널을 바로 그 체크아웃에서 열 수 있습니다.
+4. **worktree를 만듭니다** *(선택)*. 원하는 베이스 브랜치에서 하나 만들면 lich가 그 안에
+ 새 세션을 열어 줍니다.
## 프로바이더 지원
-모든 프로바이더는 실제 터미널에서 실행되고, 대화 id로 재개되며, 같은 샌드박스로 격리되고,
-다른 세션에 접근하는 방법도 똑같이 제공받습니다. 차이는 lich가 세션에서 *읽어 올* 수 있는
-정보에 있습니다. lich는 각 CLI가 기록하는 내용을 읽는데, 기록하는 내용이 똑같은 CLI는 하나도
-없기 때문입니다.
+모든 에이전트는 실제 터미널에서 실행되고, 대화를 재개할 수 있으며, 샌드박스 안에서 동작하고,
+다른 세션에 접근할 수 있습니다. 에이전트마다 다른 것은 lich가 세션에서 *읽어 올* 수 있는
+정보입니다. CLI마다 기록하는 내용이 다르기 때문입니다.
+
+
+에이전트별 지원 기능 보기
| 기능 | Claude Code | Codex | Antigravity | opencode | oh-my-pi | Crush | Cursor CLI | Kiro CLI |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -138,95 +165,54 @@ lich로 할 수 있는 일:
| 세션을 시작할 때 숨은 서브에이전트 대신 lich 세션으로 작업을 나누라는 안내를 프롬프트 언어로 받음 | 예 | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 아니요 | 아니요 |
| 세션 카드가 에이전트가 조작하는 브라우저를 세션 옆 탭에 연다 | 예 | 예 | 예 | 카드는 연다. 에이전트는 `browser_*`가 아니라 `lich browser`를 쓴다 | 예 | 예 | 예 | 예 |
-빈칸은 모두 의도된 것이며, CLI가 보고하는 정보를 lich가 숨기는 경우는 없습니다. 빈칸마다
-무엇을 측정했는지는 [`docs/ceilings.md`](docs/ceilings.md)에 정리되어 있습니다.
-
-## 설치
-
-한 줄이면 됩니다. 배포판을 감지하고 체크섬을 검증한 다음, 패키지 매니저로 네이티브 패키지와
-의존성을 설치합니다.
+
-```bash
-curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
-```
-
-| 플랫폼 | 설치 방법 | 실행에 필요한 것 |
-| --- | --- | --- |
-| **Linux** | 위의 `install.sh` 또는 AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`) | `zenity`, 그리고 패키지에 포함된 창을 실행하려면 glibc 2.34 이상(Debian 12, Ubuntu 22.04, RHEL 9 이상) |
-| **macOS** | `brew install --cask lichdotdev/tap/lich` | 없음. Apple Silicon과 Intel 모두 창이 앱에 포함되어 있음 |
-| **Windows** | [Releases](https://github.com/lichdotdev/lich/releases)의 설치 프로그램이나 포터블 zip, 또는 Scoop: `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` | 없음. 어느 쪽이든 창이 포함되어 있음 |
-
-배포판별 수동 설치 패키지, Linux tarball, Windows 포터블 zip은 [INSTALL.md](INSTALL.md)를
-참고하세요. macOS와 Windows 바이너리는 서명되지 않았기 때문에, 공증과 서명이 적용될 때까지
-Gatekeeper와 SmartScreen이 경고를 띄웁니다. Homebrew로 설치하면 Gatekeeper 경고가 뜨지
-않지만, Releases 페이지에서 받은 파일은 quarantine 플래그를 직접 지워야 합니다.
-macOS에서는 cask가 `Lich.app`을 설치하므로 `/Applications`에 lich 아이콘이 생기고, 실행
-중에는 Dock에도 표시됩니다. 예전 formula에서 업그레이드하려면 먼저 `brew uninstall lich`를
-실행해야 하며, 그 이유는 [INSTALL.md](INSTALL.md)에 있습니다.
-
-## 시작하기
-
-1. **설치**한 다음 `lich`를 실행합니다.
-2. **프로젝트를 엽니다.** 탭 줄의 `+`를 누르면 최근에 닫은 항목이 나오고 OS 폴더 선택기가
- 열립니다. 여기서 git 저장소를 고르세요.
-3. **에이전트를 지정합니다.** 처음 실행하면 머신에서 찾은 에이전트 목록이 나옵니다.
- 설정 › 프로바이더에서 바이너리 경로를 각각 지정하고 기본값을 고를 수 있습니다.
- 프로젝트마다 같은 화면에서 기본값을 따를지, 다른 프로바이더를 쓸지 정할 수 있습니다.
-4. **세션을 시작합니다.** *새 세션*을 누르면 프로젝트에서 에이전트를 실행하는 터미널이
- 열립니다. 체크아웃 헤더마다 `+` 메뉴도 있어서, 활성화된 프로바이더나 일반 터미널을 바로
- 그 체크아웃에서 열 수 있습니다. 헤더 자체를 클릭하면 그 체크아웃의 세션을 접거나 펼칩니다.
-5. **worktree를 만듭니다** *(선택)*. 원하는 베이스 브랜치에서 하나 만들면 lich가 필요한
- 파일을 채워 넣고 새 세션으로 바로 연결해 줍니다.
+빈칸은 모두 의도된 것이며, 각각 무엇을 측정했는지는
+[`docs/ceilings.md`](docs/ceilings.md)에 정리되어 있습니다.
## 설정
-- **프로바이더**: 설정 › 프로바이더에서 프로바이더별 바이너리 경로와 모든 프로젝트에 적용할
- 기본값을 지정합니다. 같은 화면의 현재 프로젝트 행에서 이 선택을 덮어쓸 수 있고, **지우기**를
- 누르면 덮어쓴 값이 사라져 이후 기본값을 바꾸면 자동으로 반영됩니다. 경로를 지정하지 않으면
- 세션은 로그인 셸의 `PATH`에서 가장 먼저 찾은 프로바이더 바이너리를 실행합니다.
- 바이너리 블록에 그 파일과 버전이 표시되고 `PATH`에 있는 다른 버전도 함께
- 나열되며, `lich doctor`도 이를 경고합니다. 특정 바이너리를 쓰려면 바이너리 블록에서 경로를
- 지정하세요(설정 키는 `provider..bin`, 예: `provider.codex.bin`).
- lich가 플랜 정보를 읽을 수 있으면 프로바이더 섹션 맨 위에 남은 플랜 사용량이 표시됩니다.
- 하단 바에 표시할 항목은 설정 › 모양에서 끌어다 놓아 정합니다. 비용은 토큰당 과금될 때만
- 의미가 있으므로 처음에는 숨겨져 있습니다.
-- **worktree**: 어떤 gitignore된 파일을 새 worktree에 복사할지는 프로젝트 체크아웃의
- `.worktreeinclude` 파일로 조정합니다.
-- **세션 훅**: 설정에서
- [lich 플러그인](https://github.com/lichdotdev/lich-plugin)을 설치하면 세션이 자기 카드의
- 제목을 직접 정하고, 파일을 쓰는 즉시 git 상태를 새로 고칩니다.
-- **안정성**: lich에서 스크립트로 안심하고 다뤄도 되는 부분과 릴리스마다 바뀔 수 있는 부분은
+- **프로바이더.** 설정 › 프로바이더에서 에이전트별 바이너리 경로와 모든 프로젝트에 적용할
+ 기본값을 지정하며, 프로젝트마다 따로 고를 수도 있습니다. 경로를 지정하지 않으면 lich는
+ 로그인 셸의 `PATH`에서 가장 먼저 찾은 바이너리를 실행하고, 버전이 둘 이상이면
+ `lich doctor`가 경고합니다.
+- **하단 바.** 설정 › 모양에서 항목을 끌어다 놓아 무엇을 표시할지 정합니다. 비용은 토큰당
+ 과금될 때만 의미가 있으므로 처음에는 숨겨져 있습니다.
+- **worktree.** 프로젝트의 `.worktreeinclude` 파일로 gitignore된 파일 중 어느 것을 새
+ worktree에 복사할지 정합니다.
+- **세션 훅.** 설정에서 [lich 플러그인](https://github.com/lichdotdev/lich-plugin)을
+ 설치하면 세션이 자기 카드의 제목을 직접 정하고, 파일을 쓰는 즉시 git 상태를 새로 고칩니다.
+- **스크립팅.** lich에서 스크립트로 안심하고 다뤄도 되는 부분은
[docs/stability.md](docs/stability.md)에 정리되어 있습니다.
## 개인 정보와 업데이트
-모든 것이 내 머신에서 실행됩니다. 계정도, 로그인도, 텔레메트리도 없으며, 백엔드는 토큰으로
-인증하는 loopback 리스너입니다. lich가 스스로 네트워크에 접속하는 경우는 아래가 전부입니다.
+모든 것이 내 머신에서 실행됩니다. 계정도, 로그인도, 텔레메트리도 없습니다. lich가 네트워크에
+접속하는 경우는 아래가 전부입니다.
-- **업데이트**: 시작할 때와 매시간 GitHub Releases에서 새 버전을 확인하고, 시작할 때 GitHub에서
- lich 플러그인 릴리스 목록을 확인합니다.
+- **업데이트**: 시작할 때와 매시간 GitHub Releases에서 새 버전을 확인하고, 시작할 때 lich
+ 플러그인의 릴리스 목록을 확인합니다.
- **플랜 사용량**: 각 프로바이더의 사용량 엔드포인트(Anthropic, OpenAI, Cursor, OpenCode Go)에
- 세션의 CLI가 이미 쓰고 있는 로그인 정보로 접속하며, 최대 5분에 한 번입니다. Antigravity의
+ 에이전트가 이미 쓰고 있는 로그인 정보로 접속하며, 최대 5분에 한 번입니다. Antigravity의
플랜은 `agy`에서 직접 읽습니다.
- **가격**: 번들된 가격표에 없는 모델이 있을 때 한 번, GitHub에 공개된 LiteLLM 가격표를
받아 옵니다.
Windows 설치 프로그램으로 설치한 빌드는 lich가 직접 업데이트합니다. Homebrew, Scoop, AUR,
Linux 패키지로 설치했다면 해당 패키지 매니저로 업데이트하며, 실행할 명령은 lich가 알려 줍니다.
-버그 리포트에 로그 파일을 첨부하기 전에 설정 › 도움말에서 로그에 무엇이 담기는지(경로,
-프로젝트와 브랜치 이름, gh 로그인 계정이며 세션 토큰은 절대 담기지 않음) 확인할 수 있고,
-`lich rage`는 아무것도 업로드하지 않고 리포트를 아카이브 하나로 모아 줍니다.
+문제가 생겼다면 `lich doctor`가 설정을 점검하고, `lich rage`는 아무것도 업로드하지 않고
+버그 리포트를 아카이브 하나로 모아 줍니다. 로그 파일을 첨부하기 전에 설정 › 도움말에서 로그에
+무엇이 담기는지(경로, 프로젝트와 브랜치 이름, gh 로그인 계정이며 세션 토큰은 절대 담기지 않음)
+확인할 수 있습니다. 버그와 기능 요청은 [이슈](https://github.com/lichdotdev/lich/issues)에
+남겨 주세요. 버전별 변경 사항은 [CHANGELOG.md](CHANGELOG.md)에서 볼 수 있습니다.
## 소스에서 빌드
-lich는 바이너리 두 개로 이루어집니다. 백엔드 `lich`는 순수 Go(Go 1.27, `CGO_ENABLED=0`,
-정적 바이너리 하나)이며, 토큰으로 인증하는 loopback 리스너(HTTP RPC + WebSockets)로 세션을
-서빙합니다. 창 `lich-native`는 `native/`에 있는 별도의 Go 모듈로, cgo로 빌드합니다. 창은
-[Gio](https://gioui.org)가 그리고, 터미널은 `libghostty-vt`가, 코드와 diff 화면은
-[godemirror](https://github.com/lichdotdev/godemirror)가 맡습니다. 필요한 것은 **Go 1.27.0+**와
+lich는 바이너리 두 개로 이루어집니다. 백엔드 `lich`는 정적 순수 Go 바이너리이고, 창
+`lich-native`는 `native/`에서 cgo로 빌드합니다. 필요한 것은 **Go 1.27.0+**와
**[Task](https://taskfile.dev)**이며, 창을 빌드하려면 C 툴체인과 Gio의 시스템 패키지, 그리고
-`native/GHOSTTY_COMMIT`에 적힌 Ghostty 커밋에서 Zig 0.16으로 빌드한 `libghostty-vt`가 추가로
-필요합니다. 빌드 방법은 [`native/slice.sh`](native/slice.sh)에, 창에 대한 설명은
+`native/GHOSTTY_COMMIT`에 적힌 커밋에서 빌드한 `libghostty-vt`가 추가로 필요합니다.
+빌드 방법은 [`native/slice.sh`](native/slice.sh)에, 창에 대한 설명은
[`docs/native-window.md`](docs/native-window.md)에 있습니다.
```bash
@@ -234,18 +220,11 @@ task build # 백엔드 바이너리 -> bin/lich
task build:native # 창 -> bin/lich-native
task run # 빌드 + 실행
task test # Go 테스트 스위트
+task package # bin/에 .deb + .rpm + Arch .pkg.tar.zst (nfpm 필요)
```
-Linux 릴리스를 로컬에서 패키징하려면
-[nfpm](https://nfpm.goreleaser.com/)이 필요합니다.
-
-```bash
-task package # bin/에 .deb + .rpm + Arch .pkg.tar.zst
-```
-
-lich가 실행하는 에이전트 CLI 8종에 하나를 더 추가하려면 두 저장소에 걸쳐 파일 십여 개를
-고쳐야 하며, 이만큼 손이 가는 변경은 이것 하나뿐입니다. 어디를 고쳐야 하는지는
-[`docs/adding-a-provider.md`](docs/adding-a-provider.md)에 정리되어 있습니다.
+에이전트를 하나 더 추가하려면 두 저장소에 걸쳐 파일 십여 개를 고쳐야 합니다.
+어디를 고쳐야 하는지는 [`docs/adding-a-provider.md`](docs/adding-a-provider.md)에 정리되어 있습니다.
## 후원
diff --git a/README.md b/README.md
index de2c92aeb..b9fc105f6 100644
--- a/README.md
+++ b/README.md
@@ -2,100 +2,124 @@
A terminal-first ADE for the coding agents you already use.
-
- Open your projects, run agents like Claude Code, Codex and opencode in real
- terminals, and keep git — worktrees, diffs and pull requests — in view
- without leaving the window. No Electron and no browser: lich draws its own
- native window with Gio, on Linux, Windows and macOS.
-
+ Run your coding agents side by side, each on its own branch.
+ Claude Code, Codex, opencode or the agent you already use, each in its own worktree, all in one window.
+
-
+
-## Why lich
-
-lich lets you:
-
-- **Run the agent you already have.** [Claude Code](https://www.anthropic.com/claude-code),
- [Codex](https://github.com/openai/codex), Antigravity,
- [opencode](https://github.com/sst/opencode), oh-my-pi,
- [Crush](https://github.com/charmbracelet/crush), the
- [Cursor CLI](https://cursor.com/docs/cli) and the
- [Kiro CLI](https://kiro.dev/docs/cli/) all run here the same way. Point lich
- at each binary once, then pick the default or choose per session. What lich
- can read back *out* of a session differs by provider, and
- [Provider support](#provider-support) is the table.
-- **Keep a real terminal.** PTY-backed shells, several per project, rendered on
- the GPU, with searchable scrollback that survives closing and reopening the
- window. What a project keeps running, a dev server, a tunnel, a `lazydocker`,
- is saved once as a service and started, stopped and read from the bottom of
- the sidebar, and it can start with lich. The footer follows `cd` and names the branch — and, for a
- Claude Code, Codex or Kiro CLI session, the model and the context window in
- use; for Claude Code, Codex, Antigravity, Cursor CLI and an OpenCode Go
- subscription, how much of your plan's rolling window is left; if you ask, what
- the session has spent, on the providers that record it.
-- **Put one session to work for another.** Hand a task to another card and its
- own agent writes the answer back, whatever runs in either end: the agent
- reaches the other sessions through tools handed at spawn — MCP for Claude
- Code and Codex — or brought by the plugin. The whole surface doubles as the
- `lich` command in any shell, `--json` included, so a script can drive a
- session with no agent in the loop ([`docs/cli.md`](docs/cli.md)).
-- **Watch several of them at once.** Put any session on a wall beside the one
- you are in and lich lays the panes out itself, from how many there are and how
- much room the window has — eight land four across on an ultrawide and two
- across on a laptop. A session that handed work to others builds the wall around
- it in one click. Each wall is named, a project keeps as many as you like, and
- each gets a block in the sidebar you can fold, rename or take apart.
-- **Branch off a worktree without the setup.** Spin one up from any base
- branch and lich seeds it with your gitignored `.env*` files and hands it a
- dev-server port no other checkout and no process on the machine is using.
- Start it from the
- checkout's uncommitted work and those changes come along, untracked files
- included.
-- **Run a session confined.** An agent can open inside an OS sandbox: a fresh
- empty home holding only that provider's own state, the rest of the machine
- read-only, and write access to the checkout it was opened for. Your ssh keys,
- your cloud credentials and every other repository on the disk are simply not
- there — the counterweight to letting an agent skip permission prompts. Linux
- runs bubblewrap and macOS `sandbox-exec`; it is not a boundary against hostile
- code, and [`docs/ceilings.md`](docs/ceilings.md) says what it does not stop.
-- **Review the diff where you read it.** A diff dock shows the working
- changes beside a live file tree, folds the ones that only moved whitespace when
- you ask it to, and shows a changed image or PDF before and after. Right-click a
- selection to comment against those lines; the batch is pasted into the session
- as a single prompt, unsent. Its Code tab browses the checkout and searches the
- text of its files.
-- **Ship the pull request from here.** List the repository's open pull requests,
- check one out into a worktree of its own, then read the diff, review it inline
- and merge it — with the methods the base branch actually accepts. On a branch
- with no pull request yet, **Create with agent** asks that branch's session to
- open one, and nothing is sent until you press Enter.
-
-Plus: [themes](docs/themes.md) you import as JSON or install from a git
-repository, a `Ctrl`/`Cmd`+`K` palette that jumps by name or by what was said in
-the conversation, a desktop notification when a session is waiting on you, and
-`lich rage` / `lich doctor` for when it will not start at all.
-
-Development is active: bugs and feature requests belong in
-[Issues](https://github.com/lichdotdev/lich/issues), and what changed in each
-version is in [CHANGELOG.md](CHANGELOG.md).
+## Features
+
+
+
+
+
+### Agents side by side
+
+Put sessions on a wall and lich lays out the panes for you. See at a glance which one is busy, which one is waiting on you and how much context it has left.
+
+
+
+
+
+
+
+### A worktree per task, no setup
+
+Branch a session off any base and lich copies your `.env` files and gives it a free dev-server port. Your uncommitted work can come along.
+
+
+
+
+
+
+
+### Review the diff, comment the lines
+
+Read what the agent changed next to its session, comment on the lines that need work and send every note back as one prompt.
+
+
+
+
+
+
+
+### Pull requests without the browser
+
+Open a pull request, ask the branch's agent to write it, review it inline and merge it, all from the same window.
+
+
+
+
+
+
+
+### Make it yours
+
+Import a theme as JSON or install one from a git repository.
+
+[Docs →](docs/themes.md)
+
+
+
+
+
+
+And also:
+
+- **Sessions that delegate.** One agent hands a task to another session and gets the answer back. The same works from your shell with the `lich` command ([docs](docs/cli.md)).
+- **Sandboxed agents.** Let an agent skip permission prompts inside a sandbox that can't see your keys, your credentials or your other repositories ([limits](docs/ceilings.md)).
+- **Your dev servers in the sidebar.** Save what a project keeps running and start or stop it with one click.
+- **Find anything.** `Ctrl`/`Cmd`+`K` jumps to a session by name or by something said in it.
+- **Know when you're needed.** A desktop notification when a session is waiting on you.
+
+## Install
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
+```
+
+One line: it detects your distro, checks the download and installs lich with your package manager.
+
+| Platform | Get it |
+| --- | --- |
+| **Linux** | `install.sh` above, or AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`). Needs `zenity` and glibc 2.34 or newer (Debian 12, Ubuntu 22.04, RHEL 9 and up). |
+| **macOS** | `brew install --cask lichdotdev/tap/lich` |
+| **Windows** | Installer or portable zip from [Releases](https://github.com/lichdotdev/lich/releases), or `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` |
+
+The macOS and Windows builds are not signed yet, so Gatekeeper and SmartScreen
+warn on a download from Releases; Homebrew skips the Gatekeeper prompt.
+Per-distro packages, the Linux tarball, clearing the quarantine flag and
+upgrading from the old Homebrew formula are in [INSTALL.md](INSTALL.md).
+
+## Getting started
+
+1. **Open a project.** The `+` in the tab strip lists what you closed recently
+ and opens a folder picker. Point it at a git repository.
+2. **Pick your agent.** The first launch lists the agents it found on your
+ machine. Settings › Providers sets the default and each binary's path.
+3. **Start a session.** *New Session* opens your agent in the project. The `+`
+ on a checkout's header opens any agent, or a plain terminal, in that checkout.
+4. **Give it a worktree** *(optional)*. Create one from any base branch and lich
+ opens a fresh session in it.
## Provider support
-Every provider is spawned in a real terminal, resumed by conversation id,
-confined by the same sandbox and handed the same way of reaching your other
-sessions. What differs is what lich can *read* back out of a session, because it
-reads what each CLI writes down and no two of them write down the same things.
+Every agent runs in a real terminal, resumes its conversation, works in the
+sandbox and reaches your other sessions. What changes from one to another is
+what lich can read back out of it, since each CLI records different things.
+
+
+See what each agent supports
| What you get | Claude Code | Codex | Antigravity | opencode | oh-my-pi | Crush | Cursor CLI | Kiro CLI |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -141,121 +165,67 @@ reads what each CLI writes down and no two of them write down the same things.
| Told at spawn, in the prompt language, to fan work out as lich sessions rather than hidden subagents | yes | no | no | no | yes | no | no | no |
| The session card opens a browser its agent drives, in a tab beside the session | yes | yes | yes | the card opens it; the agent uses `lich browser`, not `browser_*` | yes | yes | yes | yes |
-Every gap is deliberate, none of them is lich withholding something the CLI
-reports, and [`docs/ceilings.md`](docs/ceilings.md) says what was measured behind
-each one.
-
-## Install
-
-One line — detects your distro, verifies the checksum, and installs the native
-package and its dependencies through your package manager:
+
-```bash
-curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
-```
-
-| Platform | Get it | Needs at runtime |
-| --- | --- | --- |
-| **Linux** | `install.sh` above, or AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`) | `zenity`, plus glibc 2.34 or newer for the window that ships in the package (Debian 12, Ubuntu 22.04, RHEL 9 and up) |
-| **macOS** | `brew install --cask lichdotdev/tap/lich` | nothing, the window ships in the app on Apple Silicon and Intel alike |
-| **Windows** | installer or portable zip from [Releases](https://github.com/lichdotdev/lich/releases), or Scoop: `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` | nothing, the window ships with each |
-
-Manual per-distro packages, the Linux tarball and the Windows portable zip: [INSTALL.md](INSTALL.md). The
-macOS and Windows binaries are unsigned — Gatekeeper and SmartScreen warn until
-notarization/signing ship. Homebrew installs sidestep the Gatekeeper prompt;
-a download from the Releases page needs its quarantine flag cleared by hand.
-On macOS the cask installs `Lich.app`, so lich has its own icon in
-`/Applications` and in the Dock while it runs. Upgrading from the old formula
-needs `brew uninstall lich` first — [INSTALL.md](INSTALL.md) says why.
-
-## Getting started
-
-1. **Install** and launch `lich`.
-2. **Open a project** — the `+` in the tab strip lists what you closed recently
- and opens your OS folder picker; point it at a git repository.
-3. **Point lich at your agent** — the first launch lists the agents it found on
- your machine; in Settings › Providers you can set each binary path and
- choose the default. A project can follow it or choose a different provider
- on the same screen.
-4. **Start a session** — *New Session* spawns a terminal running your agent in
- the project. Each checkout header also has a `+` menu for opening any enabled
- provider or a plain terminal in that exact checkout; click the header itself
- to collapse or expand its sessions.
-5. **Branch off a worktree** *(optional)* — create one from any base branch;
- lich seeds it and drops you into a fresh session.
+Every gap is deliberate, and [`docs/ceilings.md`](docs/ceilings.md) says what was
+measured behind each one.
## Configuration
-- **Providers** — set each provider's binary path and the default for all
- projects in Settings › Providers. The open project's row there can override
- that choice; **Clear** removes the override, so later changes to the default
- flow through automatically. With no path set, a session runs the first of
- the provider's binaries on your login shell's `PATH`; the Binary block names that file and its version, and lists any other version
- `PATH` holds, which `lich doctor` also warns about. To pick one, set its path
- in Binary (the setting `provider..bin`, e.g. `provider.codex.bin`).
- A provider's section opens
- with how much of your plan is left, when lich can read it. What the footer
- shows is set in Settings › Appearance by dragging its items; the cost
- readout starts hidden, since the figure only means something when you are
- billed per token.
-- **Worktrees** — a `.worktreeinclude` file in the project checkout tunes which
- gitignored files get copied into a new worktree.
-- **Session hooks** — with the
- [lich plugin](https://github.com/lichdotdev/lich-plugin) installed from Settings,
- a session titles its own card and refreshes git the moment it writes a file.
-- **Stability**: which parts of lich are safe to script against, and which can
- change in any release, is written down in [docs/stability.md](docs/stability.md).
+- **Providers.** Settings › Providers sets each agent's binary and the default
+ for every project; a project can choose its own. With no path set, lich runs
+ the first binary on your login shell's `PATH` and `lich doctor` warns when
+ there is more than one version.
+- **Footer.** Settings › Appearance: drag its items to choose what it shows.
+ The cost starts hidden, since it only means something when you pay per token.
+- **Worktrees.** A `.worktreeinclude` file in the project picks which gitignored
+ files a new worktree gets.
+- **Session hooks.** Install the [lich plugin](https://github.com/lichdotdev/lich-plugin)
+ from Settings and a session names its own card and refreshes git the moment
+ it writes a file.
+- **Scripting.** [docs/stability.md](docs/stability.md) says which parts of lich
+ are safe to script against.
## Privacy & updates
-Everything runs on your machine. No account, no sign-in, no telemetry: the
-backend is a token-authenticated loopback listener. On its own, lich goes to the
-network for these and nothing else:
+Everything runs on your machine: no account, no sign-in, no telemetry. lich
+only goes to the network for:
- **Updates**: a version check against GitHub Releases at startup and hourly,
- and the lich plugin's release list on GitHub at startup.
+ and the lich plugin's release list at startup.
- **Plan usage**: each provider's own usage endpoint (Anthropic, OpenAI, Cursor,
- OpenCode Go), with the login the session's CLI already uses, at most every five
+ OpenCode Go), with the login the agent already uses, at most every five
minutes. Antigravity's plan is read from `agy` itself.
-- **Prices**: LiteLLM's public price table on GitHub, once for a model the
+- **Prices**: LiteLLM's public price table on GitHub, once, for a model the
bundled table does not know.
-The Windows installer's build updates in place; a Homebrew, Scoop, AUR or Linux
-package install updates through its package manager, and lich hands you the
-command.
-Settings › Help says what the log file carries — paths, project and branch names,
-your gh login, never a session token — before you attach it to a bug report, and
-`lich rage` collects that report into one archive without uploading any of it.
+The Windows installer updates in place; Homebrew, Scoop, AUR and the Linux
+packages update through their package manager, and lich gives you the command.
+Something broken? `lich doctor` checks your setup and `lich rage` packs a bug
+report into one archive without uploading it. Settings › Help says what the log
+carries (paths, project and branch names, your gh login, never a session token)
+before you attach it. Bugs and feature requests go to
+[Issues](https://github.com/lichdotdev/lich/issues); what changed in each
+version is in [CHANGELOG.md](CHANGELOG.md).
## Build from source
-lich is two binaries. The backend, `lich`, is pure Go (Go 1.27, `CGO_ENABLED=0`,
-one static binary) and serves sessions over a token-authenticated loopback
-listener (HTTP RPC + WebSockets). The window, `lich-native`, is its own Go module
-in `native/`, built with cgo: [Gio](https://gioui.org) draws it, `libghostty-vt`
-runs its terminals and [godemirror](https://github.com/lichdotdev/godemirror)
-its code and diff views. Prerequisites are **Go 1.27.0+** and
-**[Task](https://taskfile.dev)**; the window adds a C toolchain, Gio's system
-packages and a `libghostty-vt` built with Zig 0.16 from the Ghostty commit in
-`native/GHOSTTY_COMMIT`. [`native/slice.sh`](native/slice.sh) says how to build
-it, and [`docs/native-window.md`](docs/native-window.md) covers the window.
+lich is two binaries: `lich`, a static pure-Go backend, and `lich-native`, the
+window, built with cgo from `native/`. You need **Go 1.27.0+** and
+**[Task](https://taskfile.dev)**; the window also needs a C toolchain, Gio's
+system packages and a `libghostty-vt` built from the commit in
+`native/GHOSTTY_COMMIT`. [`native/slice.sh`](native/slice.sh) says how, and
+[`docs/native-window.md`](docs/native-window.md) covers the window.
```bash
task build # backend binary -> bin/lich
task build:native # window -> bin/lich-native
task run # build + run
task test # Go suites
+task package # .deb + .rpm + Arch .pkg.tar.zst in bin/ (needs nfpm)
```
-Package a Linux release locally (needs
-[nfpm](https://nfpm.goreleaser.com/)):
-
-```bash
-task package # .deb + .rpm + Arch .pkg.tar.zst in bin/
-```
-
-Adding another agent CLI to the eight lich runs is the one change that lands in a
-dozen files across two repositories:
+Adding another agent touches a dozen files across two repositories:
[`docs/adding-a-provider.md`](docs/adding-a-provider.md) is the map.
## Sponsors
diff --git a/README.pt-BR.md b/README.pt-BR.md
index 2397fb6eb..c0c5cdfcb 100644
--- a/README.pt-BR.md
+++ b/README.pt-BR.md
@@ -2,108 +2,127 @@
Um ADE para quem trabalha no terminal, com os agentes de código que você já usa.
-
- Abra seus projetos, rode agentes como Claude Code, Codex e opencode em
- terminais de verdade e acompanhe o git (worktrees, diffs e pull requests)
- sem sair da janela. Sem Electron e sem navegador: o lich desenha a própria
- janela nativa com Gio, no Linux, no Windows e no macOS.
-
+ Seus agentes de código lado a lado, cada um na própria branch.
+ Claude Code, Codex, opencode ou o agente que você já usa, cada um na própria worktree, todos na mesma janela.
+
-
+
-## Por que o lich
-
-O que dá para fazer com o lich:
-
-- **Rodar o agente que você já tem.** [Claude Code](https://www.anthropic.com/claude-code),
- [Codex](https://github.com/openai/codex), Antigravity,
- [opencode](https://github.com/sst/opencode), oh-my-pi,
- [Crush](https://github.com/charmbracelet/crush),
- [Cursor CLI](https://cursor.com/docs/cli) e
- [Kiro CLI](https://kiro.dev/docs/cli/) rodam aqui do mesmo jeito. Aponte o
- lich para cada binário uma vez e escolha um padrão ou um agente por sessão.
- O que o lich consegue ler *de volta* de cada sessão muda de provedor para
- provedor, e está tudo na tabela de
- [Suporte por provedor](#suporte-por-provedor).
-- **Usar um terminal de verdade.** Shells com PTY, vários por projeto,
- renderizados na GPU, com scrollback pesquisável que sobrevive a fechar e
- reabrir a janela. O que um projeto mantém rodando (um servidor de dev, um
- túnel, um `lazydocker`) fica salvo como serviço, que você inicia, para e lê
- no pé da barra lateral, e que pode subir junto com o lich. O rodapé acompanha o `cd` e mostra a branch. Numa sessão de Claude
- Code, Codex ou Kiro CLI, mostra também o modelo e a janela de contexto em
- uso; no Claude Code, Codex, Antigravity, Cursor CLI e numa assinatura do
- OpenCode Go, quanto ainda resta da janela móvel do seu plano; e, se você
- pedir, quanto a sessão já gastou, nos provedores que registram isso.
-- **Pôr uma sessão para trabalhar para outra.** Passe uma tarefa para outro
- card e o agente de lá escreve a resposta de volta, seja qual for o agente em
- cada ponta. Ele chega às outras sessões por ferramentas entregues na criação
- da sessão (MCP no Claude Code e no Codex) ou trazidas pelo plugin. Tudo isso
- também existe como o comando `lich` em qualquer shell, com `--json`, então
- um script consegue conduzir uma sessão sem nenhum agente no meio
- ([`docs/cli.md`](docs/cli.md)).
-- **Acompanhar várias ao mesmo tempo.** Coloque qualquer sessão num split ao
- lado da atual e o lich organiza os painéis sozinho, pela quantidade de
- sessões e pelo espaço da janela: oito ficam quatro por linha num monitor
- ultrawide e duas por linha num notebook. Uma sessão que delegou trabalho
- monta o split com as outras em volta dela num clique. Cada split tem nome,
- um projeto guarda quantos você quiser e cada um ganha um bloco na barra
- lateral, que dá para recolher, renomear ou desfazer.
-- **Criar uma worktree sem fazer setup.** Crie uma a partir de qualquer branch
- base: o lich copia os seus `.env*` ignorados pelo git e reserva uma porta
- para o servidor de dev que nenhum outro checkout nem processo da máquina
- está usando.
- Tem mudança não commitada no checkout? Ela vai junto, inclusive os arquivos
- não rastreados.
-- **Rodar uma sessão confinada.** O agente pode abrir dentro de uma sandbox
- do sistema operacional: um home novo e vazio, só com o estado do próprio
- provedor, o resto da máquina só para leitura e acesso de escrita ao checkout
- em que ele foi aberto. Suas chaves ssh, suas credenciais de nuvem e todos os
- outros repositórios do disco simplesmente não estão lá. É o contrapeso de
- deixar um agente pular os pedidos de permissão. No Linux roda com
- bubblewrap e no macOS com `sandbox-exec`. Não protege contra código
- malicioso, e o [`docs/ceilings.md`](docs/ceilings.md) diz o que ela não
- impede.
-- **Revisar o diff no mesmo lugar em que você lê.** Um dock de diff
- mostra as mudanças em andamento ao lado de uma árvore de arquivos ao vivo,
- recolhe as que só mexeram em espaço em branco quando você pede e mostra o
- antes e depois de uma imagem ou PDF alterado. Clique com o botão direito
- numa seleção para comentar aquelas linhas; os comentários vão juntos para a
- sessão num prompt só, colado e não enviado. A aba Código navega pelo
- checkout e busca no texto dos arquivos.
-- **Levar o pull request até o merge daqui.** Liste os pull requests abertos
- do repositório, faça checkout de um numa worktree própria, leia o diff,
- revise inline e faça o merge com os métodos que a branch base aceita de
- fato. Numa branch que ainda não tem pull request, **Criar com agente** pede
- para a sessão dessa branch abrir um, e nada é enviado até você apertar
- Enter.
-
-Tem mais: [temas](docs/themes.md) que você importa como JSON ou instala de um
-repositório git, uma paleta no `Ctrl`/`Cmd`+`K` que acha uma sessão pelo nome
-ou pelo que foi dito na conversa, notificação no desktop quando uma sessão está
-esperando por você e `lich rage` / `lich doctor` para quando ele nem abre.
-
-O projeto está em desenvolvimento ativo: bugs e pedidos de funcionalidade vão
-nas [Issues](https://github.com/lichdotdev/lich/issues), e o que mudou em cada
-versão está no [CHANGELOG.md](CHANGELOG.md).
+## Recursos
+
+
+
+
+
+### Agentes lado a lado
+
+Coloque as sessões num split e o lich arruma os painéis sozinho. Veja de relance quem está trabalhando, quem está esperando por você e quanto contexto ainda resta.
+
+
+
+
+
+
+
+### Uma worktree por tarefa, sem configurar nada
+
+Crie uma sessão a partir de qualquer branch e o lich copia seus arquivos `.env` e reserva uma porta livre para o servidor de desenvolvimento. O que você ainda não commitou pode ir junto.
+
+
+
+
+
+
+
+### Revise o diff e comente as linhas
+
+Leia o que o agente mudou ao lado da sessão dele, comente as linhas que precisam de ajuste e mande todas as notas de volta num único prompt.
+
+
+
+
+
+
+
+### Pull requests sem abrir o navegador
+
+Peça ao agente da branch para abrir o pull request, revise linha a linha e faça o merge, tudo na mesma janela.
+
+
+
+
+
+
+
+### Do seu jeito
+
+Importe um tema em JSON ou instale um direto de um repositório git.
+
+[Docs →](docs/themes.md)
+
+
+
+
+
+
+E mais:
+
+- **Sessões que delegam.** Um agente passa uma tarefa para outra sessão e recebe a resposta de volta. O mesmo funciona do seu shell com o comando `lich` ([docs](docs/cli.md)).
+- **Agentes em sandbox.** Deixe um agente pular os pedidos de permissão dentro de uma sandbox que não enxerga suas chaves, suas credenciais nem seus outros repositórios ([limites](docs/ceilings.md)).
+- **Seus servidores de desenvolvimento na barra lateral.** Salve o que o projeto mantém rodando e ligue ou desligue com um clique.
+- **Ache qualquer coisa.** `Ctrl`/`Cmd`+`K` pula para uma sessão pelo nome ou por algo que foi dito nela.
+- **Saiba quando precisam de você.** Notificação no desktop quando uma sessão está esperando por você.
+
+## Instalação
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
+```
+
+Um comando só: ele detecta a sua distro, confere o download e instala o lich pelo gerenciador de pacotes.
+
+| Plataforma | Como instalar |
+| --- | --- |
+| **Linux** | O `install.sh` acima, ou o AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`). Precisa do `zenity` e da glibc 2.34 ou mais nova (Debian 12, Ubuntu 22.04, RHEL 9 em diante). |
+| **macOS** | `brew install --cask lichdotdev/tap/lich` |
+| **Windows** | Instalador ou zip portátil em [Releases](https://github.com/lichdotdev/lich/releases), ou `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` |
+
+Os builds de macOS e Windows ainda não são assinados, então o Gatekeeper e o
+SmartScreen avisam num download pela página de Releases; pelo Homebrew, o aviso
+do Gatekeeper não aparece. Pacotes por distro, o tarball para Linux, como tirar
+a flag de quarentena e como atualizar a partir da fórmula antiga do Homebrew
+estão no [INSTALL.md](INSTALL.md).
+
+## Primeiros passos
+
+1. **Abra um projeto.** O `+` na barra de abas lista o que você fechou
+ recentemente e abre o seletor de pastas. Escolha um repositório git.
+2. **Escolha o seu agente.** Na primeira execução, o lich lista os agentes que
+ encontrou na máquina. Em Configurações › Provedores você define o padrão e o
+ caminho de cada binário.
+3. **Inicie uma sessão.** *Nova sessão* abre o seu agente no projeto. O `+` no
+ cabeçalho de um checkout abre qualquer agente, ou um terminal comum,
+ naquele checkout.
+4. **Dê uma worktree para ela** *(opcional)*. Crie uma a partir de qualquer
+ branch base e o lich abre uma sessão nova nela.
## Suporte por provedor
-Todo provedor roda num terminal de verdade, é retomado pelo id da conversa,
-fica confinado pela mesma sandbox e recebe o mesmo jeito de falar com as suas
-outras sessões. O que muda é o que o lich consegue *ler* de cada sessão,
-porque ele lê o que cada CLI registra, e não existem duas que registrem as
-mesmas coisas.
+Todo agente roda num terminal de verdade, retoma a conversa, funciona na
+sandbox e fala com as suas outras sessões. O que muda de um para outro é o que
+o lich consegue ler de volta, porque cada CLI registra coisas diferentes.
+
+
+Veja o que cada agente suporta
| Recurso | Claude Code | Codex | Antigravity | opencode | oh-my-pi | Crush | Cursor CLI | Kiro CLI |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -149,130 +168,70 @@ mesmas coisas.
| Instruído na criação, no idioma de prompt, a distribuir o trabalho em sessões do lich em vez de subagentes ocultos | sim | não | não | não | sim | não | não | não |
| O card da sessão abre um navegador que o agente dirige, numa aba ao lado da sessão | sim | sim | sim | o card abre; o agente usa `lich browser`, não as tools `browser_*` | sim | sim | sim | sim |
-Toda lacuna é proposital: nenhuma é o lich escondendo algo que a CLI informa,
-e o [`docs/ceilings.md`](docs/ceilings.md) diz o que foi medido em cada uma.
-
-## Instalação
+
-Um comando só: detecta a sua distro, confere o checksum e instala o pacote
-nativo e as dependências pelo gerenciador de pacotes:
-
-```bash
-curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
-```
-
-| Plataforma | Como instalar | Dependências em runtime |
-| --- | --- | --- |
-| **Linux** | o `install.sh` acima ou o AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`) | `zenity` e glibc 2.34 ou mais nova para a janela que vem no pacote (Debian 12, Ubuntu 22.04, RHEL 9 em diante) |
-| **macOS** | `brew install --cask lichdotdev/tap/lich` | nada, a janela já vem no app, em Apple Silicon e Intel |
-| **Windows** | instalador ou zip portátil em [Releases](https://github.com/lichdotdev/lich/releases), ou Scoop: `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` | nada, a janela já vem nos dois |
-
-Pacotes manuais por distro, o tarball para Linux e o zip portátil para Windows:
-[INSTALL.md](INSTALL.md). Os binários de macOS e Windows não são assinados,
-então o Gatekeeper e o SmartScreen avisam até a notarização/assinatura sair.
-Instalando pelo Homebrew, o aviso do Gatekeeper não aparece; num download pela
-página de Releases, você precisa remover a flag de quarentena na mão.
-No macOS o cask instala o `Lich.app`, então o lich tem ícone próprio em
-`/Applications` e no Dock enquanto roda. Para atualizar a partir da fórmula
-antiga, rode `brew uninstall lich` antes; o [INSTALL.md](INSTALL.md) explica
-por quê.
-
-## Primeiros passos
-
-1. **Instale** e abra o `lich`.
-2. **Abra um projeto**: o `+` na barra de abas lista o que você fechou
- recentemente e abre o seletor de pastas do sistema. Escolha um repositório
- git.
-3. **Aponte o lich para o seu agente**: na primeira execução, ele lista os
- agentes que encontrou na máquina. Em Configurações › Provedores você define
- o caminho de cada binário e escolhe o padrão. Na mesma tela, um projeto pode
- seguir esse padrão ou usar outro provedor.
-4. **Inicie uma sessão**: *Nova sessão* abre um terminal com o seu agente
- rodando no projeto. O cabeçalho de cada checkout também tem um menu `+`
- para abrir qualquer provedor ativado, ou um terminal comum, exatamente
- naquele checkout. Clique no cabeçalho para recolher ou expandir as sessões
- dele.
-5. **Crie uma worktree** *(opcional)*: a partir de qualquer branch base. O lich
- prepara a worktree e já abre uma sessão nova nela.
+Toda lacuna é proposital, e o [`docs/ceilings.md`](docs/ceilings.md) diz o que
+foi medido em cada uma.
## Configuração
-- **Provedores**: em Configurações › Provedores você define o caminho do
- binário de cada provedor e o padrão para todos os projetos. A linha do
- projeto aberto pode sobrescrever essa escolha; **Limpar** remove a
- sobrescrita, e as mudanças futuras no padrão passam a valer
- automaticamente. Sem caminho definido, a sessão roda o primeiro binário do
- provedor que aparece no `PATH` do seu shell de login. O
- bloco Binário mostra esse arquivo e a versão dele e lista outras versões que
- estejam no `PATH`, o que o `lich doctor` também avisa. Para escolher uma,
- defina o caminho em Binário (a configuração `provider..bin`, por
- exemplo `provider.codex.bin`).
- A seção de cada provedor começa mostrando quanto ainda resta do seu plano,
- quando o lich consegue ler essa informação. Os itens do rodapé se definem em
- Configurações › Aparência, arrastando cada um; o custo começa oculto, porque
- esse número só faz sentido se você paga por token.
-- **Worktrees**: um arquivo `.worktreeinclude` no checkout do projeto ajusta
- quais arquivos ignorados pelo git são copiados para cada worktree nova.
-- **Hooks de sessão**: com o
- [plugin do lich](https://github.com/lichdotdev/lich-plugin) instalado pelas
- Configurações, a sessão dá título ao próprio card e atualiza o git assim que
- grava um arquivo.
-- **Estabilidade**: o que no lich é seguro usar em scripts, e o que pode mudar
- em qualquer versão, está em [docs/stability.md](docs/stability.md).
+- **Provedores.** Em Configurações › Provedores você define o binário de cada
+ agente e o padrão de todos os projetos; um projeto pode escolher o dele. Sem
+ caminho definido, o lich roda o primeiro binário do `PATH` do seu shell de
+ login, e o `lich doctor` avisa quando há mais de uma versão.
+- **Rodapé.** Em Configurações › Aparência, arraste os itens para escolher o que
+ ele mostra. O custo começa oculto, porque só faz sentido se você paga por
+ token.
+- **Worktrees.** Um arquivo `.worktreeinclude` no projeto escolhe quais arquivos
+ ignorados pelo git vão para cada worktree nova.
+- **Hooks de sessão.** Instale o [plugin do lich](https://github.com/lichdotdev/lich-plugin)
+ pelas Configurações e a sessão dá nome ao próprio card e atualiza o git assim
+ que grava um arquivo.
+- **Scripts.** O [docs/stability.md](docs/stability.md) diz quais partes do lich
+ são seguras para usar em scripts.
## Privacidade e atualizações
-Tudo roda na sua máquina. Sem conta, sem login, sem telemetria: o backend é um
-listener em loopback autenticado por token. Por conta própria, o lich só acessa
-a rede para isto:
+Tudo roda na sua máquina: sem conta, sem login, sem telemetria. O lich só acessa
+a rede para:
- **Atualizações**: verificação de versão no GitHub Releases ao iniciar e a
- cada hora, e a lista de releases do plugin do lich no GitHub ao iniciar.
+ cada hora, e a lista de releases do plugin do lich ao iniciar.
- **Uso do plano**: o endpoint de uso de cada provedor (Anthropic, OpenAI,
- Cursor, OpenCode Go), com o login que a CLI da sessão já usa, no máximo a
- cada cinco minutos. O plano do Antigravity é lido do próprio `agy`.
+ Cursor, OpenCode Go), com o login que o agente já usa, no máximo a cada cinco
+ minutos. O plano do Antigravity é lido do próprio `agy`.
- **Preços**: a tabela pública de preços do LiteLLM no GitHub, uma vez, quando
a tabela embutida não conhece o modelo.
-A versão do instalador do Windows se atualiza sozinha; instalações por
-Homebrew, Scoop, AUR ou pacote Linux atualizam pelo gerenciador de pacotes, e o
-lich mostra o comando.
-Configurações › Ajuda mostra o que vai no arquivo de log (caminhos, nomes de
-projeto e de branch, seu login do gh, nunca um token de sessão) antes de você
-anexar o log num bug report, e o `lich rage` junta esse relatório num único
-arquivo, sem enviar nada.
+O instalador do Windows se atualiza sozinho; Homebrew, Scoop, AUR e os pacotes
+Linux atualizam pelo gerenciador de pacotes, e o lich mostra o comando.
+Algo quebrou? O `lich doctor` confere a sua instalação e o `lich rage` junta um
+bug report num único arquivo, sem enviar nada. Configurações › Ajuda mostra o
+que vai no log (caminhos, nomes de projeto e de branch, seu login do gh, nunca
+um token de sessão) antes de você anexá-lo. Bugs e pedidos vão nas
+[Issues](https://github.com/lichdotdev/lich/issues); o que mudou em cada versão
+está no [CHANGELOG.md](CHANGELOG.md).
## Compilar a partir do código-fonte
-O lich são dois binários. O backend, `lich`, é Go puro (Go 1.27, `CGO_ENABLED=0`,
-um único binário estático) e serve as sessões por um listener em loopback
-autenticado por token (RPC HTTP + WebSockets). A janela, `lich-native`, é um
-módulo Go próprio em `native/`, compilado com cgo: o [Gio](https://gioui.org)
-desenha a janela, a `libghostty-vt` roda os terminais e o
-[godemirror](https://github.com/lichdotdev/godemirror) as telas de código e diff.
-Pré-requisitos: **Go 1.27.0+** e **[Task](https://taskfile.dev)**; a janela pede
-também um toolchain C, os pacotes de sistema do Gio e uma `libghostty-vt`
-compilada com Zig 0.16 a partir do commit do Ghostty em `native/GHOSTTY_COMMIT`.
-O [`native/slice.sh`](native/slice.sh) explica como compilá-la, e o
-[`docs/native-window.md`](docs/native-window.md) descreve a janela.
+O lich são dois binários: o `lich`, um backend estático em Go puro, e o
+`lich-native`, a janela, compilada com cgo a partir de `native/`. Você precisa
+de **Go 1.27.0+** e do **[Task](https://taskfile.dev)**; a janela pede também um
+toolchain C, os pacotes de sistema do Gio e uma `libghostty-vt` compilada a
+partir do commit em `native/GHOSTTY_COMMIT`. O [`native/slice.sh`](native/slice.sh)
+explica como, e o [`docs/native-window.md`](docs/native-window.md) descreve a
+janela.
```bash
task build # binário do backend -> bin/lich
task build:native # janela -> bin/lich-native
task run # compila + roda
task test # suítes Go
+task package # .deb + .rpm + Arch .pkg.tar.zst em bin/ (precisa do nfpm)
```
-Para empacotar um release Linux localmente (precisa do
-[nfpm](https://nfpm.goreleaser.com/)):
-
-```bash
-task package # .deb + .rpm + Arch .pkg.tar.zst in bin/
-```
-
-Adicionar mais uma CLI de agente às oito que o lich roda é a mudança que mexe
-em uma dúzia de arquivos de dois repositórios, e o mapa está em
-[`docs/adding-a-provider.md`](docs/adding-a-provider.md).
+Adicionar outro agente mexe em uma dúzia de arquivos de dois repositórios, e o
+mapa está em [`docs/adding-a-provider.md`](docs/adding-a-provider.md).
## Patrocinadores
diff --git a/README.ru.md b/README.ru.md
index 211170734..66ca2691b 100644
--- a/README.ru.md
+++ b/README.ru.md
@@ -2,108 +2,127 @@
Терминальная ADE для ИИ-агентов, которыми вы уже пользуетесь.
-
- Открывайте проекты, запускайте Claude Code, Codex, opencode и других агентов
- в настоящих терминалах и держите git (worktree, diff и pull request'ы) перед
- глазами, не выходя из окна. Без Electron и без браузера: lich рисует
- собственное нативное окно на Gio, на Linux, Windows и macOS.
-
+ Ваши ИИ-агенты бок о бок, каждый в своей ветке.
+ Claude Code, Codex, opencode или тот агент, которым вы уже пользуетесь: у каждого свой worktree, и всё в одном окне.
+
-
+
-## Почему lich
-
-С lich можно:
-
-- **Запускать агента, который у вас уже есть.** [Claude Code](https://www.anthropic.com/claude-code),
- [Codex](https://github.com/openai/codex), Antigravity,
- [opencode](https://github.com/sst/opencode), oh-my-pi,
- [Crush](https://github.com/charmbracelet/crush),
- [Cursor CLI](https://cursor.com/docs/cli) и
- [Kiro CLI](https://kiro.dev/docs/cli/) работают здесь одинаково. Один раз
- укажите lich путь к исполняемому файлу каждого из них, а потом выберите агента
- по умолчанию или выбирайте его для каждой сессии. Что lich может прочитать
- *из* сессии, зависит от провайдера: всё сведено в таблицу
- [Поддержка провайдеров](#поддержка-провайдеров).
-- **Работать в настоящем терминале.** Оболочки на PTY, по нескольку на проект,
- с отрисовкой на GPU и историей прокрутки с поиском, которая переживает закрытие
- и повторное открытие окна. То, что проект держит запущенным (dev-сервер,
- туннель, `lazydocker`), сохраняется один раз как сервис: его запускают,
- останавливают и читают внизу боковой панели, и он может стартовать вместе с
- lich. Нижняя панель следит за `cd`
- и показывает ветку, а в сессиях Claude Code, Codex и Kiro CLI ещё и модель с
- текущим окном контекста. Для Claude Code, Codex, Antigravity, Cursor CLI и
- подписки OpenCode Go там же видно, сколько осталось в скользящем окне лимитов
- вашей подписки, а если захотите, то и сколько потратила сессия (у провайдеров,
- которые это записывают).
-- **Поручать задачи одной сессии из другой.** Передайте задачу другой карточке,
- и её агент сам запишет ответ обратно, что бы ни было запущено на каждой из
- сторон. До других сессий агент добирается через инструменты, которые получает
- при запуске (MCP для Claude Code и Codex), или через плагин. Всё это доступно
- и как команда `lich` в любой оболочке, включая `--json`, так что скрипт может
- управлять сессией вообще без агента ([`docs/cli.md`](docs/cli.md)).
-- **Следить за несколькими сразу.** Выведите любую сессию на экран рядом с той,
- в которой вы работаете, и lich сам разложит панели с учётом их количества и
- свободного места в окне: восемь сессий встанут по четыре в ряд на ультрашироком
- мониторе и по две на ноутбуке. Сессия, которая раздала работу другим, собирает
- экран вокруг себя одним щелчком. У каждого экрана есть имя, в проекте их может
- быть сколько угодно, и у каждого есть свой блок в боковой панели: его можно
- свернуть, переименовать или разобрать.
-- **Создавать worktree без возни с настройкой.** Создайте worktree от любой
- базовой ветки, и lich скопирует в него ваши `.env*`-файлы, игнорируемые git,
- и выделит ему порт для dev-сервера, который не занят ни другим checkout, ни
- каким-либо процессом на машине. Если начать с незакоммиченных изменений checkout, они переедут
- вместе с ним, включая неотслеживаемые файлы.
-- **Запускать сессию в изоляции.** Агента можно открыть в песочнице ОС: чистый
- пустой домашний каталог, в котором есть только собственное состояние этого
- провайдера, остальная система доступна только для чтения, а писать можно лишь
- в checkout, для которого открыта сессия. Ваших ssh-ключей, облачных учётных
- данных и остальных репозиториев на диске там просто нет. Это противовес тому,
- что агенту разрешено пропускать запросы разрешений. На Linux это bubblewrap,
- на macOS `sandbox-exec`. От вредоносного кода песочница не защищает, и
- [`docs/ceilings.md`](docs/ceilings.md) описывает, чего именно она не
- останавливает.
-- **Проводить ревью diff там же, где вы его читаете.** Панель diff
- показывает рабочие изменения рядом с живым деревом файлов, по запросу
- сворачивает правки, в которых поменялись только пробелы, и показывает
- изменённое изображение или PDF в версиях до и после. Щёлкните правой кнопкой
- по выделению, чтобы прокомментировать эти строки: все комментарии вставятся в
- сессию одним промптом, но отправлены не будут. На вкладке «Код» можно
- просматривать checkout и искать по тексту его файлов.
-- **Работать с pull request'ами прямо здесь.** Откройте список открытых pull
- request'ов репозитория, возьмите любой в отдельный worktree, прочитайте diff,
- оставьте ревью прямо в коде и смёржите его тем способом, который базовая ветка
- действительно принимает. На ветке, где pull request'а ещё нет, кнопка
- **Создать с агентом** попросит сессию этой ветки открыть его, и ничего не
- уйдёт, пока вы не нажмёте Enter.
-
-А ещё: [темы](docs/themes.md), которые импортируются как JSON или
-устанавливаются из git-репозитория; палитра по `Ctrl`/`Cmd`+`K`, которая
-открывает сессию по имени или по тому, что в ней обсуждалось; уведомление на
-рабочем столе, когда сессия ждёт вас; и `lich rage` / `lich doctor` на случай,
-если lich вообще не запускается.
-
-Проект активно развивается: об ошибках и с пожеланиями пишите в
-[Issues](https://github.com/lichdotdev/lich/issues), а что изменилось в каждой
-версии, смотрите в [CHANGELOG.md](CHANGELOG.md).
+## Возможности
+
+
+
+
+
+### Агенты бок о бок
+
+Выведите сессии на один экран, и lich сам разложит панели. С первого взгляда видно, какая сессия занята, какая ждёт вас и сколько контекста у неё осталось.
+
+
+
+
+
+
+
+### Worktree под каждую задачу, без настройки
+
+Создайте сессию от любой базовой ветки, и lich скопирует ваши `.env`-файлы и выделит ей свободный порт для dev-сервера. Незакоммиченные изменения можно взять с собой.
+
+
+
+
+
+
+
+### Читайте diff, комментируйте строки
+
+Смотрите, что изменил агент, рядом с его сессией, комментируйте строки, которые нужно доработать, и отправляйте все заметки назад одним промптом.
+
+
+
+
+
+
+
+### Pull request'ы без браузера
+
+Откройте pull request, попросите агента ветки написать его, прочитайте прямо в коде и смёржите, не выходя из того же окна.
+
+
+
+
+
+
+
+### Настройте под себя
+
+Импортируйте тему как JSON или установите её из git-репозитория.
+
+[Документация →](docs/themes.md)
+
+
+
+
+
+
+А ещё:
+
+- **Сессии, которые делегируют.** Один агент передаёт задачу другой сессии и получает ответ обратно. То же работает из вашей оболочки через команду `lich` ([документация](docs/cli.md)).
+- **Агенты в песочнице.** Позвольте агенту пропускать запросы разрешений внутри песочницы, где не видны ваши ключи, учётные данные и остальные репозитории ([ограничения](docs/ceilings.md)).
+- **Ваши dev-серверы в боковой панели.** Сохраните то, что проект держит запущенным, и запускайте или останавливайте это одним щелчком.
+- **Поиск по всему.** `Ctrl`/`Cmd`+`K` открывает сессию по имени или по тому, что в ней обсуждалось.
+- **Знайте, когда вы нужны.** Уведомление на рабочем столе, когда сессия ждёт вас.
+
+## Установка
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
+```
+
+Одна строка: она определит ваш дистрибутив, проверит загрузку и установит lich через ваш пакетный менеджер.
+
+| Платформа | Где взять |
+| --- | --- |
+| **Linux** | `install.sh` выше или AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`). Нужны `zenity` и glibc 2.34 или новее (Debian 12, Ubuntu 22.04, RHEL 9 и новее). |
+| **macOS** | `brew install --cask lichdotdev/tap/lich` |
+| **Windows** | Установщик или portable zip со страницы [Releases](https://github.com/lichdotdev/lich/releases) либо `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` |
+
+Сборки для macOS и Windows пока не подписаны, поэтому Gatekeeper и SmartScreen
+предупреждают о файле, скачанном со страницы Releases; при установке через
+Homebrew запроса Gatekeeper нет. Пакеты под отдельные дистрибутивы, tarball для
+Linux, снятие флага карантина и переход со старой формулы Homebrew описаны в
+[INSTALL.md](INSTALL.md).
+
+## Быстрый старт
+
+1. **Откройте проект.** Кнопка `+` на панели вкладок показывает недавно
+ закрытые проекты и открывает диалог выбора папки. Выберите git-репозиторий.
+2. **Выберите агента.** При первом запуске lich покажет агентов, которых нашёл на
+ вашей машине. В разделе Настройки › Провайдеры задаются агент по умолчанию и
+ путь к исполняемому файлу каждого.
+3. **Запустите сессию.** Кнопка *Новая сессия* открывает вашего агента в проекте.
+ Кнопка `+` в заголовке checkout открывает любого агента или обычный терминал
+ именно в этом checkout.
+4. **Создайте worktree** *(по желанию)* от любой базовой ветки: lich откроет в
+ нём новую сессию.
## Поддержка провайдеров
-Любой провайдер запускается в настоящем терминале, возобновляется по
-идентификатору разговора, работает в той же песочнице и получает тот же доступ к
-остальным вашим сессиям. Отличается то, что lich может *прочитать* из сессии:
-он читает то, что записывает сам CLI, а записывают они все разное.
+Каждый агент работает в настоящем терминале, возобновляет свой разговор, работает
+в песочнице и добирается до ваших остальных сессий. Отличается то, что lich может
+прочитать из сессии, потому что каждый CLI записывает своё.
+
+
+Что поддерживает каждый агент
| Что вы получаете | Claude Code | Codex | Antigravity | opencode | oh-my-pi | Crush | Cursor CLI | Kiro CLI |
| --- | :-: | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
@@ -149,111 +168,61 @@
| При запуске агент получает указание на языке промптов раздавать работу сессиям lich, а не скрытым субагентам | да | нет | нет | нет | да | нет | нет | нет |
| Карточка сессии открывает браузер, которым управляет агент, во вкладке рядом с сессией | да | да | да | карточка открывает; агент вызывает `lich browser`, а не инструменты `browser_*` | да | да | да | да |
-Все пробелы намеренные: ни в одном из них lich не скрывает того, что сообщает
-CLI, а что именно измерялось за каждым, описано в
-[`docs/ceilings.md`](docs/ceilings.md).
-
-## Установка
-
-Одна команда сама определит ваш дистрибутив, проверит контрольную сумму и
-установит нативный пакет с зависимостями через ваш пакетный менеджер:
+
-```bash
-curl -fsSL https://raw.githubusercontent.com/lichdotdev/lich/main/install.sh | sh
-```
-
-| Платформа | Где взять | Что нужно для работы |
-| --- | --- | --- |
-| **Linux** | `install.sh` выше или AUR [`lich-bin`](https://aur.archlinux.org/packages/lich-bin) (`yay -S lich-bin`) | `zenity`, а также glibc 2.34 или новее для окна из пакета (Debian 12, Ubuntu 22.04, RHEL 9 и новее) |
-| **macOS** | `brew install --cask lichdotdev/tap/lich` | ничего, окно уже входит в приложение, как на Apple Silicon, так и на Intel |
-| **Windows** | установщик или portable zip со страницы [Releases](https://github.com/lichdotdev/lich/releases) либо Scoop: `scoop install https://github.com/lichdotdev/lich/releases/latest/download/lich.json` | ничего, окно есть в каждом из вариантов |
-
-Пакеты для ручной установки под отдельные дистрибутивы, tarball для Linux и
-portable zip для Windows описаны в [INSTALL.md](INSTALL.md). Бинарники для macOS
-и Windows не подписаны, поэтому Gatekeeper и SmartScreen будут предупреждать,
-пока не появятся нотаризация и подпись. При установке через Homebrew запроса
-Gatekeeper не будет, а у файла, скачанного со страницы Releases, флаг карантина
-нужно снять вручную.
-На macOS cask ставит `Lich.app`, так что у lich есть своя иконка в
-`/Applications` и в Dock, пока он запущен. Чтобы перейти со старой формулы,
-сначала выполните `brew uninstall lich`; зачем, объясняет [INSTALL.md](INSTALL.md).
-
-## Быстрый старт
-
-1. **Установите** и запустите `lich`.
-2. **Откройте проект.** Кнопка `+` на панели вкладок показывает недавно
- закрытые проекты и открывает системный диалог выбора папки; выберите
- git-репозиторий.
-3. **Укажите lich своего агента.** При первом запуске lich покажет агентов,
- которых нашёл на вашей машине; в разделе Настройки › Провайдеры можно задать
- путь к исполняемому файлу каждого и выбрать агента по умолчанию. На том же
- экране для проекта можно оставить этот выбор или указать другого провайдера.
-4. **Запустите сессию.** Кнопка *Новая сессия* открывает в проекте терминал с
- вашим агентом. В заголовке каждого checkout есть ещё меню `+`: через него
- можно открыть любого включённого провайдера или обычный терминал именно в
- этом checkout. Щелчок по самому заголовку сворачивает и разворачивает его
- сессии.
-5. **Создайте worktree** *(по желанию)* от любой базовой ветки: lich подготовит
- его и откроет в нём новую сессию.
+Все пробелы намеренные: что именно измерялось за каждым из них, описано в
+[`docs/ceilings.md`](docs/ceilings.md).
## Настройка
-- **Провайдеры**: путь к исполняемому файлу каждого провайдера и провайдер по
- умолчанию для всех проектов задаются в разделе Настройки › Провайдеры. Строка
- открытого проекта там может переопределить этот выбор; **Сбросить** убирает
- переопределение, и дальнейшие изменения значения по умолчанию снова
- применяются автоматически. Если путь не задан, сессия запускает первый
- исполняемый файл провайдера, найденный в `PATH` вашей login-оболочки. Блок «Исполняемый файл» показывает этот файл и его версию, а
- также все остальные версии, найденные в `PATH`; о них предупреждает и
- `lich doctor`. Чтобы выбрать конкретную, укажите её путь в блоке
- «Исполняемый файл» (настройка `provider..bin`, например `provider.codex.bin`).
- Раздел провайдера начинается
- с того, сколько осталось от лимитов подписки, если lich может это прочитать.
- Что показывает нижняя панель, настраивается в разделе Настройки › Оформление
- перетаскиванием её элементов; стоимость по умолчанию скрыта, потому что эта
+- **Провайдеры.** В разделе Настройки › Провайдеры задаются путь к исполняемому
+ файлу каждого агента и агент по умолчанию для всех проектов; проект может
+ выбрать свой. Если путь не задан, lich запускает первый исполняемый файл из
+ `PATH` вашей login-оболочки, а `lich doctor` предупреждает, если версий
+ несколько.
+- **Нижняя панель.** В разделе Настройки › Оформление перетаскиванием элементов
+ выбирается, что она показывает. Стоимость по умолчанию скрыта, потому что эта
цифра имеет смысл, только если вы платите за токены.
-- **Worktree**: файл `.worktreeinclude` в checkout проекта задаёт, какие файлы,
- игнорируемые git, копируются в новый worktree.
-- **Хуки сессии**: если установить из настроек
- [плагин lich](https://github.com/lichdotdev/lich-plugin), сессия сама даёт
- название своей карточке и обновляет статус git сразу, как только записывает файл.
-- **Стабильность**: какие части lich можно спокойно использовать в скриптах, а
- какие могут измениться в любом релизе, описано в [docs/stability.md](docs/stability.md).
+- **Worktree.** Файл `.worktreeinclude` в проекте задаёт, какие файлы,
+ игнорируемые git, попадут в новый worktree.
+- **Хуки сессии.** Установите [плагин lich](https://github.com/lichdotdev/lich-plugin)
+ из настроек, и сессия сама даст название своей карточке и обновит статус git
+ сразу, как только запишет файл.
+- **Скрипты.** В [docs/stability.md](docs/stability.md) сказано, какие части lich
+ можно спокойно использовать в скриптах.
## Конфиденциальность и обновления
-Всё работает на вашей машине. Ни аккаунта, ни входа, ни телеметрии: бэкенд —
-это loopback-слушатель с аутентификацией по токену. Сам lich выходит в сеть
-только за следующим и больше ни за чем:
+Всё работает на вашей машине: ни аккаунта, ни входа, ни телеметрии. lich выходит
+в сеть только за следующим:
- **Обновления**: проверка версии в GitHub Releases при запуске и раз в час, а
- также список релизов плагина lich на GitHub при запуске.
+ также список релизов плагина lich при запуске.
- **Лимиты подписки**: собственный эндпоинт каждого провайдера с данными об
использовании (Anthropic, OpenAI, Cursor, OpenCode Go), с тем логином, который
- уже использует CLI сессии, не чаще раза в пять минут. Подписку Antigravity
- lich узнаёт у самого `agy`.
+ уже использует агент, не чаще раза в пять минут. Подписку Antigravity lich
+ узнаёт у самого `agy`.
- **Цены**: публичная таблица цен LiteLLM на GitHub, один раз для модели,
которой нет во встроенной таблице.
Версия из установщика для Windows обновляется на месте; установки через
Homebrew, Scoop, AUR или пакет Linux обновляются своим пакетным менеджером, и
lich подскажет нужную команду.
-Раздел Настройки › Справка ещё до того, как вы приложите файл журнала к отчёту
-об ошибке, показывает, что в нём есть: пути, названия проектов и веток, ваш
-логин gh, но никогда не токен сессии. А `lich rage` собирает такой отчёт в один
-архив и ничего никуда не загружает.
+Что-то сломалось? `lich doctor` проверит вашу настройку, а `lich rage` соберёт
+отчёт об ошибке в один архив и ничего никуда не загрузит. Раздел Настройки ›
+Справка ещё до того, как вы приложите файл журнала, показывает, что в нём есть:
+пути, названия проектов и веток, ваш логин gh, но никогда не токен сессии. Об
+ошибках и с пожеланиями пишите в
+[Issues](https://github.com/lichdotdev/lich/issues), а что изменилось в каждой
+версии, смотрите в [CHANGELOG.md](CHANGELOG.md).
## Сборка из исходников
-lich состоит из двух бинарников. Бэкенд, `lich`, написан на чистом Go (Go 1.27,
-`CGO_ENABLED=0`, один статический бинарник) и обслуживает сессии через
-loopback-слушатель с аутентификацией по токену (HTTP RPC + WebSocket). Окно,
-`lich-native`, это отдельный Go-модуль в `native/`, собираемый с cgo: его рисует
-[Gio](https://gioui.org), терминалы работают на `libghostty-vt`, а просмотр кода и
-diff на [godemirror](https://github.com/lichdotdev/godemirror). Понадобятся
+lich состоит из двух бинарников: `lich`, статический бэкенд на чистом Go, и
+`lich-native`, окно, которое собирается с cgo из `native/`. Понадобятся
**Go 1.27.0+** и **[Task](https://taskfile.dev)**; для окна нужны ещё компилятор
-C, системные пакеты Gio и `libghostty-vt`, собранная Zig 0.16 из коммита Ghostty,
-указанного в `native/GHOSTTY_COMMIT`. Как её собрать, описано в
+C, системные пакеты Gio и `libghostty-vt`, собранная из коммита, указанного в
+`native/GHOSTTY_COMMIT`. Как её собрать, описано в
[`native/slice.sh`](native/slice.sh), а само окно в
[`docs/native-window.md`](docs/native-window.md).
@@ -262,18 +231,11 @@ task build # бинарник бэкенда -> bin/lich
task build:native # окно -> bin/lich-native
task run # сборка + запуск
task test # тесты Go
+task package # .deb + .rpm + Arch .pkg.tar.zst in bin/ (нужен nfpm)
```
-Чтобы собрать релиз для Linux локально, нужен
-[nfpm](https://nfpm.goreleaser.com/):
-
-```bash
-task package # .deb + .rpm + Arch .pkg.tar.zst in bin/
-```
-
-Добавить ещё один агентный CLI к восьми, которые уже запускает lich, — это
-единственное изменение, которое затрагивает дюжину файлов в двух репозиториях;
-карта всех мест — [`docs/adding-a-provider.md`](docs/adding-a-provider.md).
+Добавление ещё одного агента затрагивает дюжину файлов в двух репозиториях:
+карта всех мест: [`docs/adding-a-provider.md`](docs/adding-a-provider.md).
## Спонсоры
diff --git a/README.zh-CN.md b/README.zh-CN.md
index 7586b85b9..a9eef3f68 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -2,85 +2,121 @@