SDODS
ReferenceCLI commands

sdods project

Create, import, list and delete projects.

project list

sdods project list [--matrix] [--shards <n>]

Prints slug, name, layers, browsers, environments (missing files are marked) and the default environment. --matrix emits a CI matrix of project × browser × shard as JSON.

bun run sdods project list
bun run sdods project list --matrix --shards 2

project create

sdods project create <slug> [--name <name>] [--description <text>] [--layers ui,api,hybrid,recorded]
                      [--browsers chromium,firefox,webkit] [--ui-url <url>] [--api-url <url>]
                      [--env <name>] [--test-id <attr>] [--force]
FlagDefault
--layersui,api,hybrid
--browserschromium
--ui-url / --api-urlhttp://localhost:3000 / http://localhost:3000/api
--envlocal
--test-iddata-testid

Writes sdods.project.yaml, envs/<env>.yaml, .env.example, steps/fixtures.ts, steps/auth.ts, a project step file, pages/HomePage.ts, features/health.feature, features/ui/home.feature, data/common/users.csv, data/factories.ts, empty recorded/ and har/ folders and a README. The slug must be lowercase letters, digits and dashes.

project import

sdods project import <source> [--slug <slug>] [--workspace <slug>] [--force] [--dry-run]

Registers a project that already exists. The source is a directory, a .zip archive or a git URL (cloned shallowly). The project file is found at the source root or one level below it, so a repository containing projects/<slug>/ works without pointing at the subdirectory.

FlagMeaning
--slugimport under a different slug — use it on a collision
--workspaceworkspace to re-home into (default: the workspace file's defaultWorkspace)
--forcereplace an existing project of the same slug, moving it to trash first
--dry-runvalidate and report what would be imported, writing nothing

The imported slug, organization and workspace are rewritten to match this workspace. Without that re-homing the registry rejects every project, not just the imported one, because a project may not name a workspace sdods.workspace.yaml does not declare.

.auth/, .env, .env.* (except .env.example), node_modules/ and .git/ are left behind — an import never carries someone else's credentials. The whole registry is re-read before the import is reported as successful, and rolled back if it does not load.

sdods project import ../acme-tests --dry-run
sdods project import https://github.com/you/acme-tests.git --slug acme --workspace qa

project delete

sdods project delete <slug> --yes [--purge]

Moves projects/<slug> to .sdods/trash/<slug>-<timestamp>, which is outside projects/ so it is not rediscovered, and prints the path to move it back. --purge deletes the directory outright instead.

--yes is required: there is no interactive prompt, so a script cannot be surprised by one and a typo cannot delete a project.

Run history is unaffected — runs, results and insights are keyed on the project row in the database, which is kept and flagged archived. Deleting through the web UI additionally removes the project's schedules, which the CLI does not touch.

sdods project delete acme-copy --yes

Using an AI coding agent? Install SDODS:

Install the SDODS plugin in Claude Code: skills, subagents, commands and the MCP server.

  1. /plugin marketplace add YarlisAISolutions/sdods-skills
  2. /plugin install sdods@sdods
Learn more about using SDODS with AI tools

On this page