vibe-me 3.1.0 β†’ 3.2.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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # πŸŒ€ vibes
4
4
 
5
- ### Every project should contain a continuously maintained,<br>AI-readable and human-readable model of itself.
5
+ ### Project memory. Cross-project intelligence.<br>One command per project. One hub for all of them.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/vibe-me?style=flat-square&color=7c3aed&label=npm)](https://www.npmjs.com/package/vibe-me)
8
8
  [![license](https://img.shields.io/badge/license-MIT-10b981?style=flat-square)](LICENSE)
@@ -11,16 +11,19 @@
11
11
 
12
12
  <br>
13
13
 
14
- **One command. Full project memory. Total clarity.**
14
+ **Scaffold. Fill. Validate. Sync. Get feedback.**
15
15
 
16
- `vibes` creates a `.vibe/` semantic layer and a standardized `docs/` folder β€”<br>
17
- so any human or AI can understand your project, your product, and your business<br>
18
- without reading the source code.
16
+ `vibes` gives every project a `.vibe/` semantic layer and `docs/` folder β€”<br>
17
+ then connects all your projects through a **Vibes Hub** that finds patterns,<br>
18
+ surfaces improvements, and lets your best work raise the bar everywhere.
19
19
 
20
20
  <br>
21
21
 
22
- ```bash
23
- npx vibe-me all
22
+ ```
23
+ npx vibe-me all # scaffold .vibe/ + docs/ in any project
24
+ npx vibe-me check # validate quality (catches unfilled templates)
25
+ npx vibe-me export # sync to your hub
26
+ npx vibe-me insights # get cross-project feedback
24
27
  ```
25
28
 
26
29
  <br>
@@ -69,6 +72,7 @@ Not a wiki. Not a Confluence graveyard. Not a 200-page design doc nobody reads.
69
72
  - Nobody knows the pricing rationale or competitive landscape
70
73
  - User frustrations are invisible β€” product decisions are guesswork
71
74
  - Documentation rots because nobody owns it
75
+ - Your projects are islands β€” lessons learned in one are invisible to others
72
76
 
73
77
  </td>
74
78
  <td width="50%">
@@ -81,14 +85,15 @@ Not a wiki. Not a Confluence graveyard. Not a 200-page design doc nobody reads.
81
85
  - Business strategy, pricing, and market position are documented
82
86
  - User personas include emotional reality β€” fears, confusion, goals
83
87
  - Documentation stays fresh because the AI updates it
88
+ - **Hub connects all your projects** β€” patterns, standards, and improvements flow between them
84
89
 
85
90
  </td>
86
91
  </tr>
87
92
  </table>
88
93
 
89
- > **This isn't documentation. It's a digital twin of your entire venture.**<br>
94
+ > **This isn't documentation. It's a digital twin of your entire portfolio.**<br>
90
95
  > Repository memory. Product memory. Business memory. AI instructions. Living context.<br>
91
- > It's the difference between a repository and a *project that explains itself.*
96
+ > Each project explains itself β€” and the hub makes all your projects learn from each other.
92
97
 
93
98
  ---
94
99
 
@@ -206,6 +211,7 @@ Download [`Vibe.bat`](Vibe.bat), drop it in any project folder, and double-click
206
211
  | | |
207
212
  | `vibes hub <path>` | Set up a central hub β€” git inits, creates `_insights/`, saves config |
208
213
  | `vibes export` | Export `.vibe/` + `docs/` from current project to your hub |
214
+ | `vibes insights` | Show hub feedback for this project β€” opportunities, standards, anti-patterns |
209
215
  | `vibes help` | Show all commands |
210
216
 
211
217
  ---
@@ -315,19 +321,29 @@ What it catches:
315
321
 
316
322
  ---
317
323
 
318
- ## πŸ—‚οΈ Vibes Hub β€” Cross-Project Sync + Intelligence
324
+ ## πŸ—‚οΈ Vibes Hub β€” Your Projects Talking to Each Other
325
+
326
+ The hub is where the magic happens. Every project you work on β€” across any number of computers β€” exports its `.vibe/` and `docs/` into one central repo. An AI analyzes them all and finds patterns, anti-patterns, and improvements that flow **back** into each project.
319
327
 
320
- When you're running vibes across multiple projects (and multiple computers), the **hub** lets you collect, compare, and analyze them all in one place.
328
+ ```
329
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” vibes export β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” vibes insights β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
330
+ β”‚ Project A β”‚ ──────────────────→ β”‚ Vibes Hub β”‚ ←──────────────────── β”‚ Project B β”‚
331
+ β”‚ .vibe/ β”‚ β”‚ _insights/ β”‚ β”‚ .vibe/ β”‚
332
+ β”‚ docs/ β”‚ β”‚ patterns β”‚ "You should adopt β”‚ docs/ β”‚
333
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ standards β”‚ Project A's auth" β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
334
+ β”‚ opportunitiesβ”‚
335
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
336
+ ```
321
337
 
322
- ### One-time setup
338
+ ### Step 1: Set up the hub (one time)
323
339
 
324
340
  ```bash
325
341
  vibes hub ~/Documents/VibeHub
326
342
  ```
327
343
 
328
- This creates a folder with git, a README, and an `_insights/` intelligence layer β€” then walks you through connecting it to a private GitHub repo.
344
+ Creates a folder with git, a README, and an `_insights/` intelligence layer. Connect it to a private GitHub repo so it syncs across machines.
329
345
 
330
- ### Export from any project
346
+ ### Step 2: Export from each project
331
347
 
332
348
  ```bash
333
349
  cd your-project
@@ -336,13 +352,9 @@ vibes export
336
352
 
337
353
  Copies `.vibe/` and `docs/` into your hub, organized by project name. Auto-generates an `index.md` dashboard.
338
354
 
339
- ### Sync across machines
340
-
341
- Push from one machine, pull on another. Same private repo, all your projects.
342
-
343
- ### Cross-project intelligence
355
+ ### Step 3: AI analysis (after 3+ projects)
344
356
 
345
- After exporting 3+ projects, tell your AI agent:
357
+ Tell your AI agent:
346
358
 
347
359
  > *"Read `_insights/ANALYZE.md` in my Vibes Hub and follow the instructions."*
348
360
 
@@ -350,29 +362,69 @@ The AI reads every project's `.vibe/` files and fills out:
350
362
 
351
363
  | File | What it finds |
352
364
  |:---|:---|
353
- | `_insights/patterns.md` | Architecture, security, and tech stack patterns across projects |
354
- | `_insights/standards.md` | Universal rules that should apply everywhere |
355
- | `_insights/opportunities.md` | "Omni does X well β†’ JustLegal should adopt it" |
365
+ | `_insights/patterns.md` | Architecture, security, and tech stack patterns across all projects |
366
+ | `_insights/standards.md` | Universal rules that should apply everywhere (file size limits, schema validation, etc.) |
367
+ | `_insights/opportunities.md` | Specific transfers β€” "Project A does X well β†’ Project B should adopt it because Y" |
368
+
369
+ ### Step 4: Pull feedback into any project
370
+
371
+ ```bash
372
+ cd your-project
373
+ vibes insights
374
+ ```
375
+
376
+ This reads the hub's `_insights/` and shows you **what applies to the project you're standing in**:
377
+
378
+ ```
379
+ πŸ’‘ vibes insights β€” JustLegal
380
+
381
+ ── Opportunities ──
382
+
383
+ ⚑ open-season β†’ JustLegal
384
+ Adopt EXIF metadata scrubbing for user-uploaded files.
385
+ ⚑ JustPolitics β†’ JustLegal / Spark
386
+ Mobile-responsive WebKit GPU blur optimizations.
387
+
388
+ ── Universal Standards ──
389
+
390
+ β—† Strict File Size Limits
391
+ β—† Structured Schema Validation
392
+ β—† Local API Access Authentication
393
+
394
+ ── Anti-Patterns ──
395
+
396
+ ⚠ Unsecured Localhost APIs
397
+
398
+ 16 insights found. Review _insights/ in your hub for full details.
399
+ ```
400
+
401
+ One project's best practice becomes every project's standard. **Your portfolio gets smarter every time you export.**
402
+
403
+ ### Multi-machine sync
404
+
405
+ The hub is a standard Git repo. Push from one machine, pull on another:
406
+
407
+ 1. **First machine:** `vibes hub ~/Documents/VibeHub` β†’ push to private GitHub repo
408
+ 2. **Other machines:** Clone the repo β†’ `vibes hub ~/path/to/cloned/VibeHub`
409
+ 3. Export projects on any machine β†’ commit & push β†’ pull on the other β†’ `vibes insights`
356
410
 
357
411
  ```
358
412
  VibeHub/
359
- β”œβ”€β”€ index.md Auto-generated dashboard
413
+ β”œβ”€β”€ index.md Auto-generated dashboard
360
414
  β”œβ”€β”€ _insights/
361
- β”‚ β”œβ”€β”€ ANALYZE.md Prompt for AI analysis
362
- β”‚ β”œβ”€β”€ patterns.md Cross-project patterns
363
- β”‚ β”œβ”€β”€ standards.md Universal standards
364
- β”‚ └── opportunities.md Transferable improvements
365
- β”œβ”€β”€ Omni/
415
+ β”‚ β”œβ”€β”€ ANALYZE.md Prompt for AI analysis
416
+ β”‚ β”œβ”€β”€ patterns.md Cross-project patterns
417
+ β”‚ β”œβ”€β”€ standards.md Universal standards
418
+ β”‚ └── opportunities.md Transferable improvements
419
+ β”œβ”€β”€ ProjectA/
366
420
  β”‚ β”œβ”€β”€ .vibe/
367
421
  β”‚ └── docs/
368
- β”œβ”€β”€ JustLegal/
422
+ β”œβ”€β”€ ProjectB/
369
423
  β”‚ β”œβ”€β”€ .vibe/
370
424
  β”‚ └── docs/
371
425
  └── ...
372
426
  ```
373
427
 
374
- One project's best practice becomes every project's standard.
375
-
376
428
  ---
377
429
 
378
430
  ## 🌍 Works With Everything
package/bin/vibes.js CHANGED
@@ -11,6 +11,7 @@ const path = require('path');
11
11
  // Config
12
12
  // ─────────────────────────────────────────────
13
13
 
14
+ const CLI_VERSION = require(path.join(__dirname, '..', 'package.json')).version;
14
15
  const VIBE_DIR = '.vibe';
15
16
  const DOCS_DIR = 'docs';
16
17
  const TEMPLATES_DIR = path.join(__dirname, '..', 'templates');
@@ -370,6 +371,17 @@ function cmdCheck(targetDir) {
370
371
  console.log(dim(' ── docs/ ──'));
371
372
  console.log('');
372
373
 
374
+ // Check for non-lowercase filenames in docs/
375
+ try {
376
+ const actualFiles = fs.readdirSync(docsDir).filter(f => f.endsWith('.md'));
377
+ for (const f of actualFiles) {
378
+ if (f !== 'README.md' && f !== f.toLowerCase()) {
379
+ console.log(yellow(' ⚠ ') + f + yellow(' β€” should be lowercase (' + f.toLowerCase() + ')'));
380
+ warnings++;
381
+ }
382
+ }
383
+ } catch {}
384
+
373
385
  for (const file of DOCS_FILES) {
374
386
  const fp = path.join(docsDir, file);
375
387
  if (!exists(fp)) { console.log(yellow(' ⚠ ') + file + ' β€” missing'); warnings++; continue; }
@@ -394,6 +406,22 @@ function cmdCheck(targetDir) {
394
406
  }
395
407
  }
396
408
 
409
+ // ─── Cross-check: vibe_version staleness ───
410
+ const stateFile = path.join(vibeDir, 'state.json');
411
+ if (hasVibe && exists(stateFile)) {
412
+ try {
413
+ const state = JSON.parse(fs.readFileSync(stateFile, 'utf-8'));
414
+ if (state.vibe_version && state.vibe_version !== CLI_VERSION) {
415
+ const major = (v) => (v || '').split('.')[0];
416
+ if (major(state.vibe_version) !== major(CLI_VERSION)) {
417
+ console.log('');
418
+ console.log(yellow(' ⚠ ') + `vibe_version in state.json is ${state.vibe_version}, CLI is ${CLI_VERSION}`);
419
+ warnings++;
420
+ }
421
+ }
422
+ } catch {}
423
+ }
424
+
397
425
  // ─── Summary ───
398
426
  console.log('');
399
427
  let result = '';
@@ -870,6 +898,101 @@ function cmdHub(hubPathArg) {
870
898
  console.log('');
871
899
  }
872
900
 
901
+ function cmdInsights(targetDir) {
902
+ if (!exists(HUB_CONFIG)) {
903
+ console.log(red('\n βœ– No hub configured. Run "vibes hub <path>" first.\n'));
904
+ process.exit(1);
905
+ }
906
+
907
+ const hubPath = fs.readFileSync(HUB_CONFIG, 'utf-8').trim();
908
+ const insightsDir = path.join(hubPath, '_insights');
909
+
910
+ if (!exists(insightsDir)) {
911
+ console.log(red('\n βœ– No _insights/ folder in hub. Run the analysis prompt first.\n'));
912
+ process.exit(1);
913
+ }
914
+
915
+ const name = getProjectName(targetDir);
916
+ const nameL = name.toLowerCase();
917
+
918
+ console.log('');
919
+ console.log(bold(` πŸ’‘ vibes insights β€” ${name}`));
920
+
921
+ let totalHits = 0;
922
+
923
+ // ─── Scan opportunities.md ───
924
+ const oppFile = path.join(insightsDir, 'opportunities.md');
925
+ if (exists(oppFile)) {
926
+ const content = fs.readFileSync(oppFile, 'utf-8');
927
+ // Split by ## headers
928
+ const sections = content.split(/^## /gm).filter(s => s.trim());
929
+ const relevant = sections.filter(s => s.toLowerCase().includes(nameL));
930
+
931
+ if (relevant.length > 0) {
932
+ console.log('');
933
+ console.log(dim(' ── Opportunities ──'));
934
+ console.log('');
935
+ for (const section of relevant) {
936
+ const title = section.split('\n')[0].trim();
937
+ const whatMatch = section.match(/\*\*What:\*\*\s*(.+)/i);
938
+ const what = whatMatch ? whatMatch[1].trim() : '';
939
+ console.log(cyan(' ⚑ ') + title);
940
+ if (what) console.log(dim(' ') + what);
941
+ totalHits++;
942
+ }
943
+ }
944
+ }
945
+
946
+ // ─── Scan standards.md ───
947
+ const stdFile = path.join(insightsDir, 'standards.md');
948
+ if (exists(stdFile)) {
949
+ const content = fs.readFileSync(stdFile, 'utf-8');
950
+ const bullets = content.match(/^\d+\.\s+\*\*.+\*\*/gm) || [];
951
+
952
+ if (bullets.length > 0) {
953
+ console.log('');
954
+ console.log(dim(' ── Universal Standards ──'));
955
+ console.log('');
956
+ for (const bullet of bullets) {
957
+ const clean = bullet.replace(/^\d+\.\s+/, '').replace(/\*\*/g, '');
958
+ console.log(dim(' β—† ') + clean);
959
+ totalHits++;
960
+ }
961
+ }
962
+ }
963
+
964
+ // ─── Scan patterns.md for anti-patterns mentioning this project ───
965
+ const patFile = path.join(insightsDir, 'patterns.md');
966
+ if (exists(patFile)) {
967
+ const content = fs.readFileSync(patFile, 'utf-8');
968
+ const antiSection = content.split('## Common Anti-Patterns')[1];
969
+ if (antiSection) {
970
+ const items = antiSection.split(/^\d+\./gm).filter(s => s.trim());
971
+ const relevant = items.filter(s => s.toLowerCase().includes(nameL));
972
+
973
+ if (relevant.length > 0) {
974
+ console.log('');
975
+ console.log(dim(' ── Anti-Patterns ──'));
976
+ console.log('');
977
+ for (const item of relevant) {
978
+ const title = item.match(/\*\*(.+?)\*\*/)?.[1] || item.split('\n')[0].trim();
979
+ console.log(yellow(' ⚠ ') + title);
980
+ totalHits++;
981
+ }
982
+ }
983
+ }
984
+ }
985
+
986
+ console.log('');
987
+ if (totalHits === 0) {
988
+ console.log(dim(' No specific insights found for this project.'));
989
+ console.log(dim(' Export 3+ projects, then run the analysis prompt in _insights/ANALYZE.md.'));
990
+ } else {
991
+ console.log(` ${totalHits} insights found. Review _insights/ in your hub for full details.`);
992
+ }
993
+ console.log('');
994
+ }
995
+
873
996
  function printNextSteps() {
874
997
  console.log('');
875
998
  console.log(bold(' What to do next:'));
@@ -896,6 +1019,7 @@ function printHelp() {
896
1019
  console.log(' vibes check Validate all files for completeness');
897
1020
  console.log(' vibes status Quick health dashboard');
898
1021
  console.log(' vibes reset Delete and recreate everything');
1022
+ console.log(' vibes insights Show hub feedback for this project');
899
1023
  console.log('');
900
1024
  console.log(' ' + bold('Hub (cross-project sync):'));
901
1025
  console.log('');
@@ -934,8 +1058,9 @@ switch (command) {
934
1058
  case 'check': cmdCheck(targetDir); break;
935
1059
  case 'status': cmdStatus(targetDir); break;
936
1060
  case 'reset': cmdReset(targetDir); break;
937
- case 'export': cmdExport('.', args[1]); break;
938
- case 'hub': cmdHub(args[1]); break;
1061
+ case 'export': cmdExport('.', args[1]); break;
1062
+ case 'hub': cmdHub(args[1]); break;
1063
+ case 'insights': cmdInsights(targetDir); break;
939
1064
  case 'help': case '--help': case '-h': printHelp(); break;
940
1065
  default:
941
1066
  console.log(red(`\n Unknown command: ${command}`));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-me",
3
- "version": "3.1.0",
3
+ "version": "3.2.0",
4
4
  "description": "The complete semantic layer for any project. Repository memory, product memory, business memory, AI instructions, and living context β€” so any human or AI can understand your project without reading the source.",
5
5
  "keywords": [
6
6
  "vibes",
@@ -818,6 +818,57 @@ Never put API keys, passwords, internal URLs, or customer data in `.vibe/` files
818
818
 
819
819
  ---
820
820
 
821
+ ## Beyond One Project β€” The Vibes Hub
822
+
823
+ Everything above describes how to create a `.vibe/` layer for **one** project. But the real power emerges when you connect multiple projects together.
824
+
825
+ ### The Problem
826
+
827
+ You're building 5 projects. One has great authentication. Another has a clever caching strategy. A third has a security hole that the first project already solved. But you'd never know β€” because each project is an island.
828
+
829
+ ### The Solution: Hub + Insights
830
+
831
+ The `vibe-me` CLI includes a **hub** β€” a central folder (synced via Git) that collects the `.vibe/` and `docs/` from all your projects. After exporting 3+ projects, an AI analyzes them all and generates cross-project intelligence:
832
+
833
+ ```bash
834
+ # One-time: create a hub
835
+ vibes hub ~/Documents/VibeHub
836
+
837
+ # From any project: export to the hub
838
+ vibes export
839
+
840
+ # From any project: see what the hub knows about you
841
+ vibes insights
842
+ ```
843
+
844
+ The AI analysis produces three files in `_insights/`:
845
+
846
+ - **patterns.md** β€” Architecture and security patterns shared across projects
847
+ - **standards.md** β€” Universal rules that should apply everywhere (file size limits, schema validation, token auth, etc.)
848
+ - **opportunities.md** β€” Specific transfers: "Project A does X well β†’ Project B should adopt it because Y"
849
+
850
+ Then `vibes insights` reads those files and shows you **only what applies to the project you're standing in** β€” opportunities targeted at you, standards you might be missing, and anti-patterns you share with other projects.
851
+
852
+ ### Why This Matters
853
+
854
+ Without a hub, your best ideas are trapped in one project. With a hub:
855
+ - Security patterns from one project become standards for all of them
856
+ - A caching strategy you invented in one app gets recommended to another
857
+ - An anti-pattern detected in one project gets flagged everywhere it appears
858
+ - Your portfolio gets smarter every time you export
859
+
860
+ ### The Workflow
861
+
862
+ ```
863
+ Scaffold (.vibe/) β†’ Fill out β†’ Validate (vibes check) β†’ Export to hub β†’ AI analysis β†’ vibes insights
864
+ ↑ β”‚
865
+ └──────────────────── Apply feedback, improve β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
866
+ ```
867
+
868
+ This is not just documentation. It's a **feedback loop across your entire portfolio**.
869
+
870
+ ---
871
+
821
872
  ## FAQ
822
873
 
823
874
  **Q: What if the project is tiny (one file, 200 lines)?**
@@ -1,4 +1,5 @@
1
1
  {
2
+ "project": "PROJECT_NAME",
2
3
  "version": "0.1.0",
3
4
  "health": "active",
4
5
  "status": "prototype",
@@ -7,6 +8,6 @@
7
8
  "known_issues": [],
8
9
  "dependencies": [],
9
10
  "constraints": [],
10
- "vibe_version": "1.0",
11
+ "vibe_version": "3.2.0",
11
12
  "vibe_updated": "TIMESTAMP"
12
13
  }