atris 3.53.0 → 3.56.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 (119) hide show
  1. package/FOR_AGENTS.md +7 -0
  2. package/README.md +1 -1
  3. package/atris/policies/ANTISLOP.md +2 -1
  4. package/atris/skills/copy-editor/SKILL.md +2 -1
  5. package/atris/skills/design/SKILL.md +1 -1
  6. package/atris/skills/x-search/SKILL.md +24 -22
  7. package/atris/skills/youtube/SKILL.md +82 -33
  8. package/atris/team/_template/SOUL.md +40 -0
  9. package/atris/team/validator/MEMBER.md +1 -2
  10. package/bin/atris +21 -0
  11. package/bin/atris.js +563 -373
  12. package/commands/api-key.js +170 -0
  13. package/commands/auth.js +453 -43
  14. package/commands/autoland.js +3 -1
  15. package/commands/autopilot-front.js +58 -11
  16. package/commands/avail.js +5 -4
  17. package/commands/balance.js +55 -0
  18. package/commands/bench.js +29 -1
  19. package/commands/brain.js +63 -12
  20. package/commands/brainstorm.js +18 -0
  21. package/commands/business.js +149 -1
  22. package/commands/chat-scan.js +17 -4
  23. package/commands/close.js +5 -1
  24. package/commands/doctor.js +174 -0
  25. package/commands/dream.js +7 -0
  26. package/commands/drill.js +34 -2
  27. package/commands/engine.js +47 -35
  28. package/commands/errors.js +58 -8
  29. package/commands/experiments.js +14 -0
  30. package/commands/feedback.js +61 -2
  31. package/commands/fleet-report.js +27 -7
  32. package/commands/fleet.js +98 -11
  33. package/commands/founder.js +60 -21
  34. package/commands/human-missions.js +79 -4
  35. package/commands/improve.js +54 -4
  36. package/commands/init.js +68 -92
  37. package/commands/install.js +40 -0
  38. package/commands/integrations.js +565 -30
  39. package/commands/interview.js +8 -0
  40. package/commands/land.js +48 -17
  41. package/commands/learn.js +29 -4
  42. package/commands/log.js +51 -0
  43. package/commands/member.js +68 -10
  44. package/commands/mission.js +287 -50
  45. package/commands/now.js +15 -3
  46. package/commands/orb.js +97 -2
  47. package/commands/pack.js +83 -9
  48. package/commands/playbook.js +381 -0
  49. package/commands/plugin.js +16 -0
  50. package/commands/radar.js +31 -7
  51. package/commands/recap.js +128 -21
  52. package/commands/release.js +102 -2
  53. package/commands/review.js +5 -10
  54. package/commands/revisions.js +55 -0
  55. package/commands/run-front.js +12 -4
  56. package/commands/scout.js +12 -1
  57. package/commands/search.js +123 -28
  58. package/commands/sign.js +2 -2
  59. package/commands/signup.js +12 -3
  60. package/commands/site-deploy.js +17 -4
  61. package/commands/site.js +2 -2
  62. package/commands/skill-eval.js +289 -0
  63. package/commands/skill.js +56 -6
  64. package/commands/social.js +603 -0
  65. package/commands/spaceship.js +69 -6
  66. package/commands/stream.js +8 -1
  67. package/commands/study.js +32 -19
  68. package/commands/sync.js +28 -22
  69. package/commands/task.js +435 -60
  70. package/commands/teach.js +72 -63
  71. package/commands/terminal.js +25 -9
  72. package/commands/topup.js +88 -0
  73. package/commands/truth.js +52 -6
  74. package/commands/usage.js +91 -0
  75. package/commands/verify.js +3 -2
  76. package/commands/version.js +3 -1
  77. package/commands/voice.js +5 -1
  78. package/commands/who.js +69 -11
  79. package/commands/wiki.js +7 -4
  80. package/commands/wish.js +76 -5
  81. package/commands/workflow.js +327 -145
  82. package/commands/worktree.js +1 -0
  83. package/commands/write.js +5 -0
  84. package/commands/x-search.js +340 -0
  85. package/commands/xp.js +5 -1
  86. package/commands/youtube.js +551 -25
  87. package/lib/account-bound.js +47 -0
  88. package/lib/auto-accept-certified.js +8 -1
  89. package/lib/auto-lessons.js +186 -0
  90. package/lib/autoland.js +4 -2
  91. package/lib/chat-log-scan.js +7 -4
  92. package/lib/cli-json.js +77 -0
  93. package/lib/cli-scope.js +26 -0
  94. package/lib/codex-flight.js +1 -0
  95. package/lib/conductor-artifacts.js +1 -1
  96. package/lib/context-gatherer.js +11 -0
  97. package/lib/developer-api.js +116 -0
  98. package/lib/feedback-triage.js +274 -0
  99. package/lib/first-minute.js +398 -0
  100. package/lib/fleet.js +115 -34
  101. package/lib/functional-owner.js +22 -0
  102. package/lib/known-commands.js +31 -5
  103. package/lib/member-scaffold.js +197 -0
  104. package/lib/mission-root.js +4 -2
  105. package/lib/noninteractive.js +88 -0
  106. package/lib/policy-lessons.js +4 -1
  107. package/lib/revision-metric.js +279 -0
  108. package/lib/scratch-root.js +48 -0
  109. package/lib/skill-eval-gate.js +249 -0
  110. package/lib/task-db.js +4 -0
  111. package/lib/task-proof.js +69 -8
  112. package/lib/verifier-quality.js +69 -0
  113. package/lib/wish-audit.js +2 -2
  114. package/lib/wish-delegate.js +10 -1
  115. package/lib/workspace-scaffold.js +270 -0
  116. package/package.json +3 -2
  117. package/scripts/det/checklist-score.js +191 -0
  118. package/scripts/det/ytsearch +31 -0
  119. package/utils/update-check.js +15 -0
