@xulia/cli
v0.1.0
Published
Keyboard-first terminal interface for coding agents
Readme
xulia
xulia is a keyboard-first terminal interface for running multiple coding-agent sessions side by side.
Supported agents:
- Claude Code through the official TypeScript Agent SDK
- Codex through
codex app-server - OpenCode through the official SDK and headless server
- Cursor is listed as experimental and unavailable
Install
Install Bun, then install xulia globally:
npm install --global @xulia/cliCodex and OpenCode must already be authenticated in their own CLIs. Claude Code is bundled by the Agent SDK and uses your existing Claude authentication.
Run
Start xulia from the project directory the agents should work in:
xuliaSession history is stored in ~/.xulia/xulia.db. A new session is not written to the database until its first non-empty message is sent.
Inside a Git repository, choose worktree, then list or new, from the command palette to switch worktrees or create a detached worktree under ~/.xulia/worktrees/<repository>/<name>. New sessions run in the selected worktree while sessions in other worktrees keep running.
xulia remembers the last selected model and reasoning variant for each agent. New sessions reuse that selection when it is still available; open the command palette and choose model (also searchable as models) or variant to change it.
Xulia starts with build and read-only plan modes. Tab selects the next mode and Shift+Tab the previous one. Modes can choose a different model per provider in ~/.xulia/config.json (or $XULIA_CONFIG):
{
"defaultMode": "build",
"modes": [
{ "name": "plan", "readOnly": true, "models": { "codex": { "model": "gpt-5.5", "variant": "high" } } },
{ "name": "fast", "models": { "claude": { "model": "haiku" }, "opencode": { "model": "provider/model-id" } } }
]
}Configured build and plan entries override their defaults; other entries are appended in the order shown. A missing provider entry keeps the session's current model.
Keyboard
| Key | Action |
| --- | --- |
| Enter | Send message |
| Shift+Enter | Insert newline |
| Ctrl+N | Create session |
| Ctrl+K | Open command palette |
| Ctrl+P | Search sessions |
| Ctrl+T | Toggle the latest completed thought |
| Tab | Select next mode |
| Shift+Tab | Select previous mode |
| Left/Right | Switch active panel |
| Esc | Close dialog or cancel the selected turn |
| Ctrl+C | Exit |
Open the searchable command palette to run new, sessions, archives, archive, worktree, model, copy, variant, rename, delete, clear, cancel, usage, thought, tool, or help. model groups model listing and cache refresh, worktree groups listing, creation, and deletion, and copy copies the current path, branch, or worktree name when available. The message input also accepts /sessions, /archives, and /archive directly.
Model lists are cached per agent and project for 24 hours. Choose model, then refresh, to refresh every available provider or one selected provider.
clear starts a fresh native agent context while preserving the local transcript. delete removes xulia's local session record and does not delete the provider CLI's own history.
archive removes the current session from the sidebar without deleting its transcript. Choosing a result from archives restores and opens it.
Development
bun install
bun run start
bun test
bun run typecheck