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


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)
curl -sSL https://raw.githubusercontent.com/cagataycali/doer-cli/main/install.sh | sh

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.

env knobs

DOER_MODEL=qwen3:1.7b            # any ollama model
OLLAMA_HOST=http://localhost:11434
DOER_HISTORY=10                  # Q/A rows in prompt
DOER_SHELL_HISTORY=20            # shell rows in prompt

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.2.1.tar.gz (5.5 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.2.1-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: doer_cli-0.2.1.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for doer_cli-0.2.1.tar.gz
Algorithm Hash digest
SHA256 0a65d237293211ca683b0842166a39f9ea09c44e2332cf8500b03608b379cb0b
MD5 dd56891ff6cd41ea823c218901a914dc
BLAKE2b-256 5ee33b3d4f3042e1f5699eb7278e8faa88e1aeeea99526346bed45c3fdb589b4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: doer_cli-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for doer_cli-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6160ef41ed28bd37531359625254fe14274871af620cf372fa53758d1ec1a321
MD5 886c5a030fb8f645df8a46d732125937
BLAKE2b-256 0abf85f3685ff572656b56fdd2a9f156b3f4baca4aa66910b6930482d67594fd

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