package/FOR_AGENTS.md CHANGED
@@ -48,6 +48,13 @@ atris task claim <id> --as <your-name>
48
48
  atris task ready <id> --proof "command that passed"
49
49
  ```
50
50
 
51
+ Capture a quick idea without opening the journal REPL:
52
+
53
+ ```bash
54
+ atris log "an idea for later"
55
+ # or headless: atris wish "an idea" --json --no-mission
56
+ ```
57
+
51
58
  **Never** `atris task accept` unless a human approved. That's their gate, not yours.
52
59
 
53
60
  Every task starts with three plain sentences: what changes, why it matters, and
package/README.md CHANGED
@@ -207,7 +207,7 @@ atris business record atris/reports/2026-04-12-operator-recap.md --outcome mixed
207
207
  | `atris run diff` | Compare two run logs side by side |
208
208
  | `atris autopilot` | Keep the workspace moving: mission/member legs until `atris autopilot stop` (`--legacy` for the old approval loop) |
209
209
  | `atris pulse` | Install or run the durable overnight heartbeat |
210
- | `atris log` | Add inbox items to today's journal |
210
+ | `atris log "note"` | Add an inbox item to today's journal (`log --repl` for the editor; `wish` for headless intake) |
211
211
  | `atris now` | Show the current operating truth |
212
212
  | `atris radar` | Show live agents joined with tasks, missions, and worktrees |
213
213
  | `atris ctop` | Show process-first live agent CPU and memory |
@@ -4,6 +4,8 @@
4
4
 
5
5
  This checklist prevents slop by forcing intentionality. Before finalizing ANY output, run through these gates.
6
6
 
7
+ The build enforces deterministic prose tells; see `commands/slop.js`. Review only the judgment calls below.
8
+
7
9
  ---
8
10
 
9
11
  ## The Differentiation Gate
@@ -40,7 +42,6 @@ If you can't answer in one sentence, you're hedging. Pick a direction and commit
40
42
 
41
43
  ### Punctuation
42
44
  - [ ] No sparkles or decorative emoji (✨ 🚀 💡 🎯)
43
- - [ ] No em dashes (—) unless direct quote or title separator
44
45
  - [ ] No ellipsis for drama (...)
45
46
  - [ ] No exclamation points unless error/warning
46
47
 
@@ -465,8 +465,9 @@ Provide:
465
465
 
466
466
  Run this check before approving ANY writing. LLMs will violate these rules even when explicitly trying not to.
467
467
 
468
+ The build enforces deterministic prose tells; see `commands/slop.js`. Review the judgment-only items below.
469
+
468
470
  ```
