atris 3.57.3 → 3.58.5

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 (175) hide show
  1. package/README.md +12 -1
  2. package/atris/skills/clawhub/member-runtime/SKILL.md +9 -9
  3. package/atris/skills/create-member/SKILL.md +16 -13
  4. package/atris/skills/design/SKILL.md +27 -4
  5. package/atris/skills/engines/SKILL.md +57 -13
  6. package/atris/skills/x-search/SKILL.md +13 -5
  7. package/atris/skills/youtube/SKILL.md +39 -8
  8. package/atris/team/brainstormer/MEMBER.md +2 -2
  9. package/atris/team/executor/MEMBER.md +3 -3
  10. package/atris/team/launcher/MEMBER.md +4 -4
  11. package/atris/team/navigator/MEMBER.md +3 -3
  12. package/atris/team/researcher/MEMBER.md +2 -2
  13. package/atris/team/validator/MEMBER.md +1 -1
  14. package/atris.md +14 -0
  15. package/ax +157 -24
  16. package/bin/atris.js +79 -31
  17. package/commands/aeo.js +4 -4
  18. package/commands/agents.js +1 -1
  19. package/commands/align.js +12 -12
  20. package/commands/analytics.js +3 -3
  21. package/commands/app.js +5 -5
  22. package/commands/ask.js +175 -0
  23. package/commands/auth.js +7 -7
  24. package/commands/autoland.js +29 -5
  25. package/commands/autopilot-front.js +6 -6
  26. package/commands/autopilot.js +90 -90
  27. package/commands/avail.js +5 -5
  28. package/commands/bench.js +63 -1
  29. package/commands/browse.js +2 -2
  30. package/commands/business.js +12 -12
  31. package/commands/card.js +2 -2
  32. package/commands/clean.js +13 -13
  33. package/commands/close.js +297 -15
  34. package/commands/compile.js +13 -13
  35. package/commands/computer.js +94 -27
  36. package/commands/console.js +5 -5
  37. package/commands/decide.js +1 -1
  38. package/commands/deck.js +9 -9
  39. package/commands/drive.js +4 -4
  40. package/commands/engine.js +173 -19
  41. package/commands/errors.js +3 -3
  42. package/commands/experiments.js +18 -1
  43. package/commands/feed.js +2 -2
  44. package/commands/feedback.js +4 -4
  45. package/commands/fleet.js +12 -12
  46. package/commands/game.js +1 -1
  47. package/commands/guide.js +49 -0
  48. package/commands/improve.js +19 -17
  49. package/commands/init.js +67 -19
  50. package/commands/interview.js +7 -7
  51. package/commands/land.js +40 -15
  52. package/commands/learn.js +12 -12
  53. package/commands/lesson.js +2 -2
  54. package/commands/log.js +1 -1
  55. package/commands/loops.js +4 -4
  56. package/commands/member.js +75 -50
  57. package/commands/mission.js +97 -98
  58. package/commands/one-lap.js +1 -1
  59. package/commands/pack.js +74 -8
  60. package/commands/plugin.js +6 -6
  61. package/commands/probe.js +9 -9
  62. package/commands/pull.js +35 -35
  63. package/commands/pulse.js +1 -1
  64. package/commands/push.js +21 -21
  65. package/commands/rainmaker.js +1 -1
  66. package/commands/recap.js +7 -7
  67. package/commands/reel.js +2 -2
  68. package/commands/release.js +3 -3
  69. package/commands/report.js +1 -1
  70. package/commands/review.js +5 -5
  71. package/commands/revisions.js +1 -1
  72. package/commands/run.js +1 -1
  73. package/commands/scout.js +3 -3
  74. package/commands/security-review.js +7 -7
  75. package/commands/serve.js +9 -9
  76. package/commands/setup.js +1 -1
  77. package/commands/sign.js +4 -4
  78. package/commands/signup.js +4 -4
  79. package/commands/site.js +8 -3
  80. package/commands/skill.js +6 -6
  81. package/commands/slop.js +18 -18
  82. package/commands/social.js +3 -3
  83. package/commands/soul.js +14 -14
  84. package/commands/spaceship.js +1 -1
  85. package/commands/status.js +2 -2
  86. package/commands/strings.js +13 -13
  87. package/commands/study.js +4 -4
  88. package/commands/sync.js +8 -8
  89. package/commands/task.js +50 -25
  90. package/commands/teach.js +2 -2
  91. package/commands/team.js +1 -1
  92. package/commands/theme.js +2 -2
  93. package/commands/tree.js +34 -0
  94. package/commands/truth.js +7 -7
  95. package/commands/verify.js +12 -12
  96. package/commands/visualize.js +2 -2
  97. package/commands/workflow.js +97 -40
  98. package/commands/worktree.js +57 -1
  99. package/commands/write.js +9 -9
  100. package/commands/x-search.js +304 -15
  101. package/commands/xp.js +6 -3
  102. package/commands/youtube.js +916 -65
  103. package/lib/accept-verify-gate.js +3 -3
  104. package/lib/activity-stream.js +1 -1
  105. package/lib/apply-gate.js +13 -0
  106. package/lib/auto-accept-certified.js +28 -12
  107. package/lib/autoland.js +6 -6
  108. package/lib/bench/engines.js +59 -8
  109. package/lib/bench/report.js +1 -1
  110. package/lib/bench/runner.js +204 -5
  111. package/lib/bench/tree-render.js +76 -0
  112. package/lib/card.js +1 -1
  113. package/lib/chat-log-scan.js +1 -1
  114. package/lib/claude-boot-block.js +2 -0
  115. package/lib/deck-compose.js +1 -1
  116. package/lib/deck-history.js +2 -2
  117. package/lib/deck-layout.js +1 -1
  118. package/lib/deck-review.js +5 -5
  119. package/lib/deck-schema.js +1 -1
  120. package/lib/default-verifier.js +1 -1
  121. package/lib/developer-api.js +3 -0
  122. package/lib/engine-ask.js +66 -9
  123. package/lib/engine-registry.js +15 -2
  124. package/lib/file-ops.js +1 -1
  125. package/lib/fleet.js +71 -35
  126. package/lib/html-render.js +1 -1
  127. package/lib/intents.js +172 -0
  128. package/lib/journal.js +1 -1
  129. package/lib/known-commands.js +2 -2
  130. package/lib/land-green.js +364 -0
  131. package/lib/lesson-contradiction.js +2 -2
  132. package/lib/lesson-preflight.js +1 -1
  133. package/lib/manifest.js +5 -5
  134. package/lib/member-alive.js +9 -5
  135. package/lib/memory-view.js +3 -3
  136. package/lib/mission-protected-lane.js +1 -1
  137. package/lib/mission-root.js +2 -2
  138. package/lib/orb-context.js +10 -10
  139. package/lib/pack-capabilities.js +861 -3
  140. package/lib/permission-grants.js +2 -2
  141. package/lib/policy-lessons.js +6 -6
  142. package/lib/pulse.js +8 -8
  143. package/lib/receipt-evidence.js +1 -1
  144. package/lib/reel.js +1 -1
  145. package/lib/review-integrity.js +1 -1
  146. package/lib/runner-command.js +35 -5
  147. package/lib/scorecard.js +4 -4
  148. package/lib/security-scan.js +5 -5
  149. package/lib/self-drive.js +1 -1
  150. package/lib/site-publish.js +372 -0
  151. package/lib/site.js +1 -1
  152. package/lib/slides-deck.js +2 -2
  153. package/lib/state-detection.js +2 -2
  154. package/lib/sync-telemetry.js +2 -2
  155. package/lib/task-db.js +17 -10
  156. package/lib/task-explanation.js +1 -1
  157. package/lib/task-proof.js +2 -2
  158. package/lib/task-receipt.js +3 -3
  159. package/lib/theme.js +12 -12
  160. package/lib/todo-fallback.js +3 -3
  161. package/lib/todo-sections.js +1 -1
  162. package/lib/tree-hash.js +79 -0
  163. package/lib/usage.js +1 -1
  164. package/lib/wish-delegate.js +1 -1
  165. package/lib/workspace-safety.js +4 -4
  166. package/lib/workspace-scaffold.js +3 -3
  167. package/package.json +1 -1
  168. package/scripts/det/concierge-bakeoff.sh +26 -0
  169. package/scripts/det/ytquote-repair.js +0 -1
  170. package/scripts/det/ytrail-race.js +0 -5
  171. package/scripts/member-operate.mjs +52 -14
  172. package/scripts/outbound-artifact-gate.js +0 -3
  173. package/utils/auth.js +0 -3
  174. package/utils/config.js +0 -1
  175. package/scripts/det/checklist-score.js +0 -191
