atris 3.57.4 → 3.58.6
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 +12 -1
- package/atris/skills/clawhub/member-runtime/SKILL.md +9 -9
- package/atris/skills/create-member/SKILL.md +16 -13
- package/atris/skills/design/SKILL.md +27 -4
- package/atris/skills/engines/SKILL.md +55 -12
- package/atris/skills/x-search/SKILL.md +8 -6
- package/atris/skills/youtube/SKILL.md +66 -21
- package/atris/team/brainstormer/MEMBER.md +2 -2
- package/atris/team/executor/MEMBER.md +3 -3
- package/atris/team/launcher/MEMBER.md +4 -4
- package/atris/team/navigator/MEMBER.md +3 -3
- package/atris/team/researcher/MEMBER.md +2 -2
- package/atris/team/validator/MEMBER.md +1 -1
- package/atris.md +14 -0
- package/ax +153 -23
- package/bin/atris.js +78 -30
- package/commands/aeo.js +4 -4
- package/commands/agents.js +1 -1
- package/commands/align.js +12 -12
- package/commands/analytics.js +3 -3
- package/commands/app.js +5 -5
- package/commands/ask.js +175 -0
- package/commands/auth.js +59 -31
- package/commands/autoland.js +29 -5
- package/commands/autopilot-front.js +6 -6
- package/commands/autopilot.js +90 -90
- package/commands/avail.js +5 -5
- package/commands/bench.js +63 -1
- package/commands/browse.js +2 -2
- package/commands/business.js +12 -12
- package/commands/card.js +2 -2
- package/commands/clean.js +13 -13
- package/commands/close.js +3 -3
- package/commands/compile.js +13 -13
- package/commands/computer.js +94 -27
- package/commands/console.js +5 -5
- package/commands/decide.js +1 -1
- package/commands/deck.js +9 -9
- package/commands/drive.js +4 -4
- package/commands/engine.js +173 -19
- package/commands/errors.js +3 -3
- package/commands/experiments.js +18 -1
- package/commands/feed.js +2 -2
- package/commands/feedback.js +4 -4
- package/commands/fleet.js +12 -12
- package/commands/game.js +1 -1
- package/commands/guide.js +49 -0
- package/commands/improve.js +19 -17
- package/commands/init.js +67 -19
- package/commands/interview.js +7 -7
- package/commands/land.js +40 -15
- package/commands/learn.js +216 -50
- package/commands/lesson.js +2 -2
- package/commands/log.js +1 -1
- package/commands/loops.js +4 -4
- package/commands/member.js +75 -50
- package/commands/mission.js +90 -82
- package/commands/one-lap.js +1 -1
- package/commands/pack.js +74 -8
- package/commands/plugin.js +6 -6
- package/commands/probe.js +9 -9
- package/commands/pull.js +35 -35
- package/commands/pulse.js +1 -1
- package/commands/push.js +21 -21
- package/commands/rainmaker.js +1 -1
- package/commands/recap.js +7 -7
- package/commands/reel.js +2 -2
- package/commands/release.js +3 -3
- package/commands/report.js +1 -1
- package/commands/review.js +5 -5
- package/commands/revisions.js +1 -1
- package/commands/run.js +1 -1
- package/commands/scout.js +3 -3
- package/commands/security-review.js +7 -7
- package/commands/serve.js +9 -9
- package/commands/setup.js +1 -1
- package/commands/sign.js +4 -4
- package/commands/signup.js +4 -4
- package/commands/site.js +8 -3
- package/commands/skill.js +6 -6
- package/commands/slop.js +18 -18
- package/commands/social.js +3 -3
- package/commands/soul.js +14 -14
- package/commands/spaceship.js +1 -1
- package/commands/status.js +2 -2
- package/commands/strings.js +13 -13
- package/commands/study.js +4 -4
- package/commands/sync.js +8 -8
- package/commands/task.js +50 -25
- package/commands/teach.js +2 -2
- package/commands/team.js +1 -1
- package/commands/theme.js +2 -2
- package/commands/tree.js +34 -0
- package/commands/truth.js +7 -7
- package/commands/verify.js +12 -12
- package/commands/visualize.js +2 -2
- package/commands/workflow.js +101 -48
- package/commands/worktree.js +1 -1
- package/commands/write.js +9 -9
- package/commands/x-search.js +93 -22
- package/commands/xp.js +6 -3
- package/commands/youtube.js +1019 -123
- package/lib/accept-verify-gate.js +3 -3
- package/lib/activity-stream.js +1 -1
- package/lib/auto-accept-certified.js +28 -12
- package/lib/autoland.js +6 -6
- package/lib/bench/engines.js +59 -8
- package/lib/bench/report.js +1 -1
- package/lib/bench/runner.js +204 -5
- package/lib/bench/tree-render.js +76 -0
- package/lib/card.js +1 -1
- package/lib/chat-log-scan.js +1 -1
- package/lib/claude-boot-block.js +2 -0
- package/lib/deck-compose.js +1 -1
- package/lib/deck-history.js +2 -2
- package/lib/deck-layout.js +1 -1
- package/lib/deck-review.js +5 -5
- package/lib/deck-schema.js +1 -1
- package/lib/default-verifier.js +1 -1
- package/lib/developer-api.js +3 -0
- package/lib/engine-ask.js +45 -7
- package/lib/engine-registry.js +15 -2
- package/lib/file-ops.js +1 -1
- package/lib/fleet.js +71 -35
- package/lib/html-render.js +1 -1
- package/lib/intents.js +172 -0
- package/lib/journal.js +1 -1
- package/lib/known-commands.js +2 -2
- package/lib/land-green.js +364 -0
- package/lib/lesson-contradiction.js +2 -2
- package/lib/lesson-preflight.js +1 -1
- package/lib/manifest.js +5 -5
- package/lib/member-alive.js +9 -5
- package/lib/memory-view.js +3 -3
- package/lib/mission-protected-lane.js +1 -1
- package/lib/mission-root.js +2 -2
- package/lib/orb-context.js +10 -10
- package/lib/pack-capabilities.js +861 -3
- package/lib/permission-grants.js +2 -2
- package/lib/policy-lessons.js +6 -6
- package/lib/pulse.js +8 -8
- package/lib/receipt-evidence.js +1 -1
- package/lib/reel.js +1 -1
- package/lib/review-integrity.js +1 -1
- package/lib/runner-command.js +35 -5
- package/lib/scorecard.js +4 -4
- package/lib/security-scan.js +5 -5
- package/lib/self-drive.js +1 -1
- package/lib/site-publish.js +372 -0
- package/lib/site.js +1 -1
- package/lib/slides-deck.js +2 -2
- package/lib/state-detection.js +2 -2
- package/lib/sync-telemetry.js +2 -2
- package/lib/task-db.js +17 -10
- package/lib/task-explanation.js +1 -1
- package/lib/task-proof.js +2 -2
- package/lib/task-receipt.js +3 -3
- package/lib/theme.js +12 -12
- package/lib/todo-fallback.js +3 -3
- package/lib/todo-sections.js +1 -1
- package/lib/tree-hash.js +79 -0
- package/lib/usage.js +1 -1
- package/lib/wish-delegate.js +1 -1
- package/lib/workspace-safety.js +4 -4
- package/lib/workspace-scaffold.js +3 -3
- package/package.json +1 -1
- package/scripts/det/concierge-bakeoff.sh +26 -0
- package/scripts/det/ytnotes +82 -5
- package/scripts/det/ytquote-repair.js +0 -1
- package/scripts/det/ytrail-race.js +0 -5
- package/scripts/member-operate.mjs +52 -14
- package/scripts/outbound-artifact-gate.js +0 -3
- package/utils/auth.js +47 -9
- package/utils/config.js +0 -1
- 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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
78
|
+
### 7. Write the log
|
|
79
79
|
|
|
80
|
-
After completing the task, write a
|
|
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
|
|
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
|
-
├──
|
|
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/
|
|
30
|
+
├── tools/ REQUIRED MCP servers, API docs, CLI docs (may start empty)
|
|
32
31
|
│ ├── .mcp.json
|
|
33
32
|
│ └── <tool>.md
|
|
34
|
-
└── context/
|
|
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
|
|
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
|
|
173
|
+
## Legacy Flat Files
|
|
171
174
|
|
|
172
|
-
|
|
175
|
+
Flat files are a legacy input only:
|
|
173
176
|
|
|
174
177
|
```
|
|
175
178
|
team/<name>.md
|
|
176
179
|
```
|
|
177
180
|
|
|
178
|
-
|
|
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.
|
|
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
|
|
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 |
|
|
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,
|
|
4
|
-
version: 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
|
|
@@ -15,13 +15,14 @@ tags:
|
|
|
15
15
|
- agy
|
|
16
16
|
- antigravity
|
|
17
17
|
- gemini
|
|
18
|
+
- opencode
|
|
18
19
|
- atris
|
|
19
20
|
- orchestration
|
|
20
21
|
---
|
|
21
22
|
|
|
22
23
|
# Engines — interchangeable terminal workers
|
|
23
24
|
|
|
24
|
-
One contract,
|
|
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.
|
|
25
26
|
|
|
26
27
|
## three verbs
|
|
27
28
|
|
|
@@ -29,12 +30,30 @@ One contract, ten live profiles. The orchestrator writes a bounded task prompt,
|
|
|
29
30
|
- build: `atris engine <name> <task-id>`
|
|
30
31
|
- switch: `atris engine <name>`
|
|
31
32
|
|
|
32
|
-
##
|
|
33
|
+
## FABLE: use the Atris profile
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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.
|
|
38
57
|
|
|
39
58
|
## Raw binary fallback and debugging
|
|
40
59
|
|
|
@@ -46,25 +65,28 @@ Raw spawns are not the default because they skip Atris receipts, watch, and coac
|
|
|
46
65
|
| Claude | `claude -p "<prompt>"` | Uses the local Claude configuration. Add `--model opus` for maximum-depth review or `--model sonnet` for speed. |
|
|
47
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) |
|
|
48
67
|
| Cursor | `cursor-agent --trust -p "<prompt>"` (run from the target repo) | Headless print mode; `--trust` required for non-interactive |
|
|
49
|
-
| Fable | `
|
|
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. |
|
|
50
69
|
| Composer | `atris run "<objective>" --engine composer` | Fast navigator/executor profile routed through the installed `ax` binary. |
|
|
51
70
|
| Haiku | `claude -p "<prompt>" --model claude-haiku-4-5` | Fast validation and bounded read-only checks. |
|
|
52
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` |
|
|
53
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 |
|
|
54
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. |
|
|
55
75
|
|
|
56
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.
|
|
57
77
|
|
|
58
78
|
## Picking an engine
|
|
59
79
|
|
|
60
80
|
- **Atris Fast** — cheap bounded lookups, single-file facts, small verified edits, and high-volume fan-out.
|
|
61
|
-
- **
|
|
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.
|
|
62
83
|
- **Codex** — deep root-cause work, long autonomous builds, second-opinion diagnosis. Slowest; runs sandboxed.
|
|
63
84
|
- **Cursor** — fast bounded edits and refactors in a single repo.
|
|
64
85
|
- **Composer / Haiku** — fast, bounded navigation, edits, and validation where a max-tier model would be wasteful.
|
|
65
86
|
- **Devin** — multi-step feature work; use `cloud` when the run should survive laptop sleep.
|
|
66
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.
|
|
67
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.
|
|
68
90
|
- Parallel builds across repos: one engine job per repo, never two engines writing the same checkout.
|
|
69
91
|
|
|
70
92
|
## Models worth pinning (verified live 2026-08-15)
|
|
@@ -73,8 +95,7 @@ Each engine CLI can pin a specific model. Current best picks:
|
|
|
73
95
|
|
|
74
96
|
| Engine | Flag | Best models today |
|
|
75
97
|
|--------|------|-------------------|
|
|
76
|
-
| Claude | `--model opus` | `opus`
|
|
77
|
-
| 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 |
|
|
78
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 |
|
|
79
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 |
|
|
80
101
|
| Composer | `--engine composer` | `composer 2.5` through the Atris profile |
|
|
@@ -82,6 +103,7 @@ Each engine CLI can pin a specific model. Current best picks:
|
|
|
82
103
|
| Grok | (default) | `grok-4.6` default (confirmed live 2026-08-12, ~5s lookup), `grok-4.5` still available via `-m` |
|
|
83
104
|
| Codex | `-m <model>` | CLI default rides `~/.codex/config.toml`; pin with `-m` only when the task needs it |
|
|
84
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 |
|
|
85
107
|
| Atris Fast | (fixed) | api.atris.ai fast lane |
|
|
86
108
|
|
|
87
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.
|
|
@@ -97,6 +119,27 @@ Run `atris engine doctor`, then `atris engine --help`. The canonical profiles li
|
|
|
97
119
|
|
|
98
120
|
## Prompt contract (every dispatch)
|
|
99
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
|
+
|
|
100
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).
|
|
101
144
|
2. Bound the slice: one task, explicit exit criteria, the verify command to run.
|
|
102
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.
|
|
4
|
+
version: 2.4.1
|
|
5
5
|
tags:
|
|
6
6
|
- x-search
|
|
7
7
|
- social
|
|
@@ -23,17 +23,19 @@ login
|
|
|
23
23
|
|
|
|
24
24
|
stdout only unless --save
|
|
25
25
|
|
|
|
26
|
-
rich ephemeral --> one apply next-step, no files
|
|
27
|
-
|
|
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
|
|
28
30
|
--save + thin --> refuse, no files, exit 2
|
|
29
31
|
|
|
|
30
32
|
stop
|
|
31
33
|
```
|
|
32
34
|
|
|
33
35
|
1. Login: stored login, then `atris login --agent` if needed. Never paste tokens. Never `/auth/cli`.
|
|
34
|
-
2. Search: `atris x-search "QUERY"`. Always billed (5 credits). Prints to stdout. Rich ephemeral prints one apply next-step and writes nothing. Empty or failed search
|
|
35
|
-
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>/`,
|
|
36
|
-
4. Stop.
|
|
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. Empty, 502, 401, or 402 with unused credits print Credits when present and do not say refunded unless credits_refunded is explicit. A 401 that remints and retries prints those same credit lines from the first payload before the retry. `--json` stays quiet.
|
|
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.
|
|
37
39
|
|
|
38
40
|
## Customer path (preferred)
|
|
39
41
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: youtube
|
|
3
|
-
description: "YouTube discovery and learning. Get watch permalinks with atris youtube search QUERY (free, local ytsearch/yt-dlp). On 429 the CLI
|
|
4
|
-
version: 2.
|
|
3
|
+
description: "YouTube discovery and learning. Get watch permalinks with atris youtube search QUERY (free, local ytsearch/yt-dlp). On 429 use printed rows if any; else the CLI retries once, then 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.18.18
|
|
5
5
|
tags:
|
|
6
6
|
- youtube
|
|
7
7
|
- research
|
|
@@ -18,31 +18,71 @@ Hard path. Follow in order. Soft memory does not override this.
|
|
|
18
18
|
```
|
|
19
19
|
search QUERY (free)
|
|
20
20
|
|
|
|
21
|
-
|
|
22
|
-
-->
|
|
21
|
+
rows --> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
22
|
+
--> thin: check: fill this, then next: atris youtube teach <first-url>
|
|
23
|
+
--> --json stays quiet
|
|
24
|
+
|
|
|
25
|
+
429 --> printed rows? use them (no retry)
|
|
26
|
+
--> else CLI retries once
|
|
27
|
+
--> cached rows printed? use them (same rich mint or thin check as live rows)
|
|
23
28
|
--> rate-limit sentence printed? STOP
|
|
24
29
|
do not run --paid
|
|
25
30
|
|
|
|
26
31
|
pick a URL --> notes URL (free, ephemeral unless --save)
|
|
27
|
-
| rich ephemeral prints one apply next-step, no files
|
|
28
|
-
|
|
|
32
|
+
| rich ephemeral prints one apply next-step and one failing check (score 0), no files
|
|
33
|
+
| thin ephemeral prints check: fill this instead of inventing a check
|
|
34
|
+
| then next: atris youtube teach <same-url>
|
|
35
|
+
| --json stays quiet
|
|
36
|
+
| --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
|
|
37
|
+
| playlist expand keeps printed yt-dlp rows on 429
|
|
38
|
+
| notes keep a written yt_<id>.md (and ytnotes keeps a written manual or auto en / en-orig / en-US / en-GB VTT) when yt-dlp exits 429 or a later error, or --print is empty
|
|
39
|
+
| watch, youtu.be, shorts, embed, live, /e/, and youtube-nocookie embed urls all resolve the same video id for that keep
|
|
40
|
+
| a copied #t= timestamp still finds yt_<id>.en.vtt
|
|
41
|
+
| a watch?v=&list= copy still finds yt_<video>.en.vtt when -J dumps playlist JSON
|
|
29
42
|
| or teach URL [--section N] (one chapter: claim numbers, named mechanisms, one check; free unless --save)
|
|
43
|
+
| printed yt-dlp metadata is a hit even on 429
|
|
44
|
+
| a written VTT or clean.txt is used when the caption URL fetch fails, `-J` stdout is empty, or `-J` dumps a playlist for a watch?v=&list= URL
|
|
45
|
+
| a taught section that is not last prints next: recap TEXT or skip
|
|
46
|
+
| last section: rich ephemeral apply, failing check, and score 0, then next: atris youtube watch tick; save pack keep stays; no recap next
|
|
30
47
|
| next --section refuses until recap/skip
|
|
48
|
+
| owed prints unpaid check; successful unlock prints next section command
|
|
49
|
+
| bare teach resumes owed, or prints a start command if nothing is owed
|
|
31
50
|
|
|
|
51
|
+
persist a rich lesson? --> learn log '{"type":"pattern","key":"...","insight":"..."}'
|
|
52
|
+
--> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
53
|
+
--> thin: jsonl only
|
|
54
|
+
|
|
32
55
|
write one Apply (claimable) before process
|
|
33
56
|
|
|
|
34
57
|
store knowledge? --> process URL (5 credits)
|
|
58
|
+
--> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
59
|
+
--> thin: check: fill this; --json stays quiet
|
|
60
|
+
|
|
61
|
+
watch add --> next: atris youtube watch tick
|
|
62
|
+
watch tick --> briefs new videos
|
|
63
|
+
--> if briefed: first rich brief mints pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
64
|
+
--> all thin: check: fill this, then next: atris youtube teach <first-briefed-url>
|
|
65
|
+
--> 0 briefed, no channels: next: atris youtube watch add <channel-url-or-@handle>
|
|
66
|
+
--> 0 briefed, channels exist: next: atris youtube search " "
|
|
67
|
+
|
|
68
|
+
digest --> files brief + claimable journal
|
|
69
|
+
--> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
70
|
+
--> thin: check: fill this, then next: atris youtube watch tick
|
|
35
71
|
|
|
36
72
|
--paid QUERY only if the user asked to buy permalinks
|
|
73
|
+
|
|
|
74
|
+
rows --> rich: one pack-named apply + failing measure.py (score 0), then next: experiments keep
|
|
75
|
+
--> thin: check: fill this, then next: atris youtube teach <first-url>
|
|
76
|
+
--> --json stays quiet and writes no pack
|
|
37
77
|
login: atris login --agent from a stored login
|
|
38
78
|
never paste tokens, never /auth/cli
|
|
39
79
|
```
|
|
40
80
|
|
|
41
|
-
1. Get watch permalinks: `atris youtube search QUERY` (free).
|
|
42
|
-
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`.
|
|
81
|
+
1. Get watch permalinks: `atris youtube search QUERY` (free). A rich hit mints `atris/experiments/search-<query>/`, writes one pack-named Apply, and prints `score: 0` only when that Apply starts failing. A thin hit prints `check: fill this`, then one next teach command. `--json` stays quiet and writes no pack.
|
|
82
|
+
2. If 429: use any rows already printed. If none, wait/retry is already in the CLI. If it prints cached rows, use those. Cached rows mint or print the same rich or thin gate as a live hit. If it prints `youtube rate-limited local search. do not use --paid as a fallback; retry later.`, STOP. Do not run `--paid`.
|
|
43
83
|
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.
|
|
44
|
-
4. `atris youtube notes URL` after a URL is picked (free). Notes is ephemeral unless `--save`. Rich ephemeral prints one apply next-step and writes no files. Rich `--save` files the brief
|
|
45
|
-
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).
|
|
84
|
+
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. A playlist expand that prints video rows keeps them even when yt-dlp exits 429. A notes run that already wrote `yt_<id>.md` keeps that lesson even when the runner exits 429 or a later error, so the learner gate and rich `--save` mint still run. Watch, youtu.be, shorts, embed, live, /e/, and youtube-nocookie embed urls all resolve the same video id, so empty-JSON teach/process and notes keep still find that file. A copied watch?v=&list= URL still finds yt_<video>.en.vtt when -J dumps playlist JSON. A copied #t= timestamp still finds the same yt_<id> file. The bundled ytnotes script does the same for a written manual or auto en, en-orig, en-US, or en-GB VTT plus printed metadata. `--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`.
|
|
85
|
+
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). A rich analysis then mints `atris/experiments/process-<id>/`, writes one pack-named Apply, and prints `score: 0` only when that Apply starts failing. Thin analysis prints `check: fill this`. `--json` stays quiet. 401, 402, or 502 print Credits when present and say credits refunded only when the server marks a refund. A local-transcript 502 that then retries cloud prints those same credit lines from the first payload before the retry. A 401 that remints and retries prints those same credit lines from the first payload before the retry.
|
|
46
86
|
6. Never paste tokens. Never `/auth/cli`. Mint with `atris login --agent` from a stored login.
|
|
47
87
|
|
|
48
88
|
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`.
|
|
@@ -62,7 +102,7 @@ if ! command -v atris &> /dev/null; then
|
|
|
62
102
|
npm install -g atris
|
|
63
103
|
fi
|
|
64
104
|
|
|
65
|
-
echo "Ready. Feature map: free search, 429 cache-or-stop, notes, then process."
|
|
105
|
+
echo "Ready. Feature map: free search, 429 printed-rows or cache-or-stop, notes, then process."
|
|
66
106
|
```
|
|
67
107
|
|
|
68
108
|
---
|
|
@@ -75,9 +115,9 @@ atris youtube search "MCP agents" --limit 10
|
|
|
75
115
|
atris youtube search "MCP agents" --json
|
|
76
116
|
```
|
|
77
117
|
|
|
78
|
-
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.
|
|
118
|
+
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.
|
|
79
119
|
|
|
80
|
-
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`.
|
|
120
|
+
On 429, printed rows are a hit (no retry). If stdout is empty the CLI retries once, then serves `~/.atris/youtube-search-cache.json` if the same query is younger than one hour. A cache reprint prints the same rich or thin check as a live hit. If it prints the rate-limit sentence, stop. Do not run `--paid`.
|
|
81
121
|
|
|
82
122
|
## Paid search (5 credits, opt-in buy only)
|
|
83
123
|
|
|
@@ -88,15 +128,18 @@ atris youtube search --paid "MCP agents 2026"
|
|
|
88
128
|
atris youtube search --paid "MCP agents" --limit 10
|
|
89
129
|
```
|
|
90
130
|
|
|
91
|
-
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
|
|
131
|
+
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 mints `atris/experiments/search-<query>/`, writes one pack-named Apply, and prints `score: 0` only when that Apply starts failing. A thin hit prints `check: fill this`, then one next teach command. `--json` stays quiet and writes no pack. Empty, 502, 401, or 402 with unused credits do not claim a refund unless credits_refunded is explicit.
|
|
92
132
|
|
|
93
133
|
Line contract:
|
|
94
134
|
|
|
95
135
|
```text
|
|
96
|
-
title |
|
|
136
|
+
title | https://www.youtube.com/watch?v=ID
|
|
137
|
+
Credits: N used, M remaining
|
|
138
|
+
next: atris experiments keep search-<query>
|
|
139
|
+
score: 0
|
|
97
140
|
```
|
|
98
141
|
|
|
99
|
-
`
|
|
142
|
+
A thin paid hit prints `check: fill this` and `next: atris youtube teach "<first-url>"` instead of the keep next. `--json` stays machine-quiet. After the user picks a URL, run notes (free) or process (5 credits).
|
|
100
143
|
|
|
101
144
|
---
|
|
102
145
|
|
|
@@ -217,18 +260,18 @@ Two layers, never mixed. The reply the person reads is flowing prose: ideas, spe
|
|
|
217
260
|
|
|
218
261
|
`atris youtube search --paid` posts `{query, limit}` to `/youtube/search` with bearer auth. Agent tokens need the youtube scope. This is an opt-in buy, not a 429 fallback.
|
|
219
262
|
|
|
220
|
-
`atris youtube` process first tries local transcript extraction with `yt-dlp`. It sends timestamped `transcript_text` to `/agent/process_youtube` with `cache_transcript=false`. If local transcript processing fails with a retryable error, it falls back to cloud video processing. Use `--json` to inspect `metadata.processing_method` and `metadata.transcript_source`.
|
|
263
|
+
`atris youtube` process first tries local transcript extraction with `yt-dlp`. It sends timestamped `transcript_text` to `/agent/process_youtube` with `cache_transcript=false`. A written VTT or clean.txt in the notes work dir is a local hit even when `-J` stdout is empty or the caption URL fetch fails, so process does not jump to paid cloud video for that case. If local transcript processing fails with a retryable error, it falls back to cloud video processing. Use `--json` to inspect `metadata.processing_method` and `metadata.transcript_source`.
|
|
221
264
|
|
|
222
265
|
---
|
|
223
266
|
|
|
224
267
|
## Billing
|
|
225
268
|
|
|
226
269
|
- **Search: 0 credits** (local discovery)
|
|
227
|
-
- **Paid search: 5 credits** (`--paid`; refund
|
|
270
|
+
- **Paid search: 5 credits** (`--paid`; print credits refunded only when the server marks a refund. A 401 that remints and retries prints those same credit lines from the first payload before the retry. `--json` stays quiet.)
|
|
228
271
|
- **Notes: 0 credits** (local captions + engine)
|
|
229
272
|
- **Process: 5 credits per video** (flat rate, any length)
|
|
230
273
|
- Credits deducted before processing
|
|
231
|
-
-
|
|
274
|
+
- Process 200/401/402/502 print Credits when present and say credits refunded only when `credits_refunded` is explicit. A local-transcript 502 that then retries cloud prints the same lines from the first payload. A 401 that remints and retries prints the same lines from the first payload. Unused `credits_used: 0` on a 200 is not a refund.
|
|
232
275
|
- Insufficient credits returns 402 with your current balance
|
|
233
276
|
|
|
234
277
|
---
|
|
@@ -240,9 +283,11 @@ Two layers, never mixed. The reply the person reads is flowing prose: ideas, spe
|
|
|
240
283
|
| `401` | Token expired/invalid | `atris login --agent` from a stored login |
|
|
241
284
|
| `402` | Not enough credits | Check balance, purchase at atris.ai |
|
|
242
285
|
| `400` | Invalid YouTube URL | Check URL format |
|
|
243
|
-
| `502` | Transcript or cloud processing failed | Retry; credits
|
|
286
|
+
| `502` | Transcript or cloud processing failed | Retry; print credits refunded only when the server marks a refund |
|
|
244
287
|
| search exit 2 | ytsearch/yt-dlp missing or no results | Install yt-dlp, or put ytsearch on PATH |
|
|
245
|
-
| search 429 | YouTube rate-limited local search | CLI already retried; use cached rows if printed; if the rate-limit sentence prints, STOP; do not use --paid |
|
|
288
|
+
| search 429 | YouTube rate-limited local search | use printed rows if any; else CLI already retried; use cached rows if printed (same rich/thin check as a live hit); if the rate-limit sentence prints, STOP; do not use --paid |
|
|
289
|
+
| teach 429 | YouTube rate-limited local metadata | use printed yt-dlp JSON if it parses; if the caption URL fetch fails or `-J` stdout is empty or broken, use a written VTT or clean.txt from the notes work dir; no written caption still fails; do not use process as a fallback |
|
|
290
|
+
| notes 429 | YouTube rate-limited local captions | use a written yt_<id>.md if it exists; ytnotes keeps a written manual or auto en / en-orig / en-US / en-GB VTT plus printed metadata, or a VTT written in the same run when print is empty, including /e/ and youtube-nocookie embed urls; a copied #t= timestamp still finds that leftover file; empty 429 with no captions still fails; do not use --paid |
|
|
246
291
|
|
|
247
292
|
---
|
|
248
293
|
|
|
@@ -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
|
|
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
|
|
274
|
+
Your log tracks how ideas evolve — the navigator reads it to understand context.
|
|
275
275
|
|
|
276
276
|
---
|
|
277
277
|
|