469
- [ ] No em dashes anywhere
470
471
  [ ] No rule of three (exactly 3 items in a list or 3 parallel phrases)
471
472
  [ ] No negative parallelisms ("didn't X, needed Y" or "not just X, it's Y")
472
473
  [ ] No AI vocabulary (crucial, delve, unpack, landscape, pivotal, testament, vibrant, etc.)
@@ -141,7 +141,7 @@ This skill compounds or it dies. The contract, every frontend session:
141
141
  - WCAG AA contrast (4.5:1 text, 3:1 UI)?
142
142
  - works on mobile (44px touch targets, no horizontal scroll, readable text)?
143
143
  - respects `prefers-reduced-motion`?
144
- - zero shout-cased copy? zero em dashes in copy?
144
+ - zero shout-cased copy?
145
145
  - did you name the moves in craft vocabulary (vertical rhythm, negative space, bolder/quieter)?
146
146
  - did you use anti-attractors (named what to avoid, seeded a reference, set a constraint)?
147
147
  - if agent-facing: does it have agentic affordances (clear errors, structured output, stable exit codes)?
@@ -12,6 +12,19 @@ tags:
12
12
 
13
13
  > Drop this in `~/.claude/skills/x-search/SKILL.md` and Claude Code becomes your X/Twitter intelligence tool.
14
14
 
15
+ ## Customer path (preferred)
16
+
17
+ Logged-in customers should use the CLI. Same auth and billing as `atris youtube process` (5 credits).
18
+
19
+ ```bash
20
+ atris x-search "MCP agents"
21
+ atris x-search "MCP agents" --limit 5 --days 2
22
+ atris x-search person --name "Leah Bonvissuto" --handle leahbon
23
+ atris x-search --help
24
+ ```
25
+
26
+ Add `--json` for the raw API payload. Curl below is the raw API for debugging only.
27
+
15
28
  ## Bootstrap (ALWAYS Run First)
16
29
 
17
30
  Before any X search operation, run this bootstrap to ensure everything is set up:
@@ -145,19 +158,16 @@ curl -s -X POST "https://api.atris.ai/api/x-search/research-person" \
145
158
  ## Workflows
146
159
 
147
160
  ### "Search X for tweets about a topic"
148
- 1. Run bootstrap
149
- 2. Search: `POST /x-search/search` with `{query, limit}`
150
- 3. Display results: tweet text, author, engagement, links
161
+ 1. Prefer `atris x-search "<query>"` (or bootstrap + curl if debugging the API)
162
+ 2. Display results: tweet text, citations (x.com links), credits used/remaining
151
163
 
152
164
  ### "Find tweets from the last week about X"
153
- 1. Run bootstrap
154
- 2. Search with date filter: `POST /x-search/search` with `{query, limit, days_back: 7}`
155
- 3. Display results sorted by engagement
165
+ 1. Prefer `atris x-search "<query>" --days 7 --limit 10`
166
+ 2. Display results and citations
156
167
 
157
168
  ### "Research a person before a meeting"