package/README.md CHANGED
@@ -99,6 +99,17 @@ Core loop: `plan` -> `do` -> `review`
99
99
 
100
100
  Integrates with any agent.
101
101
 
102
+ ### Publish a static site
103
+
104
+ Upload any built static site to an Atris-hosted subdomain. See
105
+ [docs/site-publish.md](docs/site-publish.md) for flags, limits, profiles, and
106
+ troubleshooting.
107
+
108
+ ```bash
109
+ atris site publish dist --slug my-site --spa
110
+ atris site publish . --slug my-next-app --profile app --build # Next.js static export
111
+ ```
112
+
102
113
  ## Chat With Atris 2
103
114
 
104
115
  `ax` is the Atris 2 chat and coding-agent CLI. It uses the hosted Atris cloud by default, streams text, shows tool activity, and keeps fresh installs away from local setup.
@@ -237,7 +248,7 @@ atris business record atris/reports/2026-04-12-operator-recap.md --outcome mixed
237
248
  - `atris wiki --private` stores local-only sensitive notes under `.atris/presidio/`
238
249
  - `atris loop` refreshes `atris/wiki/STATUS.md` and `atris/wiki/log.md`, flags stale/orphan pages, and suggests the next ingest
239
250
  - `atris activate` loads the current wiki status so the next session starts with project memory, not just tasks
240
- - `atris member` keeps team-member identity and learning local-first: `MEMBER.md` is the role contract, `goals.json` is the machine-readable goal/experiment state, `goals.md` is the human readout, and `logs/YYYY-MM-DD.md` records what happened. Use `atris member goal`, `tick`, `status`, `block`, and `review --value 1..5` to test whether a member is making useful progress or needs the operator/orchestrator.
251
+ - `atris member` keeps team-member identity and learning local-first: `MEMBER.md` is the role contract, `goals.json` is the machine-readable goal/experiment state, `goals.md` is the human readout, and `logs/YYYY-MM-DD.md` records what happened. Use `atris member goal`, `tick`, `status`, `block`, and `review <name> <experiment-id> --accept --proof "..." --value 1..5` to test whether a member is making useful progress or needs the operator/orchestrator.
241
252
  - `atris codex-goal` is the read-only bridge for native Codex `/goal`: `status` inspects the live goal database, while the legacy `reset` command now refuses every mutation. Active tasks continue in place; completed tasks retain their final goal, and new work or recurring monitors use a new dedicated Codex task.
242
253
  - `atris task` keeps durable local task state and append-only events for agents; `atris/TODO.md` is just a regenerated readable board. Run the loop with `atris task new`, `delegate "..." --to <owner>`, `next`, `say`, and `ready <id> --proof "..."`; human approval is `atris task accept <id>` (moves to Done, awards Career XP) or `revise <id> --note "..."`. Final task transitions also append the general daily log and, when a real `atris/team/<member>/MEMBER.md` matches the task owner, that member's daily log. Add `--json` for headless agents, `atris task serve` for the local board, and `atris task show <ref>` / `events --all` for the full ledger. Commands accept semantic refs (`OBL-18`), full IDs, or any unique prefix. In cloud business workspaces, Supabase `tasks` is the source of truth and Swarlo the live claim layer.
243
254
  - `atris mission` is the durable autonomy layer: start with an owner, verifier, runner, and stop condition; record bounded work with `mission tick`; close with `mission complete` only after proof. Runners include `manual`, `claude`, `atris2`, and `codex_goal`.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: member-runtime
3
- description: "Load and run MEMBER.md team members -- complete AI workers with persona, skills, tools, context, and a journal that learns over time. Use when you want to activate a team member, run 'be my chief of staff', or manage stateful AI workers."
3
+ description: "Load and run MEMBER.md team members -- complete AI workers with persona, skills, tools, context, and a log that learns over time. Use when you want to activate a team member, run 'be my chief of staff', or manage stateful AI workers."
4
4
  version: 1.0.0
5
5
  tags:
6
6
  - ai-agents
@@ -12,7 +12,7 @@ tags:
12
12
 
13
13
  # Member Runtime
14
14
 
15
- This skill teaches you how to load and run MEMBER.md team members. A member is a skill that manages skills -- it bundles a persona, capabilities, tools, permissions, and a journal that gets smarter over time.
15
+ This skill teaches you how to load and run MEMBER.md team members. A member is a skill that manages skills -- it bundles a persona, capabilities, tools, permissions, and a log that gets smarter over time.
16
16
 
17
17
  Format spec: https://github.com/atrislabs/member
18
18
 
@@ -26,7 +26,7 @@ team/{name}/
26
26
  skills/ # What they can do (SKILL.md files)
27
27
  context/ # What they know (domain knowledge)
28
28
  tools/ # What they use (API docs, configs)
