Skip to content

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

Fixtureoutput of scenario 01 (cli module installed)
IDECursor
OSsame as scenario 01
Archon sourcehttps://aaep.site/manifest.json
Manifest version under testv0.1.0 (no version bump needed)

Pre-conditions

  1. Scenario 01 ✅, with cli module included (default).
  2. tools/archon-cli/ exists on disk.
  3. git status clean.

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

CheckExpected
tools/archon-cli/ removedyes
Other modules untouchedyes
.archon/drift.md rowsunchanged
.archon/VERSIONunchanged
Subsequent archon sync (scenario 09) reports cli as "not installed" — not as "0/N ok"yes
python3 scripts/archon-check.py --root . exit code0
npm run validate exit code0

Demo recordings

Will be replaced by docs/public/videos/update-cli-without-cli.mp4 once recorded. See videos/README for upload conventions.
Will be replaced by docs/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)ManifestRunnerResultDurationNotesRecord
2026-05-06 10:24:37 UTCv0.1.0cli❌ failing345 msfailed 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.mjsJSON
2026-05-06 06:10:26 UTCv0.1.0cli❌ failing349 msfailed 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.mjsJSON
2026-05-06 00:55:45 UTCv0.1.0cli❌ failing345 msfailed 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.mjsJSON
2026-05-06 00:40:11 UTCv0.1.0cli❌ failing353 msfailed 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.mjsJSON
2026-05-05 15:00:36 UTCv0.1.0cli❌ failing298 msfailed 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.mjsJSON
2026-05-05 14:55:20 UTCv0.1.0cli❌ failing354 msfailed 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.mjsJSON
2026-05-05 14:22:55 UTCv0.1.0cli❌ failing351 msfailed 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.mjsJSON
2026-05-05 14:04:55 UTCv0.1.0cli❌ failing339 msfailed 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.mjsJSON
2026-05-05 14:00:02 UTCv0.1.0cli❌ failing329 msfailed 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.mjsJSON
2026-05-05 13:59:14 UTCv0.1.0cli❌ failing348 msfailed 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.mjsJSON
2026-05-05 13:55:06 UTCv0.1.0cli❌ failing346 msfailed 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.mjsJSON

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-fails is a good follow-up.

Cross-references

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"
    }
  ]
}

Released under the Apache-2.0 License.