Skip to main content

PW Agent 🧠

CLI coding assistant powered by your Ollama GPUs via PastaWater.

Install

The recommended way to install pw-agent is using pipx to keep it isolated from your other Python packages:

pipx install pw-agent

Alternatively, you can use standard pip: pip install pw-agent

Usage

pw-agent

First run guides you through setup — paste your API token, pick a GPU, start chatting.

Features

  • Interactive REPL with real-time streaming and a premium dashboard status bar.
  • Plan vs Build Modes: Use /plan for read-only analysis and /build for execution.
  • Context Discovery: Automatically finds PW_AGENT.md for project-specific rules.
  • Tab Autocomplete for commands, file paths, and GPU slots.
  • Session Control: Fresh sessions by default; use -c to resume where you left off.
  • File Injection: /add file.py or @file.py — inject files into the LLM's context.
  • Batch Processing: Model can run multiple tool calls in a single turn.
  • GPU Fleet Control: /models to view GPUs and /use N to switch connections or slots.
  • AI Commits: /commit to generate and apply git commit messages based on your diff.
  • Safety First: -y flag for auto-approve; otherwise, every file edit requires confirmation.

Connect

  • Cloud mode: Use your PastaWater API token to access your remote fleet.
  • Direct mode: Point at a local Ollama instance (--brain http://localhost:11434).

Get your token at pastawater.io/settings

Model compatibility (tool calling)

Agentic tool use needs both a capable model AND an Ollama whose tool-call parser tolerates that model's output drift.

Model Ollama Tool calling Notes
qwen3-coder:30b >= 0.31.2, pw-agent >= 1.52.0 verified needs native tools mode (below); ~20 GB resident on a single 24 GB card
qwen3-coder:30b >= 0.31.2, pw-agent <= 1.51.x broken every tool-requiring prompt dies on turn 0 with [Empty response from model], exit 3
qwen3-coder:30b 0.21.x broken intermittent qwen tool call parsing failed: EOF — session degrades to plain chat
llama3.1:8b any recent works weaker coder; fine for pipeline text tasks
laguna-xs-2.1 >= 0.32.13, pw-agent >= 1.54.0 verified native tools; write+read acceptance passed on a 4090 in 24s (turns:2, exit 0), SWE-bench 70.9
muse-glimmer:30b >= 0.32.8 (CUDA), pw-agent >= 1.54.0 verified native tools; write+read acceptance passed on a 4090 in 35s cold (turns:2, exit 0), 16.6GB resident. Multimodal (image input)

Native tools mode

Ollama >= 0.31 ships built-in renderer/parser pairs for some model families (template selection ... selected=renderer_parser renderer=qwen3-coder). For those models the server intercepts every <tool_call> tag the model emits and parses it with that family's native grammar. pw-agent's textual protocol puts JSON inside <tool_call>, which is not that grammar, so the server-side parser dies with qwen tool call parsing failed: EOF, discards the whole assistant message, and answers /api/chat with {"error":"EOF"}.

From 1.52.0 pw-agent sends Ollama's native tools schemas for these models, drops the textual protocol from the system prompt, and reads structured message.tool_calls back. Two safety nets:

  • Any model that hits a server-side parse failure is flagged automatically and the turn is replayed with native tools — no failed run, just a slower first turn.
  • PW_NATIVE_TOOLS=1 forces it on, PW_NATIVE_TOOLS=0 forces it off (the off case now reports the parse failure as a named error rather than an empty response).

Side effect: the system prompt drops from ~4.7 KB to ~1.7 KB for these models, since the renderer injects the tool definitions itself.

Failure signals

A session that ends without executing any tool due to parse failure/stall emits {"type":"result","subtype":"degraded","degraded_reason":..., "is_error":true} and exits with code 3; a missing model or dead endpoint fails preflight with the installed-model list and exits with code 2. Ollama-level errors (including tool-parse failures) are surfaced verbatim as [Error: Ollama: ...] instead of an empty response.

Only one large model fits a 24 GB card at a time — requesting a second large tag while one is resident forces CPU offload.

Debugging a silent run

--debug (or PW_DEBUG=1) dumps the model name, native-tools decision, num_ctx, every request message, the full assembled tool schema, and the raw model completion. All of it goes to stderr, so --output-format stream-json on stdout stays machine-parseable:

pw-agent --instance 0 --yes --debug \
  --output-format stream-json --print "..." 2>debug.log

Choosing the model

pw-agent is not read-only about models — the dashboard is the default, not a lock.

Behaviour
--model <tag> Overrides everything. Ollama loads that tag on the first request, evicting whatever is resident.
--model omitted Auto-detect: brain's last_known_chat_model (the dashboard pick, trusted over VRAM state) → resident chat model → /api/tags.
/model in the REPL Alias for /models — displays the fleet, switches nothing. There is no in-session switch; restart with --model.

The brain proxies /api/chat straight through with no model filtering, so nothing server-side rejects your choice. Two constraints:

  • The tag must already be pulled on that box. pw-agent never downloads — preflight fails with Model 'X' not found. Available: ... and exit 2.
  • On a 24 GB card a forced swap costs a cold load (~90 s for a 30B) and evicts the dashboard's model. If the dashboard swaps back you'll fight over the card.

Metadata

Release files for pw-agent 1.70.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pw-agent 1.70.0
File Size Uploaded
pw_agent-1.70.0.tar.gz 156.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pw-agent 1.70.0
File Interpreter ABI Platform
pw_agent-1.70.0-py3-none-any.whl Python 3 none any Details

Total release size: 306.9 kB

Release files / pw_agent-1.70.0.tar.gz

Download URL pw_agent-1.70.0.tar.gz
Size 156.5 kB
Tags Source
SHA-256 checksum
How to use checksums
63ba63ebc99bc1a86a866840241ef8e50a5cc9444d3eb679be52e0fc9a748564
BLAKE2b-256 checksum
How to use checksums
6b0345c1fec130ae6b52ab72c40a3132f43790c7a7aefa3c992c79690074d232
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / pw_agent-1.70.0-py3-none-any.whl

Download URL pw_agent-1.70.0-py3-none-any.whl
Size 150.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4b3d02cfe452887d79d01e97fbd21af6af1240bfb7caf7f705c9c49aec457a51
BLAKE2b-256 checksum
How to use checksums
d3317416209c4e0c99fb1ef1c43edf076221288745715286b053ddcc0156f1a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

1.70.0 This release

2 release files

1.69.0

2 release files

1.68.0

2 release files

1.67.0

2 release files

1.66.0

2 release files

1.65.0

2 release files

1.64.0

2 release files

1.63.0

2 release files

1.62.0

2 release files

1.61.0

2 release files

1.60.0

2 release files

1.59.0

2 release files

1.58.0

2 release files

1.57.0

2 release files

1.56.0

2 release files

1.55.0

2 release files

1.54.0

2 release files

1.50.9

2 release files

1.50.8

2 release files

1.50.7

2 release files

1.50.6

2 release files

1.50.5

2 release files

1.50.4

2 release files

1.50.3

2 release files

1.50.2

2 release files

1.50.1

2 release files

1.50.0

2 release files

1.49.1

2 release files

1.49.0

2 release files

1.48.1

2 release files

1.48.0

2 release files

1.47.9

2 release files

1.47.8

2 release files

1.47.7

2 release files

1.47.6

2 release files

1.47.5

2 release files

1.47.4

2 release files

1.47.3

2 release files

1.47.2

2 release files

1.47.1

2 release files

1.47.0

2 release files

1.46.7

2 release files

1.46.6

2 release files

1.46.5

2 release files

1.46.4

2 release files

1.46.3

2 release files

1.46.2

2 release files

1.46.1

2 release files

1.46.0

2 release files

1.45.1

2 release files

1.45.0

2 release files

1.44.2

2 release files

1.44.1

2 release files

1.44.0

2 release files

1.43.2

2 release files

1.43.1

2 release files

1.43.0

2 release files

1.42.0

2 release files

1.41.1

2 release files

1.41.0

2 release files

1.40.4

2 release files

1.40.3

2 release files

1.40.2

2 release files

1.40.1

2 release files

1.40.0

2 release files

1.39.3

2 release files

1.39.2

2 release files

1.39.1

2 release files

1.39.0

2 release files

1.38.3

2 release files

1.38.2

2 release files

1.38.1

2 release files

1.38.0

2 release files

1.37.0

2 release files

1.36.0

2 release files

1.35.0

2 release files

1.34.0

2 release files

1.33.0

2 release files

1.32.4

2 release files

1.32.3

2 release files

1.32.2

2 release files

1.32.1

2 release files

1.32.0

2 release files

1.31.0

2 release files

1.30.7

2 release files

1.30.6

2 release files

1.30.5

2 release files

1.30.4

2 release files

1.30.3

2 release files

1.30.2

2 release files

1.30.1

2 release files

1.30.0

2 release files

1.29.0

2 release files

1.28.0

2 release files

1.9.5

2 release files

1.9.4

2 release files

1.9.3

2 release files

1.9.2

2 release files

1.9.1

2 release files

1.9.0

2 release files

1.8.4

2 release files

1.8.3

2 release files

1.8.2

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.9

2 release files

1.7.8

2 release files

1.7.7

2 release files

1.7.6

2 release files

1.7.5

2 release files

1.7.4

2 release files

1.7.3

2 release files

1.7.1

2 release files

1.7.0

2 release files

1.6.7

2 release files

1.6.6

2 release files

1.6.5

2 release files

1.6.4

2 release files

1.6.2

2 release files

1.6.1

2 release files

1.6.0

2 release files

1.5.8

2 release files

1.5.7

2 release files

1.5.6

2 release files

1.5.5

2 release files

1.5.3

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.9

2 release files

1.4.8

2 release files

1.4.7

2 release files

1.4.5

2 release files

1.4.4

2 release files

1.4.3

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.8

2 release files

1.3.7

2 release files

1.3.6

2 release files

1.3.5

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

0.8.3

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page