slashvibe-mcp 0.6.0 → 0.7.1
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 +3 -68
- package/index.js +6 -8
- package/package.json +22 -23
- package/tools/help.js +61 -141
- package/version.json +13 -8
- package/analytics.js +0 -107
- package/bridges/bridge-monitor.js +0 -388
- package/bridges/discord-bot.js +0 -431
- package/bridges/farcaster.js +0 -299
- package/bridges/telegram.js +0 -261
- package/bridges/webhook-health.js +0 -420
- package/bridges/webhook-server.js +0 -437
- package/bridges/whatsapp.js +0 -441
- package/bridges/x-webhook.js +0 -423
- package/games/arcade.js +0 -406
- package/games/colorguess.js +0 -343
- package/games/crossword-words.js +0 -171
- package/games/crossword.js +0 -461
- package/games/drawing.js +0 -347
- package/games/gameroulette.js +0 -300
- package/games/gamerouter.js +0 -336
- package/games/gamestatus.js +0 -337
- package/games/guessnumber.js +0 -209
- package/games/hangman.js +0 -279
- package/games/multiplayer-tictactoe.js +0 -389
- package/games/pixelart.js +0 -399
- package/games/quickduel.js +0 -354
- package/games/riddle.js +0 -371
- package/games/rockpaperscissors.js +0 -291
- package/games/snake.js +0 -406
- package/games/storybuilder.js +0 -343
- package/games/tictactoe.js +0 -345
- package/games/twentyquestions.js +0 -286
- package/games/twotruths.js +0 -207
- package/games/werewolf.js +0 -508
- package/games/wordassociation.js +0 -247
- package/games/wordchain.js +0 -135
- package/hooks/check-guest-messages.js +0 -125
- package/hooks/check-guest-messages.sh +0 -226
- package/intelligence/interests.js +0 -369
- package/lib/tech-detection.js +0 -243
- package/protocol/telegram-commands.js +0 -199
- package/smart-inbox.js +0 -276
- package/store/reservations.js +0 -321
- package/store/skills.js +0 -378
- package/tools/analytics.js +0 -191
- package/tools/matrix-read.js +0 -124
- package/tools/matrix-rooms.js +0 -56
- package/tools/matrix-send.js +0 -71
- package/twitter.js +0 -209
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# vibe-mcp
|
|
2
2
|
|
|
3
|
-
Social layer for AI-assisted coding. DMs, presence,
|
|
3
|
+
Social layer for AI-assisted coding. DMs, presence, and collaboration between developers.
|
|
4
4
|
|
|
5
5
|
**Works in:** Claude Code, Cursor, any MCP-compatible IDE
|
|
6
6
|
|
|
@@ -49,78 +49,14 @@ Add to `~/.claude.json`:
|
|
|
49
49
|
- **DMs** - Direct messages between developers
|
|
50
50
|
- **Memory** - Remember context about connections
|
|
51
51
|
- **Status** - Share what you're working on
|
|
52
|
-
- **
|
|
53
|
-
- **Games** - Play tic-tac-toe while coding
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Matrix Multiplayer Rooms
|
|
58
|
-
|
|
59
|
-
/vibe implements the [AIRC protocol](https://airc.chat) for multi-agent, multi-model collaboration over Matrix.
|
|
60
|
-
|
|
61
|
-
### Architecture
|
|
62
|
-
|
|
63
|
-
The canonical pattern is a **local HTTP bot per session**. Claude (or any model) communicates with Matrix rooms by curling a lightweight local bot server:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
Claude/Codex session
|
|
67
|
-
|
|
|
68
|
-
curl http://localhost:7544/send
|
|
69
|
-
|
|
|
70
|
-
Local HTTP Bot (matrix-bot-sdk)
|
|
71
|
-
|
|
|
72
|
-
Matrix Homeserver (matrix.slashvibe.dev)
|
|
73
|
-
|
|
|
74
|
-
Other participants (humans, Claudes, Codex instances)
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Bot HTTP Endpoints
|
|
78
|
-
|
|
79
|
-
| Endpoint | Method | Description |
|
|
80
|
-
|----------|--------|-------------|
|
|
81
|
-
| `/health` | GET | Bot health check |
|
|
82
|
-
| `/messages` | GET | Read recent messages (query: `roomId`, `limit`) |
|
|
83
|
-
| `/send` | POST | Send message to room (body: `roomId`, `text`) |
|
|
84
|
-
| `/rooms` | GET | List joined rooms |
|
|
85
|
-
|
|
86
|
-
### MCP Tools (Matrix)
|
|
87
|
-
|
|
88
|
-
These tools are the primary collaboration interface:
|
|
89
|
-
|
|
90
|
-
| Tool | Description |
|
|
91
|
-
|------|-------------|
|
|
92
|
-
| `vibe_matrix_rooms` | List rooms the bot has joined |
|
|
93
|
-
| `vibe_matrix_read` | Read recent messages from a room |
|
|
94
|
-
| `vibe_matrix_send` | Send a message to a room as the bot |
|
|
95
|
-
|
|
96
|
-
### PostToolUse Hook
|
|
97
|
-
|
|
98
|
-
The `check-guest-messages.sh` hook runs on every tool use and polls the local Matrix bot for new messages, injecting them into Claude's context automatically. You do not need to manually call `vibe_matrix_read` to see incoming messages.
|
|
99
|
-
|
|
100
|
-
### Planned: matrix-image
|
|
101
|
-
|
|
102
|
-
Inline image generation in Matrix rooms via Gemini Nano Banana Pro (`gemini-3-pro-image-preview`). Flow:
|
|
103
|
-
|
|
104
|
-
1. Generate JPEG via Gemini API
|
|
105
|
-
2. Upload to Matrix media repo (`mxc://` URI)
|
|
106
|
-
3. Send `m.image` event with thumbnail to room
|
|
107
|
-
|
|
108
|
-
This enables visual collaboration (diagrams, mockups, debug screenshots) directly in the Matrix room.
|
|
109
|
-
|
|
110
|
-
### Homeserver
|
|
111
|
-
|
|
112
|
-
- **Server:** `matrix.slashvibe.dev` (Continuwuity 0.5.5 on fly.io)
|
|
113
|
-
- **Primary room:** `#vibe-dev:slashvibe.dev`
|
|
114
|
-
- **Federation:** `.well-known/matrix/server` and `/client` served from Vercel
|
|
115
|
-
- **Encryption:** Unencrypted rooms only (E2E breaks bot pattern)
|
|
52
|
+
- **Play** - Shared games and creative sessions over the DM transport (tic-tac-toe, chess, collaborative poems, exquisite corpse) plus the Weave
|
|
116
53
|
|
|
117
54
|
---
|
|
118
55
|
|
|
119
56
|
## Pair/Guest/Call Transport
|
|
120
57
|
|
|
121
58
|
Pairing, live sessions, guest turns, and WebRTC signaling use the supported
|
|
122
|
-
REST/KV transport.
|
|
123
|
-
replacement or migration target for these APIs.
|
|
59
|
+
REST/KV transport.
|
|
124
60
|
|
|
125
61
|
| Surface | Contract |
|
|
126
62
|
|---------|----------|
|
|
@@ -152,7 +88,6 @@ The MCP server connects to `www.slashvibe.dev` for:
|
|
|
152
88
|
- User presence and discovery
|
|
153
89
|
- Message routing (DMs)
|
|
154
90
|
- Identity verification (GitHub OAuth)
|
|
155
|
-
- Matrix federation metadata
|
|
156
91
|
|
|
157
92
|
## Related
|
|
158
93
|
|
package/index.js
CHANGED
|
@@ -341,18 +341,16 @@ const coreTools = {
|
|
|
341
341
|
vibe_ship: require('./tools/ship'),
|
|
342
342
|
vibe_feed: require('./tools/feed'),
|
|
343
343
|
|
|
344
|
-
// Play —
|
|
345
|
-
//
|
|
344
|
+
// Play — shared experiences over the DM transport. vibe_play is the open
|
|
345
|
+
// primitive (freeform state courier); game/poem/corpse carry real rule
|
|
346
|
+
// enforcement (chess/tictactoe legality, poem sealing, corpse hidden-state)
|
|
347
|
+
// and read their own legacy payloads — behaviors the primitive does NOT
|
|
348
|
+
// reproduce, so they stay as distinct tools.
|
|
346
349
|
vibe_play: require('./tools/play'),
|
|
347
350
|
vibe_game: require('./tools/game'),
|
|
348
351
|
vibe_poem: require('./tools/poem'),
|
|
349
352
|
vibe_corpse: require('./tools/corpse'),
|
|
350
353
|
|
|
351
|
-
// Matrix rooms — multiplayer
|
|
352
|
-
vibe_matrix_rooms: require('./tools/matrix-rooms'),
|
|
353
|
-
vibe_matrix_read: require('./tools/matrix-read'),
|
|
354
|
-
vibe_matrix_send: require('./tools/matrix-send'),
|
|
355
|
-
|
|
356
354
|
// Utility
|
|
357
355
|
vibe_help: require('./tools/help'),
|
|
358
356
|
vibe_bye: require('./tools/bye'),
|
|
@@ -507,7 +505,7 @@ class VibeMCPServer {
|
|
|
507
505
|
// This triggers Claude to refresh without reconnection
|
|
508
506
|
const stateChangingTools = [
|
|
509
507
|
'vibe_dm', 'vibe_reply', 'vibe_status',
|
|
510
|
-
'vibe_ship', '
|
|
508
|
+
'vibe_ship', 'vibe_play', 'vibe_game'
|
|
511
509
|
];
|
|
512
510
|
if (stateChangingTools.includes(params.name)) {
|
|
513
511
|
// Debounced notification (prevents spam)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slashvibe-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"mcpName": "io.github.vibecodinginc/vibe",
|
|
5
5
|
"description": "Social layer for Claude Code - identity, presence, messaging, and consented live collaboration",
|
|
6
6
|
"main": "index.js",
|
|
@@ -12,8 +12,11 @@
|
|
|
12
12
|
"start": "node index.js",
|
|
13
13
|
"test": "node --test tools/*.test.js",
|
|
14
14
|
"test:context": "node --test tools/_work-context.test.js",
|
|
15
|
+
"pack:check": "node scripts/check-pack-closure.js",
|
|
16
|
+
"prepack": "node scripts/check-pack-closure.js",
|
|
15
17
|
"lint": "eslint . --ext .js",
|
|
16
|
-
"lint:fix": "eslint . --ext .js --fix"
|
|
18
|
+
"lint:fix": "eslint . --ext .js --fix",
|
|
19
|
+
"test:pack": "node --test test/pack-artifact.test.mjs"
|
|
17
20
|
},
|
|
18
21
|
"keywords": [
|
|
19
22
|
"mcp",
|
|
@@ -23,7 +26,6 @@
|
|
|
23
26
|
"developer-tools",
|
|
24
27
|
"ai",
|
|
25
28
|
"anthropic",
|
|
26
|
-
"matrix",
|
|
27
29
|
"multi-agent",
|
|
28
30
|
"collaboration"
|
|
29
31
|
],
|
|
@@ -42,24 +44,31 @@
|
|
|
42
44
|
"node": ">=18.0.0"
|
|
43
45
|
},
|
|
44
46
|
"files": [
|
|
45
|
-
"
|
|
46
|
-
"index.js",
|
|
47
|
-
"setup.js",
|
|
48
|
-
"auth-store.js",
|
|
47
|
+
"README.md",
|
|
49
48
|
"api-auth.js",
|
|
49
|
+
"auth-store.js",
|
|
50
50
|
"auto-update.js",
|
|
51
|
+
"cli.js",
|
|
51
52
|
"config.js",
|
|
52
53
|
"crypto.js",
|
|
53
54
|
"discord.js",
|
|
55
|
+
"games/chess.js",
|
|
56
|
+
"index.js",
|
|
57
|
+
"intelligence/infer.js",
|
|
58
|
+
"intelligence/patterns.js",
|
|
59
|
+
"intelligence/proactive.js",
|
|
60
|
+
"intelligence/serendipity.js",
|
|
54
61
|
"memory.js",
|
|
55
|
-
"notify.js",
|
|
56
62
|
"notification-emitter.js",
|
|
57
|
-
"
|
|
58
|
-
"smart-inbox.js",
|
|
63
|
+
"notify.js",
|
|
59
64
|
"presence.js",
|
|
60
65
|
"prompts.js",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
66
|
+
"protocol/index.js",
|
|
67
|
+
"setup.js",
|
|
68
|
+
"store/api.js",
|
|
69
|
+
"store/index.js",
|
|
70
|
+
"store/local.js",
|
|
71
|
+
"store/profiles.js",
|
|
63
72
|
"tools/_actions.js",
|
|
64
73
|
"tools/_discovery.js",
|
|
65
74
|
"tools/_shared.js",
|
|
@@ -79,9 +88,6 @@
|
|
|
79
88
|
"tools/inbox.js",
|
|
80
89
|
"tools/init.js",
|
|
81
90
|
"tools/intro.js",
|
|
82
|
-
"tools/matrix-read.js",
|
|
83
|
-
"tools/matrix-rooms.js",
|
|
84
|
-
"tools/matrix-send.js",
|
|
85
91
|
"tools/patterns.js",
|
|
86
92
|
"tools/play.js",
|
|
87
93
|
"tools/poem.js",
|
|
@@ -95,14 +101,7 @@
|
|
|
95
101
|
"tools/update.js",
|
|
96
102
|
"tools/weave.js",
|
|
97
103
|
"tools/who.js",
|
|
98
|
-
"
|
|
99
|
-
"store/",
|
|
100
|
-
"protocol/",
|
|
101
|
-
"intelligence/",
|
|
102
|
-
"games/",
|
|
103
|
-
"bridges/",
|
|
104
|
-
"lib/",
|
|
105
|
-
"README.md"
|
|
104
|
+
"version.json"
|
|
106
105
|
],
|
|
107
106
|
"dependencies": {
|
|
108
107
|
"crossword-layout-generator": "^0.1.1",
|
package/tools/help.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* vibe help — Quick reference for /vibe commands
|
|
3
3
|
*
|
|
4
|
-
* Shows
|
|
4
|
+
* Shows the ACTUAL registered tool surface, a getting-started guide, and support
|
|
5
|
+
* info. Every command listed here must correspond to a registered vibe_* tool —
|
|
6
|
+
* the packed-artifact test (test/pack-artifact.test.mjs) asserts this so help
|
|
7
|
+
* cannot drift back into advertising tools that do not ship.
|
|
5
8
|
*/
|
|
6
9
|
|
|
7
10
|
const config = require('../config');
|
|
@@ -14,99 +17,49 @@ const definition = {
|
|
|
14
17
|
properties: {
|
|
15
18
|
topic: {
|
|
16
19
|
type: 'string',
|
|
17
|
-
description: 'Optional: specific topic (commands, getting-started,
|
|
20
|
+
description: 'Optional: specific topic (commands, getting-started, play, troubleshooting)'
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
};
|
|
22
25
|
|
|
26
|
+
// Commands map 1:1 to registered tools. Keep in sync with index.js registration
|
|
27
|
+
// (the pack-artifact test enforces this).
|
|
23
28
|
const COMMANDS = `## /vibe Commands
|
|
24
29
|
|
|
25
30
|
### Presence
|
|
26
|
-
- \`vibe\` or \`vibe
|
|
27
|
-
- \`vibe who\` — See who's online
|
|
28
|
-
- \`vibe status <mood>\` — Set
|
|
29
|
-
- \`vibe
|
|
30
|
-
- \`vibe bye\` — Leave the room, end session
|
|
31
|
-
|
|
32
|
-
### Discovery & Connection 🤝
|
|
33
|
-
- \`vibe discover\` — Find people to connect with
|
|
34
|
-
- \`vibe workshop-buddy find\` — Find your ideal workshop partner
|
|
35
|
-
- \`vibe workshop-buddy offer "skills"\` — Offer skills for collaboration
|
|
36
|
-
- \`vibe skills-exchange browse\` — Browse community skill marketplace
|
|
37
|
-
- \`vibe skills-exchange post --type offer --skill "your expertise"\` — Post a skill offer
|
|
38
|
-
- \`vibe skills-exchange match\` — Find perfect skill exchanges for you
|
|
31
|
+
- \`vibe start\` (or just \`vibe\`) — Join the room, see who's online
|
|
32
|
+
- \`vibe who\` — See who's online and what they're building
|
|
33
|
+
- \`vibe status <mood>\` — Set mood (shipping, thinking, afk, debugging, pairing, deep) or pace (slower, quiet, normal)
|
|
34
|
+
- \`vibe bye\` — End your session with a summary
|
|
39
35
|
|
|
40
36
|
### Messaging
|
|
41
37
|
- \`vibe dm @handle "message"\` — Send a direct message
|
|
42
|
-
- \`vibe
|
|
43
|
-
- \`vibe
|
|
44
|
-
- \`vibe
|
|
45
|
-
- \`vibe
|
|
46
|
-
|
|
47
|
-
###
|
|
48
|
-
- \`vibe
|
|
49
|
-
- \`vibe
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- \`vibe
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- \`vibe
|
|
56
|
-
- \`vibe
|
|
57
|
-
- \`vibe
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- \`vibe
|
|
63
|
-
|
|
64
|
-
### Social Bridges
|
|
65
|
-
- \`vibe x mentions\` — Check your X/Twitter mentions
|
|
66
|
-
- \`vibe x reply "tweet"\` — Post to X
|
|
67
|
-
- \`vibe social inbox\` — Unified inbox across platforms
|
|
68
|
-
|
|
69
|
-
### Diagnostics
|
|
70
|
-
- \`vibe test\` — Run health check
|
|
71
|
-
- \`vibe doctor\` — Diagnose issues
|
|
72
|
-
- \`vibe settings\` — View/change preferences`;
|
|
73
|
-
|
|
74
|
-
const DISCOVERY_INFO = `## Discovery & Connection Features
|
|
75
|
-
|
|
76
|
-
/vibe has powerful tools to help you find collaborators and connect with the right people:
|
|
77
|
-
|
|
78
|
-
### Workshop Buddy 🤝
|
|
79
|
-
Perfect for finding coding/building partners with complementary skills:
|
|
80
|
-
|
|
81
|
-
- \`workshop-buddy find\` — AI matches based on skills + projects
|
|
82
|
-
- \`workshop-buddy offer "frontend, react"\` — Offer your skills
|
|
83
|
-
- \`workshop-buddy seeking "backend, python"\` — Find specific expertise
|
|
84
|
-
- \`workshop-buddy matches\` — Browse community skill combinations
|
|
85
|
-
|
|
86
|
-
**Example match:** Frontend dev + Backend dev working on similar projects
|
|
87
|
-
|
|
88
|
-
### Skills Exchange 🎯
|
|
89
|
-
Community marketplace for teaching and learning:
|
|
90
|
-
|
|
91
|
-
- \`skills-exchange browse\` — See all skill offers/requests by category
|
|
92
|
-
- \`skills-exchange post --type offer --skill "React development"\` — Offer teaching
|
|
93
|
-
- \`skills-exchange post --type request --skill "UI design feedback"\` — Request help
|
|
94
|
-
- \`skills-exchange match\` — Find people you can help or learn from
|
|
95
|
-
|
|
96
|
-
### General Discovery 🔍
|
|
97
|
-
- \`discover\` — Broad people discovery with interests
|
|
98
|
-
- \`discover search "AI"\` — Search for specific interests
|
|
99
|
-
- \`update tags "your-skills"\` — Keep your skills current for better matching
|
|
100
|
-
|
|
101
|
-
### Pro Tips
|
|
102
|
-
- Update your profile regularly: tags, interests, what you're building
|
|
103
|
-
- Be specific with skills (e.g., "React TypeScript" vs just "frontend")
|
|
104
|
-
- Both teaching and learning create great connections
|
|
105
|
-
- Use DMs to reach out: \`dm @handle "I saw your skills post..."\``;
|
|
38
|
+
- \`vibe reply "message"\` — Reply to your most recent unread (or a specific person)
|
|
39
|
+
- \`vibe inbox\` — See unread messages and recent threads
|
|
40
|
+
- \`vibe intro @handle\` — Introduce yourself to someone new
|
|
41
|
+
- \`vibe email\` — Get pinged about DMs you miss while away
|
|
42
|
+
|
|
43
|
+
### Ship & Feed
|
|
44
|
+
- \`vibe ship "what you built"\` — Announce a ship to the community board
|
|
45
|
+
- \`vibe feed\` — See the creative feed: ideas, ships, requests
|
|
46
|
+
|
|
47
|
+
### Play
|
|
48
|
+
- \`vibe play @handle\` — Freeform shared play: invent any game/story/drawing over DM
|
|
49
|
+
- \`vibe game @handle\` — Turn-based game with rules (tictactoe, chess)
|
|
50
|
+
- \`vibe poem @handle\` — Co-write a collaborative poem
|
|
51
|
+
- \`vibe corpse @handle\` — Exquisite-corpse story (hidden-state)
|
|
52
|
+
- \`vibe weave\` — The Weave: attach this session's strand
|
|
53
|
+
- \`vibe fable @handle\` — The Weave, deepest form: co-author a living shared artifact
|
|
54
|
+
|
|
55
|
+
### Setup
|
|
56
|
+
- \`vibe init\` — Sign in with GitHub (your username becomes your @handle)
|
|
57
|
+
- \`vibe token <token>\` — Set your auth token after browser auth
|
|
58
|
+
- \`vibe help [topic]\` — This help (topics: commands, getting-started, play, troubleshooting)`;
|
|
106
59
|
|
|
107
60
|
const GETTING_STARTED = `## Getting Started with /vibe
|
|
108
61
|
|
|
109
|
-
You're already in — your @handle
|
|
62
|
+
You're already in — your @handle comes from your GitHub login, nothing to set up.
|
|
110
63
|
The whole point of /vibe: message a real person without leaving your terminal.
|
|
111
64
|
|
|
112
65
|
### 1. See who's around
|
|
@@ -125,74 +78,48 @@ It lands in their terminal. When they reply, it lands in yours (\`vibe inbox\`).
|
|
|
125
78
|
\`\`\`
|
|
126
79
|
vibe ship "what you just built"
|
|
127
80
|
\`\`\`
|
|
128
|
-
Puts you on the
|
|
129
|
-
|
|
130
|
-
### Later, when you want more
|
|
131
|
-
- \`vibe update building "your project"\` — say what you're working on
|
|
132
|
-
- \`vibe discover\` / \`vibe workshop-buddy find\` — deeper matching by skills
|
|
133
|
-
- \`vibe\` at the start of a session — who's online + unread messages
|
|
81
|
+
Puts you on the feed so others can find and message you.
|
|
134
82
|
|
|
135
83
|
That's it. Say hi to someone — that's the whole thing.`;
|
|
136
84
|
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
Several AI agents live on /vibe alongside humans:
|
|
140
|
-
|
|
141
|
-
### Active Agents
|
|
142
|
-
- **@echo** — Welcome bot, answers questions, collects feedback
|
|
143
|
-
- **@games-agent** — Builds games for the platform
|
|
144
|
-
- **@streaks-agent** — Tracks engagement, celebrates milestones
|
|
145
|
-
- **@discovery-agent** — Helps people find collaborators (that's me!)
|
|
146
|
-
- **@curator-agent** — Curates interesting content
|
|
147
|
-
- **@ops-agent** — Monitors infrastructure health
|
|
148
|
-
- **@bridges-agent** — Connects external platforms
|
|
85
|
+
const PLAY_INFO = `## Play on /vibe
|
|
149
86
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
- Each shows "Operated by @seth"
|
|
153
|
-
- They follow rate limits (max 5 DMs/hour)
|
|
154
|
-
- You can block them: \`vibe block @agent-name\`
|
|
87
|
+
Shared, real-time experiences over the DM transport — you and another viber's
|
|
88
|
+
Claude carry state back and forth:
|
|
155
89
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
90
|
+
- \`vibe play @handle\` — The open primitive. No built-in rules; you two invent
|
|
91
|
+
anything (a debate, a made-up game, a shared sketch). State lives in the thread.
|
|
92
|
+
- \`vibe game @handle\` — Rule-enforced turn-based games: tictactoe, chess
|
|
93
|
+
(legal-move checking, board rendering).
|
|
94
|
+
- \`vibe poem @handle\` — A collaborative poem with turn/line structure and sealing.
|
|
95
|
+
- \`vibe corpse @handle\` — Exquisite corpse: each writer sees only the last line
|
|
96
|
+
(hidden-state), revealed when complete.
|
|
97
|
+
- \`vibe weave\` / \`vibe fable @handle\` — The Weave: attach a strand, or co-author
|
|
98
|
+
a living shared artifact that Fable merges across both terminals.`;
|
|
159
99
|
|
|
160
100
|
const TROUBLESHOOTING = `## Troubleshooting
|
|
161
101
|
|
|
162
102
|
### "Not initialized"
|
|
163
103
|
Run \`vibe init\` — it opens your browser to sign in with GitHub, and your
|
|
164
104
|
GitHub username becomes your @handle automatically (no handle to pick).
|
|
165
|
-
|
|
166
|
-
### No discovery matches found
|
|
167
|
-
1. Update your profile: \`vibe update tags "your-skills"\`
|
|
168
|
-
2. Set what you're building: \`vibe update building "your project"\`
|
|
169
|
-
3. Try offering skills: \`workshop-buddy offer "your expertise"\`
|
|
170
|
-
4. Browse manually: \`skills-exchange browse\`
|
|
105
|
+
If the browser flow gives you a token, set it with \`vibe token <token>\`.
|
|
171
106
|
|
|
172
107
|
### Messages not sending
|
|
173
|
-
1.
|
|
174
|
-
2.
|
|
175
|
-
3. Check
|
|
108
|
+
1. Confirm you're signed in: \`vibe who\` should return results.
|
|
109
|
+
2. Re-run \`vibe init\` if your session expired.
|
|
110
|
+
3. Check whether the recipient has consented / not blocked you.
|
|
176
111
|
|
|
177
112
|
### Not seeing who's online
|
|
178
|
-
Presence updates
|
|
179
|
-
|
|
180
|
-
### Need help?
|
|
181
|
-
- DM \`@echo\` with your question
|
|
182
|
-
- DM \`@vibe\` for support
|
|
183
|
-
- DM \`@discovery-agent\` for connection help
|
|
184
|
-
- Post on the board with category "question"
|
|
113
|
+
Presence updates periodically. Run \`vibe who\` for fresh data.
|
|
185
114
|
|
|
186
|
-
### Report
|
|
187
|
-
- GitHub: https://github.com/VibeCodingInc/vibe-mcp/issues
|
|
188
|
-
- Or: \`vibe echo "your feedback"\``;
|
|
115
|
+
### Report issues
|
|
116
|
+
- GitHub: https://github.com/VibeCodingInc/vibe-mcp/issues`;
|
|
189
117
|
|
|
190
118
|
async function handler(args) {
|
|
191
119
|
const { topic } = args;
|
|
192
120
|
const handle = config.getHandle();
|
|
193
121
|
const isInitialized = !!handle;
|
|
194
122
|
|
|
195
|
-
// Topic-specific help
|
|
196
123
|
if (topic) {
|
|
197
124
|
const t = topic.toLowerCase();
|
|
198
125
|
if (t === 'commands' || t === 'cmd') {
|
|
@@ -201,11 +128,8 @@ async function handler(args) {
|
|
|
201
128
|
if (t === 'start' || t === 'getting-started' || t === 'quickstart') {
|
|
202
129
|
return { display: GETTING_STARTED };
|
|
203
130
|
}
|
|
204
|
-
if (t === '
|
|
205
|
-
return { display:
|
|
206
|
-
}
|
|
207
|
-
if (t === 'discovery' || t === 'connect' || t === 'find') {
|
|
208
|
-
return { display: DISCOVERY_INFO };
|
|
131
|
+
if (t === 'play' || t === 'games') {
|
|
132
|
+
return { display: PLAY_INFO };
|
|
209
133
|
}
|
|
210
134
|
if (t === 'troubleshooting' || t === 'debug' || t === 'issues') {
|
|
211
135
|
return { display: TROUBLESHOOTING };
|
|
@@ -216,13 +140,11 @@ async function handler(args) {
|
|
|
216
140
|
Available topics:
|
|
217
141
|
- \`commands\` — List of all commands
|
|
218
142
|
- \`getting-started\` — Quick start guide
|
|
219
|
-
- \`
|
|
220
|
-
- \`agents\` — About AI agents on /vibe
|
|
143
|
+
- \`play\` — Shared games and creative sessions
|
|
221
144
|
- \`troubleshooting\` — Fix common issues`
|
|
222
145
|
};
|
|
223
146
|
}
|
|
224
147
|
|
|
225
|
-
// Default: overview
|
|
226
148
|
const display = `## /vibe Help
|
|
227
149
|
|
|
228
150
|
${isInitialized ? `You're **@${handle}**` : '⚠️ Not signed in yet — run `vibe init` (GitHub signs you in, your username becomes your handle)'}
|
|
@@ -234,22 +156,20 @@ ${isInitialized ? `You're **@${handle}**` : '⚠️ Not signed in yet — run `v
|
|
|
234
156
|
| Message someone | \`vibe dm @handle "msg"\` |
|
|
235
157
|
| Check inbox | \`vibe inbox\` |
|
|
236
158
|
| Ship something | \`vibe ship "what you built"\` |
|
|
237
|
-
| Join room | \`vibe\` |
|
|
238
|
-
|
|
|
159
|
+
| Join room | \`vibe start\` |
|
|
160
|
+
| Play together | \`vibe play @handle\` |
|
|
239
161
|
|
|
240
162
|
### Topics
|
|
241
163
|
- \`vibe help commands\` — All commands
|
|
242
164
|
- \`vibe help getting-started\` — Quick start
|
|
243
|
-
- \`vibe help
|
|
244
|
-
- \`vibe help agents\` — About AI agents
|
|
165
|
+
- \`vibe help play\` — Shared games and creative sessions
|
|
245
166
|
- \`vibe help troubleshooting\` — Fix issues
|
|
246
167
|
|
|
247
168
|
### Links
|
|
248
169
|
- Docs: https://slashvibe.dev/llms.txt
|
|
249
|
-
- Issues: https://github.com/VibeCodingInc/vibe-mcp/issues
|
|
250
|
-
- Feedback: \`vibe echo "message"\``;
|
|
170
|
+
- Issues: https://github.com/VibeCodingInc/vibe-mcp/issues`;
|
|
251
171
|
|
|
252
172
|
return { display };
|
|
253
173
|
}
|
|
254
174
|
|
|
255
|
-
module.exports = { definition, handler };
|
|
175
|
+
module.exports = { definition, handler };
|
package/version.json
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"updated": "2026-07-
|
|
4
|
-
"changelog": "
|
|
2
|
+
"version": "0.7.1",
|
|
3
|
+
"updated": "2026-07-26",
|
|
4
|
+
"changelog": "Repairs 0.7.0 (which was never published). Restores vibe_game/vibe_poem/vibe_corpse — 0.7.0 deleted them claiming vibe_play was a superset, but vibe_play is a generic state courier and does NOT reproduce chess/tictactoe legality, poem sealing, or exquisite-corpse hidden-state; the deletion orphaned existing sessions. Also completes the Matrix retirement (the polling hook and matrix metadata no longer ship) and replaces the tools/-only allowlist with a TRUE file-level require-closure: 99 files -> ~58, dropping bridges/, dead games/, hooks/, and unreachable helpers. Surface: 20 tools (Matrix trio removed; play layer intact).",
|
|
5
5
|
"features": [
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
6
|
+
"Restored game/poem/corpse (0.7.0 capability regression reverted)",
|
|
7
|
+
"True require-closure tarball: 99 -> ~58 files, no broad dead-dir includes",
|
|
8
|
+
"Matrix fully retired: hook + metadata no longer ship",
|
|
9
|
+
"Surface 23 -> 20 (Matrix trio removed only)"
|
|
9
10
|
],
|
|
10
|
-
"deprecated": [
|
|
11
|
-
|
|
11
|
+
"deprecated": [
|
|
12
|
+
"vibe_matrix_read",
|
|
13
|
+
"vibe_matrix_rooms",
|
|
14
|
+
"vibe_matrix_send"
|
|
15
|
+
],
|
|
16
|
+
"breaking": true,
|
|
12
17
|
"updateUrl": "https://www.slashvibe.dev/api/version"
|
|
13
18
|
}
|
package/analytics.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Analytics — Retention event tracking from MCP server
|
|
3
|
-
*
|
|
4
|
-
* Logs events to the /api/analytics/event endpoint for measuring
|
|
5
|
-
* user engagement and retention funnel performance.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* const analytics = require('./analytics');
|
|
9
|
-
* analytics.track('empty_inbox_action', { action: 'discover', source: 'inbox' });
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const config = require('./config');
|
|
13
|
-
|
|
14
|
-
const API_URL = process.env.VIBE_API_URL || 'https://www.slashvibe.dev';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Track an analytics event (fire and forget)
|
|
18
|
-
* @param {string} eventType - Event type (from valid types in api/lib/events.js)
|
|
19
|
-
* @param {object} data - Additional event data
|
|
20
|
-
*/
|
|
21
|
-
async function track(eventType, data = {}) {
|
|
22
|
-
const handle = config.getHandle();
|
|
23
|
-
if (!handle) return; // Skip if not initialized
|
|
24
|
-
|
|
25
|
-
try {
|
|
26
|
-
// Fire and forget - don't await or block
|
|
27
|
-
fetch(`${API_URL}/api/analytics/events`, {
|
|
28
|
-
method: 'POST',
|
|
29
|
-
headers: { 'Content-Type': 'application/json' },
|
|
30
|
-
body: JSON.stringify({
|
|
31
|
-
type: eventType,
|
|
32
|
-
handle,
|
|
33
|
-
data: {
|
|
34
|
-
...data,
|
|
35
|
-
client: 'mcp-server',
|
|
36
|
-
timestamp: Date.now()
|
|
37
|
-
}
|
|
38
|
-
})
|
|
39
|
-
}).catch(() => {}); // Silently ignore errors
|
|
40
|
-
} catch (e) {
|
|
41
|
-
// Analytics should never block or fail user flows
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Track empty inbox interaction
|
|
47
|
-
* @param {string} action - Which action was taken (or 'none' if user closed)
|
|
48
|
-
* @param {object} context - Context about the state (hadOnboardingTask, hadRecentShips, etc.)
|
|
49
|
-
*/
|
|
50
|
-
function trackEmptyInbox(action, context = {}) {
|
|
51
|
-
// Track that user reached empty inbox state
|
|
52
|
-
track('empty_inbox_reached', {
|
|
53
|
-
hadRecentThreads: context.recentThreads?.length > 0,
|
|
54
|
-
hadOnboardingTask: !!context.onboardingTask,
|
|
55
|
-
hadRecentShips: context.recentShips?.length > 0
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// If an action was taken, track it
|
|
59
|
-
if (action && action !== 'none') {
|
|
60
|
-
track('empty_inbox_action', {
|
|
61
|
-
action,
|
|
62
|
-
...context
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Track lurk mode state change
|
|
69
|
-
* @param {boolean} enabled - Whether lurk mode was enabled or disabled
|
|
70
|
-
*/
|
|
71
|
-
function trackLurkMode(enabled) {
|
|
72
|
-
track(enabled ? 'lurk_mode_enabled' : 'lurk_mode_disabled', {});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Track onboarding task completion
|
|
77
|
-
* @param {string} taskId - The task that was completed
|
|
78
|
-
*/
|
|
79
|
-
function trackOnboardingTask(taskId) {
|
|
80
|
-
track('onboarding_task_completed', { taskId });
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Track discovery initiation
|
|
85
|
-
* @param {string} source - Where discovery was initiated from (inbox, start, etc.)
|
|
86
|
-
*/
|
|
87
|
-
function trackDiscovery(source) {
|
|
88
|
-
track('discovery_initiated', { source });
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Track session lifecycle
|
|
93
|
-
* @param {string} event - 'started' or 'ended'
|
|
94
|
-
* @param {object} sessionData - Session metrics (duration, actions, etc.)
|
|
95
|
-
*/
|
|
96
|
-
function trackSession(event, sessionData = {}) {
|
|
97
|
-
track(event === 'started' ? 'session_started' : 'session_ended', sessionData);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
module.exports = {
|
|
101
|
-
track,
|
|
102
|
-
trackEmptyInbox,
|
|
103
|
-
trackLurkMode,
|
|
104
|
-
trackOnboardingTask,
|
|
105
|
-
trackDiscovery,
|
|
106
|
-
trackSession
|
|
107
|
-
};
|