atris 3.27.0 → 3.29.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.
package/AGENTS.md CHANGED
@@ -110,7 +110,7 @@ member -> mission start --verify -> status --status active -> one bounded step -
110
110
  - [ ] Only use `atris task accept <id>` when the human has approved the proof
111
111
  - [ ] Keep durable learning in Atris-owned policy/skill/wiki/task state; keep `AGENTS.md` as a generated/pointer layer
112
112
  - [ ] Treat `atris/TODO.md` as a rendered view; do not manually use it as the source of truth
113
- - [ ] Use `atris-labs` for the Atris Labs business computer slug in docs and links
113
+ - [ ] Use the real business slug from local Atris state; do not hardcode private slugs in generated docs
114
114
 
115
115
  ## Anti-patterns
116
116
 
@@ -136,12 +136,10 @@ Load these first:
136
136
  - `atris/now.md`
137
137
  - `atris/brain/STATUS.md`
138
138
  - `atris/brain/self_improvement_ledger.md`
139
- - `atris/wiki/concepts/agent-activation-contract.md`
140
139
  - `atris/skills/atris/SKILL.md`
141
140
  - `atris/PERSONA.md`
142
141
  - `atris/MAP.md`
143
142
  - `atris/TODO.md`
144
- - `atris/wiki/index.md`
145
143
 
146
144
  First-message rule: lead with the move before writing to the operator.
147
145
  Purpose: optimize for decision-speed; lead with the move, then use descriptions only when they help the operator act.
package/README.md CHANGED
@@ -10,7 +10,7 @@ Owner has many Computers
10
10
  Computer = workspace + files + tools + secrets + memory + agents + validation loop
11
11
  ```
12
12
 
13
- A computer can be personal or shared by a business. It can run a job like code, research, CRM, reporting, recruiting, event ops, support, or business ops.
13
+ A computer can be personal or shared by a business. It can run a job like code, research, CRM, reporting, event ops, support, or business ops.
14
14
 
15
15
  ## For Coding Agents
16
16
 
@@ -142,9 +142,9 @@ leaderboard.
142
142
  If you want a shared owner for a company, lab, collective, community, artist, team, or project, use the business command instead of raw `atris init`.
143
143
 
144
144
  ```bash
145
- atris business init "BLOND:ISH" --owner-email joel@blondish.world
146
- cd ~/arena/atris-business/blondish
147
- atris business onboard --website https://blondish.world --contact "Joel Zimmerman" --note "artist-led brand and ticket sales"
145
+ atris business init "Example Co" --owner-email operator@example.com
146
+ cd ~/arena/atris-business/example-co
147
+ atris business onboard --website https://example.com --contact "Example Owner" --note "sample customer workspace"
148
148
  atris align --fix
149
149
  ```
150
150
 
@@ -166,7 +166,7 @@ You can also use bare input:
166
166
  atris business onboard https://example.com "founder-led b2b ops" ./notes.md
167
167
  ```
168
168
 
169
- If you already have a folder full of source material, run it from there with `atris business init "BLOND:ISH" --here`.
169
+ If you already have a folder full of source material, run it from there with `atris business init "Example Co" --here`.
170
170
 
171
171
  When the first recap is done, record it into the RL state logs:
172
172
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  ## Current Patch
4
4
 
5
- The immediate DoorDash lane now follows the correct company-brain model:
5
+ The immediate Example Co lane now follows the correct company-brain model:
6
6
 
7
- - `atris push` keeps the business root as the path root so `doordash/atris/MAP.md` maps to cloud `/atris/MAP.md`
7
+ - `atris push` keeps the business root as the path root so `example-co/atris/MAP.md` maps to cloud `/atris/MAP.md`
8
8
  - business `pull` and `push` default to the `atris/` scope
9
9
  - root-level duplicates such as `MAP.md`, `TODO.md`, and `security-report.md` are ignored by default
10
10
  - manifests record the local workspace root to prevent a manifest from one folder authorizing pushes from another folder
