atris 2.0.21 → 2.1.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.
@@ -12,7 +12,7 @@ atris/
12
12
  ├── atris.md (atrisDev protocol + specs)
13
13
  ├── CLAUDE.md (tells agents to follow atrisDev)
14
14
  ├── MAP.md (navigation - AI will generate)
15
- └── agent_team/ (agent specs)
15
+ └── team/ (agent specs)
16
16
  ```
17
17
 
18
18
  ## Quick Start (2 Steps)
@@ -91,7 +91,7 @@ Your system's navigation guide. Contains:
91
91
 
92
92
  **Use it:** When you need to find something fast or onboard new people
93
93
 
94
- ### agent_team/navigator.md
94
+ ### team/navigator.md
95
95
  Your "where is X?" expert. Ask it questions like:
96
96
  - "Where is the authentication logic?"
97
97
  - "Show me all API endpoints"
@@ -99,7 +99,7 @@ Your "where is X?" expert. Ask it questions like:
99
99
 
100
100
  Always cites MAP.md with exact file:line references.
101
101
 
102
- ### agent_team/executor.md
102
+ ### team/executor.md
103
103
  Your task runner. Give it work like:
104
104
  - "Add authentication to the upload endpoint"
105
105
  - "Fix the bug in user registration"
@@ -107,7 +107,7 @@ Your task runner. Give it work like:
107
107
 
108
108
  Reads MAP.md, plans execution with file:line references, executes step-by-step.
109
109
 
110
- ### agent_team/validator.md
110
+ ### team/validator.md
111
111
  Your quality gatekeeper. Runs after changes to:
112
112
  - Check for breaking changes
113
113
  - Update MAP.md if structure changed
@@ -12,7 +12,7 @@ atris/
12
12
  ├── atris.md (atrisDev protocol + specs)
13
13
  ├── CLAUDE.md (tells agents to follow atrisDev)
14
14
  ├── MAP.md (navigation - AI will generate)
15
- └── agent_team/ (agent specs)
15
+ └── team/ (agent specs)
16
16
  ```
17
17
 
18
18
  ## Quick Start (2 Steps)
@@ -91,7 +91,7 @@ Your system's navigation guide. Contains:
91
91
 
92
92
  **Use it:** When you need to find something fast or onboard new people
93
93
 
94
- ### agent_team/navigator.md
94
+ ### team/navigator.md
95
95
  Your "where is X?" expert. Ask it questions like:
96
96
  - "Where is the authentication logic?"
97
97
  - "Show me all API endpoints"
@@ -99,7 +99,7 @@ Your "where is X?" expert. Ask it questions like:
99
99
 
100
100
  Always cites MAP.md with exact file:line references.
101
101
 
102
- ### agent_team/executor.md
102
+ ### team/executor.md
103
103
  Your task runner. Give it work like:
104
104
  - "Add authentication to the upload endpoint"
105
105
  - "Fix the bug in user registration"
@@ -107,7 +107,7 @@ Your task runner. Give it work like:
107
107
 
108
108
  Reads MAP.md, plans execution with file:line references, executes step-by-step.
109
109
 
110
- ### agent_team/validator.md
110
+ ### team/validator.md
111
111
  Your quality gatekeeper. Runs after changes to:
112
112
  - Check for breaking changes
113
113
  - Update MAP.md if structure changed
package/atris/atris.md CHANGED
@@ -11,7 +11,7 @@
11
11
  1. Load context (ONE time, remember for session):
