Get Started
| Step | Action |
|---|---|
| 1. Download | Open the .dmg file |
| 2. Install | Drag YEN to Applications |
| 3. First launch | Open YEN from Applications |
| 4. Updates | Check for Updates in YEN; optional automatic checks via Sparkle |
System Requirements
| Requirement | Supported |
|---|---|
| macOS | 13 Ventura or newer |
| Mac | Apple silicon or Intel |
| Permissions | Accessibility, Microphone, and Speech Recognition for dictation |
YEN works without an account. Dictation behavior depends on macOS and available speech assets; see Speech-to-Text.
Terminal IDE
YEN starts with a native macOS terminal and layers IDE workflows around it. Settings and workspace panels use native macOS UI; browser preview uses Apple WebKit. Editor commands can open your configured external editor.
The terminal renders with Metal. Windows, tabs, split layouts, and positions restore on relaunch; this does not resume running commands. Use the shortcut reference for tabs, splits, Quick Terminal, and window screenshots.
- Scratchpad: one locally saved notes buffer shared across windows. It supports copy, paste, and copy-on-select when enabled.
- Layouts: ten presets in Settings > Workspace. Single Pane requires a second invocation to confirm closing other panes.
- Bundled tools: fd, rg, fzf, zoxide, bat, jq, and other terminal helpers. IDE integrations can require additional tools; see IDE Workflows.
- Shell integration: automatic detection supports bash, zsh, fish, elvish, and nushell. YEN command wrappers and cd-on-quit are supplied for bash and zsh.
Approach comparison
| Design question | Editor-first IDE | Terminal-first YEN |
|---|---|---|
| Primary workspace | Editor and project UI | Shell and terminal sessions |
| Terminal role | Integrated panel or task runner | Core workspace |
| Rich workflows | Editor views and extensions | Native overlays and the bundled yen CLI |
| Rendering | Varies by product | Native macOS UI with GPU terminal rendering |
| Account boundary | Varies by product | No account required for desktop use |
This is a conceptual comparison; editor features vary by product. YEN keeps the terminal as the primary workspace.
Clipboard & Paste
With the default bindings, Cmd + C copies the terminal selection and Cmd + V uses the native paste action, including in terminal applications. Custom bindings are respected; applications still control how pasted text is handled.
| 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 | Uses the native paste action when bound to paste. A custom non-paste binding is not overridden. |
| 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. |
Copy on Select can be disabled in Settings > General. File URLs paste as paths; image-only clipboards become temporary image files.
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.
Before you start
Run commands from your project directory. Trust is granted per project and capability; a status command does not grant it. LSP and AST tools need Python 3 and the relevant language server or compiler. Debugging needs Python, Node, or LLDB. Devcontainers need the devcontainer CLI and a container runtime. Sharing needs upterm or tmate and OpenSSL. GitHub review needs an authenticated GitHub CLI; agent adapters need the corresponding Claude or Codex CLI and its own authentication.
| 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 debug | Trust-gated Python pdb, Node inspect, and LLDB sessions, locally or over SSH. Node starts at entry; LLDB requires an executable. Attach-to-process and direct TypeScript debugging are not supported. |
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 | Terminal sharing over upterm / tmate with a passphrase-encrypted join token, read-only or interactive mode, expiry, and revoke |
yen ide explain (??) | Failed-command explanation with project-aware hints |
yen ide verify / gate | Verification reports, evidence bundles, and approval checkpoints. Security scans need their external tools; missing tools are reported. |
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 ide test status / run | Local runner discovery, failed-test replay, and watch-mode loops with explicit runner selection |
yen ide trust status / revoke / reset | Workspace trust records, share approvals, and local reset controls for trusted project state |
yen agents | Adapter board for separately installed 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 raw selectable previews and posting + decision actions |
yen ide timeline / pr-notify | Local audit timeline, GitHub review-request notifications, and current-branch CI / build-watch status |
Start with project status:
$ yen ide doctor
yen ide trust status
yen ide test status
yen ide workflow discover
yen ide lsp status
yen ide --helpOptional local test and workflow examples
These commands run project code. Use them only in a project you trust, with the named runner or package script available. Review each command's help and grant the requested trust first.
$ yen ide test run --runner node-test --watch --watch-interval 0.5 --max-runs 3
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 2On 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.
Remote targets are supported by detect, doctor, trust status, verify status, workflow, devcontainer, debug, and share. Use ssh://user@host/absolute/path and check the command's help for supported options. SSH probes need Python 3 on the remote host. Local-only options such as --watch remain blocked instead of silently degrading.
Speech-to-Text
Recorded dictation demonstration. Use the setup instructions below for current permissions and platform requirements.
Grant Accessibility, Microphone, and Speech Recognition in Settings > Sounds > Speech Permissions. Focus a text field, hold Option + Space, speak, and release to paste. On macOS 26+, transcription uses Apple's on-device SpeechAnalyzer. On older versions, YEN requests on-device recognition when Apple reports it is available; otherwise Apple's Speech framework can use its network service. YEN does not send your audio or transcript to a YEN service. Read more on the blog.
Works on macOS 13+. On macOS 26+, YEN uses Apple's SpeechAnalyzer with DictationTranscriber, has no YEN-imposed 60-second timer, and can ask macOS to install missing language packs while Settings is frontmost. Apple can still end a session after an input, asset, or system-resource failure. If the analyzer is unavailable, YEN can fall back to the legacy recognizer, which stops after 60 seconds and inserts the available result.
While YEN listens, a layered rainbow waveform responds to your microphone beside the status text. Reduce Motion keeps the live level feedback but freezes the waveform's flowing phase.
In-app paste restores your previous clipboard shortly after paste; cross-app paste always leaves the dictated text on the clipboard because delivery cannot be confirmed. Live Transcript Preview is available in the overlay. Translate-on-Dictate requires macOS 26+, is off by default, is tied to the recognizer locale for that capture, and runs only when the selected language pair is already installed. If translation fails, YEN inserts the original transcript.
Recording indicator
A recording dot blinks in the menu bar while listening. Release to paste.
Choose a microphone in Settings > Sounds > Dictation. System Default follows macOS; an unavailable selected device falls back to it. A change during recording stops that capture; select a device before restarting.
Secure Input blocks both clipboard writes and automatic insertion. If the target changes or automatic paste fails, YEN leaves the transcript on the clipboard for manual paste and shows a recovery notification.
Pro tip: On older macOS, release and press again for longer content. Enable Launch at Login in Settings> General > Startup for dictation without a terminal window open.
Settings
Press Cmd + , to open Settings. General, Sounds, Workspace, Themes, and Keyboard share search, import, export, and reset controls. Most changes apply across open tabs immediately; background opacity requires an app restart.
YEN includes curated bundled themes with live previews. Font, cursor, background image, opacity, and padding stay independent from theme selection (background opacity takes effect after an app restart). General also includes Window Border with manual numeric fields for width and radius, 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. Turn it on in Settings → Workspace → Split Labels → Enabled; it is off by default, and the rename command stays hidden until it is on. Then open the command palette (Cmd + Shift + P) and search Rename Split Label to set or clear a label.
Independent from terminal titles
Split labels are separate from tab / window titles. When no custom label is set, the pill shows the worktree name (if worktree naming is on), the surface title, working directory leaf, or "Terminal" as a fallback.
| Behavior | Detail |
|---|---|
| Set / clear | Command palette → Rename Split Label. Leave blank to revert to automatic. |
| Worktree naming | Settings → Workspace → Split Labels → Name Panes After Worktree. A pane inside a git worktree takes that worktree's folder name, or its branch when the folder name is generic. Renaming the pane overrides it. An agent can report its directory with yen pane cwd so the label follows the agent while it is in front. The shell's directory and new-split location stay unchanged. |
| Persistence | Labels are included in saved window state 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 colors are derived from the terminal background. |
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
Launch with the shortcut or y in a YEN bash or zsh shell. Press q to exit and your shell follows the last directory you visited. The browse command opens the same browser without changing the shell directory. Press Enter on a code file for a colorized read-only preview, or O for open-with.
| Feature | Details |
|---|---|
| File previews | Syntax-highlighted code, images, archive listings, and video / PDF thumbnails |
| Quick Look | Space for native macOS preview |
| Search and fuzzy find | / to find in the current directory, z for fuzzy file / directory search, and Z for frequent directories |
| File operations | Copy, move, trash or delete, 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
WebKit connects directly to each site you open, and YEN does not receive that browsing activity. The browser uses a non-persistent WebKit data store. yen web can 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
| URL | Behavior |
|---|---|
https://... | Opens in YEN |
http://localhost, 127.0.0.1, ::1 | Opens in YEN |
mailto:, tel: | Hands off direct links to macOS; blocked in embedded frames |
file:, data:, javascript:,blob:, unknown schemes, non-local http: | Blocked |
macOS Automation
On macOS 14+, YEN also exposes actions in Apple Shortcuts. The macos-shortcuts config accepts ask, allow, or deny. The default asks for permission by action scope. Action invocation is limited to YEN's approved command catalog.
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 ID and PTY path |
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.
send key does not derive text from your active keyboard layout. Use input text to send literal text.
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
Default shortcuts are listed below. Editable bindings can change in Settings > Keyboard.
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 in a direction | Hold ← / → / ↑ / ↓, then press Cmd + D |
| Split right / down | Cmd + D / Cmd + Shift + D |
| New tab / window | Cmd + T / Cmd + N |
| Close tab / pane | Cmd + W |
| Quick Terminal | Ctrl + ` |
| Window screenshot to file and clipboard | Cmd + Shift + S |
| Tab sidebar | Cmd + Shift + B |
| Git drawer | Cmd + Shift + G |
| 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 |
| Find terminal text | Cmd + F |
| Focus adjacent split | Cmd + Option + Arrow |
| Zoom focused split | Cmd + Shift + Enter |
| Font size +/- | Cmd + + / Cmd + - |
| Toggle fullscreen | Cmd + Enter |
| Rename split label | Command palette → Rename Split Label |
The Git drawer is a read-only local changes view for the active split: branch/upstream status, grouped changed files, untracked-aware stash file lists, raw unified diff, copy/open actions, clear no-repo/failure notices, and handoff to bundled lazygit. It appears as a bottom overlay, so it does not resize the window or compress split panes. Use yengit for the full terminal Git TUI, the PR review workspace for pull-request review, and the merge-conflict workspace for conflict resolution. With the tab sidebar hidden, a directory change can take up to 15 seconds to appear.
CLI commands:
YEN-launched bash and zsh shells include command wrappers. In an external shell, run yen init zsh or yen init bash to print setup code. Review and add that output to your shell startup file (~/.zshrc, or ~/.bashrc / ~/.bash_profile), then restart the shell. The command does not edit those files. If yen is not on PATH, invoke /Applications/YEN.app/Contents/Resources/bin/yen.
| Command | Description |
|---|---|
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 | See IDE Workflows for capabilities and prerequisites |
yen agents --help | Claude / Codex adapter help; see IDE Workflows |
yen pane cwd <directory> | Report an agent worktree from an agent or hook; use yen pane --help for hook setup and clearing a report. The next shell prompt clears it. |
yen +list-themes | List curated bundled themes |
yen +edit-config | Open config in $EDITOR |
yen init zsh | Print shell setup for external zsh |
yen init bash | Print shell setup for external bash |
yen update | Check signed release metadata (requires OpenSSL 3); install updates through YEN |
yen config / reload | Show the config location / reload terminal configuration |
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, then Open, or allow in System Settings > Privacy & Security.
- Commands not found: Follow the shell setup instructions. In YEN, check that shell integration is enabled. Bare command wrappers and
yrequire bash or zsh. - 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). Click the YEN menu bar extra (a template waveform when idle, or the recording-dot status item while dictation is active) for blocked-state recovery actions, or open Settings > Sounds > Speech Permissions and clickRe-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-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.
- 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": The cd-on-quit wrapper is supplied only in YEN-launched bash and zsh shells. External shells can use
yen browse, which does not change the shell directory. - btop / fastfetch runs a system command: Check the shell setup and restart the shell. YEN's wrappers should resolve the bundled tools.
Back up config.yen before resetting terminal settings:
$ mv "$HOME/Library/Application Support/com.yenchat.yen/config.yen" "$HOME/Library/Application Support/com.yenchat.yen/config.yen.backup-$(date +%s)"Quit YEN before moving the file, then reopen it. This removes the overrides stored in config.yen (font, cursor, background opacity, padding, theme, keyboard overrides). Preferences kept in macOS UserDefaults — theme-browser mode, Window Border, Workspace and Browser toggles, dictation preview/translation state, and notification routing — survive this. To restore every in-app preference, open Settings (Cmd + ,) and use Reset [section] or Reset All… in the Reset row.
Terminal History
Terminal design has moved from dedicated hardware to software emulation, native desktop tools, web runtimes, and workflow-aware interfaces. These milestones explain the design traditions that YEN builds on.
1978 — VT100
DEC's VT100 helped establish ANSI terminal control sequences that remain part of terminal compatibility today. Source
1984 — xterm
xterm brought a software terminal emulator to the X Window System and became a long-running compatibility reference. Source
2014 — iTerm2
iTerm2 2.0 expanded the macOS terminal with deep tmux integration, triggers, a toolbelt, and extensive customization. Source
2022 — Warp
Warp entered public beta with a block-oriented interface for commands and their output. Source
Today — YEN
YEN combines a native GPU terminal with Apple speech recognition, local workflow tools, and optional terminal-first IDE features. Source
This is a selective product-design timeline, not a complete history of terminal computing.