YEN Terminal

GPU-accelerated terminal for macOS (13.0+ required). Install, configure (VT100 / xterm), and GLHF.

YEN is an easy-to-customize, fast, and performant Terminal-First IDE. I use it to build YEN! Very meta, I know. Feedback is always welcome: ping @yenFTW.

Summarize via AI:

Get Started

StepAction
1. DownloadOpen the .dmg file
2. InstallDrag YEN to Applications
3. First launchRight-click YEN.app, click Open
4. UpdatesAutomatic via Sparkle (manual check plus optional automatic checks)

Terminal History

Terminals have evolved dramatically over five decades. Each generation added capabilities — but also complexity, overhead, and distance from what makes a terminal great.

1978 — VT100

ANSI escape codes. Hardware standardization. The foundation every terminal still builds on.

1984 — xterm

Software terminal for X11. Proved the hardware could be virtualized without losing capability.

2008 — iTerm2

Tabs, profiles, split panes. macOS power users finally had options — but feature creep had begun.

2017 — Hyper

Electron. Web tech. Plugins. Beautiful themes — with the heavier footprint of a bundled browser runtime.

2021 — Warp and others

AI assistance, cloud sync, and account-based workflows became common. Useful for some teams, but not the privacy baseline YEN wants for a terminal.

2026 — YEN

Back to fundamentals. GPU rendering. Native speech-to-text. No cloud lock-in. No account required for local desktop use. No AI watching what you type. Just a fast terminal that respects your privacy.

YEN doesn't reject progress — it rejects unnecessary complexity. Everything I add must make you faster without making you dependent on cloud services or AI subscriptions.

Terminal IDE

YEN starts with a native macOS terminal and layers IDE workflows around it. No Electron, no bundled Chromium runtime, and no second app to switch to.

The approach

Core actions stay in terminal context. Features that need richer UI (such as Settings, Scratchpad, and overlays) use native macOS panels anchored to active terminal workflow instead of detached browser workspaces.

