atris 2.6.3 → 3.0.1
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.
- package/README.md +124 -34
- package/atris/CLAUDE.md +5 -1
- package/atris/atris.md +4 -0
- package/atris/features/README.md +24 -0
- package/atris/skills/autopilot/SKILL.md +74 -75
- package/atris/skills/endgame/SKILL.md +179 -0
- package/atris/skills/flow/SKILL.md +121 -0
- package/atris/skills/improve/SKILL.md +84 -0
- package/atris/skills/loop/SKILL.md +72 -0
- package/atris/skills/wiki/SKILL.md +61 -0
- package/atris/team/executor/MEMBER.md +10 -4
- package/atris/team/navigator/MEMBER.md +2 -0
- package/atris/team/validator/MEMBER.md +8 -5
- package/atris.md +33 -0
- package/bin/atris.js +210 -41
- package/commands/activate.js +28 -2
- package/commands/align.js +720 -0
- package/commands/auth.js +75 -2
- package/commands/autopilot.js +1213 -270
- package/commands/browse.js +100 -0
- package/commands/business.js +785 -12
- package/commands/clean.js +107 -2
- package/commands/computer.js +429 -0
- package/commands/context-sync.js +78 -8
- package/commands/experiments.js +351 -0
- package/commands/feedback.js +150 -0
- package/commands/fleet.js +395 -0
- package/commands/fork.js +127 -0
- package/commands/init.js +50 -1
- package/commands/learn.js +407 -0
- package/commands/lifecycle.js +94 -0
- package/commands/loop.js +114 -0
- package/commands/publish.js +129 -0
- package/commands/pull.js +369 -38
- package/commands/push.js +283 -246
- package/commands/review.js +149 -0
- package/commands/run.js +76 -43
- package/commands/serve.js +360 -0
- package/commands/setup.js +1 -1
- package/commands/soul.js +381 -0
- package/commands/status.js +119 -1
- package/commands/sync.js +147 -1
- package/commands/terminal.js +201 -0
- package/commands/wiki.js +376 -0
- package/commands/workflow.js +191 -74
- package/commands/workspace-clean.js +3 -3
- package/lib/endstate.js +259 -0
- package/lib/learnings.js +235 -0
- package/lib/manifest.js +1 -0
- package/lib/todo.js +9 -5
- package/lib/wiki.js +578 -0
- package/package.json +2 -2
- package/utils/api.js +40 -35
- package/utils/auth.js +1 -0
package/README.md
CHANGED
|
@@ -1,77 +1,167 @@
|
|
|
1
1
|
# atris
|
|
2
2
|
|
|
3
|
-
**atris** is
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
29
|
-
atris
|
|
64
|
+
atris init
|
|
65
|
+
atris
|
|
30
66
|
```
|
|
31
67
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
72
|
+
Core loop: `plan` -> `do` -> `review`
|
|
41
73
|
|
|
42
|
-
Works with
|
|
74
|
+
Works with Claude Code, Cursor, Windsurf, Codex, GitHub Copilot, and other coding agents.
|
|
43
75
|
|
|
44
|
-
##
|
|
76
|
+
## Core Commands
|
|
45
77
|
|
|
46
|
-
|
|
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
|
|
50
|
-
atris experiments validate
|
|
51
|
-
atris experiments
|
|
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
|
-
|
|
120
|
+
One-command rehearsal:
|
|
55
121
|
|
|
56
122
|
```bash
|
|
57
|
-
atris
|
|
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
|
|
141
|
+
Atris ships a real skill catalog in `atris/skills/`, not just one workflow file.
|
|
64
142
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
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
|
|
package/atris/features/README.md
CHANGED
|
@@ -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:
|
|
4
|
-
version:
|
|
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
|
-
-
|
|
8
|
+
- tick
|
|
9
|
+
- endgame
|
|
10
|
+
- flow
|
|
9
11
|
---
|
|
10
12
|
|
|
11
|
-
|
|
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
|
-
|
|
15
|
+
## Visual status block
|
|
14
16
|
|
|
15
|
-
|
|
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
|
-
│
|
|
26
|
-
│
|
|
27
|
-
│
|
|
28
|
-
│
|
|
29
|
-
│
|
|
30
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
53
|
+
When the user (or cron) invokes `/autopilot`:
|
|
74
54
|
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
80
|
-
atris autopilot --bug "Login fails on Safari"
|
|
64
|
+
## Boundary behavior
|
|
81
65
|
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
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.
|