atris 3.30.1 → 3.30.3
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 +6 -0
- package/atris/AGENTS.md +11 -0
- package/atris/CLAUDE.md +5 -0
- package/atris/atris.md +19 -4
- package/atris/policies/atris-design.md +71 -0
- package/atris/policies/design-seed.md +187 -0
- package/atris/skills/atris/SKILL.md +26 -3
- package/atris/skills/design/SKILL.md +3 -2
- package/atris/skills/loop/SKILL.md +5 -3
- package/atris/team/_template/MEMBER.md +19 -0
- package/atris.md +63 -23
- package/ax +1434 -1698
- package/bin/atris.js +5 -1
- package/commands/agent-spawn.js +2 -2
- package/commands/brain.js +92 -7
- package/commands/brainstorm.js +62 -22
- package/commands/business-sync.js +92 -8
- package/commands/business.js +13 -7
- package/commands/chat-scan.js +102 -0
- package/commands/computer.js +758 -15
- package/commands/deck.js +505 -105
- package/commands/init.js +6 -1
- package/commands/launchpad.js +638 -0
- package/commands/log-sync.js +44 -13
- package/commands/loop-front.js +290 -0
- package/commands/member.js +124 -3
- package/commands/mission.js +717 -32
- package/commands/pull.js +37 -28
- package/commands/pulse.js +11 -8
- package/commands/run.js +79 -39
- package/commands/sync.js +36 -17
- package/commands/task.js +342 -66
- package/commands/xp.js +3 -0
- package/commands/youtube.js +221 -7
- package/decks/README.md +89 -0
- package/decks/archetype-catalog.json +180 -0
- package/decks/atris-antislop-pitch.json +48 -0
- package/decks/atris-archetypes-v2.json +83 -0
- package/decks/atris-one-loop-pitch.json +80 -0
- package/decks/atris-seed-pitch-v3.json +118 -0
- package/decks/atris-seed-pitch-v4-skeleton.json +106 -0
- package/decks/atris-seed-pitch-v5.json +109 -0
- package/decks/atris-seed-pitch-v6.json +137 -0
- package/decks/atris-seed-pitch-v7.json +133 -0
- package/decks/atris-single-shot-proof.json +74 -0
- package/decks/mark-pincus-narrative.json +102 -0
- package/decks/mark-pincus-sourcery.json +94 -0
- package/decks/yash-applied-compute-detailed.json +150 -0
- package/decks/yash-applied-compute-generalist.json +82 -0
- package/decks/yash-applied-compute-narrative.json +54 -0
- package/lib/ax-prefs.js +5 -12
- package/lib/chat-log-scan.js +377 -0
- package/lib/context-gatherer.js +35 -1
- package/lib/deck-compose.js +145 -0
- package/lib/deck-history.js +64 -0
- package/lib/deck-layout.js +169 -0
- package/lib/deck-review.js +431 -0
- package/lib/deck-schema.js +154 -0
- package/lib/file-ops.js +2 -2
- package/lib/functional-owner.js +189 -0
- package/lib/slides-deck.js +512 -58
- package/lib/task-db.js +109 -2
- package/package.json +2 -1
- package/templates/business-starter/team/START_HERE.md +12 -8
- package/utils/auth.js +4 -0
- package/utils/config.js +4 -0
- package/atris/atrisDev.md +0 -717
package/AGENTS.md
CHANGED
|
@@ -61,6 +61,12 @@ Always-on agents should move proof-backed work to Review, complete their native
|
|
|
61
61
|
goal, then continue the mission loop with the next goal. They must not run
|
|
62
62
|
`atris task accept` or claim AgentXP unless a human approved the proof.
|
|
63
63
|
|
|
64
|
+
Codex agents with native goal tools should run `atris mission goal --json`
|
|
65
|
+
before choosing work. If the payload includes `goal.visible_goal`, mirror
|
|
66
|
+
`goal.objective` into the visible chat goal when the current goal is empty,
|
|
67
|
+
complete, or already matching; never complete unrelated active goals just to
|
|
68
|
+
make room.
|
|
69
|
+
|
|
64
70
|
## Workflow
|
|
65
71
|
|
|
66
72
|
```
|
package/atris/AGENTS.md
CHANGED
|
@@ -14,6 +14,11 @@ task truth, proof, review, and backend/cloud sync all flow through Atris.
|
|
|
14
14
|
4. Track work with `atris task`; use `atris/TODO.md` only as the rendered fallback view.
|
|
15
15
|
5. Preferred loop: `atris plan` → `atris do` → `atris review`.
|
|
16
16
|
|
|
17
|
+
Task owners are functional or feature members, not engines. Use `task-planner`,
|
|
18
|
+
`architect`, `mission-lead`, `validator`, `launcher`, or a feature owner for
|
|
19
|
+
assignment; put coding agent models like Codex and Claude in the `executed_by`
|
|
20
|
+
section.
|
|
21
|
+
|
|
17
22
|
## Mission Autonomy
|
|
18
23
|
|
|
19
24
|
Use `atris mission` when work should survive this chat or run as an autonomous loop.
|
|
@@ -51,6 +56,12 @@ Always-on agents should move proof-backed work to Review, complete their native
|
|
|
51
56
|
goal, then continue the mission loop with the next goal. They must not run
|
|
52
57
|
`atris task accept` or claim Career XP unless a human approved the proof.
|
|
53
58
|
|
|
59
|
+
Codex agents with native goal tools should run `atris mission goal --json`
|
|
60
|
+
before choosing work. If the payload includes `goal.visible_goal`, mirror
|
|
61
|
+
`goal.objective` into the visible chat goal when the current goal is empty,
|
|
62
|
+
complete, or already matching; never complete unrelated active goals just to
|
|
63
|
+
make room.
|
|
64
|
+
|
|
54
65
|
Do not write new operating doctrine here first. Add it to Atris policy, skills,
|
|
55
66
|
wiki, or `atris/atris.md`, then regenerate this adapter if needed.
|
|
56
67
|
|
package/atris/CLAUDE.md
CHANGED
|
@@ -36,6 +36,11 @@ Atris is the source of truth. This file is only an adapter for Claude Code; do n
|
|
|
36
36
|
|
|
37
37
|
Before edits, claim or create one small task with `atris task`, read `atris/MAP.md`, and write the goal/files/done/check contract into task dialogue. After edits, move proof-backed work to Review with `atris task ready <id> --proof "<commands or receipt>"`; chat-only proof does not count.
|
|
38
38
|
|
|
39
|
+
Task owners are functional or feature members, not engines. Use `task-planner`,
|
|
40
|
+
`architect`, `mission-lead`, `validator`, `launcher`, or a feature owner for
|
|
41
|
+
assignment; put coding agent models like Codex and Claude in the `executed_by`
|
|
42
|
+
section.
|
|
43
|
+
|
|
39
44
|
Native goals and task approval are separate gates:
|
|
40
45
|
|
|
41
46
|
```text
|
package/atris/atris.md
CHANGED
|
@@ -70,11 +70,11 @@ Core loop:
|
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
72
|
atris task list
|
|
73
|
-
atris task delegate "<title>" --to <
|
|
74
|
-
atris task delegate "<title>" --to <
|
|
73
|
+
atris task delegate "<title>" --to <functional-member> --tag <tag>
|
|
74
|
+
atris task delegate "<title>" --to <functional-member> --executed-by <engine> --via swarlo --tag <tag>
|
|
75
75
|
atris task day
|
|
76
76
|
atris task next
|
|
77
|
-
atris task claim <id> --as <
|
|
77
|
+
atris task claim <id> --as <functional-member>
|
|
78
78
|
atris task note <id> "<context, blocker, decision, or handoff>"
|
|
79
79
|
atris task finish <id> --proof "<tests, screenshot, diff, or receipt>"
|
|
80
80
|
atris task review <id> --lesson "<what improved>" --next "<next task>"
|
|
@@ -89,7 +89,7 @@ Every task record should carry:
|
|
|
89
89
|
|
|
90
90
|
```
|
|
91
91
|
Title: <small work packet>
|
|
92
|
-
Owner: <
|
|
92
|
+
Owner: <functional or feature member, not an engine>
|
|
93
93
|
Objective: <why this matters>
|
|
94
94
|
Context: <links/files/decisions>
|
|
95
95
|
Exit: <observable done condition>
|
|
@@ -97,6 +97,21 @@ Verify: <shell command or concrete proof>
|
|
|
97
97
|
Next: <suggested follow-up task>
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
+
Task planning preview and landing:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Owner: <functional-member>
|
|
104
|
+
Plan: <one sentence on the intended change>
|
|
105
|
+
Done: <observable result>
|
|
106
|
+
Check: <verifier, receipt, or artifact proof>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Owner is accountable company role (`task-planner`, `architect`, `mission-lead`,
|
|
110
|
+
`validator`, `launcher`, or a feature owner). Coding agent models like Codex and
|
|
111
|
+
Claude are not task owners; put them in the `executed_by` section when useful.
|
|
112
|
+
If no existing member fits, create a member-creation task instead of assigning
|
|
113
|
+
broad work to an engine or generic executor.
|
|
114
|
+
|
|
100
115
|
| Field | Meaning | Enforcement |
|
|
101
116
|
|---|---|---|
|
|
102
117
|
| tier | `agent` proceeds, `gray` queues for approval, `human` never attempted by you | guarded |
|
|
@@ -17,6 +17,32 @@ this is the "distribution center" — statistically average, aesthetically dead.
|
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
## vocabulary is the lever
|
|
21
|
+
|
|
22
|
+
designers get better results from AI than engineers do. not because they're more creative — because they own the **language of craft**. an engineer says "make it look nice." a designer says "tighten the vertical rhythm, increase negative space, make the hierarchy bolder here and quieter there."
|
|
23
|
+
|
|
24
|
+
the model can only aim at the words you give it. **name the move you want, precisely, in craft vocabulary.** vague prompts produce vague output.
|
|
25
|
+
|
|
26
|
+
core terms to use when directing AI:
|
|
27
|
+
- **vertical rhythm** — spacing consistency down the page, locked to a baseline grid
|
|
28
|
+
- **negative space** — intentional emptiness as a design element, not absence
|
|
29
|
+
- **bolder / quieter** — relative emphasis, not absolute size
|
|
30
|
+
- **affordances** — visual cues that signal interaction (and now: agentic affordances for AI users)
|
|
31
|
+
- **meta-design** — designing the *system* of design, not just one screen
|
|
32
|
+
- **conviction** — committing to a global maximum instead of iterating toward a local one
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## raising the floor vs raising the ceiling
|
|
37
|
+
|
|
38
|
+
AI is best used to **raise the floor** — automate the mechanical 80% (layout scaffolding, responsive grids, state matrices, boilerplate). this frees human attention for **raising the ceiling** — the last 10-20% that requires taste, instinct, and conviction.
|
|
39
|
+
|
|
40
|
+
don't use AI to make the final call. use it to clear the drudgery so you can spend your time on the part that matters: the unique spin, the unexpected choice, the thing a model would never pick on its own.
|
|
41
|
+
|
|
42
|
+
**cognitive delegation, not cognitive surrender.** AI routes you to the destination (like Google Maps). you keep the viewpoint and make the final decision. accepting an 8-page AI plan without reading it is cognitive surrender — that's how everything starts looking the same.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
20
46
|
## typography
|
|
21
47
|
|
|
22
48
|
**avoid:** inter, roboto, open sans, lato, arial, montserrat, system defaults. also avoid monospace as lazy shorthand for "technical/developer" vibes.
|
|
@@ -342,9 +368,54 @@ the fingerprints of AI-generated work:
|
|
|
342
368
|
- sparklines as decoration
|
|
343
369
|
- rounded rectangles with drop shadows
|
|
344
370
|
- large icons with rounded corners above headings
|
|
371
|
+
- **"claude beige"** — the generic off-white/off-gray background every AI site defaults to
|
|
372
|
+
- **instrument serif** overuse — the italicized serif headline that now signals "AI-generated" the way inter once did
|
|
373
|
+
- **generic tinted backgrounds** — flat color-tinted sections with no texture, depth, or intention
|
|
345
374
|
|
|
346
375
|
a distinctive interface should make someone ask "how was this made?" not "which AI made this?"
|
|
347
376
|
|
|
377
|
+
### anti-attractors
|
|
378
|
+
|
|
379
|
+
models have attractor states — defaults they fall into because training data is weighted toward them. purple gradients, instrument serif, "claude beige" — these are gravity wells. to escape them you need **anti-attractors**: deliberate constraints that force the model off its well-trodden path.
|
|
380
|
+
|
|
381
|
+
techniques:
|
|
382
|
+
- **name the thing you don't want** — "no purple, no serif headline, no off-white background" closes the attractor
|
|
383
|
+
- **seed with a reference** — point at a specific site, era, or designer's work as the target aesthetic
|
|
384
|
+
- **inject a constraint** — "monochrome only," "no rounded corners," "one font weight" — scarcity forces creativity
|
|
385
|
+
- **rotate your defaults** — if your last three projects used dark mode, force light. if they used sans, force serif. the convergence trap is real.
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## ax — agentic experience
|
|
390
|
+
|
|
391
|
+
UX is design for humans. **AX is design for AI agents** that are becoming primary users of software. when an agent interacts with your CLI, API, or surface, visual affordances don't help — it can't see your button. what it needs:
|
|
392
|
+
|
|
393
|
+
- **speed** — fast responses, low latency, no unnecessary round trips
|
|
394
|
+
- **clarity** — unambiguous output, structured data, predictable shapes
|
|
395
|
+
- **verbosity where needed** — error messages that tell the agent what to do next, not just what failed
|
|
396
|
+
- **edge case coverage** — agents will hit paths humans never touch; handle them explicitly
|
|
397
|
+
- **agentic affordances** — `llms.txt`, `robots.txt`, clear `--help`, machine-readable status, stable exit codes
|
|
398
|
+
|
|
399
|
+
AX is not optional anymore. if your tool is agent-facing, design the agent's experience as deliberately as the human's.
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## conviction over local maxima
|
|
404
|
+
|
|
405
|
+
good design is a bet. iterating toward "slightly better" produces a **local maximum** — safe, defensible, forgettable. great design requires **conviction**: choosing a global maximum that might look wrong at first but is a superior endpoint.
|
|
406
|
+
|
|
407
|
+
the engineer's instinct is to optimize incrementally. the designer's job is to make a bet and commit. AI accelerates iteration, which makes the local-maximum trap *worse* — you can now converge on average faster than ever.
|
|
408
|
+
|
|
409
|
+
**subtraction over addition.** the strongest design move is often removing something. steve jobs as editor, not steve jobs as builder. when a screen feels cluttered, don't add structure — delete until it breathes.
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## the scarcity principle
|
|
414
|
+
|
|
415
|
+
taste emerges from constraints. the european and japanese craft traditions produced distinctive work because materials were scarce — you had to choose carefully. in an era of infinite digital materials (every color, every font, every layout is free), taste must be **intentionally cultivated through self-imposed scarcity**.
|
|
416
|
+
|
|
417
|
+
pick constraints before you start: one font, two colors, three spacing values. scarcity forces decisions. infinite options produce the distribution center.
|
|
418
|
+
|
|
348
419
|
---
|
|
349
420
|
|
|
350
421
|
## references
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# design-seed.md — atris visual identity
|
|
2
|
+
|
|
3
|
+
> Generated from a design interview on 2026-06-23.
|
|
4
|
+
> This is the project's unique design DNA. Not a template — a conviction.
|
|
5
|
+
> Every design decision for Atris surfaces should reference this seed.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## the interview (source signal)
|
|
10
|
+
|
|
11
|
+
| question | answer |
|
|
12
|
+
|----------|--------|
|
|
13
|
+
| audience | designers, product enthusiasts, apple lovers, artsy people |
|
|
14
|
+
| anti-attractor | AI startup slop — purple gradients, claude beige, instrument serif |
|
|
15
|
+
| personality | warm-technical — sharp but human, approachable craft |
|
|
16
|
+
| color mood | warm earth — clay, bone, ink, ochre |
|
|
17
|
+
|
|
18
|
+
**the move:** this is not a dev tool that needs to look "technical." this is a crafted object that happens to be powerful. the bar is set by people who notice the kerning on a restaurant menu.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## typography
|
|
23
|
+
|
|
24
|
+
**display: Spectral**
|
|
25
|
+
- warm serif designed for screens (Production Type)
|
|
26
|
+
- intellectual without being precious
|
|
27
|
+
- has optical sizing — gets more expressive at large sizes
|
|
28
|
+
- NOT instrument serif (the AI tell), NOT Fraunces (getting there), NOT Playfair (overused)
|
|
29
|
+
- weights: 200 (light, for quiet headlines) and 700 (for bold statements)
|
|
30
|
+
- italic available — use sparingly, for emphasis only
|
|
31
|
+
|
|
32
|
+
**body: Hanken Grotesk**
|
|
33
|
+
- humanist sans with warmth and character
|
|
34
|
+
- not inter, not roboto, not system — has a hand to it
|
|
35
|
+
- weights: 400 (body), 600 (emphasis)
|
|
36
|
+
- slightly more readable than geometric sans at small sizes
|
|
37
|
+
|
|
38
|
+
**mono: JetBrains Mono**
|
|
39
|
+
- for code, CLI output, technical labels only
|
|
40
|
+
- never as a "developer vibe" design choice
|
|
41
|
+
|
|
42
|
+
**type scale (fluid):**
|
|
43
|
+
```css
|
|
44
|
+
--font-display: 'Spectral', Georgia, serif;
|
|
45
|
+
--font-body: 'Hanken Grotesk', system-ui, sans-serif;
|
|
46
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
47
|
+
|
|
48
|
+
--text-xs: 0.75rem;
|
|
49
|
+
--text-sm: 0.875rem;
|
|
50
|
+
--text-base: 1rem;
|
|
51
|
+
--text-lg: clamp(1.25rem, 1rem + 1vw, 1.5rem);
|
|
52
|
+
--text-xl: clamp(1.75rem, 1rem + 3vw, 2.5rem);
|
|
53
|
+
--text-display: clamp(2.5rem, 1rem + 6vw, 5rem);
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**rules:**
|
|
57
|
+
- display font for headlines only. body stays in Hanken.
|
|
58
|
+
- weight extremes: 200 vs 700, never 400 vs 500.
|
|
59
|
+
- size jumps are dramatic (3x), not timid.
|
|
60
|
+
- line-height: 1.6 for body (generous, warm). 1.1 for display (tight, confident).
|
|
61
|
+
- max-width: 62ch for long-form. let it breathe.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## color
|
|
66
|
+
|
|
67
|
+
warm earth palette. everything tinted warm. no pure gray, no pure black, no pure white.
|
|
68
|
+
|
|
69
|
+
```css
|
|
70
|
+
:root {
|
|
71
|
+
/* surfaces */
|
|
72
|
+
--bone: oklch(96% 0.012 75); /* warm paper — the base */
|
|
73
|
+
--bone-2: oklch(93% 0.014 72); /* slightly deeper, for sections */
|
|
74
|
+
--ink: oklch(22% 0.015 55); /* warm near-black — primary text */
|
|
75
|
+
--ink-soft: oklch(35% 0.012 55); /* secondary text, still warm */
|
|
76
|
+
--ink-faint:oklch(55% 0.010 60); /* tertiary, metadata */
|
|
77
|
+
|
|
78
|
+
/* accents — used rarely, earn their place */
|
|
79
|
+
--clay: oklch(58% 0.13 45); /* terracotta — the sharp accent */
|
|
80
|
+
--ochre: oklch(72% 0.09 75); /* warm gold — for highlights */
|
|
81
|
+
--moss: oklch(42% 0.04 145); /* deep muted green — secondary accent */
|
|
82
|
+
|
|
83
|
+
/* depth */
|
|
84
|
+
--shadow: oklch(15% 0.01 55); /* deepest warm dark */
|
|
85
|
+
--line: oklch(88% 0.010 70); /* warm hairline borders */
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**usage rules:**
|
|
90
|
+
- `--bone` is the default background. never `#fff`. never `#f5f5f5`.
|
|
91
|
+
- `--ink` is the default text. never `#000`. never `#1a1a1a`.
|
|
92
|
+
- `--clay` is the one sharp accent. use it for one thing per view — a link, a CTA, a key number. if you use it for three things, it's not an accent anymore.
|
|
93
|
+
- `--ochre` for subtle highlights (selection, hover warmth). never for text.
|
|
94
|
+
- `--moss` appears rarely — maybe a status indicator, a secondary chart. it's the surprise.
|
|
95
|
+
- never put `--ink-faint` text on `--clay` backgrounds. use `--bone` on `--clay`.
|
|
96
|
+
- dark mode: invert to warm dark (`oklch(18% 0.015 55)` background, `--bone` text). never zinc, never pure dark.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## spacing
|
|
101
|
+
|
|
102
|
+
warm-technical means generous but not wasteful. more space than feels comfortable, then a little more.
|
|
103
|
+
|
|
104
|
+
```css
|
|
105
|
+
--space-xs: 0.5rem;
|
|
106
|
+
--space-sm: 1rem;
|
|
107
|
+
--space-md: 2rem;
|
|
108
|
+
--space-lg: 4rem;
|
|
109
|
+
--space-xl: 8rem; /* section gaps — dramatic */
|
|
110
|
+
--space-2xl: 12rem; /* used sparingly, for major breaks */
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**rhythm:** vertical spacing locked to `--space-md` (2rem) as the base unit. section gaps are `--space-xl` (8rem). this creates a 1:4 ratio between content rhythm and section breaks — you feel the structure without seeing it.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## layout
|
|
118
|
+
|
|
119
|
+
**editorial, not templated.**
|
|
120
|
+
|
|
121
|
+
- no hero + 3 cards + footer. ever.
|
|
122
|
+
- asymmetric layouts. left-aligned with intentional negative space on the right.
|
|
123
|
+
- wide margins (clamp(1.5rem, 8vw, 8rem)) — content sits in the center 60-70% of the viewport.
|
|
124
|
+
- sections separated by `--space-xl` (8rem) of pure `--bone`. the space IS the design.
|
|
125
|
+
- no cards unless content genuinely needs a container. most things sit directly on `--bone`.
|
|
126
|
+
- if you must group, use `--bone-2` (slightly deeper) with no border, or a single `--line` hairline.
|
|
127
|
+
|
|
128
|
+
**the page should feel like a well-set book page, not a dashboard.**
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## motion
|
|
133
|
+
|
|
134
|
+
warm-technical = things take their time, but nothing wastes it.
|
|
135
|
+
|
|
136
|
+
```css
|
|
137
|
+
--ease: cubic-bezier(0.25, 1, 0.5, 1); /* exponential ease-out */
|
|
138
|
+
--dur-fast: 200ms;
|
|
139
|
+
--dur-base: 350ms; /* slightly slower than default — warm */
|
|
140
|
+
--dur-slow: 600ms; /* for page reveals */
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
- one reveal animation on page load: staggered fade-up, 80ms between elements, `--dur-slow`.
|
|
144
|
+
- hover: subtle warm brighten (filter: brightness(1.05)) + scale 1.02. never shift, never hide.
|
|
145
|
+
- no cursor effects. no meteor showers. no parallax.
|
|
146
|
+
- `prefers-reduced-motion`: everything instant. the static version must be beautiful on its own.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## the anti-attractor lock
|
|
151
|
+
|
|
152
|
+
these are banned for Atris surfaces, derived from the interview:
|
|
153
|
+
|
|
154
|
+
| banned | why |
|
|
155
|
+
|--------|-----|
|
|
156
|
+
| purple-to-blue gradients | AI slop fingerprint #1 |
|
|
157
|
+
| off-white / `#fafafa` backgrounds | "claude beige" — the new AI default |
|
|
158
|
+
| instrument serif (italic) | the new AI tell — everyone uses it |
|
|
159
|
+
| inter / roboto / system fonts | statistically average, aesthetically dead |
|
|
160
|
+
| glassmorphism | decorative blur = no point of view |
|
|
161
|
+
| dark mode with neon accents | "cool" without a design decision |
|
|
162
|
+
| hero + 3 cards + footer | the template. every AI does this. |
|
|
163
|
+
| gradient text on headlines | looks impressive, means nothing |
|
|
164
|
+
| rounded-rect with drop shadow | safe, forgettable, templated |
|
|
165
|
+
| all-caps tracked labels | keshav hates it. not warm. |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## the conviction
|
|
170
|
+
|
|
171
|
+
this design says: **we care about the thing you're looking at, not the fact that we made it.**
|
|
172
|
+
|
|
173
|
+
it's warm paper, warm ink, one sharp terracotta accent, a serif that has opinions, and enough negative space that you notice the content. it doesn't shout. it doesn't perform. it's made well, and you can feel that before you can name it.
|
|
174
|
+
|
|
175
|
+
if a designer looks at this and thinks "AI made this," we failed.
|
|
176
|
+
if they think "someone made this," we're on track.
|
|
177
|
+
if they think "who made this?" — that's the goal.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## references (inspiration, not copies)
|
|
182
|
+
|
|
183
|
+
- Aesop.com — warm earth, editorial, restraint
|
|
184
|
+
- Apple product pages — typography confidence, negative space
|
|
185
|
+
- Linear changelog — warm-technical writing in a UI
|
|
186
|
+
- Istituto Marangoni — editorial layout, Italian craft
|
|
187
|
+
- a well-printed paperback — the feeling we're chasing
|
|
@@ -31,12 +31,35 @@ Key behaviors:
|
|
|
31
31
|
- Read PERSONA.md (3-4 sentences, ASCII visuals)
|
|
32
32
|
- Check MAP.md for file:line refs
|
|
33
33
|
- Use `atris task` for claims, proof, ready, and accept
|
|
34
|
+
- Use functional/feature members as task owners; record engines only as `executed_by`
|
|
34
35
|
- Treat TODO.md as a rendered view; regenerate it instead of hand-editing tasks
|
|
36
|
+
- In Codex runtimes with native goal tools, mirror `atris mission goal --json` into the visible chat goal via `goal.visible_goal`
|
|
37
|
+
|
|
38
|
+
## Visible Chat Goal Mirror
|
|
39
|
+
|
|
40
|
+
Before choosing work in an Atris repo, run:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
atris mission goal --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If it returns `action: codex_goal_candidate` or `codex_goal_heartbeat` with
|
|
47
|
+
`goal.visible_goal`, treat that as the desired native chat goal:
|
|
48
|
+
|
|
49
|
+
1. Call `get_goal` when the runtime exposes it.
|
|
50
|
+
2. If the active goal already equals `goal.objective`, keep working.
|
|
51
|
+
3. If there is no active goal or the prior goal is complete, call `create_goal` with `goal.objective`.
|
|
52
|
+
4. If a different active goal is still in progress, do not complete it just to make room; report that `goal.visible_goal.status` is waiting for the visible goal slot.
|
|
53
|
+
5. After proof is ready, call `update_goal({ status: "complete" })`, rerun `atris mission goal --json`, then create the next visible goal candidate when a slot is available.
|
|
54
|
+
|
|
55
|
+
Native goal completion is not task acceptance. Agents may complete their native
|
|
56
|
+
goal after proof is ready; only a human should run `atris task accept`.
|
|
35
57
|
|
|
36
58
|
## Steps
|
|
37
59
|
|
|
38
60
|
1. Run `atris atris.md` on first interaction to show workspace status
|
|
39
61
|
2. Read `atris/MAP.md` before any file search to find file:line refs
|
|
40
|
-
3. Run `atris
|
|
41
|
-
4.
|
|
42
|
-
5.
|
|
62
|
+
3. Run `atris mission goal --json` and mirror `goal.visible_goal` into the native chat goal when the runtime supports it
|
|
63
|
+
4. Run `atris task list` or `atris task next` to find current work
|
|
64
|
+
5. Claim tasks with `atris task claim <id> --as <functional-member>`
|
|
65
|
+
6. Move completed work to review with `atris task ready <id> --proof "..."`
|
|
@@ -16,8 +16,9 @@ Part of the Atris policy system. Prevents ai-generated frontend from looking gen
|
|
|
16
16
|
|
|
17
17
|
This skill uses the Atris workflow:
|
|
18
18
|
1. Check `atris/MAP.md` for existing patterns before building
|
|
19
|
-
2.
|
|
20
|
-
3.
|
|
19
|
+
2. **Read `atris/policies/design-seed.md` first** — it has the project's unique visual identity (fonts, colors, spacing, motion). This is the design DNA. Do not override it with defaults.
|
|
20
|
+
3. Reference `atris/policies/atris-design.md` for full anti-slop guidance
|
|
21
|
+
4. After building, run `atris review` to validate against this policy
|
|
21
22
|
|
|
22
23
|
## Quick Reference
|
|
23
24
|
|
|
@@ -30,7 +30,7 @@ The agent then:
|
|
|
30
30
|
- `cron`: `"*/13 * * * *"` (every 13 min) for tight loops, or `"7 * * * *"` (hourly at :07) for slow loops
|
|
31
31
|
- `prompt`: `"First run: atris mission run --due --max-ticks 1 --complete-on-pass. If it reports no_due_mission, run /autopilot for one tick. One bounded goal only, then stop. Do not start a conversation."`
|
|
32
32
|
- `recurring`: `true`
|
|
33
|
-
- `durable`: `false` (in-memory only
|
|
33
|
+
- `durable`: `false` (in-memory only, gone when this Claude session ends)
|
|
34
34
|
2. After creating, calls `CronList` and shows the user the active cron jobs.
|
|
35
35
|
3. Tells the user: "loop is alive. job id <X>. fires roughly every <N> minutes. say 'stop the loop' to kill it. auto-expires after 7 days."
|
|
36
36
|
|
|
@@ -68,6 +68,8 @@ If the user says "kill all loops", call `CronList`, then `CronDelete` for every
|
|
|
68
68
|
|
|
69
69
|
This is the autonomous mode. Without `/loop`, `/autopilot` only runs when a human invokes it.
|
|
70
70
|
|
|
71
|
-
##
|
|
71
|
+
## The CLI front door and wiki upkeep
|
|
72
72
|
|
|
73
|
-
The CLI command `atris loop` is
|
|
73
|
+
The CLI command `atris loop` is now the single front door to the self-improvement loop: `atris loop start` (local), `atris loop start --overnight` (durable heartbeat), `atris loop status`, `atris loop stop`. It delegates to the existing engines (`run`, `pulse`) rather than adding a new one.
|
|
74
|
+
|
|
75
|
+
Wiki upkeep (stale pages, orphans, ingest candidates) moved to `atris loop wiki` (or `atris wiki loop`). If the user wants wiki health, run that. If they want the autopilot heartbeat from inside Claude Code, invoke `/loop` here.
|
|
@@ -8,6 +8,9 @@ skills: []
|
|
|
8
8
|
|
|
9
9
|
permissions:
|
|
10
10
|
can-read: true
|
|
11
|
+
can-execute: true
|
|
12
|
+
can-approve: false
|
|
13
|
+
can-accept-task: false
|
|
11
14
|
approval-required: []
|
|
12
15
|
|
|
13
16
|
tools: []
|
|
@@ -21,6 +24,16 @@ Replace with the long-term mission this member owns.
|
|
|
21
24
|
|
|
22
25
|
Replace with what this member may and may not touch.
|
|
23
26
|
|
|
27
|
+
## Cadence
|
|
28
|
+
|
|
29
|
+
Replace with how often this member may wake up, how long one tick may run, and the lease timeout.
|
|
30
|
+
|
|
31
|
+
## Ownership Contract
|
|
32
|
+
|
|
33
|
+
- Own tasks by function or feature, never by execution engine.
|
|
34
|
+
- If no existing member fits, create a member-creation task before assigning broad work.
|
|
35
|
+
- Put coding agent models like Codex and Claude in the `executed_by` section.
|
|
36
|
+
|
|
24
37
|
## Proof Standard
|
|
25
38
|
|
|
26
39
|
Replace with what proves good work.
|
|
@@ -29,6 +42,12 @@ Replace with what proves good work.
|
|
|
29
42
|
|
|
30
43
|
Replace with when this member must stop and ask.
|
|
31
44
|
|
|
45
|
+
## Cleanup Contract
|
|
46
|
+
|
|
47
|
+
- Use isolated worktrees for parallel work.
|
|
48
|
+
- Ship or archive the worktree before the lease ends.
|
|
49
|
+
- Move proof-backed work to Review; never run human accept.
|
|
50
|
+
|
|
32
51
|
## Log System
|
|
33
52
|
|
|
34
53
|
Every member keeps a dated log under `logs/YYYY-MM-DD.md`.
|
package/atris.md
CHANGED
|
@@ -10,9 +10,10 @@ leave a trail another agent or human can trust.
|
|
|
10
10
|
On session start, before responding:
|
|
11
11
|
|
|
12
12
|
1. Read:
|
|
13
|
-
- `atris/logs/YYYY/YYYY-MM-DD.md
|
|
14
|
-
- `atris/MAP.md
|
|
15
|
-
- `atris/
|
|
13
|
+
- `atris/logs/YYYY/YYYY-MM-DD.md`: today's journal
|
|
14
|
+
- `atris/MAP.md`: navigation
|
|
15
|
+
- `atris/CLARITY.md` if present: how the operator works (voice, cadence, leash); prompt yourself to match it
|
|
16
|
+
- `atris/wiki/STATUS.md` if present: current memory snapshot
|
|
16
17
|
|
|
17
18
|
2. Show this box, then ask what to work on if no task was already given.
|
|
18
19
|
|
|
@@ -50,13 +51,36 @@ Then:
|
|
|
50
51
|
- do not call something complete without verification
|
|
51
52
|
- do not take irreversible actions without approval from the human
|
|
52
53
|
- do not hide state outside markdown, logs, diffs, or the journal
|
|
53
|
-
- do not edit the rules that judge you
|
|
54
|
+
- do not edit the rules that judge you: the reward config, the authority policy, or this file
|
|
54
55
|
|
|
55
56
|
If you cannot honor these rules, stop, write why in the journal, and ask the human before continuing.
|
|
56
57
|
|
|
57
58
|
Labels used below:
|
|
58
|
-
- `guarded
|
|
59
|
-
- `expected
|
|
59
|
+
- `guarded`: checked by code or a pre-commit hook; bypassing is a bug
|
|
60
|
+
- `expected`: convention; honor it or stop
|
|
61
|
+
|
|
62
|
+
## taste
|
|
63
|
+
|
|
64
|
+
What you ship should not read as generated. The test: if someone said "an AI made this," would they believe it instantly? If yes, that is the bug. The model has no words for restraint and it falls into gravity wells. Beat both.
|
|
65
|
+
|
|
66
|
+
- **Gate it.** `atris slop detect <path>` is deterministic: no model, exit 1 on a tell, built for CI and the review stage. A finding is a fact (file:line + rule), not an opinion. `guarded` once wired into review.
|
|
67
|
+
- **Name the move.** Vague prompts make vague output. Direct with craft words: vertical rhythm, negative space, hierarchy, contrast, bolder here / quieter there, restraint. Precise language is the lever. Own it.
|
|
68
|
+
- **Refuse the wells** (named so you can): purple/indigo gradients, gradient-filled text, glassmorphism, Inter/Roboto defaults, claude-beige, neon-on-dark, hero-metric rows, identical card grids, eyebrow/tracked-caps labels, pulsing live-dots, em dashes.
|
|
69
|
+
- **Commit to constraints.** One distinctive font, one accent hue, a small spacing scale. Taste is subtraction, not addition.
|
|
70
|
+
- **Generate it right.** `atris deck` (slides) and the `design` policy apply the system by default: own backgrounds and fonts, never the tool's stock template.
|
|
71
|
+
- **Compound it.** A new tell becomes a typed lesson with a `detector:` regex, so the gate grows instead of leaning on memory. Taste lives in code, not vibes.
|
|
72
|
+
|
|
73
|
+
## voice
|
|
74
|
+
|
|
75
|
+
The same discipline for words. Output stays sharp no matter how bloated the context. A full context is not license to ramble.
|
|
76
|
+
|
|
77
|
+
- **Lead with the move.** Answer first, support after. No preamble, no agreement reflex ("great question", "you're absolutely right").
|
|
78
|
+
- **Specific over buzzy.** Name the exact thing. If you can't, you don't understand it yet; go look, don't hedge.
|
|
79
|
+
- **Cut filler.** Drop "it's worth noting", "in order to", "leverage", "seamless", "robust", "delve", stacked hedges, and em dashes. `atris slop` flags the prose tells (em-dash, hype-copy) too.
|
|
80
|
+
- **Bound verbosity by information, not context.** Say the load-bearing thing and stop. Length tracks what the reader needs to act, nothing more.
|
|
81
|
+
- **Match the register.** The operator wants the next move; a spec wants the contract; a journal wants one line. Jargon is a lever only when shared: use the reader's precise terms, define a new one once.
|
|
82
|
+
|
|
83
|
+
`expected`: this is how an Atris agent writes and builds. Shipping slop or rambling is a failure smell, same as drift or a stale task.
|
|
60
84
|
|
|
61
85
|
## task source of truth
|
|
62
86
|
|
|
@@ -70,11 +94,11 @@ Core loop:
|
|
|
70
94
|
|
|
71
95
|
```bash
|
|
72
96
|
atris task list
|
|
73
|
-
atris task delegate "<title>" --to <
|
|
74
|
-
atris task delegate "<title>" --to <
|
|
97
|
+
atris task delegate "<title>" --to <functional-member> --tag <tag>
|
|
98
|
+
atris task delegate "<title>" --to <functional-member> --executed-by <engine> --via swarlo --tag <tag>
|
|
75
99
|
atris task day
|
|
76
100
|
atris task next
|
|
77
|
-
atris task claim <id> --as <
|
|
101
|
+
atris task claim <id> --as <functional-member>
|
|
78
102
|
atris task note <id> "<context, blocker, decision, or handoff>"
|
|
79
103
|
atris task finish <id> --proof "<tests, screenshot, diff, or receipt>"
|
|
80
104
|
atris task review <id> --lesson "<what improved>" --next "<next task>"
|
|
@@ -89,7 +113,7 @@ Every task record should carry:
|
|
|
89
113
|
|
|
90
114
|
```
|
|
91
115
|
Title: <small work packet>
|
|
92
|
-
Owner: <
|
|
116
|
+
Owner: <functional or feature member, not an engine>
|
|
93
117
|
Objective: <why this matters>
|
|
94
118
|
Context: <links/files/decisions>
|
|
95
119
|
Exit: <observable done condition>
|
|
@@ -97,6 +121,21 @@ Verify: <shell command or concrete proof>
|
|
|
97
121
|
Next: <suggested follow-up task>
|
|
98
122
|
```
|
|
99
123
|
|
|
124
|
+
Task planning preview and landing:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Owner: <functional-member>
|
|
128
|
+
Plan: <one sentence on the intended change>
|
|
129
|
+
Done: <observable result>
|
|
130
|
+
Check: <verifier, receipt, or artifact proof>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Owner is accountable company role (`task-planner`, `architect`, `mission-lead`,
|
|
134
|
+
`validator`, `launcher`, or a feature owner). Coding agent models like Codex and
|
|
135
|
+
Claude are not task owners; put them in the `executed_by` section when useful.
|
|
136
|
+
If no existing member fits, create a member-creation task instead of assigning
|
|
137
|
+
broad work to an engine or generic executor.
|
|
138
|
+
|
|
100
139
|
| Field | Meaning | Enforcement |
|
|
101
140
|
|---|---|---|
|
|
102
141
|
| tier | `agent` proceeds, `gray` queues for approval, `human` never attempted by you | guarded |
|
|
@@ -121,10 +160,10 @@ The human is the constructor. You multiply. Handoff fidelity lives in the files,
|
|
|
121
160
|
|
|
122
161
|
Move one task at a time through plan → do → review.
|
|
123
162
|
|
|
124
|
-
- **plan
|
|
125
|
-
- **plan-review
|
|
126
|
-
- **do
|
|
127
|
-
- **review
|
|
163
|
+
- **plan**: read relevant files, produce an ASCII visualization, wait for approval. No code.
|
|
164
|
+
- **plan-review**: the validator reads the plan fresh and signs off with `SIGNOFF:` or halts with `REJECT:` + `FIX:` + an optional `PROPOSED:` block (concrete draft of Files / Exit / Verify / Rollback to replace). Plan does not move to do without signoff. The validator is a drafting partner, not just a critic: on REJECT it proposes the sharper rubric rather than leaving the human to guess. Codex is optional escalation when `ATRIS_USE_CODEX=1` or the task carries `[codex]`.
|
|
165
|
+
- **do**: claim the task with `atris task claim <id> --as <agent>`, execute step by step, add notes as reality changes, update `MAP.md` and the journal when needed.
|
|
166
|
+
- **review**: run the task's verification, read the diff, run the relevant tests, finish with `atris task finish <id> --proof "..."`, and add the lesson/next task with `atris task review`.
|
|
128
167
|
|
|
129
168
|
Every stage runs the Confidence Gate before it advances:
|
|
130
169
|
|
|
@@ -177,7 +216,7 @@ Periodically, and before closing an endgame, clean:
|
|
|
177
216
|
- **I1:** Description
|
|
178
217
|
|
|
179
218
|
## Notes
|
|
180
|
-
[timestamped lines
|
|
219
|
+
[timestamped lines: one per discovery, decision, or tick]
|
|
181
220
|
```
|
|
182
221
|
|
|
183
222
|
Context is a cache. Disk is truth. Route discoveries as they happen:
|
|
@@ -195,12 +234,13 @@ Do not batch. Nothing important should live only in memory.
|
|
|
195
234
|
|
|
196
235
|
## failure smells
|
|
197
236
|
|
|
198
|
-
If you notice these, stop and flag
|
|
199
|
-
- **loop
|
|
200
|
-
- **drift
|
|
201
|
-
- **stale task
|
|
202
|
-
- **hidden side effect
|
|
203
|
-
- **unverifiable completion
|
|
237
|
+
If you notice these, stop and flag, do not continue:
|
|
238
|
+
- **loop**: the same suggestion fires tick after tick, nothing changes on disk
|
|
239
|
+
- **drift**: `MAP.md` file:line refs no longer match the code
|
|
240
|
+
- **stale task**: a backlog task references a file or symbol that no longer exists
|
|
241
|
+
- **hidden side effect**: an action changed external state (email sent, money moved, deploy) without a queued approval
|
|
242
|
+
- **unverifiable completion**: a task marked complete without a `Verify:` command that actually ran
|
|
243
|
+
- **slop**: output reads as generated: gradient text, purple gradients, em dashes, hype copy, eyebrow caps, or rambling filler. `atris slop detect` names it; fix it before shipping (see `## taste` and `## voice`)
|
|
204
244
|
|
|
205
245
|
Each has real examples in `lessons.md`. Before nontrivial execution, read the relevant recent lessons.
|
|
206
246
|
|
|
@@ -217,10 +257,10 @@ Pages that summarize or reference other files declare their sources in YAML fron
|
|
|
217
257
|
|
|
218
258
|
If any source was modified after `last_compiled`, the page is stale. Re-read the sources, update the page, bump `last_compiled`.
|
|
219
259
|
|
|
220
|
-
Compounding: when you answer a question that required synthesis across pages, file the answer back
|
|
260
|
+
Compounding: when you answer a question that required synthesis across pages, file the answer back: as a new page or into an existing one. Explorations accumulate.
|
|
221
261
|
|
|
222
262
|
Linting during review catches stale pages, orphans, contradictions, and concepts mentioned but missing their own page.
|
|
223
263
|
|
|
224
264
|
---
|
|
225
265
|
|
|
226
|
-
*Canonical copy: workspace root `atris.md`. Project copies are distributed; `atris update` syncs them
|
|
266
|
+
*Canonical copy: workspace root `atris.md`. Project copies are distributed; `atris update` syncs them.*
|