Skip to main content

Python port of pi-mono: coding agent with multi-provider LLM support, TUI, agent loop, and tools

Project description

pi-mono-python

Python port of the pi-mono TypeScript monorepo — four packages with aligned code, logic, algorithms, and folder structure.

中文 README →

TypeScript Python Description
@mariozechner/pi-ai pi_ai Unified LLM streaming layer (Google, Anthropic, OpenAI, Bedrock, …)
@mariozechner/pi-agent-core pi_agent Agent loop, tool execution, state management
@mariozechner/pi-coding-agent pi_coding_agent Coding agent CLI with file tools: read, write, edit, bash, grep, find, ls
@mariozechner/pi-tui pi_tui Terminal UI library with differential rendering engine

Installation

Prerequisites

  • Python 3.11+ — Check with python3 --version
  • uv — Fast Python package manager

Install uv if you don't have it:

curl -LsSf https://astral.sh/uv/install.sh | sh

Clone and Install

git clone https://github.com/openxjarvis/pi-mono-python.git
cd pi-mono-python

# Install all four packages and their dependencies in one step
uv sync

Quick Start

1. Configure API Keys

Create .env in the project root:

# Google Gemini (recommended default)
GEMINI_API_KEY=your_key_here

# Optional — add whichever providers you need
ANTHROPIC_API_KEY=
OPENAI_API_KEY=
GOOGLE_API_KEY=        # alternative to GEMINI_API_KEY
AWS_ACCESS_KEY_ID=     # for AWS Bedrock
AWS_SECRET_ACCESS_KEY=

Important: .env is loaded automatically at runtime. Never commit it to git.

2. Launch the Interactive TUI

uv run --package pi-coding-agent pi

This opens the full-featured terminal UI where you can chat with the coding agent.

Keyboard shortcuts:

Key Action
Enter Send message
Shift+Enter New line in input
/ Slash command completion
@ File path completion
Ctrl+P Cycle to next model
Ctrl+C / Esc Quit

3. Try a Simple Task

Type in the terminal:

Create a Python function to calculate fibonacci numbers

The agent will write the code and save it to your current directory.


Common Use Cases

Single Prompt (Non-Interactive)

For scripting or quick tasks:

uv run --package pi-coding-agent pi --print "Write a quicksort in Python"

The agent's response prints to stdout and exits.

Switch Models

# Use a specific model
uv run --package pi-coding-agent pi --model gemini-2.5-pro-preview

# Use a provider + model name
uv run --package pi-coding-agent pi --provider google --model gemini-2.0-flash

# List all available models
uv run --package pi-coding-agent pi --list-models

Resume Previous Sessions

# Continue the most recent session
uv run --package pi-coding-agent pi --continue

# Pick from a list of previous sessions
uv run --package pi-coding-agent pi --resume

Slash Commands in TUI

Type / in the interactive TUI to see available commands:

Command Description
/model <name> Switch to a different model
/thinking <level> Set thinking detail: minimal · low · medium · high · xhigh
/compact Compress conversation context to save tokens
/session Show session statistics (tokens used, cost estimate)
/tools List all active tools available to the agent

Full CLI Help

uv run --package pi-coding-agent pi --help

Running Tests

All tests

uv run pytest

Per-package

uv run pytest packages/tui/tests/          # TUI components
uv run pytest packages/ai/tests/           # AI providers
uv run pytest packages/agent/tests/        # Agent core
uv run pytest packages/coding-agent/tests/ # CLI + coding agent

Live API tests (requires GEMINI_API_KEY)

uv run pytest packages/ai/tests/ --live -v

# Or via environment variable
LIVE_TESTS=1 uv run pytest packages/ai/tests/ -v

All tests run against mocks by default — no API key required, no quota consumed.


Test Status

Package Tests Status
pi_tui 135 ✅ passed
pi_ai + pi_agent 156 ✅ passed (7 skipped = live-only)
pi_coding_agent 287 ✅ passed
Total 578 ✅ all passing

Project Structure

pi-mono-python/
├── .env                          ← API keys (never commit)
├── pyproject.toml                ← uv workspace root
├── conftest.py                   ← global pytest config (.env loader)
└── packages/
    ├── ai/                       ← LLM provider layer
    │   └── src/pi_ai/
    │       ├── providers/        ← google.py, openai.py, anthropic.py, …
    │       ├── stream.py         ← unified stream_simple() / complete_simple()
    │       └── utils/            ← overflow detection, JSON parse, …
    ├── agent/                    ← core agent loop
    │   └── src/pi_agent/
    │       ├── agent.py          ← main run loop
    │       ├── tools/            ← tool registry & execution
    │       └── session.py        ← session state
    ├── coding-agent/             ← CLI entry point & extensions
    │   └── src/pi_coding_agent/
    │       ├── cli.py            ← `pi` command
    │       ├── core/             ← AgentSession, system prompt, tools
    │       └── modes/interactive/← TUI interactive mode
    └── tui/                      ← terminal UI library
        └── src/pi_tui/
            ├── components/       ← Editor, SelectList, Markdown, …
            ├── tui.py            ← differential rendering engine
            └── keys.py           ← Kitty keyboard protocol parser

TypeScript → Python Mapping

TypeScript Python
interface X {} class X(BaseModel): or @dataclass
type X = A | B X = Union[A, B]
async function f() async def f()
AsyncIterable<T> AsyncGenerator[T, None]
AbortSignal asyncio.Event (cancellation token)
EventEmitter dict[str, list[Callable]]
TypeBox schema pydantic.BaseModel
vitest pytest + pytest-asyncio

FAQ

Problem Solution
uv: command not found Run the install script: curl -LsSf https://astral.sh/uv/install.sh | sh
GEMINI_API_KEY not set Add your key to .env
ModuleNotFoundError: pi_tui Use uv run --package pi-coding-agent pi instead of python directly
TUI shows garbled characters Ensure your terminal supports UTF-8 (iTerm2, Warp, or any modern terminal)
Tests are skipped Add --live to run real API tests
400 thought_signature error Upgrade to the latest version — this is fixed in the google provider

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

clarity_pi-0.54.7.tar.gz (430.6 kB view details)

Uploaded Source

Built Distribution

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

clarity_pi-0.54.7-py3-none-any.whl (518.6 kB view details)

Uploaded Python 3

File details

Details for the file clarity_pi-0.54.7.tar.gz.

File metadata

  • Download URL: clarity_pi-0.54.7.tar.gz
  • Upload date:
  • Size: 430.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for clarity_pi-0.54.7.tar.gz
Algorithm Hash digest
SHA256 e414551ef4c32e0bdf9b7780d7f687be668283104fb10a1def7a6460462e5e53
MD5 eaabf523e18172430eb0a975e92edfb0
BLAKE2b-256 521bdf8a93e85dc3fd7f8d7d0e013ec6e5460d9d5266863b1fd8ecb3f9d1d786

See more details on using hashes here.

File details

Details for the file clarity_pi-0.54.7-py3-none-any.whl.

File metadata

  • Download URL: clarity_pi-0.54.7-py3-none-any.whl
  • Upload date:
  • Size: 518.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.10 {"installer":{"name":"uv","version":"0.9.10"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for clarity_pi-0.54.7-py3-none-any.whl
Algorithm Hash digest
SHA256 023606e5e9e8e4756dbcde17df4db601c83ae8660c1d843dce54f340f888cd4c
MD5 9646553555e0b542c797a96c59fa00b5
BLAKE2b-256 c0a604174bb9ed704c7c1939aedcdb5764495ad2cf2ef6c6ac31555aa11836e0

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