NDDev Qwen Code Setup Manager
nddev-qwen-code-app is a dependency-free manager for a caller-selected Qwen Code home. It installs the nddev-builder content setup into an explicit absolute target, applies a selected runtime profile, and preserves unrelated authentication, model-provider, MCP, and runtime state.
This build targets the canonical Qwen Code CLI from QwenLM/qwen-code, package identity @qwen-code/qwen-code, binary qwen, version 0.21.7.
Owned state
The setup lifecycle manages:
- settings.json
- QWEN.md
- AGENTS.md
- .claude/CLAUDE.md
- extensions/nddev-builder/
- NDDEV-QWEN-CODE-SETUP.json
The manager never defaults to ~/.qwen; every mutating command requires --target /absolute/path. Qwen runtime state uses the same explicit target via QWENHOME=<target and QWENRUNTIMEDIR=<target/runtime.
Setup And Profiles
| Profile | Qwen approval mode | Sandbox | | --- | --- | --- | | full-auto | yolo | disabled | | safe | default | enabled |
full-auto is the default runtime profile. safe is a reduced-tool future profile, not an operating-system security boundary. balanced is recognized only as a legacy managed target state for inspection and migration.
The nddev-builder content setup installs the native Qwen extension by default. The extension uses Qwen Code's native projection:
extensions/nddev-builder/qwen-extension.json
extensions/nddev-builder/QWEN.md
extensions/nddev-builder/skills/qwen-builder-orientation/SKILL.md
extensions/nddev-builder/agents/qwen-builder-reviewer.mdNo Qwen marketplace manifest is shipped because Qwen Code's current native extension package is the qwen-extension.json directory format.
QWEN.md is the authoritative managed instruction file. AGENTS.md and the NDDev-managed .claude/CLAUDE.md bridge are compatibility pointers to that authority and do not duplicate setup policy. The upstream baseline records Qwen Code's observed root CLAUDE.md compatibility separately; this manager does not install that legacy root path for current targets. Current stamps use schema 2 with explicit setupid=nddev-builder and profileid; schema-1 safe and full-auto targets remain readable for migration, while schema-1 balanced targets require an explicit profile migration.
Setup lifecycle
python3 cli-tools/nddev_qwen_code.py list
python3 cli-tools/nddev_qwen_code.py status \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py plan \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py install \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py switch --profile safe \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py restore --backup 0 \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py remove \
`plan` is non-mutating. `install` creates a missing target or updates the same
content setup/profile. `switch` is required to change profile identity. Before
changing existing managed state, the manager creates a target-bound backup under
`.<target-name>.nddev-qwen-code-backups/<slot>/`; slots `0` through `9` rotate
oldest-first.
Unmanaged target entries are not deleted. Existing `modelProviders`, `security`,
`model`, `mcpServers`, `env`, and other non-managed settings survive setup
updates and switches when the managed setup keys are intact.
## Target-owned Qwen Code CLIpython3 cli-tools/nddev_qwen_code.py software-status \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py install-cli \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py update-cli \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py remove-cli \
--target /absolute/path/to/qwen-home
python3 cli-tools/nddev_qwen_code.py launch \
--target /absolute/path/to/qwen-home \
--workspace /absolute/path/to/project -- --version