29
- journal/ # What they've learned (grows over time)
29
+ logs/ # What they've learned (grows over time)
30
30
  ```
31
31
 
32
32
  ## How to Load a Member
@@ -61,23 +61,23 @@ For each skill in the frontmatter `skills` list:
61
61
 
62
62
  Read all markdown files in `team/{name}/context/`. These are domain knowledge the member references while working -- playbooks, reference docs, default preferences. Load them into your working context.
63
63
 
64
- ### 5. Read the journal
64
+ ### 5. Read the log
65
65
 
66
66
  This is what makes members stateful. Before doing anything:
67
67
 
68
68
  1. Search memory for past entries from this member: `memory_search("{member-name} preferences patterns")`
69
- 2. Read today's and yesterday's memory files for recent journal entries
69
+ 2. Read today's and yesterday's memory files for recent log entries
70
70
  3. Read `MEMORY.md` for durable preferences this member has recorded
71
71
 
72
- If no journal entries exist (first run), proceed with defaults from `context/preferences.md`.
72
+ If no log entries exist (first run), proceed with defaults from `context/preferences.md`.
73
73
 
74
74
  ### 6. Become the member
75
75
 
76
76
  Adopt the persona, workflow, and rules from the MEMBER.md body. You are now this member. Follow their workflow step by step. Respect their permissions -- if `can-send: false`, draft but don't send.
77
77
 
78
- ### 7. Write the journal
78
+ ### 7. Write the log
79
79
 
80
- After completing the task, write a journal entry to `memory/YYYY-MM-DD.md`:
80
+ After completing the task, write a log entry to `logs/YYYY-MM-DD.md`:
81
81
 
82
82
  ```markdown
83
83
  ## {member-name} - {date}
@@ -100,7 +100,7 @@ The member's `permissions` field declares intent. Enforce it:
100
100
 
101
101
  ## Multiple Members
102
102
 
103
- Users can install multiple members. Each has its own persona, skills, and journal entries in memory. When switching between members, load the new member's MEMBER.md fresh -- don't carry over the previous member's persona.
103
+ Users can install multiple members. Each has its own persona, skills, and log entries. When switching between members, load the new member's MEMBER.md fresh -- don't carry over the previous member's persona.
104
104
 
105
105
  To list installed members: scan `team/` for MEMBER.md files and flat .md files.
106
106
 
@@ -1,12 +1,6 @@
1
1
  ---
2
2
  name: create-member
3
3
  description: "Create and manage AI team members using the MEMBER.md format. Use when the user wants to define a new AI role, set up a team member, create an agent persona, or work with team/MEMBER.md files."
4
- version: 1.0.0
5
- tags:
6
- - team
7
- - member
8
- - agent
9
- - persona
10
4
  ---
11
5
 
12
6
  # Member Creator
@@ -25,13 +19,18 @@ Spec: https://github.com/atrislabs/member
25
19
  team/<name>/
26
20
  ├── MEMBER.md REQUIRED Persona + role + permissions
27
21
  ├── SOUL.md REQUIRED Identity, values, lessons — who the agent is
28
- ├── skills/ OPTIONAL SKILL.md files (capabilities)
22
+ ├── MISSION.md REQUIRED Durable purpose and goal-selection rule
23
+ ├── goals.json REQUIRED Machine-readable goal state
24
+ ├── goals.md REQUIRED Human-readable goal state
25
+ ├── logs/ REQUIRED Dated continuity receipts
26
+ │ └── YYYY-MM-DD.md
27
+ ├── skills/ REQUIRED SKILL.md files (may start empty)
29
28
  │ └── <skill>/
30
29
  │ └── SKILL.md
31
- ├── tools/ OPTIONAL MCP servers, API docs, CLI docs
30
+ ├── tools/ REQUIRED MCP servers, API docs, CLI docs (may start empty)
32
31
  │ ├── .mcp.json
33
32
  │ └── <tool>.md
34
- └── context/ OPTIONAL Domain knowledge (markdown)
33
+ └── context/ REQUIRED Domain knowledge (may start empty)
35
34
  └── *.md
36
35
  ```
37
36
 
@@ -52,12 +51,16 @@ Ask the user:
52
51
  team/<name>/
53
52
  ├── MEMBER.md
54
53
  ├── SOUL.md
54
+ ├── MISSION.md
55
+ ├── goals.json
56
+ ├── goals.md
57
+ ├── logs/
55
58
  ├── skills/
56
59
  ├── tools/
57
60
  └── context/
58
61
  ```
59
62
 
60
- Use kebab-case for the name. Create all directories even if empty.
63
+ Use kebab-case for the name. Create the full bundle in one operation, even when the directories and goal list start empty. Never overwrite existing identity, mission, goal, or log files while backfilling a member.
61
64
 
62
65
  ### Step 3: Write SOUL.md
63
66
 
@@ -167,15 +170,15 @@ Drop markdown files into `context/` with domain knowledge the member needs:
167
170
 
168
171
  No special format. Just markdown files the member references.
169
172
 
170
- ## Flat File Format
173
+ ## Legacy Flat Files
171
174
 
172
- For simple members that just need a persona (no skills, tools, or context), use a flat file:
175
+ Flat files are a legacy input only:
173
176
 
174
177
  ```
175
178
  team/<name>.md
176
179
  ```
177
180
 
178
- Same frontmatter, same format. Just no directory structure around it.
181
+ Do not create new flat-file members. Upgrade an existing flat file with `atris member upgrade <name>` so it receives the complete directory bundle without losing its MEMBER.md content.
179
182
 
180
183
  ## Detection
181
184
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: design
3
3
  description: Frontend aesthetics policy. Use when building UI, components, landing pages, dashboards, or any frontend work. Prevents generic ai-generated look.
4
- version: 3.1.1
4
+ version: 3.2.16
5
5
  allowed-tools: Read, Write, Edit, Bash, Glob
6
6
  tags:
7
7
  - design
@@ -45,7 +45,7 @@ Font alternatives: instead of Inter: Instrument Sans, Plus Jakarta Sans, Outfit.
45
45
 
46
46
  **Scroll:** never override native scroll. use "peeking" (show a few px of next section) instead of full-screen hero + scroll arrow.
47
47
 
48
- **Responsive:** mobile-first. touch targets 44x44px minimum. no text under 14px on mobile. no horizontal scroll. container queries over media queries for components. adapt, don't amputate.
48
+ **Responsive:** mobile-first. touch targets 44x44px minimum. no text under 14px on mobile. no horizontal scroll. container queries over media queries for components. adapt, don't amputate. compact overlays clear the full measured header stack; never anchor them from a guessed single header height.
49
49
 
50
50
  **Accessibility:** 4.5:1 contrast for text, 3:1 for UI (WCAG AA). visible focus indicators always. semantic HTML. never use color alone as an indicator. keyboard nav with logical tab order.
51
51
 
@@ -57,7 +57,9 @@ Font alternatives: instead of Inter: Instrument Sans, Plus Jakarta Sans, Outfit.
57
57
 
58
58
  **Hierarchy:** 2-3 text levels max. don't mix 5 competing styles.
59
59
 
60
- **No all-caps. ever.** never use the `uppercase` tailwind class, `text-transform: uppercase`, or shout-cased copy on eyebrow labels, section headers, buttons, badges, or anywhere else. random capitalized text mid-page reads as average ai-generated slop. if you need a quiet eyebrow label, reach for a smaller size (`text-[11px]`) or a muted color, never caps. write labels in sentence case ("Active tasks", not "ACTIVE TASKS") and let copy render as authored.
60
+ **No all-caps. ever.** never use the `uppercase` tailwind class, `text-transform: uppercase`, or shout-cased copy on labels, section headers, buttons, badges, or anywhere else. random capitalized text mid-page reads as average ai-generated slop. write labels in sentence case ("Active tasks", not "ACTIVE TASKS") and let copy render as authored.
61
+
62
+ **No eyebrow metadata.** Do not place tiny index, category, status, or implementation-type strips above real content. If the name changes the next action, make it a readable heading. If it does not, remove it. Generator metadata belongs in machine contracts and inspectors, never on the product canvas.
61
63
 
