atris 2.6.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +124 -34
  2. package/atris/CLAUDE.md +5 -1
  3. package/atris/atris.md +4 -0
  4. package/atris/features/README.md +24 -0
  5. package/atris/skills/autopilot/SKILL.md +74 -75
  6. package/atris/skills/endgame/SKILL.md +179 -0
  7. package/atris/skills/flow/SKILL.md +121 -0
  8. package/atris/skills/improve/SKILL.md +84 -0
  9. package/atris/skills/loop/SKILL.md +72 -0
  10. package/atris/skills/wiki/SKILL.md +61 -0
  11. package/atris/team/executor/MEMBER.md +10 -4
  12. package/atris/team/navigator/MEMBER.md +2 -0
  13. package/atris/team/validator/MEMBER.md +8 -5
  14. package/atris.md +33 -0
  15. package/bin/atris.js +210 -41
  16. package/commands/activate.js +28 -2
  17. package/commands/align.js +720 -0
  18. package/commands/auth.js +75 -2
  19. package/commands/autopilot.js +1213 -270
  20. package/commands/browse.js +100 -0
  21. package/commands/business.js +785 -12
  22. package/commands/clean.js +107 -2
  23. package/commands/computer.js +429 -0
  24. package/commands/context-sync.js +78 -8
  25. package/commands/experiments.js +351 -0
  26. package/commands/feedback.js +150 -0
  27. package/commands/fleet.js +395 -0
  28. package/commands/fork.js +127 -0
  29. package/commands/init.js +50 -1
  30. package/commands/learn.js +407 -0
  31. package/commands/lifecycle.js +94 -0
  32. package/commands/loop.js +114 -0
  33. package/commands/publish.js +129 -0
  34. package/commands/pull.js +434 -48
  35. package/commands/push.js +312 -164
  36. package/commands/review.js +149 -0
  37. package/commands/run.js +76 -43
  38. package/commands/serve.js +360 -0
  39. package/commands/setup.js +1 -1
  40. package/commands/soul.js +381 -0
  41. package/commands/status.js +119 -1
  42. package/commands/sync.js +147 -1
  43. package/commands/terminal.js +201 -0
  44. package/commands/wiki.js +376 -0
  45. package/commands/workflow.js +191 -74
  46. package/commands/workspace-clean.js +3 -3
  47. package/lib/endstate.js +259 -0
  48. package/lib/learnings.js +235 -0
  49. package/lib/manifest.js +1 -0
  50. package/lib/todo.js +9 -5
  51. package/lib/wiki.js +578 -0
  52. package/package.json +2 -2
  53. package/utils/api.js +48 -36
  54. package/utils/auth.js +1 -0
package/README.md CHANGED
@@ -1,77 +1,167 @@
1
1
  # atris
2
2
 
3
- **atris** is a self improving context layer for your agent. Works with coding agents like Claude Code and Cursor.
3
+ **atris** is an operating system for intelligence.
4
+
5
+ It turns any repo into an AI workspace with shared context, a `plan -> do -> review` loop, daily logs, feature packs, and reusable skills.
4
6
 
5
7
  ## For Coding Agents
6
8
 
7
- **If you're a coding agent (Claude Code, Cursor, Windsurf, Copilot, etc.) reading this:**
9
+ If you're an agent, run:
8
10
 
9
- When the user asks to build/plan/fix something, run:
10
11
  ```bash
11
12
  atris
12
13
  ```
13
14
 
14
- Follow the instructions in the output. The full protocol is in `atris.md`.
15
+ Then read the workspace's `atris/atris.md` and follow it exactly. `atris.md` is the source of truth.
15
16
 
16
17
  ---
17
18
 
19
+ ## What Atris Gives You
20
+
21
+ - An AI workspace on top of any repo
22
+ - A strict `plan -> do -> review` loop
23
+ - Daily logs, task tracking, feature packs, and project memory
24
+ - Skills, team members, integrations, and cloud sync when you need them
25
+
26
+ ## Critical Files
27
+
28
+ | File | Purpose |
29
+ |------|---------|
30
+ | `atris/atris.md` | God file. Protocol and source of truth |
31
+ | `atris/MAP.md` | Navigation index with file:line refs |
32
+ | `atris/TODO.md` | Shared task queue |
33
+ | `atris/logs/YYYY/YYYY-MM-DD.md` | Daily log, inbox, notes, completions |
34
+ | `atris/features/` | Feature packs with `idea.md`, `build.md`, `validate.md` |
35
+ | `atris/skills/` | Reusable skills for agents |
36
+ | `atris/team/` | Team member specs and local context |
37
+
38
+ ```text
39
+ atris/
40
+ ├── atris.md
41
+ ├── MAP.md
42
+ ├── TODO.md
43
+ ├── logs/
44
+ ├── features/
45
+ ├── skills/
46
+ └── team/
47
+ ```
48
+
18
49
  ## Install