CapabilityShortcut
GPU terminal — Metal rendering, 60 FPSAlways on
Speech-to-text — on-device, 50+ languagesOption + Space
Settings — 72 curated themes, fonts, cursor, background image import, opacity, padding, notifications, split layouts, permissionsCmd + ,
File browser — browsing, syntax-aware previews, bundled static theme / flavor defaultsCmd + Shift + O
Browser preview — isolated WebKit window or split for docs, HTTPS, and localhost/loopbackCommand palette or yen web
Local weather — Open-Meteo, coordinate-first with ASCII icons, 6-hour hourly forecast, and grouped outputType weather in YEN (or yen weather in any shell)
Screenshot — save window to file and clipboardCmd + Shift + S
Tab sidebar — transient left tab rail with opt-in persistent dockingCmd + Shift + B
Scratchpad — right-side quick notes panel with seeded helper copy, click-away close, Cmd + C/Cmd + V, and highlight-to-auto-copyCmd + Shift + J
Quick Terminal — global hotkey dropdownCtrl + `
Split layout presets — 10 one-click configurationsCmd + Option + 1-0
Bundled tools — fd, rg, fzf, zoxide, bat, jq, and moreZero setup — no homebrew needed
Window state restoration — splits, tabs, positionsAutomatic
IDE workflow control plane — detect / doctor / env, search, LSP / AST, share, devcontainer / vscode, explain, verify / gate, workflow / agents, PR review + evidenceyen ide ...
Shell integration — bash, zsh, fish, elvish, nushellAutomatic
Traditional IDETerminal-First IDE (YEN)
Editor with a terminal panelTerminal with editing capabilities
Electron or web viewNative GPU rendering
Hundreds of MB at installLightweight from day one
Features you never asked forEach feature is opt-in
Cloud accounts, telemetryNo required desktop account. No desktop telemetry. Website uses anonymous aggregate analytics.

Clipboard & Paste

Cmd + C and Cmd + V work the way you expect — everywhere. Including inside vim, nano, tmux, ssh, and any TUI app that normally swallows the keystroke. Read the full story on the blog: Why Cmd+V doesn't paste in your terminal — and how YEN fixed it.

ActionWhat YEN does
Cmd + CCopies the selection. With copy-on-select on (default), releasing the mouse already copies — hold Shift to select inside TUIs that capture mouse events.
Cmd + VAlways pastes. Routed through the YEN menu action so it reaches the surface even when a TUI has the keystroke grabbed.
Paste an image (screenshot, copied picture)YEN materializes it as a temp file in a private, auto-pruned directory and pastes the path — ready to cat, cp, or hand to your editor.
Right-click in a terminalNative macOS context menu with Copy / Paste / Paste as Plain Text / Paste from Selection.

No clipboard escape sequences, no opt-in flag, no config. This is the default and only behavior — it works in stock YEN out of the box.

IDE Workflows

YEN adds IDE workflows directly to the terminal. The yen ide commands cover workspace trust, search, debugging, local LSP, verification, adapters, and PR review without pushing you into a separate editor UI.

What ships today

  • Workspace trust center over env, LSP, debugger, devcontainer, sharing, and workflow/native-task approvals with latest local audit metadata
  • Debugger status/trust summaries plus a local and SSH-backed execution baseline over shared semantic file targets, project trust, and timeline/state evidence instead of a separate debugger config system
  • Project-scoped search and the desktop Cmd + Shift + P palette search layer on macOS
  • Schema-validated workflows, first-party adapter controls, PR review workspace, and merge-conflict workspace with semantic editor targets plus delta-backed hunk previews
  • Explicit per-project LSP trust, local runtime lifecycle, and hover / definition / references / code-actions / rename requests
  • Grouped diagnostics snapshots with freshness status and bounded managed installs
  • Encrypted terminal sharing with expiry / revoke plus parser-labeled AST fallback for Python, JS/TS, Go, and Swift
  • Local devcontainer control plus explicit remote devcontainer lifecycle parity, and deterministic VS Code inventory / import with migration reports and cleanup checklists
CommandWhat you get
yen ide doctorAggregated repo health: blockers, warnings, verify / security / debugger readiness, with remediation copy in text / JSON / env
yen ide trustWorkspace trust center for env, LSP, debugger, devcontainer, sharing, and workflow runs, with status, revoke, and reset
yen ide debugLocal + SSH debugging with trust gating, file:line targets, and per-language adapter reporting (Python, Node, executables)
yen ide detect / env / history / replay / profileProject context, trusted env loading, per-project history, replay, and timing logs
yen ide searchProject-scoped search across files, symbols, content, history, diagnostics, and actions; powers the macOS Cmd + Shift + P palette and adds CODEOWNERS / git-history routing hints in repo-backed CLI search
yen ide lspLocal LSP lifecycle plus hover, definition, references, code actions, rename, and grouped diagnostics with freshness state
yen ide astPolyglot AST fallback for Python, JS / TS, Go, and Swift with parser-labeled engines; explicit no-fallback guidance for Rust / Zig
yen ide devcontainer / vscodeLocal + remote devcontainer control and deterministic VS Code inventory / import with dry-run diffs and migration-report artifacts
yen ide shareEncrypted terminal sharing over upterm / tmate with passphrase auth, read-only mode, expiry, and revoke
yen ide explain (??)Failed-command explanation with project-aware hints
yen ide testRepo-aware test runner with grouped failures, file:line jumps, rerun-failed, and debugger handoffs
yen ide verify / gateVerify + security snapshots, evidence bundles, and risk-aware approval checkpoints
yen ide format / lint / fixRepo-native quality baseline with dry-run planning, changed-file scoping, and approval gating
yen ide workflowRepo-native task discovery + execution over package, make, just, and task sources, local or remote (ssh://...)
yen agentsAdapter board for Claude / Codex sessions with workspace timeline, handoff notes, and Markdown / JSON evidence export linked to local verify, test, and PR-review artifacts
yen ide pr-reviewFocused PR diffs, hunk navigation, inline comments, and a desktop workspace launched from Cmd + Shift + P with delta-backed previews and posting + decision actions
yen ide timeline / pr-notifyLocal audit timeline, GitHub review-request notifications, and current-branch CI / build-watch status

Quick start:

Terminal
$ yen ide doctor
yen ide trust status
yen ide debug start src/app.py:12 --managed
yen ide lsp diagnostics
yen ide ast definition Widget
yen ide search verify
yen ide test run --failed
yen ide verify --quick --no-security
yen ide format run --dry-run --changed
yen ide workflow run --native package.json:test --dry-run
yen ide pr-review 123 --list-hunks
yen ide pr-review 123 --inline src/app.ts:42 --inline-body "Needs guard" --post
yen ide gate --dry-run -- git reset --hard
yen ide timeline --limit 20
yen agents timeline --tail 5
yen agents export --format json --output -

# Most subcommands accept --format json and --watch
# Most accept ssh://... and --devcontainer remote targets

On macOS, Cmd + Shift + P opens the command palette for actions and project search. It can jump straight to matching files and lines, and in trusted local repos it also launches dedicated PR review and merge-conflict workspaces.

YEN keeps these workflows local-first and explicit. Search, evidence, and review stay tied to the current workspace; remote ssh://... and --devcontainer targets stay clearly labeled; and local-only features such as --watch remain blocked instead of silently degrading.

Speech-to-Text

On-device speech-to-text — no AI services, no cloud. Hold Option + Space in any app.

Hold Option + Space in any app — YEN, Safari, VS Code, Notes, anything — speak, and release. Your words appear at the cursor. Audio never leaves your Mac. Read more on the blog.

Works on macOS 13+. On macOS 26+, YEN uses Apple's SpeechAnalyzer with DictationTranscriber, supports unlimited sessions, and can ask macOS to install missing language packs while Settings is frontmost.

In-app paste restores your previous clipboard shortly after paste; cross-app paste keeps the dictated text on the clipboard if delivery cannot be confirmed. Live Transcript Preview is available in the overlay. Translate-on-Dictate is opt-in, off by default, tied to the recognizer locale for that capture, and runs only when the selected language pair is already installed.

Recording indicator

A recording dot blinks in the menu bar while listening. Release to paste.

FeatureYEN
Privacy100% on-device (macOS Speech Recognition)
Binary sizeZero bloat — no AI models
Languages50+ (whatever macOS supports)
CompatibilityAny macOS app — Safari, VS Code, Notes, Slack, plus shell, vim, nano, ssh
CostFree forever
OfflineYes (macOS 13+, after language assets are installed)
DurationmacOS 26+: unlimited; older macOS: 60s (auto-pastes)

Pro tip: On older macOS, release and press again for longer content. Enable Launch at Login in Settings> Sounds > Speech Setup for dictation without a terminal window open.

Settings

Press Cmd + , to open Settings. The left sidebar stays on single-line rows for General, Sounds, Workspace, Themes, and Keyboard, while search, import, export, and reset live in the same window and most changes apply immediately across open tabs.

YEN Settings panel showing font, cursor, appearance, and dictation options

YEN includes 72 bundled themes with live previews and instant apply. Font, cursor, background image, opacity, and padding stay independent from theme selection. General also includes Window Border plus a background-image picker that imports PNG and JPEG assets into app-managed storage. The scope toggle below the import button sets whether the wallpaper renders per split (Each Split, the default) or as one shared backdrop behind the entire split tree (Whole Window). Workspace also exposes Tab Sidebar (Cmd + Shift + B) and Scratchpad (Cmd + Shift + J), plus Browser toggles for explicit terminal link capture and split targeting.

Sounds combines speech permissions, local speech readiness, Translate-on-Dictate controls, and per-stream notifications for General and Build. Each stream has its own sound, volume, and delivery mode (Off, Banner Only, Sound Only, Banner + Sound).

Keyboard lets you inspect conflicts and re-record editable shortcuts inline. Fixed shortcuts and duplicate-action rows stay read-only, and imported settings are validated before they apply.

Export and import include both config.yen and the Settings-managed preferences kept outside it, including workspace toggles, Browser link/split settings, theme-browser mode, Window Border, dictation preview/translation state, and notification routing. Portable exports intentionally exclude machine-local assets such as background images.

Machine-local state such as permission grants, Launch at Login, background images, and installed user themes stays on the current Mac.

In the command palette, search Settings: Themes, Settings: Sounds, Settings: Workspace, or Settings: Keyboard to open a specific tab.

YEN Settings panel showing 72 curated bundled themes with search and color previews

Advanced configuration:

Config path
~/Library/Application\ Support/com.yenchat.yen/config.yen

Tab Sidebar

Press Cmd + Shift + B to open the Tab Sidebar. In transient mode it appears as a floating left rail for the active terminal window. Use the header pin button, command palette, or Settings > Workspace to switch it into the persistent docked rail.

SurfaceWhat it shows
TransientFloating panel beside the active terminal. Esc dismisses it unless you are editing a title.
PersistentFixed-width rail docked inside standard terminal windows. Fullscreen and Quick Terminal fail closed instead of forcing the rail onscreen.
MetadataEach row can show working directory, git state, and recent task / build status from the focused split when local path data is trustworthy.
NavigationSelect a row to switch tabs. Addressable tabs also show native Cmd + 1-9 labels, and the footer includes a New Tab action.
Quick controlsDouble-click a title to rename it. Persistent mode edits inline; transient mode hands off to the native tab-title editor. Renamed titles restore with the window after relaunch. Use the color chip to set a tab color, click the pin to switch modes, and use the gear button to jump straight to Workspace settings.

When YEN cannot trust the focused split's local path context (terminal multiplexers, remote sessions, detached commands, or empty project state), the sidebar omits cwd and git summaries instead of showing guessed metadata.

Split Pane Labels

Each split pane can have a custom label displayed as a themed pill at the bottom-left corner. Open the command palette (Cmd + Shift + P) and search Rename Split Label to set or clear a label. Labels persist across window restores, tab switches, and session restarts.

Independent from terminal titles

Split labels are separate from tab / window titles. When no custom label is set, the pill shows the surface title, working directory leaf, or "Terminal" as a fallback. Labels adapt their foreground color to the terminal background for readable contrast in any theme.

BehaviorDetail
Set / clearCommand palette → Rename Split Label. Leave blank to revert to automatic.
PersistenceLabels survive window restore, force-quit recovery, and Quick Terminal sessions.
VisibilityHidden when a pane is too small (below 140 x 80 points), during drag / drop, or when hovering a URL.
ThemingPill background and foreground adapt to the terminal background color for readable contrast in any theme.

File Browser

Press Cmd + Shift + O to open the file browser in the active terminal. It does not open as a floating window or global sidebar, and it will not steal focus from another window. Browse directories, preview files, and manage the project without leaving the terminal.

Terminal-native with cd-on-quit

It runs inside the terminal with async I/O, so large directories stay responsive. Press q to exit and your shell follows the last directory you visited. Press Enter on a code file for a colorized read-only preview, or O for open-with.

FeatureDetails
Syntax-highlighted previewsCode, images, archives, videos, PDFs
Quick LookSpace for native macOS preview
Search and fuzzy find/ to search, z to jump to frequent dirs
File operationsCopy, move, delete, undo, bulk rename, archive extract
Vim + mouse navigationh / j / k / l, visual selection, click, scroll
Git status indicatorsModified, staged, untracked icons inline
cd-on-quitq to exit; shell follows to last directory
Open in editor / Findere for $EDITOR, g r for Finder
Full shortcut referencePress ? inside the file browser

Browser Preview

Open the command palette with Cmd + Shift + P, search Browser, web preview, localhost, or dev server, and press Enter. Search terminal browser for Browser Split. YEN opens a native WebKit window or explicit split for docs, HTTPS pages, and localhost/loopback development servers.

Native and isolated

The browser uses a non-persistent WebKit data store. yen webcan open, navigate, reload, close, and report status, with explicit window, split, automatic, or focused targets for stateful commands. When the CLI can identify the intended app copy, status confirms the executable that answered. Terminal link capture is off by default, explicit-activation only, and controlled from Settings > Workspace > Browser. There is no bundled browser runtime.

yen web open https://yen.chat/docs
yen web open --split http://localhost:3000
yen web reload --target window
yen web status
yen web close
URLBehavior
https://...Opens in YEN
http://localhost, 127.0.0.1, ::1Opens in YEN
mailto:, tel:Hands off to macOS
file:, data:, javascript:,blob:, unknown schemes, non-local http:Blocked

macOS Automation

YEN ships a branded AppleScript dictionary for local macOS automation. It is enabled by default and can be disabled in config.yen with macos-applescript = false. Target YEN by absolute bundle path when scripting a specific build.

SurfaceAppleScript boundary
windows, tabs, terminalsAddress live terminal surfaces
new window, new tab, splitCreate project workspaces with surface configuration
input text, send key, send mouse button, send mouse position, send mouse scrollInject local input after macOS automation permission
pid, ttyRead foreground process and PTY details for attach scripts
perform actionAllowlisted command-catalog actions only

AppleScript can create windows, tabs, and splits with an initial working directory and input. YEN-native overlays such as layout presets, scratchpad, tab sidebar, and PR review workspaces remain command-palette or config-driven instead of being cloned into a second scripting model.

AppleScript
on yenNewWindow(appPath, surfaceConfig)
	tell application appPath
		return «event GhstNWin» given «class GNwS»:surfaceConfig
	end tell
end yenNewWindow

set appPath to "/Applications/YEN.app"
set projectRoot to "/absolute/path/to/project"
set windowRef to yenNewWindow(appPath, {initial working directory:projectRoot, initial input:"git status" & linefeed})

tell application appPath
	get tty of terminal 1 of windowRef
end tell

Commands & Shortcuts

Keyboard shortcuts:

ActionKey
Command paletteCmd + Shift + P
Browser previewCommand palette → Browser / Browser Splitsearch web preview, localhost, or terminal browser
SettingsCmd + ,
File browserCmd + Shift + O
Speech-to-textOption + Space
Split layout presetsCmd + Option + 1-0
Split horizontal / verticalCmd + D / Cmd + Shift + D
New tab / windowCmd + T / Cmd + N
Close tab / paneCmd + W
Quick TerminalCtrl + `
ScreenshotCmd + Shift + S
Tab sidebarCmd + Shift + B
ScratchpadCmd + Shift + J
Copy screen file pathCmd + Ctrl + Shift + U
Paste screen file pathCmd + Shift + U
Open screen fileCmd + Option + Shift + U
Copy-on-selectSelect text; hold Shift in TUI apps
Font size +/-Cmd + + / Cmd + -
Toggle fullscreenCmd + Enter
Rename split labelCommand palette → Rename Split Label

CLI commands:

Commands run immediately inside YEN because bundled shell integration is already active there. In external shells, run yen init zsh or yen init bash once, then restart that shell so wrappers like y, weather, btop, and fastfetch route to YEN.

CommandDescription
weatherLocal weather ( --city, --metric/--imperial)
btop (monitor, resources)System monitor TUI (bundled btop)
fastfetch (fetch)System info snapshot (bundled fastfetch)
biosSystem info snapshot with YEN BIOS branding
browse (files, fm)File browser
webNative browser controls and optional split target
yFile browser with cd-on-quit
yengit (lazygit, gitlazy, gityen)Git TUI (bundled lazygit)
yen helpFull command reference and aliases
yen ide --helpTerminal IDE workflow commands (detect / doctor / env, LSP / AST, share, devcontainer / vscode, history / search / benchmark, explain, verify / gate / merge-readiness, workflow automation, pr-review with loop-script + inline comments, and timeline)
yen agents --helpAdapter board commands for first-party Claude / Codex workflows, local session timeline/export output, linked IDE evidence, and workspace templates
yen +list-themesList all 72 curated bundled themes
yen +edit-configOpen config in $EDITOR
yen init zshInstall shell integration for external zsh
yen init bashInstall shell integration for external bash
yen updateCheck for a newer release
yen --versionShow version

Need the complete command + alias reference? Run yen help. For full file browser shortcuts, press ? inside the file browser.

Custom keybindings:

Shortcut editing lives in Settings > Keyboard. For advanced changes, edit the config file directly.

Troubleshooting

  • App won't open: Right-click YEN.app → Open, or allow in System Settings → Privacy & Security.
  • Commands not found: YEN commands only work inside YEN terminal, not Terminal.app.
  • Speech-to-text not working: Grant Accessibility, Microphone, and Speech Recognition permissions in System Settings → Privacy & Security. Dictation listens to exact Option + Space only (no Cmd/Ctrl/Shift). Check the menu bar dropdown for blocked-state recovery actions.
  • Option + Space conflicts:Check for conflicts with input source, Spotlight, Alfred, or Raycast shortcuts. Use Settings > Keyboard for fixed-shortcut conflict guidance.
  • Layout shortcut not firing: Use exact Cmd + Option + 1-0 with no extra modifiers and click a terminal window first. Layout presets are intentionally ignored while Settings or another utility window is key.
  • Cursor style / blink not previewing: Changes are applied, but preview appears after you refocus a terminal window (unfocused terminals show a hollow block cursor).
  • Opacity slider looks unchanged: Background opacity applies after app restart. Use Window Border for an immediate focus cue.
  • Dictation menu shows blocked: Open Settings > Sounds > Speech Setup and click Re-check to verify local speech service status.
  • File browser not opening: Verify the terminal window is focused, not the Settings panel or another window.
  • Browser preview blocks a URL: Use HTTPS for remote pages or localhost / loopback HTTP for local development servers. File, data, JavaScript, blob, unknown-scheme, and non-local HTTP URLs are intentionally blocked.
  • "command not found: y":Shell integration isn't active in this shell. In external shells, run yen init zsh (or bash) and restart that shell. In YEN, this points to disabled or stale bundled integration; use browse as a fallback and fix the app build rather than editing dotfiles.
  • weather / btop / fastfetch runs a system command: In external shells, re-run yen init zsh (or bash), then restart that shell. In YEN, this points to missing or stale bundled integration rather than a dotfile problem.

Reset config to defaults:

Terminal
$ rm ~/Library/Application\ Support/com.yenchat.yen/config.yen