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.

session.json › task
"task": {
  "description": "Migrate auth to OAuth2",
  "objective": "Replace session cookies with PKCE",
  "remaining": ["Token refresh", "Logout"],
  "next_action": "Token refresh"
}
01

Task definition

The task, the objective, and what should happen next.

02

Files changed

Every checkpoint records which files were added, modified, renamed, or deleted.

03

Architectural decisions

Why you chose PKCE over implicit flow, why the table was denormalized.

04

Current blockers

Open questions and obstacles, so the next agent knows about them from the start.

Four commands. Zero re-explaining.

session start
agent switch
  1. 01 initStart a session for the task
  2. 02 updateRecord progress, decisions, blockers
  3. 03 checkpointSnapshot state and changed files
  4. 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.

01

No cloud. No accounts.

Everything stays in your repo. The CLI makes no network requests: no servers, no sign-ups, no telemetry.

02

Plain, open formats

State lives in a versioned JSON file, .pas-agent/session.json. Exports are plain Markdown in the files agents already read.

03

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.