strIDEterm organizes your shells, AI coding agents, code reviews, Docker, and Git into workspaces you can access from anywhere — no more chaos across terminals, just focused work.
- Workspaces - organize projects into separate workspaces, each with its own terminal tabs, working directory, and settings
- Tab Templates - quickly add Shell, Claude Code, Codex, Gemini CLI, GitHub Copilot, Dev Server, Files, and other preset tabs
- File Manager - browse, preview, and edit files with an expandable tree, resizable panels, and right-click context menu (copy, rename, delete)
- Embedded Browser - open web pages directly in a tab with URL bar and navigation controls
- Profiles - switch between different sets of workspaces (e.g. Work, Personal, Client projects) with colored profile bar
- Split Layouts - arrange terminals in columns, rows, or a grid — see everything at once without switching tabs
- Git Integration - branch info, dirty count, commit log, worktree creation, and Lazygit support
- Multi-repo Workspaces - group sibling repositories (e.g. microservices) under one workspace via
gitRoots; Git pane shows a repo switcher above the tabs, and a dedicated Bulk sub-tab runs Fetch all / Pull all (ff-only) across every repo with per-row status. Single-repo behavior is unchanged whengitRootsis empty or has a single entry. - Azure DevOps PR Review - pull request inbox grouped by repo, managed review workspaces, AI agent integration (review + fix code), push & publish workflow, and MCP bridge — see docs
- GitHub PR Review - pull request inbox, managed review workspaces with local checkout, comment and review submission (Approve / Request Changes / Comment), push & publish workflow, and MCP bridge for AI agents — see docs
- Agent Task Runner - supervised coding loop with Worker + Judge agents (Claude Code, Codex CLI, Gemini CLI, or GitHub Copilot for either role): auto-detects project verification commands, runs deterministic checks between rounds, git-aware judge evaluation, periodic context refresh (shower mode), and a Dashboard UI for monitoring progress — see docs
- Docker Manager - list containers, run actions, open shells, and stream logs
- SSH Support - connect to remote machines from a saved host book or ad-hoc, with built-in key manager, host key TOFU verification,
~/.ssh/configimport, SSH agent support, jump hosts, and three launch modes (built-in, systemssh, or WSL) — see docs - Remote Access - access your workspace from any device via LAN or Cloudflare tunnel with QR code
- Telegram Bot - forward strIDEterm alerts to a Telegram chat and reply / tap inline buttons to drive the app from your phone — start a task, pause / resume agents, capture screenshots, fetch task files, open a PR review, all over Telegram's long-polling API (no webhook, no public tunnel) — see docs
- Plugins - extend functionality with plugins (Docker Ops and System Monitor built-in)
- Finish Notifications - know when a command or agent finishes without watching the screen:
- Audio ding when focused, system notification when in background
- OSC 133 shell integration (auto-injected for bash/zsh/PowerShell) for instant detection
- Silence-based heuristics for AI agents with configurable timing
- Optional notification hooks for Claude Code, Gemini CLI, Codex CLI, and GitHub Copilot CLI — one click in Settings enables instant idle/waiting alerts. Codex requires v0.121.0+ on Windows; Copilot requires v1.0.32+.
- Tunable per user via settings or environment variables
- Keyboard Shortcuts - navigate workspaces, tabs, and layouts entirely from the keyboard for a fast, mouse-free workflow
- Light/Dark Theme - full theme support including terminal colors and title bar
- Drag & Drop - reorder workspaces and tabs by dragging
| Welcome Screen | Add Workspace | Create Workspace |
|---|---|---|
![]() |
![]() |
![]() |
| Notifications | Remote Access | Lazydocker |
|---|---|---|
![]() |
![]() |
![]() |
Download the latest release — pre-built installers are available for all major platforms:
| Platform | Format |
|---|---|
| Windows | NSIS installer (.exe) + portable |
| macOS | DMG (.dmg) — x64 and arm64 |
| Linux | AppImage (.AppImage) + Debian package (.deb) |
Nightly builds from the latest master are also published on the Releases page.
Code signing: the Windows installer is code-signed. macOS DMGs and Linux artifacts are not currently signed/notarized — on first launch macOS Gatekeeper will require System Settings → Privacy & Security → Open Anyway (or
xattr -dr com.apple.quarantine strIDEterm.app), and Linux package managers may warn about the unsigned.deb.
The snippets below resolve the latest release tag from the GitHub API and download the matching artifact. They produce the same installers as clicking the buttons above.
Linux — AppImage (universal)
VER=$(curl -fsSL https://api.github.com/repos/jstradej/strideterm/releases/latest | grep -m1 '"tag_name":' | cut -d'"' -f4 | sed 's/^v//')
curl -fL -o strIDEterm.AppImage \
"https://github.com/jstradej/strideterm/releases/latest/download/strIDEterm-${VER}.AppImage"
chmod +x strIDEterm.AppImage
./strIDEterm.AppImageAppImage requires FUSE. On Ubuntu 24.04+ install libfuse2t64, on older Debian/Ubuntu install libfuse2. To skip FUSE entirely, launch with ./strIDEterm.AppImage --appimage-extract-and-run.
Linux — Debian / Ubuntu (`.deb`)
VER=$(curl -fsSL https://api.github.com/repos/jstradej/strideterm/releases/latest | grep -m1 '"tag_name":' | cut -d'"' -f4 | sed 's/^v//')
curl -fL -o /tmp/strideterm.deb \
"https://github.com/jstradej/strideterm/releases/latest/download/strideterm_${VER}_amd64.deb"
sudo apt install /tmp/strideterm.deb
stridetermmacOS — Apple Silicon (arm64)
VER=$(curl -fsSL https://api.github.com/repos/jstradej/strideterm/releases/latest | grep -m1 '"tag_name":' | cut -d'"' -f4 | sed 's/^v//')
curl -fL -o strIDEterm.dmg \
"https://github.com/jstradej/strideterm/releases/latest/download/strIDEterm-${VER}-arm64.dmg"
open strIDEterm.dmgmacOS — Intel (x64)
VER=$(curl -fsSL https://api.github.com/repos/jstradej/strideterm/releases/latest | grep -m1 '"tag_name":' | cut -d'"' -f4 | sed 's/^v//')
curl -fL -o strIDEterm.dmg \
"https://github.com/jstradej/strideterm/releases/latest/download/strIDEterm-${VER}.dmg"
open strIDEterm.dmgWindows — installer (PowerShell)
$ver = (Invoke-RestMethod https://api.github.com/repos/jstradej/strideterm/releases/latest).tag_name.TrimStart('v')
Invoke-WebRequest -Uri "https://github.com/jstradej/strideterm/releases/latest/download/strIDEterm-Setup-$ver.exe" -OutFile strIDEterm-Setup.exe
Start-Process .\strIDEterm-Setup.exeWindows — portable (PowerShell)
$ver = (Invoke-RestMethod https://api.github.com/repos/jstradej/strideterm/releases/latest).tag_name.TrimStart('v')
Invoke-WebRequest -Uri "https://github.com/jstradej/strideterm/releases/latest/download/strIDEterm-$ver-win-x64.exe" -OutFile strIDEterm.exe
.\strIDEterm.exeBuilding from source is for contributors — see the Development Guide.
All state is stored in ~/.strideterm/:
strideterm-state.json- workspaces, profiles, settings, tab templateslogs/- structured application logs (winston, configurable level)plugins/- user plugins directory
Settings are accessible via the gear icon in the sidebar (General, Tab Templates, About tabs). strIDEterm checks for updates on startup and shows available releases in the About tab.
You can run multiple strIDEterm instances side by side (e.g. a packaged EXE and a dev build) by giving each its own data directory:
# Packaged app
strideterm.exe --data-dir C:\Users\me\.strideterm-dev
# Dev mode
STRIDETERM_DATA_DIR=~/.strideterm-dev npm run dev:electron
# Or pass it directly to Electron
npx electron . --data-dir ~/.strideterm-devEach data directory gets its own state file, logs, credentials, and single-instance lock. The window title shows the directory name as a suffix so you can tell instances apart. --data-dir takes precedence over the STRIDETERM_DATA_DIR environment variable.
strIDEterm can expose the workspace over HTTP/WebSocket to another device.
# Default: accessible on LAN
npm start
# Desktop-only (no LAN access)
STRIDETERM_REMOTE_HOST=127.0.0.1 npm startFrom another device: http://<your-lan-ip>:43123/?token=<token>
Security: treat the remote token like a password. Use LAN mode only on trusted networks.
strIDEterm can forward workspace alerts to a Telegram chat and let you reply to act on them — start a task, pause / resume agents, capture screenshots, fetch task files, open a PR review. The whole feature uses Telegram's getUpdates long-polling API, so the strIDEterm machine only needs outbound HTTPS to api.telegram.org (no public webhook, no Cloudflare tunnel).
- Talk to @BotFather in Telegram →
/newbot→ copy the token - Send
/startto your new bot from your account - Open Settings → Telegram, paste the token, click Detect to find the chat, save
The Telegram tab in the notification panel shows each connection's status, poll interval, and forward filter at a glance, with a one-click Configure shortcut. From the bot, /menu is the recommended entry point on mobile — it gives one-tap access to status, new task, screenshot, workspaces, and help.
The bot token is stored encrypted via the OS keychain, the chat-ID allowlist is enforced on every incoming update, and the Get-file flow refuses paths that resolve outside the task workspace's cwd. See Telegram docs for the full feature reference, security model, and technical overview.
strIDEterm can run a supervised coding loop where a Worker agent implements your task while a Judge agent independently verifies the results. Worker and Judge can each be Claude Code, Codex CLI, Gemini CLI, or GitHub Copilot — mix and match (e.g. Claude worker + Copilot judge). Between rounds, the runner executes deterministic checks (tests, lint, build) and uses git diffs to give the judge full context.
- Create a task workspace from the sidebar context menu
- Pick the Worker and Judge providers and models (or use a custom CLI command)
- Describe what you want built — verification commands are auto-detected from your project
- Press Start — the Worker codes, checks run, the Judge reviews, repeat until done
Key features: auto-detected verify commands, TODO/WORK_LOCK file protocol, periodic context refresh (shower mode) for long tasks, and a Dashboard tab showing round-by-round progress with check results and judge feedback.
Requires at least one of Claude Code CLI (claude), Codex CLI (codex), Gemini CLI (gemini), GitHub Copilot CLI (copilot), or OpenCode (opencode) on your PATH. See Agent Task Runner docs for full details.
strIDEterm integrates with each supported agent CLI's hook system so you get instant alerts when an agent finishes a turn or needs input — no polling, no silence timers. One-click setup per provider in Settings → Notifications:
| Provider | Config location | Events registered | Notes |
|---|---|---|---|
| Claude Code | ~/.claude/settings.json |
Notification, Stop, SubagentStop, UserPromptSubmit | Widest event coverage |
| Gemini CLI | ~/.gemini/settings.json |
AfterAgent, Notification, BeforeAgent | Event names auto-mapped to Claude aliases |
| Codex CLI | ~/.codex/hooks.json + [features] codex_hooks = true in ~/.codex/config.toml |
Stop, UserPromptSubmit | Requires Codex CLI 0.121.0+ on Windows (PR #17268) |
| GitHub Copilot | ~/.copilot/config.json (top-level hooks key) |
sessionEnd, userPromptSubmitted | Requires Copilot CLI 1.0.32+. Respects COPILOT_HOME env var override |
| OpenCode | ~/.config/opencode/config.json (Linux/macOS), %AppData%\opencode\config.json (Windows) |
Stop, UserPromptSubmit | Respects OPENCODE_HOME env var override |
All providers share a single notification script (~/.strideterm/hooks/notify.mjs) that posts events to a local HTTP endpoint embedded in strIDEterm. The script is written automatically on startup, so you never need to edit it by hand. Settings also exposes a Test hook button that runs an end-to-end probe and reports delivery latency.
Without hooks the Task Runner falls back to a silence-based heuristic (8 s default) for all four providers. OSC 133 shell integration only fires when a shell returns to its prompt, so for interactive agent sessions (which never return to a prompt between turns) it doesn't help — hooks carry the primary signal. Hooks are optional but strongly recommended for long Judge reasoning passes where silence timers add up.
Copilot note: if the user has disableAllHooks: true set in ~/.copilot/config.json (Copilot's global kill-switch), Settings shows a distinct "Configured — hooks disabled" badge so you know installed entries won't fire until you clear the flag.
Built-in plugins (under plugins/):
- Azure DevOps — workspace template for the Azure DevOps PR inbox
- GitHub — workspace template for the GitHub PR inbox
- Docker Ops — container management workspace
- System Monitor — system dashboard
User plugins: ~/.strideterm/plugins/
See Plugin Development Guide for details.
Building from source, running tests, and the project architecture are documented separately so this README stays focused on using the app:
- Development Guide — requirements, dev startup, build & test commands, packaging notes
- Architecture — runtime/adapter/renderer breakdown and key patterns
- Contributing — commit and PR conventions