62
64
  **Copy:** no em dashes (the character, U+2014) anywhere in UI copy. no hedge words, no hype adverbs (the "-lessly" family). plain sentences a human would type.
63
65
 
@@ -106,13 +108,33 @@ Every entry: id, rule, detector, status. A detector is a regex/command a gate ca
106
108
  | D5 | no pulsing status dots outside loading skeletons | pulse class scan outside loading/skeleton files | graduated (design-gate) |
107
109
  | D6 | no arbitrary hex in color utilities, use brand vars | hex-in-color-utility scan | graduated (design-gate) |
108
110
  | D7 | no em dashes in UI copy or prose | U+2014 scan | graduated (atris slop) |
109
- | D8 | no claude-beige backgrounds, no instrument serif as default | judgment | active |
111
+ | D8 | no claude-beige backgrounds, no instrument serif as default | judgment | promoted |
110
112
  | D9 | fuzzy wish gets translated to craft vocabulary and echoed back before building | judgment | active |
111
113
  | D10 | measured tokens over vibes: new components start from a measured recipe (exact colors, spacing, radii, type from a proven source), never from scratch | judgment | active |
112
114
  | D11 | layout contracts, not dioramas: min-height over fixed height, fluid max-width over fixed px, every overflow reachable (scroll or +N more), stress-test with hostile content before shipping | judgment | active |
113
115
  | D12 | one accent moment per card: brand accent for the primary action only, gold for confidence/progress fills, green only for completed; everything else tonal | judgment | active |
114
116
  | D13 | motion is calm and eased: 120-300ms ease-out on opacity/transform only, loops match a measured source cadence, prefers-reduced-motion always freezes them | judgment | active |
115
117
  | D14 | compact selectors lead with the chosen name and a discriminating icon; remove redundant field labels and visible type explanations when icon, title, and accessible label carry them | judgment | active |
118
+ | D15 | copy density on landing pages: hero lede one sentence, one sentence per feature card, one line per FAQ answer, legal in one short footer paragraph; a section paragraph past ~40 words gets cut or moved one click deep (Keshav 2026-09-01: "SO much blabber yap text. keep it clean") | `<p>` in landing html over 60 words flags; otherwise judgment | active |
119
+ | D16 | verify mobile with real device emulation (Playwright iPhone profile, WebKit for iOS), never headless Chrome --window-size: Chrome floors the window at 500px wide and renders a fake layout (caught 2026-09-01: two "passing" screenshots hid a broken phone nav) | command scan for `--window-size=3` or `--window-size=4` in verify scripts | active |
120
+ | D15 | first viewport restraint: one dominant idea, at most one secondary live region, and everything else behind progressive disclosure; reject permanent three-column cockpit density as default SaaS structure | judgment | active |
121
+ | D16 | one alignment contract per component: wrapper, metadata, controls, and rendered content share the same width and inset source at every viewport | judgment | active |
122
+ | D17 | responsive corrections must test every disclosed state immediately below, at, and above each breakpoint; a fixed bug cannot reappear when a panel opens or the container narrows | judgment | promoted |
123
+ | D18 | no eyebrow metadata or tiny titles: important names become readable headings; indices, platform type names, and generator metadata stay off product surfaces | judgment | promoted |
124
+ | D19 | bubbly flat UI means one generous rounded parent, flat content-rail rows, and circular controls with a real action or stable identity; never round every nested child | judgment | active |
125
+ | D20 | compound controls own one visible focus shape on the outer geometry; a borderless child field may suppress its ring only when the parent provides `:focus-within` proof | judgment | active |
126
+ | D21 | the reusable web component layer must match the product runtime: React and Next.js are canonical for Atris web; custom elements are compatibility code, never the source of truth | React field and function scan | graduated (component contract) |
127
+ | D22 | every documented component prop must be proven with the standalone package stylesheet; demo-only CSS cannot be the hidden implementation of a public layout contract | standalone prop selector scan | graduated (component contract) |
128
+ | D23 | an owner dashboard should begin as a project save state: current story, one resume action, active missions, and the responsible team; spatial world maps are earned later by real geography or dependency data | judgment | active |
129
+ | D24 | `Since you left` is a learning and cleanup receipt, not a feature changelog: show what the system learned, removed, and carried forward so the human can stay present | judgment | active |
130
+ | D25 | game-like dashboards use plain outcomes, visible stakes, and one obvious next action; invented quest names and internal loop language hide the work instead of clarifying it | judgment | active |
131
+ | D26 | execution receipts read in causal order: inspect inputs, reason, change, then verify; never reverse the activity list or lead with the outcome | judgment | active |
132
+ | D27 | in a compact composer, the send action must visibly dominate adjacent attachment and voice controls through size and accent while secondary controls remain full touch targets | judgment | active |
133
+ | D28 | sibling icon controls on one composer rail share a single explicit frame and alignment anchor; glyph size alone must never determine their centers | judgment | active |
134
+ | D29 | hide voice playback until its voice clears the product quality bar; a weak fallback control is worse than no control | judgment | active |
135
+ | D30 | a floating rounded composer inherits the page canvas; never paint a full-width contrast band behind it unless that band is intentional chrome | judgment | active |
136
+ | D31 | developer-only overlays stay off the product surface by default; any temporary visible launcher must have an immediate dismiss control | judgment | active |
137
+ | D32 | before changing repeated UI copy, verify the operator's exact executable and surface; matching labels do not prove the installed app, dev app, header, and composer share one live path | judgment | active |
116
138
 
117
139
  Measured recipes live in the mimic studies: `~/arena/mimic-beautiful-ui/LESSONS.md` (18 AI-interface components with exact tokens) and its `remix.css` :root block (the portable Atris token sheet, coffee + paper themes). Start there before designing an agent surface.
118
140
 
@@ -154,3 +176,4 @@ This skill compounds or it dies. The contract, every frontend session:
154
176
  - Full policy: `atris/policies/atris-design.md`
155
177
  - Navigation: `atris/MAP.md`
156
178
  - Workflow: `atris/PERSONA.md`
179
+ | D15 | marketing front pages: headline + one 2-line paragraph + buttons per section, card copy max 2 sentences, long artifacts live one click deep (Keshav 2026-08-31 "aggressive amounts of texts still", inspiration Oscar/Headway) | judgment | active |
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: engines
3
- description: "Dispatch work to an installed terminal agent or named Atris engine profile. Supports Atris Fast, Claude, Codex, Cursor, Fable, Composer, Haiku, Devin, Grok, and Antigravity (agy). Triggers on: use codex, use cursor, use devin, use grok, use agy, use antigravity, use fable, use claude, use atris, engine, dispatch to, worker agent, second opinion build."
4
- version: 1.4.1
3
+ description: "Dispatch work to an installed terminal agent or named Atris engine profile. Supports Atris Fast, Claude, Codex, Cursor, Fable, Composer, Haiku, Devin, Grok, Antigravity (agy), and opencode. Triggers on: use codex, use cursor, use devin, use grok, use agy, use antigravity, use gemini, gemini session, use fable, use claude, use opencode, use atris, engine, dispatch to, worker agent, second opinion build."
4
+ version: 1.5.1
5
5
  tags:
6
6
  - engines
7
7
  - claude
@@ -14,13 +14,15 @@ tags:
14
14
  - grok
15
15
  - agy
16
16
  - antigravity
17
+ - gemini
18
+ - opencode
17
19
  - atris
18
20
  - orchestration
19
21
  ---
20
22
 
21
23
  # Engines — interchangeable terminal workers
22
24
 
23
- One contract, ten live profiles. The orchestrator writes a bounded task prompt, dispatches it to an engine, then **independently verifies, lands, and pushes** the result. Engines never self-certify.
25
+ One contract, eleven live profiles. The orchestrator writes a bounded task prompt, dispatches it to an engine, then **independently verifies, lands, and pushes** the result. Engines never self-certify.
24
26
 
25
27
  ## three verbs
26
28
 
@@ -28,12 +30,30 @@ One contract, ten live profiles. The orchestrator writes a bounded task prompt,
28
30
  - build: `atris engine <name> <task-id>`
29
31
  - switch: `atris engine <name>`
30
32
 
31
- ## Fable means Fable
33
+ ## FABLE: use the Atris profile
32
34
 
33
- Use `atris engine fable "<bounded question>"` for Fable's take. The canonical
34
- profile pins `claude-fable-5`, gives deep Fable asks ten minutes by default,
35
- and records the resolved model in the receipt. An explicit `--model` or
36
- `--timeout` still wins.
35
+ FABLE is a canonical Atris CLI engine profile, not a model nickname. When the
36
+ operator asks for Fable's take, opinion, critique, or second perspective, use:
37
+
38
+ ```bash
39
+ atris engine fable "<bounded question>"
40
+ ```
41
+
42
+ This routes through `lib/engine-ask.js`, which supplies the read-only preamble,
43
+ bounded tools, plan permission mode, safe mode, no session persistence, live
44
+ logs, a receipt, and engine-health classification. The CLI owns the underlying
45
+ Claude invocation through the `fable` profile in `lib/runner-command.js`.
46
+
47
+ Do not replace this with raw `claude -p` and call the result FABLE. Do not impose
48
+ one global timeout either. Use the CLI default for bounded asks. For deep
49
+ architecture work, repo-wide reviews, or evidence-heavy judgment, choose a
50
+ deliberately longer `--timeout` based on the scope, up to the CLI limit, and keep
51
+ waiting while FABLE is making progress. FABLE quality can require time; the
52
+ timeout is a safety boundary, not a speed target.
53
+
54
+ On failure, inspect the Atris receipt and report it plainly. Retry once with a
55
+ larger bound only when the evidence shows the bound was too short. Never silently
56
+ substitute raw Claude or another engine and call the result FABLE.
37
57
 
38
58
  ## Raw binary fallback and debugging
39
59
 
@@ -45,25 +65,28 @@ Raw spawns are not the default because they skip Atris receipts, watch, and coac
45
65
  | Claude | `claude -p "<prompt>"` | Uses the local Claude configuration. Add `--model opus` for maximum-depth review or `--model sonnet` for speed. |
46
66
  | Codex | `codex exec --dangerously-bypass-approvals-and-sandbox -o <result-file> "<prompt>"` (run from the target repo/worktree; read-only research: `--sandbox read-only`) | Headless, exits when done — run it as a tracked background Bash task like the other engines and completion auto-wakes the session. Final answer lands in the `-o` file. Verified live 2026-08-11. Outside a git repo add `--skip-git-repo-check` or it exits 1. ONE-SHOT SESSIONS (`claude -p` workers): run codex in the FOREGROUND and wait — a one-shot session never wakes again, so backgrounding strands the result (observed 2026-08-11). The old plugin path (`codex-companion.mjs task --background`) is deprecated for dispatch: its job store never notifies the session (a finished result sat unread overnight, 2026-08-10) |
47
67
  | Cursor | `cursor-agent --trust -p "<prompt>"` (run from the target repo) | Headless print mode; `--trust` required for non-interactive |
48
- | Fable | `claude -p "<prompt>" --model claude-fable-5` | Raw fallback only. Prefer `atris engine fable` so the model, longer timeout, live log, and receipt stay honest. |
68
+ | Fable | `atris engine fable "<question>"` | Canonical read-only FABLE ask with guards, live log, receipt, and health tracking. Scale `--timeout` to the work when needed. |
49
69
  | Composer | `atris run "<objective>" --engine composer` | Fast navigator/executor profile routed through the installed `ax` binary. |
50
70
  | Haiku | `claude -p "<prompt>" --model claude-haiku-4-5` | Fast validation and bounded read-only checks. |
51
71
  | Devin | `devin -p --permission-mode dangerous -- "<prompt>"` (run from the target repo) | Default permission mode is read-only for writes — build work NEEDS `--permission-mode dangerous`, so only run it in an isolated worktree. Also `devin cloud` for sessions that outlive this machine. Supports `--model swe-1.7` |
52
72
  | Grok | `grok --always-approve -p "<prompt>"` (run from the target repo) | Headless single-turn via `-p`; default model grok-4.6. Very fast on lookups (~5-10s, reads MAP first). Great for quick second opinions; use `--best-of-n <N>` for tricky bounded builds. Uses grok.com login |
53
- | Antigravity | `agy --mode accept-edits -p "<prompt>"` | `agy` executor profile. Use `--mode plan --sandbox` for read-only review and `--model <id>` to pin a model. |
73
+ | Antigravity | `agy --mode accept-edits --add-dir "$PWD" -p "<prompt>"` (run from the target repo) | `agy` executor profile; also answers to "gemini". **`--add-dir` is mandatory for writes** — without it agy edits its own scratch folder (`~/.gemini/antigravity-cli/scratch/`) and the project never changes, which looks like a silent failure (verified live 2026-08-28). Use `--mode plan --sandbox` for read-only review, `--model <id>` to pin a model, and `--dangerously-skip-permissions` if a build still stalls on an approval prompt. |
74
+ | opencode | `opencode run "<prompt>"` (read-only ask: `opencode run --agent plan "<prompt>"`) | Headless print mode; exits when done. Pin a model with `-m provider/model`. Build work needs `--auto` to auto-approve permissions (dangerous: run in an isolated worktree). Verified live 2026-08-21, ~7s per plan-mode lookup. |
54
75
 
55
76
  Headless dispatch permissions (verified 2026-08-11): `codex exec`, `grok`, and `cursor-agent` are allowlisted in `~/.claude/settings.json` so fresh and one-shot sessions can dispatch without a human approval click. A cold session that gets "requires approval" on an engine command means that allowlist regressed.
56
77
 
57
78
  ## Picking an engine
58
79
 
59
80
  - **Atris Fast** — cheap bounded lookups, single-file facts, small verified edits, and high-volume fan-out.
