A Suckless-style PTY proxy in Zig.
Composed at compile time, not loaded at run time.

Get started → FAQ GitHub ↗

~/code/atty — atty bash

Useful keystrokes

Ghost-text suggestions in bash and zsh. Dangerous-command guardrails. #: intent rewritten by an LLM into a real shell command. A status bar that follows you across every terminal.

Compile-time composed

The dispatch loop is one inline for over your config tuple. Disabled modules don't ship as dead code — they don't ship at all. No plugin loader, no *anyopaque, no runtime branching.

Suckless config

Your config is a Zig file. Edit it, recompile, done. git pull won't fight you — defaults come from struct fields, your overrides live in a gitignored sibling. dwm's config.h pattern, but type-checked.

Install

One line gets you a working atty. The full walkthrough lives in Getting started.

Pre-built binary

curl -fsSL https://bin.atty.sh | sh

Detects your CPU, verifies the SHA256, drops the binary at ~/.local/bin/atty.

From source

curl -fsSL https://get.atty.sh | sh

Clones the repo, bootstraps Zig 0.16, prompts you to look at src/config.zig before building.

The dashboard

curl -fsSL https://tui.atty.sh | sh

Installs attop at ~/.local/bin/attop — the dashboard that opens on a setup wizard.

Wire it into your shell

# Either point your terminal emulator at atty …
command = atty bash       # ~/.config/ghostty/config

# … or eval the init snippet from your .bashrc / .zshrc:
eval "$(atty init bash)"

Full walkthrough → Browse modules