A lightweight CLI for explicit, reproducible AI coding workflows.
Project description
Aethr
A tiny CLI for running explicit AI coding workflows from YAML.
Core Idea
Coding with LLMs is not one-shot generation.
Real development is:
plan -> implement -> review -> iterate
Aethr makes those workflows programmable. A run is just:
task + workflow + explicit context + model routing
Aethr is stateless. The only project file it creates is .aethr.yaml.
Install
pip install aethr
For local development:
pip install -e ".[dev]"
Quickstart
aethr init review-existing-diff
aethr run "review my current changes before I commit"
Aethr copies a YAML preset into .aethr.yaml. Edit it like any other project
file.
How Aethr Works
- Task: the instruction passed on the command line.
- Workflow: the YAML file that defines ordered steps.
- Steps: sequential units of work. Aethr runs them in order.
- Roles: named responsibilities such as
planner,reviewer, orwriter. - Context: explicit repo input declared per step.
- Model routing: each role can point at a different LiteLLM model.
Each step receives the task, prior step outputs, and its declared context. The step result stays in memory, streams to the terminal as it is generated, and is printed in a Rich panel when complete.
Example Workflow Config
workflow: review-existing-diff
roles:
reviewer: Review the provided task context as if it were an existing diff.
models:
reviewer: openai:gpt-5.5
steps:
- id: review
role: reviewer
context:
- git_diff
Built-In Workflows
plan-implement-review: plan a task, propose an implementation, review it.review-existing-diff: review the current working tree diff.debug-failing-test: diagnose a failing test, propose a fix, review it.add-tests: plan, draft, and review focused test coverage.docs-sync: update docs from the current diff and README context.custom: a minimal one-step workflow to edit freely.
List presets:
aethr init --list
Initialize another preset:
aethr init docs-sync --force
Examples
The examples/ directory contains small workflow files you can copy from:
examples/review-existing-diff.yamlexamples/add-tests.yamlexamples/docs-sync.yaml
Explicit Context
Aethr uses explicit context instead of automatic retrieval. That keeps runs easy to understand: the YAML shows exactly what each step can see.
Supported context sources:
git_diff: runsgit diff --no-ext-diff.file:<path>: reads one UTF-8 file relative to the project root.glob:<pattern>: reads matching UTF-8 files relative to the project root, with a small content cap.
Example:
steps:
- id: review-docs
role: reviewer
context:
- git_diff
- file:README.md
- glob:docs/**/*.md
Missing files, empty diffs, non-git directories, and unreadable files appear as clear placeholder notes in the prompt.
Prompt Previewing
Use --show-prompt to see exactly what Aethr would send to each model:
aethr run "review my current changes before I commit" --show-prompt
Aethr does not call models in prompt preview mode. For later steps, it uses a clear placeholder where real previous step output would appear.
Mock Mode
Aethr works without API keys by returning deterministic mock responses.
Aethr also loads a project-level .env automatically before model calls, so
credentials can live alongside the workflow file without extra flags.
Use the models configured in .aethr.yaml:
AETHR_LIVE=1 aethr run "review my current changes"
Override every configured model with one LiteLLM model:
AETHR_MODEL=openai:gpt-5.5 aethr run "review my current changes"
Philosophy
Aethr should feel like:
gitpytestrgcargo
It should not feel like:
- an agent framework
- an autonomous coding platform
- an AI operating system
Aethr intentionally avoids persistence, replay systems, caches, plugins, DAGs, async runtimes, vector search, automatic retrieval, memory systems, and agent abstractions.
If a workflow fails, Aethr prints a copyable JSON checkpoint for the completed
steps. Pass that back with --resume-checkpoint to continue from the next
step without rerunning the earlier ones.
Future Work
One likely future UX is workflow promotion: take a one-off run that worked and
turn it into an editable .aethr.yaml workflow. The idea is to help users go
from ad hoc sessions to repeatable workflows without introducing session
storage, replay systems, or hidden history.
Architecture
aethr/
cli.py
config.py
context.py
executor.py
llm.py
prompts.py
workflow.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aethr-0.1.1.tar.gz.
File metadata
- Download URL: aethr-0.1.1.tar.gz
- Upload date:
- Size: 16.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8175e3afd6a5e1abfd5102a91577e38e9b3e8651353fd78fb557cef284f82e70
|
|
| MD5 |
d3acb98ee45052bd7edca868448bea46
|
|
| BLAKE2b-256 |
861aee737be41a3ac3c67f2c4ea83650c09e00cedc8b9cf1a77e469da7aff5ac
|
File details
Details for the file aethr-0.1.1-py3-none-any.whl.
File metadata
- Download URL: aethr-0.1.1-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
358ae5236363d380e70f4212b15632a6e5fa8c29c209e6a28cc5cdd8ae8e958f
|
|
| MD5 |
2bdfde14117b5f84f0cf8873454eed5d
|
|
| BLAKE2b-256 |
a2bbb466e045657b9e7f368d7e967768f650033ac9aab77edc605331a7b9b906
|