aiTermA terminal built for AI workflows — not AI built into a terminal.Documentation & Screenshots |
A terminal emulator built with Tauri 2 + Svelte 5, designed to make terminal-based AI workflows better and more organized. aiTerm is not "AI in a terminal" — there is no built-in LLM, no chat sidebar, no magic autocomplete. Instead, it's a proper terminal that understands what AI coding agents are doing and gives you the tools to manage them.
Our initial focus is on Claude Code integrations:
aiTerm is fully written by AI (Claude), with human engineering direction and architectural rails.
Runs on macOS, Windows, and Linux.
Other terminals give you tabs and splits. aiTerm gives you a system for managing the chaos of real AI-assisted development — where you're juggling multiple Claude sessions across projects, SSHing into servers, and trying to remember what you were doing three hours ago.
Group your terminals by project. Each workspace has its own pane layout, tabs, and context. Switch between "ACME Project" and "Production Server" without losing your place in either.
Each tab has its own markdown notes panel. Track TODOs, paste connection strings, jot down what you're debugging — right next to the terminal doing the work. Workspace-level notes too.
Click any file path in terminal output to open it in an editor tab. Works over SSH too — remote files load transparently via SCP. Syntax highlighting for 50+ languages, image/PDF preview, and Claude Code's diff review all live alongside your terminal tabs.
Duplicate a tab and get everything: scrollback history, CWD, SSH session, Claude resume command, tab name, notes, trigger variables. Or shallow clone for just the name and CWD. New tabs automatically inherit the workspace's most common working directory.
Tabs auto-update from terminal titles (OSC 0/2), but you can override with your own name — or combine both. Rename a tab "billing API debug" and it stays that way even as the terminal title changes underneath.
Every tab maintains its own shell history. Clone a tab and its history comes with it. No more scrolling through one giant shared history trying to find the command you ran in a specific context.
Reboot your machine, restart aiTerm — everything comes back. Terminal scrollback, tab layout, workspace state. Configure triggers to automatically resume Claude Code sessions, reconnect SSH sessions to the right remote CWD, and pick up exactly where you left off.
Done with a Claude session but not ready to lose it? Archive the tab. It disappears from your tab bar but preserves everything — scrollback, notes, trigger state. Restore it later and resume right where you left off. Perfect for when /rename and --continue aren't enough.
Triggers watch your terminal output for patterns — Claude asking a question, a long build finishing, context compaction starting. Get notified via in-app toasts or OS notifications, with deep-linking straight to the right workspace and tab.
l command wraps ls to emit clickable file links; underline appears on hoverl shell function — always available in local shells; also injectable into remote shells via context menu~/.bashrc/~/.zshrc installationCmd+O — file dialog that defaults to the active terminal's CWD.bashrc, Dockerfile), and shebang lineCmd+F, positioned at top of editorCmd+S writes local or remote via SCP; dirty indicator in tabwindow.confirm) for unsaved changes~/.claude/ide/ and registers in ~/.claude.json for automatic connectionaiterm-dev with display name "aiTermDev"notify (toast or OS notification), send_command (write to PTY), enable_auto_resume, set_tab_state%varName), persisted per tab&&, ||, !, ==, != operatorsauto (in-app when focused, OS when not), in_app, native, disabled| Shortcut | Action |
|---|---|
Cmd+T |
New tab |
Cmd+W |
Close tab (or pane if last tab) |
Cmd+1–9 |
Switch to tab |
Cmd+Shift+[ |
Previous tab |
Cmd+Shift+] |
Next tab |
Cmd+Shift+T |
Duplicate tab |
Cmd+Shift+R |
Reload tab (duplicate + close) |
Cmd+D |
Split pane (duplicate tab) |
Cmd+N |
New workspace |
Cmd+O |
Open file in editor tab |
Cmd+S |
Save file (editor tabs) |
Cmd+F |
Find/replace (editor tabs) |
Cmd+, |
Preferences |
Cmd+/ |
Help |
Cmd+Shift+N |
Notes panel toggle |
All platforms require:
xcode-select --install)# Install dependencies
npm install
# Full app dev (frontend + Rust backend + MCP bridge)
npm run tauri:dev
# Frontend only (no Tauri)
npm run dev
# Type checking
npm run check
# Rust compilation check (run from src-tauri/)
cargo check
npm run tauri:build
Build output by platform:
| Platform | Format | Output path |
|---|---|---|
| macOS | DMG | src-tauri/target/release/bundle/dmg/ |
| Windows | NSIS installer | src-tauri/target/release/bundle/nsis/ |
| Linux | .deb | src-tauri/target/release/bundle/deb/ |
After building on macOS, set the DMG volume icon:
./scripts/set-dmg-icon.sh
GitHub Actions workflows build automatically on push to main and on tags:
.github/workflows/build-linux.yml — Ubuntu, produces .deb.github/workflows/build-windows.yml — Windows, produces NSIS .exe installersrc/ # Frontend (Svelte 5 / TypeScript)
├── routes/
│ ├── +layout.svelte # App shell, keyboard shortcuts, modals
│ └── +page.svelte # Main terminal/editor view, portal rendering
└── lib/
├── components/
│ ├── editor/ # EditorPane, DiffPane (CodeMirror 6)
│ ├── terminal/ # TerminalPane, TerminalTabs
│ ├── workspace/ # WorkspaceSidebar
│ └── pane/ # SplitPane
├── stores/ # Svelte 5 runes stores
│ ├── workspaces.svelte.ts
│ ├── terminals.svelte.ts
│ ├── preferences.svelte.ts
│ ├── triggers.svelte.ts
│ ├── activity.svelte.ts
│ ├── claudeCode.svelte.ts # Claude Code IDE tool handler
│ ├── editorRegistry.svelte.ts # Editor state tracking
│ ├── notifications.svelte.ts # Command completion notifications
│ ├── toasts.svelte.ts
│ └── notificationDispatch.ts
├── triggers/
│ ├── defaults.ts # Built-in Claude Code triggers
│ └── variableCondition.ts # Variable expression parser
├── themes/
│ └── index.ts # Theme definitions + application
├── utils/
│ ├── editorTheme.ts # Tokyo Night CodeMirror theme
│ ├── filePathDetector.ts # xterm.js link provider
│ ├── languageDetect.ts # Extension → language + CM6 loader
│ ├── openFile.ts # Orchestrates file open flow
│ ├── shellIntegration.ts # Remote shell hook snippets
│ ├── promptPattern.ts # PS1-like pattern matching
│ ├── platform.ts # OS detection, modifier key helpers
│ └── ansi.ts # ANSI escape stripping
└── tauri/
├── commands.ts # invoke() wrappers
└── types.ts # TypeScript interfaces
src-tauri/src/ # Backend (Rust)
├── lib.rs # App setup, command registration
├── commands/
│ ├── workspace.rs # State CRUD
│ ├── editor.rs # File read/write, SCP, editor tab creation
│ ├── terminal.rs # PTY spawn/write/resize/kill
│ ├── window.rs # Multi-window management
│ └── claude_code.rs # Claude Code tool response handler
├── claude_code/ # Claude Code IDE integration
│ ├── server.rs # WebSocket + SSE MCP server
│ ├── protocol.rs # JSON-RPC protocol, tool definitions
│ └── lockfile.rs # Lock file + MCP server registration
├── state/
│ ├── workspace.rs # Data structures
│ ├── app_state.rs # Global state container
│ └── persistence.rs # JSON file storage
└── pty/
└── manager.rs # PTY management, shell integration injection
| Layer | Technology |
|---|---|
| Frontend | Svelte 5 (runes), SvelteKit, TypeScript |
| Backend | Rust, Tauri 2 |
| Terminal | xterm.js (FitAddon, SerializeAddon, WebLinksAddon) |
| Editor | CodeMirror 6 (+ MergeView for diffs) |
| PTY | portable-pty |
| State | parking_lot RwLock |
Workspace
├── id, name
├── panes: Pane[]
├── active_pane_id
├── split_root: SplitNode (binary tree)
└── notes: WorkspaceNote[]
Pane
├── id, name
├── tabs: Tab[] # terminal, editor, or diff tabs
└── active_tab_id
Tab
├── id, name, custom_name
├── tab_type: 'terminal' | 'editor' | 'diff'
├── pty_id # terminal tabs
├── editor_file # editor tabs (path, remote info, language)
├── diff_context # diff tabs (request_id, file_path, old/new content)
├── scrollback
├── notes, notes_open, notes_mode
└── trigger_variables
Trigger
├── pattern (regex), match_mode (regex/plain_text/variable)
├── actions, variables
├── enabled, cooldown, workspaces scope
└── default_id # links to built-in template
Preferences
├── theme, custom_themes
├── font_size, font_family, cursor_style, cursor_blink
├── clone_*, notification_mode, shell_integration
├── notification_sound, notification_volume, toast_duration
├── prompt_patterns, triggers
├── claude_code_ide
└── workspace sidebar options
Default: Tokyo Night. 10 built-in themes + custom theme support.
--bg-dark: #1a1b26 /* main background */
--bg-medium: #24283b /* elevated surfaces */
--bg-light: #414868 /* borders, hover */
--fg: #c0caf5 /* primary text */
--fg-dim: #565f89 /* secondary text */
--accent: #7aa2f7 /* interactive elements */