create-booboo 0.4.1 → 0.5.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.
Files changed (2) hide show
  1. package/dist/cli.js +145 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -101,6 +101,7 @@ var orgJson = JSON.stringify(
101
101
  booboo_org: "1.0",
102
102
  title: TITLE,
103
103
  root: "core",
104
+ seed: true,
104
105
  agents: [
105
106
  { id: "core", name: TITLE, emoji: "\u{1F3DB}\uFE0F", role: "the orchestrator \u2014 routes, never executes", rules: ["rules/GLOBAL.md"], buckets: ["shared"], boot: "You are the orchestrator. Boot with booboo_boot('core'); route work to your branches, never do it yourself." },
106
107
  { id: "writer", name: "Writer", emoji: "\u{1F4DD}", role: "drafts content", parent: "core", skills: ["humanizer"], buckets: ["content"] },
@@ -135,6 +136,18 @@ var readme = `# ${name} \u2014 a Booboo brain
135
136
 
136
137
  A rooted, queryable graph of your system, built with [Booboo](https://github.com/jessedu29260-netizen/booboo) (the unified operational brain).
137
138
 
139
+ ## First: shape it to your system
140
+
141
+ The scaffold ships a **sample** organigram (a Writer and a Researcher) so the panel
142
+ demos immediately. It is not yours, and \`org.booboo.json\` is flagged \`"seed": true\`
143
+ to say so.
144
+
145
+ Open this folder in Claude Code / Cursor and say **"set up my brain"**. Your agent
146
+ reads [ONBOARDING.md](./ONBOARDING.md), looks at your actual project, asks only what
147
+ it cannot infer, proposes a structure for you to correct, and writes the real
148
+ organigram. Everything downstream \u2014 rules, memory buckets, who reports to whom \u2014
149
+ inherits from that one file.
150
+
138
151
  ## Quickstart
139
152
 
140
153
  \`\`\`bash
@@ -199,6 +212,16 @@ var agentsMd = `# ${TITLE} \u2014 the agent contract
199
212
  *Any AI agent working in this folder reads this first, every session. It is the
200
213
  operating doctrine for this brain \u2014 the conventions match the setup.*
201
214
 
215
+ ## 0. Is this brain set up yet? (check first, every session)
216
+ If \`org.booboo.json\` still contains \`"seed": true\`, this brain has NOT been shaped
217
+ for this system \u2014 it is holding the scaffold's sample Writer/Researcher pair, which
218
+ belongs to nobody. **Stop and run \`ONBOARDING.md\` before any other work.** It takes
219
+ one pass: read the project, confirm the structure with the human, write the real org.
220
+
221
+ Until that is done, do not add agents, write memories against the sample agents, or
222
+ build anything on top of the placeholder shape \u2014 everything downstream inherits from
223
+ the org, so work done against a fake structure has to be redone against the real one.
224
+
202
225
  ## What this folder is
203
226
  - \`booboo.config.yaml\` \u2014 build config (layers \xB7 sources \xB7 walls \xB7 wikilinks). Edit to shape the brain.
204
227
  - \`org.booboo.json\` \u2014 **SOURCE**: the agent organigram you boot from. Versioned, validated, edited via the panel or a reviewed change \u2014 never ad-hoc.
@@ -230,6 +253,117 @@ End substantial work by reporting plainly: what changed, what you verified again
230
253
  `;
231
254
  var claudeMd = `@AGENTS.md
232
255
  `;
256
+ var onboardingMd = `# Set up this brain \u2014 run once, then delete this file
257
+
258
+ *You are the orchestrator. This folder is a Booboo brain that has NOT been
259
+ shaped yet: \`org.booboo.json\` still carries \`"seed": true\` and holds a sample
260
+ Writer/Researcher pair that has nothing to do with this system. Your job is to
261
+ replace that sample with the real structure, then clear the flag.*
262
+
263
+ **Do not fabricate a structure.** Everything below is about finding out what is
264
+ actually here before you write anything down.
265
+
266
+ ## 1. Read before you ask
267
+
268
+ Most of an organigram is already sitting in the project. Look, in this order:
269
+
270
+ - \`package.json\` / \`pyproject.toml\` / \`go.mod\` \u2014 what this thing is and is built from
271
+ - \`README\` and any architecture doc \u2014 what it claims to do, for whom, **and how its
272
+ parts relate**. This is the important one, see the warning below.
273
+ - the top two levels of directories \u2014 the candidate divisions
274
+ - an existing \`CLAUDE.md\` / \`AGENTS.md\` / \`.cursorrules\` \u2014 conventions already agreed
275
+ - \`git log --oneline -40\` and \`git shortlog -sn\` \u2014 what actually gets worked on, and by how many people
276
+ - any \`docs/\`, \`ops/\`, \`infra/\` \u2014 the surfaces that need an owner
277
+
278
+ **Folders give you the nouns, not the shape.** A directory listing is flat by
279
+ construction, and an org built straight from one is a root with fifteen children
280
+ and no structure \u2014 which is a list, not an organigram. The grouping almost always
281
+ lives in the prose: "X is the contract at the centre, Y and Z feed it, A and B
282
+ render it" is three divisions, and no amount of staring at the folder names will
283
+ tell you that. Read for how the parts RELATE, then group the nouns under it.
284
+
285
+ Write down what you inferred. You will show it to the human in step 3 as
286
+ statements to correct, which is far easier to answer than an open question.
287
+
288
+ ## 2. Ask only what the repo cannot tell you
289
+
290
+ Four questions, maximum. Fewer if you already know the answer. Ask them in one
291
+ message, not one at a time:
292
+
293
+ 1. **What does this system DO, in one sentence?** (The root agent's purpose.)
294
+ 2. **What are its real divisions?** Not the folders, the *responsibilities* \u2014
295
+ the things that would each have an owner if this were a company.
296
+ 3. **What must never be shared between them?** Secrets, client data, anything
297
+ personal. These become \`walls:\` and are filtered before anything is emitted.
298
+ 4. **What should agents here remember between sessions?** Decisions, incidents,
299
+ customer facts, research? These become the memory buckets.
300
+
301
+ If the human says "you decide" \u2014 decide, from step 1, and say what you decided
302
+ and why. Do not stall.
303
+
304
+ ## 3. Propose the shape BEFORE writing it
305
+
306
+ Print the organigram as a tree, in the message, with one line per agent saying
307
+ what it owns and what it can reach. Something like:
308
+
309
+ \`\`\`
310
+ core the orchestrator \u2014 routes, never executes
311
+ \u251C\u2500 <division> <what it owns> reaches: <buckets>
312
+ \u2502 \u2514\u2500 <role> <what it does>
313
+ \u2514\u2500 <division> <what it owns> reaches: <buckets>
314
+ \`\`\`
315
+
316
+ Then ask one question: **"Does this match how it actually works?"** Structure is
317
+ cheap to fix now and expensive to fix once agents boot from it.
318
+
319
+ Rules of thumb worth holding:
320
+ - **The root routes, it does not execute.** If the root is doing the work, the
321
+ org is one layer short.
322
+ - **A division with one child is not a division** \u2014 collapse it.
323
+ - **Buckets follow responsibility, not convenience.** If two agents need the
324
+ same bucket, that is a signal they are one agent, or that a parent should own it.
325
+ - **Rules inherit downward.** Put a rule as high as it is true, and only there.
326
+ A rule restated on a child is a rule that will drift.
327
+
328
+ ## 4. Write it
329
+
330
+ - \`org.booboo.json\` \u2014 the agents, their parents, roles, \`buckets\`, \`rules\`, a
331
+ \`boot\` line for the root, and a \`cadence\` on every division (see below).
332
+ **Remove \`"seed": true\`** \u2014 that is the whole point of this step, and the gate
333
+ in AGENTS.md reads it.
334
+
335
+ **Set \`cadence\` on every division: expected HOURS between reports.** Daily is
336
+ 24, weekly 168, monthly 720. This is what the health lamp judges \u2014 silence past
337
+ about twice the cadence turns a card amber. Leaving it off does not mean "no
338
+ opinion"; consumers fall back to roughly a day, which is a machine's rhythm, so
339
+ a division that genuinely reports weekly will sit amber permanently and the
340
+ board stops meaning anything. Ask the human what each division's real beat is;
341
+ it is usually the answer to "how often would you expect to hear from them?"
342
+ - \`booboo.config.yaml\` \u2014 set \`layers\` to the planes this system actually has, and
343
+ \`walls\` to the answer from question 3.
344
+ - \`data.booboo.json\` \u2014 replace the sample nodes, or point \`sources\` at the real
345
+ database and delete it.
346
+ - \`rules/\` \u2014 create the rule files any agent references. A \`rules:\` entry pointing
347
+ at a file that does not exist is a rule nobody can read.
348
+
349
+ ## 5. Verify against the running thing
350
+
351
+ \`\`\`bash
352
+ npm run build # must print ok \u2014 read the quality line
353
+ npm run panel # the organigram, as the human will see it
354
+ \`\`\`
355
+
356
+ Check with your own eyes: every agent has a parent, the tree matches what was
357
+ agreed in step 3, and no rule points at a missing file. \`npm run build\` failing
358
+ or the panel showing an agent you did not intend means step 4 is not finished.
359
+
360
+ ## 6. Close
361
+
362
+ Delete this file \u2014 it has done its job, and a completed ritual left lying around
363
+ reads as an outstanding one. Then \`booboo_report\` what you set up, and
364
+ \`booboo_remember\` the *reasoning* behind the divisions: the next agent inherits
365
+ the shape from the org, but it inherits the WHY only from you.
366
+ `;
233
367
  var files = {
234
368
  "booboo.config.yaml": configYaml,
235
369
  "data.booboo.json": dataJson,
@@ -238,7 +372,8 @@ var files = {
238
372
  "README.md": readme,
239
373
  ".gitignore": gitignore,
240
374
  "AGENTS.md": agentsMd,
241
- "CLAUDE.md": claudeMd
375
+ "CLAUDE.md": claudeMd,
376
+ "ONBOARDING.md": onboardingMd
242
377
  };
243
378
  for (const [f, content] of Object.entries(files)) writeFileSync(path.join(dir, f), content, "utf8");
244
379
  console.log(`
@@ -253,6 +388,15 @@ console.log(" npm run mcp # MCP over stdio (Claude / Cursor / Claude Cod
253
388
  console.log(" npm run view # see your brain in 3D (opens your browser)");
254
389
  console.log(" npm run panel # the organigram \u2014 run your agents like a company");
255
390
  console.log(" npm run vault # the brain as a wiki-linked markdown vault (Obsidian-ready)\n");
391
+ console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
392
+ console.log("This scaffold does NOT know your system yet. The two agents in");
393
+ console.log("org.booboo.json are a SAMPLE so the panel demos on first run.\n");
394
+ console.log(" Open this folder in Claude Code / Cursor and say:");
395
+ console.log(" set up my brain\n");
396
+ console.log("Your agent reads ONBOARDING.md, looks at your actual project, asks");
397
+ console.log("what it can't infer, and writes the real organigram. Everything else");
398
+ console.log("\u2014 rules, buckets, who reports to whom \u2014 flows down from that file.");
399
+ console.log("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n");
256
400
  console.log("Your agent's contract is AGENTS.md (CLAUDE.md imports it) \u2014 Claude/Codex read it");
257
401
  console.log("automatically in this folder and will follow the brain's conventions.\n");
258
402
  console.log("Then edit booboo.config.yaml to point at your own data \u2014 a postgres example is included.\n");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-booboo",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Scaffold a new Booboo brain — `npx create-booboo my-brain`. Zero deps.",
5
5
  "license": "MIT",
6
6
  "repository": {