158
- 1. Run bootstrap
159
- 2. Research: `POST /x-search/research-person` with `{name, handle, company, context}`
160
- 3. Display profile, background, talking points
169
+ 1. Prefer `atris x-search person --name "..." --handle ... --company ... --context "..."`
170
+ 2. Display profile, background, talking points
161
171
 
162
172
  ### "Monitor keyword clusters for revenue intel"
163
173
  1. Run bootstrap
@@ -214,21 +224,13 @@ curl -s -X POST "https://api.atris.ai/api/x-search/research-person" \
214
224
  # Setup (one time)
215
225
  npm install -g atris && atris login
216
226
 
217
- # Get token
218
- TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
219
-
220
- # Search tweets
221
- curl -s -X POST "https://api.atris.ai/api/x-search/search" \
222
- -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
223
- -d '{"query": "AI agents", "limit": 10}'
227
+ # Preferred: CLI
228
+ atris x-search "AI agents" --limit 10 --days 7
229
+ atris x-search person --name "John Doe" --handle johndoe --company Acme
224
230
 
225
- # Search last 7 days only
231
+ # Raw API (debug)
232
+ TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
226
233
  curl -s -X POST "https://api.atris.ai/api/x-search/search" \
227
234
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
228
235
  -d '{"query": "AI agents", "limit": 10, "days_back": 7}'
