PAS · Portable Agent Sessions
Portable work sessions across AI coding agents.
Start a task in Claude Code, pick it up in Codex, finish it in Cursor. PAS-Agent keeps a portable record of the task, decisions, and progress, so switching agents doesn't mean starting over.
# 1. start a session once per task > pas-agent init --task "Migrate auth to OAuth2" PAS-Agent session initialized. # 2. while agent 1 (claude) works, record progress > pas-agent update --completed "PKCE login flow" --next "Token refresh" > pas-agent checkpoint "Login flow done" Checkpoint #1 saved: Login flow done # 3. hand off to agent 2 (codex) > pas-agent export --to codex Updated the PAS-Agent block in AGENTS.md for codex. > codex
Every agent forgets when you switch.
Claude Code doesn't know what Codex did. Cursor can't see your Kiro history. Every switch means re-explaining the task, the decisions, and the blockers. PAS-Agent gives every agent the same starting point.
Exports context for
- Claude Code
- Codex
- OpenCode
- Cursor
- Gemini CLI
- Kiro CLI
- Antigravity
Everything that matters, captured.
PAS-Agent records the structured context that the next agent needs to keep working.
"task": {
"description": "Migrate auth to OAuth2",
"objective": "Replace session cookies with PKCE",
"remaining": ["Token refresh", "Logout"],
"next_action": "Token refresh"
}Task definition
The task, the objective, and what should happen next.
Files changed
Every checkpoint records which files were added, modified, renamed, or deleted.
Architectural decisions
Why you chose PKCE over implicit flow, why the table was denormalized.
Current blockers
Open questions and obstacles, so the next agent knows about them from the start.
Four commands. Zero re-explaining.
- 01 initStart a session for the task
- 02 updateRecord progress, decisions, blockers
- 03 checkpointSnapshot state and changed files
- 04 exportNext agent reads it at startup
Coming next: shell hooks that update and export automatically when you switch agents.
Open source. Local-first. Rust.
No cloud. No accounts.
Everything stays in your repo. The CLI makes no network requests: no servers, no sign-ups, no telemetry.
Plain, open formats
State lives in a versioned JSON file, .pas-agent/session.json. Exports are plain Markdown in the files agents already read.
Single small binary
About 1.7 MB, built with cargo. Git is the only thing it needs at runtime. Tested on Linux, macOS, and Windows.
Frequently asked.
What does PAS stand for?
Portable Agent Sessions. A session is the record of one coding task: what it is, what's done, what's left, and what was decided. PAS-Agent makes that session portable, so it moves with you from one AI coding agent to the next instead of staying locked inside a single tool.
How do I install PAS-Agent?
Download a prebuilt binary for Linux, macOS, or Windows from the latest release, or build it with Cargo (Rust 1.85 or later):
cargo install --git https://github.com/gfirik/pas-agent pas-agent-cli
Either way you get a single pas-agent binary. It needs git at runtime.
What data does it capture?
Whatever you record: the task, completed and remaining work, decisions, blockers, constraints, and discoveries. Each checkpoint also saves the git branch, commit, and the paths of changed files. It's stored as plain JSON in .pas-agent/.
Will it overwrite my existing CLAUDE.md or AGENTS.md?
No. pas-agent export writes only inside a marked pas-agent block and leaves the rest of the file alone. It replaces the whole file only if you pass --force.
Does it send data anywhere?
No. PAS-Agent is fully local. Session files live in your working directory and are never transmitted anywhere. Whether to commit .pas-agent/ is up to you.
Can I use it with agents not listed above?
Yes. Many agents read AGENTS.md, so --to codex often works as-is. You can also write the context to any file with --output and point your agent at it.
Start where the last agent stopped.
Install PAS-Agent, initialize a session, and hand off context in one command.