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.

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.3.0.tar.gz (7.0 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.3.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file doer_cli-0.3.0.tar.gz.

File metadata

  • Download URL: doer_cli-0.3.0.tar.gz
  • Upload date:
  • Size: 7.0 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.3.0.tar.gz
Algorithm Hash digest
SHA256 2b1faab47f3e21e0609c75ffe95a36958999aeed5f3bc0b6652ec8ce16fffa78
MD5 220747a58895726a465c897cfd6dcff1
BLAKE2b-256 445a9e96498db4b2d4e9e7a3674892a93a2da95487a8af95871f55a8cd3dbc57

See more details on using hashes here.

File details

Details for the file doer_cli-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: doer_cli-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bc94becee822aaae800f6c95189f1a5f8cbf2b136c1574dda096cb09a5ab8dcf
MD5 a6fa5493e00f5440a60160cd8900ad82
BLAKE2b-256 df8395cc761bd4581b5cb723428818094959d7e03d3f0964e8237ce62a779d82

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