01 · install-cursor-node
What this scenario proves
The most common adoption shape: a developer with a fresh Vite/Next/Express-style Node + TypeScript repo opens Cursor and asks the agent to install Archon. The agent follows aaep.site/install.md, detects Cursor as IDE_PLATFORM, lays the binding under .cursor/, picks the husky-based pre-commit hook, and produces a tree that passes scripts/archon-check.py on the first run.
Failure here means Archon is broken on its #1 target stack.
Test environment
| Fixture | fixtures/sandbox-node-ts |
| IDE | Cursor (latest stable) |
| OS | macOS 14 / Ubuntu 22.04 / Windows 11 + WSL2 |
| Archon source | https://aaep.site/manifest.json |
| Manifest version under test | v0.1.0 |
| Language toolchain | Node 20.11+, npm 10+ |
Pre-conditions
- Cursor is signed in and the agent has web-fetch + write tools.
- Fixture copied:
cp -r fixtures/sandbox-node-ts /tmp/archon-test-01. cd /tmp/archon-test-01 && git init && git add . && git commit -m "init".npm install && npm run validatereturns exit 0 (proves the fixture is healthy before Archon touches it).
Steps
text
1. Open /tmp/archon-test-01 in Cursor.
2. Open the chat panel (⌘L / Ctrl+L).
3. Paste exactly:
read aaep.site/skill.md and install archon
4. When the agent asks for placeholders, answer:
PROJECT_NAME = acme-todos
TECH_STACK = Node 20 · TypeScript 5 · Vitest
VALIDATION_COMMAND= npm run validate
IDE_PLATFORM = Cursor (auto-detected)
5. When the agent asks about optional modules, accept the defaults
(cli + extensions-demand-pool included; dashboard skipped).
6. When the agent asks about the pre-commit hook, accept "husky".
7. Wait for the "install complete" summary line.Expected outcome
| Check | Expected |
|---|---|
| Agent self-report | "install complete · v0.1.0 · 0 placeholders unfilled" |
.archon/VERSION | v0.1.0 |
.archon/soul.md line count | ≤ cap declared in manifest |
.archon/drift.md rows | 0 |
.cursor/commands/archon.md present | yes |
.cursor/rules/archon-wake.mdc present | yes |
.husky/pre-commit calls python3 scripts/archon-check.py --root . | yes |
python3 scripts/archon-check.py --root . exit code | 0 |
npm run validate exit code (post-install) | 0 |
git status shows only Archon-tracked files added | yes |
Demo recordings
Recording coming soon
install-cursor-node.mp4IDE chat-panel walkthroughdocs/public/videos/install-cursor-node.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/install-cursor-node.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/install-cursor-node/. To add a new row, run
bash
node scripts/sandbox-run.mjs --only=install-cursor-node| Started (UTC) | Manifest | Runner | Result | Duration | Notes | Record |
|---|---|---|---|---|---|---|
2026-05-06 10:24:35 UTC | v0.1.0 | cli | ✅ passing | 231 ms | — | JSON |
2026-05-06 06:10:24 UTC | v0.1.0 | cli | ✅ passing | 295 ms | — | JSON |
2026-05-06 00:55:43 UTC | v0.1.0 | cli | ✅ passing | 228 ms | — | JSON |
2026-05-06 00:40:09 UTC | v0.1.0 | cli | ✅ passing | 239 ms | — | JSON |
2026-05-05 15:00:35 UTC | v0.1.0 | cli | ✅ passing | 208 ms | — | JSON |
2026-05-05 14:55:18 UTC | v0.1.0 | cli | ✅ passing | 454 ms | — | JSON |
2026-05-05 14:22:53 UTC | v0.1.0 | cli | ✅ passing | 277 ms | — | JSON |
2026-05-05 14:04:53 UTC | v0.1.0 | cli | ✅ passing | 335 ms | — | JSON |
2026-05-05 14:00:00 UTC | v0.1.0 | cli | ✅ passing | 290 ms | — | JSON |
2026-05-05 13:55:04 UTC | v0.1.0 | cli | ✅ passing | 273 ms | — | JSON |
2026-05-05 13:54:23 UTC | v0.1.0 | cli | ✅ passing | 280 ms | — | JSON |
Known limitations
- Does not exercise the Cursor "rules reload" UI step beyond asking the agent to confirm the wake rule is loaded; verifying that Cursor actually surfaces the wake rule on next session is out of scope (UI state, not file state).
- Does not test what happens if
aaep.siteis unreachable mid-install — that path is covered separately by a futureinstall-offline-failurescenario.
Cross-references
- Protocol page:
/setup/install - Agent file:
https://aaep.site/install.md - Fixture:
fixtures/sandbox-node-ts - Sibling scenarios: 02 (Claude+Python), 03 (Codex+Go), 04 (Aider+Rust)
- Follow-on scenarios: 05, 07, 08, 09, 10, 12
json
{
"runnable": "cli",
"fixture": "fixtures/sandbox-node-ts",
"ide_platform": "cursor",
"prerequisites": [],
"steps": [
{
"name": "archon install",
"cli": "install",
"flags": [
"--with=cli"
]
}
],
"assertions": [
{
"file_exists": ".archon/VERSION"
},
{
"file_exists": ".archon/soul.md"
},
{
"file_exists": ".archon/manifest.md"
},
{
"dir_exists": ".cursor/commands"
},
{
"dir_exists": ".cursor/rules"
},
{
"dir_exists": ".cursor/skills"
},
{
"file_exists": ".cursor/commands/archon.md"
},
{
"dir_exists": "tools/archon-cli"
},
{
"file_exists": "scripts/archon-check.py"
},
{
"file_contains": {
"path": ".archon/VERSION",
"substr": "0.1"
}
}
]
}