19
50
 
20
51
  ```bash
21
52
  npm install -g atris
53
+ atris --version
22
54
  ```
23
55
 
24
- ## Quick Start
56
+ Requires Node.js 18+.
57
+
58
+ If you want Atris cloud workspaces, businesses, or integrations, run `atris setup` after install.
59
+
60
+ ## How To Run Atris
25
61
 
26
62
  ```bash
27
63
  cd your-project
28
- atris init # Creates atris/ folder
29
- atris # Loads context, ready to build
64
+ atris init
65
+ atris
30
66
  ```
31
67
 
32
- Then describe what you want to build. The agent will:
33
- 0. (Optional) Explore with `atris brainstorm` if uncertain
34
- 1. Show you a visualization
35
- 2. Wait for approval
36
- 3. Create `atris/features/[name]/idea.md` + `build.md` + `validate.md`
37
- 4. Execute step by step
38
- 5. Validate (fill in validate.md, harvest lessons if anything surprised you)
68
+ `atris init` scaffolds the workspace, including `atris/wiki/`. `atris` loads context and hands the workflow off to `atris/atris.md`.
69
+
70
+ If you're still shaping the idea, use `atris brainstorm`. If you want Atris to keep cycling, use `atris run` or `atris autopilot`. If you want the repo brain kept honest, use `atris loop`. `atris activate` now surfaces wiki state from `atris/wiki/STATUS.md` when it exists.
39
71
 
40
- Commands: `brainstorm` (optional) → `plan` `do` `review`
72
+ Core loop: `plan` -> `do` -> `review`
41
73
 
42
- Works with: Claude Code, Cursor, Windsurf, GitHub Copilot, any agent.
74
+ Works with Claude Code, Cursor, Windsurf, Codex, GitHub Copilot, and other coding agents.
43
75
 
44
- ## Experiments
76
+ ## Core Commands
45
77
 
46
- Atris also supports Karpathy-style keep/revert loops inside `atris/experiments/`.
78
+ | Command | Purpose |
79
+ |---------|---------|
80
+ | `atris` | Load context and start |
81
+ | `atris init` | Scaffold an Atris workspace |
82
+ | `atris brainstorm` | Explore before planning |
83
+ | `atris plan` | Create the plan/spec |
84
+ | `atris do` | Execute work |
85
+ | `atris review` | Validate work and capture learnings |
86
+ | `atris run` | Auto-chain `plan -> do -> review` |
87
+ | `atris autopilot` | Guided loop with approvals |
88
+ | `atris log` | Add inbox items to today's journal |
89
+ | `atris status` | Show active work and completions |
90
+ | `atris learn` | Manage structured learnings |
91
+ | `atris ingest` | Fast local-first wiki ingest into `atris/wiki/` |
92
+ | `atris loop` | Refresh wiki health, stale/orphan signals, and next ingest candidates |
93
+ | `atris wiki` | Full wiki namespace: ingest, query, lint, search, log, and loop |
94
+ | `atris experiments` | Run Karpathy-style keep/revert packs |
95
+
96
+ ## Built-In Systems
97
+
98
+ - `atris learn` stores structured project memory in `atris/learnings.jsonl`
99
+ - `atris wiki` keeps repo memory in `atris/wiki/` by default, with `--cloud` when you want the remote workspace path
100
+ - `atris loop` refreshes `atris/wiki/STATUS.md` and `atris/wiki/log.md`, flags stale/orphan pages, and suggests the next ingest
101
+ - `atris activate` loads the current wiki status so the next session starts with project memory, not just tasks
102
+ - `atris experiments` runs Karpathy-style keep/revert loops in `atris/experiments/`
103
+ - `atris pull` and `atris push` sync cloud workspaces and journals
104
+
105
+ ## Benchmark Harness
106
+
107
+ Atris ships one public head-to-head benchmark harness for comparing a pinned
108
+ single-model baseline against a coordinated stack run on the same task brief.
109
+
110
+ Quickstart:
47
111
 
48
112
  ```bash
49
- atris experiments init self-heal
50
- atris experiments validate
51
- atris experiments benchmark
113
+ node bin/atris.js experiments validate endstate-baseline
114
+ node bin/atris.js experiments validate endstate-stack
115
+ node bin/atris.js experiments run endstate-baseline --dry-run
116
+ node bin/atris.js experiments run endstate-stack --dry-run
117
+ node bin/atris.js experiments compare endstate
52
118
  ```
53
119
 
54
- ## Update
120
+ One-command rehearsal:
55
121
 
