NDDev OpenCode Setup Manager
nddev-opencode-app plans, installs, updates, switches, migrates, restores, launches, and removes a native OpenCode nddev-builder setup in an explicit target directory. It never defaults to ~/.config/opencode and never uses the operator's live HOME.
Setup and profiles
The content setup is nddev-builder. Runtime posture is selected separately:
- full-auto is the default profile. Its exact OpenCode config is owned by
profiles/full-auto/opencode.json.
- safe is optional. It denies edits, asks for shell and external-directory
access, keeps read/search context available, and allows the native nddev-builder skill and subagent.
OpenCode sharing is disabled by the selected profile and by the launch boundary declared in build/manifest.json.
Native builder projection
OpenCode does not document a marketplace format. This module projects nddev-builder onto documented native surfaces. The exact managed projection is owned by setups/nddev-builder/setup.json and build/manifest.json.
Usage
python3 cli-tools/nddev_opencode.py list --json
python3 cli-tools/nddev_opencode.py plan --target /absolute/opencode-target --json
python3 cli-tools/nddev_opencode.py install --target /absolute/opencode-target --json
python3 cli-tools/nddev_opencode.py update --target /absolute/opencode-target --json
python3 cli-tools/nddev_opencode.py switch --profile safe --target /absolute/opencode-target --json
python3 cli-tools/nddev_opencode.py migrate --target /absolute/opencode-target --profile full-auto --json
python3 cli-tools/nddev_opencode.py restore --backup 0 --target /absolute/opencode-target --json
python3 cli-tools/nddev_opencode.py remove --target /absolute/opencode-target --jsonAll non-launch commands support --json. status is read-only and never executes the OpenCode binary:
python3 cli-tools/nddev_opencode.py status --target /absolute/opencode-target --jsonaistp provider protocol
provider-info, validate-bundle, plan-operation, and apply-operation implement provider protocol v3. Prepared and component-composed definitions use one deterministic HarnessBundle and the same pure-plan, exact confirmation, locked apply, verified status, backup, restore, and ownership-scoped removal path. The persisted provider state records exact setup/component, bundle, provider-release, approved-plan, target, and native-file identities.
Only native opencode.json, instruction, skill, agent, command, and plugin surfaces are accepted. MCP is explicitly unsupported by this manager and is rejected before plan creation or target mutation; no marketplace is invented.