Skip to content

Projects and sessions

A project in Speedwave is a registered workspace: a name paired with a host directory. Project definitions live in your user config file at ~/.speedwave/config.json, in a projects array where each entry has a name and a dir. You create your first one by running speedwave init inside the directory you want to work in. See creating your first project for the steps.

Every project gets its own container network, its own tokens directory, and its own Claude home directory. Work in one project stays apart from work in another, so a problem contained in one project cannot reach another.

Two boundaries make that true. Each project runs on a network named speedwave_<project>_network by default, and a container on one project’s network cannot talk to containers on another. Each project also keeps its service credentials under its own tokens directory, ~/.speedwave/tokens/<project>/<service>/, and a worker only ever sees its own service’s subdirectory there. The full detail on both boundaries, plus the virtual-machine layer underneath them, lives at isolation.

Each project also has its own Claude home directory at <data_dir>/claude-home/<project>/, holding your Claude Code credentials, sessions, and onboarding state. Because that directory is per project, logging in to Claude for one project does not log you in for another.

Speedwave can run several projects side by side. Operations that change a project’s containers, such as starting or updating it, are serialized one at a time for that project, but different projects never block each other. In the Desktop app, a project switcher chooses which project is active: switching starts the destination project’s containers and tears down the previous one’s in the background, one switch at a time.

From the CLI, the working directory does not select the project. Plain speedwave uses the active project from your config, and --project <name> targets a specific registered project from any directory.