@@ -114,7 +114,7 @@ Later it should also let the user ask Atris to merge semantically with model ass
114
114
 
115
115
  `atris sync --watch` is the current always-on lane:
116
116
 
117
- - watch `doordash/atris/`
117
+ - watch `example-co/atris/`
118
118
  - debounce local edits
119
119
  - fetch cloud hashes periodically
120
120
  - sync clean changes
@@ -136,5 +136,5 @@ Required before broad customer use:
136
136
  - retry-policy tests proving watch failures do not kill the alive loop
137
137
  - fixture tests proving parent-folder junk is ignored
138
138
  - fixture tests proving no cloud deletes without explicit opt-in
139
- - end-to-end dry-run against a real DoorDash-shaped workspace
139
+ - end-to-end dry-run against a real Example Co-shaped workspace
140
140
  - command copy that never recommends `--force` for normal use
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Problem
4
4
 
5
- Atris business workspaces are company brains, not plain folders. The canonical knowledge surface is the `atris/` folder inside each business workspace, for example `doordash/atris/`.
5
+ Atris business workspaces are company brains, not plain folders. The canonical knowledge surface is the `atris/` folder inside each business workspace, for example `example-co/atris/`.
6
6
 
7
7
  Raw push/pull is the wrong abstraction for this surface. It makes a shared knowledge base feel like file mirroring, which creates merge anxiety and makes users responsible for sync safety.
8
8
 
@@ -19,7 +19,7 @@ Cloud Atris is canonical. Local Atris is a working copy. Sync publishes proposed
19
19
 
20
20
  ## User Model
21
21
 
22
- Jonathan should be able to work inside `doordash/atris/` and run one command:
22
+ Jonathan should be able to work inside `example-co/atris/` and run one command:
23
23
 
24
24
  ```bash
25
25
  atris sync
@@ -51,47 +51,47 @@ node -c commands/pull.js
51
51
  node -c commands/push.js
52
52
  ```
53
53
 
54
- Fresh DoorDash-shaped workspace dry-run:
54
+ Fresh Example Co-shaped workspace dry-run:
55
55
 
56
56
  ```bash
57
- atris sync doordash --dry-run
57
+ atris sync example-co --dry-run
58
58
  ```
59
59
 
60
60
  Observed result:
61
61
 
62
62
  ```text
63
- Syncing doordash knowledge wiki...
63
+ Syncing example-co knowledge wiki...
64
64
  scope: atris/
65
65
  ...
66
- Pushing to DoorDash...
66
+ Pushing to Example Co...
67
67
  Checking cloud freshness... fresh
68
68
  Already up to date.
69
69
  ```
70
70
 
71
- Fresh DoorDash-shaped workspace real command with no local edits:
71
+ Fresh Example Co-shaped workspace real command with no local edits:
72
72
 
73
73
  ```bash
74
- atris sync doordash
74
+ atris sync example-co
75
75
  ```
76
76
 
77
77
  Observed result:
78
78
 
79
79
  ```text
80
- Pulling DoorDash...
80
+ Pulling Example Co...
81
81
  Already up to date.
82
82
  122 unchanged.
83
- Pushing to DoorDash...
83
+ Pushing to Example Co...
84
84
  Checking cloud freshness... fresh
85
85
  Already up to date.
86
86
  ```
87
87
 
88
88
  No cloud writes were required in the validation case because the clean workspace had no local changes to publish.
89
89
 
90
- Local edit dry-run in a DoorDash-shaped workspace:
90
+ Local edit dry-run in an Example Co-shaped workspace:
91
91
 
92
92
  ```bash
93
93
  printf '# Sync smoke\n\nLocal-only knowledge update.\n' > atris/wiki/smoke/local-edit.md
94
- atris sync doordash --dry-run
94
+ atris sync example-co --dry-run
95
95
  ```
96
96
 
97
97
  Observed result:
@@ -101,11 +101,11 @@ Observed result:
101
101
  1 would be pushed, 122 unchanged. (--dry-run, nothing sent)