60
- - **Claude / Fable** — deep review, synthesis, validation, and complex builds. Use Fable when judgment quality matters most.
81
+ - **FABLE** — strongest judgment lane. Use the canonical Atris profile for deep review, synthesis, validation, and complex builds.
82
+ - **Claude** — direct Claude profile when the operator names Claude rather than FABLE.
61
83
  - **Codex** — deep root-cause work, long autonomous builds, second-opinion diagnosis. Slowest; runs sandboxed.
62
84
  - **Cursor** — fast bounded edits and refactors in a single repo.
63
85
  - **Composer / Haiku** — fast, bounded navigation, edits, and validation where a max-tier model would be wasteful.
64
86
  - **Devin** — multi-step feature work; use `cloud` when the run should survive laptop sleep.
65
87
  - **Grok** - fastest frontier lookups and quick second opinions (grok-4.6, ~5-10s; reads MAP first); use `--best-of-n` for tricky bounded builds. Uses grok.com login.
66
88
  - **Antigravity / agy** — flexible executor work across Gemini, Claude, and GPT-OSS models; use `agy` as the canonical short name.
89
+ - **opencode** — multi-provider executor in one CLI (Claude, GPT, Gemini, DeepSeek menus via `opencode models`); plan agent for read-only asks, `--auto` builds only inside an isolated worktree.
67
90
  - Parallel builds across repos: one engine job per repo, never two engines writing the same checkout.
68
91
 
69
92
  ## Models worth pinning (verified live 2026-08-15)
@@ -72,8 +95,7 @@ Each engine CLI can pin a specific model. Current best picks:
72
95
 
73
96
  | Engine | Flag | Best models today |
74
97
  |--------|------|-------------------|
75
- | Claude | `--model opus` | `opus` follows the local Claude alias; use an explicit model identifier for reproducibility |
76
- | Fable | `--model claude-fable-5` | Canonical Fable 5 route; `atris engine fable` pins it automatically |
98
+ | Claude / Fable | `--model opus` | `opus` currently resolves to Opus 5; use the explicit Opus 4.8 identifier only for reproducibility |
77
99
  | Devin | `--model swe-1.7` | `swe-1.7` (free right now: use it as the volume executor for parallel bounded slices), `swe-1.7-lightning` for speed |
78
100
  | Cursor | `--model cursor-grok-4.6-xhigh` | `cursor-grok-4.6-xhigh` for second-opinion builds, `cursor-grok-4.6-high-fast` for quick pinned asks (answered in ~12s live 2026-08-12), `composer-2.5` for fast edits; parameterized Claude via `'claude-opus-4-8[effort=high]'`; `--list-models` shows the full menu |
79
101
  | Composer | `--engine composer` | `composer 2.5` through the Atris profile |
@@ -81,6 +103,7 @@ Each engine CLI can pin a specific model. Current best picks:
81
103
  | Grok | (default) | `grok-4.6` default (confirmed live 2026-08-12, ~5s lookup), `grok-4.5` still available via `-m` |
82
104
  | Codex | `-m <model>` | CLI default rides `~/.codex/config.toml`; pin with `-m` only when the task needs it |
83
105
  | Antigravity / agy | `--model <id>` | `gemini-3.7-flash-high` for speed, `gemini-3.1-pro-high` for depth, `claude-sonnet-4-6`, `claude-opus-4-6-thinking`, or `gpt-oss-120b-medium` |
106
+ | opencode | `-m <provider/model>` | `opencode/big-pickle`, `opencode/gpt-5.2`, `opencode/claude-opus-4-8`; `opencode models` lists the live menu |
84
107
  | Atris Fast | (fixed) | api.atris.ai fast lane |
85
108
 
86
109
  Re-verify this table when a lab ships a new model: run each CLI's model-list command, smoke one lookup, and update the row. Free-tier windows (like swe-1.7 now) are the moment to fan out volume work.
@@ -96,6 +119,27 @@ Run `atris engine doctor`, then `atris engine --help`. The canonical profiles li
96
119
 
97
120
  ## Prompt contract (every dispatch)
98
121
 
122
+ Before build, fetch and identify the configured remote default, compare the
123
+ checkout to it, and preserve unrelated work. Record the base before editing.
124
+ Use the existing feature packet and functional owner; link source task IDs
125
+ across workspaces rather than copying a second plan. Load the relevant owner
126
+ bundle once. Live `atris task` records are truth; TODO.md is a rendered view.
127
+
128
+ If scouting, request at most 200 words naming the exact current mission,
129
+ owner, engine/model, files, checks, and risks. Reject an answer about an old
130
+ mission. Hand the accepted packet to the builder; reread only to resolve a
131
+ named gap. Use raw task metadata and events for exact paths and instructions,
132
+ never the simplified explanation. Verify requested models; never substitute
133
+ silently. Existing user authorization covers execution within that scope;
134
+ required plan review, CI, human-only acceptance, and deploy gates still apply.
135
+
136
+ Review related finished changes as one batch in a fresh context. Reuse a
137
+ review only while those bytes remain unchanged; changed bytes require
138
+ revalidation. Run required checks before the existing delivery path. Inspect
139
+ the actual final state: draft, queued, and merged are different outcomes.
140
+ Record elapsed time, engine calls, retries, and exposed token usage. Unknown
141
+ usage stays unknown; one pilot does not establish a speedup or perfect accuracy.
142
+
99
143
  1. Name the absolute repo path and tell the engine to `cd` there (Atris Fast scopes to the cwd it runs from — cd first, and name absolute paths in the prompt).
100
144
  2. Bound the slice: one task, explicit exit criteria, the verify command to run.
101
145
  3. Git rules: `git status` first; stage only own files; never revert others' changes; never destructive git; work on a branch `member/<name>-<slug>` or a worktree. (Atris Fast does not run git — for edit tasks the orchestrator commits after verifying.)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: x-search
3
3
  description: "X/Twitter search via xAI Grok API. Use when user wants to search tweets, monitor topics, find viral posts, or run social listening. Costs 5 credits per search. Triggers on x search, tweet search, twitter search, social listening, revenue intel, viral tweets."
4
- version: 2.2.0
4
+ version: 2.4.0
5
5
  tags:
6
6
  - x-search
7
7
  - social
@@ -21,15 +21,21 @@ login
21
21
  |
22
22
  x-search QUERY (5 credits)
23
23
  |
24
- write one Apply (claimable)
24
+ stdout only unless --save
25
+ |
26
+ rich ephemeral --> one apply next-step, one inferred check + score: 0, then one youtube-search next-step, no files
27
+ thin ephemeral --> check: fill this, then one youtube-search next-step, no files
28
+ empty successful pull --> one next: atris youtube search " "
29
+ --save + rich --> brief + pack + one Apply, prove baseline score 0
30
+ --save + thin --> refuse, no files, exit 2
25
31
  |
26
32
  stop
