brainiverse 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +228 -2
- package/assets/brainiverse-intro.svg +120 -0
- package/assets/brainiverse.svg +85 -0
- package/bin/brainiverse.mjs +102 -0
- package/package.json +30 -4
- package/skill/brainiverse/SKILL.md +105 -0
- package/skill/brainiverse/agents/analyst.md +22 -0
- package/skill/brainiverse/agents/challenger.md +23 -0
- package/skill/brainiverse/agents/communicator.md +18 -0
- package/skill/brainiverse/agents/creative-thinker.md +20 -0
- package/skill/brainiverse/agents/executor.md +23 -0
- package/skill/brainiverse/agents/leader.md +39 -0
- package/skill/brainiverse/agents/organizer.md +18 -0
- package/skill/brainiverse/agents/quality-reviewer.md +24 -0
- package/skill/brainiverse/agents/researcher.md +25 -0
- package/skill/brainiverse/agents/specialist.md +19 -0
- package/skill/brainiverse/bin/brainiverse.mjs +5 -0
- package/skill/brainiverse/docs/architecture.md +73 -0
- package/skill/brainiverse/docs/cli.md +628 -0
- package/skill/brainiverse/docs/customization.md +86 -0
- package/skill/brainiverse/docs/examples.md +96 -0
- package/skill/brainiverse/docs/limitations.md +38 -0
- package/skill/brainiverse/meetings/meeting-protocol.md +90 -0
- package/skill/brainiverse/runtime/args.mjs +87 -0
- package/skill/brainiverse/runtime/audit.mjs +26 -0
- package/skill/brainiverse/runtime/briefs.mjs +139 -0
- package/skill/brainiverse/runtime/cli.mjs +859 -0
- package/skill/brainiverse/runtime/data/archetypes.json +165 -0
- package/skill/brainiverse/runtime/data/domains.json +628 -0
- package/skill/brainiverse/runtime/data/templates/app-builders.json +25 -0
- package/skill/brainiverse/runtime/data/templates/discovery-crew.json +24 -0
- package/skill/brainiverse/runtime/data/templates/travel-squad.json +25 -0
- package/skill/brainiverse/runtime/data/terminology.json +18 -0
- package/skill/brainiverse/runtime/data/themes.json +50 -0
- package/skill/brainiverse/runtime/evaluation.mjs +58 -0
- package/skill/brainiverse/runtime/meetings.mjs +224 -0
- package/skill/brainiverse/runtime/memory.mjs +115 -0
- package/skill/brainiverse/runtime/orchestrator.mjs +385 -0
- package/skill/brainiverse/runtime/permissions.mjs +67 -0
- package/skill/brainiverse/runtime/registry.mjs +230 -0
- package/skill/brainiverse/runtime/skills.mjs +204 -0
- package/skill/brainiverse/runtime/store.mjs +216 -0
- package/skill/brainiverse/runtime/teams.mjs +272 -0
- package/skill/brainiverse/runtime/tools.mjs +74 -0
- package/skill/brainiverse/teams/app-builders.md +24 -0
- package/skill/brainiverse/teams/discovery-crew.md +22 -0
- package/skill/brainiverse/teams/travel-squad.md +26 -0
- package/skill/brainiverse/workflows/collaboration.md +26 -0
- package/skill/brainiverse/workflows/mission-intake.md +35 -0
- package/skill/brainiverse/workflows/orchestration.md +59 -0
- package/skill/brainiverse/workflows/skill-discovery.md +61 -0
- package/skill/brainiverse/workflows/team-creation.md +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 saman
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,229 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/brainiverse-intro.svg" alt="Brainiverse: the right minds for every mission" width="880">
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="assets/brainiverse.svg" alt="" width="20" align="center">
|
|
7
|
+
<strong>A team of AI agents in your terminal, assembled for whatever you're trying to do.</strong>
|
|
8
|
+
</p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<img alt="Claude Code skill" src="https://img.shields.io/badge/Claude%20Code-skill-5b21b6">
|
|
12
|
+
<img alt="Node 18.17+" src="https://img.shields.io/badge/node-%E2%89%A518.17-312e81">
|
|
13
|
+
<img alt="Zero dependencies" src="https://img.shields.io/badge/dependencies-0-1e1b4b">
|
|
14
|
+
<img alt="MIT license" src="https://img.shields.io/badge/license-MIT-f59e0b">
|
|
15
|
+
</p>
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
You tell **Captain** what you want to get done. Captain picks a squad that fits: a researcher, a budget
|
|
20
|
+
analyst, an architect, a skeptic, whoever the job actually needs. The squad works **in parallel**. When a
|
|
21
|
+
real decision comes up, Captain calls everyone into a **war room** with you. Before anything reaches you, a
|
|
22
|
+
reviewer checks it.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npx brainiverse install
|
|
26
|
+
```
|
|
27
|
+
Open Claude Code, type `/brainiverse`, and describe your mission.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Why we built this
|
|
32
|
+
|
|
33
|
+
A single AI assistant is a brilliant generalist working alone. Ask it to plan a trip, launch an app or
|
|
34
|
+
pressure-test a business idea, and it does the research, the maths, the building and the fact-checking
|
|
35
|
+
in one stream of thought. There's nobody to disagree with it and nobody to check its work.
|
|
36
|
+
|
|
37
|
+
Human teams don't work that way. Good ones split the work, argue about it, and have someone check it before
|
|
38
|
+
it goes out. We wanted that structure for everyday problems, without the usual multi-agent compromises:
|
|
39
|
+
|
|
40
|
+
- **No fake teams.** Many "multi-agent" demos are one model playing every role in a single prompt. In
|
|
41
|
+
Brainiverse each agent is a real, separate Claude Code subagent with its own brief, tools and output.
|
|
42
|
+
- **No single-purpose rigs.** Most agent setups are hard-wired for one job, usually coding. Here the same
|
|
43
|
+
machinery runs a travel plan, a codebase or a market study. Only the team changes.
|
|
44
|
+
- **No confident fiction.** Agents aren't allowed to claim they did something they didn't. Results are
|
|
45
|
+
labelled *verified*, *proposed* or *assumed*, and the runtime keeps the receipts.
|
|
46
|
+
- **No loss of control.** Spending money, sending messages, deleting data, pushing code and installing
|
|
47
|
+
anything all need your explicit OK, each time.
|
|
48
|
+
|
|
49
|
+
The result: the right minds for every mission, with you still in charge.
|
|
50
|
+
|
|
51
|
+
## What it feels like
|
|
52
|
+
|
|
53
|
+
```text
|
|
54
|
+
You I want to plan two weeks in Japan in April, around €3,000. I love food and temples.
|
|
55
|
+
|
|
56
|
+
Captain Here's the squad I'd put on this:
|
|
57
|
+
🛡️ Captain Leader your point of contact
|
|
58
|
+
🔭 Lumen Researcher regions, cherry-blossom timing, advisories
|
|
59
|
+
📊 Penny Budget analyst real costs per option
|
|
60
|
+
🧭 Navigator Itinerary expert the day-by-day plan
|
|
61
|
+
🧭 Logistics Specialist rail passes, transfers, entry rules
|
|
62
|
+
🎯 Sentinel Quality reviewer checks facts and the budget before you see anything
|
|
63
|
+
One question first: relaxed pace, or pack it in?
|
|
64
|
+
|
|
65
|
+
You Relaxed. And rename Lumen to Sherlock.
|
|
66
|
+
|
|
67
|
+
Captain Done. Sherlock and Penny are working in parallel now…
|
|
68
|
+
|
|
69
|
+
⚔️ War Room: there are two good routes. Sherlock, Penny, you're up.
|
|
70
|
+
Sherlock Kyoto-heavy gives you the temples and the best blossom odds (sources attached).
|
|
71
|
+
Penny It's also €340 cheaper if you skip one bullet-train leg.
|
|
72
|
+
Captain Kyoto-heavy or Tokyo-heavy?
|
|
73
|
+
|
|
74
|
+
You Kyoto. Actually, let me ask Penny something directly.
|
|
75
|
+
|
|
76
|
+
Penny (direct line) Sure, what do you want to know?
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Every line from Sherlock and Penny above comes from an actual agent run. Captain can't invent their
|
|
80
|
+
words: the runtime only accepts a contribution if it's tied to a real invocation.
|
|
81
|
+
|
|
82
|
+
## How it works
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
You ⇄ Captain ── the main Claude Code session, guided by SKILL.md
|
|
86
|
+
│
|
|
87
|
+
│ 1. understands the mission, proposes a team, gets your OK
|
|
88
|
+
│ 2. breaks the goal into tasks with owners, dependencies and acceptance criteria
|
|
89
|
+
│ 3. "brainiverse task start ready" → one Agent-tool call per runnable task
|
|
90
|
+
▼
|
|
91
|
+
┌───────────┬───────────┬───────────┐
|
|
92
|
+
│ Sherlock │ Penny │ Navigator │ real subagents, running in parallel
|
|
93
|
+
└─────┬─────┴─────┬─────┴─────┬─────┘ each fetches its brief → works → submits a result
|
|
94
|
+
▼ ▼ ▼
|
|
95
|
+
┌─────────────────────────────────────┐
|
|
96
|
+
│ Brainiverse runtime (Node, 0 deps) │ tasks · limits · permissions · approvals
|
|
97
|
+
│ .brainiverse/ in your project │ meetings · memory · audit log
|
|
98
|
+
└─────────────────────────────────────┘
|
|
99
|
+
│
|
|
100
|
+
▼
|
|
101
|
+
4. Captain reviews each result: accept, or send it back with feedback
|
|
102
|
+
5. War rooms when a decision needs you · direct lines when you want one agent
|
|
103
|
+
6. Sentinel audits the final deliverable → Captain hands you a debrief
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
There are two layers:
|
|
107
|
+
|
|
108
|
+
1. **Behaviour, in Markdown.** [`SKILL.md`](skill/brainiverse/SKILL.md) is Captain's playbook. Role files in
|
|
109
|
+
[`agents/`](skill/brainiverse/agents) tell each agent how to do its job; [`workflows/`](skill/brainiverse/workflows)
|
|
110
|
+
and [`meetings/`](skill/brainiverse/meetings) cover intake, delegation, collaboration and war rooms. They're
|
|
111
|
+
loaded only when needed, so the context stays small.
|
|
112
|
+
2. **Rules, in code.** A small Node runtime holds what must not depend on the model remembering it: the task
|
|
113
|
+
graph, who may do what, limits, approvals and the audit trail. The model decides *what* to do; the runtime
|
|
114
|
+
makes sure it's done *honestly*.
|
|
115
|
+
|
|
116
|
+
### Teams are built for your mission
|
|
117
|
+
|
|
118
|
+
Teams aren't picked from a fixed list. `team propose` reads your request and works out which capabilities it
|
|
119
|
+
needs: research, ideas, analysis, building, risk, communication, organizing, review. It adds specialists for
|
|
120
|
+
the domain (travel, software, business, science, learning, productivity, data, marketing, creative work) and
|
|
121
|
+
caps the size so you get **the smallest team that can do the job**. Each agent comes with a one-line reason
|
|
122
|
+
for being there. Captain then refines the roster, and you can change anything.
|
|
123
|
+
|
|
124
|
+
The ten building blocks: **Leader · Researcher · Creative Thinker · Analyst · Executor · Challenger ·
|
|
125
|
+
Specialist · Communicator · Organizer · Quality Reviewer**. Three ready-made templates (Travel Squad, App
|
|
126
|
+
Builders, Discovery Crew) are optional shortcuts.
|
|
127
|
+
|
|
128
|
+
### What keeps the agents honest
|
|
129
|
+
|
|
130
|
+
| Without guardrails, an agent could… | In Brainiverse |
|
|
131
|
+
|---|---|
|
|
132
|
+
| say "deployed ✅" after writing a script | Any action marked *verified* must include evidence, or the result is rejected |
|
|
133
|
+
| speak for another agent in a meeting | Meeting messages come only from real invocations, linked by id |
|
|
134
|
+
| approve its own request, or grant itself access | Agents can run only "read my brief" and "submit my result". Approvals are the human's, quoted in the log |
|
|
135
|
+
| loop forever or spawn endlessly | Limits on concurrency, invocations, retries, timeouts, revision rounds and delegation depth |
|
|
136
|
+
| change permissions by being renamed or imported | Identity is separate from authority, and imported agents never bring risky capabilities |
|
|
137
|
+
| follow instructions hidden in a web page or a downloaded skill | Outside content is treated as data. Downloaded skills are scanned and need your approval |
|
|
138
|
+
| leak an API key into memory or logs | Anything that looks like a secret is refused in memory and redacted in the audit log |
|
|
139
|
+
|
|
140
|
+
## Things you can do
|
|
141
|
+
|
|
142
|
+
- 🎯 **Describe a mission in plain words.** No setup and no agent jargon. Captain only asks questions whose
|
|
143
|
+
answers change the plan.
|
|
144
|
+
- 🧩 **Customize everything.** Rename agents, change personalities, instructions, expertise or model tier, add
|
|
145
|
+
specialists, pick a different leader. Use the original `heroes` theme or switch to plain professional
|
|
146
|
+
names and terminology.
|
|
147
|
+
- ⚡ **Parallel work with hand-offs.** Independent tasks run at the same time, and each agent automatically
|
|
148
|
+
receives the results it depends on.
|
|
149
|
+
- ⚔️ **War rooms.** Agents present, respond to each other, and challenge each other's proposals. You
|
|
150
|
+
decide, and the conclusions become tasks.
|
|
151
|
+
- ☎️ **Direct line.** Talk one-on-one with any agent. Captain relays the replies word for word.
|
|
152
|
+
- 🧭 **Skill discovery.** When the team hits a real gap, it looks for existing skills, scans them for risky
|
|
153
|
+
patterns, recommends at most three, and installs only with your approval.
|
|
154
|
+
- 💾 **Memory and reuse.** Save teams and agents, export or import them as JSON, and keep project, team and
|
|
155
|
+
agent memories that you can inspect, edit or delete.
|
|
156
|
+
- 📋 **Debriefs.** Every mission ends with a report: accepted deliverables, decisions, assumptions,
|
|
157
|
+
unresolved issues, reviews and metrics (including which agents were never needed).
|
|
158
|
+
|
|
159
|
+
## Install
|
|
160
|
+
|
|
161
|
+
You need Node.js 18.17 or newer and Claude Code.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
npx brainiverse install # for you: ~/.claude/skills/brainiverse
|
|
165
|
+
npx brainiverse install --project # just this repo: ./.claude/skills/brainiverse
|
|
166
|
+
npx brainiverse doctor # check the install
|
|
167
|
+
npx brainiverse uninstall # remove it (your mission data stays)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Start a new Claude Code session, then type `/brainiverse`, or just say *"get me a team to…"*. Mission state
|
|
171
|
+
lives in `.brainiverse/` in your project, so add it to `.gitignore`.
|
|
172
|
+
|
|
173
|
+
## A taste of the controls
|
|
174
|
+
|
|
175
|
+
You'll mostly just talk to Captain, who runs these for you. They're also there if you want to drive directly:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
brainiverse team propose "Build and launch a web app with user login"
|
|
179
|
+
brainiverse agent rename lumen --team @mission --name Sherlock --personality "Deductive, dry-witted"
|
|
180
|
+
brainiverse meeting start --objective "Pick the route" --with lumen,penny
|
|
181
|
+
brainiverse chat start penny
|
|
182
|
+
brainiverse status
|
|
183
|
+
brainiverse mission report
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Full reference: [docs/cli.md](skill/brainiverse/docs/cli.md).
|
|
187
|
+
|
|
188
|
+
## Honest limits
|
|
189
|
+
|
|
190
|
+
- Captain is your main Claude Code session, not a separate process. Subagents can't talk to you directly or
|
|
191
|
+
spawn their own agents.
|
|
192
|
+
- The runtime strictly enforces its own records (approvals, limits, who may submit what). Which tools a
|
|
193
|
+
subagent actually calls during its turn is guided by its brief and Claude Code's permission prompts, not
|
|
194
|
+
sandboxed per agent yet.
|
|
195
|
+
- `team propose` starts from keyword and domain matching. That makes it predictable, and Captain refines it
|
|
196
|
+
with judgment.
|
|
197
|
+
|
|
198
|
+
More in [docs/limitations.md](skill/brainiverse/docs/limitations.md), including what's planned next.
|
|
199
|
+
|
|
200
|
+
## Repository layout
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
assets/ icon and animated banner
|
|
204
|
+
bin/brainiverse.mjs npx entry: install / uninstall / doctor (other commands go to the runtime)
|
|
205
|
+
skill/brainiverse/ the skill exactly as it's installed
|
|
206
|
+
SKILL.md Captain's playbook (always loaded)
|
|
207
|
+
agents/ the 10 archetype role files (each subagent reads its own)
|
|
208
|
+
workflows/ meetings/ intake, team creation, orchestration, collaboration, skills, war rooms
|
|
209
|
+
teams/ notes on the 3 optional templates
|
|
210
|
+
docs/ architecture, customization, CLI reference, examples, limitations
|
|
211
|
+
runtime/ orchestration, registry, team builder, meetings, permissions, memory, audit
|
|
212
|
+
test/ 64 tests: unit, CLI, end-to-end (travel, software, research), installer
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Development
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
npm test # node:test, no dependencies
|
|
219
|
+
node skill/brainiverse/bin/brainiverse.mjs --help
|
|
220
|
+
node scripts/gen-cli-docs.mjs # regenerate the CLI reference after changing commands
|
|
221
|
+
npm pack --dry-run # see what gets published
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Read more:** [Architecture](skill/brainiverse/docs/architecture.md) ·
|
|
225
|
+
[Customization](skill/brainiverse/docs/customization.md) · [Examples](skill/brainiverse/docs/examples.md)
|
|
226
|
+
|
|
227
|
+
## License
|
|
228
|
+
|
|
229
|
+
MIT. Assemble responsibly. 🛡️
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 300" width="880" height="300" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Brainiverse — the right minds for every mission</title>
|
|
3
|
+
<desc id="desc">A leader star lights up, ten agent stars join it in the shape of a brain, and example missions cycle: plan a trip, build an app, test a startup idea.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="space" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#1e1b4b"/>
|
|
7
|
+
<stop offset="0.6" stop-color="#312e81"/>
|
|
8
|
+
<stop offset="1" stop-color="#5b21b6"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
<radialGradient id="glow" cx="0.5" cy="0.5" r="0.5">
|
|
11
|
+
<stop offset="0" stop-color="#fde68a" stop-opacity="0.9"/>
|
|
12
|
+
<stop offset="0.35" stop-color="#f59e0b" stop-opacity="0.35"/>
|
|
13
|
+
<stop offset="1" stop-color="#f59e0b" stop-opacity="0"/>
|
|
14
|
+
</radialGradient>
|
|
15
|
+
<radialGradient id="leader" cx="0.4" cy="0.35" r="0.7">
|
|
16
|
+
<stop offset="0" stop-color="#fffbeb"/>
|
|
17
|
+
<stop offset="0.5" stop-color="#fcd34d"/>
|
|
18
|
+
<stop offset="1" stop-color="#f59e0b"/>
|
|
19
|
+
</radialGradient>
|
|
20
|
+
<clipPath id="card"><rect width="880" height="300" rx="28"/></clipPath>
|
|
21
|
+
</defs>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
/* One 9-second loop. Every element uses the same duration; delays stagger it. */
|
|
25
|
+
.fade { animation: fade 9s infinite both; }
|
|
26
|
+
.pop { animation: pop 9s infinite both; transform-box: fill-box; transform-origin: center; }
|
|
27
|
+
.draw { stroke-dasharray: 1; stroke-dashoffset: 1; animation: draw 9s infinite both; }
|
|
28
|
+
.pulse { animation: pulse 3s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
|
|
29
|
+
.twinkle{ animation: twinkle 3s ease-in-out infinite; }
|
|
30
|
+
.mission{ animation: mission 9s infinite both; opacity: 0; }
|
|
31
|
+
@keyframes fade { 0% { opacity: 0 } 6%, 94% { opacity: 1 } 100% { opacity: 0 } }
|
|
32
|
+
@keyframes pop { 0% { opacity: 0; transform: scale(0.2) } 4% { opacity: 1; transform: scale(1.25) } 7%, 94% { opacity: 1; transform: scale(1) } 100% { opacity: 0; transform: scale(1) } }
|
|
33
|
+
@keyframes draw { 0% { stroke-dashoffset: 1 } 6%, 94% { stroke-dashoffset: 0 } 100% { stroke-dashoffset: 1 } }
|
|
34
|
+
@keyframes pulse { 0%, 100% { transform: scale(1); opacity: 0.85 } 50% { transform: scale(1.18); opacity: 1 } }
|
|
35
|
+
@keyframes twinkle { 0%, 100% { opacity: 0.25 } 50% { opacity: 0.9 } }
|
|
36
|
+
@keyframes mission { 0% { opacity: 0; transform: translateY(8px) } 4%, 29% { opacity: 1; transform: translateY(0) } 33%, 100% { opacity: 0; transform: translateY(-8px) } }
|
|
37
|
+
text { font-family: ui-sans-serif, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }
|
|
38
|
+
@media (prefers-reduced-motion: reduce) {
|
|
39
|
+
.fade, .pop, .draw, .pulse, .twinkle { animation: none; opacity: 1; stroke-dashoffset: 0; }
|
|
40
|
+
.mission { animation: none; }
|
|
41
|
+
.m1 { opacity: 1; }
|
|
42
|
+
}
|
|
43
|
+
</style>
|
|
44
|
+
|
|
45
|
+
<g clip-path="url(#card)">
|
|
46
|
+
<rect width="880" height="300" fill="url(#space)"/>
|
|
47
|
+
|
|
48
|
+
<!-- stars -->
|
|
49
|
+
<g fill="#e0e7ff">
|
|
50
|
+
<circle class="twinkle" cx="40" cy="36" r="1.6"/>
|
|
51
|
+
<circle class="twinkle" cx="300" cy="30" r="1.3" style="animation-delay:-1s"/>
|
|
52
|
+
<circle class="twinkle" cx="840" cy="40" r="1.6" style="animation-delay:-2s"/>
|
|
53
|
+
<circle class="twinkle" cx="852" cy="284" r="1.4" style="animation-delay:-0.5s"/>
|
|
54
|
+
<circle class="twinkle" cx="520" cy="276" r="1.2" style="animation-delay:-1.5s"/>
|
|
55
|
+
<circle class="twinkle" cx="28" cy="250" r="1.3" style="animation-delay:-2.5s"/>
|
|
56
|
+
<circle class="twinkle" cx="660" cy="22" r="1.1" style="animation-delay:-0.8s"/>
|
|
57
|
+
</g>
|
|
58
|
+
|
|
59
|
+
<!-- the squad: brain constellation (same geometry as the icon), centred at (150,150) -->
|
|
60
|
+
<g transform="translate(22 44)">
|
|
61
|
+
<ellipse class="fade" cx="128" cy="128" rx="116" ry="38" fill="none" stroke="#a5b4fc" stroke-width="2.5" stroke-opacity="0.35" transform="rotate(-18 128 128)"/>
|
|
62
|
+
|
|
63
|
+
<g fill="none" stroke="#c7d2fe" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.7">
|
|
64
|
+
<path class="draw" pathLength="1" style="animation-delay:0.2s" d="M128 58 Q112 34 96 48 Q66 42 60 70 Q36 82 48 108 Q32 132 62 146 Q66 174 100 166 Q118 180 128 162"/>
|
|
65
|
+
<path class="draw" pathLength="1" style="animation-delay:0.2s" d="M128 58 Q144 34 160 48 Q190 42 196 70 Q220 82 208 108 Q224 132 194 146 Q190 174 156 166 Q138 180 128 162"/>
|
|
66
|
+
<path class="fade" d="M120 166 Q126 188 116 204" stroke-opacity="0.5" style="animation-delay:0.4s"/>
|
|
67
|
+
</g>
|
|
68
|
+
|
|
69
|
+
<g stroke="#fde68a" stroke-width="2.5" stroke-opacity="0.75" stroke-linecap="round">
|
|
70
|
+
<line class="draw" pathLength="1" style="animation-delay:0.9s" x1="128" y1="108" x2="96" y2="48"/>
|
|
71
|
+
<line class="draw" pathLength="1" style="animation-delay:1.05s" x1="128" y1="108" x2="160" y2="48"/>
|
|
72
|
+
<line class="draw" pathLength="1" style="animation-delay:1.2s" x1="128" y1="108" x2="60" y2="70"/>
|
|
73
|
+
<line class="draw" pathLength="1" style="animation-delay:1.35s" x1="128" y1="108" x2="196" y2="70"/>
|
|
74
|
+
<line class="draw" pathLength="1" style="animation-delay:1.5s" x1="128" y1="108" x2="48" y2="108"/>
|
|
75
|
+
<line class="draw" pathLength="1" style="animation-delay:1.65s" x1="128" y1="108" x2="208" y2="108"/>
|
|
76
|
+
<line class="draw" pathLength="1" style="animation-delay:1.8s" x1="128" y1="108" x2="62" y2="146"/>
|
|
77
|
+
<line class="draw" pathLength="1" style="animation-delay:1.95s" x1="128" y1="108" x2="194" y2="146"/>
|
|
78
|
+
<line class="draw" pathLength="1" style="animation-delay:2.1s" x1="128" y1="108" x2="100" y2="166"/>
|
|
79
|
+
<line class="draw" pathLength="1" style="animation-delay:2.25s" x1="128" y1="108" x2="156" y2="166"/>
|
|
80
|
+
</g>
|
|
81
|
+
|
|
82
|
+
<g stroke="#1e1b4b" stroke-width="2.5">
|
|
83
|
+
<circle class="pop" style="animation-delay:1.1s" cx="96" cy="48" r="9" fill="#f472b6"/>
|
|
84
|
+
<circle class="pop" style="animation-delay:1.25s" cx="160" cy="48" r="8" fill="#22d3ee"/>
|
|
85
|
+
<circle class="pop" style="animation-delay:1.4s" cx="60" cy="70" r="8" fill="#22d3ee"/>
|
|
86
|
+
<circle class="pop" style="animation-delay:1.55s" cx="196" cy="70" r="9" fill="#f472b6"/>
|
|
87
|
+
<circle class="pop" style="animation-delay:1.7s" cx="48" cy="108" r="9" fill="#a78bfa"/>
|
|
88
|
+
<circle class="pop" style="animation-delay:1.85s" cx="208" cy="108" r="8" fill="#34d399"/>
|
|
89
|
+
<circle class="pop" style="animation-delay:2s" cx="62" cy="146" r="8" fill="#34d399"/>
|
|
90
|
+
<circle class="pop" style="animation-delay:2.15s" cx="194" cy="146" r="9" fill="#a78bfa"/>
|
|
91
|
+
<circle class="pop" style="animation-delay:2.3s" cx="100" cy="166" r="9" fill="#60a5fa"/>
|
|
92
|
+
<circle class="pop" style="animation-delay:2.45s" cx="156" cy="166" r="8" fill="#60a5fa"/>
|
|
93
|
+
</g>
|
|
94
|
+
|
|
95
|
+
<circle class="pulse" cx="128" cy="108" r="38" fill="url(#glow)"/>
|
|
96
|
+
<g class="pop" style="animation-delay:0.5s">
|
|
97
|
+
<circle cx="128" cy="108" r="15" fill="url(#leader)" stroke="#fffbeb" stroke-width="2"/>
|
|
98
|
+
<path d="M128 96 l3.2 7.8 8.3 0.6 -6.4 5.3 2 8.1 -7.1 -4.4 -7.1 4.4 2 -8.1 -6.4 -5.3 8.3 -0.6z" fill="#b45309" opacity="0.85"/>
|
|
99
|
+
</g>
|
|
100
|
+
</g>
|
|
101
|
+
|
|
102
|
+
<!-- words -->
|
|
103
|
+
<g class="fade" style="animation-delay:0.3s">
|
|
104
|
+
<text x="330" y="112" font-size="54" font-weight="800" fill="#ffffff" letter-spacing="-1">Brainiverse</text>
|
|
105
|
+
<text x="332" y="146" font-size="21" fill="#c7d2fe">The right minds for every mission.</text>
|
|
106
|
+
</g>
|
|
107
|
+
|
|
108
|
+
<g class="fade" style="animation-delay:0.8s">
|
|
109
|
+
<text x="332" y="196" font-size="13" font-weight="700" fill="#fcd34d" letter-spacing="2.5">YOUR MISSION</text>
|
|
110
|
+
</g>
|
|
111
|
+
<g font-size="22" font-weight="600" fill="#ffffff">
|
|
112
|
+
<text class="mission m1" x="332" y="228" style="animation-delay:1s">✈️ Plan two weeks in Japan</text>
|
|
113
|
+
<text class="mission" x="332" y="228" style="animation-delay:4s">🛠️ Build and ship a web app</text>
|
|
114
|
+
<text class="mission" x="332" y="228" style="animation-delay:7s">🔍 Is my startup idea worth it?</text>
|
|
115
|
+
</g>
|
|
116
|
+
<g class="fade" style="animation-delay:2.6s">
|
|
117
|
+
<text x="332" y="262" font-size="15" fill="#a5b4fc">→ a squad of real agents assembles, works in parallel, and reports back</text>
|
|
118
|
+
</g>
|
|
119
|
+
</g>
|
|
120
|
+
</svg>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" width="256" height="256" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">Brainiverse</title>
|
|
3
|
+
<desc id="desc">A constellation shaped like a brain: a bright leader star at the centre, linked to a ring of agent stars, inside an orbit.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="space" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#1e1b4b"/>
|
|
7
|
+
<stop offset="0.55" stop-color="#312e81"/>
|
|
8
|
+
<stop offset="1" stop-color="#5b21b6"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
<radialGradient id="glow" cx="0.5" cy="0.5" r="0.5">
|
|
11
|
+
<stop offset="0" stop-color="#fde68a" stop-opacity="0.9"/>
|
|
12
|
+
<stop offset="0.35" stop-color="#f59e0b" stop-opacity="0.35"/>
|
|
13
|
+
<stop offset="1" stop-color="#f59e0b" stop-opacity="0"/>
|
|
14
|
+
</radialGradient>
|
|
15
|
+
<radialGradient id="leader" cx="0.4" cy="0.35" r="0.7">
|
|
16
|
+
<stop offset="0" stop-color="#fffbeb"/>
|
|
17
|
+
<stop offset="0.5" stop-color="#fcd34d"/>
|
|
18
|
+
<stop offset="1" stop-color="#f59e0b"/>
|
|
19
|
+
</radialGradient>
|
|
20
|
+
<clipPath id="badge">
|
|
21
|
+
<rect width="256" height="256" rx="56"/>
|
|
22
|
+
</clipPath>
|
|
23
|
+
</defs>
|
|
24
|
+
|
|
25
|
+
<g clip-path="url(#badge)">
|
|
26
|
+
<rect width="256" height="256" fill="url(#space)"/>
|
|
27
|
+
|
|
28
|
+
<!-- background stars -->
|
|
29
|
+
<g fill="#e0e7ff">
|
|
30
|
+
<circle cx="30" cy="40" r="1.6" opacity="0.7"/>
|
|
31
|
+
<circle cx="214" cy="30" r="1.3" opacity="0.6"/>
|
|
32
|
+
<circle cx="226" cy="206" r="1.8" opacity="0.6"/>
|
|
33
|
+
<circle cx="44" cy="214" r="1.2" opacity="0.5"/>
|
|
34
|
+
<circle cx="128" cy="22" r="1.1" opacity="0.5"/>
|
|
35
|
+
<circle cx="18" cy="128" r="1.1" opacity="0.5"/>
|
|
36
|
+
<circle cx="240" cy="120" r="1.2" opacity="0.5"/>
|
|
37
|
+
<circle cx="176" cy="236" r="1.1" opacity="0.4"/>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<!-- orbit -->
|
|
41
|
+
<ellipse cx="128" cy="128" rx="116" ry="38" fill="none" stroke="#a5b4fc" stroke-width="2.5" stroke-opacity="0.35" transform="rotate(-18 128 128)"/>
|
|
42
|
+
<circle cx="236" cy="96" r="5" fill="#a5b4fc" opacity="0.9"/>
|
|
43
|
+
|
|
44
|
+
<!-- brain silhouette: two lobes traced through the agent stars -->
|
|
45
|
+
<g fill="none" stroke="#c7d2fe" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" stroke-opacity="0.7">
|
|
46
|
+
<path d="M128 58 Q112 34 96 48 Q66 42 60 70 Q36 82 48 108 Q32 132 62 146 Q66 174 100 166 Q118 180 128 162"/>
|
|
47
|
+
<path d="M128 58 Q144 34 160 48 Q190 42 196 70 Q220 82 208 108 Q224 132 194 146 Q190 174 156 166 Q138 180 128 162"/>
|
|
48
|
+
<path d="M128 58 L128 162" stroke-dasharray="5 9" stroke-opacity="0.5"/>
|
|
49
|
+
<path d="M120 166 Q126 188 116 204" stroke-opacity="0.5"/>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- links from the leader to every agent -->
|
|
53
|
+
<g stroke="#fde68a" stroke-width="2.5" stroke-opacity="0.7" stroke-linecap="round">
|
|
54
|
+
<line x1="128" y1="108" x2="96" y2="48"/>
|
|
55
|
+
<line x1="128" y1="108" x2="60" y2="70"/>
|
|
56
|
+
<line x1="128" y1="108" x2="48" y2="108"/>
|
|
57
|
+
<line x1="128" y1="108" x2="62" y2="146"/>
|
|
58
|
+
<line x1="128" y1="108" x2="100" y2="166"/>
|
|
59
|
+
<line x1="128" y1="108" x2="160" y2="48"/>
|
|
60
|
+
<line x1="128" y1="108" x2="196" y2="70"/>
|
|
61
|
+
<line x1="128" y1="108" x2="208" y2="108"/>
|
|
62
|
+
<line x1="128" y1="108" x2="194" y2="146"/>
|
|
63
|
+
<line x1="128" y1="108" x2="156" y2="166"/>
|
|
64
|
+
</g>
|
|
65
|
+
|
|
66
|
+
<!-- agents -->
|
|
67
|
+
<g stroke="#1e1b4b" stroke-width="2.5">
|
|
68
|
+
<circle cx="96" cy="48" r="9" fill="#f472b6"/>
|
|
69
|
+
<circle cx="60" cy="70" r="8" fill="#22d3ee"/>
|
|
70
|
+
<circle cx="48" cy="108" r="9" fill="#a78bfa"/>
|
|
71
|
+
<circle cx="62" cy="146" r="8" fill="#34d399"/>
|
|
72
|
+
<circle cx="100" cy="166" r="9" fill="#60a5fa"/>
|
|
73
|
+
<circle cx="160" cy="48" r="8" fill="#22d3ee"/>
|
|
74
|
+
<circle cx="196" cy="70" r="9" fill="#f472b6"/>
|
|
75
|
+
<circle cx="208" cy="108" r="8" fill="#34d399"/>
|
|
76
|
+
<circle cx="194" cy="146" r="9" fill="#a78bfa"/>
|
|
77
|
+
<circle cx="156" cy="166" r="8" fill="#60a5fa"/>
|
|
78
|
+
</g>
|
|
79
|
+
|
|
80
|
+
<!-- the leader -->
|
|
81
|
+
<circle cx="128" cy="108" r="38" fill="url(#glow)"/>
|
|
82
|
+
<circle cx="128" cy="108" r="15" fill="url(#leader)" stroke="#fffbeb" stroke-width="2"/>
|
|
83
|
+
<path d="M128 96 l3.2 7.8 8.3 0.6 -6.4 5.3 2 8.1 -7.1 -4.4 -7.1 4.4 2 -8.1 -6.4 -5.3 8.3 -0.6z" fill="#b45309" opacity="0.85"/>
|
|
84
|
+
</g>
|
|
85
|
+
</svg>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// npx entry point.
|
|
3
|
+
// npx brainiverse install [--project] [--force] copy the skill into Claude Code's skills folder
|
|
4
|
+
// npx brainiverse uninstall [--project]
|
|
5
|
+
// npx brainiverse doctor check the installation
|
|
6
|
+
// npx brainiverse <runtime command ...> anything else goes to the runtime CLI
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
11
|
+
|
|
12
|
+
const PACKAGE_DIR = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
13
|
+
const SKILL_SOURCE = path.join(PACKAGE_DIR, "skill", "brainiverse");
|
|
14
|
+
const VERSION = JSON.parse(fs.readFileSync(path.join(PACKAGE_DIR, "package.json"), "utf8")).version;
|
|
15
|
+
|
|
16
|
+
function target(project) {
|
|
17
|
+
const base = project ? path.join(process.cwd(), ".claude", "skills") : path.join(os.homedir(), ".claude", "skills");
|
|
18
|
+
return path.join(base, "brainiverse");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function installedVersion(dir) {
|
|
22
|
+
try {
|
|
23
|
+
return fs.readFileSync(path.join(dir, ".version"), "utf8").trim();
|
|
24
|
+
} catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function install(flags) {
|
|
30
|
+
const dest = target(flags.has("--project"));
|
|
31
|
+
if (fs.existsSync(dest)) {
|
|
32
|
+
const current = installedVersion(dest);
|
|
33
|
+
if (!current) {
|
|
34
|
+
console.error(`error: ${dest} exists but was not installed by brainiverse; refusing to overwrite it.`);
|
|
35
|
+
return 1;
|
|
36
|
+
}
|
|
37
|
+
if (current === VERSION && !flags.has("--force")) {
|
|
38
|
+
console.log(`brainiverse ${VERSION} is already installed at ${dest} (use --force to reinstall).`);
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
42
|
+
}
|
|
43
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
44
|
+
fs.cpSync(SKILL_SOURCE, dest, { recursive: true });
|
|
45
|
+
fs.writeFileSync(path.join(dest, ".version"), VERSION + "\n");
|
|
46
|
+
fs.chmodSync(path.join(dest, "bin", "brainiverse.mjs"), 0o755);
|
|
47
|
+
console.log(`Installed brainiverse ${VERSION} to ${dest}`);
|
|
48
|
+
console.log("Restart Claude Code (or start a new session), then type /brainiverse or ask for a team.");
|
|
49
|
+
if (flags.has("--project")) console.log("Tip: add .brainiverse/ to this project's .gitignore.");
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function uninstall(flags) {
|
|
54
|
+
const dest = target(flags.has("--project"));
|
|
55
|
+
if (!fs.existsSync(dest)) {
|
|
56
|
+
console.log(`Nothing installed at ${dest}.`);
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
if (!installedVersion(dest)) {
|
|
60
|
+
console.error(`error: ${dest} was not installed by brainiverse; remove it yourself if you mean to.`);
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
63
|
+
fs.rmSync(dest, { recursive: true, force: true });
|
|
64
|
+
console.log(`Removed ${dest}. Mission data in .brainiverse/ folders was left untouched.`);
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function doctor() {
|
|
69
|
+
const [major, minor] = process.versions.node.split(".").map(Number);
|
|
70
|
+
const nodeOk = major > 18 || (major === 18 && minor >= 17);
|
|
71
|
+
console.log(`node ${process.versions.node} ${nodeOk ? "ok" : "— brainiverse needs >= 18.17"}`);
|
|
72
|
+
for (const project of [false, true]) {
|
|
73
|
+
const dest = target(project);
|
|
74
|
+
const version = installedVersion(dest);
|
|
75
|
+
console.log(`${project ? "project" : "user"} skill: ${fs.existsSync(path.join(dest, "SKILL.md")) ? `installed (${version ?? "unknown version"}) at ${dest}` : "not installed"}`);
|
|
76
|
+
}
|
|
77
|
+
const home = process.env.BRAINIVERSE_HOME || path.join(process.cwd(), ".brainiverse");
|
|
78
|
+
console.log(`workspace: ${fs.existsSync(home) ? home : `${home} (created on first use)`}`);
|
|
79
|
+
return nodeOk ? 0 : 1;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function help() {
|
|
83
|
+
console.log(`brainiverse ${VERSION} — the right minds for every mission
|
|
84
|
+
|
|
85
|
+
npx brainiverse install [--project] [--force] install the skill for Claude Code
|
|
86
|
+
(default: ~/.claude/skills; --project: ./.claude/skills)
|
|
87
|
+
npx brainiverse uninstall [--project] remove the skill
|
|
88
|
+
npx brainiverse doctor check node, install location, and workspace
|
|
89
|
+
npx brainiverse <command> ... run the runtime directly (try: npx brainiverse --help)`);
|
|
90
|
+
return 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const [command, ...rest] = process.argv.slice(2);
|
|
94
|
+
const flags = new Set(rest);
|
|
95
|
+
if (command === "install") process.exitCode = install(flags);
|
|
96
|
+
else if (command === "uninstall") process.exitCode = uninstall(flags);
|
|
97
|
+
else if (command === "doctor") process.exitCode = doctor();
|
|
98
|
+
else if (command === undefined || command === "help") process.exitCode = help();
|
|
99
|
+
else {
|
|
100
|
+
const { main } = await import(pathToFileURL(path.join(SKILL_SOURCE, "runtime", "cli.mjs")).href);
|
|
101
|
+
process.exitCode = main(process.argv.slice(2));
|
|
102
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "brainiverse",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "The right minds for every mission: a customizable multi-agent AI team skill for Claude Code.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"brainiverse": "bin/brainiverse.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"assets/",
|
|
11
|
+
"bin/",
|
|
12
|
+
"skill/",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"test": "node --test test/*.test.mjs"
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=18.17"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"claude",
|
|
24
|
+
"claude-code",
|
|
25
|
+
"skill",
|
|
26
|
+
"agents",
|
|
27
|
+
"multi-agent",
|
|
28
|
+
"orchestration"
|
|
29
|
+
],
|
|
30
|
+
"author": "saman",
|
|
31
|
+
"license": "MIT"
|
|
32
|
+
}
|