12
12
  - `atris/logs/YYYY/YYYY-MM-DD.md` (today's journal)
13
13
  - `atris/MAP.md` (navigation overview)
14
- - `atris/agent_team/*.md` (all agent specs)
14
+ - `atris/team/*.md` (all agent specs)
15
15
 
16
16
  2. Output this EXACT box:
17
17
 
@@ -108,7 +108,7 @@ plan → do → review
108
108
 
109
109
  `atris next` = auto-selects agent based on journal state
110
110
 
111
- Specs loaded at activate from `agent_team/*.md`
111
+ Specs loaded at activate from `team/*.md`
112
112
 
113
113
  ---
114
114
 
@@ -143,7 +143,7 @@ Specs loaded at activate from `agent_team/*.md`
143
143
  | `TODO.md` | Task queue (target: 0) |
144
144
  | `logs/YYYY/MM-DD.md` | Journal (daily) |
145
145
  | `PERSONA.md` | Communication style |
146
- | `agent_team/` | Agent behaviors |
146
+ | `team/` | Agent behaviors |
147
147
  | `atrisDev.md` | Full spec (reference) |
148
148
 
149
149
  ---
@@ -24,6 +24,7 @@ atris/skills/writing/SKILL.md ← source of truth
24
24
  | Skill | Description | Policy |
25
25
  |-------|-------------|--------|
26
26
  | atris | Atris workflow enforcement + plan/do/review | `policies/ANTISLOP.md` |
27
+ | autopilot | PRD-driven autonomous execution - loops until done | — |
27
28
  | meta | Metacognition for agents - how to think about thinking | `policies/LESSONS.md` |
28
29
  | design | Frontend aesthetics - avoid generic AI look | `policies/atris-design.md` |
29
30
  | backend | Backend architecture - prevent over-engineering | `policies/atris-backend.md` |
@@ -0,0 +1,96 @@
1
+ ---
2
+ description: PRD-driven autonomous execution - give it a task, it loops until done
3
+ triggers: [autopilot, autonomous, "get it done", "finish this", "ship it"]
4
+ ---
5
+
6
+ # Autopilot Skill
7
+
8
+ Autonomous task execution. Plan → Do → Review loop until acceptance criteria pass.
9
+
10
+ ## When to Use
11
+
12
+ - User says "get this done" or "ship it"
13
+ - User describes a feature/bug and wants hands-off execution
14
+ - Any task that can be validated with acceptance criteria
15
+
16
+ ## Process
17
+
18
+ ```
19
+ ┌───────────────────────────────────────────────────────┐
20
+ │ INPUT: "Add dark mode toggle" │
21
+ │ │
22
+ │ 1. GENERATE PRD │
23
+ │ - Type: feature or bug (auto-detect) │
24
+ │ - Acceptance criteria (testable conditions) │
25
+ │ - Priority: 1 (single story) │
26
+ │ │
27
+ │ 2. LOOP (max 5 iterations) │
28
+ │ ┌──────────────────────────────────────┐ │
29
+ │ │ PLAN: Navigator creates tasks │ │
30
+ │ │ - Read MAP.md for file locations │ │
31
+ │ │ - ASCII diagram of approach │ │
32
+ │ │ - Add tasks to TODO.md │ │
33
+ │ │ - Signal: [PLAN_COMPLETE] │ │
34
+ │ ├──────────────────────────────────────┤ │
35
+ │ │ DO: Executor builds │ │
36
+ │ │ - Implement each task │ │
37
+ │ │ - Verify changes work │ │
38
+ │ │ - Commit changes │ │
39
+ │ │ - Signal: [DO_COMPLETE] │ │
40
+ │ ├──────────────────────────────────────┤ │
41
+ │ │ REVIEW: Validator checks │ │
42
+ │ │ - Check acceptance criteria │ │
43
+ │ │ - If fail: [REVIEW_FAILED] reason │ │
44
+ │ │ - If pass: <promise>COMPLETE</promise> │
45
+ │ └──────────────────────────────────────┘ │
46
+ │ │
47
+ │ 3. OUTPUT │
48
+ │ - prd.json: PRD with passes: true │
49
+ │ - progress.txt: Execution log │
50
+ │ - Journal: Completion logged │
51
+ └───────────────────────────────────────────────────────┘
52
+ ```
53
+
54
+ ## Acceptance Criteria Templates
55
+
56
+ **Feature:**
57
+ - Feature implemented and working as described
58
+ - Tests pass (if test suite exists)
59
+ - Build passes
60
+ - Code follows project patterns (check MAP.md)
61
+
62
+ **Bug:**
63
+ - Bug is fixed and no longer reproducible
64
+ - Regression test added (if applicable)
65
+ - Build passes
66
+ - No new bugs introduced
67
+
68
+ ## Commands
69
+
70
+ ```bash
71
+ # With description
72
+ atris autopilot "Add dark mode toggle"
73
+
74
+ # Bug fix
75
+ atris autopilot --bug "Login fails on Safari"
76
+
77
+ # From TODO.md backlog
78
+ atris autopilot --from-todo
79
+
80
+ # With options
81
+ atris autopilot "Add feature" --iterations=3 --verbose
82
+ ```
83
+
84
+ ## Stop Conditions
85
+
86
+ 1. `<promise>COMPLETE</promise>` — All acceptance criteria met
87
+ 2. Max iterations reached (default: 5)
88
+ 3. Error that can't be recovered
89
+
90
+ ## Rules
91
+
92
+ - ONE task at a time
93
+ - Verify before marking passes: true
94
+ - Minimal changes only
95
+ - Check MAP.md before touching code
96
+ - Log to journal when complete
package/atris.md CHANGED
@@ -11,7 +11,7 @@
11
11
  1. Load context (ONE time, remember for session):
12
12
  - `atris/logs/YYYY/YYYY-MM-DD.md` (today's journal)
13
13
  - `atris/MAP.md` (navigation overview)
14
- - `atris/agent_team/*.md` (all agent specs)
14
+ - `atris/team/*.md` (all agent specs)
15
15
 
16
16
  2. Output this EXACT box:
17
17
 
@@ -108,7 +108,7 @@ plan → do → review
108
108
 
109
109
  `atris next` = auto-selects agent based on journal state
110
110
 
111
- Specs loaded at activate from `agent_team/*.md`
111
+ Specs loaded at activate from `team/*.md`
112
112
 
113
113
  ---
114
114
 
@@ -143,7 +143,7 @@ Specs loaded at activate from `agent_team/*.md`
143
143
  | `TODO.md` | Task queue (target: 0) |
144
144
  | `logs/YYYY/MM-DD.md` | Journal (daily) |
145
145
  | `PERSONA.md` | Communication style |
146
- | `agent_team/` | Agent behaviors |
146
+ | `team/` | Agent behaviors |
147
147
  | `atrisDev.md` | Full spec (reference) |
148
148
 
149
149
  ---
package/bin/atris.js CHANGED
@@ -164,6 +164,7 @@ function showHelp() {
164
164
  console.log('Setup:');
165
165
  console.log(' init - Initialize Atris in current project');
166
166
  console.log(' update - Update local files to latest version');
167
+ console.log(' upgrade - Install latest Atris from npm');
167
168
  console.log('');
168
169
  console.log('Core workflow:');
169
170
  console.log(' plan - Create build spec with visualization');
@@ -303,7 +304,7 @@ const { verifyAtris: verifyCmd } = require('../commands/verify');
303
304
 
304
305
  // Check if this is a known command or natural language input
305
306
  const knownCommands = ['init', 'log', 'status', 'analytics', 'visualize', 'brainstorm', 'autopilot', 'plan', 'do', 'review',
306
- 'activate', 'agent', 'chat', 'login', 'logout', 'whoami', 'update', 'version', 'help', 'next', 'atris',
307
+ 'activate', 'agent', 'chat', 'login', 'logout', 'whoami', 'update', 'upgrade', 'version', 'help', 'next', 'atris',
307
308
  'clean', 'verify', 'search'];
308
309
 
309
310
  // Check if command is an atris.md spec file - triggers welcome visualization
@@ -616,6 +617,8 @@ if (command === 'init') {
616
617
  activateCmd();
617
618
  } else if (command === 'update') {
618
619
  syncCmd();
620
+ } else if (command === 'upgrade') {
621
+ upgradeAtris();
619
622
  } else if (command === 'chat') {
620
623
  chatAtris()
621
624
  .then(() => process.exit(0))
@@ -754,7 +757,7 @@ if (command === 'init') {
754
757
 
755
758
  function initAtris() {
756
759
  const targetDir = path.join(process.cwd(), 'atris');
757
- const agentTeamDir = path.join(targetDir, 'agent_team');
760
+ const teamDir = path.join(targetDir, 'team');
758
761
  const sourceFile = path.join(__dirname, '..', 'atris.md');
759
762
  const targetFile = path.join(targetDir, 'atris.md');
760
763
 
@@ -766,10 +769,10 @@ function initAtris() {
766
769
  console.log('✓ atris/ folder already exists');
767
770
  }
768
771
 
769
- // Create agent_team/ subfolder
770
- if (!fs.existsSync(agentTeamDir)) {
771
- fs.mkdirSync(agentTeamDir, { recursive: true });
772
- console.log('✓ Created atris/agent_team/ folder');
772
+ // Create team/ subfolder
773
+ if (!fs.existsSync(teamDir)) {
774
+ fs.mkdirSync(teamDir, { recursive: true });
775
+ console.log('✓ Created atris/team/ folder');
773
776
  }
774
777
 
775
778
  // Create policies/ subfolder
@@ -784,10 +787,10 @@ function initAtris() {
784
787
  const personaFile = path.join(targetDir, 'PERSONA.md');
785
788
  const mapFile = path.join(targetDir, 'MAP.md');
786
789
  const taskContextsFile = path.join(targetDir, 'TASK_CONTEXTS.md');
787
- const navigatorFile = path.join(agentTeamDir, 'navigator.md');
788
- const executorFile = path.join(agentTeamDir, 'executor.md');
789
- const validatorFile = path.join(agentTeamDir, 'validator.md');
790
- const launcherFile = path.join(agentTeamDir, 'launcher.md');
790
+ const navigatorFile = path.join(teamDir, 'navigator.md');
791
+ const executorFile = path.join(teamDir, 'executor.md');
792
+ const validatorFile = path.join(teamDir, 'validator.md');
793
+ const launcherFile = path.join(teamDir, 'launcher.md');
791
794
 
792
795
  const gettingStartedSource = path.join(__dirname, '..', 'GETTING_STARTED.md');
793
796
  const personaSource = path.join(__dirname, '..', 'PERSONA.md');
@@ -815,29 +818,29 @@ function initAtris() {
815
818
  }
816
819
 
817
820
  // Copy agent templates from package
818
- const navigatorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'navigator.md');
819
- const executorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'executor.md');
820
- const validatorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'validator.md');
821
- const launcherSource = path.join(__dirname, '..', 'atris', 'agent_team', 'launcher.md');
821
+ const navigatorSource = path.join(__dirname, '..', 'atris', 'team', 'navigator.md');
822
+ const executorSource = path.join(__dirname, '..', 'atris', 'team', 'executor.md');
823
+ const validatorSource = path.join(__dirname, '..', 'atris', 'team', 'validator.md');
824
+ const launcherSource = path.join(__dirname, '..', 'atris', 'team', 'launcher.md');
822
825
 
823
826
  if (!fs.existsSync(navigatorFile) && fs.existsSync(navigatorSource)) {
824
827
  fs.copyFileSync(navigatorSource, navigatorFile);
825
- console.log('✓ Created agent_team/navigator.md');
828
+ console.log('✓ Created team/navigator.md');
826
829
  }
827
830
 
828
831
  if (!fs.existsSync(executorFile) && fs.existsSync(executorSource)) {
829
832
  fs.copyFileSync(executorSource, executorFile);
830
- console.log('✓ Created agent_team/executor.md');
833
+ console.log('✓ Created team/executor.md');
831
834
  }
832
835
 
833
836
  if (!fs.existsSync(validatorFile) && fs.existsSync(validatorSource)) {
834
837
  fs.copyFileSync(validatorSource, validatorFile);
835
- console.log('✓ Created agent_team/validator.md');
838
+ console.log('✓ Created team/validator.md');
836
839
  }
837
840
 
838
841
  if (!fs.existsSync(launcherFile) && fs.existsSync(launcherSource)) {
839
842
  fs.copyFileSync(launcherSource, launcherFile);
840
- console.log('✓ Created agent_team/launcher.md');
843
+ console.log('✓ Created team/launcher.md');
841
844
  }
842
845
 
843
846
  // Copy policies from package
@@ -859,7 +862,7 @@ function initAtris() {
859
862
  console.log(' ├── atris.md (AI agent instructions)');
860
863
  console.log(' ├── MAP.md (placeholder)');
861
864
  console.log(' ├── TASK_CONTEXTS.md (placeholder)');
862
- console.log(' ├── agent_team/');
865
+ console.log(' ├── team/');
863
866
  console.log(' │ ├── navigator.md');
864
867
  console.log(' │ ├── executor.md');
865
868
  console.log(' │ ├── validator.md');
@@ -878,7 +881,7 @@ function initAtris() {
878
881
 
879
882
  function syncAtris() {
880
883
  const targetDir = path.join(process.cwd(), 'atris');
881
- const agentTeamDir = path.join(targetDir, 'agent_team');
884
+ const teamDir = path.join(targetDir, 'team');
882
885
 
883
886
  // Check if atris/ folder exists
884
887
  if (!fs.existsSync(targetDir)) {
@@ -886,9 +889,9 @@ function syncAtris() {
886
889
  process.exit(1);
887
890
  }
888
891
 
889
- // Ensure agent_team folder exists
890
- if (!fs.existsSync(agentTeamDir)) {
891
- fs.mkdirSync(agentTeamDir, { recursive: true });
892
+ // Ensure team folder exists
893
+ if (!fs.existsSync(teamDir)) {
894
+ fs.mkdirSync(teamDir, { recursive: true });
892
895
  }
893
896
 
894
897
  // Ensure policies folder exists
@@ -904,10 +907,10 @@ function syncAtris() {
904
907
  { source: 'atrisDev.md', target: 'atrisDev.md' },
905
908
  { source: 'PERSONA.md', target: 'PERSONA.md' },
906
909
  { source: 'GETTING_STARTED.md', target: 'GETTING_STARTED.md' },
907
- { source: 'atris/agent_team/navigator.md', target: 'agent_team/navigator.md' },
908
- { source: 'atris/agent_team/executor.md', target: 'agent_team/executor.md' },
909
- { source: 'atris/agent_team/validator.md', target: 'agent_team/validator.md' },
910
- { source: 'atris/agent_team/launcher.md', target: 'agent_team/launcher.md' },
910
+ { source: 'atris/team/navigator.md', target: 'team/navigator.md' },
911
+ { source: 'atris/team/executor.md', target: 'team/executor.md' },
912
+ { source: 'atris/team/validator.md', target: 'team/validator.md' },
913
+ { source: 'atris/team/launcher.md', target: 'team/launcher.md' },
911
914
  { source: 'atris/policies/ANTISLOP.md', target: 'policies/ANTISLOP.md' }
912
915
  ];
913
916
 
@@ -944,6 +947,55 @@ function syncAtris() {
944
947
  }
945
948
  }
946
949
 
950
+ async function upgradeAtris() {
951
+ console.log('');
952
+ console.log('┌─────────────────────────────────────────────────────────────┐');
953
+ console.log('│ Atris Upgrade │');
954
+ console.log('└─────────────────────────────────────────────────────────────┘');
955
+ console.log('');
956
+ console.log(`Current version: ${CLI_VERSION}`);
957
+ console.log('');
958
+ console.log('Checking for updates...');
959
+
960
+ // Force check npm for latest version
961
+ const updateInfo = await checkForUpdates(true);
962
+
963
+ if (!updateInfo || !updateInfo.needsUpdate) {
964
+ console.log('');
965
+ console.log('✓ You are on the latest version!');
966
+ console.log('');
967
+ return;
968
+ }
969
+
970
+ console.log('');
971
+ console.log(`📦 Update available: ${updateInfo.installed} → ${updateInfo.latest}`);
972
+ console.log('');
973
+ console.log('Installing update...');
974
+ console.log('');
975
+
976
+ // Run npm update -g atris
977
+ const result = spawnSync('npm', ['update', '-g', 'atris'], {
978
+ stdio: 'inherit',
979
+ shell: true
980
+ });
981
+
982
+ if (result.status === 0) {
983
+ console.log('');
984
+ console.log('✓ Atris upgraded successfully!');
985
+ console.log('');
986
+ console.log('Run `atris update` in your projects to sync local files.');
987
+ console.log('');
988
+ } else {
989
+ console.log('');
990
+ console.log('✗ Upgrade failed. Try running manually:');
991
+ console.log(' npm update -g atris');
992
+ console.log('');
993
+ console.log('If you see permission errors, try:');
994
+ console.log(' sudo npm update -g atris');
995
+ console.log('');
996
+ }
997
+ }
998
+
947
999
  // ============================================
948
1000
  // Log System
949
1001
  // ============================================
@@ -2528,7 +2580,7 @@ async function atrisDevEntry(userInput = null) {
2528
2580
 
2529
2581
  function launchAtris() {
2530
2582
  const targetDir = path.join(process.cwd(), 'atris');
2531
- const launcherFile = path.join(targetDir, 'agent_team', 'launcher.md');
2583
+ const launcherFile = path.join(targetDir, 'team', 'launcher.md');
2532
2584
 
2533
2585
  if (!fs.existsSync(launcherFile)) {
2534
2586
  console.log('✗ launcher.md not found. Run "atris init" first.');
@@ -354,10 +354,10 @@ function generateWorkflowFile(workflowFile, metadata) {
354
354
  const targetDir = path.join(process.cwd(), 'atris');
355
355
 
356
356
  // Load all context needed for agents
357
- const navigatorFile = path.join(targetDir, 'agent_team', 'navigator.md');
358
- const executorFile = path.join(targetDir, 'agent_team', 'executor.md');
359
- const validatorFile = path.join(targetDir, 'agent_team', 'validator.md');
360
- const launcherFile = path.join(targetDir, 'agent_team', 'launcher.md');
357
+ const navigatorFile = path.join(targetDir, 'team', 'navigator.md');
358
+ const executorFile = path.join(targetDir, 'team', 'executor.md');
359
+ const validatorFile = path.join(targetDir, 'team', 'validator.md');
360
+ const launcherFile = path.join(targetDir, 'team', 'launcher.md');
361
361
  const personaFile = path.join(targetDir, 'PERSONA.md');
362
362
  const mapFile = path.join(targetDir, 'MAP.md');
363
363
  const todoFile = path.join(targetDir, 'TODO.md');
@@ -471,10 +471,10 @@ async function autopilotAtris(initialIdea = null) {
471
471
  throw new Error('atris/ folder not found. Run "atris init" first.');
472
472
  }
473
473
 
474
- const navigatorFile = path.join(targetDir, 'agent_team', 'navigator.md');
475
- const executorFile = path.join(targetDir, 'agent_team', 'executor.md');
476
- const validatorFile = path.join(targetDir, 'agent_team', 'validator.md');
477
- const launcherFile = path.join(targetDir, 'agent_team', 'launcher.md');
474
+ const navigatorFile = path.join(targetDir, 'team', 'navigator.md');
475
+ const executorFile = path.join(targetDir, 'team', 'executor.md');
476
+ const validatorFile = path.join(targetDir, 'team', 'validator.md');
477
+ const launcherFile = path.join(targetDir, 'team', 'launcher.md');
478
478
 
479
479
  const missingSpecs = [];
480
480
  if (!fs.existsSync(navigatorFile)) missingSpecs.push('navigator.md');
package/commands/init.js CHANGED
@@ -150,7 +150,7 @@ function detectProjectContext(projectRoot = process.cwd()) {
150
150
 
151
151
  /**
152
152
  * Inject project-specific patterns into agent specs
153
- * @param {string} agentTeamDir - Directory containing agent_team specs
153
+ * @param {string} agentTeamDir - Directory containing team specs
154
154
  * @param {Object} profile - Project profile from detectProjectContext()
155
155
  */
156
156
  function injectProjectPatterns(agentTeamDir, profile) {
@@ -229,7 +229,7 @@ ${profile.hasCode ? `**Validation:** Run \`${profile.testCommand}\` to verify ch
229
229
 
230
230
  function initAtris() {
231
231
  const targetDir = path.join(process.cwd(), 'atris');
232
- const agentTeamDir = path.join(targetDir, 'agent_team');
232
+ const agentTeamDir = path.join(targetDir, 'team');
233
233
  const sourceFile = path.join(__dirname, '..', 'atris.md');
234
234
  const targetFile = path.join(targetDir, 'atris.md');
235
235
 
@@ -242,7 +242,7 @@ function initAtris() {
242
242
 
243
243
  if (!fs.existsSync(agentTeamDir)) {
244
244
  fs.mkdirSync(agentTeamDir, { recursive: true });
245
- console.log('✓ Created atris/agent_team/ folder');
245
+ console.log('✓ Created atris/team/ folder');
246
246
  }
247
247
 
248
248
  const gettingStartedFile = path.join(targetDir, 'GETTING_STARTED.md');
@@ -427,35 +427,35 @@ function initAtris() {
427
427
  });
428
428
 
429
429
 
430
- const navigatorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'navigator.md');
431
- const executorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'executor.md');
432
- const validatorSource = path.join(__dirname, '..', 'atris', 'agent_team', 'validator.md');
433
- const launcherSource = path.join(__dirname, '..', 'atris', 'agent_team', 'launcher.md');
434
- const brainstormerSource = path.join(__dirname, '..', 'atris', 'agent_team', 'brainstormer.md');
430
+ const navigatorSource = path.join(__dirname, '..', 'atris', 'team', 'navigator.md');
431
+ const executorSource = path.join(__dirname, '..', 'atris', 'team', 'executor.md');
432
+ const validatorSource = path.join(__dirname, '..', 'atris', 'team', 'validator.md');
433
+ const launcherSource = path.join(__dirname, '..', 'atris', 'team', 'launcher.md');
434
+ const brainstormerSource = path.join(__dirname, '..', 'atris', 'team', 'brainstormer.md');
435
435
 
436
436
  if (!fs.existsSync(navigatorFile) && fs.existsSync(navigatorSource)) {
437
437
  fs.copyFileSync(navigatorSource, navigatorFile);
438
- console.log('✓ Created agent_team/navigator.md');
438
+ console.log('✓ Created team/navigator.md');
439
439
  }
440
440
 
441
441
  if (!fs.existsSync(executorFile) && fs.existsSync(executorSource)) {
442
442
  fs.copyFileSync(executorSource, executorFile);
443
- console.log('✓ Created agent_team/executor.md');
443
+ console.log('✓ Created team/executor.md');
444
444
  }
445
445
 
446
446
  if (!fs.existsSync(validatorFile) && fs.existsSync(validatorSource)) {
447
447
  fs.copyFileSync(validatorSource, validatorFile);
448
- console.log('✓ Created agent_team/validator.md');
448
+ console.log('✓ Created team/validator.md');
449
449
  }
450
450
 
451
451
  if (!fs.existsSync(launcherFile) && fs.existsSync(launcherSource)) {
452
452
  fs.copyFileSync(launcherSource, launcherFile);
453
- console.log('✓ Created agent_team/launcher.md');
453
+ console.log('✓ Created team/launcher.md');
454
454
  }
455
455
 
456
456
  if (!fs.existsSync(brainstormerFile) && fs.existsSync(brainstormerSource)) {
457
457
  fs.copyFileSync(brainstormerSource, brainstormerFile);
458
- console.log('✓ Created agent_team/brainstormer.md');
458
+ console.log('✓ Created team/brainstormer.md');
459
459
  }
460
460
 
461
461
  // Detect project context and generate profile
@@ -466,7 +466,7 @@ function initAtris() {
466
466
 
467
467
  // Inject project patterns into agent specs
468
468
  injectProjectPatterns(agentTeamDir, profile);
469
- console.log('✓ Injected project patterns into agent_team specs');
469
+ console.log('✓ Injected project patterns into team specs');
470
470
 
471
471
  // Create agent instruction files for different tools
472
472
  const agentInstructions = `# AGENTS.md — Universal Agent Instructions
package/commands/sync.js CHANGED
@@ -3,7 +3,7 @@ const path = require('path');
3
3
 
4
4
  function syncAtris() {
5
5
  const targetDir = path.join(process.cwd(), 'atris');
6
- const agentTeamDir = path.join(targetDir, 'agent_team');
6
+ const agentTeamDir = path.join(targetDir, 'team');
7
7
 
8
8
  if (!fs.existsSync(targetDir)) {
9
9
  console.error('✗ Error: atris/ folder not found. Run "atris init" first.');
@@ -27,11 +27,11 @@ function syncAtris() {
27
27
  { source: 'PERSONA.md', target: 'PERSONA.md' },
28
28
  { source: 'GETTING_STARTED.md', target: 'GETTING_STARTED.md' },
29
29
  { source: 'atris/CLAUDE.md', target: 'CLAUDE.md' },
30
- { source: 'atris/agent_team/navigator.md', target: 'agent_team/navigator.md' },
31
- { source: 'atris/agent_team/executor.md', target: 'agent_team/executor.md' },
32
- { source: 'atris/agent_team/validator.md', target: 'agent_team/validator.md' },
33
- { source: 'atris/agent_team/launcher.md', target: 'agent_team/launcher.md' },
34
- { source: 'atris/agent_team/brainstormer.md', target: 'agent_team/brainstormer.md' },
30
+ { source: 'atris/team/navigator.md', target: 'team/navigator.md' },
31
+ { source: 'atris/team/executor.md', target: 'team/executor.md' },
32
+ { source: 'atris/team/validator.md', target: 'team/validator.md' },
33
+ { source: 'atris/team/launcher.md', target: 'team/launcher.md' },
34
+ { source: 'atris/team/brainstormer.md', target: 'team/brainstormer.md' },
35
35
  { source: 'atris/policies/ANTISLOP.md', target: 'policies/ANTISLOP.md' }
36
36
  ];
37
37
 
@@ -14,7 +14,7 @@ async function planAtris(userInput = null) {
14
14
  const executionMode = executeFlag ? 'agent' : (config.execution_mode || 'prompt');
15
15
 
16
16
  const targetDir = path.join(process.cwd(), 'atris');
17
- const navigatorFile = path.join(targetDir, 'agent_team', 'navigator.md');
17
+ const navigatorFile = path.join(targetDir, 'team', 'navigator.md');
18
18
  const personaPath = path.join(targetDir, 'PERSONA.md');
19
19
  const mapFilePath = path.join(targetDir, 'MAP.md');
20
20
  const featuresReadmePath = path.join(targetDir, 'features', 'README.md');
@@ -307,7 +307,7 @@ async function doAtris() {
307
307
 
308
308
  const cwd = process.cwd();
309
309
  const targetDir = path.join(cwd, 'atris');
310
- const executorFile = path.join(targetDir, 'agent_team', 'executor.md');
310
+ const executorFile = path.join(targetDir, 'team', 'executor.md');
311
311
 
312
312
  if (!fs.existsSync(executorFile)) {
313
313
  console.log('✗ executor.md not found. Run "atris init" first.');
@@ -676,7 +676,7 @@ async function reviewAtris() {
676
676
  const executionMode = executeFlag ? 'agent' : (config.execution_mode || 'prompt');
677
677
 
678
678
  const targetDir = path.join(process.cwd(), 'atris');
679
- const validatorFile = path.join(targetDir, 'agent_team', 'validator.md');
679
+ const validatorFile = path.join(targetDir, 'team', 'validator.md');
680
680
 
681
681
  if (!fs.existsSync(validatorFile)) {
682
682
  console.log('✗ validator.md not found. Run "atris init" first.');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atris",
3
- "version": "2.0.21",
3
+ "version": "2.1.0",
4
4
  "description": "atrisDev (atris dev) - CLI for AI coding agents. Works with Claude Code, Cursor, Windsurf. Make any codebase AI-navigable.",
5
5
  "main": "bin/atris.js",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "PERSONA.md",
18
18
  "atris/CLAUDE.md",
19
19
  "atris/GEMINI.md",
20
- "atris/agent_team/",
20
+ "atris/team/",
21
21
  "atris/features/_templates/",
22
22
  "atris/policies/",
23
23
  "atris/skills/"
File without changes
File without changes
File without changes
File without changes
File without changes