27
33
  ```
28
34
 
29
35
  1. Login: stored login, then `atris login --agent` if needed. Never paste tokens. Never `/auth/cli`.
30
- 2. Search: `atris x-search "QUERY"`. Always billed (5 credits). Empty or failed search refunds.
31
- 3. One Apply: name a product change plus a receipt that can fail. If missing, the CLI writes a fill-this stub and a next-line. Search still exits 0.
32
- 4. Stop. Empty or failed search does not owe an Apply.
36
+ 2. Search: `atris x-search "QUERY"`. Always billed (5 credits). Prints to stdout. Rich ephemeral prints one apply next-step, one inferred check plus `score: 0`, then one `next: atris youtube search "<query>"` (person mode uses `--name`), and writes nothing. Thin ephemeral prints `check: fill this` then that youtube-search next, and writes nothing. Empty successful pull (no tweets) prints one `next: atris youtube search " "`. Explicit refund or failed search writes nothing extra.
37
+ 3. `--save` only when you want a brief. Rich results (a number-with-units or a named mechanism) file the brief, mint `atris/experiments/x-search-<slug>/`, write one Apply that names that pack and the keep rule, and prove that fixture starts at score 0. Thin `--save` prints `thin: no number or named mechanism. no brief.` and writes nothing. `--save` does not print a youtube-search next-step.
38
+ 4. Stop. `--json`, explicit refund, or failed search does not print apply, check, score, or youtube-search next-step.
33
39
 
34
40
  ## Customer path (preferred)
35
41
 
@@ -38,6 +44,7 @@ Logged-in customers should use the CLI. Same auth and billing as `atris youtube
38
44
  ```bash
39
45
  atris x-search "MCP agents"
40
46
  atris x-search "MCP agents" --limit 5 --days 2
47
+ atris x-search "MCP agents" --save
41
48
  atris x-search person --name "Leah Bonvissuto" --handle leahbon
42
49
  atris x-search --help
43
50
  ```
@@ -245,6 +252,7 @@ npm install -g atris && atris login
245
252
 
246
253
  # Preferred: CLI
247
254
  atris x-search "AI agents" --limit 10 --days 7
255
+ atris x-search "AI agents" --save
248
256
  atris x-search person --name "John Doe" --handle johndoe --company Acme
249
257
 
250
258
  # Raw API (debug)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: youtube
3
3
  description: "YouTube discovery and learning. Get watch permalinks with atris youtube search QUERY (free, local ytsearch/yt-dlp). On 429 the CLI already retries; use cached rows if printed, else STOP. Never run --paid after a 429. --paid only when the user explicitly asked to buy permalinks (5 credits). After a URL is picked, atris youtube notes URL (free, ephemeral unless --save). atris youtube process only to store knowledge (5 credits). Never paste tokens. Never /auth/cli. Mint with atris login --agent from a stored login. Never summarize a video from model memory. Triggers on: youtube search, find videos, paid youtube search, any youtube.com or youtu.be link, youtube, video, watch this, notes on this."
4
- version: 2.11.0
4
+ version: 2.16.0
5
5
  tags:
6
6
  - youtube
7
7
  - research
@@ -18,29 +18,58 @@ Hard path. Follow in order. Soft memory does not override this.
18
18
  ```
19
19
  search QUERY (free)
20
20
  |
21
+ rows --> rich: one failing check (score 0); thin: check: fill this
22
+ --> next: atris youtube teach <first-url>
23
+ --> --json stays quiet
24
+ |
21
25
  429 --> CLI already retried once
22
26
  --> cached rows printed? use them
23
27
  --> rate-limit sentence printed? STOP
24
28
  do not run --paid
25
29
  |
26
30
  pick a URL --> notes URL (free, ephemeral unless --save)
27
- | --save files the brief + apply stub
31
+ | rich ephemeral prints one apply next-step and one failing check (score 0), no files
32
+ | thin ephemeral prints check: fill this instead of inventing a check
33
+ | then next: atris youtube teach <same-url>
34
+ | --json stays quiet
35
+ | --save files brief + pack-named apply when notes have a number or named mechanism; a multi-url --save batch proves the first saved pack the same way single-url --save does; thin --save refuses
28
36
  | or teach URL [--section N] (one chapter: claim numbers, named mechanisms, one check; free unless --save)
37
+ | a taught section that is not last prints next: recap TEXT or skip
38
+ | last section: rich ephemeral apply, failing check, and score 0, then next: atris youtube watch tick; save pack keep stays; no recap next
39
+ | next --section refuses until recap/skip
40
+ | owed prints unpaid check; successful unlock prints next section command
41
+ | bare teach resumes owed, or prints a start command if nothing is owed
29
42
  |
30
43
  write one Apply (claimable) before process
31
44
  |
32
45
  store knowledge? --> process URL (5 credits)
46
+ --> rich: one failing check (score 0); thin: check: fill this; --json stays quiet
47
+
48
+ watch add --> next: atris youtube watch tick
49
+ watch tick --> briefs new videos
50
+ --> if briefed: rich pack-named apply + failing measure.py (score 0), then next: experiments keep
51
+ --> thin: check: fill this, then next: atris youtube teach <first-briefed-url>
52
+ --> 0 briefed, no channels: next: atris youtube watch add <channel-url-or-@handle>
53
+ --> 0 briefed, channels exist: next: atris youtube search " "
54
+
55
+ digest --> files brief + claimable journal
56
+ --> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
57
+ --> thin: check: fill this, then next: atris youtube watch tick
33
58
 
34
59
  --paid QUERY only if the user asked to buy permalinks
60
+ |
61
+ rows --> rich: one failing check (score 0); thin: check: fill this
62
+ --> next: atris youtube teach <first-url>
63
+ --> --json stays quiet
35
64
  login: atris login --agent from a stored login
36
65
  never paste tokens, never /auth/cli
37
66
  ```
38
67
 
39
- 1. Get watch permalinks: `atris youtube search QUERY` (free).
68
+ 1. Get watch permalinks: `atris youtube search QUERY` (free). A rich hit prints one inferred check plus `score: 0`. A thin hit prints `check: fill this`. Then one next teach command.
40
69
  2. If 429: wait/retry is already in the CLI. If it prints cached rows, use those. If it prints `youtube rate-limited local search. do not use --paid as a fallback; retry later.`, STOP. Do not run `--paid`.
41
70
  3. `--paid` only when the user explicitly asked to buy permalinks. The CLI hard-refuses `--paid` when the free cache still has a fresh same-query hit.
42
- 4. `atris youtube notes URL` after a URL is picked (free). Notes is ephemeral unless `--save`.
43
- 5. Write one Apply (change + receipt) before `atris youtube process`. Process still requires a filled Apply (so you `--save`, fill Apply, then process).
71
+ 4. `atris youtube notes URL` after a URL is picked (free). Notes is ephemeral unless `--save`. Rich ephemeral prints one apply next-step and one failing check (`score: 0`), then one `next: atris youtube teach <same-url>`, and writes no files. Thin ephemeral prints `check: fill this` instead of inventing a check. A playlist or multi-url batch does the same for the first successful item only. `--json` stays quiet on the check and the teach next-step. Rich `--save` files the brief, mints `atris/experiments/notes-<id>/`, writes one Apply, and prints `score: 0` only when that Apply starts failing. A rich multi-url `--save` batch proves that failing baseline for the first saved pack only; thin `--save` (no number-with-units and no named mechanism) refuses with no brief and exit 2. Do not auto `--paid`.
72
+ 5. Write one Apply (change + receipt) before `atris youtube process`. Process still requires a filled Apply (so you `--save` a rich brief, fill Apply, then process).
44
73
  6. Never paste tokens. Never `/auth/cli`. Mint with `atris login --agent` from a stored login.
45
74
 
46
75
  If the user says "find videos", "search youtube", or "get youtube links" → search. If they say "learn from", "notes on", "alpha", or "rabbit hole" → notes. If they say "process", "store", "add to knowledge" → process. "Buy permalinks" or "paid search" is the only ask that unlocks `--paid`.
@@ -73,7 +102,7 @@ atris youtube search "MCP agents" --limit 10
73
102
  atris youtube search "MCP agents" --json
74
103
  ```
75
104
 
76
- Uses `ytsearch` on PATH when present, else bundled `scripts/det/ytsearch`, else `yt-dlp --flat-playlist --print` with `ytsearchN:`. No credits. No `/agent/process_youtube` call.
105
+ Uses `ytsearch` on PATH when present, else bundled `scripts/det/ytsearch`, else `yt-dlp --flat-playlist --print` with `ytsearchN:`. No credits. No `/agent/process_youtube` call. A rich hit prints one inferred check plus `score: 0`. A thin hit prints `check: fill this`. Then one next: `atris youtube teach <first-url>`. `--json` stays quiet.
77
106
 
78
107
  On 429 the CLI retries once, then serves `~/.atris/youtube-search-cache.json` if the same query is younger than one hour. If it prints the rate-limit sentence, stop. Do not run `--paid`.
79
108
 
@@ -86,15 +115,17 @@ atris youtube search --paid "MCP agents 2026"
86
115
  atris youtube search --paid "MCP agents" --limit 10
87
116
  ```
88
117
 
89
- Requires a stored login, then `atris login --agent`. The CLI mints a youtube-scope agent token from disk the same way as `atris youtube process` and `atris x-search`. Never `/auth/cli`. Never paste tokens. Prints `title | watch permalink` plus credits. Empty or failed searches refund.
118
+ Requires a stored login, then `atris login --agent`. The CLI mints a youtube-scope agent token from disk the same way as `atris youtube process` and `atris x-search`. Never `/auth/cli`. Never paste tokens. Prints `title | watch permalink` plus credits. A rich hit prints one inferred check plus `score: 0`. A thin hit prints `check: fill this`. Then one next: `atris youtube teach <first-url>`. `--json` stays quiet. Empty or failed searches refund.
90
119
 
91
120
  Line contract:
92
121
 
93
122
  ```text
94
123
  title | channel | duration | views | upload_date | https://youtu.be/ID
124
+ check: <inferred or fill this>
125
+ next: atris youtube teach "<first-url>"
95
126
  ```
96
127
 
97
- `upload_date` is `YYYYMMDD` (or `NA`) so callers can apply a freshness gate (for example last 6 weeks). After the user picks a URL, run notes (free) or process (5 credits).
128
+ `upload_date` is `YYYYMMDD` (or `NA`) so callers can apply a freshness gate (for example last 6 weeks). `--json` stays machine-quiet. After the user picks a URL, run notes (free) or process (5 credits).
98
129
 
99
130
  ---
100
131
 
@@ -260,7 +260,7 @@ AFTER (Universal):
260
260
 
261
261
  When you finish a brainstorm session:
262
262
  1. Hand shaped ideas to the navigator (they create the tasks)
263
- 2. Log to your journal at `atris/team/brainstormer/journal/YYYY-MM-DD.md`:
263
+ 2. Log at `atris/team/brainstormer/logs/YYYY-MM-DD.md`:
264
264
 
265
265
  ```markdown
266
266
  ## Brainstormer - Mon DD
@@ -271,7 +271,7 @@ When you finish a brainstorm session:
271
271
  **Pattern:** What you learned about the user's thinking style
272
272
  ```
273
273
 
274
- Your journal tracks how ideas evolve — the navigator reads it to understand context.
274
+ Your log tracks how ideas evolve — the navigator reads it to understand context.
275
275
 
276
276
  ---
277
277
 
@@ -156,7 +156,7 @@ If you hit two errors on the same task, **stop**. Don't debug from polluted cont
156
156
 
157
157
  ## Task Management
158
158
 
159
- **TODO.md is the shared task board. Your journal is your memory.**
159
+ **TODO.md is the shared task board. Your log is your memory.**
160
160
 
161
161
  When you pick up a task:
162
162
  1. Read `atris/TODO.md` — find the next unclaimed item in `## Backlog`
@@ -168,7 +168,7 @@ When you pick up a task:
168
168
  ```
169
169
  3. If a task is already claimed by someone else, skip it — take the next one
170
170
  4. When done, move it to `## Completed`
171
- 5. Log to your journal at `atris/team/executor/journal/YYYY-MM-DD.md`:
171
+ 5. Log at `atris/team/executor/logs/YYYY-MM-DD.md`:
172
172
 
173
173
  ```markdown
174
174
  ## Executor - Mon DD
@@ -179,7 +179,7 @@ When you pick up a task:
179
179
  **Learned:** What you now know about the codebase
180
180
  ```
181
181
 
182
- Your journal compounds context. The next executor session reads your learnings and starts smarter.
182
+ Your log compounds context. The next executor session reads your learnings and starts smarter.
183
183
 
184
184
  ---
185
185
 
@@ -51,7 +51,7 @@ You are the launcher (the closer). Take validated work → document → capture
51
51
  1. Read completed task (what was built?)
52
52
  2. Extract learnings (patterns, decisions, gotchas)
53
53
  3. Update MAP.md with new file:line references
54
- 4. Document in journal with timestamp
54
+ 4. Document in the log with timestamp
55
55
  5. Suggest publishing steps
56
56
  6. Celebrate!
57
57
 
@@ -125,12 +125,12 @@ Launch Checklist:
125
125
 
126
126
  ## Task Management
127
127
 
128
- **TODO.md is the shared task board. Your journal is your memory.**
128
+ **TODO.md is the shared task board. Your log is your memory.**
129
129
 
130
130
  When you close out work:
131
131
  1. Verify completed tasks in `atris/TODO.md` are properly marked in `## Completed`
132
132
  2. Clean up any stale items the validator missed
133
- 3. Log to your journal at `atris/team/launcher/journal/YYYY-MM-DD.md`:
133
+ 3. Log at `atris/team/launcher/logs/YYYY-MM-DD.md`:
134
134
 
135
135
  ```markdown
136
136
  ## Launcher - Mon DD
@@ -141,7 +141,7 @@ When you close out work:
141
141
  **Learned:** Patterns to reuse, gotchas to remember
142
142
  ```
143
143
 
144
- Your journal is the team's institutional memory. What you record here prevents repeating mistakes.
144
+ Your log is the team's institutional memory. What you record here prevents repeating mistakes.
145
145
 
146
146
  ---
147
147