229
-
230
- # Research a person
231
- curl -s -X POST "https://api.atris.ai/api/x-search/research-person" \
232
- -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
233
- -d '{"name": "John Doe", "handle": "johndoe", "company": "Acme"}'
234
236
  ```
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: youtube
3
- description: "A YouTube link in any message routes here. Run atris youtube notes <url> FIRST: free, about 30 seconds, quotes verified against the transcript. Never summarize a video from model memory, that is fabrication. Use atris youtube process only to store it as queryable knowledge (5 credits). Triggers on: any youtube.com or youtu.be link, youtube, video, watch this, notes on this."
4
- version: 2.4.0
3
+ description: "YouTube discovery and learning. Use atris youtube search QUERY to get free youtu.be links (local ytsearch/yt-dlp, zero credits). Use atris youtube search --paid QUERY to buy watch permalinks from Atris (5 credits, login required). A YouTube link in any message routes here: run atris youtube notes URL FIRST (free, about 30s, quotes verified). Never summarize a video from model memory. Use atris youtube process only to store it as queryable knowledge (5 credits). 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.7.0
5
5
  tags:
6
6
  - youtube
7
7
  - research
@@ -11,18 +11,16 @@ tags:
11
11
 
12
12
  # YouTube Skill
13
13
 
14
- Process any YouTube video through Atris transcript-first analysis. The CLI extracts local captions with timestamps when available, sends that transcript to Atris, and falls back to cloud video processing when captions are unavailable or unusable. 5 credits per video, refunded if processing fails.
14
+ Three rails. Pick before running anything:
15
15
 
16
- ## Route first: learning vs product
16
+ - **Search / discovery (free)** → `atris youtube search "<query>"`. Local ytsearch or yt-dlp `ytsearchN:`. Returns title, channel, duration, views, upload_date, and a `youtu.be` link. Zero credits. Use this to *get* video links; do not call process until the user picks one.
17
+ - **Paid search (5 credits)** → `atris youtube search --paid "<query>"`. Posts `/youtube/search` with the stored token or a youtube-scope agent mint. Prints watch permalinks, titles, and credits. Use this when the customer wants to buy permalinks the same way as `atris x-search`. Do not replace free search with this.
18
+ - **Notes / learning (free)** → `atris youtube notes <url>`. Local captions + a fast engine, about 30 seconds, quotes verified against the transcript. Use when the goal is to learn from a video you already have.
19
+ - **Process / product (5 credits)** → `atris youtube process <url>`. Credits-billed cloud knowledge store. Use when a customer/agent needs the video stored as Atris knowledge.
17
20
 
18
- Two rails process YouTube videos: pick before running anything:
21
+ 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.
19
22
 
20
- - **Learning / work rail** → use the `alpha-learn` skill (ytnotes). Local yt-dlp + grok, zero credits, podcastnotes-style notes, tweet-feed output, `[claimable]` entries in today's journal for other agents. Use this when the goal is to LEARN from a video or mine it for Atris work.
21
- Canonical ytnotes source is `scripts/det/ytnotes` (install: `ln -sf "$PWD/scripts/det/ytnotes" ~/.local/bin/ytnotes`).
22
- Runs are scored by `node scripts/det/ytrail-eval.js`.
23
- - **Product rail** → this skill (`atris youtube process`). Credits-billed, stores knowledge in the Atris backend, customer-facing path. Use this when a customer/agent needs the video stored as Atris knowledge or answered via the API.
24
-
25
- If the user says "learn from", "notes on", "alpha", or "rabbit hole" → alpha-learn. If they say "process", "store", "add to knowledge" → this skill.
23
+ Never summarize a video from model memory; that is fabrication.
26
24
 
27
25
  ## Bootstrap (ALWAYS Run First)
28
26
 
@@ -36,30 +34,57 @@ if ! command -v atris &> /dev/null; then
36
34
  npm install -g atris
37
35
  fi
38
36
 
39
- # 2. Check login
37
+ # 2. Optional login (required only for process / credits)
40
38
  if [ ! -f ~/.atris/credentials.json ]; then
41
- echo "Not logged in. Run: atris login"
42
- exit 1
39
+ echo "Not logged in. Search and notes still work. Process needs: atris login"
43
40
  fi
44
41
 
45
- # 3. Extract token
46
- if command -v node &> /dev/null; then
47
- TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
48
- elif command -v python3 &> /dev/null; then
49
- TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.atris/credentials.json')))['token'])")
50
- elif command -v jq &> /dev/null; then
51
- TOKEN=$(jq -r '.token' ~/.atris/credentials.json)
52
- else
53
- echo "Error: Need node, python3, or jq to read credentials"
54
- exit 1
42
+ # 3. Extract token when present
43
+ if [ -f ~/.atris/credentials.json ]; then
44
+ if command -v node &> /dev/null; then
45
+ TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
46
+ elif command -v python3 &> /dev/null; then
47
+ TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.atris/credentials.json')))['token'])")
48
+ elif command -v jq &> /dev/null; then
49
+ TOKEN=$(jq -r '.token' ~/.atris/credentials.json)
50
+ fi
51
+ export ATRIS_TOKEN="$TOKEN"
55
52
  fi
56
53
 
57
- echo "Ready. YouTube skill active (5 credits per video)."
58
- export ATRIS_TOKEN="$TOKEN"
54
+ echo "Ready. YouTube skill active (search + notes free; process 5 credits)."
59
55
  ```
60
56
 
61
57
  ---
62
58
 
59
+ ## Search videos (free)
60
+
61
+ ```bash
62
+ atris youtube search "MCP agents 2026"
63
+ atris youtube search "MCP agents" --limit 10
64
+ atris youtube search "MCP agents" --json
65
+ ```
66
+
67
+ 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.
68
+
69
+ ## Paid search (5 credits)
70
+
71
+ ```bash
72
+ atris youtube search --paid "MCP agents 2026"
73
+ atris youtube search --paid "MCP agents" --limit 10
74
+ ```
75
+
76
+ Requires login. Uses the stored token, or mints a youtube-scope agent token from disk the same way as `atris youtube process` and `atris x-search`. Never `/auth/cli`. Prints `title | watch permalink` plus credits. Empty or failed searches refund.
77
+
78
+ Line contract:
79
+
80
+ ```text
81
+ title | channel | duration | views | upload_date | https://youtu.be/ID
82
+ ```
83
+
84
+ `upload_date` is `YYYYMMDD` (or `NA`) so callers can apply a freshness gate (for example last 6 weeks). After the user picks a URL, run notes (free) or process (5 credits).
85
+
86
+ ---
87
+
63
88
  ## API Reference