102
102
  ```
103
103
 
104
- Local delete dry-run in a DoorDash-shaped workspace:
104
+ Local delete dry-run in an Example Co-shaped workspace:
105
105
 
106
106
  ```bash
107
107
  rm -f atris/wiki/index.md
108
- atris sync doordash --dry-run
108
+ atris sync example-co --dry-run
109
109
  ```
110
110
 
111
111
  Observed result:
@@ -118,7 +118,7 @@ Deletes require an explicit real push with --delete.
118
118
  Real delete attempt without `--delete`:
119
119
 
120
120
  ```bash
121
- atris sync doordash
121
+ atris sync example-co
122
122
  ```
123
123
 
124
124
  Observed result:
@@ -148,10 +148,10 @@ Slug auto-detection:
148
148
  atris sync --dry-run
149
149
  ```
150
150
 
151
- Observed result from a DoorDash-shaped workspace:
151
+ Observed result from an Example Co-shaped workspace:
152
152
 
153
153
  ```text
154
- Syncing doordash knowledge wiki...
154
+ Syncing example-co knowledge wiki...
155
155
  scope: atris/
156
156
  ```
157
157
 
@@ -165,7 +165,7 @@ Observed shape:
165
165
 
166
166
  ```text
167
167
  Company brain status
168
- business: doordash
168
+ business: example-co
169
169
  brain: atris/ (...)
170
170
  conflicts: none
171
171
  watcher: ...
@@ -218,12 +218,12 @@ atris pull example-co --keep-local --only atris/wiki --timeout 120
218
218
  atris push example-co --only atris/wiki --dry-run
219
219
  ```
220
220
 
221
- - DoorDash post-publish smoke:
221
+ - Example Co post-publish smoke:
222
222
 
223
223
  ```bash
224
- cd ~/arena/atris-business/doordash
224
+ cd ~/arena/atris-business/example-co
225
225
  atris wiki verify
226
- atris push doordash --dry-run
226
+ atris push example-co --dry-run
227
227
  ```
228
228
 
229
229
  - Packaged CLI smoke already passed locally for `3.15.12`: tarball install exposes `atris pull --no-manifest` and `atris wiki verify`.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: aeo
3
3
  description: "AI Engine Optimization — write content engineered to get cited by ChatGPT, Claude, and Gemini. Not SEO. Triggers on: aeo, AI engine, llm citation, get cited, write for ai."
4
- when_to_use: "Use when the user wants content that ranks in AI answers (not Google SERP). Examples: 'write an AEO page', 'get ExampleCo cited by ChatGPT', 'aeo for our recruiting page', 'make this quotable by LLMs'."
4
+ when_to_use: "Use when the user wants content that ranks in AI answers (not Google SERP). Examples: 'write an AEO page', 'get ExampleCo cited by ChatGPT', 'aeo for our pricing page', 'make this quotable by LLMs'."
5
5
  version: 0.1.0
6
6
  allowed-tools: Read, Write, Edit, Glob, Grep, Bash
7
7
  tags:
@@ -20,8 +20,8 @@ Every tick prints this BEFORE scanning for work, so you can see the loop's state
20
20
  ┌──────────────────────────────────────────────────────────────┐
21
21
  │ tick · 14:23 │
22
22
  │ identity: building atris-business cloud for design partners │
23
- │ horizon: wiki-from-atris-labs
24
- atris-cli wiki has 3 new pages from atris-labs
23
+ │ horizon: customer-onboarding
24
+ three setup checks are ready to ship
25
25
  │ progress: ████████░░░░ 6/9 endgame steps │
26
26
  └──────────────────────────────────────────────────────────────┘
