npx claudepluginhub navapbc/digital-service-orchestra --plugin dso-devThis skill is limited to using the following tools:
Set up a new project to use Digital Service Orchestra by auto-detecting the stack and writing a
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
Set up a new project to use Digital Service Orchestra by auto-detecting the stack and writing a
workflow-config.yaml with sensible defaults.
/dso:init # Initialize current directory
/dso:init [project-dir] # Initialize a specific directory
Run detect-stack.sh to identify the project type:
STACK=$(bash ".claude/scripts/dso detect-stack.sh" "${PROJECT_DIR:-.}")
The script inspects marker files and returns one of:
python-poetry — pyproject.toml foundrust-cargo — Cargo.toml foundgolang — go.mod foundnode-npm — package.json foundconvention-based — Makefile with ≥2 standard targetsunknown — no recognized markersUse the detected stack to populate sensible command defaults:
| Stack | test | lint | format | format_check |
|---|---|---|---|---|
python-poetry | make test | make lint | make format | make format-check |
node-npm | npm test | npm run lint | npm run format | — |
rust-cargo | cargo test | cargo clippy | cargo fmt | cargo fmt --check |
golang | go test ./... | golangci-lint run | gofmt -l . | — |
convention-based | make test | make lint | make format | — |
Additional defaults for python-poetry:
validate: .claude/scripts/dso validate.sh --ciBefore proposing, check if workflow-config.yaml already exists using read-config.sh:
EXISTING_STACK=$(bash ".claude/scripts/dso read-config.sh" stack "${PROJECT_DIR:-.}/workflow-config.yaml")
If the file exists, warn the user and ask for confirmation before overwriting.
Present the proposed workflow-config.yaml to the user before writing:
# workflow-config.yaml — generated by /dso:init
version: 1
stack: <detected-stack>
commands:
test: <default-test-command>
lint: <default-lint-command>
format: <default-format-command>
# format_check: <default-format-check-command> # if applicable
# validate: <validate-command> # if applicable
Write workflow-config.yaml to the project directory.
workflow-config.yaml already exists. Overwrite? (yes/no)
If the user says no, abort and report the existing file path.If detect-stack.sh returns unknown, do not guess. Instead:
No recognized stack found in <project-dir>.
Please provide:
- test command (e.g., 'make test'):
- lint command (e.g., 'make lint'):
- format command (e.g., 'make format', or leave blank):
workflow-config.yaml.version: 1
stack: python-poetry
commands:
test: make test
lint: make lint
format: make format
format_check: make format-check
validate: .claude/scripts/dso validate.sh --ci
version: 1
stack: node-npm
commands:
test: npm test
lint: npm run lint
format: npm run format
version: 1
stack: rust-cargo
commands:
test: cargo test
lint: cargo clippy
format: cargo fmt
format_check: cargo fmt --check
version: 1
stack: golang
commands:
test: go test ./...
lint: golangci-lint run
format: gofmt -l .
version: 1
stack: convention-based
commands:
test: make test
lint: make lint
format: make format
| Situation | Response |
|---|---|
project-dir does not exist | Report error, abort |
Stack is unknown | Escalate to user for manual input |
workflow-config.yaml exists | Warn user, ask to confirm overwrite |
| User declines overwrite | Abort, show path to existing file |