Minimal Python CLI agent with native tools for shell execution and file operations
Project description
BitterAgent - Minimal Python CLI Agent
A ultra-minimal, extensible Python CLI agent with native tools for shell execution and file operations. This is intended to be the simplest implementation of an agent - a while loop over a model API - that will let us test and evaluate raw model performance on agentic tasks without disintermediation by agentic product features.
Core Components
1. Tool System
- Base Tool Class: Abstract class defining tool interface
name: Tool identifierdescription: Human-readable descriptionparameters: JSON Schema for tool parametersexecute(): Method to run the tool
- ToolRegistry: Manages tool registration and discovery
- Register built-in tools on startup
- Lookup tools by name
- List available tools
- ToolResult: Structured response from tool execution
success: Boolean statusoutput: Tool output/resulterror: Error message if failed
2. Provider Interface
- Provider ABC: Abstract base for LLM providers in
providers/base.pycomplete(messages, tools): Generate completion with tool supportget_tools_schema(registry): Convert tools to provider-specific format- Provider-specific configuration
- Built-in retry logic with exponential backoff
- Error handling for rate limits, timeouts, API errors
- AnthropicProvider: Implementation using Anthropic SDK in
providers/anthropic.py- Handle streaming responses
- Process tool use blocks
- Return structured responses
- Auto-retry on 429/500/502/503 errors
- Configurable max retries and timeout
- Extensible: Easy to add OpenAI, Ollama, or other providers
3. Agent Core
- Conversation Management
- Maintain message history
- Handle user input
- Process model responses
- System prompt loading from
system.mdfile
- Tool Execution Loop
- Parse tool calls from model
- Parallel execution for multiple tool calls
- Execute tools with parameters
- Return results to model in order
4. Native Tools
- ShellTool
- ReadFileTool
- WriteFileTool
- EditFileTool
5. CLI Interface
- Commands
chat: Interactive conversation moderun: Execute single commandtools: List available tools
- Options
--api-key: Model API key--model: Model selection--system-prompt: Path to system.md file (default: ./system.md if exists)--verbose: Debug logging
Installation
Install from PyPI
# Install with pip
pip install bitteragent
# Or install with uv (faster)
uv pip install bitteragent
# Set up API key
export ANTHROPIC_API_KEY=your-api-key-here
Build from Source
# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone https://github.com/alicehau/bitteragent.git
cd bitteragent
# Install dependencies with uv
uv sync
# Set up environment variables
cp .env.example .env
# Edit .env with your API key
Usage Examples
If installed from PyPI
# Interactive chat
bitteragent chat
# Run single command
bitteragent run "Create a Python hello world script"
# List available tools
bitteragent tools
# With specific model
bitteragent chat --model claude-sonnet-4-20250514
# With custom system prompt
bitteragent chat --system-prompt ./custom-prompt.md
If built from source
# Interactive chat
uv run python -m bitteragent chat
# Run single command
uv run python -m bitteragent run "Create a Python hello world script"
# List available tools
uv run python -m bitteragent tools
# With specific model
uv run python -m bitteragent chat --model claude-sonnet-4-20250514
# With custom system prompt
uv run python -m bitteragent chat --system-prompt ./custom-prompt.md
Configuration
# .env file
ANTHROPIC_API_KEY=your-api-key-here
Running Tests
# Install test dependencies
pip install pytest
# Run all tests
pytest tests/
# Run with verbose output
pytest tests/ -v
# Run a specific test file
pytest tests/test_agent.py
# Run with coverage (requires pytest-cov)
pip install pytest-cov
pytest tests/ --cov=bitteragent --cov-report=term-missing
License
MIT
Contributing
This is a minimal reference implementation. Feel free to fork and extend!
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 bitteragent-0.1.1.tar.gz.
File metadata
- Download URL: bitteragent-0.1.1.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee01c5ca1b0dbd91e0a3619b19e5da6b449d2d1ccf66d71012db0ffc075a6271
|
|
| MD5 |
24d5b3efa5ca87545990fcd360daea7f
|
|
| BLAKE2b-256 |
04ceeaf7ea2be93c7c2e2a6b4b72ef40c44877bb661deb1ca3256c3413159bc9
|
File details
Details for the file bitteragent-0.1.1-py3-none-any.whl.
File metadata
- Download URL: bitteragent-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7622b49afc075f8a82e90353b9c17624fa0651b4362cc0b946942a988b3ba9c3
|
|
| MD5 |
b11de344e84d56028f822e4c05d747ce
|
|
| BLAKE2b-256 |
e39c93c34f40ceb1ee36c428658cd2a3c5039ecaf740d55bd15a7b8bfbd5cbbd
|