Frequently asked questions
What is atty?
A small program that sits between your terminal emulator and your shell. It watches what you type before the shell sees it, so it can do things like:
- Show ghost-text suggestions from your shell history.
- Warn you (or block you) on dangerous commands like
rm -rf /. - Turn
#: list large filesinto the actual shell command via an LLM. - Give you a status bar at the bottom of every terminal.
You see your normal shell. atty is invisible until it has something useful to say.
Why would I want this?
You already use a shell. atty layers conveniences on top without making you change shells, learn a new config language, or load a plugin system.
- You like your current shell. atty doesn’t replace bash/zsh/fish. It runs your shell unchanged, just with extra eyes on it.
- You want fish-style suggestions in bash/zsh. Atuin or your own history gives you them, atty renders them.
- You’ve typed
rm -rfsomewhere scary at least once. The guardrail catches you before Enter lands. - You want a status line that survives across terminal emulators. atty’s status bar follows you whether you’re on Ghostty, Kitty, Alacritty, or SSH.
How is this different from oh-my-zsh / starship / atuin?
| Tool | What it does | Where atty fits |
|---|---|---|
| starship | Renders your shell prompt. | Different layer. starship is your PS1; atty sits outside your shell. They compose. |
| oh-my-zsh | Plugin framework that runs inside zsh. | atty is the layer above zsh. You can run oh-my-zsh + atty together. |
| atuin | Stores + fuzzy-searches your shell history. | atty’s Atuin module uses atuin’s CLI to surface that history as ghost text in bash AND zsh. atty needs atuin installed for that feature. |
| fish | Smart shell with built-in suggestions. | atty gives bash/zsh users the fish-style suggestion + the dangerous-command guard without switching shells. |
You can run atty alongside any of these. None of them does what atty does.
Does it slow down my shell?
No. atty’s dispatch loop is one inline for over the modules you
enabled — every disabled module compiles out completely. There is
no plugin loader, no shared-library lookup at startup, no runtime
config parsing.
In practice: same keystroke-to-display latency as your raw shell, plus
a few microseconds for the suggestion render. The PTY proxy itself is
plain poll() on stdin/PTY — no async runtime, no extra threads
unless a module asks for one.
Where does my config live?
src/config.zig in the atty source tree. It’s gitignored so your
edits never conflict on git pull.
The companion file src/config.def.zig is the template atty ships
with — committed and maintained upstream. On first build, atty copies
it across to src/config.zig if you don’t have one yet.
If you want your config tracked outside the atty repo (e.g. a dotfiles
repo), point at it with -Dconfig=/path/to/mine.zig or
make CONFIG=/path/to/mine.zig build.
Why edit a file and recompile instead of a runtime config?
This is the Suckless approach — you change the program by changing the program, then compiling it. The trade-off:
- Cost: every config change means a
make build. Re-running takes a few seconds. - Win: every config option becomes part of the type system. Wrong module name? Compiler error. Missing field? Compiler error. No YAML-parsing-at-startup, no fragile env-var precedence rules. Disabled modules don’t ship as dead code — they don’t ship at all.
If that trade-off is wrong for you, that’s totally fair — atty isn’t trying to be everything to everyone. It’s a small tool with a particular point of view.
Can I disable {Atuin / LLM / security_guard / statusbar}?
Yes. Edit src/config.zig, remove the module from pub const modules,
recompile. Disabled modules vanish from the binary — no dead code, no
runtime cost.
I don’t have Atuin installed. Will atty still work?
Yes. atty ships with a history module (default) that reads
~/.bash_history / ~/.zsh_history directly. No daemon, no shell
plugin. Atuin is opt-in for people who already use it.
Why is the front-page demo a typing animation and not a real recording?
Because the homepage should still be readable when JavaScript is
disabled — search-engine crawlers, NoScript users, reader-mode
browsers all see the same first frame the animation lands on. A
real asciinema cast would be a black box for those readers, and
a video would push the page weight up by an order of magnitude
for very little extra information. The text-driven playback is
honest about what atty is — a terminal program — without trading
accessibility for production value. If the animation isn’t moving,
your browser is in a reduced-motion mode (the page honors
prefers-reduced-motion: reduce) — the static fallback shows the
same three scenes side by side.
How do I report a bug?
Open an issue at github.com/fentas/atty/issues. Include
the output of eval "$(atty doctor)" if your problem is with shell
integration (OSC 133 markers, prompt detection, etc.).
Is it production-ready?
atty is pre-1.0 — APIs around module hooks may still shift between minor releases. The PTY core, guardrail, and history modules are solid. Atuin works for prefix-matched suggestion + record. The LLM module is opt-in; if you don’t enable it, none of its code touches your shell.
For day-to-day use as a personal shell layer, yes. For shipping it inside a product, watch the release notes between minor versions.
What’s the security_guard module?
It’s the in-proc safety net: a handful of statically-compiled
patterns that catch obvious-dangerous shapes (curl | sh, npm
install of a flagged package, bash -c <long base64>, etc.) and
prompt you before the shell runs them.
There’s also a much heavier sidecar daemon — atty-guard — that
adds a regex tier, an optional ONNX classifier, optional eBPF
kernel-side enforcement, IOC corpus fetching, and a per-user trust
store. That’s a separate install (sudo make install-guard), and
99% of atty users don’t need it. See the operator workflow
guide if you want the full stack.
Where do I learn the deep technical stuff?
The architecture, the module-writing guide, the LLM internals, the security_guard design docs — all on this site under the “Advanced” section in the nav. They’re verbose because the design decisions need full justifications somewhere, but you don’t need to read any of them to use atty.