Why another terminal
Most terminals are designed for shell-driven work. Ormus Terminal is designed for AI-driven work — long Claude Code sessions, streamed tool-call output, hard-wrapped URLs, voice-to-prompt loops.
It's a hard fork of pop-os/cosmic-term (libcosmic + alacritty_terminal + cosmic-text), kept GPL-3.0. Generic fixes flow upstream; opinionated features stay here.
What's shipped
Twelve features, all live in the local binary. Each maps to a single keyboard shortcut or a single setting.
file:line click-to-jump
Click any src/foo.rs:42:8 in output → opens in
$EDITOR at the right line. Works for code, codium,
cursor, vim, nvim, helix, subl, nano. Falls back to xdg-open.
Copy as one line
Strips newlines so hard-wrapped URLs and bash commands paste clean. The everyday "I had to zoom out to copy this" tax, gone.
URL stitching across rows
When a URL hard-wraps at the right edge, the click follows the full link instead of the visible half.
Code-block click-to-copy
Quadruple-click any background-tinted region (Claude code
blocks, bat, delta, gh pr view)
→ selects + auto-copies the whole block.
Skill palette
Fuzzy-find any user-invocable skill from
~/.claude/skills/ and paste
/skill-name into the focused tab. Discoverability
for slash commands.
Transcript export
Saves the full scrollback of the focused tab as Markdown to
~/Downloads/ormus-term-<tab>-<ts>.md.
Archive a Claude session in one keystroke.
Bookmarks
Drop pins in long output. Ctrl+Shift+M opens the list — click an entry to scroll back to it. Session-local.
Keyboard nav
Ctrl+G next find match, Ctrl+Shift+G prev, Ctrl+Home top of scrollback, Ctrl+End bottom. No more re-typing search queries.
Tab title from running command
Polls /proc every 2s and labels each tab with its
foreground command (claude, vim,
cargo) so you can tell multiple Claude sessions
apart at a glance.
Voice paste
Speak a prompt, hit Super+V, the transcript bracketed-pastes into the focused tab. Bring-your-own recording script (recipe ships with the source).
50k scrollback default
Bumped from alacritty's 10 000 — long Claude sessions don't lose history.
cwd inheritance default
New tab opens in the active tab's working directory.
cd somewhere && Ctrl+Shift+T just works.
Install
Pre-alpha. Linux only (the COSMIC desktop is the primary target, but the binary runs on any Wayland/X11 desktop). Build from source:
git clone https://github.com/HermeticOrmus/ormus-term ~/projects/ormus-term cd ~/projects/ormus-term cargo build --release --bin ormus-term install -Dm0755 target/release/ormus-term ~/.local/bin/ormus-term
Then drop the desktop entry, register the icon, and (on COSMIC)
override the Super+T system action to launch
ormus-term:
install -Dm0644 target/xdgen/solutions.ormus.OrmusTerm.desktop \
~/.local/share/applications/solutions.ormus.OrmusTerm.desktop
xdg-mime default solutions.ormus.OrmusTerm.desktop x-scheme-handler/terminal
# COSMIC: copy default system_actions and replace cosmic-term with ormus-term
cp /usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/system_actions \
~/.config/cosmic/com.system76.CosmicSettings.Shortcuts/v1/system_actions
sed -i 's|Terminal: "cosmic-term"|Terminal: "ormus-term"|' \
~/.config/cosmic/com.system76.CosmicSettings.Shortcuts/v1/system_actions
The repo also exposes just install-user which does
the binary + desktop + icon install in one command.
~/.config/cosmic/com.system76.CosmicTerm/ to
~/.config/cosmic/solutions.ormus.OrmusTerm/ — same
schema, settings carry over.
Voice paste setup
The terminal is intentionally agnostic about how audio gets recorded or transcribed. Super+V shells out to a user-owned wrapper script and bracketed-pastes its stdout.
1. The wrapper script
Save as ~/.local/bin/whisper-paste and
chmod +x:
#!/usr/bin/env bash
set -euo pipefail
DURATION=${VOICE_PASTE_SECONDS:-8}
MODEL=${VOICE_PASTE_MODEL:-base.en}
TMP_WAV=$(mktemp -t voice-XXXXXX.wav)
TMP_DIR=$(mktemp -d -t voice-XXXXXX)
trap 'rm -f "$TMP_WAV"; rm -rf "$TMP_DIR"' EXIT
arecord -q -d "$DURATION" -f cd -t wav "$TMP_WAV"
whisper "$TMP_WAV" --model "$MODEL" --language en \
--output_format txt --output_dir "$TMP_DIR" 2>/dev/null
base=$(basename "$TMP_WAV" .wav)
cat "$TMP_DIR/$base.txt"
2. Wire it into the terminal
echo -n '"$HOME/.local/bin/whisper-paste"' > \
~/.config/cosmic/solutions.ormus.OrmusTerm/v1/voice_paste_command
3. Use it
Focus a Claude tab → press Super+V → speak → transcript appears at the cursor. Hit Enter to send.
Roadmap
What's next, in priority order:
-
Diff highlighting — paint
+/-lines in green/red even when the source program didn't emit ANSI. -
Send-selection-to-claw
(Super+Shift+C) — pipe selection to
claw-rs --print, paste response back. - OSC 133 semantic prompts — jump-to-prev-prompt with Alt+↑; foundation for a "command-done" notifier.
- Pause-on-tool-call — flash the headerbar when Claude pauses for permission.
- Tab detach — drag a tab between windows. Requires multi-window-in-process refactor first.
- Inline image preview — render data-URLs and base64 PNGs via Sixel / Kitty graphics.
Contribute
Source: github.com/HermeticOrmus/ormus-term (private during alpha). Upstream: pop-os/cosmic-term.
The principles that govern every change:
- Empower, don't extract. No tracking, no dark patterns, no addiction loops.
- The interface disappears. Every chord serves a single, clearly named purpose.
- Generic fixes go upstream. If a change improves cosmic-term for everyone, it's a PR there. If it's opinionated about AI workflows, it stays here.
- One feature, one PR. Small, focused, reviewable.