Workspaces
Workspaces are isolated Docker-in-Docker containers with their own persistent volumes. You can create, start, stop, clone, and delete them from any client connected to your agent.
Create or start
perry start myproject
Clone a repo on first creation:
perry start myproject --clone git@github.com:user/repo.git
Stop
perry stop myproject
Delete
perry delete myproject
List and inspect
perry list
perry info myproject
Logs
perry logs myproject
Clone
perry clone myproject myproject-experiment
Cloning copies the home volume and Docker-in-Docker volume, then starts a new container with a new SSH port.
Workspace images
Perry uses a prebuilt workspace image from ghcr.io/gricha/perry:<version> by default. If a local image tagged perry:latest exists, the agent will use that instead.
The default image is ready to go but heavier. A smaller base image is available for custom builds (perry-base:latest), and you can also install tools at startup with scripts.
Customize with a Docker image
Build the full image locally (same as the prebuilt one):
perry build
Build the base image:
docker build -t perry-base:latest -f perry/Dockerfile.base perry
Extend it with your own Dockerfile:
FROM perry-base:latest
RUN apt-get update && apt-get install -y --no-install-recommends \
my-tool \
&& rm -rf /var/lib/apt/lists/*
Then build and tag as perry:latest so Perry will pick it up:
docker build -t perry:latest -f ./Dockerfile .
To apply a new image to an existing workspace, delete and recreate it:
perry delete myproject
perry start myproject
Customize with scripts
If you want to keep the default image but add project-specific tools or config, use post-start scripts. They run as the workspace user after each start.
Notes
- Workspace names must be unique and use lowercase letters, numbers, and dashes.
- Ports are assigned automatically; see Networking for access.