Python implementation of paw agents and AI integrations
Project description
kitpaw
Python implementation of paw agents and AI integrations.
Platform support: Linux and macOS only. Windows is not supported.
Async API
kitpaw.pi_agent.ai is asyncio-first. Use stream / complete.
import asyncio
from kitpaw.pi_agent.ai import Context, UserMessage, complete, stream, get_model
async def main() -> None:
model = get_model("openai", "gpt-4o-mini")
response_stream = stream(
model,
Context(messages=[UserMessage(content="Say hello")]),
{"max_tokens": 64},
)
async for event in response_stream:
print(event.type)
result = await complete(
model,
Context(messages=[UserMessage(content="Say hello")]),
{"max_tokens": 64},
)
print(result)
asyncio.run(main())
HTTP Client Reuse
stream() and complete() accept an optional http_client_factory in options.
Use it when the caller wants to reuse a shared httpx.AsyncClient and its connection pool.
If http_client_factory is omitted, the library creates and closes a fresh client per call.
If http_client_factory is provided, the library uses the returned client and does not close it.
Agent Runtime
kitpaw.pi_agent.agent provides the higher-level agent runtime on top of kitpaw.pi_agent.ai.
import asyncio
from kitpaw.pi_agent.agent import Agent, AgentTool, AgentToolResult
from kitpaw.pi_agent.ai import TextContent
async def main() -> None:
agent = Agent()
agent.set_system_prompt("You are a concise assistant.")
agent.set_tools(
[
AgentTool(
name="echo",
label="Echo",
description="Return the provided text",
parameters={
"type": "object",
"properties": {"text": {"type": "string"}},
"required": ["text"],
},
execute=lambda _tool_call_id, args, *_: AgentToolResult(
content=[TextContent(text=args["text"])],
details=None,
),
)
]
)
await agent.prompt("Say hello")
print(agent.state.messages[-1])
asyncio.run(main())
Use agent.continue_() to resume from the last non-assistant message, or agent.follow_up()
and agent.steer() to queue additional messages for the next turn.
Code Agent
kitpaw.pi_agent.code_agent is the Python port of the pi coding-agent package. It currently
ships:
- SDK session creation via
create_agent_session() - built-in coding tools (
read,bash,edit,write,grep,find,ls) pi/kitpawCLI entrypoints with print, JSON, RPC, and interactive modes- real-time streaming output in interactive mode
The repository also includes an experimental --agent zed mode that ports parts of Zed's agent
surface into the Python runtime. Known gaps and non-goals for that mode are documented in
docs/code-agents/zed_limitations.md.
Run a print-mode smoke:
pi -p "Reply with exactly the word pong."
Run interactive mode (streaming output):
pi
Run JSON mode:
pi --mode json "List the files in this repository"
Run RPC mode:
pi --mode rpc
Custom System Prompt
Place an AGENTS.md file in your project root to override the default system prompt.
The content is loaded automatically at session startup. If no AGENTS.md is found, the
built-in default is used.
Local environment
Put local credentials in a .kitpaw file. The package and tests load
this file automatically when present. Both the repository root and the
current working directory are checked; CWD takes precedence.
Recommended .kitpaw:
OPENAI_BASE_URL=https://open.bigmodel.cn/api/coding/paas/v4
OPENAI_API_KEY=your-local-key
OPENAI_MODEL=glm-4.7
OPENAI_FALLBACK_MODEL=glm-4.5
.kitpaw is ignored by git and must not be committed.
Commands
Install dependencies and run the default test suite:
uv run pytest
Run the real upstream smoke test explicitly:
PAW_RUN_REAL_E2E=1 uv run pytest -m real_e2e
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
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 kitpaw-0.1.2.tar.gz.
File metadata
- Download URL: kitpaw-0.1.2.tar.gz
- Upload date:
- Size: 262.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6eb2db387f29fdc8d3ec980d5e924cfb10d94c536c773cb7b04f78cae4d5406
|
|
| MD5 |
c52e57fac8fa9bd587fcc283550f959a
|
|
| BLAKE2b-256 |
dec8ba4b19e7886574f62070ffed13e39002248b2f4fa92f7c284bf6c43c28be
|
Provenance
The following attestation bundles were made for kitpaw-0.1.2.tar.gz:
Publisher:
python-publish.yml on reyoung/kitpaw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kitpaw-0.1.2.tar.gz -
Subject digest:
f6eb2db387f29fdc8d3ec980d5e924cfb10d94c536c773cb7b04f78cae4d5406 - Sigstore transparency entry: 1171973551
- Sigstore integration time:
-
Permalink:
reyoung/kitpaw@78b9572dc170e65b1359f632d0bb4a03b867ccc7 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reyoung
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@78b9572dc170e65b1359f632d0bb4a03b867ccc7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file kitpaw-0.1.2-py3-none-any.whl.
File metadata
- Download URL: kitpaw-0.1.2-py3-none-any.whl
- Upload date:
- Size: 188.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53a3a8b675258932fb397a6e7a6e044d55183f3ae32d2197c3bd48f68725c554
|
|
| MD5 |
44c093cfbfd6086933bbbdc68ef86e52
|
|
| BLAKE2b-256 |
cf42a9eb7ac1f69d6978d475a4ffb8adf5b0856db25767085aa208504f50a3c2
|
Provenance
The following attestation bundles were made for kitpaw-0.1.2-py3-none-any.whl:
Publisher:
python-publish.yml on reyoung/kitpaw
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kitpaw-0.1.2-py3-none-any.whl -
Subject digest:
53a3a8b675258932fb397a6e7a6e044d55183f3ae32d2197c3bd48f68725c554 - Sigstore transparency entry: 1171973574
- Sigstore integration time:
-
Permalink:
reyoung/kitpaw@78b9572dc170e65b1359f632d0bb4a03b867ccc7 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/reyoung
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@78b9572dc170e65b1359f632d0bb4a03b867ccc7 -
Trigger Event:
release
-
Statement type: