# Workspace Initialization
> This is like `git init`.
When initializing a project workspace, the suitable scope is different depending on the amount of work done:
## Command Creation
* If it only stores parameters provided by the user, shared across profiles, and does not use any item, use `NoProfileNoFlow`.
To create this command:
1. Build the command context with the provided parameters.
When the command context is built:
- Workspace parameters are written to `workspace_params.yaml`.
* If it stores parameters for a *default* profile, and does not use any item, use `SingleProfileNoFlow`.
To create this command:
1. Build the command context with the provided parameters.
When the command context is built:
- Workspace parameters are written to `workspace_params.yaml`.
- Profile parameters are written to `profile_params.yaml`.
* If it does any repeatable work, such as download files or clone a repository, use `SingleProfileSingleFlow`.
To create this command:
1. Build the command context with the provided parameters.
2. Call `StateDiscoverCmd::exec` to discover the current and goal states.
3. Call `EnsureCmd::exec` to execute the flow.
When the command context is built:
- Workspace parameters are written to `workspace_params.yaml`.
- Profile parameters are written to `profile_params.yaml`.
- Flow parameters are written to `flow_params.yaml`.