Aetheris
A terminal AI assistant that works on your machine: it reads and writes files, runs commands and answers their prompts, searches the web, and can undo what it did. It is built for small local models first (Ollama), and talks to Anthropic, OpenAI, Gemini and Attacca with the same tools and the same approval prompts.
you ──► prompt box / aetheris -p ──► model (Ollama · Anthropic · OpenAI · Gemini)
│ tool call (native, or <tool_call> text + JSON repair)
▼
permissions ─► approval ─► tool ─► git commit per edit ─► auto-verify
│ │
└──────── result back to the model ◄┘
Quickstart
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.10+ | |
| Ollama | any recent | Only for local models. /connect reaches hosted providers without it |
| A model | gemma4:e4b recommended |
Any model Ollama reports tools for, 8B+. See model notes |
| git | optional | Enables a commit per AI edit and /undo |
# 1. Install
pip install aetheris
# 2. Pull a local model
ollama pull gemma4:e4b
# 3. Start it in the directory you want it to work in
aetheris
Inside, these six cover most sessions - /help shows them, /help all shows the rest:
| Command | What it does |
|---|---|
/connect |
Pick a provider and model (Ollama, Anthropic, OpenAI, Gemini, Attacca) |
/sessions |
Open a saved conversation |
/set NAME value |
Change a setting, e.g. /set DEEPTHINK on, /set AUTO_ALLOW off |
/undo |
Take back the last file change the AI committed |
/clear |
Start a fresh conversation |
/exit |
Leave |
Important: it runs commands and edits files as you, asking first unless you allow it.
Installation / Usage
Option A - from PyPI
pip install aetheris # the `aetheris` command
pip install "aetheris[ast]" # + Tree-sitter, for get_code_skeleton / query_ast_node
pip install "aetheris[attacca]" # + the packages /connect attacca needs
pip install "aetheris[keyring]" # + keep API keys in the OS keyring
Option B - from a checkout
# 1. Clone the project
git clone https://github.com/minjun1177/aetheris && cd aetheris
# 2. Install it editable, so a change takes effect without reinstalling
pip install -e .
pip install -r requirements.txt # ...or only the dependencies; then run: python -m aetheris
Carrying on, and running without the prompt box
aetheris -c # the newest session worked on in this directory
aetheris --resume <id or title> # a particular one
aetheris -p "summarise CHANGELOG.md" # one answer on stdout, then exit
git diff | aetheris -p "review this" --json # piped input + JSON: text, tool calls, tokens
aetheris -p "fix the test" --auto-allow # tools run without asking: scripts and CI
Using the parts
It is also a typed library: aetheris.MCPServer (MCP without an SDK) and aetheris.start_shell
(a command you can answer while it runs). Only aetheris.__all__ is promised - docs/library.md.
Documentation
| Topic | |
|---|---|
| Features | Everything it does, in one list |
| Setup and models | Which models work, tests, the benchmark |
| Tools | The model's tools, the call format, hashline editing |
| Providers | Ollama, Anthropic, OpenAI, Gemini, Attacca, keys, reasoning models |
| Running commands | run_cmd, live prompts, the Python VM |
| Undo and verify | A commit per edit, /undo, auto-verify, /tdd |
| Permissions and secrets | Allow/deny rules, approvals, .env redaction |
| Deepthink | Plan, check, build, review, verify |
| Skills and MCP | SKILL.md packs and MCP servers |
| Web search | How results are found and ranked |
| Agent channel · Remote control | Several agents in one project; driving a session from a phone |
| Configuration · Slash commands | Every setting and every command |
| Design | Architecture overview, tests, how it differs from other harnesses |
Configuration / Environment Variables
/set changes a setting and saves it to ~/.aetheris/settings.json; all of them: docs/configuration.md.
| Variable | Default | Description |
|---|---|---|
AETHERIS_HOME |
~/.aetheris |
Where sessions, settings, memory and keys live |
AETHERIS_ACCEPT_TERMS |
unset | 1 accepts the first-run terms where no terminal can ask |
OLLAMA_HOST |
http://localhost:11434 |
The Ollama daemon (also /set OLLAMA_HOST) |
ANTHROPIC_API_KEY · OPENAI_API_KEY · GEMINI_API_KEY |
unset | Hosted keys; /connect can save one instead |
AETHERIS_KEYRING |
on | off keeps saved keys in providers.json (0600) |
Project Structure
aetheris/
├── aetheris/ # the package: app.py, llm_client.py, tools.py, toolspec.py, ...
├── bench/ # run.py - measure a model on the documented tasks
├── docs/ # the user documentation
├── skills/ # bundled SKILL.md packs
├── tests/ # one script per area; each prints [ok]/[FAIL]
├── ARCHITECTURE.md # for changing the code: how it fits, what not to break
├── CHANGELOG.md # what changed, and why
└── pyproject.toml
Compatibility / License
| Python | 3.10 - 3.14 |
| OS | Linux, macOS, Windows (waiting-for-input detection is best on Linux) |
| Stable surface | Slash commands, /set names, tool names, the ~/.aetheris layout and aetheris.__all__ - see CHANGELOG.md |
| License | Apache-2.0 - see LICENSE. Provided "AS IS"; the first run says what it can do to your machine and asks once |
Metadata
Release files for aetheris 1.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aetheris-1.2.0.tar.gz | 713.2 kB | With provenance | Details for aetheris-1.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aetheris-1.2.0-py3-none-any.whl | Python 3 | none | any | Details for aetheris-1.2.0-py3-none-any.whl |
Total release size: 1.1 MB
Release files / aetheris-1.2.0.tar.gz
| Download URL | aetheris-1.2.0.tar.gz |
|---|---|
| Size | 713.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
500c8dbbe353fb5fe91500220f25c4374d25fcf6aded6315a94234fa49fde5cd
|
|
BLAKE2b-256 checksum How to use checksums |
f9deeb590962b18a87c7edecd255165b56367d501cbcdd4507b97568be226e7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 11, 2026.
Transparency logRelease files / aetheris-1.2.0-py3-none-any.whl
| Download URL | aetheris-1.2.0-py3-none-any.whl |
|---|---|
| Size | 392.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fdc2154485819ee6f78cd9aa4002fcd3c91298936ea81594e671a0c22eaf51cb
|
|
BLAKE2b-256 checksum How to use checksums |
83e345bd025db3f41faec372f41a90012e08b1c890952d97ae61ff7c368487d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 11, 2026.
Transparency logSecurity for aetheris 1.2.0
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for aetheris-1.2.0.tar.gz
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 Nov 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.