atris 2.1.0 โ 2.2.1
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/AGENT.md +35 -0
- package/AGENTS.md +46 -0
- package/GETTING_STARTED.md +2 -2
- package/PERSONA.md +5 -1
- package/README.md +16 -8
- package/atris/AGENTS.md +25 -0
- package/atris/GEMINI.md +8 -0
- package/atris/GETTING_STARTED.md +2 -2
- package/atris/atris.md +4 -3
- package/atris/features/README.md +41 -15
- package/atris/policies/LESSONS.md +1 -0
- package/atris/skills/README.md +45 -14
- package/atris/skills/atris/SKILL.md +7 -0
- package/atris/skills/autopilot/SKILL.md +9 -4
- package/atris/skills/autopilot/atris-autopilot.md +71 -0
- package/atris/skills/autopilot/hooks/stop-hook.sh +79 -0
- package/atris/skills/backend/SKILL.md +6 -1
- package/atris/skills/calendar/SKILL.md +301 -0
- package/atris/skills/clawhub/atris/SKILL.md +121 -0
- package/atris/skills/copy-editor/SKILL.md +470 -0
- package/atris/skills/design/SKILL.md +5 -1
- package/atris/skills/drive/SKILL.md +333 -0
- package/atris/skills/email-agent/SKILL.md +376 -0
- package/atris/skills/memory/SKILL.md +8 -0
- package/atris/skills/meta/SKILL.md +4 -0
- package/atris/skills/skill-improver/SKILL.md +147 -0
- package/atris/skills/writing/SKILL.md +3 -0
- package/atris/team/brainstormer.md +1 -0
- package/atris/team/executor.md +27 -0
- package/atris/team/launcher.md +1 -0
- package/atris/team/navigator.md +44 -5
- package/atris/team/validator.md +44 -3
- package/atris.md +37 -1
- package/bin/atris.js +58 -5
- package/commands/auth.js +24 -4
- package/commands/init.js +140 -17
- package/commands/integrations.js +330 -0
- package/commands/skill.js +496 -0
- package/commands/status.js +9 -1
- package/commands/sync.js +64 -19
- package/commands/workflow.js +7 -0
- package/package.json +4 -2
- package/utils/auth.js +33 -0
- package/commands/stubs.txt +0 -10
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory
|
|
3
|
+
description: Search and reason over Atris journal history. Use when user asks about past work, decisions, history, or patterns. Uses RLM pattern (grep first, reason second).
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags:
|
|
6
|
+
- memory
|
|
7
|
+
---
|
|
8
|
+
|
|
1
9
|
# Atris Memory Skill
|
|
2
10
|
|
|
3
11
|
Search and reason over Atris journal history using the RLM pattern (grep first, reason second).
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: meta
|
|
3
3
|
description: Metacognition skill for AI agents. Use when starting work, feeling stuck, output feels off, or before complex tasks. Teaches how to think about thinking.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags:
|
|
6
|
+
- meta
|
|
7
|
+
- metacognition
|
|
4
8
|
---
|
|
5
9
|
|
|
6
10
|
# Meta Skill
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-improver
|
|
3
|
+
description: Audit and improve Claude skills against the Anthropic skill guide. Use when creating new skills, improving existing ones, or preparing skills for ClawHub distribution. Triggers on skill audit, improve skill, new skill, skill quality, or ClawHub publish.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
tags:
|
|
6
|
+
- developer-tools
|
|
7
|
+
- skill-management
|
|
8
|
+
- quality
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill Improver
|
|
12
|
+
|
|
13
|
+
Audit and improve skills to match the Anthropic skill guide standard.
|
|
14
|
+
|
|
15
|
+
## When to activate
|
|
16
|
+
|
|
17
|
+
- User wants to create a new skill
|
|
18
|
+
- User wants to improve an existing skill
|
|
19
|
+
- Preparing a skill for ClawHub or external distribution
|
|
20
|
+
- After `atris skill audit` reports warnings or failures
|
|
21
|
+
|
|
22
|
+
## The standard
|
|
23
|
+
|
|
24
|
+
A well-formed skill has:
|
|
25
|
+
|
|
26
|
+
1. YAML frontmatter with `name` (kebab-case, matches folder), `description` (WHAT + WHEN + triggers, under 1024 chars), `version` (semver), `tags`
|
|
27
|
+
2. No XML tags anywhere in the file
|
|
28
|
+
3. Clear numbered instructions with concrete steps
|
|
29
|
+
4. Error handling guidance
|
|
30
|
+
5. Examples of input and expected output
|
|
31
|
+
6. Under 5000 words in SKILL.md (move detail to `references/` subdirectory)
|
|
32
|
+
|
|
33
|
+
## Audit process
|
|
34
|
+
|
|
35
|
+
1. Run `atris skill audit [name]` for mechanical checks (12 automated checks)
|
|
36
|
+
2. Read the SKILL.md for qualitative issues:
|
|
37
|
+
- Is the description specific enough to trigger correctly?
|
|
38
|
+
- Do instructions have concrete steps, not vague guidance?
|
|
39
|
+
- Are there before/after examples?
|
|
40
|
+
- Is error handling covered?
|
|
41
|
+
- Would a new agent understand this without extra context?
|
|
42
|
+
3. Score: mechanical (CLI) + qualitative (your judgment)
|
|
43
|
+
|
|
44
|
+
## Fixing common problems
|
|
45
|
+
|
|
46
|
+
### Weak descriptions
|
|
47
|
+
|
|
48
|
+
Bad: "Essay writing skill. Triggers on: essay, draft"
|
|
49
|
+
|
|
50
|
+
Good: "Structured essay writing with approval gates at each stage (inbox, outline, panel, write, passes). Use when writing essays, drafts, outlines, or long-form content. Triggers on essay, draft, write, outline, or long-form."
|
|
51
|
+
|
|
52
|
+
Pattern: WHAT it does (1 sentence) + WHEN to use it (1 sentence) + trigger words woven in.
|
|
53
|
+
|
|
54
|
+
### Missing trigger phrases
|
|
55
|
+
|
|
56
|
+
Triggers go IN the description field, not as a separate `triggers` key. The Anthropic spec only recognizes `name` and `description` as required fields.
|
|
57
|
+
|
|
58
|
+
### Vague instructions
|
|
59
|
+
|
|
60
|
+
Bad: "Follow the writing process"
|
|
61
|
+
|
|
62
|
+
Good:
|
|
63
|
+
1. Capture raw ideas in inbox format
|
|
64
|
+
2. Build topic skeleton with evidence slots
|
|
65
|
+
3. Run panel review (AI challenges claims, user approves)
|
|
66
|
+
4. Write section by section, getting approval at each gate
|
|
67
|
+
5. Run three passes: argument (AI), read-aloud (human), sanity (both)
|
|
68
|
+
|
|
69
|
+
### Name mismatch
|
|
70
|
+
|
|
71
|
+
The `name` field must match the folder name exactly. Folder `backend` needs `name: backend`, not `name: atris-backend`.
|
|
72
|
+
|
|
73
|
+
### XML tags in content
|
|
74
|
+
|
|
75
|
+
XML-style tags (angle brackets around words) are forbidden. Replace them with bracket notation like `[text]` or plain text. The skill system rejects XML in SKILL.md content.
|
|
76
|
+
|
|
77
|
+
## Creating a new skill
|
|
78
|
+
|
|
79
|
+
1. Create folder: `atris/skills/[kebab-name]/`
|
|
80
|
+
2. Create `SKILL.md` with this template:
|
|
81
|
+
|
|
82
|
+
```markdown
|
|
83
|
+
---
|
|
84
|
+
name: your-skill-name
|
|
85
|
+
description: What this skill does. Use when [specific scenarios]. Triggers on [keywords].
|
|
86
|
+
version: 1.0.0
|
|
87
|
+
tags:
|
|
88
|
+
- tag-one
|
|
89
|
+
- tag-two
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
# Your Skill Name
|
|
93
|
+
|
|
94
|
+
One-line summary of what this skill does.
|
|
95
|
+
|
|
96
|
+
## When to activate
|
|
97
|
+
|
|
98
|
+
- Scenario 1
|
|
99
|
+
- Scenario 2
|
|
100
|
+
|
|
101
|
+
## Instructions
|
|
102
|
+
|
|
103
|
+
### Step 1: [First action]
|
|
104
|
+
|
|
105
|
+
Concrete explanation with example.
|
|
106
|
+
|
|
107
|
+
### Step 2: [Second action]
|
|
108
|
+
|
|
109
|
+
Concrete explanation with example.
|
|
110
|
+
|
|
111
|
+
## Examples
|
|
112
|
+
|
|
113
|
+
### Example 1: [Common scenario]
|
|
114
|
+
|
|
115
|
+
User says: "..."
|
|
116
|
+
Actions: ...
|
|
117
|
+
Result: ...
|
|
118
|
+
|
|
119
|
+
## Troubleshooting
|
|
120
|
+
|
|
121
|
+
### Error: [Common problem]
|
|
122
|
+
Cause: [Why]
|
|
123
|
+
Fix: [How]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
3. Run `atris skill audit [name]` to validate
|
|
127
|
+
4. Run `atris update` to symlink to `.claude/skills/`
|
|
128
|
+
|
|
129
|
+
## Quality tiers
|
|
130
|
+
|
|
131
|
+
- **Bronze**: Passes all 12 mechanical checks from `atris skill audit`
|
|
132
|
+
- **Silver**: Bronze + good description + numbered steps + examples
|
|
133
|
+
- **Gold**: Silver + error handling + progressive disclosure + tested in production
|
|
134
|
+
|
|
135
|
+
Gold standard reference: `atris/skills/clawhub/atris/SKILL.md`
|
|
136
|
+
|
|
137
|
+
## Distribution checklist
|
|
138
|
+
|
|
139
|
+
Before publishing to ClawHub or sharing externally:
|
|
140
|
+
|
|
141
|
+
1. All 12 audit checks pass (`atris skill audit [name]`)
|
|
142
|
+
2. Description under 1024 chars, includes WHAT + WHEN + triggers
|
|
143
|
+
3. Version field set (semver)
|
|
144
|
+
4. Tags present (3-5 relevant tags)
|
|
145
|
+
5. No internal references (paths must be relative, no hardcoded project paths)
|
|
146
|
+
6. No README.md inside the skill folder
|
|
147
|
+
7. SKILL.md is self-contained or uses `references/` for supplementary docs
|
package/atris/team/executor.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# executor.md โ Builder (The Trigger)
|
|
2
2
|
|
|
3
3
|
> **Role:** Execute from build.md, one step at a time | **Source:** build.md, MAP.md
|
|
4
|
+
> **Style:** Read `atris/PERSONA.md` for communication style.
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
@@ -85,6 +86,32 @@ Feature complete. Ready for review? (y/n)
|
|
|
85
86
|
4. **Run tests after changes** โ Catch issues immediately
|
|
86
87
|
5. **No shortcuts** โ Follow the build.md steps exactly
|
|
87
88
|
6. **Anti-slop aware** โ Read `atris/policies/ANTISLOP.md` before writing. No sparkles, no filler, no purple prose.
|
|
89
|
+
7. **Stay in scope** โ Only touch files listed in the task. If you need to change something outside scope, stop and flag it. That's a new task.
|
|
90
|
+
8. **If no exit condition, stop** โ A task without a clear "done" definition is not ready for execution. Send it back to navigator.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## After Each Task
|
|
95
|
+
|
|
96
|
+
Report what you learned in 1-2 sentences. What did you discover about the codebase? What was surprising? This compounds context for the next task.
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Done: [what was completed]
|
|
100
|
+
Learned: [what you now know that you didn't before]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Update validate.md
|
|
104
|
+
|
|
105
|
+
After building, update the feature's `validate.md`:
|
|
106
|
+
|
|
107
|
+
- **Context section** โ Add what you learned about the codebase during execution. File locations, patterns, gotchas. This is portable knowledge for the next agent.
|
|
108
|
+
- **Errors Hit section** โ If you hit errors, document what went wrong and why. This prevents the next agent from falling in the same hole.
|
|
109
|
+
|
|
110
|
+
Don't touch the Status or Checks sections. That's the validator's job.
|
|
111
|
+
|
|
112
|
+
## Two-Error Rule
|
|
113
|
+
|
|
114
|
+
If you hit two errors on the same task, **stop**. Don't debug from polluted context. Report what you know, update validate.md with the errors, and flag for re-scope. A fresh session with clean context and your notes will solve it faster than a tenth retry.
|
|
88
115
|
|
|
89
116
|
---
|
|
90
117
|
|
package/atris/team/launcher.md
CHANGED
package/atris/team/navigator.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# navigator.md โ Planner
|
|
2
2
|
|
|
3
3
|
> **Role:** Transform messy human intent into precise execution plans | **Source:** idea.md, MAP.md
|
|
4
|
+
> **Style:** Read `atris/PERSONA.md` for communication style.
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
@@ -21,16 +22,32 @@
|
|
|
21
22
|
|
|
22
23
|
When the human gives you an idea (messy, conversational, exploratory):
|
|
23
24
|
|
|
24
|
-
1. **
|
|
25
|
-
2. **
|
|
26
|
-
3. **
|
|
27
|
-
4. **
|
|
28
|
-
5. **
|
|
25
|
+
1. **Scout first** โ Read the relevant files in the codebase. Understand what exists before you plan what's next. Report what you found in 2-3 sentences.
|
|
26
|
+
2. **Extract intent** โ What are they trying to build? Why?
|
|
27
|
+
3. **Generate atris visualization** โ Show them exactly what will happen (frontend boxes / backend flow / database tables)
|
|
28
|
+
4. **Confirm** โ "Is THIS what you meant?" (y/n)
|
|
29
|
+
5. **Create idea.md** โ Save their messy intent to `atris/features/[name]/idea.md`
|
|
30
|
+
6. **Generate build.md** โ Create technical spec in `atris/features/[name]/build.md`
|
|
29
31
|
|
|
30
32
|
**DO NOT execute.** You plan. Executor builds.
|
|
31
33
|
|
|
32
34
|
---
|
|
33
35
|
|
|
36
|
+
## Task Scoping
|
|
37
|
+
|
|
38
|
+
Every task you create must be:
|
|
39
|
+
|
|
40
|
+
- **One job.** Single file scope or single function scope. If it touches 4+ files, break it into multiple tasks.
|
|
41
|
+
- **Clear exit condition.** State what "done" looks like in one sentence.
|
|
42
|
+
- **Tagged.** Mark each task `[explore]` or `[execute]`:
|
|
43
|
+
- `[explore]` โ Read code, research, understand. Output is knowledge.
|
|
44
|
+
- `[execute]` โ Build, change, create. Output is code or artifact.
|
|
45
|
+
- **Sequenced.** Put `[explore]` tasks first. They inform the `[execute]` tasks that follow.
|
|
46
|
+
|
|
47
|
+
If you can't write a clear exit condition, the task is too vague. Break it down further or start with an `[explore]` task to clarify.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
34
51
|
## atris Visualization Patterns
|
|
35
52
|
|
|
36
53
|
Use these for 99% of dev work:
|
|
@@ -102,6 +119,27 @@ tests:
|
|
|
102
119
|
- test scenario 2
|
|
103
120
|
```
|
|
104
121
|
|
|
122
|
+
**validate.md:**
|
|
123
|
+
```markdown
|
|
124
|
+
# Feature Name โ Validation
|
|
125
|
+
|
|
126
|
+
## Status
|
|
127
|
+
v0 โ planned YYYY-MM-DD
|
|
128
|
+
Exit condition: [what "done" looks like in one sentence]
|
|
129
|
+
|
|
130
|
+
## Checks
|
|
131
|
+
- [verifiable step: run X, expect Y]
|
|
132
|
+
- [verifiable step: check Z]
|
|
133
|
+
|
|
134
|
+
## Context
|
|
135
|
+
[empty until executor fills in learnings]
|
|
136
|
+
|
|
137
|
+
## Errors Hit
|
|
138
|
+
[empty until executor reports failures]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Navigator creates validate.md with Status (v0 โ planned) and Checks. The executor fills in Context and Errors as it builds. The validator updates Status to v1 โ shipped when it passes.
|
|
142
|
+
|
|
105
143
|
---
|
|
106
144
|
|
|
107
145
|
## Rules
|
|
@@ -114,6 +152,7 @@ tests:
|
|
|
114
152
|
6. **Free-flow works** โ Even exploratory conversations go through this flow
|
|
115
153
|
|
|
116
154
|
**Before creating new feature:**
|
|
155
|
+
- Read `atris/lessons.md` for relevant patterns โ if a past lesson applies, reference it as a constraint in idea.md
|
|
117
156
|
- Read atris/features/README.md
|
|
118
157
|
- Search keywords for similar features
|
|
119
158
|
- If exists: extend it, don't duplicate
|
package/atris/team/validator.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# validator.md โ Reviewer (The Safety)
|
|
2
2
|
|
|
3
3
|
> **Role:** Validate execution, update docs, ensure quality | **Source:** build.md, MAP.md, code
|
|
4
|
+
> **Style:** Read `atris/PERSONA.md` for communication style.
|
|
4
5
|
|
|
5
6
|
---
|
|
6
7
|
|
|
@@ -84,17 +85,43 @@ Before approving, think 3 times:
|
|
|
84
85
|
- All steps completed?
|
|
85
86
|
- Nothing skipped?
|
|
86
87
|
|
|
87
|
-
**Think 2:
|
|
88
|
+
**Think 2: Scope Check**
|
|
89
|
+
- Did the executor stay in scope? Only files listed in the task should be touched.
|
|
90
|
+
- Was the task actually one job? If it sprawled into multiple concerns, flag it.
|
|
91
|
+
- Did the exit condition get met? Not "close enough" โ exactly met.
|
|
92
|
+
|
|
93
|
+
**Think 3: Edge Cases**
|
|
88
94
|
- What could break?
|
|
89
95
|
- Error handling present?
|
|
90
96
|
- Boundary conditions covered?
|
|
91
97
|
|
|
92
|
-
**Think
|
|
98
|
+
**Think 4: Integration**
|
|
93
99
|
- Does it work with existing code?
|
|
94
100
|
- Breaking changes?
|
|
95
101
|
- Dependencies still valid?
|
|
96
102
|
|
|
97
|
-
**Then decide:** Approve or block.
|
|
103
|
+
**Then decide:** Approve or block. If scope crept, block and split into proper tasks.
|
|
104
|
+
|
|
105
|
+
## Update validate.md
|
|
106
|
+
|
|
107
|
+
When a feature passes validation:
|
|
108
|
+
|
|
109
|
+
1. **Update Status** โ Change from `v0 โ planned` to `v1 โ shipped YYYY-MM-DD` with the exit condition that was met.
|
|
110
|
+
2. **Verify Checks** โ Run every check in the Checks section. All must pass.
|
|
111
|
+
3. **Review Context** โ Make sure the executor's learnings are useful for future agents.
|
|
112
|
+
4. **Review Errors** โ If errors were hit, confirm the root cause is documented.
|
|
113
|
+
|
|
114
|
+
When iterating on a shipped feature, append the new version:
|
|
115
|
+
```
|
|
116
|
+
## Status
|
|
117
|
+
v2 โ shipped 2026-02-15
|
|
118
|
+
Exit condition: Rate limiting active, 429 after 100 req/min.
|
|
119
|
+
|
|
120
|
+
v1 โ shipped 2026-02-07
|
|
121
|
+
Exit condition: Unauthenticated requests return 401, test passes.
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Status is the scoreboard. One line per version. Anyone can look at validate.md and know exactly what state the feature is in.
|
|
98
125
|
|
|
99
126
|
---
|
|
100
127
|
|
|
@@ -118,4 +145,18 @@ One-line description
|
|
|
118
145
|
|
|
119
146
|
---
|
|
120
147
|
|
|
148
|
+
## Harvest Lessons
|
|
149
|
+
|
|
150
|
+
After validation, ask yourself: **did anything surprise me?** Something broke unexpectedly, worked differently than planned, or revealed a pattern worth remembering.
|
|
151
|
+
|
|
152
|
+
If yes, append to `atris/lessons.md`:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
- **[YYYY-MM-DD] [feature-name]** โ (pass|fail) โ One-line lesson
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If nothing surprised you, don't write anything. A clean build with no surprises isn't a lesson โ it's the system working. Only capture what's genuinely useful for the next navigator reading this file.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
121
162
|
**Validator = The Safety. Ultrathink. Test. Approve only when perfect.**
|
package/atris.md
CHANGED
|
@@ -88,15 +88,34 @@ Stage: PLAN โ do โ review (capitalize current stage)
|
|
|
88
88
|
## WORKFLOW
|
|
89
89
|
|
|
90
90
|
```
|
|
91
|
-
plan โ do โ review
|
|
91
|
+
scout โ plan โ do โ review
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
- **SCOUT** โ Read relevant files first. Understand before you act. Report what you found.
|
|
94
95
|
- **PLAN** โ ASCII visualization, get approval, NO code yet
|
|
95
96
|
- **DO** โ Execute step-by-step, update journal
|
|
96
97
|
- **REVIEW** โ Test, validate, clean up, delete completed tasks
|
|
97
98
|
|
|
98
99
|
---
|
|
99
100
|
|
|
101
|
+
## TASK RULES
|
|
102
|
+
|
|
103
|
+
Every task must follow these rules. No exceptions.
|
|
104
|
+
|
|
105
|
+
**One job per task.** If a task touches more than 2-3 files, break it down. If you can't describe "done" in one sentence, it's too big.
|
|
106
|
+
|
|
107
|
+
**Clear exit condition.** Every task states what "done" looks like. Not "improve auth" โ instead: "Add session check to upload handler. Done when: unauthenticated requests return 401 and test passes."
|
|
108
|
+
|
|
109
|
+
**Tag every task:**
|
|
110
|
+
- `[explore]` โ Ambiguous. Needs reading, research, judgment. Output is understanding.
|
|
111
|
+
- `[execute]` โ Precise. Route is clear. Just do it. Output is code or artifact.
|
|
112
|
+
|
|
113
|
+
**Explore before execute.** When starting a new area of work, the first tasks should be `[explore]`. Read the files. Map the space. Report what you found. Then plan `[execute]` tasks based on what you learned.
|
|
114
|
+
|
|
115
|
+
**Sequence matters.** Order tasks so each one builds context for the next. Early tasks should teach you about the problem. Later tasks use that knowledge.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
100
119
|
## AGENTS
|
|
101
120
|
|
|
102
121
|
| Command | Agent | Guardrail |
|
|
@@ -168,6 +187,22 @@ Specs loaded at activate from `team/*.md`
|
|
|
168
187
|
|
|
169
188
|
---
|
|
170
189
|
|
|
190
|
+
## PERSISTENCE
|
|
191
|
+
|
|
192
|
+
Context window = cache. Disk = truth. Route discoveries as they happen.
|
|
193
|
+
|
|
194
|
+
| You discover... | Write to... | Format |
|
|
195
|
+
|---------------------|----------------------|----------------------|
|
|
196
|
+
| Code location | MAP.md | file:line reference |
|
|
197
|
+
| New task | TODO.md | Task + exit condition |
|
|
198
|
+
| Decision / tradeoff | Journal โ Notes | Timestamped line |
|
|
199
|
+
| Something learned | lessons.md | One-line lesson |
|
|
200
|
+
| Work finished | Journal โ Completed | C#: description |
|
|
201
|
+
|
|
202
|
+
Don't batch. Don't wait for session end. Nothing important should live only in-context.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
171
206
|
## RULES
|
|
172
207
|
|
|
173
208
|
- 3-4 sentences max
|
|
@@ -175,6 +210,7 @@ Specs loaded at activate from `team/*.md`
|
|
|
175
210
|
- Check MAP.md before touching code
|
|
176
211
|
- Update journal after completing work
|
|
177
212
|
- Delete tasks when done (target: 0)
|
|
213
|
+
- Persist as you go (see PERSISTENCE)
|
|
178
214
|
|
|
179
215
|
---
|
|
180
216
|
|
package/bin/atris.js
CHANGED
|
@@ -192,10 +192,22 @@ function showHelp() {
|
|
|
192
192
|
console.log('Cloud & agents:');
|
|
193
193
|
console.log(' agent - Select which Atris agent to use');
|
|
194
194
|
console.log(' chat - Chat with the selected Atris agent');
|
|
195
|
-
console.log(' login - Authenticate
|
|
195
|
+
console.log(' login - Authenticate (use --token <t> for non-interactive)');
|
|
196
196
|
console.log(' logout - Remove credentials');
|
|
197
197
|
console.log(' whoami - Show auth status');
|
|
198
198
|
console.log('');
|
|
199
|
+
console.log('Integrations:');
|
|
200
|
+
console.log(' gmail - Email commands (inbox, read)');
|
|
201
|
+
console.log(' calendar - Calendar commands (today, week)');
|
|
202
|
+
console.log(' twitter - Twitter commands (post)');
|
|
203
|
+
console.log(' slack - Slack commands (channels)');
|
|
204
|
+
console.log(' integrations - Show integration status');
|
|
205
|
+
console.log('');
|
|
206
|
+
console.log('Skills:');
|
|
207
|
+
console.log(' skill list - Show all skills with compliance status');
|
|
208
|
+
console.log(' skill audit [name] - Validate skill against Anthropic guide');
|
|
209
|
+
console.log(' skill fix [name] - Auto-fix common compliance issues');
|
|
210
|
+
console.log('');
|
|
199
211
|
console.log('Other:');
|
|
200
212
|
console.log(' version - Show Atris version');
|
|
201
213
|
console.log(' help - Show this help');
|
|
@@ -301,11 +313,13 @@ const { statusAtris: statusCmd } = require('../commands/status');
|
|
|
301
313
|
const { analyticsAtris: analyticsCmd } = require('../commands/analytics');
|
|
302
314
|
const { cleanAtris: cleanCmd } = require('../commands/clean');
|
|
303
315
|
const { verifyAtris: verifyCmd } = require('../commands/verify');
|
|
316
|
+
const { skillCommand: skillCmd } = require('../commands/skill');
|
|
304
317
|
|
|
305
318
|
// Check if this is a known command or natural language input
|
|
306
319
|
const knownCommands = ['init', 'log', 'status', 'analytics', 'visualize', 'brainstorm', 'autopilot', 'plan', 'do', 'review',
|
|
307
320
|
'activate', 'agent', 'chat', 'login', 'logout', 'whoami', 'update', 'upgrade', 'version', 'help', 'next', 'atris',
|
|
308
|
-
'clean', 'verify', 'search'
|
|
321
|
+
'clean', 'verify', 'search', 'skill',
|
|
322
|
+
'gmail', 'calendar', 'twitter', 'slack', 'integrations'];
|
|
309
323
|
|
|
310
324
|
// Check if command is an atris.md spec file - triggers welcome visualization
|
|
311
325
|
function isSpecFile(cmd) {
|
|
@@ -749,6 +763,43 @@ if (command === 'init') {
|
|
|
749
763
|
} else if (command === 'search') {
|
|
750
764
|
const keyword = process.argv.slice(3).join(' ');
|
|
751
765
|
searchJournal(keyword);
|
|
766
|
+
} else if (command === 'gmail') {
|
|
767
|
+
const { gmailCommand } = require('../commands/integrations');
|
|
768
|
+
const subcommand = process.argv[3];
|
|
769
|
+
const args = process.argv.slice(4);
|
|
770
|
+
gmailCommand(subcommand, ...args)
|
|
771
|
+
.then(() => process.exit(0))
|
|
772
|
+
.catch((err) => { console.error(err.message); process.exit(1); });
|
|
773
|
+
} else if (command === 'calendar') {
|
|
774
|
+
const { calendarCommand } = require('../commands/integrations');
|
|
775
|
+
const subcommand = process.argv[3];
|
|
776
|
+
const args = process.argv.slice(4);
|
|
777
|
+
calendarCommand(subcommand, ...args)
|
|
778
|
+
.then(() => process.exit(0))
|
|
779
|
+
.catch((err) => { console.error(err.message); process.exit(1); });
|
|
780
|
+
} else if (command === 'twitter') {
|
|
781
|
+
const { twitterCommand } = require('../commands/integrations');
|
|
782
|
+
const subcommand = process.argv[3];
|
|
783
|
+
const args = process.argv.slice(4);
|
|
784
|
+
twitterCommand(subcommand, ...args)
|
|
785
|
+
.then(() => process.exit(0))
|
|
786
|
+
.catch((err) => { console.error(err.message); process.exit(1); });
|
|
787
|
+
} else if (command === 'slack') {
|
|
788
|
+
const { slackCommand } = require('../commands/integrations');
|
|
789
|
+
const subcommand = process.argv[3];
|
|
790
|
+
const args = process.argv.slice(4);
|
|
791
|
+
slackCommand(subcommand, ...args)
|
|
792
|
+
.then(() => process.exit(0))
|
|
793
|
+
.catch((err) => { console.error(err.message); process.exit(1); });
|
|
794
|
+
} else if (command === 'integrations') {
|
|
795
|
+
const { integrationsStatus } = require('../commands/integrations');
|
|
796
|
+
integrationsStatus()
|
|
797
|
+
.then(() => process.exit(0))
|
|
798
|
+
.catch((err) => { console.error(err.message); process.exit(1); });
|
|
799
|
+
} else if (command === 'skill') {
|
|
800
|
+
const subcommand = process.argv[3];
|
|
801
|
+
const args = process.argv.slice(4);
|
|
802
|
+
skillCmd(subcommand, ...args);
|
|
752
803
|
} else {
|
|
753
804
|
console.log(`Unknown command: ${command}`);
|
|
754
805
|
console.log('Run "atris help" to see available commands');
|
|
@@ -1936,7 +1987,7 @@ async function loginAtris() {
|
|
|
1936
1987
|
process.exit(0);
|
|
1937
1988
|
} else if (choice === '2') {
|
|
1938
1989
|
console.log('\n๐ Manual Token Entry');
|
|
1939
|
-
console.log('Get your token from: https://
|
|
1990
|
+
console.log('Get your token from: https://atris.ai/auth/cli\n');
|
|
1940
1991
|
|
|
1941
1992
|
const tokenInput = await promptUser('Paste your API token: ');
|
|
1942
1993
|
|
|
@@ -2261,7 +2312,7 @@ async function agentAtris() {
|
|
|
2261
2312
|
const agents = result.data?.my_agents || [];
|
|
2262
2313
|
|
|
2263
2314
|
if (agents.length === 0) {
|
|
2264
|
-
console.log('No agents found. Create one at https://
|
|
2315
|
+
console.log('No agents found. Create one at https://atris.ai');
|
|
2265
2316
|
process.exit(0);
|
|
2266
2317
|
}
|
|
2267
2318
|
|
|
@@ -2564,13 +2615,15 @@ async function atrisDevEntry(userInput = null) {
|
|
|
2564
2615
|
if (existingFeatures.length > 0) {
|
|
2565
2616
|
console.log(' Existing: ' + existingFeatures.join(', '));
|
|
2566
2617
|
}
|
|
2567
|
-
console.log(' NEW feature โ atris/features/[name]/idea.md + build.md');
|
|
2618
|
+
console.log(' NEW feature โ atris/features/[name]/idea.md + build.md + validate.md');
|
|
2568
2619
|
console.log(' EXISTING โ Update that feature\'s docs');
|
|
2569
2620
|
console.log(' SIMPLE โ TODO.md only');
|
|
2570
2621
|
console.log('');
|
|
2571
2622
|
console.log('STEP 3: Create/update docs');
|
|
2572
2623
|
console.log(' idea.md = intent (any format)');
|
|
2573
2624
|
console.log(' build.md = technical spec');
|
|
2625
|
+
console.log(' validate.md = proof it works (from _templates/validate.md.template)');
|
|
2626
|
+
console.log(' lessons.md = read past lessons before planning, write new ones after validating');
|
|
2574
2627
|
console.log('');
|
|
2575
2628
|
console.log('โ DO NOT execute โ that\'s for "atris do"');
|
|
2576
2629
|
console.log('');
|
package/commands/auth.js
CHANGED
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
const { loadCredentials, saveCredentials, deleteCredentials, getCredentialsPath, openBrowser, promptUser, displayAccountSummary } = require('../utils/auth');
|
|
2
2
|
const { getAppBaseUrl, apiRequestJson } = require('../utils/api');
|
|
3
3
|
|
|
4
|
-
async function loginAtris() {
|
|
5
|
-
|
|
4
|
+
async function loginAtris(options = {}) {
|
|
5
|
+
// Support: atris login --token <token> --force
|
|
6
|
+
const args = process.argv.slice(3);
|
|
7
|
+
const forceFlag = args.includes('--force') || args.includes('-f') || options.force;
|
|
8
|
+
const tokenIndex = args.indexOf('--token');
|
|
9
|
+
const directToken = tokenIndex !== -1 ? args[tokenIndex + 1] : options.token;
|
|
10
|
+
|
|
6
11
|
try {
|
|
7
12
|
console.log('๐ Login to AtrisOS\n');
|
|
8
13
|
|
|
9
14
|
const existing = loadCredentials();
|
|
10
|
-
|
|
15
|
+
|
|
16
|
+
// Direct token mode (non-interactive)
|
|
17
|
+
if (directToken) {
|
|
18
|
+
const trimmed = directToken.trim();
|
|
19
|
+
saveCredentials(trimmed, null, existing?.email || null, existing?.user_id || null, existing?.provider || 'manual');
|
|
20
|
+
console.log('Token saved. Validatingโฆ\n');
|
|
21
|
+
const summary = await displayAccountSummary(apiRequestJson);
|
|
22
|
+
if (summary.error) {
|
|
23
|
+
console.log('\nโ ๏ธ Token saved, but validation failed.');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
console.log('\nโ Logged in successfully.');
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (existing && !forceFlag) {
|
|
11
31
|
const label = existing.email || existing.user_id || 'unknown user';
|
|
12
32
|
console.log(`Already logged in as: ${label}`);
|
|
13
33
|
const confirm = await promptUser('Do you want to login again? (y/N): ');
|
|
@@ -70,7 +90,7 @@ async function loginAtris() {
|
|
|
70
90
|
process.exit(0);
|
|
71
91
|
} else if (choice === '2') {
|
|
72
92
|
console.log('\n๐ Manual Token Entry');
|
|
73
|
-
console.log('Get your token from: https://
|
|
93
|
+
console.log('Get your token from: https://atris.ai/auth/cli\n');
|
|
74
94
|
|
|
75
95
|
const tokenInput = await promptUser('Paste your API token: ');
|
|
76
96
|
|