56
122
  ```bash
57
- atris upgrade # Install latest from npm
58
- atris update # Sync local files to new version
123
+ node bin/atris.js experiments replay endstate
59
124
  ```
60
125
 
126
+ What to inspect:
127
+
128
+ - receipts land in `atris/experiments/endstate-baseline/artifacts/` and
129
+ `atris/experiments/endstate-stack/artifacts/`
130
+ - scores append to each pack's `results.tsv`
131
+ - `atris experiments compare endstate` prints the latest side-by-side scorecard
132
+ - `atris experiments replay endstate` runs the full public dry-run rehearsal
133
+ - the benchmark contract lives at `atris/features/endstate/contract.md`
134
+ - the verification log lives at `atris/features/endstate/validate.md`
135
+
136
+ The stack wins Level 1 only if it beats the baseline on total score and does
137
+ not lose the reviewed completion category.
138
+
61
139
  ## Skills
62
140
 
63
- Atris includes agent-agnostic skills that work with Claude, Cursor, Codex, any LLM:
141
+ Atris ships a real skill catalog in `atris/skills/`, not just one workflow file.
64
142
 
65
- | Skill | Purpose |
66
- |-------|---------|
67
- | atris | Workflow enforcement + plan/do/review |
68
- | autopilot | PRD-driven autonomous execution |
69
- | backend | Backend architecture anti-patterns |
70
- | design | Frontend aesthetics policy |
71
- | meta | Metacognition for agents |
72
- | writing | Essay process with approval gates |
143
+ Examples:
144
+ - `atris`, `autopilot`, `autoresearch`, `wiki`, `loop`
145
+ - `backend`, `design`, `copy-editor`, `meta`, `writing`
146
+ - `github`, `email-agent`, `calendar`, `drive`, `slack`, `notion`, `slides`, `x-search`, `youtube`, `ramp`
147
+ - `apps`, `create-app`, `create-member`, `memory`, `magic-inbox`, `improve`, `skill-improver`, `flow`
148
+
149
+ ```bash
150
+ atris skill list
151
+ atris skill audit [name]
152
+ atris skill fix [name]
153
+ atris skill create <name>
154
+ atris skill link [--all]
155
+ ```
73
156
 
74
- Install to Codex: `cp -r atris/skills/[name] ~/.codex/skills/`
157
+ For Codex, copy any skill folder into `~/.codex/skills/`.
158
+
159
+ ## Update
160
+
161
+ ```bash
162
+ atris upgrade # Install latest from npm
163
+ atris update # Sync local workspace files to new version
164
+ ```
75
165
 
76
166
  ---
77
167
 
package/atris/CLAUDE.md CHANGED
@@ -26,21 +26,25 @@ This displays the Atris welcome visualization. Show it to the user, then respond
26
26
 
27
27
  - Read `atris/PERSONA.md` (tone + operating rules).
28
28
  - Run `atris activate` to load the current working context.
29
+ - If `atris/wiki/STATUS.md` exists, treat it as the current memory snapshot for the project.
29
30
 
30
31
  ## Core Files
31
32
 
32
33
  - `atris/MAP.md` — navigation (use file:line references)
33
34
  - `atris/TODO.md` — current work queue (target state = 0)
34
35
  - `atris/logs/YYYY/YYYY-MM-DD.md` — journal (Inbox + Completed)
36
+ - `atris/wiki/STATUS.md` — current wiki health and next ingest targets
37
+ - `atris/wiki/index.md` — local knowledge index
35
38
  - `atris/atris.md` — protocol/spec
36
39
 
37
40
  ## Default Loop
38
41
 
39
42
  `atris plan` → `atris do` → `atris review`
40
43
 
44
+ If the task produces durable project knowledge, update `atris/wiki/` or run the local wiki flow (`atris ingest`, `atris query`, `atris lint`).
45
+
41
46
  ## Rules (Non‑Negotiable)
42
47
 
43
48
  - Plan = ASCII visualization + approval gate. Do not execute during planning.
44
49
  - Execute step-by-step, verify as you go, update artifacts (`TODO.md`, `MAP.md`) when reality changes.
45
50
  - Delete completed tasks (validator cleans to target state = 0).
46
-
package/atris/atris.md CHANGED
@@ -11,6 +11,7 @@
11
11
  1. Load context (ONE time, remember for session):
