Get Started
| Step | Action |
|---|---|
| 1. Download | Open the .dmg file |
| 2. Install | Drag YEN to Applications |
| 3. First launch | Right-click YEN.app, click Open |
| 4. Updates | Automatic 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.
| Capability | Shortcut |
|---|---|
| GPU terminal — Metal rendering, 60 FPS | Always on |
| Speech-to-text — on-device, 50+ languages | Option + Space |
| Settings — 72 curated themes, fonts, cursor, background image import, opacity, padding, notifications, split layouts, permissions | Cmd + , |
| File browser — browsing, syntax-aware previews, bundled static theme / flavor defaults | Cmd + Shift + O |
| Browser preview — isolated WebKit window or split for docs, HTTPS, and localhost/loopback | Command palette or yen web |
| Local weather — Open-Meteo, coordinate-first with ASCII icons, 6-hour hourly forecast, and grouped output | Type weather in YEN (or yen weather in any shell) |
| Screenshot — save window to file and clipboard | Cmd + Shift + S |
| Tab sidebar — transient left tab rail with opt-in persistent docking | Cmd + Shift + B |
| Scratchpad — right-side quick notes panel with seeded helper copy, click-away close, Cmd + C/Cmd + V, and highlight-to-auto-copy | Cmd + Shift + J |
| Quick Terminal — global hotkey dropdown | Ctrl + ` |
| Split layout presets — 10 one-click configurations | Cmd + Option + 1-0 |
| Bundled tools — fd, rg, fzf, zoxide, bat, jq, and more | Zero setup — no homebrew needed |
| Window state restoration — splits, tabs, positions | Automatic |
| IDE workflow control plane — detect / doctor / env, search, LSP / AST, share, devcontainer / vscode, explain, verify / gate, workflow / agents, PR review + evidence | yen ide ... |
| Shell integration — bash, zsh, fish, elvish, nushell | Automatic |
| Traditional IDE | Terminal-First IDE (YEN) |
|---|---|
| Editor with a terminal panel | Terminal with editing capabilities |
| Electron or web view | Native GPU rendering |
| Hundreds of MB at install | Lightweight from day one |
| Features you never asked for | Each feature is opt-in |
| Cloud accounts, telemetry | No 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.
| Action | What YEN does |
|---|---|
Cmd + C | Copies the selection. With copy-on-select on (default), releasing the mouse already copies — hold Shift to select inside TUIs that capture mouse events. |
Cmd + V | Always 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 terminal | Native 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 + Ppalette 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
| Command | What you get |
|---|---|
yen ide doctor | Aggregated repo health: blockers, warnings, verify / security / debugger readiness, with remediation copy in text / JSON / env |
yen ide trust | Workspace trust center for env, LSP, debugger, devcontainer, sharing, and workflow runs, with status, revoke, and reset |
yen ide debug | Local + SSH debugging with trust gating, file:line targets, and per-language adapter reporting (Python, Node, executables) |
yen ide detect / env / history / replay / profile | Project context, trusted env loading, per-project history, replay, and timing logs |
yen ide search | Project-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 lsp | Local LSP lifecycle plus hover, definition, references, code actions, rename, and grouped diagnostics with freshness state |
yen ide ast | Polyglot AST fallback for Python, JS / TS, Go, and Swift with parser-labeled engines; explicit no-fallback guidance for Rust / Zig |
yen ide devcontainer / vscode | Local + remote devcontainer control and deterministic VS Code inventory / import with dry-run diffs and migration-report artifacts |
yen ide share | Encrypted 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 test | Repo-aware test runner with grouped failures, file:line jumps, rerun-failed, and debugger handoffs |
yen ide verify / gate | Verify + security snapshots, evidence bundles, and risk-aware approval checkpoints |
yen ide format / lint / fix | Repo-native quality baseline with dry-run planning, changed-file scoping, and approval gating |
yen ide workflow | Repo-native task discovery + execution over package, make, just, and task sources, local or remote (ssh://...) |
yen agents | Adapter 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-review | Focused 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-notify | Local audit timeline, GitHub review-request notifications, and current-branch CI / build-watch status |
Quick start:
$ 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 targetsOn 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.
| Feature | YEN |
|---|---|
| Privacy | 100% on-device (macOS Speech Recognition) |
| Binary size | Zero bloat — no AI models |
| Languages | 50+ (whatever macOS supports) |
| Compatibility | Any macOS app — Safari, VS Code, Notes, Slack, plus shell, vim, nano, ssh |
| Cost | Free forever |
| Offline | Yes (macOS 13+, after language assets are installed) |
| Duration | macOS 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 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.

Advanced configuration:
~/Library/Application\ Support/com.yenchat.yen/config.yen
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.
| Behavior | Detail |
|---|---|
| Set / clear | Command palette → Rename Split Label. Leave blank to revert to automatic. |
| Persistence | Labels survive window restore, force-quit recovery, and Quick Terminal sessions. |
| Visibility | Hidden when a pane is too small (below 140 x 80 points), during drag / drop, or when hovering a URL. |
| Theming | Pill 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.
| Feature | Details |
|---|---|
| Syntax-highlighted previews | Code, images, archives, videos, PDFs |
| Quick Look | Space for native macOS preview |
| Search and fuzzy find | / to search, z to jump to frequent dirs |
| File operations | Copy, move, delete, undo, bulk rename, archive extract |
| Vim + mouse navigation | h / j / k / l, visual selection, click, scroll |
| Git status indicators | Modified, staged, untracked icons inline |
| cd-on-quit | q to exit; shell follows to last directory |
| Open in editor / Finder | e for $EDITOR, g r for Finder |
| Full shortcut reference | Press ? 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.
| URL | Behavior |
|---|---|
https://... | Opens in YEN |
http://localhost, 127.0.0.1, ::1 | Opens 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.
| Surface | AppleScript boundary |
|---|---|
windows, tabs, terminals | Address live terminal surfaces |
new window, new tab, split | Create project workspaces with surface configuration |
input text, send key, send mouse button, send mouse position, send mouse scroll | Inject local input after macOS automation permission |
pid, tty | Read foreground process and PTY details for attach scripts |
perform action | Allowlisted 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.
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 tellCommands & Shortcuts
Keyboard shortcuts:
| Action | Key |
|---|---|
| Command palette | Cmd + Shift + P |
| Browser preview | Command palette → Browser / Browser Splitsearch web preview, localhost, or terminal browser |
| Settings | Cmd + , |
| File browser | Cmd + Shift + O |
| Speech-to-text | Option + Space |
| Split layout presets | Cmd + Option + 1-0 |
| Split horizontal / vertical | Cmd + D / Cmd + Shift + D |
| New tab / window | Cmd + T / Cmd + N |
| Close tab / pane | Cmd + W |
| Quick Terminal | Ctrl + ` |
| Screenshot | Cmd + Shift + S |
| Tab sidebar | Cmd + Shift + B |
| Scratchpad | Cmd + Shift + J |
| Copy screen file path | Cmd + Ctrl + Shift + U |
| Paste screen file path | Cmd + Shift + U |
| Open screen file | Cmd + Option + Shift + U |
| Copy-on-select | Select text; hold Shift in TUI apps |
| Font size +/- | Cmd + + / Cmd + - |
| Toggle fullscreen | Cmd + Enter |
| Rename split label | Command 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.
| Command | Description |
|---|---|
weather | Local weather ( --city, --metric/--imperial) |
btop (monitor, resources) | System monitor TUI (bundled btop) |
fastfetch (fetch) | System info snapshot (bundled fastfetch) |
bios | System info snapshot with YEN BIOS branding |
browse (files, fm) | File browser |
web | Native browser controls and optional split target |
y | File browser with cd-on-quit |
yengit (lazygit, gitlazy, gityen) | Git TUI (bundled lazygit) |
yen help | Full command reference and aliases |
yen ide --help | Terminal 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 --help | Adapter board commands for first-party Claude / Codex workflows, local session timeline/export output, linked IDE evidence, and workspace templates |
yen +list-themes | List all 72 curated bundled themes |
yen +edit-config | Open config in $EDITOR |
yen init zsh | Install shell integration for external zsh |
yen init bash | Install shell integration for external bash |
yen update | Check for a newer release |
yen --version | Show 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 + Spaceonly (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-0with 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-checkto 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; usebrowseas a fallback and fix the app build rather than editing dotfiles. weather/btop/fastfetchruns a system command: In external shells, re-runyen 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:
$ rm ~/Library/Application\ Support/com.yenchat.yen/config.yen