park
A CLI tool for saving and recalling human work context, backed by SQLite. (private alternative for GitHub Issues)
You're mid-debug when a colleague asks for urgent help. Park where you are, context-switch, come back and pick up exactly where you left off — right file, right line, right next step.
You're juggling three repos. park list shows everything active across all of them. park list --remote github.com/org/repo scopes it to one.
You context-switch between machines. Point PARK_DB at a synced folder (Syncthing, Dropbox) and your parked items follow you.
Your AI assistant's context window is filling up, or you switch between multiple assistants. Park the current task so the next session can pick up exactly where you left off, without re-explaining everything.
How is park different?
| Tool | What it does | What park adds | |---|---|---| | git stash | Saves uncommitted code changes in the current repo | Saves why you were there, the next step, and context across all repos — no code changes required | | LLM session resume | Re-feeds prior conversation to the AI | A structured, queryable record you write once; the next session starts from facts, not a transcript | | GitHub Issues | Tracks bugs and features for a team | Local-first and private; captures device, branch, and "how to pick up" automatically; spans repos without a remote | | Todo list | Records tasks to complete | Records the full context — where in the code, why it matters, exact next step — not just the task name |
Install
go install github.com/svandragt/park@latest
Usage
park add --name "fix auth bug" --desc "Session token issue" --body "..." --why "Blocks release" --how "Start at auth.go:42"
park edit <id> --body "updated context" --tags "auth,urgent"
park edit <id> --status resolved # equivalent to park done <id>
park list # active items
park list --current # scope to current git remote + branch
park list --status resolved # resolved items
park list --remote github.com/org/repo # filter by repo (SSH or HTTPS format)
park list --branch main # filter by branch
park list --tag auth # filter by tag
park list --type bug # filter by type (project/bug/feature/chore/docs)
park search "JWT" # full-text search (porter stemming, active items only)
park search --status all "JWT" # search across all statuses
park search --tag auth "token" # search within a tag
park search --type bug "crash" # search within a type
park search --remote github.com/org/repo "fix" # search within a repo
park search --current "token" # search in current git remote + branch
park show <id> # full detail
park show - # show most recently added item
park done <id> # mark resolved
park done - # resolve most recently added item
park archive <id> # archive
park reopen <id> # move back to active
park delete <id> # hard-delete an item
park prune --days 30 # hard-delete resolved/archived items older than N days
park migrate <dest-dir> # copy DB to new location, print PARK_DB export line
park rename-remote <old> <new> # update remote URL across all items
park help # show usage (also --help, -h)
add automatically captures hostname, git remote, and current git branch.
If the remote has been renamed (e.g. a GitHub repo rename), add detects the
redirect and updates all existing items to the canonical URL automatically.
Configuration
| Variable | Default |
|---|---|
| PARK_DB | ~/.local/share/park/park.db (XDG-aware) |
Claude Code skill
A skill for Claude Code is included in the repository. It lets you park and resume context using natural language ("park this", "show parked", "work on #2").
To install, copy the skill into Claude's skills directory:
mkdir -p ~/.claude/skills/park
cp .claude/skills/park/SKILL.md ~/.claude/skills/park/SKILL.md
Once installed, Claude will recognize park-related phrases and call the park CLI automatically.
Surface parked items at session start
park list only gets run when you already suspect something is parked. To make the
agent tell you instead, install a SessionStart hook:
park hook --install
This adds park hook run to ~/.claude/settings.json (Claude Code) and
~/.codex/hooks.json (Codex), for whichever of the two exists. Both agents use the same
hook format. Run park hook on its own to print the config block without writing anything,
or pass --agent claude, --agent codex, or --settings <path> to target one file.
At the start of each session, park hook run reads the session's working directory,
resolves its git remote, and injects that repo's active items as session context. You also
see a short summary of the parked items, so you know the hook ran. It
prints nothing when there is no remote, no database, or nothing parked — a session that
opens with a hook error is worse than one with no hook.
The installer merges into any existing SessionStart hooks rather than replacing them.
Hooks load at session start, so the change takes effect next session; in Claude Code,
/hooks forces a reload.
Build
go build ./...
go test ./...