Skip to main content

SEER — Shell Enhanced Execution & Reasoning

Built with AI assistance

An AI assistant that lives in your terminal. It sees what just went wrong and tells you how to fix it. It answers shell questions. In brave mode, it does the job for you.

seer help explaining a failed tar command

Why seer

  • No copy-pasting errors. seer help reads your recent terminal output and explains the last failure.
  • It can do the work. Brave mode runs the commands it needs, reads the results, and answers: tables, summaries, fixes.
  • Safe by default. Read-only commands run on their own. Anything that changes something asks first, and you see the whole command.
  • Your choice of model. Local (LM Studio, Ollama, llama.cpp, vLLM), OpenAI, Anthropic, or your Claude Code / Codex subscription. seer picks up a running local server automatically.
  • Plain English at the prompt. Type what you want and press Ctrl+G.

macOS and Linux · zsh and bash · inspired by PEEL for PowerShell.


Quick start

1. Install

curl -fsSL https://raw.githubusercontent.com/zeddius1983/seer/main/install.sh | bash
source ~/.zshrc

This installs seer (and uv if needed), the zsh integration and Ctrl+G. On bash, add source "$(seer --shell-path bash)" to ~/.bashrc instead.

2. Connect a model. Start LM Studio or Ollama with any model and seer finds it. For something else, see Choosing a model. Check with:

seer --stats

3. Use it

seer help                          # after something fails: what went wrong, and the fix
seer how do I find what is using port 8080
seer -b what is taking up space in my home folder

Brave mode: let seer do it

Add -b and seer works out the commands, runs them, and answers with the result. Each command is shown as it runs.

seer brave mode listing the largest Python files as a table

It handles tasks that need several steps, where each step depends on what the last one found:

seer -b find the 5 largest files here and show them as a table
seer -b which file changed most in the last 20 commits, and what were its last 3 changes about
seer -b which of my python files has the most lines, and what does it import
seer -b what is listening on network ports, and which process owns each
seer -b find log files older than 30 days, tell me how much space they take, and compress them
seer -b check whether config.yaml is valid, explain what is wrong, and fix it
seer -b write a zfs cheatsheet and save it to ~/Documents as markdown

Anything that changes something asks first. You see the whole command in a box and answer y, n, or e to edit it. If you answer n, seer stops and tells you what it would have run.

seer brave mode reading and validating a broken YAML file, then asking before fixing it

To make brave mode the default for every question, including Ctrl+G, add this to ~/.config/seer/config.yaml:

brave: true
brave_confirm: auto   # when to ask first: auto | trust | always
brave_confirm Asks before running
auto (default) anything not known to be read-only
trust only destructive commands: rm, mv, sudo, > file, sed -i, git push/reset, installs, …
always every command
How brave mode stays safe
  • seer checks each command itself before running it. It doesn't just take the model's word that a command is safe. In auto mode only an allowlist of read-only commands runs without asking. Commands like find -exec, xargs, sed and awk count as read-only only when what they run or edit is also read-only.
  • The model also marks commands it knows will change something, and those always ask. The model can add confirmations but never skip them, because text in a file or a web page could try to talk it into something harmful.
  • Commands run in your current directory with no input and a 60s timeout, for at most 6 steps. Ctrl+C stops at any point.
  • seer --no-brave <question> turns brave mode off for one question. seer help and seer do never use it.
  • Piped input (git log -5 | seer -b …) is read to the end before brave mode starts, however long the command takes. For a live stream (tail -f … | seer), use watch mode: no -b.
  • Brave mode needs a capable model. It was tested with Claude Sonnet. Very small local models (~2B) tend to lose track after a few steps.

Everyday use

You type seer does
seer help Explains the last error in your terminal and how to fix it
seer <question> Answers any shell question
seer -b <task> Does the task and shows the result (brave mode)
seer do <task> Suggests one command and runs it if you confirm
question + Ctrl+G Same as seer <question>, straight from the prompt (zsh)
cmd 2>&1 | seer Explains that command's output
git log -5 | seer -b <task> Brave mode starting from the piped output
tail -f app.log | seer Watches a live stream and flags problems every 15s

Useful flags: -s streams the answer as it's written · -r gives plain text for scripts · -p <provider> / -m <model> switch the model for one question · --no-context skips your terminal output.

Diagnostics: seer --stats shows the active model and settings, seer --context shows exactly what gets sent, and seer config prints your config file.


Choosing a model

With provider: auto (the default), seer uses the first local server it finds: llama.cpp, LM Studio, Ollama, then vLLM. To use something else, set it in ~/.config/seer/config.yaml (run seer config to create it):