12
12
  - `atris/logs/YYYY/YYYY-MM-DD.md` (today's journal)
13
13
  - `atris/MAP.md` (navigation overview)
14
+ - `atris/wiki/STATUS.md` (wiki health + next ingest targets, if present)
14
15
  - `atris/team/*.md` (all agent specs)
15
16
 
16
17
  2. Output this EXACT box:
@@ -161,6 +162,8 @@ Specs loaded at activate from `team/*.md`
161
162
  | `MAP.md` | Where is X? (navigation) |
162
163
  | `TODO.md` | Task queue (target: 0) |
163
164
  | `logs/YYYY/MM-DD.md` | Journal (daily) |
165
+ | `wiki/STATUS.md` | Local project memory health |
166
+ | `wiki/index.md` | Local knowledge index |
164
167
  | `PERSONA.md` | Communication style |
165
168
  | `team/` | Agent behaviors |
166
169
  | `atrisDev.md` | Full spec (reference) |
@@ -196,6 +199,7 @@ Context window = cache. Disk = truth. Route discoveries as they happen.
196
199
  | Code location | MAP.md | file:line reference |
197
200
  | New task | TODO.md | Task + exit condition |
198
201
  | Decision / tradeoff | Journal → Notes | Timestamped line |
202
+ | Durable project knowledge | wiki/ | page update + STATUS refresh |
199
203
  | Something learned | lessons.md | One-line lesson |
200
204
  | Work finished | Journal → Completed | C#: description |
201
205
 
@@ -90,6 +90,30 @@ Close remaining audit gaps from self-audit
90
90
 
91
91
  ### Completed Features
92
92
 
93
+ #### endstate
94
+ Public benchmark for proving a coordinated stack beats a pinned single-model baseline
95
+ - **Files:** atris/features/endstate/*, commands/autopilot.js, commands/experiments.js, commands/loop.js, lib/wiki.js
96
+ - **Status:** complete
97
+ - **Keywords:** benchmark, endstate, autopilot, experiments, eval
98
+ - **What:** Defines the benchmark, scorecard, and build plan for a head-to-head run across `atris-cli` and `atrisos-backend`
99
+ - **Completed:** 2026-04-08
100
+
101
+ #### wiki-loop
102
+ Deterministic upkeep loop for the local wiki
103
+ - **Files:** commands/loop.js, lib/wiki.js, commands/wiki.js, bin/atris.js, test/commands.test.js, test/cli-smoke.test.js, atris/skills/loop/SKILL.md, atris/features/wiki-loop/*
104
+ - **Status:** complete
105
+ - **Keywords:** wiki, loop, upkeep, stale, orphan, status
106
+ - **What:** Adds `atris loop` and `atris wiki loop` to refresh `STATUS.md` + `log.md`, detect stale/orphan pages, and suggest the next ingest without auto-push
107
+ - **Completed:** 2026-04-07
108
+
109
+ #### wiki
110
+ Local-first project wiki with cloud opt-in
111
+ - **Files:** lib/wiki.js, commands/wiki.js, commands/init.js, commands/activate.js, commands/pull.js, commands/push.js, bin/atris.js, test/commands.test.js, test/cli-smoke.test.js, atris/skills/wiki/SKILL.md, atris/wiki/*
112
+ - **Status:** complete
113
+ - **Keywords:** wiki, ingest, local-first, cloud, memory
114
+ - **What:** Canonical `atris/wiki/` scaffold, local-first ingest/query/lint, `--only wiki` sync alias, init/activate integration, project-local wiki skill, seeded repo wiki
115
+ - **Completed:** 2026-04-07
116
+
93
117
  #### self-improving-loop
94
118
  Make Atris recursive — validate.md lessons feed back into the next idea.md
95
119
  - **Files:** atris/lessons.md (new), atris.md, atris/team/navigator.md, atris/team/validator.md, atris/MAP.md
@@ -1,101 +1,100 @@
1
1
  ---
2
2
  name: autopilot
3
- description: PRD-driven autonomous execution - give it a task, it loops until done Triggers on "autopilot", "autonomous", "get it done", "finish this", "ship it".
4
- version: 1.0.0
3
+ description: "Run ONE autopilot tick. Reads identity (flow) + horizon (endgame), shows a visual status block, picks the next [endgame] task or seeds a new endgame at boundaries, then executes plan→do→review. Lessons compound to atris/lessons.md. Triggers on: autopilot, run one tick, ship one thing, do the next thing, get this done."
4
+ version: 3.2.0
5
5
  tags:
6
6
  - autopilot
7
7
  - workflow
8
- - automation
8
+ - tick
9
+ - endgame
10
+ - flow
9
11
  ---
10
12
 
11
- # Autopilot Skill
13
+ > **The two-engine architecture:** /flow chains forward from identity (who you are → next move). /endgame chains backward from horizon (where you're going → next move). They meet at the same intersection — the next thing /autopilot should ship. Each tick reads both sides and shows them in the visual status block.
12
14
 
13
- Autonomous task execution. Plan → Do → Review loop until acceptance criteria pass.
15
+ ## Visual status block
14
16
 
15
- ## When to Use
16
-
17
- - User says "get this done" or "ship it"
18
- - User describes a feature/bug and wants hands-off execution
19
- - Any task that can be validated with acceptance criteria
20
-
21
- ## Process
17
+ Every tick prints this BEFORE scanning for work, so you can see the loop's state at a glance:
22
18
 
23
19
  ```
24
- ┌───────────────────────────────────────────────────────┐
25
- INPUT: "Add dark mode toggle"
26
-
27
- 1. GENERATE PRD
28
- - Type: feature or bug (auto-detect)
29
- - Acceptance criteria (testable conditions)
30
- │ - Priority: 1 (single story) │
31
- │ │
32
- │ 2. LOOP (max 5 iterations) │
33
- │ ┌──────────────────────────────────────┐ │
34
- │ │ PLAN: Navigator creates tasks │ │
35
- │ │ - Read MAP.md for file locations │ │
36
- │ │ - ASCII diagram of approach │ │
37
- │ │ - Add tasks to TODO.md │ │
38
- │ │ - Signal: [PLAN_COMPLETE] │ │
39
- │ ├──────────────────────────────────────┤ │
40
- │ │ DO: Executor builds │ │
41
- │ │ - Implement each task │ │
42
- │ │ - Verify changes work │ │
43
- │ │ - Commit changes │ │
44
- │ │ - Signal: [DO_COMPLETE] │ │
45
- │ ├──────────────────────────────────────┤ │
46
- │ │ REVIEW: Validator checks │ │
47
- │ │ - Check acceptance criteria │ │
48
- │ │ - If fail: [REVIEW_FAILED] reason │ │
49
- │ │ - If pass: [COMPLETE] │
50
- │ └──────────────────────────────────────┘ │
51
- │ │
52
- │ 3. OUTPUT │
53
- │ - prd.json: PRD with passes: true │
54
- │ - progress.txt: Execution log │
55
- │ - Journal: Completion logged │
56
- └───────────────────────────────────────────────────────┘
20
+ ┌──────────────────────────────────────────────────────────────┐
21
+ tick · 14:23
22
+ identity: building atris-business cloud for design partners
23
+ horizon: wiki-from-atris-labs
24
+ atris-cli wiki has 3 new pages from atris-labs
25
+ progress: ████████░░░░ 6/9 endgame steps
26
+ └──────────────────────────────────────────────────────────────┘
57
27
  ```
58
28
 
59
- ## Acceptance Criteria Templates
29
+ - **identity** comes from `atris/PERSONA.md` (first non-trivial line)
30
+ - **horizon** comes from the `## Endgame` section in `atris/TODO.md`
31
+ - **progress** counts `[endgame]`-tagged tasks in Backlog vs `T#/W#/E#`-prefixed entries in Completed
32
+
33
+ If identity is missing, edit PERSONA.md. If no horizon is active, /endgame seeds one from inbox / wiki / lessons.
34
+
35
+ # /autopilot
36
+
37
+ Runs ONE plan→do→review tick anchored to the current endgame. If no endgame is active, seeds one from the inbox or wiki signals first. Not a recurring loop — call `/loop` for that.
38
+
39
+ ## When to use
40
+
41
+ - User says "run one tick", "do the next thing", "ship one thing", "get this done"
42
+ - The cron job from `/loop` invokes this on each fire
43
+
44
+ ## What ONE tick does
60
45
 
61
- **Feature:**
62
- - Feature implemented and working as described
63
- - Tests pass (if test suite exists)
64
- - Build passes
65
- - Code follows project patterns (check MAP.md)
46
+ 1. **Read state** — load `atris/TODO.md`. Look for the `## Endgame` section header and `[endgame]`-tagged tasks in `## Backlog`.
47
+ 2. **Boundary check** if no `## Endgame` section exists, OR every `[endgame]`-tagged task in Backlog is done/missing, invoke `/endgame` first to seed the next horizon. `/endgame` will write a new `## Endgame` section + tagged backlog tasks to TODO.md.
48
+ 3. **Execute** run `atris autopilot --auto --iterations=1` via Bash. The CLI prefers `[endgame]`-tagged backlog tasks (priority 0) over reactive signals (priority 1+). One task per tick.
49
+ 4. **Stop** — show the output, do not start a conversation, do not chain. The next tick is the cron's job.
66
50
 
67
- **Bug:**
68
- - Bug is fixed and no longer reproducible
69
- - Regression test added (if applicable)
70
- - Build passes
71
- - No new bugs introduced
51
+ ## How to invoke
72
52
 
73
- ## Commands
53
+ When the user (or cron) invokes `/autopilot`:
74
54
 
75
- ```bash
76
- # With description
77
- atris autopilot "Add dark mode toggle"
55
+ ```
56
+ 1. Read atris/TODO.md
57
+ 2. If TODO.md has no `## Endgame` section OR no `[endgame]` tasks in Backlog:
58
+ → Invoke `/endgame` first (it will write the new endgame to TODO.md)
59
+ 3. Run: atris autopilot --auto --iterations=1
60
+ 4. Show output
61
+ 5. Stop
62
+ ```
78
63
 
79
- # Bug fix
80
- atris autopilot --bug "Login fails on Safari"
64
+ ## Boundary behavior
81
65
 
82
- # From TODO.md backlog
83
- atris autopilot --from-todo
66
+ The whole point of the architecture: **finish the current endgame before picking another.** Reactive signals (stale pages, broken refs) are fallbacks, not the main road. The main road is endgame → endgame → endgame, set by the human or seeded from inbox at every boundary.
84
67
 
85
- # With options
86
- atris autopilot "Add feature" --iterations=3 --verbose
87
68
  ```
69
+ TODO.md state → tick action
70
+ ─────────────────────────────────────────────────────────────────────
71
+ no ## Endgame section → /endgame to seed, then run tick
72
+ ## Endgame exists, [endgame] tasks 0 → /endgame to pick next, then run tick
73
+ ## Endgame exists, [endgame] tasks 1+ → run tick (pick next [endgame] task)
74
+ no endgame anywhere, no inbox, clean → loop journals "nothing left", stops
75
+ ```
76
+
77
+ ## Variants
88
78
 
89
- ## Stop Conditions
79
+ - `atris autopilot --dry-run` — preview what it would do, do not execute
80
+ - `atris autopilot --auto --iterations=N` — run up to N ticks back-to-back (still one task per tick, boundary checks between)
81
+ - `atris autopilot "<task description>"` — seed a new inbox item, then run
90
82
 
91
- 1. `[COMPLETE]` — All acceptance criteria met
92
- 2. Max iterations reached (default: 5)
93
- 3. Error that can't be recovered
83
+ ## Autonomous mode
84
+
85
+ If the user wants this to fire on a recurring schedule, invoke `/loop` instead. `/loop` schedules a cron that calls `/autopilot` every ~13 min, with the boundary check baked in.
86
+
87
+ ```
88
+ /autopilot → one tick (with boundary check at start)
89
+ /loop → /autopilot every ~13 min (heartbeat)
90
+ ```
94
91
 
95
92
  ## Rules
96
93
 
97
- - ONE task at a time
98
- - Verify before marking passes: true
99
- - Minimal changes only
100
- - Check MAP.md before touching code
101
- - Log to journal when complete
94
+ - One task at a time. Never batch.
95
+ - Always show *why* before executing.
96
+ - Stop after the first tick. Do not chain. Chaining is `/loop`'s job.
97
+ - Endgame tasks always preferred over reactive signals.
98
+ - At every boundary (no current endgame OR all done), reassess via `/endgame` — read inbox/wiki/logs, pick the next horizon, do not just run forever.
99
+ - If a tick fails, halt and journal the failure. Do not pretend it worked.
100
+ - The CLI writes the heartbeat Notes block. Do not hand-write tick summaries to the journal.
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: endgame
3
+ description: "Backward partner to /flow. Picks the next horizon from inbox + wiki + lessons, writes the reverse path as tagged tasks to TODO.md so /autopilot can pursue it tick by tick. Triggers on: endgame, what's the last move, where are we heading, reverse engineer, work backward."
4
+ version: 1.2.0
5
+ tags: [planning, vision, reverse-engineer, atris, wiki, todo, flow]
6
+ ---
7
+
8
+ > **Sister skill: /flow** — flow runs the same engine in reverse. flow chains forward from identity (who you are → today's next move). endgame chains backward from horizon (where you're going → today's next move). They meet at the same point: the next thing the agent should ship. Use both. Run flow at sunrise to set identity, run endgame at every TODO.md boundary to set horizon, and let /autopilot tick between them.
9
+
10
+ # /endgame
11
+
12
+ **Purpose:** help the human (or agent) reach their intent and goal **faster** by leveraging what the wiki already knows. Without endgame, they redo thinking. With endgame, they reach the next move in one pass — and write that move into TODO.md so the autopilot loop can pursue it without re-asking.
13
+
14
+ Most planning is forward-greedy: *what's the next ticket?* Endgame is backward: *what does winning look like, and what's the shortest path from here?*
15
+
16
+ > "You can't connect the dots looking forward; you can only connect them looking backward." — Steve Jobs
17
+
18
+ ## Step 0 — CHECK FOR EXISTING ENDGAME FIRST
19
+
20
+ Before anything else, read `atris/TODO.md`. If it already has a `## Endgame` section AND uncompleted `[endgame]`-tagged tasks in `## Backlog`, **do not pick a new endgame**. Instead reply: "current endgame `<slug>` still active — N steps remaining. Run `/autopilot` to continue, or `force /endgame` to reset." Then exit.
21
+
22
+ This rule exists so the loop pursues the current horizon to completion instead of constantly repicking.
23
+
24
+ ## Step 1 — READ THE INBOX, WIKI, LOGS
25
+
26
+ Before picking a new horizon, read what already exists. The wiki + logs are the user's paid-for memory; not using them means they're paying twice.
27
+
28
+ - `atris/lessons.md` — past surprises and failures the validator wrote down. Read this FIRST. Avoid horizons that hit the same rocks.
29
+ - `atris/wiki/STATUS.md` — current state, last loop findings, suggested next ingests
30
+ - `atris/wiki/index.md` — what pages already exist
31
+ - `atris/wiki/briefs/` — most recent cross-cutting brief pages (often already contain a horizon)
32
+ - `atris/MAP.md` — what code exists today
33
+ - `atris/TODO.md` — what's queued, what's done
34
+ - `atris/logs/YYYY/` — last 7-14 days of journals; scan `## Inbox` sections for unfulfilled ideas (these are user-seeded horizons)
35
+ - `atris/PERSONA.md` — current identity (paired with /flow's forward direction)
36
+ - `atris/business/<slug>/BUSINESS.md` if a business workspace
37
+
38
+ **Inbox items are the primary horizon source.** If recent journal `## Inbox` sections have unfulfilled ideas, pick the oldest one and run the three moves on it. Only fall back to reactive signals (wiki staleness, broken refs) if the inbox is empty.
39
+
40
+ If the horizon is genuinely unreadable from those sources, ask **1–3 sharp questions**. Never more. Never a wall of text.
41
+
42
+ ## The three moves
43
+
44
+ 1. **HORIZON** — One paragraph. What does the world look like when we win? Concrete. Falsifiable. Not a slogan.
45
+ 2. **REVERSE PATH** — Chain backward from HORIZON. Last move before winning, the one before, etc. **Include eliminate steps** — what gets deleted on the way to the endgame, not just what gets added. Stop when you hit something doable this week. 5–7 links max.
46
+ 3. **NEXT MOVE** — The first link in the chain. One concrete action, one session, no hedging.
47
+
48
+ > **v1.1.0 cut:** prior versions had two more moves — `IDENTITY` ("who are we when we've arrived") and `GAP` ("already true vs not yet"). Identity was philosophical overhead; GAP was just the diff between HORIZON and current state, which the wiki + MAP already give you. Three moves is enough. Less drift surface, faster ticks, fewer phrases for the validator to verify.
49
+
50
+ ## Step 2 — WRITE TO TODO.md
51
+
52
+ After running the three moves, write the result to `atris/TODO.md`:
53
+
54
+ 1. **Add a `## Endgame` section** (above `## Backlog`) with this exact shape:
55
+
56
+ ```markdown
57
+ ## Endgame
58
+
59
+ **Slug:** <kebab-case-slug>
60
+ **Picked:** YYYY-MM-DD HH:MM
61
+ **Horizon:** <one-line summary of HORIZON>
62
+ **Source:** <inbox-item | wiki-signal | user-prompt> (so we know where it came from)
63
+ ```
64
+
65
+ 2. **Add each REVERSE PATH step as a tagged backlog task** in `## Backlog`:
66
+
67
+ ```markdown
68
+ - **T1:** <step 1 description> [endgame]
69
+ - **T2:** <step 2 description> [endgame]
70
+ - **T3:** <step 3 description> [endgame]
71
+ ```
72
+
73
+ The tag must be exactly `[endgame]` (parser only matches `\w+`, no colons or hyphens). The slug lives in the section header.
74
+
75
+ Use `T1`, `T2`, `T3` … as IDs (or `W1`/`E1`/etc per endgame domain). Single uppercase letter + digits, optional trailing lowercase letter (the parser was extended in commit `4db14d9` to accept `W3b`-style validator sub-task IDs).
76
+
77
+ 3. **Append the full endgame to today's journal `## Notes`** so the reasoning is preserved:
78
+
79
+ ```markdown
80
+ ### Endgame picked — HH:MM PDT
81
+
82
+ slug: <slug>
83
+ source: <where>
84
+
85
+ HORIZON
86
+ <one paragraph>
87
+
88
+ REVERSE PATH
89
+ ENDGAME
90
+ ← T5
91
+ ← T4
92
+ ← T3
93
+ ← T2
94
+ ← T1 (next move)
95
+
96
+ NEXT MOVE
97
+ T1: <description>
98
+ Why this first: <one line>
99
+ ```
100
+
101
+ This is the archive — once the endgame closes, future `/endgame` runs can read this to learn what worked.
102
+
103
+ ## Step 3 — ARCHIVE PRIOR ENDGAME (if any)
104
+
105
+ If there was a `## Endgame` section in TODO.md before this run AND all its `[endgame]` tasks are done, append a closing entry to today's journal `## Notes`:
106
+
107
+ ```markdown
108
+ ### Endgame closed — HH:MM PDT
109
+
110
+ slug: <prior-slug>
111
+ shipped: N/N steps
112
+ commits: <list of commits since endgame was picked>
113
+ lessons: <one-line takeaway>
114
+ ```
115
+
116
+ Then remove the old `## Endgame` section from TODO.md before writing the new one. Completed `[endgame]` tasks should already have moved to `## Completed` via the validator.
117
+
118
+ ## Output shape (when called interactively)
119
+
120
+ When a human runs `/endgame` directly (not from a cron tick), show the three moves on screen first, ask one yes/no for confirmation, then write to TODO.md only after the human says go. When called from autopilot at a boundary, skip the confirmation — write straight to TODO.md and journal it.
121
+
122
+ ```
123
+ HORIZON
124
+ [one paragraph: concrete, falsifiable, not a slogan]
125
+
126
+ REVERSE PATH
127
+ ENDGAME
128
+ ← step N (add or eliminate)
129
+ ← step N-1
130
+ ← ...
131
+ ← step 1 (this week)
132
+
133
+ NEXT MOVE
134
+ [one concrete action, doable in one session]
135
+ Why this first: [one line]
136
+ ```
137
+
138
+ ## Rules
139
+
140
+ - **Step 0 first.** If a current endgame is still active, do not pick a new one. Continue, don't repick.
141
+ - **Read inbox + wiki first.** The whole point is leveraging what exists.
142
+ - **HORIZON before REVERSE PATH.** Vision before steps.
143
+ - **REVERSE PATH includes eliminate.** Half of strategy is removal. Forward-greedy planning never asks this. Endgame must.
144
+ - **The chain must terminate this week.** If it can't, the horizon is too far — pick a closer one and say so.
145
+ - **5–7 links max in the chain.** More than that = horizon is too vague.
146
+ - **Cite wiki pages** with `[[atris/wiki/...]]` refs.
147
+ - **Ask 1–3 questions max** if the horizon is unclear. Never a wall of text.
148
+ - **One chain, not three.** Pick the shortest defensible one.
149
+ - **No "we could also"** anywhere in NEXT MOVE. There is one move.
150
+ - **Reject mysticism.** Vision is necessary but not sufficient. The chain must be falsifiable and doable.
151
+ - **Tag format is `[endgame]` only** — no colons, no slugs in the tag. Slug lives in the section header.
152
+
153
+ ## Phase 2 — agent runs this on itself
154
+
155
+ This skill is designed to be runnable by the agent on its own state, not just by humans. When `atris autopilot` finishes the last `[endgame]` task in the current horizon, the next tick's boundary check invokes `/endgame` against the new state, picks the next horizon from inbox/wiki, writes it to TODO.md, and queues the next move — without a human pulling the trigger.
156
+
157
+ ## When to use vs other skills
158
+
159
+ | Skill | When |
160
+ |---|---|
161
+ | `autopilot` | Run one tick of the current endgame |
162
+ | `decide` | You have N options and need to pick |
163
+ | `improve` | You want to clean up drift |
164
+ | `wiki` | You want to capture knowledge |
165
+ | `loop` | You want the autopilot heartbeat scheduled |
166
+ | **`endgame`** | No current horizon, current one done, or work feels busy-but-pointless |
167
+
168
+ ## Anti-patterns
169
+
170
+ - Skipping Step 0 (check for existing endgame). Repicking mid-pursuit kills compounding.
171
+ - Skipping Step 1 (read inbox + wiki). The skill is pointless without it.
172
+ - Walls of clarifying questions. Max 1–3.
173
+ - Listing 5 possible endgames. Pick one and commit.
174
+ - REVERSE PATH that's purely additive. Always include at least one eliminate.
175
+ - Chain longer than 7 links. Shorten the horizon.
176
+ - Three "next moves." There is one.
177
+ - Quoting goals from a deck. Read the wiki, look at reality.
178
+ - Tagging tasks with `[endgame:slug]` — parser only accepts `[\w+]`, will fail silently.
179
+ - Padding with IDENTITY or GAP sections — those were cut in v1.1.0 as autopilot overhead.