neohive 6.4.0 → 6.4.2
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 +109 -9
- package/SECURITY.md +8 -53
- package/cli.js +120 -15
- package/dashboard.html +11 -23
- package/dashboard.js +3 -3
- package/lib/audit.js +9 -7
- package/neohive-plugin/.claude-plugin/plugin.json +24 -0
- package/neohive-plugin/.mcp.json +11 -0
- package/neohive-plugin/README.md +55 -0
- package/neohive-plugin/agents/coordinator.md +27 -0
- package/neohive-plugin/gemini-extension/GEMINI.md +24 -0
- package/neohive-plugin/gemini-extension/settings-snippet.json +12 -0
- package/neohive-plugin/hooks/hooks.json +87 -0
- package/neohive-plugin/scripts/auto-register.sh +48 -0
- package/neohive-plugin/scripts/before-prompt.sh +47 -0
- package/neohive-plugin/scripts/enforce-listen.sh +72 -0
- package/neohive-plugin/scripts/enforce-locks.sh +34 -0
- package/neohive-plugin/scripts/post-tool-use.sh +119 -0
- package/neohive-plugin/scripts/track-activity.sh +23 -0
- package/neohive-plugin/skills/conventions/SKILL.md +30 -0
- package/neohive-plugin/skills/launch-team/SKILL.md +24 -0
- package/neohive-plugin/skills/plan/SKILL.md +21 -0
- package/neohive-plugin/skills/send/SKILL.md +14 -0
- package/neohive-plugin/skills/status/SKILL.md +17 -0
- package/package.json +2 -1
- package/server.js +23 -23
package/README.md
CHANGED
|
@@ -41,6 +41,14 @@
|
|
|
41
41
|
|
|
42
42
|
<br />
|
|
43
43
|
|
|
44
|
+
<p align="center">
|
|
45
|
+
<img src="https://raw.githubusercontent.com/fakiho/neohive/master/assets/screenshots/hero-animation.gif" alt="Neohive — Terminal + IDE working together" width="100%" />
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
<br />
|
|
51
|
+
|
|
44
52
|
You open Claude Code in one terminal and Gemini CLI in another. Both are powerful — but they can't see each other. You copy context between windows, manually coordinate who does what.
|
|
45
53
|
|
|
46
54
|
**Neohive removes that bottleneck.** Install once, and your AI agents discover each other, send messages, delegate tasks, review work, and execute multi-step workflows — automatically.
|
|
@@ -53,10 +61,12 @@ You open Claude Code in one terminal and Gemini CLI in another. Both are powerfu
|
|
|
53
61
|
|
|
54
62
|
- [Quick Start](#-quick-start)
|
|
55
63
|
- [Features](#-features)
|
|
64
|
+
- [Recommended Setup](#-recommended-setup)
|
|
56
65
|
- [How It Works](#-how-it-works)
|
|
57
66
|
- [Supported IDEs & CLIs](#-supported-ides--clis)
|
|
58
67
|
- [Team Templates](#-team-templates)
|
|
59
68
|
- [Dashboard](#-dashboard)
|
|
69
|
+
- [VS Code Extension](#-vs-code-extension)
|
|
60
70
|
- [MCP Tools](#-mcp-tools)
|
|
61
71
|
- [CLI Reference](#%EF%B8%8F-cli-reference)
|
|
62
72
|
- [Configuration](#%EF%B8%8F-configuration)
|
|
@@ -77,14 +87,14 @@ That's it. Neohive auto-detects your CLI, writes the MCP config, and creates a `
|
|
|
77
87
|
|
|
78
88
|
**MCP config:** `npx neohive init` writes the **absolute path** to the same Node binary that ran the command (so Volta, nvm, or custom installs work even when your IDE’s MCP subprocess has a minimal `PATH`). For **Claude Code**, the project file is `.mcp.json` in the repo root; you can merge the same `neohive` entry into `~/.claude/mcp.json` if you prefer a user-wide setup. Restart the IDE or reload MCP tools after init.
|
|
79
89
|
|
|
80
|
-
Now open two terminals in the same project:
|
|
90
|
+
Now open two terminals in the same project and paste each prompt into a Claude Code session:
|
|
81
91
|
|
|
82
92
|
```
|
|
83
93
|
# Terminal 1
|
|
84
|
-
Register as
|
|
94
|
+
Register as Alice. Send a greeting to Bob, then call listen().
|
|
85
95
|
|
|
86
96
|
# Terminal 2
|
|
87
|
-
Register as
|
|
97
|
+
Register as Bob, then call listen().
|
|
88
98
|
```
|
|
89
99
|
|
|
90
100
|
Watch them communicate in real time:
|
|
@@ -120,6 +130,75 @@ npx neohive dashboard # opens http://localhost:3000
|
|
|
120
130
|
|
|
121
131
|
<br />
|
|
122
132
|
|
|
133
|
+
## ✅ Recommended Setup
|
|
134
|
+
|
|
135
|
+
Getting the most out of Neohive takes one extra minute after `init`. Here's what we recommend per tool.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### Claude Code
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
npx neohive init --claude
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`init` handles MCP config, hooks, and skills in one step. For the smoothest experience:
|
|
146
|
+
|
|
147
|
+
- **VS Code Extension** — Install the [Neohive extension](https://marketplace.visualstudio.com/items?itemName=alionix.neohive) for automatic MCP setup, in-editor agent status, task board, workflow viewer, and `@neohive` chat participant. The extension configures hooks automatically on activation. Also available on [Open VSX](https://open-vsx.org/extension/alionix/neohive).
|
|
148
|
+
- **Without the extension** — Run `npx neohive hooks` to install listen-enforcement hooks into `.claude/settings.json`. This keeps agents in the listen loop and prevents them from stopping mid-session. Safe to re-run — your existing hooks are preserved.
|
|
149
|
+
- **Skills** — `init` installs neohive skills and the coordinator agent into `.claude/skills/neohive/`. These teach Claude how to use the MCP tools correctly.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
<img src="https://raw.githubusercontent.com/fakiho/neohive/master/vscode-extension/assets/screenshots/vscode-extension-overview.png" alt="Neohive VS Code Extension — Team Chat, Agent Sidebar, Task Board, and Workflows" width="100%" />
|
|
154
|
+
|
|
155
|
+
<br />
|
|
156
|
+
|
|
157
|
+
### Cursor
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npx neohive init --cursor
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Installs MCP config, skills, commands, and agents into your project's `.cursor/` directory. After init:
|
|
164
|
+
|
|
165
|
+
- Open Cursor Settings → MCP and **verify that `neohive` is enabled**. Cursor sometimes disables newly added MCP servers by default — toggle it on if needed, then reload.
|
|
166
|
+
- Skills are available as slash commands (e.g. `/neohive-launch-team`, `/neohive-status`).
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### Antigravity
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
npx neohive init --antigravity
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Installs MCP config globally (`~/.gemini/antigravity/mcp_config.json`) and skills into `.agent/skills/neohive/`. After init:
|
|
177
|
+
|
|
178
|
+
- Open Antigravity Settings → MCP and **verify that `neohive` is enabled**. Like Cursor, Antigravity may disable new MCP servers by default.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### Everything at once
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npx neohive init --all
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Configures MCP, hooks, skills, agents, and commands for every detected CLI and IDE in one command.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Troubleshooting
|
|
193
|
+
|
|
194
|
+
**Agent can't register / MCP tools not found**
|
|
195
|
+
The IDE has likely disabled the neohive MCP server. Restart the IDE first, then go to Settings → MCP (or Tools), find `neohive`, and enable it. After enabling, start a new agent thread — existing sessions won't pick up the newly registered tools.
|
|
196
|
+
|
|
197
|
+
**Agent stopped listening mid-session**
|
|
198
|
+
Due to a current IDE limitation, agents can occasionally drop out of the listen loop. Simply ask the agent: *"Call listen()"* to resume. We are actively working on a permanent fix.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
123
202
|
## 🏗 How It Works
|
|
124
203
|
|
|
125
204
|
```
|
|
@@ -225,8 +304,8 @@ The MCP server exposes **70+ built-in tools** in one registration list (no separ
|
|
|
225
304
|
| Category | Tools |
|
|
226
305
|
|----------|-------|
|
|
227
306
|
| **Identity & briefing** | `register` · `list_agents` · `update_profile` · `get_briefing` · `get_guide` |
|
|
228
|
-
| **Messaging** | `send_message` · `broadcast` · `listen` · `
|
|
229
|
-
| **History & search** | `
|
|
307
|
+
| **Messaging** | `send_message` · `broadcast` · `listen` · `wait_for_reply` · `messages` |
|
|
308
|
+
| **History & search** | `get_summary` · `get_compressed_history` · `messages` |
|
|
230
309
|
| **Collaboration** | `handoff` · `share_file` · `lock_file` · `unlock_file` |
|
|
231
310
|
| **Tasks** | `create_task` · `update_task` · `list_tasks` |
|
|
232
311
|
| **Workflows** | `create_workflow` · `advance_workflow` · `workflow_status` |
|
|
@@ -257,11 +336,12 @@ neohive msg <agent> <text> # send message from CLI
|
|
|
257
336
|
neohive doctor # diagnostic health check
|
|
258
337
|
neohive templates # list available templates
|
|
259
338
|
neohive hooks # install listen-enforcement hooks into .claude/settings.json
|
|
339
|
+
neohive skills # install neohive skills & agents for all detected IDEs
|
|
260
340
|
neohive reset --force # clear data (auto-archives first)
|
|
261
341
|
neohive uninstall # remove from all CLI configs
|
|
262
342
|
```
|
|
263
343
|
|
|
264
|
-
>
|
|
344
|
+
> `init` runs `hooks` and `skills` automatically. Run them standalone at any time to update or repair your setup.
|
|
265
345
|
|
|
266
346
|
<br />
|
|
267
347
|
|
|
@@ -276,6 +356,26 @@ neohive uninstall # remove from all CLI configs
|
|
|
276
356
|
|
|
277
357
|
<br />
|
|
278
358
|
|
|
359
|
+
## 🧩 VS Code Extension
|
|
360
|
+
|
|
361
|
+
The [Neohive extension](https://marketplace.visualstudio.com/items?itemName=alionix.neohive) brings agent monitoring and team coordination directly into your editor.
|
|
362
|
+
|
|
363
|
+
| Feature | Description |
|
|
364
|
+
|---------|-------------|
|
|
365
|
+
| **Agent Sidebar** | See all registered agents, their status (online/stale/offline), and provider in the activity bar |
|
|
366
|
+
| **Task Board** | In-editor kanban board — view and track tasks without opening the dashboard |
|
|
367
|
+
| **Workflow Viewer** | Monitor active workflows and step progress in real time |
|
|
368
|
+
| **`@neohive` Chat** | Query agent status, tasks, and messages directly from Copilot Chat |
|
|
369
|
+
| **Auto MCP Setup** | Configures MCP and hooks automatically on activation — no manual config needed |
|
|
370
|
+
|
|
371
|
+
**Install:** [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=alionix.neohive) · [Open VSX](https://open-vsx.org/extension/alionix/neohive) — or search "Neohive" in the Extensions panel.
|
|
372
|
+
|
|
373
|
+
<br />
|
|
374
|
+
|
|
375
|
+
<img src="https://raw.githubusercontent.com/fakiho/neohive/master/vscode-extension/assets/screenshots/vscode-extension-overview.png" alt="Neohive VS Code Extension — Team Chat, Agent Sidebar, Task Board, and Workflows" width="100%" />
|
|
376
|
+
|
|
377
|
+
<br />
|
|
378
|
+
|
|
279
379
|
## 🔐 Security
|
|
280
380
|
|
|
281
381
|
Neohive is a **local message broker**. It passes text between CLI terminals via shared files. It does not access the internet, store API keys, or run cloud services.
|
|
@@ -307,8 +407,7 @@ Full details: [SECURITY.md](SECURITY.md)
|
|
|
307
407
|
| MCP tools (full) | [docs/reference/tools.md](../docs/reference/tools.md) |
|
|
308
408
|
| AI onboarding (repo map) | [docs/ai-onboarding.md](../docs/ai-onboarding.md) |
|
|
309
409
|
| MCP tools (high-level tour) | [docs/mcp-tools-documentation.md](../docs/mcp-tools-documentation.md) |
|
|
310
|
-
|
|
|
311
|
-
| Vision & Roadmap | [VISION.md](../VISION.md) |
|
|
410
|
+
| Roadmap | [ROADMAP.md](../ROADMAP.md) |
|
|
312
411
|
| Security Policy | [SECURITY.md](SECURITY.md) |
|
|
313
412
|
| Contributing Guide | [CONTRIBUTING.md](../CONTRIBUTING.md) |
|
|
314
413
|
| Changelog | [CHANGELOG.md](CHANGELOG.md) · [root CHANGELOG](../CHANGELOG.md) |
|
|
@@ -341,8 +440,9 @@ node dashboard.js # run the dashboard
|
|
|
341
440
|
</p>
|
|
342
441
|
|
|
343
442
|
<p align="center">
|
|
443
|
+
<a href="https://neohive.alionix.com">Website</a> ·
|
|
344
444
|
<a href="https://github.com/fakiho/neohive">GitHub</a> ·
|
|
345
445
|
<a href="https://www.npmjs.com/package/neohive">npm</a> ·
|
|
346
|
-
<a href="docs/documentation.md">Docs</a> ·
|
|
446
|
+
<a href="../docs/documentation.md">Docs</a> ·
|
|
347
447
|
<a href="mailto:contact@alionix.com">Contact</a>
|
|
348
448
|
</p>
|
package/SECURITY.md
CHANGED
|
@@ -1,60 +1,15 @@
|
|
|
1
|
-
# Security Policy
|
|
1
|
+
# Neohive Security Policy (npm package)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The **complete, canonical** security policy — supported versions, data model, full protections table, LAN access details — is in the repository:
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
| ------- | --------- |
|
|
7
|
-
| **6.x.x** | Yes — current major line |
|
|
8
|
-
| **5.x.x** | Best-effort security fixes only |
|
|
9
|
-
| **< 5.0** | No |
|
|
5
|
+
**[github.com/fakiho/neohive — SECURITY.md](https://github.com/fakiho/neohive/blob/master/SECURITY.md)**
|
|
10
6
|
|
|
11
|
-
|
|
7
|
+
---
|
|
12
8
|
|
|
13
|
-
## Reporting a
|
|
9
|
+
## Reporting a vulnerability
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
**Do not open a public GitHub issue.**
|
|
16
12
|
|
|
17
|
-
**
|
|
13
|
+
Email **contact@alionix.com** or use [GitHub private vulnerability reporting](https://github.com/fakiho/neohive/security/advisories/new).
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
### What to include
|
|
22
|
-
|
|
23
|
-
- Description of the vulnerability
|
|
24
|
-
- Steps to reproduce
|
|
25
|
-
- Potential impact
|
|
26
|
-
- Suggested fix (if any)
|
|
27
|
-
|
|
28
|
-
### Response timeline
|
|
29
|
-
|
|
30
|
-
- **Acknowledgment**: Within 48 hours
|
|
31
|
-
- **Initial assessment**: Within 1 week
|
|
32
|
-
- **Fix release**: As soon as possible, typically within 2 weeks
|
|
33
|
-
|
|
34
|
-
## Security Model
|
|
35
|
-
|
|
36
|
-
Neohive is a **local message broker** — it passes text messages between CLI terminals via shared files on your local machine.
|
|
37
|
-
|
|
38
|
-
### What it does NOT do
|
|
39
|
-
|
|
40
|
-
- Does not give agents filesystem access (they already have it via their CLI)
|
|
41
|
-
- Does not expose anything to the internet by default (dashboard binds to `127.0.0.1`; **`dashboard --lan` / `NEOHIVE_LAN`** binds more broadly — use the generated LAN token)
|
|
42
|
-
- Does not store or transmit API keys
|
|
43
|
-
- Does not run any cloud services
|
|
44
|
-
- Does not execute remote code
|
|
45
|
-
|
|
46
|
-
### Built-in protections
|
|
47
|
-
|
|
48
|
-
- **CORS restriction** — dashboard only accepts requests from localhost
|
|
49
|
-
- **XSS prevention** — all user inputs are escaped before rendering
|
|
50
|
-
- **Path traversal protection** — agents cannot read files outside the project directory
|
|
51
|
-
- **Symlink protection** — follows symlinks and validates the real path
|
|
52
|
-
- **Origin enforcement** — POST/DELETE requests require valid localhost origin
|
|
53
|
-
- **SSE connection limits** — prevents connection exhaustion
|
|
54
|
-
- **Input validation** — agent names, branch names, and file paths are validated
|
|
55
|
-
- **Message size limits** — 1MB max per message
|
|
56
|
-
- **Plugin sandboxing** — plugins run with a 30-second timeout
|
|
57
|
-
|
|
58
|
-
### LAN mode
|
|
59
|
-
|
|
60
|
-
When using `--lan` mode, the dashboard is exposed to your local network only. It is never accessible from the internet.
|
|
15
|
+
Include a description, reproduction steps, impact, and a suggested fix if you have one. We acknowledge within 48 hours and aim to release a fix within 2 weeks.
|
package/cli.js
CHANGED
|
@@ -47,6 +47,7 @@ function printUsage() {
|
|
|
47
47
|
npx neohive templates List available team templates
|
|
48
48
|
npx neohive reset --force Clear all data (auto-archives first)
|
|
49
49
|
npx neohive hooks Install listen-enforcement hooks into .claude/settings.json
|
|
50
|
+
npx neohive skills Install neohive skills & agents for all detected IDEs
|
|
50
51
|
npx neohive uninstall Remove from all CLI configs
|
|
51
52
|
npx neohive help Show this help
|
|
52
53
|
|
|
@@ -134,6 +135,117 @@ function setupClaude(serverPath, cwd) {
|
|
|
134
135
|
|
|
135
136
|
fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2) + '\n');
|
|
136
137
|
console.log(' [ok] Claude Code: .mcp.json updated');
|
|
138
|
+
installSkillsForClaude(cwd);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ─── installSkills ────────────────────────────────────────────────────────────
|
|
142
|
+
// Installs neohive skills, agents, and commands into the appropriate IDE dirs.
|
|
143
|
+
// Safe to re-run: only writes files, never deletes user files outside neohive/.
|
|
144
|
+
|
|
145
|
+
const SKILLS_SRC = path.join(__dirname, 'neohive-plugin', 'skills');
|
|
146
|
+
const AGENTS_SRC = path.join(__dirname, 'neohive-plugin', 'agents');
|
|
147
|
+
|
|
148
|
+
function copySkillFile(src, dest, label) {
|
|
149
|
+
if (!fs.existsSync(src)) return;
|
|
150
|
+
const existing = fs.existsSync(dest) ? fs.readFileSync(dest, 'utf8') : null;
|
|
151
|
+
const incoming = fs.readFileSync(src, 'utf8');
|
|
152
|
+
if (existing === incoming) {
|
|
153
|
+
console.log(` [skip] ${label} (unchanged)`);
|
|
154
|
+
} else {
|
|
155
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
156
|
+
fs.writeFileSync(dest, incoming);
|
|
157
|
+
console.log(` [ok] ${label}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function installSkillsForClaude(cwd) {
|
|
162
|
+
// Project-level skills: .claude/skills/neohive/<skill>/SKILL.md
|
|
163
|
+
const skillsDir = path.join(cwd, '.claude', 'skills', 'neohive');
|
|
164
|
+
const agentsDir = path.join(cwd, '.claude', 'skills', 'neohive', 'agents');
|
|
165
|
+
|
|
166
|
+
if (!fs.existsSync(SKILLS_SRC)) {
|
|
167
|
+
console.log(' [skip] Claude skills: source not found (neohive-plugin/skills)');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
for (const skill of fs.readdirSync(SKILLS_SRC)) {
|
|
172
|
+
const src = path.join(SKILLS_SRC, skill, 'SKILL.md');
|
|
173
|
+
const dest = path.join(skillsDir, skill, 'SKILL.md');
|
|
174
|
+
copySkillFile(src, dest, `Claude skill: ${skill}`);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (fs.existsSync(AGENTS_SRC)) {
|
|
178
|
+
for (const agent of fs.readdirSync(AGENTS_SRC)) {
|
|
179
|
+
const src = path.join(AGENTS_SRC, agent);
|
|
180
|
+
const dest = path.join(agentsDir, agent);
|
|
181
|
+
copySkillFile(src, dest, `Claude agent: ${agent}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function installSkillsForCursor(cwd) {
|
|
187
|
+
// .cursor/skills/neohive/<skill>/SKILL.md
|
|
188
|
+
// .cursor/agents/<agent>.md
|
|
189
|
+
// .cursor/commands/<command>.md (derived from skills)
|
|
190
|
+
if (!fs.existsSync(SKILLS_SRC)) {
|
|
191
|
+
console.log(' [skip] Cursor skills: source not found (neohive-plugin/skills)');
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
for (const skill of fs.readdirSync(SKILLS_SRC)) {
|
|
196
|
+
const src = path.join(SKILLS_SRC, skill, 'SKILL.md');
|
|
197
|
+
const dest = path.join(cwd, '.cursor', 'skills', 'neohive', skill, 'SKILL.md');
|
|
198
|
+
copySkillFile(src, dest, `Cursor skill: ${skill}`);
|
|
199
|
+
|
|
200
|
+
// Also install as a command (slash-command style) for user-invocable skills
|
|
201
|
+
const content = fs.existsSync(src) ? fs.readFileSync(src, 'utf8') : '';
|
|
202
|
+
if (content.includes('user-invocable: true') || !content.includes('user-invocable: false')) {
|
|
203
|
+
const cmdDest = path.join(cwd, '.cursor', 'commands', `neohive-${skill}.md`);
|
|
204
|
+
copySkillFile(src, cmdDest, `Cursor command: neohive-${skill}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (fs.existsSync(AGENTS_SRC)) {
|
|
209
|
+
for (const agent of fs.readdirSync(AGENTS_SRC)) {
|
|
210
|
+
const src = path.join(AGENTS_SRC, agent);
|
|
211
|
+
const dest = path.join(cwd, '.cursor', 'agents', `neohive-${agent}`);
|
|
212
|
+
copySkillFile(src, dest, `Cursor agent: neohive-${agent}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function installSkillsForAntigravity(cwd) {
|
|
218
|
+
// .agent/skills/neohive/<skill>/SKILL.md (already partially done in setupAntigravity)
|
|
219
|
+
if (!fs.existsSync(SKILLS_SRC)) {
|
|
220
|
+
console.log(' [skip] Antigravity skills: source not found (neohive-plugin/skills)');
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
for (const skill of fs.readdirSync(SKILLS_SRC)) {
|
|
225
|
+
const src = path.join(SKILLS_SRC, skill, 'SKILL.md');
|
|
226
|
+
const dest = path.join(cwd, '.agent', 'skills', 'neohive', skill, 'SKILL.md');
|
|
227
|
+
copySkillFile(src, dest, `Antigravity skill: ${skill}`);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if (fs.existsSync(AGENTS_SRC)) {
|
|
231
|
+
for (const agent of fs.readdirSync(AGENTS_SRC)) {
|
|
232
|
+
const src = path.join(AGENTS_SRC, agent);
|
|
233
|
+
const dest = path.join(cwd, '.agent', 'agents', `neohive-${agent}`);
|
|
234
|
+
copySkillFile(src, dest, `Antigravity agent: neohive-${agent}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function installSkills(targets, cwd) {
|
|
240
|
+
console.log('');
|
|
241
|
+
console.log(' Installing Neohive skills & agents...');
|
|
242
|
+
for (const target of targets) {
|
|
243
|
+
switch (target) {
|
|
244
|
+
case 'claude': installSkillsForClaude(cwd); break;
|
|
245
|
+
case 'cursor': installSkillsForCursor(cwd); break;
|
|
246
|
+
case 'antigravity': installSkillsForAntigravity(cwd); break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
137
249
|
}
|
|
138
250
|
|
|
139
251
|
function setupGemini(serverPath, cwd) {
|
|
@@ -447,15 +559,7 @@ function setupAntigravity(cwd) {
|
|
|
447
559
|
|
|
448
560
|
fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n');
|
|
449
561
|
console.log(' [ok] Antigravity: ~/.gemini/antigravity/mcp_config.json updated');
|
|
450
|
-
|
|
451
|
-
// Write skill
|
|
452
|
-
const skillDir = path.join(cwd, '.agent', 'skills', 'neohive');
|
|
453
|
-
if (!fs.existsSync(skillDir)) fs.mkdirSync(skillDir, { recursive: true });
|
|
454
|
-
const skillPath = path.join(skillDir, 'SKILL.md');
|
|
455
|
-
if (!fs.existsSync(skillPath)) {
|
|
456
|
-
fs.writeFileSync(skillPath, neohiveAgentRules('Gemini'));
|
|
457
|
-
console.log(' [ok] Antigravity: .agent/skills/neohive/SKILL.md created');
|
|
458
|
-
}
|
|
562
|
+
installSkillsForAntigravity(cwd);
|
|
459
563
|
}
|
|
460
564
|
|
|
461
565
|
function neohiveAgentRules(defaultName) {
|
|
@@ -563,6 +667,7 @@ function setupCursor(serverPath, cwd) {
|
|
|
563
667
|
|
|
564
668
|
fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2) + '\n');
|
|
565
669
|
console.log(' [ok] Cursor IDE: .cursor/mcp.json updated');
|
|
670
|
+
installSkillsForCursor(cwd);
|
|
566
671
|
}
|
|
567
672
|
|
|
568
673
|
// Setup Ollama agent bridge script
|
|
@@ -765,6 +870,9 @@ function init() {
|
|
|
765
870
|
}
|
|
766
871
|
}
|
|
767
872
|
|
|
873
|
+
// Auto-install hooks for Claude targets
|
|
874
|
+
if (targets.includes('claude')) installHooks();
|
|
875
|
+
|
|
768
876
|
// Add .neohive/ and MCP config files to .gitignore
|
|
769
877
|
const gitignoreEntries = ['.neohive/', '.mcp.json', '.cursor/mcp.json', '.codex/', '.gemini/'];
|
|
770
878
|
if (fs.existsSync(gitignorePath)) {
|
|
@@ -818,12 +926,6 @@ function init() {
|
|
|
818
926
|
console.log(' npx neohive status');
|
|
819
927
|
console.log(' npx neohive doctor');
|
|
820
928
|
console.log('');
|
|
821
|
-
if (targets.includes('claude')) {
|
|
822
|
-
console.log(' \x1b[33m Tip (Claude Code):\x1b[0m Run `npx neohive hooks` to install listen-enforcement');
|
|
823
|
-
console.log(' hooks into .claude/settings.json. Keeps agents in the listen loop automatically.');
|
|
824
|
-
console.log(' Your existing hooks will not be removed.');
|
|
825
|
-
console.log('');
|
|
826
|
-
}
|
|
827
929
|
}
|
|
828
930
|
}
|
|
829
931
|
|
|
@@ -1504,6 +1606,9 @@ switch (command) {
|
|
|
1504
1606
|
case 'hooks':
|
|
1505
1607
|
installHooks();
|
|
1506
1608
|
break;
|
|
1609
|
+
case 'skills':
|
|
1610
|
+
installSkills(detectCLIs().length ? detectCLIs() : ['claude', 'cursor', 'antigravity'], process.cwd());
|
|
1611
|
+
break;
|
|
1507
1612
|
case 'uninstall':
|
|
1508
1613
|
case 'remove':
|
|
1509
1614
|
uninstall();
|
package/dashboard.html
CHANGED
|
@@ -4,18 +4,6 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Neohive | Multi-Agent Coordination Dashboard</title>
|
|
7
|
-
<meta name="description" content="Neohive — The ultimate multi-agent coordination and management dashboard. Orchestrate, monitor, and scale your AI workforce in real-time.">
|
|
8
|
-
<meta name="keywords" content="AI, multi-agent systems, orchestration, dashboard, neohive, agents, automation">
|
|
9
|
-
<meta name="author" content="Neohive Team">
|
|
10
|
-
<meta property="og:title" content="Neohive | Multi-Agent Coordination Dashboard">
|
|
11
|
-
<meta property="og:description" content="Orchestrate and scale your autonomous agent workforce with a stunning, high-performance real-time dashboard.">
|
|
12
|
-
<meta property="og:type" content="website">
|
|
13
|
-
<meta property="og:image" content="https://neohive.ai/og-image.png">
|
|
14
|
-
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
-
<meta name="twitter:title" content="Neohive | Multi-Agent Coordination Dashboard">
|
|
16
|
-
<meta name="twitter:description" content="The command center for your AI agent workforce. Real-time monitoring and scalable orchestration.">
|
|
17
|
-
<meta name="twitter:image" content="https://neohive.ai/og-image.png">
|
|
18
|
-
<meta name="robots" content="index, follow">
|
|
19
7
|
<link rel="icon" href="favicon.png" type="image/png" sizes="16x16">
|
|
20
8
|
<link rel="icon" href="logo.svg" type="image/svg+xml">
|
|
21
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
@@ -4603,7 +4591,7 @@
|
|
|
4603
4591
|
</div>
|
|
4604
4592
|
</div>
|
|
4605
4593
|
<div class="app-footer">
|
|
4606
|
-
<span>Neohive v6.
|
|
4594
|
+
<span>Neohive v6.4.2</span>
|
|
4607
4595
|
</div>
|
|
4608
4596
|
<div class="profile-popup" id="profile-popup" onclick="event.stopPropagation()">
|
|
4609
4597
|
<div class="profile-popup-header">
|
|
@@ -5294,10 +5282,10 @@ function respawnAgent(agentName) {
|
|
|
5294
5282
|
}
|
|
5295
5283
|
|
|
5296
5284
|
function generateFallbackRespawnPrompt(agentName) {
|
|
5297
|
-
return 'Register as \'' + agentName + '\', then call get_briefing() and
|
|
5285
|
+
return 'Register as \'' + agentName + '\', then call get_briefing() and listen() to rejoin the conversation. ' +
|
|
5298
5286
|
'You are resuming a previous session — call get_compressed_history() to catch up on what you missed. ' +
|
|
5299
5287
|
'Check your workspace with workspace_read() for any saved state. ' +
|
|
5300
|
-
'Then call
|
|
5288
|
+
'Then call listen() and respond to any pending messages.';
|
|
5301
5289
|
}
|
|
5302
5290
|
|
|
5303
5291
|
function showRespawnModal(agentName, prompt) {
|
|
@@ -5503,7 +5491,7 @@ function renderMessages(messages) {
|
|
|
5503
5491
|
} else {
|
|
5504
5492
|
el.innerHTML = '<div class="empty-state">' +
|
|
5505
5493
|
'<div class="empty-icon" style="font-size:40px;opacity:0.2">--</div>' +
|
|
5506
|
-
'<div class="empty-text">Neohive v6.
|
|
5494
|
+
'<div class="empty-text">Neohive v6.4</div>' +
|
|
5507
5495
|
'<div class="empty-sub">Autonomous AI agent teams — one command, zero babysitting</div>' +
|
|
5508
5496
|
'<div class="onboard-steps">' +
|
|
5509
5497
|
'<div class="onboard-step" style="margin-bottom:12px"><span class="onboard-num" style="background:var(--accent)"></span><span style="font-weight:600">Quickest start — one command:</span></div>' +
|
|
@@ -10313,7 +10301,7 @@ function doLaunch() {
|
|
|
10313
10301
|
}
|
|
10314
10302
|
|
|
10315
10303
|
// Use generated prompt if available, otherwise build a default
|
|
10316
|
-
var launchPrompt = window._generatedLaunchPrompt || 'You are agent "' + agentName + '". Use the register tool to register as "' + agentName + '", then use
|
|
10304
|
+
var launchPrompt = window._generatedLaunchPrompt || 'You are agent "' + agentName + '". Use the register tool to register as "' + agentName + '", then use listen() to join the conversation.';
|
|
10317
10305
|
navigator.clipboard.writeText(launchPrompt).catch(function() {});
|
|
10318
10306
|
selectedCli = cli;
|
|
10319
10307
|
|
|
@@ -10404,7 +10392,7 @@ function doLaunchAll() {
|
|
|
10404
10392
|
w.state = 'launching';
|
|
10405
10393
|
renderLaunchStatusTracker();
|
|
10406
10394
|
|
|
10407
|
-
var agentPrompt = w.prompt || 'You are agent "' + w.name + '". Use the register tool to register as "' + w.name + '", then use
|
|
10395
|
+
var agentPrompt = w.prompt || 'You are agent "' + w.name + '". Use the register tool to register as "' + w.name + '", then use listen() to join the conversation.';
|
|
10408
10396
|
|
|
10409
10397
|
lttFetch('/api/launch', {
|
|
10410
10398
|
method: 'POST',
|
|
@@ -10533,7 +10521,7 @@ function renderDocs() {
|
|
|
10533
10521
|
el.innerHTML =
|
|
10534
10522
|
'<div class="docs-container">' +
|
|
10535
10523
|
|
|
10536
|
-
'<h2>Neohive v6.
|
|
10524
|
+
'<h2>Neohive v6.4</h2>' +
|
|
10537
10525
|
'<p class="docs-subtitle">True Autonomy Engine \u2014 AI agents that self-organize, self-verify, and never stop working. Works with Claude Code, Gemini CLI, Codex CLI, and Cursor IDE.</p>' +
|
|
10538
10526
|
|
|
10539
10527
|
// Quick Start — One Command
|
|
@@ -10571,7 +10559,7 @@ function renderDocs() {
|
|
|
10571
10559
|
'<p>Opens this web dashboard at <code>http://localhost:3777</code>. You can watch agents chat in real-time, send them messages, and manage your team.</p>' +
|
|
10572
10560
|
'<h4>3. Start Your Agents</h4>' +
|
|
10573
10561
|
'<p>Open two or more terminal windows in your project folder. In each one, start your AI CLI (e.g. type <code>claude</code>) and tell it to register:</p>' +
|
|
10574
|
-
'<pre><code># Terminal 1\nRegister as "Alice" and use
|
|
10562
|
+
'<pre><code># Terminal 1\nRegister as "Alice" and use listen() to join the conversation.\n\n# Terminal 2\nRegister as "Bob" and use listen() to join the conversation.</code></pre>' +
|
|
10575
10563
|
'<p>That\'s it! Your agents can now talk to each other. Or use the <strong>Launch</strong> tab to do this with one click.</p>' +
|
|
10576
10564
|
'</div>' +
|
|
10577
10565
|
|
|
@@ -10655,7 +10643,7 @@ function renderDocs() {
|
|
|
10655
10643
|
'<h4>Can I run multiple projects?</h4>' +
|
|
10656
10644
|
'<p>Yes. Each project has its own <code>.neohive/</code> directory. The dashboard supports multiple projects \u2014 click the project selector in the header to switch between them.</p>' +
|
|
10657
10645
|
'<h4>How do I send a message to agents from the dashboard?</h4>' +
|
|
10658
|
-
'<p>Click any agent\'s avatar in the Messages tab. A dialog lets you type and send a message that agents will receive on their next <code>
|
|
10646
|
+
'<p>Click any agent\'s avatar in the Messages tab. A dialog lets you type and send a message that agents will receive on their next <code>listen()</code> call.</p>' +
|
|
10659
10647
|
'</div>' +
|
|
10660
10648
|
|
|
10661
10649
|
'</div>';
|
|
@@ -10674,8 +10662,8 @@ function copyLaunchPrompt() {
|
|
|
10674
10662
|
if (!prompt) {
|
|
10675
10663
|
var agentName = document.getElementById('launch-name').value.trim();
|
|
10676
10664
|
prompt = agentName
|
|
10677
|
-
? 'You are agent "' + agentName + '". Use the register tool to register as "' + agentName + '", then use
|
|
10678
|
-
: 'Register with the neohive MCP tools and use
|
|
10665
|
+
? 'You are agent "' + agentName + '". Use the register tool to register as "' + agentName + '", then use listen() to join the conversation.'
|
|
10666
|
+
: 'Register with the neohive MCP tools and use listen() to join the conversation.';
|
|
10679
10667
|
}
|
|
10680
10668
|
navigator.clipboard.writeText(prompt).then(function() {
|
|
10681
10669
|
var resultEl = document.getElementById('launch-result');
|
package/dashboard.js
CHANGED
|
@@ -2662,9 +2662,9 @@ const server = http.createServer(async (req, res) => {
|
|
|
2662
2662
|
prompt += `**Instructions:**\n`;
|
|
2663
2663
|
prompt += `1. Register as "${agentName}" using the register tool\n`;
|
|
2664
2664
|
prompt += `2. Call get_briefing() for full project context\n`;
|
|
2665
|
-
prompt += `3. Call
|
|
2665
|
+
prompt += `3. Call listen() to rejoin the conversation\n`;
|
|
2666
2666
|
prompt += `4. Announce you're back and pick up your active tasks\n`;
|
|
2667
|
-
prompt += `5. Stay in
|
|
2667
|
+
prompt += `5. Stay in listen() loop — never stop listening\n`;
|
|
2668
2668
|
|
|
2669
2669
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
2670
2670
|
res.end(JSON.stringify({
|
|
@@ -2717,7 +2717,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
2717
2717
|
try {
|
|
2718
2718
|
const messagesFile = filePath('messages.jsonl', projectPath);
|
|
2719
2719
|
const historyFile = filePath('history.jsonl', projectPath);
|
|
2720
|
-
const modeText = newMode === 'responsive' ? 'Coordinator stays with human, uses
|
|
2720
|
+
const modeText = newMode === 'responsive' ? 'Coordinator stays with human, uses messages(action="check").' : 'Coordinator runs autonomously in listen() loop.';
|
|
2721
2721
|
const sysMsg = { id: Date.now().toString(36) + Math.random().toString(36).slice(2, 8), from: '__system__', to: '__group__', content: `[MODE] Coordinator mode changed to "${newMode}". ${modeText} Coordinator: call get_guide() to update your instructions.`, timestamp: new Date().toISOString(), system: true };
|
|
2722
2722
|
fs.appendFileSync(messagesFile, JSON.stringify(sysMsg) + '\n');
|
|
2723
2723
|
fs.appendFileSync(historyFile, JSON.stringify(sysMsg) + '\n');
|
package/lib/audit.js
CHANGED
|
@@ -10,8 +10,8 @@ const crypto = require('crypto');
|
|
|
10
10
|
// Configuration
|
|
11
11
|
const AUDIT_MAX_SIZE = parseInt(process.env.NEOHIVE_AUDIT_MAX_SIZE) || 10485760; // 10MB
|
|
12
12
|
const AUDIT_RETENTION_DAYS = parseInt(process.env.NEOHIVE_AUDIT_RETENTION_DAYS) || 30;
|
|
13
|
-
const AUDIT_ARGS_MAX_LENGTH = parseInt(process.env.NEOHIVE_AUDIT_ARGS_MAX_LENGTH) ||
|
|
14
|
-
const AUDIT_RESULT_MAX_LENGTH = parseInt(process.env.NEOHIVE_AUDIT_RESULT_MAX_LENGTH) ||
|
|
13
|
+
const AUDIT_ARGS_MAX_LENGTH = parseInt(process.env.NEOHIVE_AUDIT_ARGS_MAX_LENGTH) || 50000;
|
|
14
|
+
const AUDIT_RESULT_MAX_LENGTH = parseInt(process.env.NEOHIVE_AUDIT_RESULT_MAX_LENGTH) || 10000;
|
|
15
15
|
const AUDIT_LEVEL = process.env.NEOHIVE_AUDIT_LEVEL || 'standard';
|
|
16
16
|
|
|
17
17
|
// Tool categories for classification
|
|
@@ -201,12 +201,14 @@ function logToolCall(agent, toolName, args, result, durationMs, context = {}) {
|
|
|
201
201
|
}
|
|
202
202
|
};
|
|
203
203
|
|
|
204
|
-
// Truncate large args/results
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
// Truncate large args/results only when serializing (never parse truncated JSON)
|
|
205
|
+
const argsStr = JSON.stringify(entry.args);
|
|
206
|
+
if (argsStr && argsStr.length > AUDIT_ARGS_MAX_LENGTH) {
|
|
207
|
+
entry.args = { _truncated: true, preview: argsStr.substring(0, AUDIT_ARGS_MAX_LENGTH) };
|
|
207
208
|
}
|
|
208
|
-
|
|
209
|
-
|
|
209
|
+
const resultStr = JSON.stringify(entry.result);
|
|
210
|
+
if (resultStr && resultStr.length > AUDIT_RESULT_MAX_LENGTH) {
|
|
211
|
+
entry.result = { _truncated: true, preview: resultStr.substring(0, AUDIT_RESULT_MAX_LENGTH) };
|
|
210
212
|
}
|
|
211
213
|
|
|
212
214
|
// Add to pending writes for batch processing
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "neohive",
|
|
3
|
+
"version": "6.0.2",
|
|
4
|
+
"description": "Multi-agent collaboration layer. Turn Claude Code into a team — agents communicate, delegate tasks, and build together. Adds /neohive:launch-team, /neohive:status, /neohive:send, /neohive:plan commands.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Alionix",
|
|
7
|
+
"url": "https://github.com/fakiho"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/fakiho/neohive",
|
|
10
|
+
"repository": "https://github.com/fakiho/neohive",
|
|
11
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"multi-agent",
|
|
14
|
+
"collaboration",
|
|
15
|
+
"team",
|
|
16
|
+
"communication",
|
|
17
|
+
"mcp",
|
|
18
|
+
"neohive"
|
|
19
|
+
],
|
|
20
|
+
"skills": "./skills/",
|
|
21
|
+
"agents": "./agents/",
|
|
22
|
+
"hooks": "./hooks/hooks.json",
|
|
23
|
+
"mcpServers": "./.mcp.json"
|
|
24
|
+
}
|