27
27
  ```
@@ -121,7 +121,7 @@ curl -s -X POST "https://api.atris.ai/api/integrations/google-slides/presentatio
121
121
  {
122
122
  "insertText": {
123
123
  "objectId": "subtitleId",
124
- "text": "Atris Labs - Confidential"
124
+ "text": "{{company_name}} - Confidential"
125
125
  }
126
126
  }
127
127
  ]
@@ -207,7 +207,7 @@ curl -s -X POST "https://api.atris.ai/api/integrations/google-slides/presentatio
207
207
  {
208
208
  "replaceAllText": {
209
209
  "containsText": {"text": "{{company_name}}"},
210
- "replaceText": "Atris Labs"
210
+ "replaceText": "Example Co"
211
211
  }
212
212
  }
213
213
  ]
package/bin/atris.js CHANGED
@@ -345,7 +345,7 @@ function showHelp() {
345
345
  console.log('Atris Computers:');
346
346
  console.log(' Owner = User | Business');
347
347
  console.log(' Owners have Computers: workspace + files + tools + secrets + memory + agents + validation');
348
- console.log(' Types: code, research, CRM, reporting, recruiting, events, support, business ops');
348
+ console.log(' Types: code, research, CRM, reporting, events, support, business ops');
349
349
  console.log('');
350
350
  console.log('Setup:');
351
351
  console.log(' setup - Guided first-time setup (login, pick business, pull)');
@@ -823,7 +823,7 @@ if (command === '2' && ['fast', 'pro'].includes(String(firstCommandArg || '').to
823
823
  const knownCommands = ['init', 'log', 'now', 'radar', 'ctop', 'status', 'analytics', 'visualize', 'brain', 'brainstorm', 'autopilot', 'run', 'plan', 'do', 'review', 'release',
824
824
  'activate', '_activate', 'agent', 'chat', 'fast', 'ax', 'console', 'serve', 'login', 'logout', 'whoami', 'switch', 'use', 'accounts', '_resolve', '_profile-email', '_switch-session', 'shell-init', 'update', 'upgrade', 'version', 'help', 'next', 'atris',
825
825
  'clean', 'verify', 'search', 'skill', 'member', 'codex-goal', 'app', 'apps', 'learn', 'lesson', 'plugin', 'experiments', 'receipt', 'proof', 'openclaw', 'pull', 'push', 'live', 'align', 'terminal', 'computer', 'diff', 'business', 'sync', 'youtube',
826
- 'ingest', 'query', 'lint', 'loop', 'pulse', 'task', 'mission', 'probe', 'worktree', 'aeo', 'slop', 'deck', 'site', 'theme', 'card', 'reel', 'improve', 'xp', 'play', 'gm', 'x', 'recap', 'signup', 'clarity', 'moves',
826
+ 'ingest', 'query', 'lint', 'loop', 'pulse', 'task', 'mission', 'probe', 'worktree', 'aeo', 'slop', 'security-review', 'secure', 'deck', 'site', 'theme', 'card', 'reel', 'improve', 'xp', 'play', 'gm', 'x', 'recap', 'signup', 'clarity', 'moves',
827
827
  'gmail', 'calendar', 'twitter', 'slack', 'imessage', 'integrations', 'setup', 'clean-workspace', 'cw',
828
828
  'fork', 'browse', 'publish', 'sleep', 'wake', 'feedback', 'errors', 'wiki', 'code-review', 'cr', 'soul', 'fleet', 'compile', 'spaceship'];
829
829
 
@@ -2061,6 +2061,27 @@ if (command === 'init') {
2061
2061
  Promise.resolve(require('../commands/slop').slopCommand(process.argv.slice(3)))
2062
2062
  .then((code) => process.exit(typeof code === 'number' ? code : 0))
2063
2063
  .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2064
+ } else if (command === 'security-review' || command === 'secure') {
2065
+ // Security review: deterministic secrets/PII/code-risk scan (no LLM). Exit 1 = HIGH finding,
2066
+ // for the autopilot/mission/CI gate + a SOC 2 evidence artifact via --json.
2067
+ Promise.resolve(require('../commands/security-review').securityReviewCommand(process.argv.slice(3)))
2068
+ .then((code) => process.exit(typeof code === 'number' ? code : 0))
2069
+ .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2070
+ } else if (command === 'signup') {
2071
+ // Signup: one-call seedless agent signup → writes the active profile (install→signup→play seam).
2072
+ Promise.resolve(require('../commands/signup').signupCommand(process.argv.slice(3)))
2073
+ .then((code) => process.exit(typeof code === 'number' ? code : 0))
2074
+ .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2075
+ } else if (command === 'moves') {
2076
+ // Moves: your 3 next moves — approve one into the loop, kill, or skip.
2077
+ Promise.resolve(require('../commands/moves').movesCommand(process.argv.slice(3)))
2078
+ .then((code) => process.exit(typeof code === 'number' ? code : 0))
2079
+ .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2080
+ } else if (command === 'clarity') {
2081
+ // Clarity: interview yourself once; agents read how you work so you stop repeating it.
2082
+ Promise.resolve(require('../commands/clarity').clarityCommand(process.argv.slice(3)))
2083
+ .then((code) => process.exit(typeof code === 'number' ? code : 0))
2084
+ .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2064
2085
  } else if (command === 'deck') {
2065
2086
  // Deck: premium Google Slides from a plain content spec, via the Atris deck engine (anti-slop design system).
2066
2087
  Promise.resolve(require('../commands/deck').run(process.argv.slice(3)))
@@ -2086,22 +2107,6 @@ if (command === 'init') {
2086
2107
  Promise.resolve(require('../commands/reel').run(process.argv.slice(3)))
2087
2108
  .then((code) => process.exit(typeof code === 'number' ? code : 0))
2088
2109
  .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2089
- } else if (command === 'signup') {
2090
- // Signup: one-call seedless agent signup (POST /auth/agent/signup) → writes the
2091
- // active profile so `atris play` works next. The install→signup→play seam.
2092
- Promise.resolve(require('../commands/signup').signupCommand(process.argv.slice(3)))
2093
- .then((code) => process.exit(typeof code === 'number' ? code : 0))
2094
- .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2095
- } else if (command === 'moves') {
2096
- // Moves: your 3 next moves — approve one into the loop, kill, or skip.
2097
- Promise.resolve(require('../commands/moves').movesCommand(process.argv.slice(3)))
2098
- .then((code) => process.exit(typeof code === 'number' ? code : 0))
2099
- .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2100
- } else if (command === 'clarity') {
2101
- // Clarity: interview yourself once; agents read how you work so you stop repeating it.
2102
- Promise.resolve(require('../commands/clarity').clarityCommand(process.argv.slice(3)))
2103
- .then((code) => process.exit(typeof code === 'number' ? code : 0))
2104
- .catch((err) => { console.error(`\n✗ Error: ${err.message || err}`); process.exit(1); });
2105
2110
  } else if (command === 'receipt' || command === 'proof' || command === 'openclaw') {
2106
2111
  const subcommand = process.argv[3];
2107
2112
  const args = process.argv.slice(4);
package/commands/aeo.js CHANGED
@@ -173,7 +173,7 @@ function printHelp() {
173
173
  console.log('');
174
174
  console.log('Examples:');
175
175
  console.log(' atris aeo log --engine perplexity --limit 5');
176
- console.log(' atris aeo packet pallet');
176
+ console.log(' atris aeo packet <slug>');
177
177
  console.log(' atris aeo status');
178
178
  console.log(' atris aeo discover https://atris.ai/aeo --canonical-url https://atris.ai/aeo');
179
179
  }
@@ -42,7 +42,7 @@ function looksOwnerGatedTitle(title) {
42
42
  /\bhuman[- ](?:approval|input|gate|gated)\b/.test(text) ||
43
43
  /\bmanual send\b/.test(text) ||
44
44
  /\broute confirmation\b/.test(text) ||
45
- /\bconfirm pallet destination\b/.test(text) ||
45
+ /\bconfirm customer destination\b/.test(text) ||
46
46
  /\bconfirm .+ destination before .+ approval\b/.test(text) ||
47
47
  /\bapprove and manually send\b/.test(text)
48
48
  );
@@ -1601,8 +1601,8 @@ async function computerCreate(token, args = [], defaults = {}) {
1601
1601
  console.log('Create a business computer, activate it, and wake it in one command.');
1602
1602
  console.log('');
1603
1603
  console.log('Examples:');
1604
- console.log(' atris computer create "My Business Computer" --business atris-labs');
1605
- console.log(' atris computer create "Recruiting Computer"');
1604
+ console.log(' atris computer create "My Business Computer" --business <business>');
1605
+ console.log(' atris computer create "Support Computer"');
1606
1606
  if (!options.name && !options.help) process.exitCode = 1;
1607
1607
  return;
1608
1608
  }
@@ -1810,8 +1810,8 @@ async function computerDelete(token, ctx, options = {}, args = []) {
1810
1810
  console.log('Sleeps the computer first, then deletes the non-default workspace after confirmation.');
1811
1811
  console.log('');
1812
1812
  console.log('Examples:');
1813
- console.log(' atris computer delete --business atris-labs --workspace ws_123');
1814
- console.log(' atris computer delete --business atris-labs --workspace ws_123 --confirm "delete ws_123"');
1813
+ console.log(' atris computer delete --business <business> --workspace ws_123');
1814
+ console.log(' atris computer delete --business <business> --workspace ws_123 --confirm "delete ws_123"');
1815
1815
  return;
1816
1816
  }
1817
1817
 
@@ -3291,7 +3291,7 @@ async function runComputer() {
3291
3291
  console.log(' Owner has many Computers');
3292
3292
  console.log(' Computer = workspace + files + tools + secrets + memory + agents + validation');
3293
3293
  console.log('');
3294
- console.log('Common types: codeops, research, CRM, reporting, recruiting, event ops, support, business ops.');
3294
+ console.log('Common types: codeops, research, CRM, reporting, event ops, support, business ops.');
3295
3295
  console.log('A business can be a company, lab, collective, community, artist, team, or project.');
3296
3296
  console.log('');
3297
3297
  console.log('First use:');
@@ -3342,10 +3342,10 @@ async function runComputer() {
3342
3342
  console.log(' atris computer');
3343
3343
  console.log(' atris computer card --write');
3344
3344
  console.log(' atris business init "My Lab" # first/default computer with Atris + operator');
3345
- console.log(' atris computer create "Recruiting Computer" --business atris-labs');
3346
- console.log(' atris computer --business atris-labs --workspace <workspace-id>');
3347
- console.log(' atris computer sleep --business atris-labs --workspace <workspace-id>');
3348
- console.log(' atris computer delete --business atris-labs --workspace <workspace-id>');
3345
+ console.log(' atris computer create "Support Computer" --business <business>');
3346
+ console.log(' atris computer --business <business> --workspace <workspace-id>');
3347
+ console.log(' atris computer sleep --business <business> --workspace <workspace-id>');
3348
+ console.log(' atris computer delete --business <business> --workspace <workspace-id>');
3349
3349
  console.log(' atris computer proof');
3350
3350
  console.log(' atris computer local');
3351
3351
  console.log(' atris computer codex');
@@ -231,7 +231,7 @@ function printHelp(write = console.log) {
231
231
  write(' atris feedback delete <id> Delete feedback (admin)');
232
232
  write('');
233
233
  write('IDs may be the first 8 chars of the UUID.');
234
- write('Business slugs come from ~/.atris/businesses.json (e.g. acme, atris-labs).');
234
+ write('Business slugs come from ~/.atris/businesses.json.');
235
235
  write('');
236
236
  }
237
237
 
package/commands/init.js CHANGED
@@ -257,7 +257,7 @@ function initAtris() {
257
257
  }
258
258
  // GUARD: Refuse nested init.
259
259
  // Bug: running `atris init` inside an existing `atris/` folder creates
260
- // `atris/atris/` nesting hell. Cloud doordash had this exact problem.
260
+ // `atris/atris/` nesting hell. A cloud business workspace had this exact problem.
261
261
  // Fix: detect three nesting conditions and refuse with a clear error.
262
262
  const cwd = process.cwd();
263
263
  const cwdBase = path.basename(cwd);
@@ -705,7 +705,7 @@ member -> mission start --verify -> status --status active -> one bounded step -
705
705
  - [ ] Only use \`atris task accept <id>\` when the human has approved the proof
706
706
  - [ ] Keep durable learning in Atris-owned policy/skill/wiki/task state; keep \`AGENTS.md\` as a generated/pointer layer
707
707
  - [ ] Treat \`atris/TODO.md\` as a rendered view; do not manually use it as the source of truth
708
- - [ ] Use \`atris-labs\` for the Atris Labs business computer slug in docs and links
708
+ - [ ] Use the real business slug from local Atris state; do not hardcode private slugs in generated docs
709
709
 
710
710
  ## Anti-patterns
711
711
 
package/commands/live.js CHANGED
@@ -101,10 +101,10 @@ function printLiveHelp() {
101
101
  console.log('Keeps a business brain fresh: doctor, pull, watch local changes, push after quiet, and periodically pull.');
102
102
  console.log('');
103
103
  console.log('Examples:');
104
- console.log(' atris live atris-labs');
104
+ console.log(' atris live <business>');
105
105
  console.log(' atris live --once');
106
- console.log(' atris live atris-labs --dry-run');
107
- console.log(' atris live atris-labs --interval=120 --debounce=30');
106
+ console.log(' atris live <business> --dry-run');
107
+ console.log(' atris live <business> --interval=120 --debounce=30');
108
108
  console.log('');
109
109
  console.log('Options:');
110
110
  console.log(' --once Run one freshness cycle and exit');
@@ -46,7 +46,7 @@ function generateManifest(skills, projectDir) {
46
46
  version: pkg.version || '1.0.0',
47
47
  description: `Atris workspace skills for Cowork — ${skills.length} integrations (email, calendar, slack, drive, notion, and more)`,
48
48
  author: {
49
- name: typeof pkg.author === 'string' ? pkg.author : (pkg.author?.name || 'Atris Labs')
49
+ name: typeof pkg.author === 'string' ? pkg.author : (pkg.author?.name || 'Atris')
50
50
  },
51
51
  homepage: pkg.homepage || 'https://github.com/atrislabs/atris',
52
52
  keywords: ['atris', 'workspace', 'integrations', 'email', 'calendar', 'slack', 'notion', 'drive']
package/commands/pull.js CHANGED
@@ -110,9 +110,9 @@ async function pullAtris() {
110
110
  console.log(' Local files that conflict with cloud are replaced by the cloud version.');
111
111
  console.log('');
112
112
  console.log(' atris pull Pull into current business workspace');
113
- console.log(' atris pull doordash Pull a business into ./doordash or --into <path>');
114
- console.log(' atris pull doordash --into /tmp/doordash');
115
- console.log(' atris pull doordash --only atris/wiki/');
113
+ console.log(' atris pull <business> Pull a business into ./<business> or --into <path>');
114
+ console.log(' atris pull <business> --into /tmp/<business>');
115
+ console.log(' atris pull <business> --only atris/wiki/');
116
116
  console.log(' atris pull --keep-local Preserve conflicting local edits as .remote files (legacy)');
117
117
  console.log(' atris pull --dry-run Preview pull changes without writing local files');
118
118
  console.log(' atris pull --no-manifest Pull for inspection without changing this machine\'s sync anchor');
@@ -249,7 +249,7 @@ async function pullBusiness(slug) {
249
249
  // correct workspace for THIS business — i.e. it has a `.atris/business.json`
250
250
  // whose slug matches `slug`. Any other signal (a stray `atris/` folder, a
251
251
  // business.json for a different business, etc.) is NOT enough: pulling
252
- // atris-labs on top of another business workspace would mix two businesses into
252
+ // one business on top of another business workspace would mix two businesses into
253
253
  // one directory and write one manifest over the other (or vice
254
254
  // versa), causing the next sync to do strange things.
255
255
  //