64
89
 
65
90
  Base: `https://api.atris.ai/api`
@@ -118,18 +143,23 @@ atris youtube process "https://www.youtube.com/watch?v=..." \
118
143
 
119
144
  ## Workflows
120
145
 
146
+ ### "Find YouTube videos about X"
147
+ 1. Search: `atris youtube search "X" --limit 10`
148
+ 2. Show title, channel, duration, views, upload_date, and the youtu.be link
149
+ 3. Stop. Let the user pick. Do not auto-process.
150
+
121
151
  ### "Learn from this YouTube video"
122
152
  1. Run bootstrap
123
- 2. Process: `atris youtube process <url> --query "Create an outline, claims, examples, takeaways, Atris implications, and next actions."`
153
+ 2. Notes first: `atris youtube notes <url>`
124
154
  3. Display the analysis as flowing prose: ideas and who said them, never timecodes. Timestamps stay in the stored notes file for verification, not in the reply.
125
155
 
126
156
  ### "What does this video say about X?"
127
157
  1. Run bootstrap
128
- 2. Process with focused query: `atris youtube process <url> --query "What does this say about X?"`
158
+ 2. Notes or process with focused query: `atris youtube process <url> --query "What does this say about X?"`
129
159
  3. Show the focused analysis as prose; cite the speaker, not the clock
130
160
 
131
161
  ### "Process multiple videos on a topic"
132
- 1. Run bootstrap
162
+ 1. Search to discover links (free), or use URLs the user already has
133
163
  2. Process each sequentially (each = 5 credits):
134
164
  ```bash
135
165
  VIDEOS=(
@@ -171,13 +201,20 @@ Two layers, never mixed. The reply the person reads is flowing prose: ideas, spe
171
201
 
172
202
  ## How It Works
173
203
 
174
- `atris youtube` 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`.
204
+ `atris youtube search` shells to local ytsearch/yt-dlp and never hits the Atris API.
205
+
206
+ `atris youtube search --paid` posts `{query, limit}` to `/youtube/search` with bearer auth. Agent tokens need the youtube scope.
207
+
208
+ `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`.
175
209
 
176
210
  ---
177
211
 
178
212
  ## Billing
179
213
 
180
- - **5 credits per video** (flat rate, any length)
214
+ - **Search: 0 credits** (local discovery)
215
+ - **Paid search: 5 credits** (`--paid`; refund on empty or fail)
216
+ - **Notes: 0 credits** (local captions + engine)
217
+ - **Process: 5 credits per video** (flat rate, any length)
181
218
  - Credits deducted before processing
182
219
  - **Full refund** if Gemini fails or returns an error
183
220
  - Insufficient credits returns 402 with your current balance
@@ -192,6 +229,8 @@ Two layers, never mixed. The reply the person reads is flowing prose: ideas, spe
192
229
  | `402` | Not enough credits | Check balance, purchase at atris.ai |
193
230
  | `400` | Invalid YouTube URL | Check URL format |
194
231
  | `502` | Transcript or cloud processing failed | Retry; credits auto-refunded when backend fails |
232
+ | search exit 2 | ytsearch/yt-dlp missing or no results | Install yt-dlp, or put ytsearch on PATH |
233
+ | search 429 | YouTube rate-limited local search | serve last same-query free rows if younger than one hour; otherwise retry later; do not use --paid |
195
234
 
196
235
  ---
197
236
 
@@ -201,10 +240,20 @@ Two layers, never mixed. The reply the person reads is flowing prose: ideas, spe
201
240
  # Setup (once)
202
241
  npm install -g atris && atris login
203
242
 
