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: Type chat or 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 — wrapped in 100MB+ of Chrome. Style over substance.

2021 — Warp and others

AI assistance. Cloud sync. Account required. Your commands, sent to servers. The terminal became a product to monetize.

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 web views, 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 browser-style views.

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
Global Chat — built-in chat rooms (Lounge, Feedback, Show & Tell, Support)Type chat in YEN (or yen chat in any shell)
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.

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 with blocker / warning findings, verify readiness / security state, debugger readiness, concrete remediation copy, and machine-readable text / json / env output over detect, env, LSP, debug, devcontainer, and verify state
yen ide trust status / revoke / resetWorkspace trust center over env, LSP, debugger, devcontainer, terminal sharing, and workflow/native-task execution with active-state visibility, last action / run metadata, debugger summary/details report references, and wrapper-first revoke / reset controls
yen ide debug status / startDebugger status/trust summaries plus local and SSH-backed execution with trust gating, semantic path:line targets, explicit adapter-family reporting for Python / Node / executables, dedicated summary/log evidence for real runs, and honest blocked-topology guidance for devcontainer, attach, and full DAP-style flows
yen ide detect / envProject context, trusted environment loading, and machine-readable env exports
yen ide history / replay / profilePer-project command history, replay, and timing logs
yen ide searchProject-scoped search across files, symbols, content, history, diagnostics, and the action catalog with source-labeled ranking; the same provider contract powers non-empty desktop palette queries on macOS, including semantic file:line targets for symbols, content, and diagnostics plus CODEOWNERS / git-history routing hints in repo-backed CLI search
yen ide lsp start / status / diagnosticsLocal LSP status and diagnostics, explicit per-project trust, resolver guidance, grouped diagnostics snapshots with fresh / stale visibility, and live request surfaces for hover / definition / references / code-actions / rename
yen ide ast / devcontainer / vscodeParser-backed AST fallback for Python, JS/TS, Go, and Swift with explicit engine labels and Rust/Zig no-fallback guidance, plus local devcontainer control, explicit remote devcontainer status / up / shell / down parity keyed by workspace identity, and deterministic VS Code inventory / import with extension/parity guidance, migration-report artifacts, and dry-run diff reporting
yen ide share status / host --read-onlyIntegration-first terminal sharing with encrypted tokens, passphrase auth, read-only vs interactive mode, expiry, explicit revoke, and remote-aware execution/reconnect labels over local or SSH-backed upterm / tmate sessions, with local token validation before join
yen ide explain (??)Failed-command explanation with project-aware hints
yen ide test status / runFirst-class test status over the verify-backed runner contract, with grouped failure summaries, semantic file:line targets, explicit debug handoffs when the local debugger can truly launch the failing target, targeted runner scope, and rerun-failed execution
yen ide verify status / verify / gateRead-only verify readiness / security snapshots, verification bundles, semantic jump reports, local test-to-debug handoffs for launchable failing targets, and risk-aware approval checkpoints
yen ide format / lint / fix status / runRepo-native quality baseline with recommended defaults, explicit companion coverage for repo-implied polyglot surfaces, read-only dry-run planning, changed-file scoping when trustworthy, workflow trust, approval gating, desktop command-palette actions for Format/Lint/Fix Status, and dedicated summary/details/semantic reports
yen ide workflow discover / run --nativeRepo-native task discovery over package / make / just / task sources, explicit no-fallback native execution, trust gating, approval checkpoints, semantic jump reports, and explicit remote `ssh://...` discovery, dry-run preview, and authored/native execution with local-record trust; `--watch` stays local-only
yen agents list / timeline / note / export / open --dry-runFirst-party adapter board status, workspace-scoped session timeline plus local human/supervisor notes with lightweight approval/handoff templates and optional session/slot validation, including latest-session binding for slot-only validation, plus Markdown/JSON evidence export with linked local verify/test evidence, shared evidence-status labels (missing-report, stale-report, unverified, exported-with-gaps), stable JSON schema metadata plus typed event fields for automation, explicit adapter path/probe/launch/fallback metadata, workspace-keyed repo context plus shared risk summary, semantic PR-review jump targets, redacted local artifacts with short default retention, positive-day overrides, explicit risk flags/evidence gaps, linked quality / workflow report artifacts, merge-readiness, PR review evidence, decision, and inline-comment artifacts / current-branch CI / build-watch evidence, rendered in text, Markdown, and JSON, and fail-open launch planning for Claude/Codex workflows
yen ide pr-reviewFocused PR diffs, loop / loop-script navigation, inline comments, semantic hunk targets, review-routing context, and review templates; macOS also gets a desktop workspace launched from the command palette with local inline-comment / evidence staging, semantic file + hunk targets, delta-backed focused previews, latest verify readiness / security plus semantic evidence previews, and explicit posting and decision actions
yen ide timeline / pr-notifyLocal audit timeline plus GitHub review-request notifications, current-branch CI status, and the latest local build-watch snapshot

Quick start:

