Skip to content

Latest commit

 

History

31 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

apark

Park agent coding sessions you're waiting on, and resume them later — across four harnesses: Claude Code, Codex CLI, pi, and OpenCode.

You know the situation: a session is blocked on a PR review, a colleague's answer, or tomorrow's deploy. You'll want it back — in the right directory, in the right tool, with its full conversation — but not today. apark is a tiny SQLite-backed ledger of those parked sessions: what each one was doing, why it stopped, and the exact command that resumes it.

$ apark list
OVERDUE #4  cc nexi-payment-gate cluster capacity              waiting  2026-07-25
        #7  cc regional-api-gate PR #68 approved + mergeable   waiting  8d ago
        #9  cx billing-export    flaky test bisect             waiting  today

$ apark resume 7        # cd <cwd> && claude -r <session-id>
$ apark resume 9        # cd <cwd> && codex resume <session-id>

How it works

Each harness stores sessions differently; apark ships an adapter per harness that knows where sessions live, how to pull metadata (title, cwd, git branch, last prompt), and how to resume:

Harness Session store Resume
Claude Code ~/.claude/projects/**.jsonl claude -r <id>
Codex CLI ~/.codex/state_N.sqlite codex resume <id>
pi ~/.pi/agent/sessions/**.jsonl pi --session <id>
OpenCode ~/.local/share/opencode/opencode.db opencode -s <id>

apark add <session-id> figures out which harness a session belongs to by searching all four stores (--harness to force). Harnesses that aren't installed are silently skipped. All stores are read strictly read-only.

Install

git clone https://github.com/delor/apark && cd apark
./install.sh

The installer symlinks ~/.bin/apark and, for each harness it detects on the machine, drops a /park and /waiting slash command into that harness's native prompt directory. --harness <name> (repeatable) installs for specific harnesses only. It never overwrites real files — only creates or refreshes symlinks.

Requirements: Python 3.8+ (stdlib only — no pip installs), bash, Linux.

Usage

apark add <session-id> --note "waiting on PR review" --check-back 2026-08-04
apark add --harness codex          # auto-detect newest codex session
apark list                         # waiting sessions, OVERDUE/DUE first
apark list --harness claude        # filter by harness
apark find <query>                 # search titles/notes/recaps/projects
apark show <ref>                   # everything about one session
apark resume <ref>                 # cd + exec the right harness
apark edit <ref> --note ... --check-back ... --tag ...
apark done <ref>                   # keep the record, mark finished
apark rm <ref>                     # delete the record

<ref> is the numeric id from list, a full session id, or a unique session-id prefix. A recap (multi-line context for future-you) can be piped in: printf '%s' "$recap" | apark add <id> --recap -.

Slash commands

Inside any of the four agents, /park has the agent itself draft a recap of the current session (what's done, what it's blocked on, next steps), show it for approval, and file it with apark add. /waiting lists what you're waiting on. Command sources live in commands/ per harness.

Data

Single SQLite file at ~/.apark/apark.db (override with APARK_DB). Sessions parked with a pre-rename ccpark database are migrated automatically on first run.

License

MIT

About

Park agent coding sessions and resume them later — Claude Code, Codex CLI, pi, OpenCode

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages