Skip to main content

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.

See Configuration: Scripts.

Notes​

  • Workspace names must be unique and use lowercase letters, numbers, and dashes.
  • Ports are assigned automatically; see Networking for access.