Terminal
$ yen ide doctor
yen ide doctor --format json
yen ide trust status
yen ide trust status --format json
yen ide debug status
yen ide debug status --format json
yen ide debug status ssh://dev@example.test/Users/dev/app
yen ide debug status --devcontainer
yen ide debug status ssh://dev@example.test/Users/dev/app --devcontainer
yen ide debug tui
yen ide debug tui --devcontainer
yen ide debug tui ssh://dev@example.test/Users/dev/app --devcontainer --format json
yen ide debug trust
yen ide debug trust ssh://dev@example.test/Users/dev/app
yen ide debug start src/app.py:12 --dry-run --format json
yen ide debug start src/app.py:12 --managed
yen ide debug start src/app.py:12 --managed --devcontainer
yen ide debug continue
yen ide debug transcript --tail 40
yen ide detect
yen ide env list
yen ide lsp status
yen ide lsp status --format json
yen ide lsp diagnostics
yen ide lsp code-actions src/app.ts:12:3
yen ide lsp hover src/app.ts:12:3
yen ide lsp install status --all
yen ide share status
yen ide share host --read-only --ttl-minutes 30
yen ide share revoke
yen ide ast status
yen ide ast definition Widget
yen ide ast references Widget
yen ide devcontainer status
yen ide devcontainer trust ssh://dev@example.test/Users/dev/app
yen ide devcontainer status ssh://dev@example.test/Users/dev/app
yen ide devcontainer up ssh://dev@example.test/Users/dev/app
yen ide vscode inventory
yen ide vscode import --dry-run
yen ide search verify
yen ide parse --format tsv build.log
yen ide explain --last
yen ide format status
yen ide format run --dry-run --changed
yen ide lint status
yen ide fix run --trust
yen ide test status
yen ide test status --format json
yen ide test run --failed
yen ide test run --runner node-test
yen ide test run --runner node-test --watch --watch-interval 0.5 --max-runs 3
yen ide verify status
yen ide verify status --format json
yen ide verify --quick --no-security
yen ide verify --quick --no-security --watch --watch-interval 0.5 --max-runs 2
yen ide workflow discover
yen ide workflow discover ssh://dev@example.test/Users/dev/app
yen ide workflow trust ssh://dev@example.test/Users/dev/app
yen ide workflow run quick-check --dry-run
yen ide workflow run build --project ssh://dev@example.test/Users/dev/app
yen ide workflow run --native package.json:test --dry-run
yen ide workflow run --native package.json:test --watch --watch-interval 0.5 --max-runs 2
yen ide pr-notify --ci-status --watch --interval 30 --max-polls 4
yen agents list
yen agents timeline
yen agents timeline --format json
yen agents timeline --source human --event note --kind approval --tail 5
yen agents note --template review-approved --message "Reviewed manually"
yen agents note --template handoff-review --session agt-20260327T120000Z-1234-000001 --validate-link
yen agents note --template handoff-review --slot codex --validate-link
yen agents export
yen agents export --format json --output -
yen ide gate --dry-run -- git reset --hard
yen ide pr-review 123 --list-hunks
yen ide pr-review 123 --hunk src/app.ts:42:1
yen ide pr-review 123 --loop --loop-script "e,q"
yen ide pr-review 123 --inline src/app.ts:42 --inline-body "Needs guard" --post
yen ide timeline --limit 20

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.

When YEN Settings is frontmost, macOS can prepare missing on-device translation assets for supported pairs instead of trying to do that in the background.

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 panel has five sections: General, Sounds, Workspace, Themes, and Keyboard. 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).

Sounds combines speech permissions, local speech readiness, Translate-on-Dictate controls, and per-stream notifications for General, Build, Chat, Chat Summaries, Mail, Mail Summaries, Calendar Reminders, Calendar Changes, and Calendar Actions. 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, 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, installed user themes, and downloaded or imported sound assets stays on the current Mac.

Sounds also includes command-finish notifications, focused-window behavior, and official sound-pack management: Download All Sound Packs becomes Update Sound Packs after install, and Remove Downloaded Packs leaves imported custom sounds alone.

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

Commands & Shortcuts

Keyboard shortcuts:

ActionKey
Command paletteCmd + Shift + P
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, chat, mail, and weather, btop, and fastfetch route to YEN.

CommandDescription
chatGlobal chat rooms (Lounge, Feedback, Show & Tell, Support)
mail (email)Gmail client (compose, reply, forward, labels, search)
calendarGoogle Calendar (agenda / month / day / week, recurring events, RSVP)
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
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

App keys (Chat / Gmail / Google Calendar defaults):

ActionKey
Chat
Switch roomsTab / Shift + Tab / /
Scroll timeline / / Page Up / Page Down
Jump to top / latestHome / End
Send / new lineEnter / Option + Enter
Quit / change handle/q / /h
Paste imageCtrl + V or drag file
Mail
Open / archive / trashEnter / e / #
Reply all / undoa / z
Next / previous email (reader)j / k
Calendar
Create / open eventc / Enter
Navigate / todayj / k / t
Switch viewsa / m / d / w

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.
  • Permissions granted but still blocked:In Settings > Sounds > Speech Setup, check Local Speech status and use Re-check.
  • 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 keep a terminal window focused. YEN blocks layout presets while Settings or another utility window is key instead of retargeting a background terminal.
  • 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: Check the menu bar dropdown for recovery actions. In Settings > Sounds > Speech Setup, use Re-check to verify local speech service status.
  • Layout shortcuts not working in Settings: Cmd + Option + 1-0 is intentionally ignored while Settings is focused. Click a terminal window first, because layout presets only target a foreground terminal window.
  • File browser not opening: Verify the terminal window is focused, not the Settings panel or another window.
  • "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.
  • mail / chat / 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