atris 3.74.4 → 3.74.5

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.
Files changed (117) hide show
  1. package/FOR_AGENTS.md +12 -12
  2. package/atris/AGENTS.md +7 -7
  3. package/atris/CLAUDE.md +10 -10
  4. package/atris/policies/atris-backend.md +1 -1
  5. package/atris/policies/atris-design.md +71 -71
  6. package/atris/policies/design-seed.md +28 -28
  7. package/atris/policies/writing.md +1 -1
  8. package/atris/skills/apps/SKILL.md +3 -3
  9. package/atris/skills/atris-feedback/SKILL.md +2 -2
  10. package/atris/skills/autopilot/SKILL.md +10 -10
  11. package/atris/skills/blocks/SKILL.md +16 -16
  12. package/atris/skills/calendar/SKILL.md +1 -1
  13. package/atris/skills/clawhub/atris/SKILL.md +4 -4
  14. package/atris/skills/clawhub/philosophy-of-work/SKILL.md +7 -7
  15. package/atris/skills/create-app/SKILL.md +18 -18
  16. package/atris/skills/create-member/SKILL.md +11 -11
  17. package/atris/skills/design/SKILL.md +1 -1
  18. package/atris/skills/drive/SKILL.md +25 -25
  19. package/atris/skills/email-agent/SKILL.md +11 -11
  20. package/atris/skills/endgame/SKILL.md +33 -33
  21. package/atris/skills/magic-inbox/SKILL.md +15 -15
  22. package/atris/skills/notion/SKILL.md +1 -1
  23. package/atris/skills/ramp/SKILL.md +7 -7
  24. package/atris/skills/research-search/SKILL.md +7 -7
  25. package/atris/skills/slides/SKILL.md +7 -7
  26. package/atris/skills/tidy/SKILL.md +11 -11
  27. package/atris/skills/wake/SKILL.md +11 -11
  28. package/atris/skills/writing/SKILL.md +5 -5
  29. package/atris/team/_template/SOUL.md +3 -3
  30. package/atris/team/brainstormer/MEMBER.md +2 -2
  31. package/atris/team/launcher/MEMBER.md +2 -2
  32. package/atris/team/mission-lead/MISSION.md +7 -7
  33. package/atris/team/opus-overnight/MISSION.md +16 -16
  34. package/atris/team/opus-overnight/STEERING.md +5 -5
  35. package/atris.md +9 -0
  36. package/bin/atris.js +16 -3
  37. package/commands/campaign.js +17 -2
  38. package/commands/card.js +19 -12
  39. package/commands/engine.js +92 -17
  40. package/commands/gm.js +30 -0
  41. package/commands/idea.js +263 -0
  42. package/commands/init.js +11 -2
  43. package/commands/land.js +39 -18
  44. package/commands/mission.js +4 -3
  45. package/commands/ninety-nine.js +288 -0
  46. package/commands/one-lap.js +46 -27
  47. package/commands/reel.js +12 -7
  48. package/commands/sync.js +10 -2
  49. package/lib/campaign-keep.js +23 -8
  50. package/lib/campaign-loop.js +24 -5
  51. package/lib/claude-boot-block.js +7 -4
  52. package/lib/engine-registry.js +139 -1
  53. package/lib/fleet.js +11 -2
  54. package/lib/gm-bet.js +338 -34
  55. package/lib/gm-phone-page.js +325 -33
  56. package/lib/gm-phone.js +5 -1
  57. package/lib/gm-season.js +14 -0
  58. package/lib/headless-chrome.js +39 -0
  59. package/lib/idea-gate.js +33 -0
  60. package/lib/idea-inbox.js +220 -0
  61. package/lib/idea-ledger.js +196 -0
  62. package/lib/idea-tick.js +384 -0
  63. package/lib/known-commands.js +1 -1
  64. package/lib/member-engine.js +1 -0
  65. package/lib/ninety-nine-sync.js +156 -0
  66. package/lib/ninety-nine.js +247 -0
  67. package/lib/opening-lines.js +94 -0
  68. package/lib/roster-markdown.js +39 -1
  69. package/lib/roster-models.js +1 -1
  70. package/lib/roster-swap.js +353 -0
  71. package/lib/spawn-env.js +29 -2
  72. package/lib/wish-audit.js +14 -0
  73. package/lib/yes-lock.js +343 -253
  74. package/lib/zen-apply.js +5 -3
  75. package/lib/zen.js +13 -1
  76. package/package.json +1 -1
  77. package/templates/business-starter/CLAUDE.md +7 -7
  78. package/templates/business-starter/MAP.md +1 -1
  79. package/templates/business-starter/TODO.md +1 -1
  80. package/templates/business-starter/atris.md +2 -2
  81. package/templates/business-starter/context/README.md +6 -6
  82. package/templates/business-starter/context/live-workspace.md +1 -1
  83. package/templates/business-starter/goals.md +1 -1
  84. package/templates/business-starter/instructions.md +1 -1
  85. package/templates/business-starter/memory.md +4 -4
  86. package/templates/business-starter/persona.md +3 -3
  87. package/templates/business-starter/policies/LESSONS.md +1 -1
  88. package/templates/business-starter/reports/README.md +1 -1
  89. package/templates/business-starter/skills/README.md +1 -1
  90. package/templates/business-starter/team/README.md +1 -1
  91. package/templates/business-starter/team/START_HERE.md +1 -1
  92. package/templates/business-starter/team/_template/SOUL.md +3 -3
  93. package/templates/business-starter/team/comms/SOUL.md +2 -2
  94. package/templates/business-starter/team/ops/SOUL.md +4 -4
  95. package/templates/business-starter/team/research/SOUL.md +3 -3
  96. package/templates/business-starter/wiki/index.md +1 -1
  97. package/templates/research-canonical/CLAUDE.md +7 -7
  98. package/templates/research-canonical/MAP.md +1 -1
  99. package/templates/research-canonical/TODO.md +1 -1
  100. package/templates/research-canonical/atris.md +2 -2
  101. package/templates/research-canonical/context/README.md +8 -8
  102. package/templates/research-canonical/context/live-workspace.md +1 -1
  103. package/templates/research-canonical/goals.md +2 -2
  104. package/templates/research-canonical/instructions.md +1 -1
  105. package/templates/research-canonical/memory.md +4 -4
  106. package/templates/research-canonical/persona.md +1 -1
  107. package/templates/research-canonical/policies/LESSONS.md +1 -1
  108. package/templates/research-canonical/reports/README.md +1 -1
  109. package/templates/research-canonical/skills/README.md +1 -1
  110. package/templates/research-canonical/team/README.md +1 -1
  111. package/templates/research-canonical/team/eval/SOUL.md +1 -1
  112. package/templates/research-canonical/team/experiment/SOUL.md +2 -2
  113. package/templates/research-canonical/team/hypothesis/SOUL.md +3 -3
  114. package/templates/research-canonical/team/literature/SOUL.md +2 -2
  115. package/templates/research-canonical/wiki/briefs/research-program.md +1 -1
  116. package/templates/research-canonical/wiki/index.md +1 -1
  117. package/utils/auth.js +1 -0
