Supported shells
Which shells Mel runs and how your shell environment is loaded.
Mel doesn't replace your shell — it runs it. Your aliases, functions, prompt tooling, and history keep working, because every command executes inside the shell you already use.
Which shell runs
- macOS and Linux: Mel uses
$SHELL— whatever your login shell is set to (bash, zsh, fish, …). Commands run through it, so shell-specific syntax behaves exactly as it does in any other terminal. - Windows: Mel uses
cmd.exe.
Commands run in a real PTY sized to match the visible pane, so column-oriented programs like ls lay out correctly, and full-screen TUI programs (editors, top, CLI coding agents, ssh sessions) get a proper terminal with TERM=xterm-256color.
Environment hydration
There's a subtle problem every GUI terminal has to solve: when you launch an app from a desktop launcher or dock instead of another terminal, it inherits a minimal environment. Anything your shell rc files set up — nvm and pyenv shims, PATH additions, exported keys, CLIs like claude or codex installed via a shell installer — would be invisible, and you'd hit "command not found" for tools that work fine in your usual terminal.
Mel fixes this with login-shell environment hydration: once at startup, on a background thread, Mel runs your $SHELL as a login + interactive shell ($SHELL -l -i -c env), captures the resulting environment, and applies it to every command it runs. So no matter how Mel was launched, your commands see the same environment a real login terminal would.
A few properties of this design:
- It runs once per app launch and is cached; there's no per-command overhead.
- The capture has a timeout, so a slow or misbehaving rc file can't hang startup — Mel falls back to the inherited environment.
- Explicit terminal variables (like
TERM) are still set by Mel after hydration.
If you change your rc files (say, you add a PATH entry to ~/.zshrc), restart Mel to pick it up — hydration happens at launch.
What follows your shell, what doesn't
cdin the prompt moves the pane's tracked working directory (only when the command succeeds — a failedcdnever moves you), and everything downstream follows: block headers, the directory chip, chip detection, the agent's working directory.- Ghost autocomplete reads your real shell history (
~/.zsh_history/~/.bash_history) alongside the current session. - Runtime chips integrate with your version managers directly: the Node chip lists installs from
~/.nvm, the Rust chip lists toolchains from~/.rustup, and picking one runs the visiblenvm use/rustup defaultcommand. - Per-pane environment tweaks (a Node version override, or a Drive environment set you loaded) apply on top of the hydrated environment for that pane only.
Related
- Quickstart — see blocks and chips in action.
- Installation — per-OS setup.