agentopology 0.2.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -7
- package/dist/analyzer/__tests__/analyzer.test.js +36 -9
- package/dist/analyzer/__tests__/analyzer.test.js.map +1 -1
- package/dist/analyzer/__tests__/observability-gap.test.js +40 -10
- package/dist/analyzer/__tests__/observability-gap.test.js.map +1 -1
- package/dist/analyzer/index.d.ts +2 -1
- package/dist/analyzer/index.d.ts.map +1 -1
- package/dist/analyzer/index.js +1 -1
- package/dist/analyzer/index.js.map +1 -1
- package/dist/bindings/__tests__/bindings.test.js +20 -5
- package/dist/bindings/__tests__/bindings.test.js.map +1 -1
- package/dist/bindings/__tests__/claude-workflow.test.js +12 -3
- package/dist/bindings/__tests__/claude-workflow.test.js.map +1 -1
- package/dist/bindings/__tests__/defaults-agreement.test.d.ts +16 -0
- package/dist/bindings/__tests__/defaults-agreement.test.d.ts.map +1 -0
- package/dist/bindings/__tests__/defaults-agreement.test.js +80 -0
- package/dist/bindings/__tests__/defaults-agreement.test.js.map +1 -0
- package/dist/bindings/__tests__/observability.test.js +8 -2
- package/dist/bindings/__tests__/observability.test.js.map +1 -1
- package/dist/bindings/__tests__/stub-generation.test.js +8 -2
- package/dist/bindings/__tests__/stub-generation.test.js.map +1 -1
- package/dist/bindings/claude-code.d.ts.map +1 -1
- package/dist/bindings/claude-code.js +102 -3
- package/dist/bindings/claude-code.js.map +1 -1
- package/dist/bindings/claude-workflow.d.ts.map +1 -1
- package/dist/bindings/claude-workflow.js +2 -1
- package/dist/bindings/claude-workflow.js.map +1 -1
- package/dist/bindings/codex.d.ts.map +1 -1
- package/dist/bindings/codex.js +6 -2
- package/dist/bindings/codex.js.map +1 -1
- package/dist/bindings/gemini-cli.d.ts.map +1 -1
- package/dist/bindings/gemini-cli.js +2 -1
- package/dist/bindings/gemini-cli.js.map +1 -1
- package/dist/bindings/kiro.d.ts.map +1 -1
- package/dist/bindings/kiro.js +2 -1
- package/dist/bindings/kiro.js.map +1 -1
- package/dist/bindings/openclaw.d.ts.map +1 -1
- package/dist/bindings/openclaw.js +2 -1
- package/dist/bindings/openclaw.js.map +1 -1
- package/dist/cli/__tests__/cli.test.d.ts +12 -0
- package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli.test.js +171 -0
- package/dist/cli/__tests__/cli.test.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +344 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/docs/content.d.ts.map +1 -1
- package/dist/docs/content.js +112 -0
- package/dist/docs/content.js.map +1 -1
- package/dist/exporters/ascii.d.ts +13 -0
- package/dist/exporters/ascii.d.ts.map +1 -0
- package/dist/exporters/ascii.js +26 -0
- package/dist/exporters/ascii.js.map +1 -0
- package/dist/exporters/brief.d.ts +14 -0
- package/dist/exporters/brief.d.ts.map +1 -0
- package/dist/exporters/brief.js +37 -0
- package/dist/exporters/brief.js.map +1 -0
- package/dist/exporters/index.d.ts +2 -0
- package/dist/exporters/index.d.ts.map +1 -1
- package/dist/exporters/index.js +6 -0
- package/dist/exporters/index.js.map +1 -1
- package/dist/exporters/markdown.d.ts.map +1 -1
- package/dist/exporters/markdown.js +2 -1
- package/dist/exporters/markdown.js.map +1 -1
- package/dist/exporters/mermaid.d.ts.map +1 -1
- package/dist/exporters/mermaid.js +2 -1
- package/dist/exporters/mermaid.js.map +1 -1
- package/dist/import/__tests__/import.test.js +8 -2
- package/dist/import/__tests__/import.test.js.map +1 -1
- package/dist/parser/__tests__/parser.test.js +1553 -207
- package/dist/parser/__tests__/parser.test.js.map +1 -1
- package/dist/parser/__tests__/spec-sync.test.d.ts +10 -0
- package/dist/parser/__tests__/spec-sync.test.d.ts.map +1 -0
- package/dist/parser/__tests__/spec-sync.test.js +60 -0
- package/dist/parser/__tests__/spec-sync.test.js.map +1 -0
- package/dist/parser/ast.d.ts +39 -0
- package/dist/parser/ast.d.ts.map +1 -1
- package/dist/parser/index.d.ts +50 -6
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +241 -30
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/validator.d.ts +7 -1
- package/dist/parser/validator.d.ts.map +1 -1
- package/dist/parser/validator.js +143 -5
- package/dist/parser/validator.js.map +1 -1
- package/dist/plan/__tests__/brief.test.d.ts +2 -0
- package/dist/plan/__tests__/brief.test.d.ts.map +1 -0
- package/dist/plan/__tests__/brief.test.js +442 -0
- package/dist/plan/__tests__/brief.test.js.map +1 -0
- package/dist/plan/brief.d.ts +207 -0
- package/dist/plan/brief.d.ts.map +1 -0
- package/dist/plan/brief.js +342 -0
- package/dist/plan/brief.js.map +1 -0
- package/dist/plan/render.d.ts +20 -0
- package/dist/plan/render.d.ts.map +1 -0
- package/dist/plan/render.js +425 -0
- package/dist/plan/render.js.map +1 -0
- package/dist/render/__tests__/ascii.test.d.ts +2 -0
- package/dist/render/__tests__/ascii.test.d.ts.map +1 -0
- package/dist/render/__tests__/ascii.test.js +171 -0
- package/dist/render/__tests__/ascii.test.js.map +1 -0
- package/dist/render/ascii.d.ts +23 -0
- package/dist/render/ascii.d.ts.map +1 -0
- package/dist/render/ascii.js +178 -0
- package/dist/render/ascii.js.map +1 -0
- package/dist/resolve/__tests__/defaults.test.d.ts +2 -0
- package/dist/resolve/__tests__/defaults.test.d.ts.map +1 -0
- package/dist/resolve/__tests__/defaults.test.js +109 -0
- package/dist/resolve/__tests__/defaults.test.js.map +1 -0
- package/dist/resolve/__tests__/order.test.d.ts +2 -0
- package/dist/resolve/__tests__/order.test.d.ts.map +1 -0
- package/dist/resolve/__tests__/order.test.js +238 -0
- package/dist/resolve/__tests__/order.test.js.map +1 -0
- package/dist/resolve/__tests__/phase.test.d.ts +12 -0
- package/dist/resolve/__tests__/phase.test.d.ts.map +1 -0
- package/dist/resolve/__tests__/phase.test.js +81 -0
- package/dist/resolve/__tests__/phase.test.js.map +1 -0
- package/dist/resolve/defaults.d.ts +51 -0
- package/dist/resolve/defaults.d.ts.map +1 -0
- package/dist/resolve/defaults.js +109 -0
- package/dist/resolve/defaults.js.map +1 -0
- package/dist/resolve/order.d.ts +73 -0
- package/dist/resolve/order.d.ts.map +1 -0
- package/dist/resolve/order.js +208 -0
- package/dist/resolve/order.js.map +1 -0
- package/dist/resolve/phase.d.ts +57 -0
- package/dist/resolve/phase.d.ts.map +1 -0
- package/dist/resolve/phase.js +60 -0
- package/dist/resolve/phase.js.map +1 -0
- package/dist/scaffold/__tests__/scaffold.test.js +8 -2
- package/dist/scaffold/__tests__/scaffold.test.js.map +1 -1
- package/dist/scaffold/__tests__/settings-merge.test.js +95 -0
- package/dist/scaffold/__tests__/settings-merge.test.js.map +1 -1
- package/dist/scaffold/incremental.d.ts.map +1 -1
- package/dist/scaffold/incremental.js +13 -2
- package/dist/scaffold/incremental.js.map +1 -1
- package/dist/visualizer/__tests__/brain.test.d.ts +2 -0
- package/dist/visualizer/__tests__/brain.test.d.ts.map +1 -0
- package/dist/visualizer/__tests__/brain.test.js +138 -0
- package/dist/visualizer/__tests__/brain.test.js.map +1 -0
- package/dist/visualizer/__tests__/topology-brain-link.test.d.ts +2 -0
- package/dist/visualizer/__tests__/topology-brain-link.test.d.ts.map +1 -0
- package/dist/visualizer/__tests__/topology-brain-link.test.js +56 -0
- package/dist/visualizer/__tests__/topology-brain-link.test.js.map +1 -0
- package/dist/visualizer/brain.d.ts +97 -0
- package/dist/visualizer/brain.d.ts.map +1 -0
- package/dist/visualizer/brain.js +473 -0
- package/dist/visualizer/brain.js.map +1 -0
- package/dist/visualizer/index.d.ts +19 -1
- package/dist/visualizer/index.d.ts.map +1 -1
- package/dist/visualizer/index.js +26 -11
- package/dist/visualizer/index.js.map +1 -1
- package/examples/code-review.at +32 -4
- package/examples/company-brain-team.at +241 -0
- package/examples/company-brain.at +104 -0
- package/examples/data-processing.at +33 -4
- package/examples/logos/gmail.svg +1 -0
- package/examples/logos/slack.svg +1 -0
- package/package.json +1 -1
- package/spec/grammar.md +55 -3
- package/spec/validation.md +103 -35
package/dist/visualizer/index.js
CHANGED
|
@@ -48,19 +48,11 @@ function loadDagreSrc() {
|
|
|
48
48
|
throw new Error("Could not find dagre.min.js — run: npm install dagre@0.8.5");
|
|
49
49
|
}
|
|
50
50
|
const DAGRE_SRC = loadDagreSrc();
|
|
51
|
-
|
|
52
|
-
// Public API
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
/**
|
|
55
|
-
* Generate a self-contained HTML string that visualizes the given topology.
|
|
56
|
-
*
|
|
57
|
-
* Save the returned string to a `.html` file and open it in any browser.
|
|
58
|
-
*/
|
|
59
|
-
export function generateVisualization(ast) {
|
|
51
|
+
export function generateVisualization(ast, opts = {}) {
|
|
60
52
|
const dataJson = JSON.stringify(astToViewData(ast));
|
|
61
53
|
const issues = validate(ast);
|
|
62
54
|
const issuesJson = JSON.stringify(issues);
|
|
63
|
-
return buildHtml(dataJson, ast.topology.name, issuesJson);
|
|
55
|
+
return buildHtml(dataJson, ast.topology.name, issuesJson, opts.brains ?? []);
|
|
64
56
|
}
|
|
65
57
|
// ---------------------------------------------------------------------------
|
|
66
58
|
// AST -> view data (matches the DEFAULT_DATA shape in the advanced viewer)
|
|
@@ -218,7 +210,22 @@ function astToViewData(ast) {
|
|
|
218
210
|
// ---------------------------------------------------------------------------
|
|
219
211
|
// HTML builder
|
|
220
212
|
// ---------------------------------------------------------------------------
|
|
221
|
-
function buildHtml(dataJson, title, issuesJson) {
|
|
213
|
+
function buildHtml(dataJson, title, issuesJson, brains = []) {
|
|
214
|
+
let brainLink = "";
|
|
215
|
+
if (brains.length === 1) {
|
|
216
|
+
brainLink = `<a class="header-btn brain-link" href="${escHtml(brains[0].href)}" title="Open the company brain graph">🧠 Open Brain →</a>`;
|
|
217
|
+
}
|
|
218
|
+
else if (brains.length > 1) {
|
|
219
|
+
// Several brains → a dropdown listing each by store id.
|
|
220
|
+
const items = brains
|
|
221
|
+
.map((b) => `<a href="${escHtml(b.href)}">🧠 ${escHtml(b.id)} →</a>`)
|
|
222
|
+
.join("");
|
|
223
|
+
brainLink =
|
|
224
|
+
`<div class="brain-menu">` +
|
|
225
|
+
`<button class="header-btn brain-link" onclick="this.parentNode.classList.toggle('open')">🧠 ${brains.length} Brains ▾</button>` +
|
|
226
|
+
`<div class="brain-menu-list">${items}</div>` +
|
|
227
|
+
`</div>`;
|
|
228
|
+
}
|
|
222
229
|
return `<!DOCTYPE html>
|
|
223
230
|
<html lang="en">
|
|
224
231
|
<head>
|
|
@@ -257,6 +264,7 @@ ${CSS}
|
|
|
257
264
|
<div id="header-actions">
|
|
258
265
|
<div class="topo-desc" id="topo-desc"></div>
|
|
259
266
|
<div class="pattern-badges" id="pattern-badges"></div>
|
|
267
|
+
${brainLink}
|
|
260
268
|
<input type="text" id="search-input" class="search-input" placeholder="Search nodes..." oninput="onSearchInput(this.value)" />
|
|
261
269
|
<button class="header-btn" id="dataflow-btn" onclick="toggleDataFlow()">Data Flow</button>
|
|
262
270
|
<button class="header-btn" id="orientation-btn" onclick="toggleOrientation()" title="Switch between vertical and horizontal layout">↔ Horizontal</button>
|
|
@@ -383,6 +391,13 @@ body{background:var(--bg);color:var(--t);font-family:var(--font-body);line-heigh
|
|
|
383
391
|
.pattern-badge.fan-out{background:var(--orange-bg);color:var(--orange);border:1px solid var(--orange-br)}
|
|
384
392
|
.pattern-badge.human-gate{background:var(--gold-bg);color:var(--gold);border:1px solid var(--gold-br)}
|
|
385
393
|
.header-btn{background:var(--s2);border:1px solid var(--b);color:var(--t2);padding:5px 12px;border-radius:6px;font-size:11px;cursor:pointer;transition:all .15s;font-family:var(--font-mono);letter-spacing:.3px}
|
|
394
|
+
.brain-link{text-decoration:none;color:var(--purple);border-color:var(--purple-br);background:var(--purple-bg)}
|
|
395
|
+
.brain-link:hover{background:rgba(167,139,250,.18);border-color:var(--purple)}
|
|
396
|
+
.brain-menu{position:relative;display:inline-block}
|
|
397
|
+
.brain-menu-list{display:none;position:absolute;top:calc(100% + 4px);right:0;z-index:30;min-width:160px;background:var(--s);border:1px solid var(--b2);border-radius:8px;padding:4px;box-shadow:0 8px 24px rgba(0,0,0,.5)}
|
|
398
|
+
.brain-menu.open .brain-menu-list{display:block}
|
|
399
|
+
.brain-menu-list a{display:block;text-decoration:none;color:var(--purple);font-family:var(--font-mono);font-size:11px;padding:6px 10px;border-radius:5px}
|
|
400
|
+
.brain-menu-list a:hover{background:var(--purple-bg)}
|
|
386
401
|
.header-btn:hover{background:rgba(255,255,255,.06);color:var(--t);border-color:var(--b2)}
|
|
387
402
|
.header-btn.active{background:var(--amber-bg);color:var(--amber);border-color:var(--amber-br)}
|
|
388
403
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visualizer/index.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6lDV,CAAC;AAEF,8EAA8E"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/visualizer/index.ts"],"names":[],"mappings":"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"}
|
package/examples/code-review.at
CHANGED
|
@@ -50,7 +50,14 @@ topology code-review : [pipeline, fan-out, human-gate] {
|
|
|
50
50
|
role: analyzer
|
|
51
51
|
model: sonnet
|
|
52
52
|
permissions: supervised
|
|
53
|
-
prompt
|
|
53
|
+
prompt {
|
|
54
|
+
Read the diff at workspace/pr-diff.md.
|
|
55
|
+
|
|
56
|
+
Report structural risk only — complexity, dependency changes, and blast
|
|
57
|
+
radius. Do not comment on security; a separate agent covers that.
|
|
58
|
+
|
|
59
|
+
Write your findings to workspace/analysis.md and set risk-level.
|
|
60
|
+
}
|
|
54
61
|
phase: 1
|
|
55
62
|
tools: [Read, Grep, Glob]
|
|
56
63
|
reads: ["workspace/pr-diff.md"]
|
|
@@ -64,7 +71,14 @@ topology code-review : [pipeline, fan-out, human-gate] {
|
|
|
64
71
|
role: security
|
|
65
72
|
model: sonnet
|
|
66
73
|
permissions: supervised
|
|
67
|
-
prompt
|
|
74
|
+
prompt {
|
|
75
|
+
Read the diff at workspace/pr-diff.md.
|
|
76
|
+
|
|
77
|
+
Look for injection, auth or authorization changes, secret handling, and
|
|
78
|
+
unsafe deserialization. Do not comment on style or complexity.
|
|
79
|
+
|
|
80
|
+
Write your findings to workspace/security.md and set has-vulnerabilities.
|
|
81
|
+
}
|
|
68
82
|
phase: 1
|
|
69
83
|
tools: [Read, Grep, Glob]
|
|
70
84
|
reads: ["workspace/pr-diff.md"]
|
|
@@ -79,7 +93,14 @@ topology code-review : [pipeline, fan-out, human-gate] {
|
|
|
79
93
|
role: reviewer
|
|
80
94
|
model: opus
|
|
81
95
|
permissions: supervised
|
|
82
|
-
prompt
|
|
96
|
+
prompt {
|
|
97
|
+
Read the diff, workspace/analysis.md and workspace/security.md.
|
|
98
|
+
|
|
99
|
+
The two reports were produced independently. Where they disagree, say so
|
|
100
|
+
rather than silently picking one.
|
|
101
|
+
|
|
102
|
+
Write your review to workspace/review.md and set a verdict.
|
|
103
|
+
}
|
|
83
104
|
phase: 2
|
|
84
105
|
tools: [Read, Grep, Glob]
|
|
85
106
|
reads: ["workspace/pr-diff.md", "workspace/analysis.md", "workspace/security.md"]
|
|
@@ -93,7 +114,14 @@ topology code-review : [pipeline, fan-out, human-gate] {
|
|
|
93
114
|
role: reporter
|
|
94
115
|
model: haiku
|
|
95
116
|
permissions: autonomous
|
|
96
|
-
prompt
|
|
117
|
+
prompt {
|
|
118
|
+
Read workspace/analysis.md, workspace/security.md and workspace/review.md.
|
|
119
|
+
|
|
120
|
+
Produce one report a human can act on: the verdict, the reasons behind it,
|
|
121
|
+
and the specific changes required. No new analysis.
|
|
122
|
+
|
|
123
|
+
Write it to workspace/final-report.md.
|
|
124
|
+
}
|
|
97
125
|
phase: 3
|
|
98
126
|
tools: [Read, Write, Glob]
|
|
99
127
|
reads: ["workspace/analysis.md", "workspace/security.md", "workspace/review.md"]
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# company-brain-team.at — A team of agents that build & maintain a company brain
|
|
2
|
+
#
|
|
3
|
+
# The flagship "company brain" topology. A folder of Obsidian-format markdown,
|
|
4
|
+
# fed and maintained by a TEAM — not one librarian:
|
|
5
|
+
#
|
|
6
|
+
# 📧 gmail-ingester ─┐
|
|
7
|
+
# 💬 slack-ingester ─┼─► drop raw notes into brain/ ─► 👤 librarian wires them
|
|
8
|
+
# 📅 calendar-ingester ─┘ (each owns ONE source) (links, tags, hubs)
|
|
9
|
+
# ─► 🔍 auditor heals the graph
|
|
10
|
+
#
|
|
11
|
+
# - Ingesters are scheduled — they pull from their source and write raw markdown.
|
|
12
|
+
# - The librarian is custodian-of the brain: it wires dropped notes into the graph.
|
|
13
|
+
# - The auditor is custodian-of the brain too: it heals broken links, surfaces
|
|
14
|
+
# ghost nodes, and flags duplicates.
|
|
15
|
+
# - A researcher reads the brain to answer questions.
|
|
16
|
+
#
|
|
17
|
+
# This is the whitespace: declarative + multi-agent team + Obsidian-portable +
|
|
18
|
+
# agents own memory layers. Demonstrates `brain` + `custodian-of` + ingestion.
|
|
19
|
+
|
|
20
|
+
topology company-brain-team : [brain, event-driven, human-gate] {
|
|
21
|
+
|
|
22
|
+
meta {
|
|
23
|
+
version: "0.1.0"
|
|
24
|
+
description: "A team of agents that ingest, wire, and maintain a company brain"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
# --- The brain: one Obsidian-format markdown vault, no database ---
|
|
28
|
+
|
|
29
|
+
memory {
|
|
30
|
+
store brain {
|
|
31
|
+
type: brain
|
|
32
|
+
description: "The company brain — fed by ingesters, wired by the librarian"
|
|
33
|
+
path: "brain/"
|
|
34
|
+
format: obsidian
|
|
35
|
+
scope: org
|
|
36
|
+
|
|
37
|
+
# Presentation only — colors/icons for the graph view, by provenance.
|
|
38
|
+
# A note's `source:` frontmatter (stamped by its ingester) maps to a look.
|
|
39
|
+
# Cosmetic: bindings ignore this; delete it and the brain works the same.
|
|
40
|
+
sources {
|
|
41
|
+
gmail {
|
|
42
|
+
color: "#EA4335"
|
|
43
|
+
icon: "./logos/gmail.svg"
|
|
44
|
+
}
|
|
45
|
+
slack {
|
|
46
|
+
color: "#4A154B"
|
|
47
|
+
icon: "./logos/slack.svg"
|
|
48
|
+
}
|
|
49
|
+
calendar {
|
|
50
|
+
color: "#4285F4"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
# --- Ingesters: each owns ONE external source, writes raw notes ---
|
|
57
|
+
|
|
58
|
+
agent gmail-ingester {
|
|
59
|
+
model: sonnet
|
|
60
|
+
description: "Pulls notable emails and writes them as raw notes into the brain"
|
|
61
|
+
tools: [Read, Write, Grep, Glob]
|
|
62
|
+
mcp-servers: [gmail]
|
|
63
|
+
writes: ["brain/"]
|
|
64
|
+
|
|
65
|
+
prompt {
|
|
66
|
+
You ingest email into the brain. On each run:
|
|
67
|
+
- Pull recent notable threads (decisions, deals, intros, commitments).
|
|
68
|
+
- For each, write ONE raw markdown note into `brain/` with a clear title
|
|
69
|
+
and YAML frontmatter (date, source: gmail, participants).
|
|
70
|
+
- Do NOT wire links or tags — that is the librarian's job. Just capture
|
|
71
|
+
the content faithfully. Skip noise (newsletters, automated mail).
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
agent slack-ingester {
|
|
76
|
+
model: sonnet
|
|
77
|
+
description: "Captures key Slack decisions and threads as raw notes"
|
|
78
|
+
tools: [Read, Write, Grep, Glob]
|
|
79
|
+
mcp-servers: [slack]
|
|
80
|
+
writes: ["brain/"]
|
|
81
|
+
|
|
82
|
+
prompt {
|
|
83
|
+
You ingest Slack into the brain. On each run, capture threads where a
|
|
84
|
+
decision was made, a commitment given, or knowledge shared. Write each
|
|
85
|
+
as ONE raw markdown note in `brain/` with frontmatter (date, source:
|
|
86
|
+
slack, channel). Leave linking and tagging to the librarian.
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
agent calendar-ingester {
|
|
91
|
+
model: sonnet
|
|
92
|
+
description: "Turns meetings into raw notes (attendees, outcomes)"
|
|
93
|
+
tools: [Read, Write, Grep, Glob]
|
|
94
|
+
mcp-servers: [calendar]
|
|
95
|
+
writes: ["brain/"]
|
|
96
|
+
|
|
97
|
+
prompt {
|
|
98
|
+
You ingest calendar events into the brain. For meetings that mattered,
|
|
99
|
+
write ONE raw markdown note in `brain/` with frontmatter (date, source:
|
|
100
|
+
calendar, attendees) and any outcomes/notes you can infer. No linking —
|
|
101
|
+
that is the librarian's job.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
# --- Librarian: custodian that WIRES dropped notes into the graph ---
|
|
106
|
+
|
|
107
|
+
agent librarian {
|
|
108
|
+
model: sonnet
|
|
109
|
+
description: "Wires raw notes into the brain graph — links, tags, hubs"
|
|
110
|
+
tools: [Read, Write, Edit, Grep, Glob]
|
|
111
|
+
|
|
112
|
+
custodian-of: [brain] {
|
|
113
|
+
does: [link, tag, index, dedupe]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
prompt {
|
|
117
|
+
You are the brain's librarian. Raw notes arrive from the ingesters and
|
|
118
|
+
from humans. You never invent content — you wire what is dropped in.
|
|
119
|
+
Resolve mentions into [[wikilinks]], assign #nested/tags, keep the hub
|
|
120
|
+
notes current, and flag duplicates. Leave ghost links to mark gaps.
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# --- Auditor: custodian that keeps the whole graph HEALTHY ---
|
|
125
|
+
|
|
126
|
+
agent auditor {
|
|
127
|
+
model: opus
|
|
128
|
+
description: "Heals the brain — broken links, ghost nodes, orphans, dupes"
|
|
129
|
+
tools: [Read, Edit, Grep, Glob]
|
|
130
|
+
|
|
131
|
+
custodian-of: [brain] {
|
|
132
|
+
does: [heal, dedupe, index]
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
prompt {
|
|
136
|
+
You audit the brain's health. Find and repair broken [[links]] after
|
|
137
|
+
renames, surface ghost nodes (links to notes that don't exist), flag
|
|
138
|
+
orphan notes (nothing links to them), and propose merges for duplicates.
|
|
139
|
+
Conservative: repair links and report issues — never delete a human's note.
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
# --- Researcher: READS the brain to answer questions ---
|
|
144
|
+
|
|
145
|
+
agent researcher {
|
|
146
|
+
model: sonnet
|
|
147
|
+
description: "Answers questions by traversing the brain"
|
|
148
|
+
tools: [Read, Grep, Glob]
|
|
149
|
+
memory: [brain]
|
|
150
|
+
|
|
151
|
+
prompt {
|
|
152
|
+
Answer questions using only the brain in `brain/`. Grep for relevant
|
|
153
|
+
notes, follow their [[wikilinks]] and #tags, and cite notes by filename.
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# --- Actions (flow entry/exit points) ---
|
|
158
|
+
|
|
159
|
+
action wire-in {
|
|
160
|
+
kind: inline
|
|
161
|
+
description: "Fold a dropped or freshly-ingested note into the brain"
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
action audit {
|
|
165
|
+
kind: report
|
|
166
|
+
description: "Report the brain's health: ghosts, orphans, broken links, dupes"
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
action query {
|
|
170
|
+
kind: inline
|
|
171
|
+
description: "Ask the brain a question"
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
# --- Flow: ingesters feed the librarian; auditor runs after; researcher reads ---
|
|
175
|
+
|
|
176
|
+
flow {
|
|
177
|
+
gmail-ingester -> wire-in
|
|
178
|
+
slack-ingester -> wire-in
|
|
179
|
+
calendar-ingester -> wire-in
|
|
180
|
+
wire-in -> librarian
|
|
181
|
+
librarian -> auditor
|
|
182
|
+
auditor -> audit
|
|
183
|
+
query -> researcher
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
# --- Schedule: ingesters and the auditor run on their own cadence ---
|
|
187
|
+
|
|
188
|
+
schedule {
|
|
189
|
+
job pull-email {
|
|
190
|
+
cron: "0 */2 * * *"
|
|
191
|
+
agent: gmail-ingester
|
|
192
|
+
}
|
|
193
|
+
job pull-slack {
|
|
194
|
+
cron: "0 */2 * * *"
|
|
195
|
+
agent: slack-ingester
|
|
196
|
+
}
|
|
197
|
+
job pull-calendar {
|
|
198
|
+
cron: "0 8 * * *"
|
|
199
|
+
agent: calendar-ingester
|
|
200
|
+
}
|
|
201
|
+
job nightly-audit {
|
|
202
|
+
cron: "0 3 * * *"
|
|
203
|
+
agent: auditor
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
# --- Triggers: humans can wire a file or ask the brain anytime ---
|
|
208
|
+
|
|
209
|
+
triggers {
|
|
210
|
+
command wire-in {
|
|
211
|
+
pattern: "/wire-in <FILE>"
|
|
212
|
+
argument: FILE
|
|
213
|
+
description: "Fold a dropped markdown file into the brain"
|
|
214
|
+
}
|
|
215
|
+
command query {
|
|
216
|
+
pattern: "/ask <QUESTION>"
|
|
217
|
+
argument: QUESTION
|
|
218
|
+
description: "Ask the brain a question"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
# --- External sources the ingesters connect to ---
|
|
223
|
+
|
|
224
|
+
mcp-servers {
|
|
225
|
+
gmail {
|
|
226
|
+
type: stdio
|
|
227
|
+
command: "npx"
|
|
228
|
+
args: ["-y", "gmail-mcp-server"]
|
|
229
|
+
}
|
|
230
|
+
slack {
|
|
231
|
+
type: stdio
|
|
232
|
+
command: "npx"
|
|
233
|
+
args: ["-y", "slack-mcp-server"]
|
|
234
|
+
}
|
|
235
|
+
calendar {
|
|
236
|
+
type: stdio
|
|
237
|
+
command: "npx"
|
|
238
|
+
args: ["-y", "calendar-mcp-server"]
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# company-brain.at — A plug-and-play company brain
|
|
2
|
+
#
|
|
3
|
+
# A folder of Obsidian-format markdown, maintained by agents, not by hand.
|
|
4
|
+
# - Humans drop a new note and run /wire-in. The librarian links & tags it.
|
|
5
|
+
# - The researcher traverses the [[link]] graph (with grep) to answer questions.
|
|
6
|
+
# - No vector DB, no MCP server. The brain is a folder you can git clone and
|
|
7
|
+
# open in Obsidian for the graph view.
|
|
8
|
+
#
|
|
9
|
+
# Demonstrates the `brain` PATTERN + the `custodian-of` PRIMITIVE.
|
|
10
|
+
|
|
11
|
+
topology company-brain : [brain, human-gate] {
|
|
12
|
+
|
|
13
|
+
meta {
|
|
14
|
+
version: "0.1.0"
|
|
15
|
+
description: "An agent-maintained, Obsidian-portable company brain"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
# --- The brain itself: one markdown store, no backend ---
|
|
19
|
+
|
|
20
|
+
memory {
|
|
21
|
+
store brain {
|
|
22
|
+
type: brain # NEW store type — no DB, just files
|
|
23
|
+
description: "The company brain — a folder of linked markdown"
|
|
24
|
+
path: "brain/" # this folder IS a valid Obsidian vault
|
|
25
|
+
format: obsidian # [[wikilinks]], #nested/tags, YAML frontmatter
|
|
26
|
+
scope: org
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# --- The librarian: KEEPER of the brain (the new primitive) ---
|
|
31
|
+
|
|
32
|
+
agent librarian {
|
|
33
|
+
model: sonnet
|
|
34
|
+
description: "Maintains the brain — wires new notes into the graph"
|
|
35
|
+
tools: [Read, Write, Edit, Grep, Glob]
|
|
36
|
+
|
|
37
|
+
custodian-of: [brain] { # owns upkeep, not just read access
|
|
38
|
+
does: [link, tag, index, dedupe] # OPTIONAL verbs — visible strategy
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
prompt {
|
|
42
|
+
You are the brain's librarian. The brain lives in `brain/` as Obsidian
|
|
43
|
+
markdown. You never invent content — you wire what's dropped in.
|
|
44
|
+
|
|
45
|
+
When a note is added or changed:
|
|
46
|
+
- link: find mentions of existing notes and turn them into [[wikilinks]]
|
|
47
|
+
- tag: add #nested/tags consistent with the existing tag hierarchy
|
|
48
|
+
- index: update the relevant hub note (a Map-of-Content that [[links]]
|
|
49
|
+
the cluster) so the new note is reachable
|
|
50
|
+
- dedupe: flag near-duplicate notes for human review; never auto-delete
|
|
51
|
+
|
|
52
|
+
Backlinks are computed from the [[links]] you write — never author them
|
|
53
|
+
by hand. If a note links to something that doesn't exist yet, leave the
|
|
54
|
+
ghost link; it marks a gap to fill later.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
# --- The researcher: READS the brain to answer questions ---
|
|
59
|
+
|
|
60
|
+
agent researcher {
|
|
61
|
+
model: sonnet
|
|
62
|
+
description: "Answers questions by traversing the brain"
|
|
63
|
+
tools: [Read, Grep, Glob]
|
|
64
|
+
memory: [brain] # read access — the ordinary wiring
|
|
65
|
+
|
|
66
|
+
prompt {
|
|
67
|
+
Answer questions using only the brain in `brain/`. Start by grepping for
|
|
68
|
+
relevant notes, then follow their [[wikilinks]] and #tags to gather the
|
|
69
|
+
full picture. Cite the notes you used by filename.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
# --- What the human can do (actions are the flow entry points) ---
|
|
74
|
+
|
|
75
|
+
action wire-in {
|
|
76
|
+
kind: inline
|
|
77
|
+
description: "Fold a dropped markdown file into the brain"
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
action query {
|
|
81
|
+
kind: inline
|
|
82
|
+
description: "Ask the brain a question"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
triggers {
|
|
86
|
+
command wire-in {
|
|
87
|
+
pattern: "/wire-in <FILE>"
|
|
88
|
+
argument: FILE
|
|
89
|
+
description: "Fold a dropped markdown file into the brain"
|
|
90
|
+
}
|
|
91
|
+
command query {
|
|
92
|
+
pattern: "/ask <QUESTION>"
|
|
93
|
+
argument: QUESTION
|
|
94
|
+
description: "Ask the brain a question"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# --- Flow ---
|
|
99
|
+
|
|
100
|
+
flow {
|
|
101
|
+
wire-in -> librarian # human drops a file → librarian wires it
|
|
102
|
+
query -> researcher # human asks → researcher traverses & answers
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -103,7 +103,15 @@ topology data-processing : [pipeline, fan-out] {
|
|
|
103
103
|
role: extractor
|
|
104
104
|
model: sonnet
|
|
105
105
|
permissions: autonomous
|
|
106
|
-
prompt
|
|
106
|
+
prompt {
|
|
107
|
+
Read source documents from workspace/raw/.
|
|
108
|
+
|
|
109
|
+
Extract their text and structure using the extract-pdf and extract-doc
|
|
110
|
+
tools. Preserve tables and headings — downstream classification depends
|
|
111
|
+
on them.
|
|
112
|
+
|
|
113
|
+
Write one extracted file per source into workspace/extracted/.
|
|
114
|
+
}
|
|
107
115
|
phase: 1
|
|
108
116
|
tools: [Read, Write, extract-pdf, extract-doc]
|
|
109
117
|
skills: [extraction]
|
|
@@ -123,7 +131,14 @@ topology data-processing : [pipeline, fan-out] {
|
|
|
123
131
|
role: classifier
|
|
124
132
|
model: haiku
|
|
125
133
|
permissions: autonomous
|
|
126
|
-
prompt
|
|
134
|
+
prompt {
|
|
135
|
+
Read extracted documents from workspace/extracted/.
|
|
136
|
+
|
|
137
|
+
Assign each one a category and confidence. Run validate-output on your
|
|
138
|
+
result before writing it.
|
|
139
|
+
|
|
140
|
+
Write classified records into workspace/classified/.
|
|
141
|
+
}
|
|
127
142
|
phase: 2
|
|
128
143
|
tools: [Read, Write, validate-output]
|
|
129
144
|
skills: [classification]
|
|
@@ -143,7 +158,14 @@ topology data-processing : [pipeline, fan-out] {
|
|
|
143
158
|
role: synthesizer
|
|
144
159
|
model: opus
|
|
145
160
|
permissions: autonomous
|
|
146
|
-
prompt
|
|
161
|
+
prompt {
|
|
162
|
+
Read all classified records from workspace/classified/.
|
|
163
|
+
|
|
164
|
+
Merge them with merge-results into a single structured view. Where records
|
|
165
|
+
conflict, keep both and mark the conflict rather than choosing.
|
|
166
|
+
|
|
167
|
+
Write the result to workspace/synthesis.json.
|
|
168
|
+
}
|
|
147
169
|
phase: 3
|
|
148
170
|
tools: [Read, Write, merge-results]
|
|
149
171
|
reads: ["workspace/classified/"]
|
|
@@ -154,7 +176,14 @@ topology data-processing : [pipeline, fan-out] {
|
|
|
154
176
|
role: reporter
|
|
155
177
|
model: sonnet
|
|
156
178
|
permissions: autonomous
|
|
157
|
-
prompt
|
|
179
|
+
prompt {
|
|
180
|
+
Read workspace/synthesis.json.
|
|
181
|
+
|
|
182
|
+
Produce a report for a human reader: what was processed, what was found,
|
|
183
|
+
and what remains unresolved. No new analysis.
|
|
184
|
+
|
|
185
|
+
Write workspace/report.md and workspace/report.pdf, then set quality.
|
|
186
|
+
}
|
|
158
187
|
phase: 4
|
|
159
188
|
tools: [Read, Write]
|
|
160
189
|
reads: ["workspace/synthesis.json"]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48"><path fill="#fff" d="M6 12h36v26H6z"/><path fill="#EA4335" d="M6 14v3l18 12L42 17v-3l-18 12z"/><path fill="#FBBC04" d="M6 14v22h6V18l12 8 12-8v18h6V14l-18 12z" opacity=".9"/><path fill="#34A853" d="M6 36h6V18l-6-4z"/><path fill="#4285F4" d="M42 36h-6V18l6-4z"/><path fill="#C5221F" d="M6 14l18 12L42 14v-2H6z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48"><path fill="#36C5F0" d="M18 6a4 4 0 100 8h4V10a4 4 0 00-4-4z"/><path fill="#2EB67D" d="M42 18a4 4 0 10-8 0v4h4a4 4 0 004-4z"/><path fill="#ECB22E" d="M30 42a4 4 0 100-8h-4v4a4 4 0 004 4z"/><path fill="#E01E5A" d="M6 30a4 4 0 108 0v-4h-4a4 4 0 00-4 4z"/><path fill="#36C5F0" d="M18 18h8v8h-8z" opacity=".7"/></svg>
|