Version 1.0, MIT licensed

A small Unix shell written in Rust.

Bash style scripting, job control, and pipelines that can carry typed tables. Autosuggestions, highlighting and themed prompts work out of the box, and an agent mode makes it a good shell for coding agents too.

curl -fsSL https://grf.sh | sh

Linux and macOS. Also through Homebrew, apt, dnf, Nix and cargo: all install options.

Features

Familiar syntax, with a few extras built in

grfsh runs the bash constructs you use every day. The interactive features and table commands ship with the shell, so there is nothing to install or configure.

>Scripting

Pipes, redirections on any file descriptor, loops, functions, arrays and parameter operators, checked against bash 5.3.

ifwhileforcase[[ =~ ]]${x#pat}${x/a/b}${!ref}{1..10}declare -Aheredocstrapset -euo pipefailprintf -v

>Interactive

Suggestions from history as you type, highlighting, themed prompts and completion that knows the context.

autosuggestionshighlightingconfigure-prompttransient promptgit branchesssh hostsdid you meanzabbrvi mode

>Jobs and processes

Each pipeline runs in its own process group, so stopping and resuming jobs works as in bash.

cmd &jobsfgbgCtrl-Zwaitkill %1timeout2>&1&>

>Typed tables

Sizes compare as sizes and dates as dates. Piped into grep or wc, a table prints as plain text.

filesprocssearchgit-statusportsloadwhere size -gt 10mbsort-bygroup-bymath sumto json|csv|md

For agents

A shell that coding agents can drive safely

Agents and CI jobs need a shell that never stops to ask, keeps output short, and says exactly what happened. grfsh has that built in.

>Agent mode

Pagers become cat, colors and git prompts are off, and nothing can wait on the terminal for input.

grfsh --agent -c ...

>JSON results

Status, stdout, stderr, duration, final directory and changed environment in one object.

grfsh --json -c ...

>Output budget

Long output keeps its first and last lines, and the full text is saved to a file you can search.

GRFSH_OUTPUT_LINES=400

>Persistent sessions

A shell behind a Unix socket that keeps directory, variables and functions between requests.

grfsh --serve sock

>Look before running

See every command after expansion, with globs resolved and risky deletes flagged, without running anything.

explain 'rm -rf $dir/*'

>Exact edits

Replace text that must appear once, or pipe search results into replace. Atomic writes on every platform.

search x | replace x y

Read the agent guide, or point your agent at grf.sh/llms.txt.

Performance

Measured against dash, bash and zsh

Mean wall time from hyperfine. Shorter bars are faster. Each panel has its own scale.

Apple M2, macOS 26.6, system bash 3.2.57, dash, and zsh 5.9. Reproduce with scripts/bench.sh. The bash shipped with macOS is old, and a current bash does better on the string benchmark.

Why grfsh

How it compares on the features it focuses on

Default installs with no plugins or extra configuration, as of October 2026.

grfshbashzshfishnushell

Corrections are welcome in an issue. grfsh does not cover all of bash: see what is supported.

Get started

Pick up where you are

Guides for installing, moving over from another shell, and making grfsh your own.