Configuration
The stackspace.yaml schema — single source of truth for a workspace.
stackspace finds the workspace by walking up from the current directory until it sees a stackspace.yaml. You can override that with --config <path> on any verb.
Schema
Two top-level keys, both sequences:
repos:
- name: my-cli
url: my-org/my-cli
- name: my-daemon
url: my-org/my-daemon
checks:
- name: gh
command: gh auth status
required: true
- name: git
command: git --version
required: true
- name: go
command: go version
min_version: "1.25"
required: true
- name: docker
command: docker --version
required: false
repos
Each entry registers one managed repo. stackspace clones into ./repos/<name> from the workspace root.
name(string) — local directory name underrepos/. Doesn't have to match the repo's GitHub name, but matching is the convention.url(string) — passed togh repo clone. Use<owner>/<repo>form (the GitHub CLI accepts this directly).
checks
Each entry declares one tool that stackspace doctor verifies. The check passes if command exits zero (and, if min_version is set, the version parsed from the command's stdout meets the floor).
name(string) — display name indoctoroutput.command(string) — shell command to execute as the smoke test. Non-zero exit = fail.min_version(string, optional) — semver-ish version floor. Parsed from the command's stdout; the check fails if the parsed version is below this.required(bool) —truemeans a failure is reported as✗anddoctorexits non-zero.falsemeans a failure is reported as⚠anddoctorstill exits zero.
Editing the file
stackspace add edits stackspace.yaml in place using a YAML node round-trip that preserves comments and formatting. Hand-edits are also fine — stackspace clone reconciles whatever you put in there.
.gitignore written by stackspace init excludes repos/ from the workspace's own git history. Managed repos live in their own remotes — they're cloned siblings, not submodules.