Use this guide when you want to start a new software system or add a new application to an existing one. Workspai creates the files, records where the project belongs, and makes it visible to the same checks and tools as the rest of the workspace.
The sections below explain project locations, supported starters, interactive commands, automation, and the most useful options.
For a compact list of command syntax, see commands-reference.md.
A workspace is the shared home for related projects, rules, and saved Workspai reports.
A project is an application or service, such as a FastAPI API, Go service, Spring Boot service, .NET API, or frontend application.
The canonical commands are:
npx workspai create workspace <name>
npx workspai create project <kit> <name>Use the canonical commands in scripts and documentation. The older
workspai <name> --template <kit> form is supported for compatibility, but it
does not have exactly the same behavior.
| What you want | Command |
|---|---|
| Choose interactively | npx workspai create |
| Create a managed workspace | npx workspai create workspace platform --yes |
| Create a workspace under the current directory | npx workspai create workspace platform --here --yes |
| Create a project and use the current/default workspace behavior | npx workspai create project gofiber.standard api |
| Turn the current folder into a workspace before creating | npx workspai create project gofiber.standard api --create-workspace --yes |
| Create a project without workspace management | npx workspai create project gofiber.standard api --no-workspace --yes |
| Preview a supported create plan | npx workspai create project frontend.nextjs web --dry-run |
npx workspai create workspace platform --yesThe default target is:
~/.workspai/workspaces/platform
With --yes, Workspai does not ask questions. If you do not provide a
profile, it uses minimal.
npx workspai create workspace platform --here --yesIf the current directory is /home/me/code, the result is:
/home/me/code/platform
--here means "create the named workspace as a child of this directory." It
does not turn the current directory itself into a workspace.
npx workspai create workspace platform --output /data/workspaces --yesThe result is:
/data/workspaces/platform
--output is always the parent directory. Workspai adds the workspace name to
it.
Relative output paths are resolved from the current directory:
npx workspai create workspace platform --output teams --yesThis creates <current-directory>/teams/platform.
npx workspai create workspaceWhen values are missing, Workspai can ask for:
- The workspace name
- The managed home or current-directory location
- The author name
- The workspace profile
- Whether to install the optional Python engine
- The Python environment method when installation is selected
You can also start one level higher:
npx workspai createIn an interactive terminal, this first asks whether you want to create a workspace or a project.
| Profile | Intended runtime scope | Python engine by default |
|---|---|---|
minimal |
Lightweight workspace foundation | No |
node-only |
Node.js projects | No |
go-only |
Go projects | No |
java-only |
Java projects | No |
dotnet-only |
.NET projects | No |
python-only |
Python projects | Yes |
polyglot |
Multiple runtimes | Yes |
enterprise |
Multiple runtimes with governance-oriented setup | Yes |
Example:
npx workspai create workspace platform --profile go-only --yesnpx workspai create workspace platform \
--profile polyglot \
--skip-python-engine \
--yesThe workspace remains polyglot, but its metadata records the Python engine as
skipped. Workspace Intelligence, project registration, import, adopt, model,
context, and verify remain available.
Use --skip-python-engine for workspace creation. For project creation, use
--skip-install instead.
Python-free profiles do not require Python.
For a Python-aware profile, interactive mode offers guidance and fallback
choices. In non-interactive --yes mode, Workspai falls back to a Python-free
profile when Python is unavailable:
| Requested profile | Fallback profile |
|---|---|
python-only |
minimal |
polyglot |
node-only |
enterprise |
node-only |
If Poetry is selected but unavailable, Workspai can use a local virtual environment instead.
Git initialization is enabled by default. Disable it with:
npx workspai create workspace platform --skip-git --yesIf the target is already inside another Git worktree, Workspai avoids creating a nested repository. A missing Git installation or a failed initial commit produces a warning but does not remove an otherwise valid workspace.
npx workspai create workspace platform \
--profile polyglot \
--skip-python-engine \
--skip-git \
--dry-runThe preview shows the target, profile, Python plan, Git plan, expected files, and next steps. It does not create a workspace, install Python, initialize Git, or update a registry.
Workspace creation does not merge into or overwrite an existing target. If the resolved directory already exists, choose another name or output parent.
To bring existing software into Workspai, use the operation that matches who owns its location:
# Keep a project where it is.
npx workspai adopt /path/to/project
# Copy or clone a project into the selected workspace.
npx workspai import /path/to/project --workspace /path/to/my-workspace
# Register an existing Workspai workspace without moving it.
npx workspai workspace connect /path/to/existing-workspace
# Restore and register a portable workspace archive.
npx workspai workspace import team.workspai-archive.zip --output ./teamRunning npx workspai create interactively exposes the same choices as
“Create a project”, “Add existing software”, and—when appropriate—“Create
another workspace”. Inside a workspace, project and onboarding choices appear
first; creating another workspace remains an explicit escape hatch rather than
the default.
A normal workspace includes:
.workspai-workspace
.workspai/workspace.json
.workspai/toolchain.lock
.workspai/policies.yml
.workspai/cache-config.yml
.workspai/workspace.contract.json
.workspai/workspace-registry.v1.json
.gitignore
README.md
The user-level workspace registry is stored under the Workspai home, normally:
~/.workspai/workspaces.json
npx workspai create projectWorkspai asks for a kit and project name. You can also use the top-level wizard:
npx workspai createIf you choose project creation, the same project flow is used.
When the terminal is interactive and the current directory is not inside a workspace, every supported backend, frontend, desktop, and extension kit shows the workspace management question before scaffolding:
This project is outside a Workspai workspace. How should it be managed?
1. Link it to the managed default workspace (recommended)
2. Turn the current folder into a workspace
3. Create it without workspace management
This applies to direct commands and interactive kit selection.
npx workspai create project <kit> <name>Examples:
npx workspai create project fastapi.standard api
npx workspai create project gofiber.standard gateway
npx workspai create project springboot.standard orders
npx workspai create project dotnet.webapi.clean billing
npx workspai create project rust.axum telemetry-api
npx workspai create project frontend.nextjs dashboard
npx workspai create project desktop.tauri desktop-app
npx workspai create project desktop.electron admin-console
npx workspai create project extension.vscode editor-tools
npx workspai create project php.laravel customer-apiThe shorter frontend alias remains available:
npx workspai create frontend nextjs dashboard| Kit | Runtime | Scaffold owner | Core module mutation |
|---|---|---|---|
fastapi.standard |
Python | RapidKit Core | Yes |
fastapi.ddd |
Python | RapidKit Core | Yes |
nestjs.standard |
Node.js | RapidKit Core bridge | Yes |
gofiber.standard |
Go | Workspai npm CLI | No |
gogin.standard |
Go | Workspai npm CLI | No |
springboot.standard |
Java | Workspai npm CLI | No |
dotnet.webapi.clean |
.NET | Workspai npm CLI | No |
rust.axum |
Rust | Workspai npm CLI | No |
NestJS runs on Node.js, but its current scaffold is provided through the RapidKit Core bridge.
Workspai has official-generator paths for:
| Frontend | Common kit name |
|---|---|
| Next.js | nextjs or frontend.nextjs |
| React Router / Remix | remix |
| React with Vite | vite-react |
| Vue with Vite | vite-vue |
| Svelte with Vite | vite-svelte |
| Solid with Vite | vite-solid |
| Vanilla Vite | vite-vanilla |
| Nuxt | nuxt |
| Angular | angular |
| Astro | astro |
| SvelteKit | sveltekit |
The ecosystem's official generator creates the application. Workspai then adds project metadata and performs the selected workspace registration.
| Category | Project | Kit | Creation owner |
|---|---|---|---|
| Backend | Axum | rust.axum |
Workspai deterministic Cargo baseline |
| Backend | Laravel | php.laravel |
Composer / Laravel |
| Desktop | Tauri | desktop.tauri |
create-tauri-app |
| Desktop | Electron Forge | desktop.electron |
create-electron-app |
| Extension | VS Code Extension | extension.vscode |
generator-code |
Every generated project receives a canonical kind and category. The four
user-facing categories are backend, frontend, desktop, and extension;
they remain visible in the Workspace Model and Knowledge Graph so consumers do
not have to guess a project’s role from its runtime.
Official generators may download packages and therefore need network access.
Each available integration requests the upstream latest stable channel rather
than pinning an old framework major. npm engine compatibility is enforced
strictly against the Node.js runtime running Workspai, and required ecosystem
tools such as Rust/Cargo, Git, PHP, or Composer are checked before generation.
The upstream generator remains authoritative for its exact supported runtime
range; Workspai records the latest-stable policy in the generated project
metadata and evidence.
desktop.electron, extension.vscode, and php.laravel do not accept
--skip-install, because their official generators do not expose a reliable,
documented no-install contract.
The project path is always:
(--output or current directory) + project name
Without --output:
npx workspai create project gofiber.standard gatewayThis creates <current-directory>/gateway.
With a relative output parent:
npx workspai create project gofiber.standard gateway --output servicesThis creates <current-directory>/services/gateway.
With an absolute output parent:
npx workspai create project gofiber.standard gateway --output /data/appsThis creates /data/apps/gateway.
Workspai does not overwrite or merge into an existing project directory.
If the current directory is /home/me/platform and it is a workspace:
npx workspai create project gofiber.standard gatewayThe project is created at /home/me/platform/gateway and registered with that
workspace.
If the current directory is /home/me/platform/services, the same command
creates /home/me/platform/services/gateway. Workspai does not force every
project into the workspace root.
npx workspai create project gofiber.standard gateway --output /data/appsThe project stays at /data/apps/gateway and is linked to the current
workspace as an external project. Workspai does not move or copy its source.
If the final project path is inside workspace B but the command was launched from workspace A, the workspace found from the final project path takes priority. The project is registered with workspace B.
When no workspace is found and you did not provide an explicit workspace flag, Workspai asks how the project should be managed before scaffolding.
The same question is shown for:
- RapidKit Core-backed projects
- Go, Spring Boot, and .NET npm-backed projects
- All supported frontend generators
- Direct
create project <kit> <name>commands - Interactive
createandcreate projectkit selection
This is the recommended option.
The project is created in the path you requested. After a successful scaffold, Workspai creates or reuses:
~/.workspai/workspaces/workspai
The managed default workspace uses:
| Setting | Value |
|---|---|
| Name | workspai |
| Profile | polyglot |
| Python engine | skipped |
| Git initialization | skipped |
| External project relationship | linked / adopted |
The project is not moved and is not copied.
The workspace is created only after the project scaffold succeeds. A failed scaffold does not create a new managed default workspace for that project.
Choose this interactively, or use:
npx workspai create project gofiber.standard gateway \
--create-workspace \
--yesUnlike create workspace --here, this turns the current directory itself into
a workspace. It then creates the project under the requested output parent.
This registration is foundation-only: it does not probe Python or Poetry,
create a virtual environment, or install rapidkit-core. The selected kit owns
its runtime prerequisites and installation flow.
For example, from /home/me/platform:
Workspace: /home/me/platform
Project: /home/me/platform/gateway
This uses the full current-folder Workspace Intelligence registration flow (contract, model, graph, agent context, and registry) without coupling the workspace to the optional Python engine.
Choose this interactively, or use:
npx workspai create project gofiber.standard gateway \
--no-workspace \
--yesThe project is scaffolded, but Workspai does not:
- Create the managed default workspace
- Turn the current directory into a workspace
- Add the project to the global workspace registry
- Link or adopt the project
- Synchronize a workspace contract
Do not combine --create-workspace and --no-workspace. In the current CLI,
--no-workspace takes precedence.
In CI, a non-interactive terminal, or when --yes is supplied, Workspai cannot
ask the three-way question. If no explicit workspace flag is present, it uses
the managed default workspace behavior.
npx workspai create project gofiber.standard gateway --yesTo opt out in automation, be explicit:
npx workspai create project gofiber.standard gateway --no-workspace --yesTo turn the current directory into a workspace in automation:
npx workspai create project gofiber.standard gateway --create-workspace --yesIf a project is physically outside its workspace, Workspai records a linked relationship. The source remains in its original path.
Project metadata includes:
.workspai/project.json
.workspai/adopt.json
.workspai/adopt-readiness.json
Workspace metadata includes:
.workspai/imported-projects.json
.workspai/workspace.contract.json
.workspai/workspace-registry.v1.json
The adoption policy records:
mode: linked
moved_source: false
copied_source: false
Projects physically inside a workspace are registered normally and generally
do not need adopt.json.
| Flag | Meaning |
|---|---|
--yes |
Do not ask optional questions; use managed-default behavior outside a workspace |
--output <parent> |
Choose the parent directory for the project |
--create-workspace |
Turn the current directory into a workspace before scaffolding |
--no-workspace |
Scaffold without workspace registration or linking |
--skip-install |
Defer dependency installation or warm-up where the generator supports it |
--skip-git |
Skip generator/wrapper Git initialization where supported |
--dry-run |
Show a create plan without normal finalization |
--skip-install has stack-specific behavior:
| Project type | Behavior |
|---|---|
| FastAPI and NestJS | Defers dependency and lock work |
| Go Fiber and Go Gin | Skips go mod tidy |
| Spring Boot | Skips Maven wrapper/dependency warm-up |
| .NET | Accepted, but there is no separate dependency warm-up step |
| Frontend | Passed to official generators that support a no-install option |
Project-level --skip-python-engine is rejected. It is only a workspace
creation option.
All supported project dry runs are read-only and show the resolved kit, target, generator, and flags without creating the project tree.
npx workspai create project fastapi.standard api --dry-run
npx workspai create project frontend.nextjs web --dry-run
npx workspai create project gofiber.standard api --dry-runWhen a project is created from inside a workspace, Workspai compares the project runtime with the workspace profile.
| Policy mode | Incompatible runtime behavior |
|---|---|
warn |
Show a warning and continue |
strict |
Stop before registration |
Frontend projects are checked as Node.js projects. --no-workspace disables
final registration, but it does not necessarily bypass the profile policy of an
enclosing workspace.
Workspai does not guess a native scaffold for every ecosystem. Projects such as WordPress, Laravel, Symfony, Rails, generic PHP, Ruby, Rust, and other unregistered stacks should be created with their ecosystem tooling and then adopted:
npx workspai adopt /path/to/projectSee create-planner-capabilities.md for the native, official, and existing-project lanes.
| Situation | Result |
|---|---|
| Invalid name | Stops before normal scaffold writes |
| Target directory already exists | Stops without merging or overwriting |
| Project scaffold fails | Workspace linking does not run |
| Git initialization fails | Usually warns and keeps the scaffold |
| Go or Maven dependency warm-up fails | Warns and keeps the scaffold |
| Workspace registration/finalization fails after scaffold | Lifecycle rollback restores metadata and removes a newly owned project tree |
Create finalization uses a durable lifecycle transaction. On failure it restores captured metadata and removes only newly owned project/workspace trees; it never deletes pre-existing source. A residue is possible only if rollback cleanup itself fails, in which case the command reports the cleanup failure and leaves a recovery journal.
Interactive local use:
npx workspai create projectAutomated creation linked to the managed default workspace:
npx workspai create project gofiber.standard api --yes --skip-installAutomated creation in a new current-folder workspace:
npx workspai create project gofiber.standard api \
--create-workspace \
--yes \
--skip-installAutomated standalone project creation:
npx workspai create project gofiber.standard api \
--no-workspace \
--yes \
--skip-installExplicit workspace creation followed by project creation:
npx workspai create workspace platform \
--profile polyglot \
--skip-python-engine \
--yes
cd ~/.workspai/workspaces/platform
npx workspai create project frontend.nextjs web --yes
npx workspai create project fastapi.standard api --yes --skip-install