08 · update-cli-without-cli
What this scenario proves
The --without={module} flag (and its agent-prompt equivalent) actually removes an optional module on update — including deleting the on-disk files of that module, not merely flagging it as "skipped going forward".
This is the regression test for the most common user request:
"I installed Archon with the cli module last week, but our CI image can't have Node. Can I drop just the CLI without uninstalling Archon entirely?"
Yes. This scenario proves it.
Test environment
| Fixture | output of scenario 01 (cli module installed) |
| IDE | Cursor |
| OS | same as scenario 01 |
| Archon source | https://aaep.site/manifest.json |
| Manifest version under test | v0.1.0 (no version bump needed) |
Pre-conditions
- Scenario 01 ✅, with
climodule included (default). tools/archon-cli/exists on disk.git statusclean.
Steps
text
1. In Cursor, paste exactly:
hi archon, update yourself but without the cli module
2. Or equivalently via CLI:
npx @archon/cli@latest update --without=cli --yes
3. The agent / CLI prints a planned-changes table that should include:
- REMOVE tools/archon-cli/... (every cli file)
- KEEP .archon/... (core unchanged)
- KEEP .cursor/... (binding unchanged)
4. Confirm.
5. Verify tools/archon-cli/ no longer exists.
6. Verify .archon/manifest.md or wherever opted-in modules are
tracked reflects "cli: not installed".Expected outcome
| Check | Expected |
|---|---|
tools/archon-cli/ removed | yes |
| Other modules untouched | yes |
.archon/drift.md rows | unchanged |
.archon/VERSION | unchanged |
Subsequent archon sync (scenario 09) reports cli as "not installed" — not as "0/N ok" | yes |
python3 scripts/archon-check.py --root . exit code | 0 |
npm run validate exit code | 0 |
Demo recordings
Recording coming soon
update-cli-without-cli.mp4IDE chat-panel walkthroughdocs/public/videos/update-cli-without-cli.mp4 once recorded. See videos/README for upload conventions. $ archon doctor .
[L1 Structural] OK
[L2 Contract] OK
[L3 Hints] OK
✔ Recording coming soon — placeholderdocs/public/asciinema/update-cli-without-cli.cast embedded via the asciinema-player web component. See asciinema/README for the recording command. Run records
The table below is rendered live from JSON written by the sandbox runner (scripts/sandbox-run.mjs) under docs/testing/sandbox/runs/update-cli-without-cli/. To add a new row, run
bash
node scripts/sandbox-run.mjs --only=update-cli-without-cli| Started (UTC) | Manifest | Runner | Result | Duration | Notes | Record |
|---|---|---|---|---|---|---|
2026-05-06 10:24:37 UTC | v0.1.0 | cli | ❌ failing | 345 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-06 06:10:26 UTC | v0.1.0 | cli | ❌ failing | 349 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-06 00:55:45 UTC | v0.1.0 | cli | ❌ failing | 345 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-06 00:40:11 UTC | v0.1.0 | cli | ❌ failing | 353 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 15:00:36 UTC | v0.1.0 | cli | ❌ failing | 298 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 14:55:20 UTC | v0.1.0 | cli | ❌ failing | 354 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 14:22:55 UTC | v0.1.0 | cli | ❌ failing | 351 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 14:04:55 UTC | v0.1.0 | cli | ❌ failing | 339 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 14:00:02 UTC | v0.1.0 | cli | ❌ failing | 329 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 13:59:14 UTC | v0.1.0 | cli | ❌ failing | 348 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
2026-05-05 13:55:06 UTC | v0.1.0 | cli | ❌ failing | 346 ms | failed assertions: dir_exists: tools/archon-cli: missing dir: tools/archon-cli file_exists: tools/archon-cli/bin/archon.mjs: missing: tools/archon-cli/bin/archon.mjs | JSON |
Known limitations
- Does not test re-adding the cli later via
--with=cli. That is a separate scenario worth adding (update-add-cli-back) once the basic remove path is green. - Does not test removing a required module — that should fail loudly. A negative scenario
update-without-required-failsis a good follow-up.
Cross-references
- Protocol page:
/setup/update§ "Module selection (--with / --without)" - Manifest:
/setup/manifest— required vs optional modules table - Pre-requisite: 01 install-cursor-node
- Follow-up: any subsequent 09 sync-clean run should reflect cli as "not installed".
json
{
"runnable": "cli",
"fixture": "fixtures/sandbox-node-ts",
"ide_platform": "cursor",
"prerequisites": [
{
"name": "archon install (no cli)",
"cli": "install",
"flags": [
"--without=cli"
]
}
],
"steps": [
{
"name": "archon update with cli",
"cli": "update",
"flags": [
"--with=cli"
]
}
],
"assertions": [
{
"dir_exists": "tools/archon-cli"
},
{
"file_exists": "tools/archon-cli/bin/archon.mjs"
}
]
}