package/lib/zen-apply.js CHANGED
@@ -12,6 +12,7 @@ const path = require('node:path');
12
12
  const { spawnSync } = require('node:child_process');
13
13
  const { runGit } = require('./checkout-sync');
14
14
  const {
15
+ branchMovedSince,
15
16
  checkZen,
16
17
  defaultBranch,
17
18
  dirtyEntries,
@@ -168,12 +169,13 @@ function putAwaySideCopies(root, cutoff, staleCutoff, tag, teamState) {
168
169
  return { removed, busy, inUse, kept, notesKept, scheduled: scheduledCount, locked };
169
170
  }
170
171
 
171
- function clearMergedBranches(root, upstream, main) {
172
+ function clearMergedBranches(root, upstream, main, cutoff) {
172
173
  const checkedOut = new Set(listWorktrees(root).map((wt) => wt.branch).filter(Boolean));
173
174
  const current = gitOut(['symbolic-ref', '--quiet', '--short', 'HEAD'], root);
174
175
  const merged = (gitOut(['branch', '--merged', upstream, '--format=%(refname:short)'], root) || '')
175
176
  .split('\n')
176
- .filter((name) => name && name !== main && name !== current && !checkedOut.has(name));
177
+ .filter((name) => name && name !== main && name !== current && !checkedOut.has(name))
178
+ .filter((name) => !branchMovedSince(root, name, cutoff));
177
179
  let cleared = 0;
178
180
  for (const name of merged) {
179
181
  if (runGit(['branch', '-q', '-d', name], root).status === 0) cleared += 1;
@@ -602,7 +604,7 @@ function applyZen({ cwd = process.cwd(), fetch = true, freshMinutes, abandonedDa
602
604
  }
603
605
 
604
606
  if (before.upstream) {
605
- const cleared = clearMergedBranches(root, before.upstream, main);
607
+ const cleared = clearMergedBranches(root, before.upstream, main, now.getTime() - minutes * 60000);
606
608
  if (cleared) done.push(`cleared ${plural(cleared, 'finished branch', 'finished branches')}`);
607
609
  }
608
610
 
package/lib/zen.js CHANGED
@@ -275,6 +275,16 @@ function headMovedSince(checkout, cutoff) {
275
275
  return Math.max(mtime(path.join(dir, 'logs', 'HEAD')), mtime(path.join(dir, 'HEAD'))) > cutoff;
276
276
  }
277
277
 
278
+ // True when a branch was made or moved after the cutoff. A running job makes
279
+ // its branch a moment before it checks it out, so it has no commits yet and
280
+ // git calls it merged; clearing it would pull it out from under the job.
281
+ function branchMovedSince(root, name, cutoff) {
282
+ const common = gitOut(['rev-parse', '--git-common-dir'], root);
283
+ if (!common) return false;
284
+ const logged = lastEntryTime(path.join(path.resolve(root, common), 'logs', 'refs', 'heads', name));
285
+ return logged !== null && logged > cutoff;
286
+ }
287
+
278
288
  // A checkout whose core.bare got set to true still has its .git folder and
279
289
  // every file, but git stops looking at the files, so "not a git repository"
280
290
  // would send the reader the wrong way. Name it, with the one-line undo.
@@ -383,7 +393,8 @@ function checkZen({ cwd = process.cwd(), fetch = true, freshMinutes = freshMinut
383
393
  const checkedOut = new Set(others.map((wt) => wt.branch).filter(Boolean));
384
394
  merged = (gitOut(['branch', '--merged', upstream, '--format=%(refname:short)'], root) || '')
385
395
  .split('\n')
386
- .filter((name) => name && name !== branch && name !== main && !checkedOut.has(name));
396
+ .filter((name) => name && name !== branch && name !== main && !checkedOut.has(name))
397
+ .filter((name) => !branchMovedSince(root, name, cutoff));
387
398
  if (merged.length) {
388
399
  problems.push({
389
400
  kind: 'merged_branches',
@@ -431,6 +442,7 @@ function sideCopyLines(paths, days) {
431
442
 
432
443
  module.exports = {
433
444
  ABANDONED_DAYS,
445
+ branchMovedSince,
434
446
  idleWithOnlyNotes,
435
447
  lastTouched,
436
448
  untrackedFiles,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atris",
3
- "version": "3.74.4",
3
+ "version": "3.74.5",
4
4
  "description": "you say what you want in plain words. atris builds it, checks it, and shows you proof.",
5
5
  "mcpName": "io.github.atrislabs/atris",
6
6
  "main": "bin/atris.js",
@@ -1,8 +1,8 @@
1
- # {{name}} — Atris Workspace
1
+ # {{name}}: Atris Workspace
2
2
 
3
3
  You are the AI operating partner for **{{name}}**.
4
4
 
5
- ## FIRST MESSAGE — MANDATORY
5
+ ## FIRST MESSAGE: MANDATORY
6
6
 
7
7
  Before responding to the user's first message:
8
8
  1. Read `atris/atris.md` (boot protocol)
@@ -43,13 +43,13 @@ member -> mission start --verify -> status --status active -> one bounded step -
43
43
  - Prove: after one bounded step, run `atris mission tick <id> --verify --summary "<what changed>"`.
44
44
  - Close: if the verifier passes, run `atris mission complete <id> --proof "<receipt_path>"`; if current-agent work should keep going, repeat status -> step -> tick.
45
45
 
46
- ## Wiki Reads — REQUIRED for domain questions
46
+ ## Wiki Reads: REQUIRED for domain questions
47
47
 
48
48
  You have a compiled wiki at `atris/wiki/`:
49
- - `atris/wiki/people/` — humans (employees, contacts, stakeholders)
50
- - `atris/wiki/systems/` — tools, tables, dashboards, services, products
51
- - `atris/wiki/concepts/` — patterns, frameworks, recurring ideas
52
- - `atris/wiki/briefs/` — multi-page briefs and cross-cutting analyses
49
+ - `atris/wiki/people/`: humans (employees, contacts, stakeholders)
50
+ - `atris/wiki/systems/`: tools, tables, dashboards, services, products
51
+ - `atris/wiki/concepts/`: patterns, frameworks, recurring ideas
52
+ - `atris/wiki/briefs/`: multi-page briefs and cross-cutting analyses
53
53
 
54
54
  When asked anything domain-specific, **READ THE RELEVANT WIKI PAGE FIRST**. Cite the page in your answer. Do not answer from generic knowledge.
55
55
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Workspace Map
1
+ # {{name}}: Workspace Map
2
2
 
3
3
  > Navigation index. Source of truth for where things live.
4
4
  > Update this file when you discover or move things.
@@ -1,4 +1,4 @@
1
- # {{name}} — Active Tasks
1
+ # {{name}}: Active Tasks
2
2
 
3
3
  > Working task queue. Target state = 0.
4
4
  > Daily tasks live in `atris/logs/YYYY/YYYY-MM-DD.md`.
@@ -1,4 +1,4 @@
1
- # Atris Boot Protocol — {{name}}
1
+ # Atris Boot Protocol: {{name}}
2
2
 
3
3
  You are operating in the **{{name}}** Atris workspace.
4
4
 
@@ -43,7 +43,7 @@ and Swarlo is the live claim/report layer.
43
43
 
44
44
  | File | Purpose |
45
45
  |------|---------|
46
- | `atris/atris.md` | This file — boot protocol |
46
+ | `atris/atris.md` | This file: boot protocol |
47
47
  | `atris/MAP.md` | Navigation index |
48
48
  | `.atris/state/tasks.projection.json` | Current task projection |
49
49
  | `atris/TODO.md` | Rendered/legacy task fallback |
@@ -1,4 +1,4 @@
1
- # Context — {{name}}
1
+ # Context: {{name}}
2
2
 
3
3
  Raw source material for {{name}}.
4
4
  `atris/` is the context graph, so structured source material belongs here, not in the workspace root.
@@ -7,13 +7,13 @@ Raw source material for {{name}}.
7
7
 
8
8
  - Drop new sources here as files (`.md`, `.sql`, `.json`, etc.)
9
9
  - Run `atris ingest <path>` to compile into the wiki
10
- - Sources are **immutable** — never edit them after ingest. If a source changes, create a new dated copy.
10
+ - Sources are **immutable**: never edit them after ingest. If a source changes, create a new dated copy.
11
11
  - Files outside `atris/` should stay as boot shims, exports, or random scratch output only
12
12
 
13
13
  ## Suggested layout
14
14
 
15
- - `company-overview.md` — mission, team, stage
16
- - `people/` — one file per key stakeholder
17
- - `sql/` — database queries (if applicable)
18
- - `briefs/` — meeting notes, deal briefs
15
+ - `company-overview.md`: mission, team, stage
16
+ - `people/`: one file per key stakeholder
17
+ - `sql/`: database queries (if applicable)
18
+ - `briefs/`: meeting notes, deal briefs
19
19
  - Anything else relevant
@@ -1,4 +1,4 @@
1
- # {{name}} — Live Workspace
1
+ # {{name}}: Live Workspace
2
2
 
3
3
  ## Business
4
4
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Goals
1
+ # {{name}}: Goals
2
2
 
3
3
  Strategic direction. Weeks-to-months scale (TODO.md is days, this is weeks).
4
4
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Instructions
1
+ # {{name}}: Instructions
2
2
 
3
3
  Standard processes and workflows.
4
4
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Memory
1
+ # {{name}}: Memory
2
2
 
3
3
  Persistent learned context. Read before significant work.
4
4
 
@@ -6,19 +6,19 @@ Persistent learned context. Read before significant work.
6
6
 
7
7
  Things that look obvious but break unexpectedly.
8
8
 
9
- *(none yet — add when you discover surprising failures)*
9
+ *(none yet: add when you discover surprising failures)*
10
10
 
11
11
  ## Preferences
12
12
 
13
13
  Patterns this business prefers.
14
14
 
15
- *(none yet — document as you observe them)*
15
+ *(none yet: document as you observe them)*
16
16
 
17
17
  ## Dead Ends
18
18
 
19
19
  Approaches tried and abandoned, and why.
20
20
 
21
- *(none yet — log failed approaches)*
21
+ *(none yet: log failed approaches)*
22
22
 
23
23
  ## Domain Quirks
24
24
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Persona
1
+ # {{name}}: Persona
2
2
 
3
3
  Canonical Atris persona entrypoint for this workspace.
4
4
  Keep this file aligned with `atris/persona.md`.
@@ -20,11 +20,11 @@ Keep this file aligned with `atris/persona.md`.
20
20
 
21
21
  ## The Way Of Talking (every message a human reads)
22
22
 
23
- - Plain words. Say what happened and what it means for the reader — cause and effect, not machinery.
23
+ - Plain words. Say what happened and what it means for the reader: cause and effect, not machinery.
24
24
  - No task codes, commit hashes, or internal system names in the message body. If the reader needs a code to act, put ONE copyable command at the end.
25
25
  - No insider terms without defining them in the same breath.
26
26
  - One idea per line. Outcome first. Detail lives in files, not the message.
27
- - Lists: spell the numbers as words (One. Two. Three.), each item its own paragraph with a blank line between. Never markdown numbered lists — they render cramped.
27
+ - Lists: spell the numbers as words (One. Two. Three.), each item its own paragraph with a blank line between. Never markdown numbered lists: they render cramped.
28
28
  - The test: a sharp, tired non-engineer follows it on first read. If not, rewrite.
29
29
 
30
30
  ## Anti-patterns
@@ -1,4 +1,4 @@
1
- # {{name}} — Lessons
1
+ # {{name}}: Lessons
2
2
 
3
3
  Append-only log. One lesson per line. Format: `YYYY-MM-DD | category | lesson`
4
4
 
@@ -1,4 +1,4 @@
1
- # Reports — {{name}}
1
+ # Reports: {{name}}
2
2
 
3
3
  Past artifacts. Reports, analyses, decision documents.
4
4
 
@@ -1,4 +1,4 @@
1
- # Skills — {{name}}
1
+ # Skills: {{name}}
2
2
 
3
3
  Custom callable skills specific to {{name}}.
4
4
 
@@ -1,4 +1,4 @@
1
- # Team — {{name}}
1
+ # Team: {{name}}
2
2
 
3
3
  This folder lives inside `atris/` because the team is part of the context graph.
4
4
  Anything durable and structured belongs under `atris/`.
@@ -1,4 +1,4 @@
1
- # Team Start Here — {{name}}
1
+ # Team Start Here: {{name}}
2
2
 
3
3
  Use this when a collaborator opens the shared business workspace for the first time.
4
4
 
@@ -6,11 +6,11 @@ born: YYYY-MM-DD
6
6
 
7
7
  # Soul
8
8
 
9
- What this agent believes, values, and has learned — not what it does (that's MEMBER.md) or how it communicates (that's PERSONA.md). This is who it is when the rules run out.
9
+ What this agent believes, values, and has learned, not what it does (that's MEMBER.md) or how it communicates (that's PERSONA.md). This is who it is when the rules run out.
10
10
 
11
11
  ## Beliefs
12
12
 
13
- What you hold true about your work. Not rules — convictions.
13
+ What you hold true about your work. Not rules: convictions.
14
14
 
15
15
  - (Replace with 3-5 beliefs that guide judgment in ambiguous situations)
16
16
 
@@ -35,6 +35,6 @@ Where this agent's judgment is strong and where it's weak. Honest self-assessmen
35
35
 
36
36
  ## Voice
37
37
 
38
- Not communication style (that's PERSONA.md). This is the inner voice — the thing the agent says to itself before deciding.
38
+ Not communication style (that's PERSONA.md). This is the inner voice: the thing the agent says to itself before deciding.
39
39
 
40
40
  - (One sentence that captures how this agent thinks)
@@ -15,8 +15,8 @@ born: YYYY-MM-DD
15
15
  ## Values
16
16
 
17
17
  - One clear ask over a thorough recap
18
- - Human tone over polished tone — sound like a person, not a template
19
- - Timing matters as much as content — the right message at the wrong time is the wrong message
18
+ - Human tone over polished tone: sound like a person, not a template
19
+ - Timing matters as much as content: the right message at the wrong time is the wrong message
20
20
 
21
21
  ## Lessons
22
22
 
@@ -14,9 +14,9 @@ born: YYYY-MM-DD
14
14
 
15
15
  ## Values
16
16
 
17
- - Actionability over completeness — a half-brief with a clear next step beats a full brief with none
18
- - Momentum over perfection — keep things moving, clean up as you go
19
- - Transparency about blockers — hiding them doesn't unblock them
17
+ - Actionability over completeness: a half-brief with a clear next step beats a full brief with none
18
+ - Momentum over perfection: keep things moving, clean up as you go
19
+ - Transparency about blockers: hiding them doesn't unblock them
20
20
 
21
21
  ## Lessons
22
22
 
@@ -25,7 +25,7 @@ born: YYYY-MM-DD
25
25
  ## Edges
26
26
 
27
27
  - **Strong:** Turning vague status into concrete actions. Spotting what's actually blocked vs. what's just waiting.
28
- - **Weak:** Can be too operational — sometimes the right move is to step back and rethink the approach, not push forward.
28
+ - **Weak:** Can be too operational: sometimes the right move is to step back and rethink the approach, not push forward.
29
29
 
30
30
  ## Voice
31
31
 
@@ -14,9 +14,9 @@ born: YYYY-MM-DD
14
14
 
15
15
  ## Values
16
16
 
17
- - Source quality over volume — one verified fact beats ten plausible claims
18
- - Usefulness over thoroughness — research that doesn't change a decision was wasted
19
- - Intellectual honesty — "I don't know yet" is a valid finding
17
+ - Source quality over volume: one verified fact beats ten plausible claims
18
+ - Usefulness over thoroughness: research that doesn't change a decision was wasted
19
+ - Intellectual honesty: "I don't know yet" is a valid finding
20
20
 
21
21
  ## Lessons
22
22
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Wiki Index
1
+ # {{name}}: Wiki Index
2
2
 
3
3
  Compiled knowledge base. Sources live in `atris/context/` (immutable).
4
4
 
@@ -1,8 +1,8 @@
1
- # {{name}} — Atris Research Lab
1
+ # {{name}}: Atris Research Lab
2
2
 
3
3
  You are the AI research partner for **{{name}}**.
4
4
 
5
- ## FIRST MESSAGE — MANDATORY
5
+ ## FIRST MESSAGE: MANDATORY
6
6
 
7
7
  Before responding to the user's first message:
8
8
  1. Read `atris/atris.md` (boot protocol)
@@ -51,13 +51,13 @@ Default to:
51
51
  - evals before narratives
52
52
  - concise findings that a researcher can challenge
53
53
 
54
- ## Wiki Reads — REQUIRED for domain questions
54
+ ## Wiki Reads: REQUIRED for domain questions
55
55
 
56
56
  You have a compiled wiki at `atris/wiki/`:
57
- - `atris/wiki/people/` — humans (employees, contacts, stakeholders)
58
- - `atris/wiki/systems/` — tools, tables, dashboards, services, products
59
- - `atris/wiki/concepts/` — patterns, frameworks, recurring ideas
60
- - `atris/wiki/briefs/` — multi-page briefs and cross-cutting analyses
57
+ - `atris/wiki/people/`: humans (employees, contacts, stakeholders)
58
+ - `atris/wiki/systems/`: tools, tables, dashboards, services, products
59
+ - `atris/wiki/concepts/`: patterns, frameworks, recurring ideas
60
+ - `atris/wiki/briefs/`: multi-page briefs and cross-cutting analyses
61
61
 
62
62
  When asked anything domain-specific, **READ THE RELEVANT WIKI PAGE FIRST**. Cite the page in your answer. Do not answer from generic knowledge.
63
63
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Research Lab Map
1
+ # {{name}}: Research Lab Map
2
2
 
3
3
  > Navigation index. Source of truth for where things live.
4
4
  > Update this file when you discover or move things.
@@ -1,4 +1,4 @@
1
- # {{name}} — Active Tasks
1
+ # {{name}}: Active Tasks
2
2
 
3
3
  > Working task queue. Target state = 0.
4
4
  > Daily tasks live in `atris/logs/YYYY/YYYY-MM-DD.md`.
@@ -1,4 +1,4 @@
1
- # Atris Boot Protocol — {{name}} Research Lab
1
+ # Atris Boot Protocol: {{name}} Research Lab
2
2
 
3
3
  You are operating in the **{{name}}** Atris research workspace.
4
4
 
@@ -50,7 +50,7 @@ and Swarlo is the live claim/report layer.
50
50
 
51
51
  | File | Purpose |
52
52
  |------|---------|
53
- | `atris/atris.md` | This file — boot protocol |
53
+ | `atris/atris.md` | This file: boot protocol |
54
54
  | `atris/MAP.md` | Navigation index |
55
55
  | `.atris/state/tasks.projection.json` | Current task projection |
56
56
  | `atris/TODO.md` | Rendered/legacy task fallback |
@@ -1,4 +1,4 @@
1
- # Context — {{name}}
1
+ # Context: {{name}}
2
2
 
3
3
  Raw source material for {{name}}.
4
4
  `atris/` is the context graph, so structured source material belongs here, not in the workspace root.
@@ -7,15 +7,15 @@ Raw source material for {{name}}.
7
7
 
8
8
  - Drop new sources here as files (`.md`, `.sql`, `.json`, etc.)
9
9
  - Run `atris ingest <path>` to compile into the wiki
10
- - Sources are **immutable** — never edit them after ingest. If a source changes, create a new dated copy.
10
+ - Sources are **immutable**. Never edit them after ingest. If a source changes, create a new dated copy.
11
11
  - Files outside `atris/` should stay as boot shims, exports, or random scratch output only
12
12
 
13
13
  ## Suggested layout
14
14
 
15
- - `lab-overview.md` — mission, domains, current bets
16
- - `people/` — one file per PI, collaborator, or stakeholder
17
- - `papers/` — source PDFs or notes
18
- - `datasets/` — dataset cards, splits, licenses
19
- - `runs/` — configs, prompts, seeds, outputs
20
- - `briefs/` — meeting notes, experiment recaps
15
+ - `lab-overview.md`: mission, domains, current bets
16
+ - `people/`: one file per PI, collaborator, or stakeholder
17
+ - `papers/`: source PDFs or notes
18
+ - `datasets/`: dataset cards, splits, licenses
19
+ - `runs/`: configs, prompts, seeds, outputs
20
+ - `briefs/`: meeting notes, experiment recaps
21
21
  - Anything else relevant
@@ -1,4 +1,4 @@
1
- # {{name}} — Live Research Workspace
1
+ # {{name}}: Live Research Workspace
2
2
 
3
3
  ## Lab
4
4
 
@@ -1,10 +1,10 @@
1
- # {{name}} — Research Goals
1
+ # {{name}}: Research Goals
2
2
 
3
3
  Research direction. Weeks-to-months scale (TODO.md is days, this is weeks).
4
4
 
5
5
  ## Active Goals
6
6
 
7
- *(No goals yet — add the first research goal to give the agent direction.)*
7
+ *(No goals yet. Add the first research goal to give the agent direction.)*
8
8
 
9
9
  <!-- Example:
10
10
  ### Beat the current baseline on eval set v1
@@ -1,4 +1,4 @@
1
- # {{name}} — Research Instructions
1
+ # {{name}}: Research Instructions
2
2
 
3
3
  Standard processes and workflows.
4
4
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Memory
1
+ # {{name}}: Memory
2
2
 
3
3
  Persistent learned context. Read before significant work.
4
4
 
@@ -6,19 +6,19 @@ Persistent learned context. Read before significant work.
6
6
 
7
7
  Things that look obvious but break unexpectedly.
8
8
 
9
- *(none yet — add when you discover surprising failures)*
9
+ *(none yet, add when you discover surprising failures)*
10
10
 
11
11
  ## Preferences
12
12
 
13
13
  Patterns this lab prefers.
14
14
 
15
- *(none yet — document as you observe them)*
15
+ *(none yet, document as you observe them)*
16
16
 
17
17
  ## Dead Ends
18
18
 
19
19
  Approaches tried and abandoned, and why.
20
20
 
21
- *(none yet — log failed approaches)*
21
+ *(none yet, log failed approaches)*
22
22
 
23
23
  ## Domain Quirks
24
24
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Persona
1
+ # {{name}}: Persona
2
2
 
3
3
  Atris persona entrypoint for this research workspace.
4
4
  Keep this file aligned with `atris/persona.md`.
@@ -1,4 +1,4 @@
1
- # {{name}} — Lessons
1
+ # {{name}}: Lessons
2
2
 
3
3
  Append-only log. One lesson per line. Format: `YYYY-MM-DD | category | lesson`
4
4
 
@@ -1,4 +1,4 @@
1
- # Reports — {{name}}
1
+ # Reports: {{name}}
2
2
 
3
3
  Past artifacts. Eval notes, findings, replication checks, decision documents.
4
4
 
@@ -1,4 +1,4 @@
1
- # Skills — {{name}}
1
+ # Skills: {{name}}
2
2
 
3
3
  Custom callable skills specific to {{name}}.
4
4
 
@@ -1,4 +1,4 @@
1
- # Team — {{name}}
1
+ # Team: {{name}}
2
2
 
3
3
  This folder lives inside `atris/` because the team is part of the context graph.
4
4
  Anything durable and structured belongs under `atris/`.
@@ -25,7 +25,7 @@ born: YYYY-MM-DD
25
25
  ## Edges
26
26
 
27
27
  - **Strong:** Designing rubrics that catch real quality differences. Spotting metric gaming.
28
- - **Weak:** Can be too rigid — sometimes qualitative judgment is more informative than a score.
28
+ - **Weak:** Can be too rigid: sometimes qualitative judgment is more informative than a score.
29
29
 
30
30
  ## Voice
31
31
 
@@ -16,7 +16,7 @@ born: YYYY-MM-DD
16
16
 
17
17
  - Reproducibility over novelty
18
18
  - One variable at a time over comprehensive sweeps
19
- - Honest data — never massage results to fit the hypothesis
19
+ - Honest data: never massage results to fit the hypothesis
20
20
 
21
21
  ## Lessons
22
22
 
@@ -25,7 +25,7 @@ born: YYYY-MM-DD
25
25
  ## Edges
26
26
 
27
27
  - **Strong:** Designing clean, minimal experiments. Catching confounds.
28
- - **Weak:** Can over-constrain — sometimes the most informative experiment is the messy exploratory one.
28
+ - **Weak:** Can over-constrain. Sometimes the most informative experiment is the messy exploratory one.
29
29
 
30
30
  ## Voice
31
31
 
@@ -8,7 +8,7 @@ born: YYYY-MM-DD
8
8
 
9
9
  ## Beliefs
10
10
 
11
- - A hypothesis that can't fail isn't a hypothesis — it's a wish.
11
+ - A hypothesis that can't fail isn't a hypothesis: it's a wish.
12
12
  - The hardest part of research is asking the right question, not finding the right answer.
13
13
  - Small, testable claims compound faster than grand theories.
14
14
 
@@ -16,7 +16,7 @@ born: YYYY-MM-DD
16
16
 
17
17
  - Falsifiability over elegance
18
18
  - Clarity over completeness
19
- - Intellectual courage — propose what might be wrong, not what's safe
19
+ - Intellectual courage: propose what might be wrong, not what's safe
20
20
 
21
21
  ## Lessons
22
22
 
@@ -25,7 +25,7 @@ born: YYYY-MM-DD
25
25
  ## Edges
26
26
 
27
27
  - **Strong:** Stripping ideas down to their testable core.
28
- - **Weak:** Can be too reductive — sometimes the messy version of a question is the honest one.
28
+ - **Weak:** Can be too reductive: sometimes the messy version of a question is the honest one.
29
29
 
30
30
  ## Voice
31
31
 
@@ -15,8 +15,8 @@ born: YYYY-MM-DD
15
15
  ## Values
16
16
 
17
17
  - Primary sources over summaries
18
- - Recency-weighted but not recency-biased — old papers that were right are still right
19
- - Intellectual honesty — cite what contradicts you, not just what supports you
18
+ - Recency-weighted but not recency-biased: old papers that were right are still right
19
+ - Intellectual honesty: cite what contradicts you, not just what supports you
20
20
 
21
21
  ## Lessons
22
22
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Research Program
1
+ # {{name}}: Research Program
2
2
 
3
3
  Starter brief for the lab.
4
4
 
@@ -1,4 +1,4 @@
1
- # {{name}} — Wiki Index
1
+ # {{name}}: Wiki Index
2
2
 
3
3
  Compiled knowledge base. Sources live in `atris/context/` (immutable).
4
4
 
package/utils/auth.js CHANGED
@@ -941,6 +941,7 @@ module.exports = {
941
941
  decodeJwtClaims,
942
942
  getTokenExpiryEpochSeconds,
943
943
  shouldRefreshToken,
944
+ getAtrisDir,
944
945
  getCredentialsPath,
945
946
  saveCredentials,
946
947
  saveAgentClientCredentials,