Get Started

StepAction
1. DownloadOpen the .dmg file
2. InstallDrag YEN to Applications
3. First launchOpen YEN from Applications
4. UpdatesCheck for Updates in YEN; optional automatic checks via Sparkle

System Requirements

RequirementSupported
macOS13 Ventura or newer
MacApple silicon or Intel
PermissionsAccessibility, 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 questionEditor-first IDETerminal-first YEN
Primary workspaceEditor and project UIShell and terminal sessions
Terminal roleIntegrated panel or task runnerCore workspace
Rich workflowsEditor views and extensionsNative overlays and the bundled yen CLI
RenderingVaries by productNative macOS UI with GPU terminal rendering
Account boundaryVaries by productNo 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.

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 + VUses 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 terminalNative 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.

CommandWhat you get
yen ide doctorAggregated repo health: blockers, warnings, verify / security / debugger readiness, with remediation copy in text / JSON / env
yen ide debugTrust-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 / 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 shareTerminal 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 / gateVerification reports, evidence bundles, and approval checkpoints. Security scans need their external tools; missing tools are reported.
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 ide test status / runLocal runner discovery, failed-test replay, and watch-mode loops with explicit runner selection
yen ide trust status / revoke / resetWorkspace trust records, share approvals, and local reset controls for trusted project state
yen agentsAdapter 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-reviewFocused 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-notifyLocal audit timeline, GitHub review-request notifications, and current-branch CI / build-watch status

Start with project status:

Terminal
$ yen ide doctor
yen ide trust status
yen ide test status
yen ide workflow discover
yen ide lsp status
yen ide --help
Optional 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.

Terminal
$ 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 2

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.

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:

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 slides in over the left edge of 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
TransientSlides in over the left edge of the active terminal window. Esc dismisses it unless you are editing a title.
PersistentFixed-width rail docked inside standard terminal windows. The docked rail is unavailable in fullscreen and Quick Terminal.
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. 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.

BehaviorDetail
Set / clearCommand palette → Rename Split Label. Leave blank to revert to automatic.
Worktree namingSettings → 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.
PersistenceLabels are included in saved window state 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 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.

FeatureDetails
File previewsSyntax-highlighted code, images, archive listings, and video / PDF thumbnails
Quick LookSpace 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 operationsCopy, move, trash or delete, 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

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.

Terminal
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 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.

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 ID and PTY path
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.

send key does not derive text from your active keyboard layout. Use input text to send literal text.

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

Default shortcuts are listed below. Editable bindings can change in Settings > Keyboard.

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 in a directionHold ← / → / ↑ / ↓, then press Cmd + D
Split right / downCmd + D / Cmd + Shift + D
New tab / windowCmd + T / Cmd + N
Close tab / paneCmd + W
Quick TerminalCtrl + `
Window screenshot to file and clipboardCmd + Shift + S
Tab sidebarCmd + Shift + B
Git drawerCmd + Shift + G
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
Find terminal textCmd + F
Focus adjacent splitCmd + Option + Arrow
Zoom focused splitCmd + Shift + Enter
Font size +/-Cmd + + / Cmd + -
Toggle fullscreenCmd + Enter
Rename split labelCommand 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.

CommandDescription
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 --helpSee IDE Workflows for capabilities and prerequisites
yen agents --helpClaude / 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-themesList curated bundled themes
yen +edit-configOpen config in $EDITOR
yen init zshPrint shell setup for external zsh
yen init bashPrint shell setup for external bash
yen updateCheck signed release metadata (requires OpenSSL 3); install updates through YEN
yen config / reloadShow the config location / reload terminal configuration
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, 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 y require 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 + Space only (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 click 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 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:

Terminal
$ 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.

  1. 1978 — VT100

    DEC's VT100 helped establish ANSI terminal control sequences that remain part of terminal compatibility today. Source

  2. 1984 — xterm

    xterm brought a software terminal emulator to the X Window System and became a long-running compatibility reference. Source

  3. 2014 — iTerm2

    iTerm2 2.0 expanded the macOS terminal with deep tmux integration, triggers, a toolbelt, and extensive customization. Source

  4. 2022 — Warp

    Warp entered public beta with a block-oriented interface for commands and their output. Source

  5. 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.