204
- # Get token
243
+ # Free: discover videos
244
+ atris youtube search "MCP agents 2026"
245
+ atris youtube search "MCP agents" --limit 10
246
+
247
+ # Paid: watch permalinks from Atris (5 credits)
248
+ atris youtube search --paid "MCP agents 2026"
249
+
250
+ # Free: notes on a URL you already have
251
+ atris youtube notes "https://youtu.be/VIDEO_ID"
252
+
253
+ # Get token (process only)
205
254
  TOKEN=$(node -e "console.log(require('$HOME/.atris/credentials.json').token)")
206
255
 
207
- # Process a video
256
+ # Process a video (5 credits)
208
257
  atris youtube process "https://youtube.com/watch?v=..." --query "Create a outline (flowing, idea-first) and action brief"
209
258
 
210
259
  # Process + store to agent knowledge
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: template-soul
3
+ version: 1.0.0
4
+ born: YYYY-MM-DD
5
+ ---
6
+
7
+ # Soul
8
+
9
+ What this agent believes, values, and has learned — not what it does (that's MEMBER.md) or how it communicates (that's PERSONA.md). This is who it is when the rules run out.
10
+
11
+ ## Beliefs
12
+
13
+ What you hold true about your work. Not rules — convictions.
14
+
15
+ - (Replace with 3-5 beliefs that guide judgment in ambiguous situations)
16
+
17
+ ## Values
18
+
19
+ What you optimize for when nothing else tells you what to do.
20
+
21
+ - (Replace with 2-3 values, ordered by priority)
22
+
23
+ ## Lessons
24
+
25
+ Hard-won patterns from experience. Updated as the agent works.
26
+
27
+ - (Empty until the agent has lived. Synthesized from journal entries, not copied.)
28
+
29
+ ## Edges
30
+
31
+ Where this agent's judgment is strong and where it's weak. Honest self-assessment.
32
+
33
+ - **Strong:** (what this agent is unusually good at)
34
+ - **Weak:** (what this agent tends to get wrong or overlook)
35
+
36
+ ## Voice
37
+
38
+ Not communication style (that's PERSONA.md). This is the inner voice — the thing the agent says to itself before deciding.
39
+
40
+ - (One sentence that captures how this agent thinks)
@@ -125,11 +125,10 @@ Review is not complete until residual risk is named.
125
125
  │ ✓ MAP.md updated (if needed) │
126
126
  │ ✓ Wiki status checked (if present) │
127
127
  │ ✓ Error handling present │
128
- │ ✓ Anti-slop check (see below) │
129
128
  └─────────────────────────────────────┘
130
129
  ```
131
130
 
132
- **Anti-slop gate:** Run `atris/policies/ANTISLOP.md` checklist on all output. Block if violations.
131
+ **Anti-slop:** The build enforces deterministic tells; see `commands/slop.js`. Review only the remaining judgment calls in `atris/policies/ANTISLOP.md`.
133
132
 
134
133
  **Final ASCII:**
135
134
  ```
package/bin/atris ADDED
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ # Tiny POSIX shim so sandboxes that refuse a large Node bin still get a
3
+ # runnable public entry. Real CLI lives next to this file as atris.js.
4
+ # Resolve symlinks so npm/global PATH links still find atris.js.
5
+ set -eu
6
+ here=$0
7
+ while [ -h "$here" ]; do
8
+ link=$(ls -ld "$here")
9
+ link=${link#*" -> "}
10
+ case $link in
11
+ /*) here=$link ;;
12
+ *) here=$(dirname "$here")/$link ;;
13
+ esac
14
+ done
15
+ DIR=$(CDPATH= cd -- "$(dirname "$here")" && pwd)
16
+ if command -v node >/dev/null 2>&1; then
17
+ exec node "$DIR/atris.js" "$@"
18
+ fi
19
+ echo "atris: node not found on PATH. install Node 22+ then retry." >&2
20
+ echo "hint: atris doctor --json" >&2
21
+ exit 127