provider: anthropic        # or: openai, ollama, lmstudio, claude-cli, …
Provider provider: Setup
LM Studio, Ollama, llama.cpp, vLLM lmstudio, ollama, llamacpp, vllm Just start the server
OpenAI openai OPENAI_API_KEY
Anthropic anthropic ANTHROPIC_API_KEY
Claude Code / Codex CLI claude-cli, codex-cli Installed and signed in. Uses your subscription
Any OpenAI-compatible server a name you add type: openai + base_url
Using your Claude Code or Codex subscription

If you have Claude Code or Codex installed and signed in, seer can use it instead of an API key. This is off by default:

provider: claude-cli     # use it always…
auto_cli: true           # …or only when no local server is running (claude-cli, then codex-cli)

providers:
  claude-cli:
    type: claude-cli
    model: sonnet        # haiku / sonnet / opus, or a full model id
  codex-cli:
    type: codex-cli
    model: [gpt-6.1-sol, auto]  # tried in order; auto = your ~/.codex/config.toml model
    reasoning_effort: low
  • seer runs the official claude -p / codex exec binary, which signs in with your own account. seer never touches your credentials.
  • The CLI runs with its tools switched off, so it only answers. When brave mode runs commands, seer runs them, never the CLI.
  • Requests count against your plan's limits. claude-cli answers in a few seconds; codex-cli takes about 10s.
  • This use is subject to Anthropic's and OpenAI's terms. If you want no ambiguity, use the anthropic / openai providers with an API key.
Custom server or model
provider: myserver
providers:
  myserver:
    type: openai                     # any OpenAI-compatible API
    base_url: http://myserver:8080/v1
    api_key: none
    model: my-model                  # or auto: the first model the server lists
    max_tokens: 16000                # optional: output cap per call, reasoning included
    reasoning_effort: low            # optional: only for servers and models that support it

Reasoning models think before they answer. While they do, the status line counts it (thinking… (reasoning, 1,234 words)), and max_tokens stops one that would think indefinitely: seer then says it hit the limit instead of waiting. If a server rejects the default cap because the model's context window is smaller (vLLM with an 8K model, say), seer drops it and retries; a max_tokens you set is always sent.


How it works

A small shell hook saves your recent terminal output after every command. seer help sends that output, plus your OS and shell, to the model. Inside tmux seer reads the whole screen, including error output. Outside tmux it sees the last command and its exit code.


More install options, uninstall, development

Specific version or branch (any git ref):

curl -fsSL https://raw.githubusercontent.com/zeddius1983/seer/main/install.sh | bash -s -- --version v1.3.0

Different Ctrl+G key (zsh bindkey notation, e.g. ^@ for Ctrl+Space):

curl -fsSL https://raw.githubusercontent.com/zeddius1983/seer/main/install.sh | SEER_IMPLICIT_BIND='^@' bash

From source: git clone https://github.com/zeddius1983/seer && cd seer && uv tool install .

Uninstall:

curl -fsSL https://raw.githubusercontent.com/zeddius1983/seer/main/install.sh | bash -s -- --uninstall

The installer backs up ~/.zshrc before changing it (~/.zshrc.YYYYMMDD_HHMMSS.bak).

Development:

uv sync                  # dev environment
uv run pytest            # tests
.venv/bin/seer --help    # run without installing

Metadata

Release files for seer-ai 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for seer-ai 1.3.0
File Size Uploaded
seer_ai-1.3.0.tar.gz 105.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for seer-ai 1.3.0
File Interpreter ABI Platform
seer_ai-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 151.2 kB

Release files / seer_ai-1.3.0.tar.gz

Download URL seer_ai-1.3.0.tar.gz
Size 105.1 kB
Tags Source
SHA-256 checksum
How to use checksums
022351490c384871458686be7480da3c05eded943b3eaf269a54b1a6920a4278
BLAKE2b-256 checksum
How to use checksums
2d2c068ba70e7f5566fd6a5c01127f5b40212263af4e0842bb3a1bb78044d2f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / seer_ai-1.3.0-py3-none-any.whl

Download URL seer_ai-1.3.0-py3-none-any.whl
Size 46.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a14987a68cc5175d2de8c84596fcc0eeaf10b3d5d8f7aa83c4ec50b52c26a429
BLAKE2b-256 checksum
How to use checksums
97bf58ba802ebb838e76435191c69657e074d4971a4721ca384aac7ebd16a47e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

1.3.1

2 release files

This release

1.3.0 This release

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page