Python port of the pi-mono TypeScript monorepo — same
packages/tree, aligned code, logic, algorithms, and folder structure.Aligned to: pi-mono TypeScript v0.84.3 (2026-08-24). See
ALIGNMENT.md(anddocs/ALIGNMENT_REPORT_2026-08.md) for the module inventory.
| 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, powershell (Windows), grep, find, ls |
@mariozechner/pi-tui |
pi_tui |
Terminal UI library with differential rendering engine |
@earendil-works/pi-telemetry |
pi_telemetry |
Vendor-neutral telemetry contracts and in-memory recorder |
@earendil-works/pi-protocol |
pi_protocol |
Length-prefixed CBOR session protocol |
@earendil-works/pi-client |
pi_client |
Transport-neutral remote session client |
@earendil-works/pi-server |
pi_server |
Experimental session server + Unix listener |
@earendil-works/pi-session-backend-sqlite-node |
pi_session_backend_sqlite |
SQLite session backend (sqlite3 equivalent of node:sqlite) |
@earendil-works/pi-evals |
pi_evals |
Coding-agent eval harness (pytest equivalent of vitest-evals) |
- 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 | shgit clone https://github.com/openxjarvis/pi-mono-python.git
cd pi-mono-python
# Install all four packages and their dependencies in one step
uv syncCreate .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:
.envis loaded automatically at runtime. Never commit it to git.
uv run --package pi-coding-agent piThis 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 |
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.
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.
# 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# 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 --resumeType / 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 · max |
/compact |
Compress conversation context to save tokens |
/session |
Show session statistics (tokens used, cost estimate) |
/tools |
List all active tools available to the agent |
uv run --package pi-coding-agent pi --helpuv run pytestuv 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 agentuv run pytest packages/ai/tests/ --live -v
# Or via environment variable
LIVE_TESTS=1 uv run pytest packages/ai/tests/ -vAll tests run against mocks by default — no API key required, no quota consumed.
| Package | Tests | Status |
|---|---|---|
pi_tui + pi_agent |
— | ✅ passed |
pi_ai |
— | ✅ passed (7 skipped = live-only) |
pi_coding_agent |
— | ✅ passed |
| Total | 720 | ✅ all passing (7 skipped) |
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 |
|---|---|
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 |
| 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 |