terminal.ormus.solutions

Ormus Terminal

A terminal built for vibe-coding with Claude.

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.

Intention: the terminal disappears; the conversation stays. Every feature exists to remove a tax that AI-coding pays today.

What's shipped

Twelve features, all live in the local binary. Each maps to a single keyboard shortcut or a single setting.

Ctrl-click

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.

Ctrl+Alt+C

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.

Ctrl-click

URL stitching across rows

When a URL hard-wraps at the right edge, the click follows the full link instead of the visible half.

Quad-click

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.

Ctrl+Shift+P

Skill palette

Fuzzy-find any user-invocable skill from ~/.claude/skills/ and paste /skill-name into the focused tab. Discoverability for slash commands.

Ctrl+Alt+S

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.

Ctrl+Alt+M

Bookmarks

Drop pins in long output. Ctrl+Shift+M opens the list — click an entry to scroll back to it. Session-local.

Ctrl+G / Home / End

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.

automatic

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.

Super+V

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).

automatic

50k scrollback default

Bumped from alacritty's 10 000 — long Claude sessions don't lose history.

automatic

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.

Migrating from cosmic-term? Copy ~/.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:

Contribute

Source: github.com/HermeticOrmus/ormus-term (private during alpha). Upstream: pop-os/cosmic-term.

The principles that govern every change: