Paimon
English | 简体中文
Paimon is a coding agent that lives in your terminal. It reads and edits files in the current directory and runs commands. It also runs headless and imports as a library, so a stronger agent or a program of your own can drive it.
Install
uv tool install paimon # or: pip install paimon
Getting started
paimon
Or run it without installing anything:
uvx paimon
The first launch asks for a provider, model, API base and key. Then just type what you want done. Write @path/to/file in a prompt to hand a file to the agent.
While it runs: Shift+Tab switches how much the agent may do on its own (read asks before writing files or running commands, edit lets edits inside the working directory through, yolo never asks and is the default), Esc interrupts the current turn, Ctrl+P opens the command palette, Ctrl+C quits.
Ctrl+T opens another session in a pane of its own, Ctrl+W closes one, Ctrl+PageUp and Ctrl+PageDown move between them, and Ctrl+G jumps to a pane waiting for permission. Paimon can open panes itself: ask for two independent things and it starts a second agent in its own tab. It can also leave a command running in a tab of its own, a dev server or a watcher, instead of holding up a turn.
Using Paimon as a subagent
Frontier models are good at planning and reviewing; the steps in between are often mechanical. Point Paimon at a cheaper model and let Claude Code or Codex write the plan and check the result. A profile keeps that model's account separate:
paimon login --profile glm --model zai:glm-4.7 --api-key-env ZAI_API_KEY
paimon --profile glm -p "apply the plan in PLAN.md" --mode edit --output-format result
The bundled skill teaches the calling agent this workflow:
paimon install-skill # into Claude Code (~/.claude/skills/paimon)
paimon install-skill --target codex # into Codex; --dest DIR for anywhere else
npx skills add aisk/paimon # the same skill, via skills.sh
Using Paimon as a library
The agent loop is importable, so a Python program can drive it without going through the CLI. Agent.open() starts or resumes a session and agent.run() yields typed events, one per text chunk, tool call and turn end, which the caller renders or filters however it likes:
import asyncio
from paimon.agent import Agent, TextDelta
async def main():
agent = Agent.open(mode="edit")
async for event in agent.run("summarize the tests in this directory"):
if isinstance(event, TextDelta):
print(event.text, end="", flush=True)
asyncio.run(main())
Agent.open() also takes a working directory, an async confirm callback for permission prompts, and a toolset to hand the model fewer tools or tools of your own. An agent holds its session until it goes away; to give it back at a definite moment, call close() or use the agent as a context manager. It writes the same session files as the CLI, so a run started in code can be resumed later with paimon -r.
Sessions
Every conversation is saved, and long ones are summarized in place near the context limit. Paimon prints the command that brings a session back when you leave:
paimon -r # choose a session started in this directory
paimon -r a1b2c3 # resume one by id
paimon -c # resume the most recent one
paimon sessions # list them (--json for machines)
paimon log a1b2c3 # what a session did, one line per event
Other ways to run it
paimon --mode read # start in a more cautious permission mode (yolo is the default)
paimon --strict # ask before every command, even read-only ones
paimon --web # the same UI in a browser (--port, default 8000)
paimon -p "what does cli.py do?" # one answer on stdout, no UI
cat log.txt | paimon -p "summarize this"
paimon --model zai:glm-4.7 # this model for this run only
paimon --profile work # a separately configured account
-p never stops to ask, so with the default yolo mode it can already write files and run commands. Add --output-format result for a single JSON object with the outcome, which is what a calling program should read. paimon --help lists the rest.
Configuration
Each profile keeps its model settings in ~/.config/paimon/<name>/config.json, written by the first launch or by paimon login. Sessions live in ~/.local/share/paimon/sessions/. File changes render nicer if delta is installed.
Read and edit modes run a small set of clearly read-only commands (ls, cat, git status, …) without asking; --strict turns that off. This is a guardrail against agent mistakes, not a security boundary. For real isolation, run Paimon inside a container or VM.
Telemetry
Each launch sends one anonymous event to Google Analytics: a random install id, the launch mode, the version, the OS name and the configured provider and model name. Nothing from your sessions, prompts, files or credentials is included. Set PAIMON_NO_TELEMETRY=1 or DO_NOT_TRACK=1 to turn it off.
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 paimon-0.2.4.tar.gz.
File metadata
- Download URL: paimon-0.2.4.tar.gz
- Upload date:
- Size: 149.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
656965fcde200ade380c2790e1bbd49d9c23eaed2294a46e511040a7b2e4bad8
|
|
| MD5 |
bdbac7a9847f3a0e58b657ad05e8bc6b
|
|
| BLAKE2b-256 |
b0da716d790ca38f2ef3548de64b0c38821a57901b52360f7d50aacf8d5627f3
|
Provenance
The following attestation bundles were made for paimon-0.2.4.tar.gz:
Publisher:
release.yml on aisk/paimon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paimon-0.2.4.tar.gz -
Subject digest:
656965fcde200ade380c2790e1bbd49d9c23eaed2294a46e511040a7b2e4bad8 - Sigstore transparency entry: 2518337598
- Sigstore integration time:
-
Permalink:
aisk/paimon@e95d87a1c59cf21b3bf5b5324b713993ce46d852 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/aisk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e95d87a1c59cf21b3bf5b5324b713993ce46d852 -
Trigger Event:
push
-
Statement type:
File details
Details for the file paimon-0.2.4-py3-none-any.whl.
File metadata
- Download URL: paimon-0.2.4-py3-none-any.whl
- Upload date:
- Size: 156.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7206b193bf13b54489026ea23fe55cb19817aa987dc0bb29b428e3a5e33f2870
|
|
| MD5 |
442196a1b01d6d137884311b8b63a9d2
|
|
| BLAKE2b-256 |
48c095e509e6a01bf5a2c0e0efbd9276ea5b878adc838cb26d175b3eaacce896
|
Provenance
The following attestation bundles were made for paimon-0.2.4-py3-none-any.whl:
Publisher:
release.yml on aisk/paimon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
paimon-0.2.4-py3-none-any.whl -
Subject digest:
7206b193bf13b54489026ea23fe55cb19817aa987dc0bb29b428e3a5e33f2870 - Sigstore transparency entry: 2518338060
- Sigstore integration time:
-
Permalink:
aisk/paimon@e95d87a1c59cf21b3bf5b5324b713993ce46d852 -
Branch / Tag:
refs/tags/v0.2.4 - Owner: https://github.com/aisk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e95d87a1c59cf21b3bf5b5324b713993ce46d852 -
Trigger Event:
push
-
Statement type: