CLI tool that manages the lifecycle of vibe-coded projects. Organizes work into sandbox, projects, and archive spaces with lightweight YAML metadata. Auto-tracks AI coding sessions from Claude Code and Codex. Find, promote, triage, and clean up projects without fighting your workflow.
Requires Python 3.10+.
# Clone the repo
git clone git@github.com:tatonetti-lab/plaibox.git
cd plaibox
# Install globally with pipx (recommended)
brew install pipx
pipx install -e . --python python3.12
# Or install in a venv for development
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"Add this to your ~/.zshrc or ~/.bashrc to enable auto-cd and session tracking:
eval "$(plaibox init-shell)"Then restart your shell or run source ~/.zshrc.
plaibox new "dashboard for lab results"
# Creates ~/plaibox/sandbox/2026-04-10_dashboard-for-lab-results/
# Initializes git, writes metadata, and cd's you in
plaibox new "ml experiment" --python
# Same as above, but also creates a .venv and auto-activates itplaibox ls # all projects
plaibox ls sandbox # just sandbox
plaibox ls --stale # sandbox projects untouched for 30+ daysplaibox open dashboard # fuzzy match by name or description
plaibox open a1b2c3 # or by ID from plaibox lsplaibox promote
# Prompts for a clean name, moves to ~/plaibox/projects/
# Optionally creates a GitHub repo via gh cliplaibox archive # move to archive
plaibox delete # permanently remove (only works from archive)plaibox tidy
# Walks through stale sandbox projects interactively:
# [p]romote / [a]rchive / [s]kipplaibox scan ~/Projects
# Walks through each subdirectory interactively:
# [i]mport / [s]kip / [n]ever
# "never" remembers the choice so future scans skip it
plaibox scan ~/Projects --git-only
# Only show directories that contain a git repoUse plaibox claude or plaibox codex instead of calling the tools directly. Plaibox wraps the session and automatically captures the resume command when you exit.
plaibox claude # launches claude, captures session on exit
plaibox codex # same for codex
# Next time you open the project:
plaibox open my-project
# Resume session: claude --resume abc123plaibox import ~/Projects/old-thing
# Prompts for description, sandbox vs project, moves it in
# Auto-detects Python projects and offers to create a .venv
plaibox import ~/Projects/old-thing --project
# Import directly as a project (skip sandbox)plaibox exit # cd back to where you were before open/newPlaibox manages .venv automatically when using shell integration:
plaibox new --pythoncreates a.venvin the new projectplaibox open/plaibox new/plaibox importauto-activate.venvif one existsplaibox exitdeactivates the venvplaibox claude/plaibox codexactivate the venv before launching, so AI tools install packages in the right place
Sync your project registry across machines using a private GitHub repo:
# Set up sync (creates GitHub repos, one-time)
plaibox sync init
# After making changes, metadata is auto-pushed
plaibox new "my experiment" # auto-syncs to registry
# On your other machine, pull the latest
plaibox sync pull
# Open a project that only exists on the other machine
plaibox open my-experiment # offers to clone itSync is opt-in — plaibox works exactly the same without it. Sandbox project code is stored as branches in a shared repo; promoted projects use their own dedicated GitHub repos.
For sensitive work (e.g., patient data analysis), mark projects as private to prevent code from being pushed to any remote:
plaibox new "patient outcomes analysis" --private
# Code stays local — metadata still syncs so other machines know it exists
plaibox promote
# Instead of offering gh repo create, prompts for an approved remote URL
# (e.g., institutional GitHub Enterprise). Can also skip to promote locally.
plaibox unprivate
# Removes the private flag and retroactively pushes code to the sandbox repoPrivate projects show a * suffix in plaibox ls (e.g., sandbox*). On other machines, they appear with private status — visible but not cloneable unless a remote URL has been set.
~/plaibox/
sandbox/ # ephemeral experiments (YYYY-MM-DD_slug/)
projects/ # graduated, maintained projects
archive/ # done with, but recoverable
Each project contains a .plaibox.yaml metadata file:
name: my-project
description: Dashboard for tracking lab results
status: sandbox
created: '2026-04-10'
tags: []
tech: [python]
session: claude --resume abc123Config lives at ~/.plaibox/config.yaml:
root: ~/plaibox # where projects live
stale_days: 30 # threshold for --stale and tidygit clone git@github.com:tatonetti-lab/plaibox.git
cd plaibox
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest -v