atris 3.16.1 → 3.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +32 -7
  2. package/atris/skills/atris/SKILL.md +15 -2
  3. package/atris/skills/atris-feedback/SKILL.md +7 -0
  4. package/atris/skills/design/SKILL.md +29 -2
  5. package/atris/skills/engines/SKILL.md +44 -0
  6. package/atris/skills/flow/SKILL.md +1 -1
  7. package/atris/skills/wake/SKILL.md +37 -0
  8. package/atris/skills/youtube/SKILL.md +13 -39
  9. package/atris/team/validator/MEMBER.md +1 -0
  10. package/atris/wiki/concepts/agent-activation-contract.md +3 -3
  11. package/atris/wiki/concepts/workspace-initialization-contract.md +3 -3
  12. package/atris/wiki/index.md +1 -0
  13. package/atris.md +43 -19
  14. package/bin/atris.js +413 -31
  15. package/commands/agent-spawn.js +480 -0
  16. package/commands/analytics.js +6 -3
  17. package/commands/apps.js +11 -0
  18. package/commands/autopilot.js +42 -18
  19. package/commands/brain.js +74 -7
  20. package/commands/brainstorm.js +9 -58
  21. package/commands/clean.js +1 -4
  22. package/commands/compile.js +9 -4
  23. package/commands/console.js +8 -3
  24. package/commands/deck.js +184 -0
  25. package/commands/init.js +22 -11
  26. package/commands/lesson.js +76 -0
  27. package/commands/member.js +252 -48
  28. package/commands/mission.js +405 -13
  29. package/commands/now.js +4 -2
  30. package/commands/probe.js +105 -27
  31. package/commands/pulse.js +504 -0
  32. package/commands/radar.js +1 -0
  33. package/commands/recap.js +71 -25
  34. package/commands/run.js +615 -22
  35. package/commands/site.js +48 -0
  36. package/commands/slop.js +307 -0
  37. package/commands/spaceship.js +39 -0
  38. package/commands/sync.js +0 -2
  39. package/commands/task.js +429 -37
  40. package/commands/theme.js +217 -0
  41. package/commands/verify.js +7 -3
  42. package/lib/activity-stream.js +166 -0
  43. package/lib/auto-accept-certified.js +23 -1
  44. package/lib/context-gatherer.js +170 -0
  45. package/lib/deck-from-md.js +110 -0
  46. package/lib/escape-regexp.js +13 -0
  47. package/lib/file-ops.js +6 -3
  48. package/lib/html-render.js +257 -0
  49. package/lib/journal.js +1 -1
  50. package/lib/lesson-contradiction.js +113 -0
  51. package/lib/memory-view.js +95 -0
  52. package/lib/policy-lessons.js +3 -2
  53. package/lib/pulse.js +401 -0
  54. package/lib/runner-command.js +156 -0
  55. package/lib/site.js +114 -0
  56. package/lib/slides-deck.js +237 -0
  57. package/lib/state-detection.js +1 -4
  58. package/lib/task-db.js +101 -4
  59. package/lib/task-proof.js +1 -1
  60. package/lib/theme.js +264 -0
  61. package/lib/todo-fallback.js +2 -1
  62. package/lib/todo-sections.js +33 -0
  63. package/package.json +1 -2
  64. package/utils/api.js +14 -2
  65. package/atris/atrisDev.md +0 -717
package/README.md CHANGED
@@ -185,10 +185,21 @@ atris business record atris/reports/2026-04-12-operator-recap.md --outcome mixed
185
185
  | `atris do` | Execute work |
186
186
  | `atris review` | Validate work and capture learnings |
187
187
  | `atris run` | Auto-chain `plan -> do -> review` |
188
+ | `atris run logs` | Browse glass run logs (phase reasoning persisted to disk) |
189
+ | `atris run prune-logs` | Prune old run logs, keeping only the most recent N |
190
+ | `atris run search` | Search phase reasoning across all run logs by keyword |
191
+ | `atris run stats` | Show run log stats: phase counts, avg durations |
192
+ | `atris run export` | Export all run logs as a JSON bundle |
193
+ | `atris run diff` | Compare two run logs side by side |
188
194
  | `atris autopilot` | Guided loop with approvals |
195
+ | `atris pulse` | Install or run the durable overnight heartbeat |
189
196
  | `atris log` | Add inbox items to today's journal |
197
+ | `atris now` | Show the current operating truth |
198
+ | `atris radar` | Show live agents joined with tasks, missions, and worktrees |
199
+ | `atris ctop` | Show process-first live agent CPU and memory |
190
200
  | `atris status` | Show active work and completions |
191
201
  | `atris task` | Durable local task state and the agent work loop |
202
+ | `atris mission` | Durable goal, owner, verifier, tick receipts, and loop state |
192
203
  | `atris play` | Enter the AgentXP player loop for one proof-backed mission |
193
204
  | `atris gm` | Enter AgentXP General Manager mode for player missions and review queues |
194
205
  | `atris xp` | Show the local AgentXP card and sync eligible proof to the hosted leaderboard |
@@ -200,6 +211,7 @@ atris business record atris/reports/2026-04-12-operator-recap.md --outcome mixed
200
211
  | `atris receipt` | Save evidence from an agent run |
201
212
  | `atris experiments` | Run small experiments and compare results |
202
213
  | `atris computer card` | Show or write the local owner/computer card |
214
+ | `atris release` | Draft or publish a version bump, tag, GitHub release, and launch post |
203
215
 
204
216
  ## Built-In Systems
205
217
 
@@ -211,7 +223,9 @@ atris business record atris/reports/2026-04-12-operator-recap.md --outcome mixed
211
223
  - `atris activate` loads the current wiki status so the next session starts with project memory, not just tasks
212
224
  - `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.
213
225
  - `atris codex-goal` is the guarded bridge for native Codex `/goal`: `status` reads `~/.codex/state_5.sqlite`, while `reset --thread <id> --confirm-complete-goal-reset` backs up the DB, dumps the exact completed `thread_goals` row, deletes only that completed row, and writes a receipt. The next native goal must still be created by the live Codex thread; Atris Mission/member goals remain the durable loop state.
214
- - `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 "..."`. 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.
226
+ - `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.
227
+ - `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`.
228
+ - `atris pulse` is the OS-cron heartbeat for overnight self-improvement. Use `atris pulse status`, `tick`, `run`, `install --cadence "<cron>" --days 7 --verify "npm test" --model opus`, and `uninstall`.
215
229
  - `atris experiments` runs small test packs in `atris/experiments/`
216
230
  - `atris pull` and `atris push` sync cloud workspaces and journals
217
231
  - `atris live` keeps a business brain fresh by checking/fixing the workspace, pushing local state, pulling cloud state, and pushing again after local changes go quiet
@@ -279,13 +293,24 @@ atris skill link [--all]
279
293
 
280
294
  For Codex, copy any skill folder into `~/.codex/skills/`.
281
295
 
282
- ## Recent changes
296
+ ## Before a New Version
283
297
 
284
- - **Staleness gate** — tasks tagged `[unverified]` are skipped at the moment of use, not pruned eagerly. Three-state model: actionable / unverified / deleted.
285
- - **Lesson gate** — `isLessonResolved` checks whether a lesson already shipped before proposing new work from it. Prevents the loop from re-solving solved problems.
286
- - **`atris release`** — new command: tags the version, bumps package.json, creates a GitHub release, and drafts a `/launch` post in one shot.
287
- - **Shell injection fix** — `checkStaleness` switched from `execSync` string interpolation to `execFileSync` with args arrays. Markdown-derived content (task titles, inbox items) no longer reaches a shell.
288
- - **Codex hardening** — `atris activate` and `atris` entry point detect Codex environments and write `AGENTS.md` so Codex sessions start with workspace context.
298
+ Run the release-facing checks before bumping:
299
+
300
+ ```bash
301
+ node bin/atris.js --help
302
+ node bin/atris.js pulse --help
303
+ node bin/atris.js release --help
304
+ node --test
305
+ ```
306
+
307
+ Then dry-run the release:
308
+
309
+ ```bash
310
+ atris release --dry-run
311
+ ```
312
+
313
+ `atris release` drafts or publishes from local git history. `--dry-run` prints the planned bump without committing, tagging, or pushing.
289
314
 
290
315
  ## Update
291
316
 
@@ -1,6 +1,11 @@
1
1
  ---
2
2
  name: atris
3
- description: Atris workspace navigation for atris repos, TODO files, tasks, MAP.md, backlog, and where-is-X questions.
3
+ description: "Atris workspace navigation for atris repos, TODO files, tasks, MAP.md, backlog, and where-is-X questions. Use when navigating an Atris workspace, finding files via MAP.md, or checking task state."
4
+ version: 1.0.0
5
+ tags:
6
+ - atris
7
+ - navigation
8
+ - workspace
4
9
  allowed-tools: Read, Bash, Glob, Grep, Write, Edit
5
10
  ---
6
11
 
@@ -26,4 +31,12 @@ Key behaviors:
26
31
  - Read PERSONA.md (3-4 sentences, ASCII visuals)
27
32
  - Check MAP.md for file:line refs
28
33
  - Use `atris task` for claims, proof, ready, and accept
29
- - Treat TODO.md as a rendered view; regenerate it instead of hand-editing tasks
34
+ - Treat TODO.md as a rendered view; regenerate it instead of hand-editing tasks
35
+
36
+ ## Steps
37
+
38
+ 1. Run `atris atris.md` on first interaction to show workspace status
39
+ 2. Read `atris/MAP.md` before any file search to find file:line refs
40
+ 3. Run `atris task list` or `atris task next` to find current work
41
+ 4. Claim tasks with `atris task claim <id> --as <agent>`
42
+ 5. Move completed work to review with `atris task ready <id> --proof "..."`
@@ -12,6 +12,13 @@ tags:
12
12
 
13
13
  One skill for everything: submit feedback, view the queue, resolve/close/delete items.
14
14
 
15
+ ## Steps
16
+
17
+ 1. Parse the user input to determine the feedback action (list, submit, resolve, close, delete)
18
+ 2. Run the matching `atris feedback` CLI command from the reference below
19
+ 3. If `atris` CLI is unavailable, fall back to the direct API/DynamoDB path
20
+ 4. Report the result to the user
21
+
15
22
  ## Parse the input
16
23
 
17
24
  - `/feedback` (no args) → show the queue
@@ -56,13 +56,37 @@ Font alternatives: instead of Inter → Instrument Sans, Plus Jakarta Sans, Outf
56
56
 
57
57
  **Labels:** never use all-caps UI labels, tracked-uppercase labels, faux small-caps, or eyebrow-style microcopy for ordinary product surfaces. Keshav strongly dislikes this style. Prefer natural title case or sentence case for labels like "Threads", "Active tasks", and "Team"; do not write them as `THREADS`, `ACTIVE TASKS`, or letter-spaced metadata.
58
58
 
59
- **Visual anti-patterns:** no glassmorphism, no gradient text, no sparklines as decoration, no rounded-rect-with-colored-border, no large icons with rounded corners above headings, no hero metric layout (big number + small label), no modals unless truly necessary.
59
+ **Visual anti-patterns:** no glassmorphism, no gradient text, no sparklines as decoration, no rounded-rect-with-colored-border, no large icons with rounded corners above headings, no hero metric layout (big number + small label), no modals unless truly necessary. no "claude beige" off-white backgrounds, no instrument serif overuse (the new AI tell), no generic flat tinted backgrounds.
60
+
61
+ ## Vocabulary is the Lever
62
+
63
+ Designers beat engineers at AI prompting because they own craft language. Name the move precisely: "tighten vertical rhythm," "increase negative space," "make hierarchy bolder here, quieter there." Vague prompts = vague output. Core terms: vertical rhythm, negative space, bolder/quieter, affordances, meta-design, conviction.
64
+
65
+ ## Raising Floor vs Ceiling
66
+
67
+ Use AI to raise the floor (automate the mechanical 80% — scaffolding, grids, state matrices). Spend human attention on the ceiling (last 10-20% — taste, instinct, the unexpected choice). Cognitive delegation, not surrender. AI routes you there; you make the final call.
68
+
69
+ ## AX — Agentic Experience
70
+
71
+ Design for AI agents as users, not just humans. Agents can't see your buttons. They need: speed, clarity, structured output, verbose errors with next steps, edge case coverage, agentic affordances (`llms.txt`, clear `--help`, stable exit codes).
72
+
73
+ ## Conviction Over Local Maxima
74
+
75
+ Iterating toward "slightly better" = local maximum (safe, forgettable). Great design is a bet on a global maximum. AI makes the local-max trap worse — you converge on average faster. Subtraction over addition: the strongest move is often deleting something.
76
+
77
+ ## Anti-Attractors
78
+
79
+ Models have gravity wells (purple gradients, instrument serif, claude beige). Escape them deliberately: name what you don't want, seed with a specific reference, inject a constraint (monochrome, one font weight), rotate your defaults between projects.
80
+
81
+ ## The Scarcity Principle
82
+
83
+ Taste emerges from constraints. Pick constraints before starting: one font, two colors, three spacing values. Infinite options produce the distribution center.
60
84
 
61
85
  ## The AI Slop Test
62
86
 
63
87
  > "if you showed this to someone and said 'AI made this,' would they believe you immediately? if yes, that's the problem."
64
88
 
65
- Fingerprints: inter/roboto, purple-to-blue gradients, cyan-on-dark, glassmorphism, gradient text, hero metrics, identical card grids, bounce easing, dark mode with neon, sparklines as decoration, rounded rectangles with drop shadows.
89
+ Fingerprints: inter/roboto, purple-to-blue gradients, cyan-on-dark, glassmorphism, gradient text, hero metrics, identical card grids, bounce easing, dark mode with neon, sparklines as decoration, rounded rectangles with drop shadows, "claude beige" off-white backgrounds, instrument serif overuse, generic flat tinted backgrounds.
66
90
 
67
91
  ## Before Shipping Checklist
68
92
 
@@ -79,6 +103,9 @@ Run through `atris/policies/atris-design.md` "before shipping" section:
79
103
  - WCAG AA contrast (4.5:1 text, 3:1 UI)?
80
104
  - works on mobile (44px touch targets, no horizontal scroll, readable text)?
81
105
  - respects `prefers-reduced-motion`?
106
+ - did you name the moves in craft vocabulary (vertical rhythm, negative space, bolder/quieter)?
107
+ - did you use anti-attractors (named what to avoid, seeded a reference, set a constraint)?
108
+ - if agent-facing: does it have agentic affordances (clear errors, structured output, stable exit codes)?
82
109
  - would a designer clock this as ai-generated?
83
110
 
84
111
  ## Atris Commands
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: engines
3
+ description: "Dispatch coding work to an installed terminal agent — Codex, Cursor, or Devin — as an interchangeable worker engine. Claude orchestrates: writes the bounded prompt, the engine builds, Claude verifies and lands. Triggers on: use codex, use cursor, use devin, engine, dispatch to, worker agent, second opinion build."
4
+ version: 1.0.0
5
+ tags:
6
+ - engines
7
+ - codex
8
+ - cursor
9
+ - devin
10
+ - orchestration
11
+ ---
12
+
13
+ # Engines — interchangeable terminal workers
14
+
15
+ One contract, three engines. The orchestrator (you, Claude) writes a bounded task prompt, dispatches it to an engine, then **independently verifies, lands, and pushes** the result. Engines never self-certify.
16
+
17
+ ## Invocation
18
+
19
+ | Engine | Command | Notes |
20
+ |--------|---------|-------|
21
+ | Codex | `node "${CLAUDE_PLUGIN_ROOT}/scripts/codex-companion.mjs" task --background [--write] "<prompt>"` (via codex plugin / codex:codex-rescue agent) | Poll with `status`, fetch with `result <job-id>` |
22
+ | Cursor | `cursor-agent --trust -p "<prompt>"` (run from the target repo) | Headless print mode; `--trust` required for non-interactive |
23
+ | 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 |
24
+
25
+ ## Picking an engine
26
+
27
+ - **Codex** — deep root-cause work, long autonomous builds, second-opinion diagnosis. Slowest; runs sandboxed.
28
+ - **Cursor** — fast bounded edits and refactors in a single repo.
29
+ - **Devin** — multi-step feature work; use `cloud` when the run should survive laptop sleep.
30
+ - Parallel builds across repos: one engine job per repo, never two engines writing the same checkout.
31
+
32
+ ## Prompt contract (every dispatch)
33
+
34
+ 1. Name the absolute repo path and tell the engine to `cd` there.
35
+ 2. Bound the slice: one task, explicit exit criteria, the verify command to run.
36
+ 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.
37
+ 4. Require a final report: files changed, verify command + result, branch name.
38
+
39
+ ## Landing (orchestrator duties — never skip)
40
+
41
+ - **Codex sandbox cannot reach github.com and may get read-only repo access.** Expect temp clones / `git format-patch` fallbacks under `/private/tmp`. Apply patches in a fresh worktree, re-run the verify command yourself, then push.
42
+ - Cursor and Devin run unsandboxed — still re-run the verify command yourself before pushing.
43
+ - Engine task DBs and receipts written inside a sandbox are snapshots; reconcile against the live `atris task` plane after landing.
44
+ - A stalled job (no log output for 30+ min) gets cancelled and taken over; don't wait on it.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: flow
3
- description: "All-day operating partner. Reads your MEMBER.md, goals, logs, and company state. Tracks work in real time. Updates your identity and goals as you evolve."
3
+ description: "All-day operating partner. Reads your MEMBER.md, goals, logs, and company state. Tracks work in real time. Updates your identity and goals as you evolve. Use when starting a work session, checking member status, or reviewing goals."
4
4
  version: 1.0.0
5
5
  tags:
6
6
  - member
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: wake
3
+ description: "Wake a team member by name — use gm [member] or wake up [member] — and run ONE closed-loop tick: boot, inbox, claim, one bounded slice, verify, commit+push, proof, receipt. Optionally dispatch the build to an engine (codex/cursor/devin). Triggers on: gm, good morning, wake up [member], wake the team, run a tick as [member]."
4
+ version: 1.0.0
5
+ tags:
6
+ - wake
7
+ - team
8
+ - members
9
+ - closed-loop
10
+ - autonomous-org
11
+ ---
12
+
13
+ # Wake — one tick of a team member
14
+
15
+ "gm [member]" means: that member does one real unit of work, end to end, with proof. No status theater. If there is nothing real to do, say so and stop.
16
+
17
+ ## Resolving the member
18
+
19
+ Look for `atris/team/{member}/` (or `team/{member}/`) in the current repo. If the member has a `WAKE.md`, follow it exactly — it overrides this skill. If not, run the default tick below and offer to write a `WAKE.md` from it.
20
+
21
+ Wake-enabled lanes as of 2026-06-12: `neo` (atrisos-backend), `frontend-core-systems` (atrisos-web), `ios-engineer` (terrace), `mission-lead` (project-obelisk).
22
+
23
+ ## The tick
24
+
25
+ 1. **Boot** — read `MEMBER.md`, `goals.md`, latest log in `logs/`, and `atris/MAP.md`.
26
+ 2. **Inbox** — today's log (`atris/logs/{year}/{date}.md`) section `## Feedback inbox`: promote bullets to the plane (`atris task add --tag {product}`), delete promoted bullets.
27
+ 3. **Claim** — `atris task queue`; claim the top unclaimed task `--as {member}`. Claimed by someone else → skip, no quick fixes. Nothing unclaimed → find ONE small genuine defect/improvement, add it to the plane, claim that.
28
+ 4. **Work** — ONE bounded slice. `git status` first; stage only own files; never destructive git; branch or worktree on shared checkouts. Build-heavy slice? Dispatch to an engine via the `engines` skill — the member still owns verification and the receipt.
29
+ 5. **Verify** — run the relevant build/tests. Evidence carries a timestamp.
30
+ 6. **Ship** — commit and PUSH to GitHub (at minimum once per completed slice). Then `atris task ready {id} --proof "{evidence}"`.
31
+ 7. **Receipt** — one line in today's log. Blocked on a human → `waiting-on-human` task ("WAITING ON {who}: {exact action}"). Nothing to do → say so and end quietly.
32
+
33
+ ## Hard rules
34
+
35
+ - Only members claim; visiting agents may add/say/delegate, never claim.
36
+ - Human acceptance (`atris task accept*`) is human-only — the CLI enforces it; never spoof agent detection to get past it.
37
+ - One tick per wake. The loop's value is the receipt trail, not the volume.
@@ -43,15 +43,6 @@ else
43
43
  exit 1
44
44
  fi
45
45
 
46
- # 4. Auth check
47
- STATUS=$(curl -s "https://api.atris.ai/api/me" \
48
- -H "Authorization: Bearer $TOKEN")
49
-
50
- if echo "$STATUS" | grep -q "Token expired\|Not authenticated\|Unauthorized"; then
51
- echo "Token expired. Run: atris login --force"
52
- exit 1
53
- fi
54
-
55
46
  echo "Ready. YouTube skill active (5 credits per video)."
56
47
  export ATRIS_TOKEN="$TOKEN"
57
48
  ```
@@ -70,13 +61,8 @@ TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
70
61
 
71
62
  ### Process a Video
72
63
  ```bash
73
- curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
74
- -H "Authorization: Bearer $TOKEN" \
75
- -H "Content-Type: application/json" \
76
- -d '{
77
- "youtube_url": "https://www.youtube.com/watch?v=VIDEO_ID",
78
- "query": "What are the key takeaways?"
79
- }'
64
+ atris youtube process "https://www.youtube.com/watch?v=VIDEO_ID" \
65
+ --query "What are the key takeaways?"
80
66
  ```
81
67
 
82
68
  **Parameters:**
@@ -107,15 +93,10 @@ curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
107
93
 
108
94
  ### Process + Store as Knowledge
109
95
  ```bash
110
- curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
111
- -H "Authorization: Bearer $TOKEN" \
112
- -H "Content-Type: application/json" \
113
- -d '{
114
- "youtube_url": "https://www.youtube.com/watch?v=...",
115
- "query": "Extract the main arguments and evidence",
116
- "agent_id": "YOUR_AGENT_ID",
117
- "store_as_knowledge": true
118
- }'
96
+ atris youtube process "https://www.youtube.com/watch?v=..." \
97
+ --query "Extract the main arguments and evidence" \
98
+ --agent "YOUR_AGENT_ID" \
99
+ --store
119
100
  ```
120
101
 
121
102
  ---
@@ -124,12 +105,12 @@ curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
124
105
 
125
106
  ### "Learn from this YouTube video"
126
107
  1. Run bootstrap
127
- 2. Process: `POST /api/agent/process_youtube` with `{youtube_url, query: "What are the key lessons and insights?"}`
108
+ 2. Process: `atris youtube process <url> --query "What are the key lessons and insights?"`
128
109
  3. Display the analysis to the user
129
110
 
130
111
  ### "What does this video say about X?"
131
112
  1. Run bootstrap
132
- 2. Process with focused query: `{youtube_url, query: "What does this say about X?"}`
113
+ 2. Process with focused query: `atris youtube process <url> --query "What does this say about X?"`
133
114
  3. Show the focused analysis
134
115
 
135
116
  ### "Process multiple videos on a topic"
@@ -143,10 +124,7 @@ VIDEOS=(
143
124
 
144
125
  for url in "${VIDEOS[@]}"; do
145
126
  echo "Processing: $url"
146
- curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
147
- -H "Authorization: Bearer $TOKEN" \
148
- -H "Content-Type: application/json" \
149
- -d "{\"youtube_url\": \"$url\", \"query\": \"Key insights and takeaways\"}"
127
+ atris youtube process "$url" --query "Key insights and takeaways"
150
128
  echo ""
151
129
  done
152
130
  ```
@@ -154,8 +132,8 @@ done
154
132
 
155
133
  ### "Save video insights to my agent's memory"
156
134
  1. Run bootstrap
157
- 2. Get your agent ID: `curl -s "https://api.atris.ai/api/agent/my-agents" -H "Authorization: Bearer $TOKEN"`
158
- 3. Process with storage: `{youtube_url, agent_id: "...", store_as_knowledge: true}`
135
+ 2. Get your agent ID: `atris agent`
136
+ 3. Process with storage: `atris youtube process <url> --agent "..." --store`
159
137
  4. Agent can now reference these insights in future conversations
160
138
 
161
139
  ---
@@ -196,12 +174,8 @@ npm install -g atris && atris login
196
174
  TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
197
175
 
198
176
  # Process a video
199
- curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
200
- -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
201
- -d '{"youtube_url": "https://youtube.com/watch?v=...", "query": "Summarize this"}'
177
+ atris youtube process "https://youtube.com/watch?v=..." --query "Summarize this"
202
178
 
203
179
  # Process + store to agent knowledge
204
- curl -s -X POST "https://api.atris.ai/api/agent/process_youtube" \
205
- -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
206
- -d '{"youtube_url": "https://youtube.com/watch?v=...", "agent_id": "YOUR_ID", "store_as_knowledge": true}'
180
+ atris youtube process "https://youtube.com/watch?v=..." --agent "YOUR_ID" --store
207
181
  ```
@@ -201,6 +201,7 @@ Status is the scoreboard. One line per version. Anyone can look at validate.md a
201
201
 
202
202
  ## Rules
203
203
 
204
+ 0. **Judge never patches** — You detect, verify, certify, revise, and open tasks. You do not edit source files. If a tick finds a fix worth making, open a task for an executor (or quarantine the diff to its own task reviewed by a non-validator actor) — certifying your own patch is the one failure this system cannot absorb.
204
205
  1. **Always run tests** — Never approve without green tests
205
206
  2. **Update MAP.md** — If files moved or architecture changed
206
207
  3. **Update atris/features/README.md** — Add new feature entry with summary, files, keywords
@@ -5,15 +5,15 @@ title: Agent Activation Contract
5
5
  sources:
6
6
  - atris/CLAUDE.md
7
7
  - commands/activate.js
8
- last_compiled: 2026-06-09
9
- last_verified: 2026-06-09
8
+ last_compiled: 2026-06-23
9
+ last_verified: 2026-06-23
10
10
  confidence: 0.9
11
11
  dependencies:
12
12
  - atris/wiki/concepts/plan-do-review-loop.md
13
13
  - atris/wiki/concepts/wiki-as-memory-substrate.md
14
14
  actionability: "Use this before changing agent boot instructions, `atris activate`, MAP-first behavior, first-message requirements, or durable-memory routing."
15
15
  created: 2026-05-10
16
- updated: 2026-06-09
16
+ updated: 2026-06-23
17
17
  tags:
18
18
  - agent-activation
19
19
  - protocol
@@ -4,8 +4,8 @@ slug: workspace-initialization-contract
4
4
  title: Workspace Initialization Contract
5
5
  sources:
6
6
  - commands/init.js
7
- last_compiled: 2026-06-09
8
- last_verified: 2026-06-09
7
+ last_compiled: 2026-06-23
8
+ last_verified: 2026-06-23
9
9
  confidence: 0.86
10
10
  dependencies:
11
11
  - atris/wiki/systems/atris-cli.md
@@ -13,7 +13,7 @@ dependencies:
13
13
  - atris/wiki/concepts/wiki-as-memory-substrate.md
14
14
  actionability: "Use this before changing `atris init`, workspace scaffolds, generated agent instructions, project detection, or boot hook behavior."
15
15
  created: 2026-05-10
16
- updated: 2026-06-09
16
+ updated: 2026-06-23
17
17
  tags:
18
18
  - initialization
19
19
  - workspace
@@ -20,6 +20,7 @@
20
20
  - [[atris/wiki/concepts/owner-computer-model.md]] — Owner = User | Business; constrained entity modes, typed computers, and groups as the social/access layer
21
21
  - [[atris/wiki/concepts/agent-activation-contract.md]] — editor-facing boot contract: first message, MAP-first, setup, and durable-memory routing
22
22
  - [[atris/wiki/concepts/workspace-initialization-contract.md]] — `atris init` bootstrap contract: guards, scaffolds, team context, generated agent files, and hooks
23
+ - [[atris/wiki/concepts/glass-interface-principle.md]] — AI tool design doctrine: make reasoning visible and inspectable, not black-boxed
23
24
 
24
25
  ## Briefs
25
26
 
package/atris.md CHANGED
@@ -10,9 +10,9 @@ leave a trail another agent or human can trust.
10
10
  On session start, before responding:
11
11
 
12
12
  1. Read:
13
- - `atris/logs/YYYY/YYYY-MM-DD.md` today's journal
14
- - `atris/MAP.md` navigation
15
- - `atris/wiki/STATUS.md` if present current memory snapshot
13
+ - `atris/logs/YYYY/YYYY-MM-DD.md`: today's journal
14
+ - `atris/MAP.md`: navigation
15
+ - `atris/wiki/STATUS.md` if present: current memory snapshot
16
16
 
17
17
  2. Show this box, then ask what to work on if no task was already given.
18
18
 
@@ -50,13 +50,36 @@ Then:
50
50
  - do not call something complete without verification
51
51
  - do not take irreversible actions without approval from the human
52
52
  - do not hide state outside markdown, logs, diffs, or the journal
53
- - do not edit the rules that judge you the reward config, the authority policy, or this file
53
+ - do not edit the rules that judge you: the reward config, the authority policy, or this file
54
54
 
55
55
  If you cannot honor these rules, stop, write why in the journal, and ask the human before continuing.
56
56
 
57
57
  Labels used below:
58
- - `guarded` checked by code or a pre-commit hook; bypassing is a bug
59
- - `expected` convention; honor it or stop
58
+ - `guarded`: checked by code or a pre-commit hook; bypassing is a bug
59
+ - `expected`: convention; honor it or stop
60
+
61
+ ## taste
62
+
63
+ What you ship should not read as generated. The test: if someone said "an AI made this," would they believe it instantly? If yes, that is the bug. The model has no words for restraint and it falls into gravity wells. Beat both.
64
+
65
+ - **Gate it.** `atris slop detect <path>` is deterministic: no model, exit 1 on a tell, built for CI and the review stage. A finding is a fact (file:line + rule), not an opinion. `--diff`/`--staged` scopes it to changed lines for a commit gate; `--fix` repairs the safe tells. `guarded` once wired into review.
66
+ - **Name the move.** Vague prompts make vague output. Direct with craft words: vertical rhythm, negative space, hierarchy, contrast, bolder here / quieter there, restraint. Precise language is the lever. Own it.
67
+ - **Refuse the wells** (named so you can): purple/indigo gradients, gradient-filled text, glassmorphism, Inter/Roboto defaults, claude-beige, neon-on-dark, hero-metric rows, identical card grids, eyebrow/tracked-caps labels, pulsing live-dots, em dashes.
68
+ - **Commit to constraints.** One distinctive font, one accent hue, a small spacing scale. Taste is subtraction, not addition.
69
+ - **Generate it right.** `atris deck` (slides), `atris deck from <doc.md> --html` (a web page from a plain doc, in the web app's design tokens), `atris site <dir>` (a whole markdown folder into a navigable site), and `atris recap --html` (a memory-updates page) all apply the system by default: own backgrounds and fonts, never the tool's stock template. Output as an AppBlock with `--block` to drop into a web app.
70
+ - **Compound it.** A new tell becomes a project rule in `.atris/slop.rules.json` (`atris slop rules --add`), and a project's brand lives in `.atris/theme.json` (`atris theme create` builds your own by feel, or `atris theme init` scaffolds one) so every deck, page, and site is on-brand by default. The gate and the look grow per project instead of leaning on memory. Taste lives in code, not vibes.
71
+
72
+ ## voice
73
+
74
+ The same discipline for words. Output stays sharp no matter how bloated the context. A full context is not license to ramble.
75
+
76
+ - **Lead with the move.** Answer first, support after. No preamble, no agreement reflex ("great question", "you're absolutely right").
77
+ - **Specific over buzzy.** Name the exact thing. If you can't, you don't understand it yet; go look, don't hedge.
78
+ - **Cut filler.** Drop "it's worth noting", "in order to", "leverage", "seamless", "robust", "delve", stacked hedges, and em dashes. `atris slop` flags the prose tells (em-dash, hype-copy) too.
79
+ - **Bound verbosity by information, not context.** Say the load-bearing thing and stop. Length tracks what the reader needs to act, nothing more.
80
+ - **Match the register.** The operator wants the next move; a spec wants the contract; a journal wants one line. Jargon is a lever only when shared: use the reader's precise terms, define a new one once.
81
+
82
+ `expected`: this is how an Atris agent writes and builds. Shipping slop or rambling is a failure smell, same as drift or a stale task.
60
83
 
61
84
  ## task source of truth
62
85
 
@@ -121,10 +144,10 @@ The human is the constructor. You multiply. Handoff fidelity lives in the files,
121
144
 
122
145
  Move one task at a time through plan → do → review.
123
146
 
124
- - **plan** read relevant files, produce an ASCII visualization, wait for approval. No code.
125
- - **plan-review** the validator reads the plan fresh and signs off with `SIGNOFF:` or halts with `REJECT:` + `FIX:` + an optional `PROPOSED:` block (concrete draft of Files / Exit / Verify / Rollback to replace). Plan does not move to do without signoff. The validator is a drafting partner, not just a critic on REJECT it proposes the sharper rubric rather than leaving the human to guess. Codex is optional escalation when `ATRIS_USE_CODEX=1` or the task carries `[codex]`.
126
- - **do** claim the task with `atris task claim <id> --as <agent>`, execute step by step, add notes as reality changes, update `MAP.md` and the journal when needed.
127
- - **review** run the task's verification, read the diff, run the relevant tests, finish with `atris task finish <id> --proof "..."`, and add the lesson/next task with `atris task review`.
147
+ - **plan**: read relevant files, produce an ASCII visualization, wait for approval. No code.
148
+ - **plan-review**: the validator reads the plan fresh and signs off with `SIGNOFF:` or halts with `REJECT:` + `FIX:` + an optional `PROPOSED:` block (concrete draft of Files / Exit / Verify / Rollback to replace). Plan does not move to do without signoff. The validator is a drafting partner, not just a critic: on REJECT it proposes the sharper rubric rather than leaving the human to guess. Codex is optional escalation when `ATRIS_USE_CODEX=1` or the task carries `[codex]`.
149
+ - **do**: claim the task with `atris task claim <id> --as <agent>`, execute step by step, add notes as reality changes, update `MAP.md` and the journal when needed.
150
+ - **review**: run the task's verification, read the diff, run the relevant tests, finish with `atris task finish <id> --proof "..."`, and add the lesson/next task with `atris task review`.
128
151
 
129
152
  Every stage runs the Confidence Gate before it advances:
130
153
 
@@ -177,7 +200,7 @@ Periodically, and before closing an endgame, clean:
177
200
  - **I1:** Description
178
201
 
179
202
  ## Notes
180
- [timestamped lines one per discovery, decision, or tick]
203
+ [timestamped lines: one per discovery, decision, or tick]
181
204
  ```
182
205
 
183
206
  Context is a cache. Disk is truth. Route discoveries as they happen:
@@ -195,12 +218,13 @@ Do not batch. Nothing important should live only in memory.
195
218
 
196
219
  ## failure smells
197
220
 
198
- If you notice these, stop and flag do not continue:
199
- - **loop** the same suggestion fires tick after tick, nothing changes on disk
200
- - **drift** `MAP.md` file:line refs no longer match the code
201
- - **stale task** a backlog task references a file or symbol that no longer exists
202
- - **hidden side effect** an action changed external state (email sent, money moved, deploy) without a queued approval
203
- - **unverifiable completion** a task marked complete without a `Verify:` command that actually ran
221
+ If you notice these, stop and flag, do not continue:
222
+ - **loop**: the same suggestion fires tick after tick, nothing changes on disk
223
+ - **drift**: `MAP.md` file:line refs no longer match the code
224
+ - **stale task**: a backlog task references a file or symbol that no longer exists
225
+ - **hidden side effect**: an action changed external state (email sent, money moved, deploy) without a queued approval
226
+ - **unverifiable completion**: a task marked complete without a `Verify:` command that actually ran
227
+ - **slop**: output reads as generated: gradient text, purple gradients, em dashes, hype copy, eyebrow caps, or rambling filler. `atris slop detect` names it; fix it before shipping (see `## taste` and `## voice`)
204
228
 
205
229
  Each has real examples in `lessons.md`. Before nontrivial execution, read the relevant recent lessons.
206
230
 
@@ -217,10 +241,10 @@ Pages that summarize or reference other files declare their sources in YAML fron
217
241
 
218
242
  If any source was modified after `last_compiled`, the page is stale. Re-read the sources, update the page, bump `last_compiled`.
219
243
 
220
- Compounding: when you answer a question that required synthesis across pages, file the answer back as a new page or into an existing one. Explorations accumulate.
244
+ Compounding: when you answer a question that required synthesis across pages, file the answer back: as a new page or into an existing one. Explorations accumulate.
221
245
 
222
246
  Linting during review catches stale pages, orphans, contradictions, and concepts mentioned but missing their own page.
223
247
 
224
248
  ---
225
249
 
226
- *Canonical copy: workspace root `atris.md`. Project copies are distributed; `atris update` syncs them. Full spec: `atrisDev.md`.*
250
+ *Canonical copy: workspace root `atris.md`. Project copies are distributed; `atris update` syncs them.*