atris 2.0.2 → 2.0.4
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/atris/GETTING_STARTED.md
CHANGED
|
@@ -43,7 +43,7 @@ The agent will:
|
|
|
43
43
|
4. Execute step by step
|
|
44
44
|
5. Review and update docs (2-pass validation)
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
Tip: Use `atris brainstorm` if you're exploring options. Use `atris plan` when ready to build.
|
|
47
47
|
|
|
48
48
|
**Total time: Start building immediately**
|
|
49
49
|
|
|
@@ -71,6 +71,7 @@ Feature complete. Ready for review? (y/n)
|
|
|
71
71
|
3. **Check MAP.md** — Verify file paths exist, update if structure changed
|
|
72
72
|
4. **Run tests after changes** — Catch issues immediately
|
|
73
73
|
5. **No shortcuts** — Follow the build.md steps exactly
|
|
74
|
+
6. **Anti-slop aware** — Read `atris/policies/ANTISLOP.md` before writing. No sparkles, no filler, no purple prose.
|
|
74
75
|
|
|
75
76
|
---
|
|
76
77
|
|
|
@@ -26,12 +26,15 @@ After executor finishes:
|
|
|
26
26
|
├─────────────────────────────────────┤
|
|
27
27
|
│ ✓ Matches build.md spec │
|
|
28
28
|
│ ✓ All tests pass │
|
|
29
|
-
│ ✓ No breaking changes
|
|
29
|
+
│ ✓ No breaking changes │
|
|
30
30
|
│ ✓ MAP.md updated (if needed) │
|
|
31
31
|
│ ✓ Error handling present │
|
|
32
|
+
│ ✓ Anti-slop check (see below) │
|
|
32
33
|
└─────────────────────────────────────┘
|
|
33
34
|
```
|
|
34
35
|
|
|
36
|
+
**Anti-slop gate:** Run `atris/policies/ANTISLOP.md` checklist on all output. Block if violations.
|
|
37
|
+
|
|
35
38
|
**Final ASCII:**
|
|
36
39
|
```
|
|
37
40
|
┌─────────────────────────────────────┐
|
package/atris/atris.md
CHANGED
|
@@ -434,7 +434,7 @@ After MAP.md generation, agents receive project context injection (framework, ke
|
|
|
434
434
|
- **C1:** Fixed bidirectional journal sync
|
|
435
435
|
- Problem: Web edits didn't sync to CLI
|
|
436
436
|
- Solution: Added auto-pull when web is newer + local unchanged
|
|
437
|
-
- Impact: Users can edit on web (mobile) and sync
|
|
437
|
+
- Impact: Users can edit on web (mobile) and changes sync automatically
|
|
438
438
|
|
|
439
439
|
## In Progress 🔄
|
|
440
440
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# ANTISLOP.md — Output Quality Checklist
|
|
2
|
+
|
|
3
|
+
> **Used by:** Validator (review gate), Executor (awareness before writing)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The Checklist
|
|
8
|
+
|
|
9
|
+
Before shipping any output, verify:
|
|
10
|
+
|
|
11
|
+
### Language
|
|
12
|
+
- [ ] No sparkles or decorative emoji (✨ 🚀 💡 🎯)
|
|
13
|
+
- [ ] No em dashes (—) unless direct quote or title separator
|
|
14
|
+
- [ ] No ellipsis for drama (...)
|
|
15
|
+
- [ ] No exclamation points unless error/warning
|
|
16
|
+
|
|
17
|
+
### Words to Kill
|
|
18
|
+
- [ ] No "revolutionary" / "game-changing" / "cutting-edge"
|
|
19
|
+
- [ ] No "seamlessly" / "effortlessly" / "elegantly"
|
|
20
|
+
- [ ] No "robust" / "powerful" / "comprehensive"
|
|
21
|
+
- [ ] No "leverage" (use "use")
|
|
22
|
+
- [ ] No "utilize" (use "use")
|
|
23
|
+
- [ ] No "facilitate" (use "help" or "enable")
|
|
24
|
+
|
|
25
|
+
### Filler Phrases to Cut
|
|
26
|
+
- [ ] No "It's worth noting that..."
|
|
27
|
+
- [ ] No "Importantly, ..."
|
|
28
|
+
- [ ] No "Interestingly, ..."
|
|
29
|
+
- [ ] No "As you can see..."
|
|
30
|
+
- [ ] No "In order to..." (just "to")
|
|
31
|
+
- [ ] No "Basically, ..." / "Essentially, ..."
|
|
32
|
+
- [ ] No "At the end of the day..."
|
|
33
|
+
|
|
34
|
+
### Structure
|
|
35
|
+
- [ ] Max 3-4 sentences per response (unless code/data)
|
|
36
|
+
- [ ] No unnecessary headers in short responses
|
|
37
|
+
- [ ] No bullet points when a sentence works
|
|
38
|
+
- [ ] No "Here's what I found:" preambles - just show it
|
|
39
|
+
|
|
40
|
+
### Tone
|
|
41
|
+
- [ ] Direct, not performative
|
|
42
|
+
- [ ] Statements, not hedging ("This might be..." → "This is...")
|
|
43
|
+
- [ ] No apologetic openings ("I apologize for...")
|
|
44
|
+
- [ ] No sycophantic praise ("Great question!")
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## How to Use
|
|
49
|
+
|
|
50
|
+
**Validator:** Run through checklist during review. Block if violations found.
|
|
51
|
+
|
|
52
|
+
**Executor:** Read before writing. Internalize. Produce clean output first time.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Examples
|
|
57
|
+
|
|
58
|
+
**Slop:**
|
|
59
|
+
> ✨ Great question! It's worth noting that this revolutionary approach seamlessly leverages our robust API to effortlessly facilitate user authentication. Essentially, at the end of the day, this is a game-changing solution!
|
|
60
|
+
|
|
61
|
+
**Clean:**
|
|
62
|
+
> Auth happens in `middleware/auth.ts:15-30`. Token validation, then user lookup. Returns 401 on failure.
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
**Anti-slop = Respect for the reader's time.**
|
package/commands/init.js
CHANGED
|
@@ -356,35 +356,69 @@ function initAtris() {
|
|
|
356
356
|
console.log('✓ Injected project patterns into agent_team specs');
|
|
357
357
|
|
|
358
358
|
// Create agent instruction files for different tools
|
|
359
|
-
const agentInstructions = `#
|
|
359
|
+
const agentInstructions = `# AGENTS.md — Universal Agent Instructions
|
|
360
360
|
|
|
361
|
-
|
|
361
|
+
> Works with: Claude Code, Cursor, Codex, Windsurf, and any AI coding agent.
|
|
362
|
+
|
|
363
|
+
## Quick Start
|
|
362
364
|
|
|
363
365
|
\`\`\`bash
|
|
364
366
|
atris
|
|
365
367
|
\`\`\`
|
|
366
368
|
|
|
367
|
-
|
|
369
|
+
Run this first. Follow the output.
|
|
370
|
+
|
|
371
|
+
## Core Files
|
|
372
|
+
|
|
373
|
+
| File | Purpose |
|
|
374
|
+
|------|---------|
|
|
375
|
+
| \`atris/PERSONA.md\` | Communication style (read first) |
|
|
376
|
+
| \`atris/TODO.md\` | Current tasks |
|
|
377
|
+
| \`atris/MAP.md\` | Navigation (where is X?) |
|
|
368
378
|
|
|
369
379
|
## Workflow
|
|
370
380
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
381
|
+
\`\`\`
|
|
382
|
+
PLAN → atris plan (break ideas into tasks)
|
|
383
|
+
BUILD → atris do (execute tasks)
|
|
384
|
+
CHECK → atris review (verify + cleanup)
|
|
385
|
+
\`\`\`
|
|
386
|
+
|
|
387
|
+
## Rules
|
|
388
|
+
|
|
389
|
+
- [ ] 3-4 sentences max per response
|
|
390
|
+
- [ ] Use ASCII visuals for planning
|
|
391
|
+
- [ ] Check MAP.md before touching code
|
|
392
|
+
- [ ] Claim tasks in TODO.md before working
|
|
393
|
+
- [ ] Delete tasks when done
|
|
378
394
|
|
|
379
|
-
|
|
395
|
+
## Anti-patterns
|
|
380
396
|
|
|
381
|
-
|
|
397
|
+
- Don't explore codebase manually (use MAP.md)
|
|
398
|
+
- Don't skip visualization step
|
|
399
|
+
- Don't leave stale tasks
|
|
400
|
+
- Don't write verbose docs
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
**Protocol:** See \`atris/atris.md\` for full spec.`;
|
|
405
|
+
|
|
406
|
+
// .cursorrules for Cursor (legacy)
|
|
382
407
|
const cursorRulesFile = path.join(process.cwd(), '.cursorrules');
|
|
383
408
|
if (!fs.existsSync(cursorRulesFile)) {
|
|
384
409
|
fs.writeFileSync(cursorRulesFile, agentInstructions);
|
|
385
410
|
console.log('✓ Created .cursorrules (for Cursor)');
|
|
386
411
|
}
|
|
387
412
|
|
|
413
|
+
// .cursor/rules/atris.mdc for Cursor (new format)
|
|
414
|
+
const cursorRulesDir = path.join(process.cwd(), '.cursor', 'rules');
|
|
415
|
+
const cursorMdcFile = path.join(cursorRulesDir, 'atris.mdc');
|
|
416
|
+
if (!fs.existsSync(cursorMdcFile)) {
|
|
417
|
+
fs.mkdirSync(cursorRulesDir, { recursive: true });
|
|
418
|
+
fs.writeFileSync(cursorMdcFile, agentInstructions);
|
|
419
|
+
console.log('✓ Created .cursor/rules/atris.mdc (for Cursor)');
|
|
420
|
+
}
|
|
421
|
+
|
|
388
422
|
// AGENTS.md for Codex
|
|
389
423
|
const agentsMdFile = path.join(process.cwd(), 'AGENTS.md');
|
|
390
424
|
if (!fs.existsSync(agentsMdFile)) {
|
|
@@ -392,6 +426,52 @@ DO NOT explore the codebase manually. Run \`atris\` first, then follow its instr
|
|
|
392
426
|
console.log('✓ Created AGENTS.md (for Codex)');
|
|
393
427
|
}
|
|
394
428
|
|
|
429
|
+
// .claude/commands/atris.md for Claude Code
|
|
430
|
+
const claudeCommandsDir = path.join(process.cwd(), '.claude', 'commands');
|
|
431
|
+
const claudeCommandFile = path.join(claudeCommandsDir, 'atris.md');
|
|
432
|
+
if (!fs.existsSync(claudeCommandFile)) {
|
|
433
|
+
fs.mkdirSync(claudeCommandsDir, { recursive: true });
|
|
434
|
+
const claudeCommand = `---
|
|
435
|
+
description: Activate ATRIS context - loads TODO.md, journal, and persona
|
|
436
|
+
allowed-tools: Read, Bash, Glob, Grep
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
Read @AGENTS.md then run \`atris\` command.
|
|
440
|
+
|
|
441
|
+
Follow the workflow: plan → do → review
|
|
442
|
+
|
|
443
|
+
Rules: 3-4 sentences max, ASCII visuals, check MAP.md first.`;
|
|
444
|
+
fs.writeFileSync(claudeCommandFile, claudeCommand);
|
|
445
|
+
console.log('✓ Created .claude/commands/atris.md (for Claude Code)');
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// .claude/skills/atris/SKILL.md for Claude Code
|
|
449
|
+
const claudeSkillsDir = path.join(process.cwd(), '.claude', 'skills', 'atris');
|
|
450
|
+
const claudeSkillFile = path.join(claudeSkillsDir, 'SKILL.md');
|
|
451
|
+
if (!fs.existsSync(claudeSkillFile)) {
|
|
452
|
+
fs.mkdirSync(claudeSkillsDir, { recursive: true });
|
|
453
|
+
const claudeSkill = `---
|
|
454
|
+
name: atris
|
|
455
|
+
description: ATRIS workspace navigation. Triggers on: atris, TODO, tasks, MAP.md, backlog, "where is X?"
|
|
456
|
+
allowed-tools: Read, Bash, Glob, Grep, Write, Edit
|
|
457
|
+
---
|
|
458
|
+
|
|
459
|
+
# ATRIS Skill
|
|
460
|
+
|
|
461
|
+
Read @AGENTS.md for instructions.
|
|
462
|
+
|
|
463
|
+
Detect: Project has \`atris/\` folder with MAP.md, TODO.md, PERSONA.md
|
|
464
|
+
|
|
465
|
+
Workflow: plan → do → review
|
|
466
|
+
|
|
467
|
+
Key behaviors:
|
|
468
|
+
- Read PERSONA.md (3-4 sentences, ASCII visuals)
|
|
469
|
+
- Check MAP.md for file:line refs
|
|
470
|
+
- Update TODO.md (claim tasks, delete when done)`;
|
|
471
|
+
fs.writeFileSync(claudeSkillFile, claudeSkill);
|
|
472
|
+
console.log('✓ Created .claude/skills/atris/SKILL.md (for Claude Code)');
|
|
473
|
+
}
|
|
474
|
+
|
|
395
475
|
// CLAUDE.md for Claude Code (copy from atris/)
|
|
396
476
|
const claudeMdSource = path.join(__dirname, '..', 'atris', 'CLAUDE.md');
|
|
397
477
|
const claudeMdFile = path.join(targetDir, 'CLAUDE.md');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "atris",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.4",
|
|
4
4
|
"description": "atrisDev - A new way to build and manage agents",
|
|
5
5
|
"main": "bin/atris.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"atris.md",
|
|
16
16
|
"GETTING_STARTED.md",
|
|
17
17
|
"PERSONA.md",
|
|
18
|
-
"atris/agent_team/"
|
|
18
|
+
"atris/agent_team/",
|
|
19
|
+
"atris/policies/"
|
|
19
20
|
],
|
|
20
21
|
"scripts": {
|
|
21
22
|
"test": "echo \"Error: no test specified\" && exit 1"
|