Skip to main content

doer — one-file pipe-native agent. strands-agents + ollama only.

Project description

doer

DOER

stdin → llm → stdout

A Unix citizen that thinks. One file. One dep. Zero ceremony.

PyPI License Python Docs

📖 Full documentation →


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) and doer (long). Pick your poison.

do conflict? Some shells have do as 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 ~/.bashrc

Then 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_p return 400 on any non-default value — doer only sends them when you explicitly set DOER_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

doer_cli-0.4.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

doer_cli-0.4.0-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

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

Hashes for doer_cli-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7caae0ccf5eaa7488a46f9501d9d8b1a6ed608c563d4642b8e05eef939afc319
MD5 d3005669ce187ef0e421e3f3aa982d4d
BLAKE2b-256 77e71e867a1fd7abeec2cbfa8c5c2b421d160f042be4f273f1b8d3ebea6fea60

See more details on using hashes here.

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

Hashes for doer_cli-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9c3a174fa7b8e935b96ea0cd675f6d1f505db046a2ef0c898d113a848e28f2dc
MD5 0f85825bade82117e91bbc9be963239e
BLAKE2b-256 b2f1a3e59d65248dd75b5e26f65b352080cbe8d0dab20d042f41a5bceac72351

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page