Ryan X. Charles
Ryan X. Charles
Follow

Introducing Shannon: A Shell That Speaks Both Nushell and Bash

March 30, 2026 · Ryan X. Charles

The problem with nushell is that everybody else uses bash.

I use nushell every day. Structured data, type safety, beautiful pipelines — it’s the best shell I’ve ever used. But the rest of the world doesn’t care. When I’m reading a README, it gives me bash commands to copy-paste. When I ask an AI agent for help, it gives me bash commands to copy-paste. export API_KEY=sk-123 && curl -X POST ... — none of that works in nushell.

This happens constantly. Every tutorial, every Stack Overflow answer, every AI agent — they all speak bash. And nushell doesn’t understand a word of it. I either manually translate every command, or I open a second terminal just to run bash. Both options are terrible.

So I built Shannon.

Shift+Tab

Shannon is nushell with one addition: press Shift+Tab and you’re in bash. Press Shift+Tab again and you’re back in nushell. That’s it.

[nu] ~/project > $env.HOME
/Users/ryan

[nu] ~/project > <Shift+Tab>

[bash] ~/project > export API_KEY="sk-1234"
[bash] ~/project > echo $API_KEY
sk-1234

[bash] ~/project > <Shift+Tab>

[nu] ~/project > $env.API_KEY
sk-1234

Environment variables carry over both ways. Working directory carries over both ways. You switch modes and everything is just there.

This means when documentation says “add this to your .bashrc,” you can follow those instructions directly in Shannon’s env.sh config file. When an AI agent gives you a bash one-liner, you Shift+Tab, paste it, Shift+Tab back, and keep working in nushell with the results.

How It Works

Shannon doesn’t shell out to bash. It doesn’t spawn a subprocess. It embeds an entire bash interpreter — the brush crate — directly in the same process as nushell.

Shannon IS nushell. It copies nushell’s binary source code and adds a mode dispatch layer. When you’re in nushell mode, commands go through nushell’s parser and evaluator exactly like normal. When you’re in bash mode, commands route to brush instead. You get every nushell feature for free: completions, hooks, plugins, job control, history — all of it.

The boundary between the two shells is strings. Nushell stores some environment variables as typed values — PATH is a list, not a colon-separated string. When you switch to bash, Shannon converts typed values to strings using nushell’s ENV_CONVERSIONS. When you switch back, nushell automatically converts the strings back to typed values. You never think about this. It just works.

Each mode gets its own syntax highlighting. Nushell mode uses nushell’s native highlighter. Bash mode uses tree-sitter-bash with a Tokyo Night color scheme. The highlighter switches instantly when you press Shift+Tab.

The AI Problem

The most common interaction I have with AI tools involves copy-pasting shell commands. Claude gives me a bash command. ChatGPT gives me a bash command. GitHub Copilot gives me a bash command. Every AI agent in the world outputs bash.

Before Shannon, I had two choices: manually translate every command to nushell syntax, or give up and use bash. Neither is acceptable. I want nushell’s structured data and type safety for my own work, and I want to paste bash commands without friction.

Shannon makes both possible in the same terminal session. Shift+Tab into bash, paste the command, Shift+Tab back to nushell. The environment carries over. No context switching, no second terminal, no translation.

Shannon’s config also solves the setup problem. The env.sh file is a plain bash script that runs at startup:

# ~/.config/shannon/env.sh
eval "$(/opt/homebrew/bin/brew shellenv)"
export PATH="$PATH:$HOME/.cargo/bin"
export EDITOR="nvim"
export ANTHROPIC_API_KEY="sk-ant-..."

Every tool that says “add this to your .bashrc” — homebrew, rustup, nvm, pyenv — works in env.sh with zero translation. The resulting environment variables are injected into nushell automatically.

Getting Started

Install from crates.io:

cargo install shannonshell

Create your environment file:

mkdir -p ~/.config/shannon
cat > ~/.config/shannon/env.sh << 'EOF'
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$HOME/.cargo/bin"
EOF

Run it:

shannon

You’ll see the nushell welcome banner. Press Shift+Tab to switch to bash. Press Shift+Tab to switch back. That’s all there is to it.

What Carries Over (and What Doesn’t)

Exported environment variables and the working directory carry over between modes. If you export FOO=bar in bash, $env.FOO is bar in nushell. If you cd /tmp in bash, you’re in /tmp when you switch to nushell.

What doesn’t carry over: nushell variables (let x = 5) and bash local variables. Only exported environment variables cross the boundary. This is by design — the two shells have fundamentally different type systems, and strings are the honest, reliable interface between them.

Named After Claude Shannon

Shannon is named after Claude Shannon, the father of information theory. He figured out that all information — text, images, sound — can be reduced to bits. Shannon (the shell) applies a similar insight: all shell state can be reduced to strings at the boundary, letting two very different shells share a single environment.

The project is open source under the MIT license. You can find it on GitHub and at shannonshell.com.


Earlier Blog Posts


Back to Blog

Copyright © 2026 Ryan X. Charles