A rich web UI for Claude Code. Run multiple Claude sessions side by side, review diffs and commits in real time, browse your project files, and pick up right where you left off -- all from a single browser tab.
- Live diff viewer -- See every file change as Claude works, with syntax highlighting and line-by-line references
- Parallel sessions -- Run multiple Claude Code panes side by side, each with its own terminal and working directory
- Reply suggestions -- One-click follow-up suggestions appear automatically after each response
- Session resume -- Pick up any previous conversation by typing
/resume; layout and context are fully restored - Readable conversation -- Markdown rendering, Mermaid diagrams, inline agent results, syntax highlighting, and clickable file paths
- File explorer & commit history -- Browse code and review git commits without leaving the browser
- Web editor integration -- Edit files in a browser-based textarea when Claude invokes
$EDITOR - Persistent workspace -- Tab layout, pane sizes, and sessions survive browser closes and server restarts
Download a pre-built binary from the Releases page and place it somewhere in your PATH.
Or install with Homebrew:
brew install ryotarai/tap/orielOr install with mise:
mise use -g github:ryotarai/orielTo build from source instead:
git clone https://github.com/ryotarai/oriel.git
cd oriel
make build # requires Go 1.26+ and Node.js 18+
# produces ./bin/orielPrerequisite: Claude Code CLI must be installed and available as claude in your PATH.
Supported platforms: macOS (Apple Silicon, Intel), Linux (x86_64, ARM64)
cd /path/to/your/project
orielThe server starts, prints a URL with an auth token, and opens your browser automatically.
Renders Claude's responses with full markdown, syntax-highlighted code blocks, Mermaid diagrams, expandable tool use/result details, and clickable file path links. Agent tool results are rendered as full markdown instead of collapsed blocks, so you can read sub-agent output inline. Use Cmd/Ctrl + F to search within the conversation. Select any text and press r to insert it as a quoted reply in the terminal. Copy buttons on messages and code blocks let you grab content quickly. A floating "New Messages" indicator appears when you're scrolled up and new messages arrive.
After Claude finishes responding, Oriel automatically generates a handful of suggested follow-up messages. Click any suggestion to send it instantly -- no typing required. Great for common next steps like requesting tests, commits, or refinements.
Each pane has four switchable tabs -- Conversation, Diff, Files, and Commits -- so you can jump between Claude's output, file changes, the project tree, and git history without losing your place. Scroll positions are preserved across tab switches.
Shows all file changes made during the session with per-file unified diffs and syntax highlighting. The Diff tab badge shows the number of changed files at a glance. Hover over any line to send a reference (@path:line) directly to Claude.
Browse the working directory tree and view file contents with syntax highlighting. Markdown files can be toggled between raw source and rendered preview. A "Changed Only" filter lets you narrow the tree to modified files. Like the diff viewer, every line has a one-click button to ask Claude about it.
View recent git commits with full messages and diffs. Quickly review what Claude (or you) committed during the session.
Organize your work into tabs, each containing one or more Claude Code panes. Drag dividers to resize panes, drag tabs to reorder them, and double-click a tab to rename it. Each pane runs its own independent Claude session with its own working directory. The active tab is persisted in the URL hash so refreshing preserves your position.
Type /resume in the terminal to pick up a previous conversation. Oriel restores the terminal output, conversation history, and session context so you can continue exactly where you left off.
Your tab layout, pane sizes, working directories, and session associations are saved to a local SQLite database. Close the browser, restart the server -- everything is still there when you come back.
Each pane can target a different project directory. Click the folder icon in the toolbar to change it. Oriel also auto-detects when Claude enters a git worktree and updates the diff/files/commits views accordingly.
When Claude invokes $EDITOR (e.g., for interactive file editing), Oriel opens a browser-based textarea editor. Edit the content in the browser, submit, and the result is returned to Claude -- no terminal-based editor required.
| Shortcut | Action |
|---|---|
| Enter | Newline (multiline input) |
| Cmd/Ctrl + Enter | Submit to Claude |
| Ctrl + G | Open web textarea editor (pre-populated with current input) |
| r (with text selected) | Quote-reply selected text in the terminal |
Enter/Cmd+Enter behavior can be swapped in Settings.
| Shortcut | Action |
|---|---|
| Cmd/Ctrl + Arrow Left/Right | Move focus between panes |
| Cmd/Ctrl + 1-9 | Focus pane by number |
| Shift + Cmd/Ctrl + 1-9 | Switch to tab by number |
| Shortcut | Action |
|---|---|
| Cmd/Ctrl + F | Search in conversation |
| Enter (in search) | Next search result |
| Shift + Enter (in search) | Previous search result |
| Escape (in search) | Close search |
| Flag | Default | Description |
|---|---|---|
-listen-addr |
localhost:9111 |
Address and port to listen on |
-command |
claude |
CLI command to run in the terminal |
-no-open |
false |
Don't auto-open the browser on startup |
-state-db |
~/.config/oriel/state.sqlite3 |
Path to the SQLite state database |
-log-level |
info |
Log verbosity: debug, info, warn, error |
| Variable | Default | Description |
|---|---|---|
ORIEL_CONFIG_DIR |
~/.config/oriel |
Override the configuration directory (config.json, state.sqlite3) |
ORIEL_LOCAL_DIR |
~/.local/oriel |
Override the local data directory (debug.log, images/) |
# Listen on a different port
oriel -listen-addr localhost:3000
# Use a specific Claude Code binary
oriel -command /usr/local/bin/claude
# Don't auto-open browser (useful for remote/SSH)
oriel -no-openThe server generates a random authentication token at startup. The token is included in the URL printed to the terminal and stored as an HTTP-only cookie after the first visit. Only users with the token can access the UI.
By default, the server listens on localhost only. To expose it on a network interface, change -listen-addr accordingly and be aware of the security implications.