doer — one-file pipe-native agent. strands-agents + ollama only.
Project description
DOER
stdin → llm → stdout
A Unix citizen that thinks. One file. One dep. Zero ceremony.
install
Pick your path. All three give you do on your $PATH.
# 1) pipx — isolated, auto-updatable (recommended)
pipx install doer-cli
# 2) pip — any venv
pip install doer-cli
# 3) one-liner (prebuilt binary, no Python needed)
# prebuilt binary installer — coming soon on GitHub Releases
Two binaries get installed:
do(short) anddoer(long). Pick your poison.
doconflict? Some shells havedoas a keyword (bash/zsh loops). The binary still works —do "hello"is unambiguous because of the argument. But if your shell auto-completes weirdly, alias it:echo "alias d="doer"" >> ~/.zshrc # or ~/.bashrcThen use
d "your query".
run
do "find files larger than 100MB"
cat error.log | do "what broke"
git log -20 | do "write release notes"
echo '{"a":1}' | do "to yaml"
curl -s api.io | do "summarize" | tee out.md
what it is
Agent(
model=Ollama(...),
tools=[shell] + hot_reload("./tools"),
system_prompt=SOUL.md + AGENTS.md + ~/.doer_history
+ ~/.bash_history + ~/.zsh_history + own_source,
)(stdin + argv)
That's the entire architecture. 164 lines of Python. It reads your shell like a person reads a room.
context it sees every call
| source | what |
|---|---|
SOUL.md (cwd) |
who it is in this project |
AGENTS.md (cwd) |
rules for this project |
~/.doer_history |
last N Q/A (DOER_HISTORY=10) |
~/.bash_history + ~/.zsh_history |
last N commands (DOER_SHELL_HISTORY=20) |
./tools/*.py |
hot-reloaded @tool functions |
| own source | full self-awareness |
No database. No config file. The filesystem is the memory.
providers
Auto-picked by what's on your machine.
# Bedrock (default when AWS creds exist) — Claude Opus 4.7, 1M ctx, 128k out
export AWS_BEARER_TOKEN_BEDROCK=... # or standard AWS_* creds
do "review this" < diff.patch
# Ollama (fallback) — local, private, no keys
ollama serve & ollama pull qwen3:1.7b
DOER_PROVIDER=ollama do "quick ping"
env knobs
# provider selection
DOER_PROVIDER= # "" (auto) | "bedrock" | "ollama"
# bedrock (defaults tuned for Claude Opus 4.7)
DOER_BEDROCK_MODEL=global.anthropic.claude-opus-4-7
DOER_BEDROCK_REGION=us-west-2
DOER_MAX_TOKENS=128000 # Opus 4.7 native max
DOER_ANTHROPIC_BETA=context-1m-2025-08-07 # auto on Claude — "" to disable
# ollama
DOER_MODEL=qwen3:1.7b
OLLAMA_HOST=http://localhost:11434
# context
DOER_HISTORY=10 # Q/A rows in prompt
DOER_SHELL_HISTORY=20 # shell rows in prompt
Opus 4.7 heads-up:
temperature/top_preturn 400 on any non-default value —doeronly sends them when you explicitly setDOER_TEMPERATURE/DOER_TOP_P.
extend in 60 seconds
# ./tools/weather.py
from strands import tool
import urllib.request
@tool
def weather(city: str) -> str:
"""Weather for a city."""
return urllib.request.urlopen(f"https://wttr.in/{city}?format=3").read().decode()
Next call: do "istanbul weather?" — hot-reloaded, no restart.
philosophy
┌─────┐ ┌──────┐ ┌──────┐
│stdin│──────▶│ do │──────▶│stdout│
└─────┘ └──────┘ └──────┘
grep with a brain. Chain it. Script it. Cron it.
Read SOUL.md for the manifesto. Read AGENTS.md for the rules.
family
| project | size | purpose |
|---|---|---|
| doer | 164 LOC | one pipe, one shell, one file |
| DevDuck | 60+ tools | every protocol, every edge |
uninstall
pipx uninstall doer-cli # or: pip uninstall doer-cli
rm /usr/local/bin/do # if installed via curl
license
Apache-2.0 · built in New York · 2026
do one thing and do it well — Doug McIlroy, 1978
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 doer_cli-0.4.0.tar.gz.
File metadata
- Download URL: doer_cli-0.4.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7caae0ccf5eaa7488a46f9501d9d8b1a6ed608c563d4642b8e05eef939afc319
|
|
| MD5 |
d3005669ce187ef0e421e3f3aa982d4d
|
|
| BLAKE2b-256 |
77e71e867a1fd7abeec2cbfa8c5c2b421d160f042be4f273f1b8d3ebea6fea60
|
File details
Details for the file doer_cli-0.4.0-py3-none-any.whl.
File metadata
- Download URL: doer_cli-0.4.0-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c3a174fa7b8e935b96ea0cd675f6d1f505db046a2ef0c898d113a848e28f2dc
|
|
| MD5 |
0f85825bade82117e91bbc9be963239e
|
|
| BLAKE2b-256 |
b2f1a3e59d65248dd75b5e26f65b352080cbe8d0dab20d042f41a5bceac72351
|