gossipcat 0.6.5 → 0.6.6
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 +240 -758
- package/dist-mcp/mcp-server.js +725 -407
- package/docs/CURSOR_RULES.md +72 -0
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<
|
|
6
|
+
<strong>Multi-agent consensus code review.</strong> 3+ AI agents review your code independently, cross-check each other's findings against your actual source, and only surface what survives — and the system learns which agent to trust for what.
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://www.npmjs.com/package/gossipcat"><img src="https://img.shields.io/npm/v/gossipcat?color=0ea5e9&v=
|
|
10
|
+
<a href="https://www.npmjs.com/package/gossipcat"><img src="https://img.shields.io/npm/v/gossipcat?color=0ea5e9&v=0650" alt="npm version" /></a>
|
|
11
11
|
<a href="https://www.npmjs.com/package/gossipcat"><img src="https://img.shields.io/npm/dw/gossipcat?color=0ea5e9" alt="npm weekly downloads" /></a>
|
|
12
12
|
<a href="https://github.com/gossipcat-ai/gossipcat-ai/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License" /></a>
|
|
13
13
|
<a href="#quickstart"><img src="https://img.shields.io/badge/node-22%2B-green" alt="Node 22+" /></a>
|
|
@@ -19,12 +19,13 @@
|
|
|
19
19
|
|
|
20
20
|
<p align="center">
|
|
21
21
|
<a href="#quickstart"><strong>Install</strong></a> ·
|
|
22
|
-
<a href="#first-run
|
|
23
|
-
<a href="#
|
|
22
|
+
<a href="#first-run"><strong>First Run</strong></a> ·
|
|
23
|
+
<a href="#daily-use"><strong>Daily Use</strong></a> ·
|
|
24
24
|
<a href="#reading-the-dashboard"><strong>Dashboard</strong></a> ·
|
|
25
|
+
<a href="#drive-it-from-your-browser"><strong>Chat Bridge</strong></a> ·
|
|
25
26
|
<a href="#troubleshooting"><strong>Troubleshooting</strong></a> ·
|
|
26
27
|
<a href="#configuration"><strong>Config</strong></a> ·
|
|
27
|
-
<a href="#
|
|
28
|
+
<a href="#mcp-tools"><strong>Tools</strong></a>
|
|
28
29
|
</p>
|
|
29
30
|
|
|
30
31
|
<br/>
|
|
@@ -34,39 +35,32 @@
|
|
|
34
35
|
<img src="https://raw.githubusercontent.com/gossipcat-ai/gossipcat-ai/master/packages/dashboard-v2/public/assets/dashboard-overview.png" alt="Gossipcat dashboard — live fleet view with per-agent vortexes, accuracy rings, signal volume, and recent hallucination catches" width="900" />
|
|
35
36
|
</p>
|
|
36
37
|
<p align="center">
|
|
37
|
-
<em>Live dashboard at <code>http://localhost
|
|
38
|
-
</p>
|
|
39
|
-
</p>
|
|
40
|
-
|
|
41
|
-
<p align="center">
|
|
42
|
-
<a href="#reading-the-dashboard">
|
|
43
|
-
<img src="https://raw.githubusercontent.com/gossipcat-ai/gossipcat-ai/master/packages/dashboard-v2/public/assets/dashboard-team.png" alt="Gossipcat Team page — per-agent accuracy, weight, signals, hallucinations, and last task" width="900" />
|
|
44
|
-
</p>
|
|
45
|
-
<p align="center">
|
|
46
|
-
<em>Per-agent leaderboard — accuracy, uniqueness, impact, hallucinations caught, and dispatch weight. Updated after every consensus round.</em>
|
|
38
|
+
<em>Live dashboard at <code>http://localhost:<port>/dashboard</code> — fleet view, signal stream, skill-graduation grid, and consensus flow, all in real time.</em>
|
|
47
39
|
</p>
|
|
48
40
|
</p>
|
|
49
41
|
|
|
50
42
|
<br/>
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
<!-- TODO: link public benchmark -->
|
|
44
|
+
## Why
|
|
54
45
|
|
|
55
|
-
|
|
46
|
+
A single AI reviewer will, with total confidence, report bugs that aren't there. You read the finding, you go look, you waste twenty minutes — the code was fine. There's no second opinion and no track record, so you can't tell a real catch from a hallucination until you've already spent the time.
|
|
56
47
|
|
|
57
|
-
|
|
48
|
+
Gossipcat runs **several agents in parallel**, has them **cross-check each other's findings against your actual `file:line`**, and only surfaces what survives. When an agent invents a finding, a peer catches it and the agent's accuracy score drops — so over time the system routes each kind of work to whoever is actually reliable at it. Cross-review catches hallucinations a solo reviewer would have shipped to you; that delta is the whole point.
|
|
58
49
|
|
|
59
|
-
|
|
50
|
+
It runs as an MCP server inside **[Claude Code](https://claude.com/claude-code)** and **[Cursor](https://cursor.com)**, ships a [live operator dashboard](#reading-the-dashboard), and lets you [drive the orchestrator straight from the browser](#drive-it-from-your-browser).
|
|
60
51
|
|
|
61
|
-
|
|
52
|
+
**The consensus tags you'll see** (this is your whole job — read these, ignore the rest):
|
|
62
53
|
|
|
63
|
-
|
|
54
|
+
| Tag | Means | What you do |
|
|
55
|
+
|-----|-------|-------------|
|
|
56
|
+
| **CONFIRMED** | Multiple agents found it and verified it against the code | Fix it |
|
|
57
|
+
| **UNIQUE** | One agent found it, cross-checked and held up | Fix it — high signal |
|
|
58
|
+
| **DISPUTED** | Agents disagreed; gossipcat re-checked the code | Trust the verdict |
|
|
59
|
+
| **UNVERIFIED** | Looks real but wasn't cross-checked yet | Glance, then verify |
|
|
64
60
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
> Most RL pipelines update model weights. **Gossipcat doesn't touch weights** — it learns by updating the prompt layer.
|
|
61
|
+
<br/>
|
|
68
62
|
|
|
69
|
-
|
|
63
|
+
## How it works
|
|
70
64
|
|
|
71
65
|
```mermaid
|
|
72
66
|
flowchart LR
|
|
@@ -86,422 +80,188 @@ flowchart LR
|
|
|
86
80
|
style E fill:#ef4444,stroke:#b91c1c,color:#fff
|
|
87
81
|
```
|
|
88
82
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
83
|
+
| Step | What happens |
|
|
84
|
+
|------|-------------|
|
|
85
|
+
| **Dispatch** | Tasks routed to agents by *dispatch weight* — each agent's measured accuracy in that category |
|
|
86
|
+
| **Parallel review** | Agents work independently, each producing findings with cited `file:line` |
|
|
87
|
+
| **Cross-review** | Each agent checks peers' findings against the real code: agree, disagree, unverified, or new |
|
|
88
|
+
| **Consensus** | Findings deduplicated and tagged CONFIRMED / DISPUTED / UNVERIFIED / UNIQUE |
|
|
89
|
+
| **Signals** | Verified findings (and caught hallucinations) become *reward signals* that update accuracy scores |
|
|
90
|
+
| **Skill development** | An agent that repeats a category of mistake gets a *skill file* — targeted instructions auto-generated from its own failure history — injected into future prompts |
|
|
94
91
|
|
|
95
|
-
|
|
96
|
-
|---|---|---|---|
|
|
97
|
-
| **Gossipcat** | 3+ agents cross-review each other's findings; confirmed bugs only | Yes — peers catch and penalize hallucinations mechanically | Yes — accuracy signals steer dispatch; skill files fix repeat failures |
|
|
98
|
-
| **Single-agent review** (Claude Code built-in, Cursor review) | One model reviews your diff | No — hallucinations ship as findings | No — no feedback loop |
|
|
99
|
-
| **LLM-as-judge cross-review** (most multi-agent frameworks) | One model grades another model's output | Partial — judge can hallucinate too; no ground truth | No — judge scores aren't wired to dispatch |
|
|
100
|
-
| **Traditional review tools** (CodeRabbit, PR-Agent) | Pattern-match + one LLM pass | No | No |
|
|
92
|
+
The reward signal is **grounded in your source code, not a judge model's opinion.** Every finding cites a real `file:line`; peers verify the citation mechanically. That ground truth is what makes the loop trustworthy enough to automate. The "policy update" is a markdown file under `.gossip/agents/<id>/skills/` — no weights touched, no fine-tuning, no RLHF. (It's effectively in-context reinforcement learning at the prompt layer; the framing is deliberate, the mechanism is exactly the table above.)
|
|
101
93
|
|
|
102
|
-
|
|
94
|
+
> A small synthesis model (`consensus_judge`, configurable) merges and deduplicates the cross-review results — it does **not** grade quality. Verdicts come from citation checks against your code, never from one model judging another.
|
|
103
95
|
|
|
104
96
|
<br/>
|
|
105
97
|
|
|
106
|
-
##
|
|
107
|
-
|
|
108
|
-
What a typical gossipcat session looks like in practice (2026-05-22, v0.4.30 ship):
|
|
109
|
-
|
|
110
|
-
- **1 feature shipped end-to-end** — consensus auto-verify (PR #448, master commit `4b28a1c`, 1255+ LOC, 50/50 new tests, zero regressions). Full design ↔ ship arc through gossipcat itself: 6 consensus rounds on the spec before any code was written.
|
|
111
|
-
- **6 consensus rounds on the spec** caught **21+ HIGH-severity defects** across rev-1 → rev-6 — including a double-dispatch bug on the `run()` path (rev-3, opus-implementer), a phantom `AgentTeam` type the implementer would have invented if shipped (rev-5, sonnet-reviewer grep-grounded against live `AgentConfig`), and a `metadata` field that didn't exist on `ConsensusSignal` at all (rev-4, sonnet — `metadata` lives only on `MetaSignal` / `PipelineSignal`). Each round produced a measurable rev: rev-1 had 4 HIGHs, rev-6 had 0.
|
|
112
|
-
- **1 post-merge bug caught by a pre-existing drift test** — `signal-allowlist-drift.test.ts:108` (which exists precisely to catch this — same failure mode as PR #329's silent-drop of `transport_failure`) flagged that the implementer added the 2 new signals to `KNOWN_SIGNALS` + the type union + `OPERATIONAL_SIGNAL_NAMES` but missed `VALID_CONSENSUS_SIGNALS` in `performance-writer.ts`. 7-line fix landed in the same PR before merge.
|
|
113
|
-
- **Methodology lesson recorded** — sonnet-reviewer's habit of grepping cited file:line against live code (rather than trusting prose claims) is what ultimately closed the spec. Recorded as a `citation_grounding` agreement signal so the agent's pattern compounds across sessions.
|
|
98
|
+
## Native vs Relay agents
|
|
114
99
|
|
|
115
|
-
|
|
100
|
+
Every agent has a **type** (where it runs) and a **preset** (what skills it starts with — `reviewer`, `implementer`, `researcher`, …). You mix them freely; a team of native reviewers and relay researchers is perfectly normal.
|
|
116
101
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
102
|
+
| | Native | Relay |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| **Runs as** | A host subagent — Claude Code `Agent()` / Cursor `Task()` | A WebSocket worker on the relay server |
|
|
105
|
+
| **Providers** | Your Claude Code / Cursor subscription — **no API key** | Google (Gemini), OpenAI, xAI (Grok), DeepSeek, OpenClaw, Ollama, any OpenAI-compatible endpoint |
|
|
106
|
+
| **API key** | None | Required per provider |
|
|
107
|
+
| **Defined in** | `.claude/agents/<id>.md` | `.gossip/config.json` |
|
|
108
|
+
| **Consensus, memory, skills** | Yes | Yes |
|
|
120
109
|
|
|
121
|
-
|
|
122
|
-
|---|---|
|
|
123
|
-
| One AI reviews your code — and hallucinates a finding you waste 20 minutes on | Multiple agents cross-check each other — hallucinations get caught before you see them |
|
|
124
|
-
| Every agent gets the same tasks regardless of track record | Dispatch weights route tasks to the agent with the best accuracy in that category |
|
|
125
|
-
| An agent keeps making the same class of mistake | Skill files are auto-generated from failure data and injected into future prompts |
|
|
126
|
-
| You don't know which agent to trust | Accuracy, uniqueness, and reliability scores are tracked per agent, per category |
|
|
110
|
+
Both participate equally in consensus and skill development. Relay workers get `file_read` + `file_grep` during cross-review so their verification parity matches natives.
|
|
127
111
|
|
|
128
112
|
<br/>
|
|
129
113
|
|
|
130
|
-
## Gossipcat
|
|
131
|
-
|
|
132
|
-
- You want **multiple AI models** catching different classes of bugs
|
|
133
|
-
- You don't trust a single agent to catch everything
|
|
134
|
-
- You want agents to **cross-check each other's findings** before you act on them
|
|
135
|
-
- You want to know which agents are **actually accurate** vs. hallucinating
|
|
136
|
-
- You want agents that **get better over time** based on their track record
|
|
137
|
-
|
|
138
|
-
<br/>
|
|
114
|
+
## How Gossipcat compares
|
|
139
115
|
|
|
140
|
-
|
|
116
|
+
| | What you get | Filters hallucinations | Improves over time |
|
|
117
|
+
|---|---|---|---|
|
|
118
|
+
| **Gossipcat** | 3+ agents cross-review each other's findings; confirmed bugs only | **Yes** — peers catch and penalize hallucinations mechanically | **Yes** — accuracy signals steer dispatch; skill files fix repeat failures |
|
|
119
|
+
| **Single-agent review** (Claude Code / Cursor built-in) | One model reviews your diff | No — hallucinations ship as findings | No feedback loop |
|
|
120
|
+
| **Model-grades-model review** | One model scores another's output | Partial — the judge can hallucinate too; no ground truth | Scores aren't wired to dispatch |
|
|
121
|
+
| **Pattern-match tools** (lint-style PR bots) | Rules + one LLM pass | No | No |
|
|
141
122
|
|
|
142
|
-
|
|
143
|
-
<tr>
|
|
144
|
-
<td align="center" width="33%">
|
|
145
|
-
<h3>Consensus Review</h3>
|
|
146
|
-
3+ agents review independently, then cross-review each other. Findings tagged as CONFIRMED, DISPUTED, or UNIQUE.
|
|
147
|
-
</td>
|
|
148
|
-
<td align="center" width="33%">
|
|
149
|
-
<h3>Adaptive Dispatch</h3>
|
|
150
|
-
Agent accuracy is tracked per-category. Dispatch weights adjust automatically — the best agent for the job gets picked.
|
|
151
|
-
</td>
|
|
152
|
-
<td align="center" width="33%">
|
|
153
|
-
<h3>Skill Development</h3>
|
|
154
|
-
When an agent keeps failing in a category, targeted skills are generated from failure data and injected into future prompts. Effectiveness is measured with a z-test on post-bind signals — passed, failed, or inconclusive.
|
|
155
|
-
</td>
|
|
156
|
-
</tr>
|
|
157
|
-
<tr>
|
|
158
|
-
<td align="center">
|
|
159
|
-
<h3>Multi-Provider</h3>
|
|
160
|
-
Mix Anthropic, Google, OpenAI, and OpenClaw agents in one team. Each brings different strengths. Native agents need no API key. 🦞 Lobster friendly.
|
|
161
|
-
</td>
|
|
162
|
-
<td align="center">
|
|
163
|
-
<h3>Live Dashboard</h3>
|
|
164
|
-
Real-time view of tasks, consensus reports, agent scores, and activity feed. Terminal Amber theme. WebSocket updates.
|
|
165
|
-
</td>
|
|
166
|
-
<td align="center">
|
|
167
|
-
<h3>Agent Memory</h3>
|
|
168
|
-
Per-agent cognitive memory persists across sessions. Agents remember past findings, patterns, and project context.
|
|
169
|
-
</td>
|
|
170
|
-
</tr>
|
|
171
|
-
<tr>
|
|
172
|
-
<td align="center" colspan="3">
|
|
173
|
-
<h3>Auto-Verify (v0.4.30)</h3>
|
|
174
|
-
Opt-in. Every UNVERIFIED finding gets <code>file_read</code>-checked by a verifier agent before the report is returned. <code>tag</code> stays <code>'unverified'</code> — auto-verify is metadata, not state transition. Flag: <code>GOSSIP_CONSENSUS_AUTO_VERIFY_UNVERIFIED=1</code>.
|
|
175
|
-
</td>
|
|
176
|
-
</tr>
|
|
177
|
-
</table>
|
|
123
|
+
The difference: gossipcat verifies findings against actual `file:line` citations in *your* codebase. That ground truth is what makes the reward signal trustworthy enough to automate.
|
|
178
124
|
|
|
179
125
|
<br/>
|
|
180
126
|
|
|
181
127
|
<div align="center">
|
|
182
128
|
<table>
|
|
183
129
|
<tr>
|
|
184
|
-
<td align="center"><strong>
|
|
185
|
-
<td align="center">
|
|
186
|
-
|
|
187
|
-
</td>
|
|
188
|
-
<td align="center"><strong>
|
|
189
|
-
<td align="center"><strong>Windsurf</strong><br/><sub>Not yet</sub></td>
|
|
190
|
-
<td align="center"><strong>VS Code</strong><br/><sub>Not yet</sub></td>
|
|
191
|
-
</tr>
|
|
192
|
-
</table>
|
|
193
|
-
|
|
194
|
-
<br/>
|
|
195
|
-
|
|
196
|
-
<table>
|
|
197
|
-
<tr>
|
|
198
|
-
<td align="center"><strong>Provider<br/>gateways</strong></td>
|
|
199
|
-
<td align="center">
|
|
200
|
-
<img src="https://img.shields.io/badge/OpenClaw-gateway-4A90D9?style=flat" alt="OpenClaw" /><br/><sub>HTTP gateway ✅</sub>
|
|
201
|
-
</td>
|
|
202
|
-
<td align="center">
|
|
203
|
-
<img src="https://img.shields.io/badge/Ollama-local-gray?style=flat" alt="Ollama" /><br/><sub>Local models ✅</sub>
|
|
204
|
-
</td>
|
|
205
|
-
<td align="center">
|
|
206
|
-
<img src="https://img.shields.io/badge/OpenAI--compatible-any-green?style=flat" alt="OpenAI-compatible" /><br/><sub>Any base_url ✅</sub>
|
|
207
|
-
</td>
|
|
130
|
+
<td align="center"><strong>Runs in</strong></td>
|
|
131
|
+
<td align="center"><img src="https://img.shields.io/badge/Claude%20Code-supported-orange?style=flat&logo=anthropic&logoColor=white" alt="Claude Code" /><br/><sub>Full support</sub></td>
|
|
132
|
+
<td align="center"><img src="https://img.shields.io/badge/Cursor-supported-0ea5e9?style=flat&logoColor=white" alt="Cursor" /><br/><sub>Full support</sub></td>
|
|
133
|
+
<td align="center"><strong>Windsurf</strong><br/><sub>Planned</sub></td>
|
|
134
|
+
<td align="center"><strong>VS Code</strong><br/><sub>Planned</sub></td>
|
|
208
135
|
</tr>
|
|
209
136
|
</table>
|
|
137
|
+
<sub>Native agents run on Claude Code <code>Agent()</code> and Cursor <code>Task()</code>. Other MCP hosts work in relay-only mode (no native subagents).</sub>
|
|
210
138
|
</div>
|
|
211
139
|
|
|
212
140
|
<br/>
|
|
213
141
|
|
|
214
|
-
## How it works
|
|
215
|
-
|
|
216
|
-
The Mermaid diagram above shows the loop end-to-end. Here's the per-step definition:
|
|
217
|
-
|
|
218
|
-
| Step | What happens |
|
|
219
|
-
|------|-------------|
|
|
220
|
-
| **Dispatch** | Tasks routed to agents based on dispatch weights (accuracy history per category) |
|
|
221
|
-
| **Parallel review** | Agents work independently, each producing findings with confidence scores |
|
|
222
|
-
| **Cross-review** | Each agent reviews peers' findings: agree, disagree, unverified, or new finding |
|
|
223
|
-
| **Consensus** | Findings deduplicated and tagged: CONFIRMED, DISPUTED, UNVERIFIED, UNIQUE |
|
|
224
|
-
| **Signals** | You verify findings against code and record accuracy signals |
|
|
225
|
-
| **Skill development** | Agents with repeated failures get targeted skill files injected into future prompts |
|
|
226
|
-
|
|
227
|
-
<br/>
|
|
228
|
-
|
|
229
|
-
## Two types of agents
|
|
230
|
-
|
|
231
|
-
| | Native | Relay |
|
|
232
|
-
|---|---|---|
|
|
233
|
-
| **Runs as** | Claude Code subagent (`Agent()` tool) | WebSocket worker on relay server |
|
|
234
|
-
| **Providers** | Anthropic (Claude) | Google (Gemini), OpenAI, any provider |
|
|
235
|
-
| **API key** | None — uses your Claude Code subscription | Required per provider |
|
|
236
|
-
| **Defined in** | `.claude/agents/*.md` | `.gossip/config.json` |
|
|
237
|
-
| **Consensus** | Yes | Yes |
|
|
238
|
-
| **Memory & Skills** | Yes | Yes |
|
|
239
|
-
|
|
240
|
-
Both types participate equally in consensus, cross-review, and skill development. Native subagents get skill files injected into their system prompts and can call `gossip_remember` for memory recall. Relay workers call the equivalent `memory_query` tool and get `file_read` + `file_grep` during cross-review so their verification parity matches natives.
|
|
241
|
-
|
|
242
|
-
<br/>
|
|
243
|
-
|
|
244
142
|
## Quickstart
|
|
245
143
|
|
|
246
|
-
**Requirements:** Node.js 22+ and
|
|
247
|
-
|
|
248
|
-
### One-liner
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
npm install -g gossipcat && claude mcp add gossipcat -s user -- gossipcat
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
Restart Claude Code. Then in any project, ask:
|
|
255
|
-
|
|
256
|
-
> "Set up a gossipcat team for this project"
|
|
257
|
-
|
|
258
|
-
<details>
|
|
259
|
-
<summary><strong>Manual MCP config</strong> (if <code>claude mcp add</code> doesn't work for your setup)</summary>
|
|
260
|
-
|
|
261
|
-
Add to `~/.claude/mcp_settings.json`:
|
|
262
|
-
|
|
263
|
-
```json
|
|
264
|
-
{
|
|
265
|
-
"mcpServers": {
|
|
266
|
-
"gossipcat": {
|
|
267
|
-
"command": "gossipcat"
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
Or project-local in `.mcp.json`:
|
|
274
|
-
|
|
275
|
-
```json
|
|
276
|
-
{
|
|
277
|
-
"mcpServers": {
|
|
278
|
-
"gossipcat": {
|
|
279
|
-
"command": "npx",
|
|
280
|
-
"args": ["gossipcat"]
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
</details>
|
|
287
|
-
|
|
288
|
-
Claude Code will call `gossip_setup()` to scaffold `.gossip/config.json` and your agent team. First-run bootstrap also writes the dispatch rules and tool catalog so Claude Code knows how to use gossipcat — no manual config needed.
|
|
289
|
-
|
|
290
|
-
Gossipcat is on **[npm](https://www.npmjs.com/package/gossipcat)** and **[GitHub Releases](https://github.com/gossipcat-ai/gossipcat-ai/releases)** — both carry the same bundle. `npm install -g gossipcat` pulls from the registry and is the shortest path; the GitHub release URL is useful when you want to pin to a specific tarball (see [Alternative install paths](#alternative-install-paths) below). Either way, npm drops a `gossipcat` binary on your `PATH`.
|
|
291
|
-
|
|
292
|
-
### What the install ships
|
|
144
|
+
**Requirements:** Node.js 22+ and either host below. Claude Code and Cursor are co-equal first-class hosts — pick the one you use; gossipcat auto-detects it and runs native agents either way.
|
|
293
145
|
|
|
294
|
-
|
|
295
|
-
|---|---|
|
|
296
|
-
| **MCP server** | Bundled binary at `dist-mcp/mcp-server.js`, wired as the `gossipcat` command on `PATH` |
|
|
297
|
-
| **Dashboard** | Prebuilt static assets in `dist-dashboard/` — launches automatically on a dynamic port (ask Claude Code *"what's my gossipcat dashboard URL?"*). Override with `GOSSIPCAT_PORT=24420` if you want a stable port. |
|
|
298
|
-
| **Default skills + rules + archetypes** | 16 bundled skill templates, operational rules, and project archetypes copied into the install |
|
|
299
|
-
| **Postinstall wizard** | Writes `.mcp.json` with correct absolute paths for your machine |
|
|
300
|
-
|
|
301
|
-
### Alternative install paths
|
|
302
|
-
|
|
303
|
-
**Pin to a specific npm version:**
|
|
146
|
+
Install the package once:
|
|
304
147
|
```bash
|
|
305
|
-
npm install -g gossipcat
|
|
148
|
+
npm install -g gossipcat
|
|
306
149
|
```
|
|
307
150
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
**Project-local install** (each project gets its own gossipcat):
|
|
314
|
-
```bash
|
|
315
|
-
cd your-project
|
|
316
|
-
npm install --save-dev gossipcat
|
|
317
|
-
```
|
|
318
|
-
The postinstall writes `.mcp.json` to your project root. Open Claude Code in that directory and gossipcat connects automatically — no `claude mcp add` needed.
|
|
151
|
+
<table>
|
|
152
|
+
<tr><th><a href="https://claude.com/claude-code">Claude Code</a></th><th><a href="https://cursor.com">Cursor</a></th></tr>
|
|
153
|
+
<tr valign="top">
|
|
154
|
+
<td>
|
|
319
155
|
|
|
320
|
-
|
|
156
|
+
Register the MCP server:
|
|
321
157
|
```bash
|
|
322
|
-
|
|
323
|
-
cd gossipcat-ai
|
|
324
|
-
npm install
|
|
325
|
-
npm run build:mcp
|
|
326
|
-
claude mcp add gossipcat -s user -- node "$PWD/dist-mcp/mcp-server.js"
|
|
158
|
+
claude mcp add gossipcat -s user -- gossipcat
|
|
327
159
|
```
|
|
160
|
+
Restart Claude Code. Native agents dispatch via `Agent()`.
|
|
328
161
|
|
|
329
|
-
|
|
162
|
+
</td>
|
|
163
|
+
<td>
|
|
330
164
|
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
|
|
165
|
+
Add to `.cursor/mcp.json`:
|
|
166
|
+
```jsonc
|
|
167
|
+
{ "mcpServers": {
|
|
168
|
+
"gossipcat": { "command": "gossipcat" }
|
|
169
|
+
} }
|
|
334
170
|
```
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
### 3. API keys
|
|
338
|
-
|
|
339
|
-
Add env vars for the providers you want to use. Pass them with `-e` when registering, or set them in your shell environment.
|
|
171
|
+
Reload Cursor. Native agents dispatch via `Task()`.
|
|
340
172
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
| Anthropic API | `ANTHROPIC_API_KEY` | Direct API access if you don't want to go through Claude Code. |
|
|
345
|
-
| Google Gemini | `GOOGLE_API_KEY` | Gemini Pro / Flash relay agents. |
|
|
346
|
-
| OpenAI | `OPENAI_API_KEY` (+ optional `OPENAI_BASE_URL`) | GPT-4 / GPT-4o relay agents. `OPENAI_BASE_URL` lets you point at OpenAI-compatible gateways (Azure, Together, Groq, etc.). |
|
|
347
|
-
| OpenClaw | — (local gateway) | OpenAI-compatible, defaults to `http://127.0.0.1:18789/v1`. No API key — auth handled by your local OpenClaw daemon. |
|
|
348
|
-
| Ollama (local) | — | Runs locally via `http://localhost:11434`. No key. Pull your model first with `ollama pull llama3.1:8b`. |
|
|
173
|
+
</td>
|
|
174
|
+
</tr>
|
|
175
|
+
</table>
|
|
349
176
|
|
|
350
|
-
|
|
177
|
+
Then in any project, ask the orchestrator: *"Set up a gossipcat team for this project."*
|
|
351
178
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
claude mcp add gossipcat -s user -- gossipcat
|
|
355
|
-
```
|
|
356
|
-
Then in session ask for a team built from `sonnet-reviewer` / `haiku-researcher` / `opus-implementer`. Native agents dispatch through `Agent()` and relay back. Good zero-config starting point.
|
|
357
|
-
|
|
358
|
-
**Anthropic API** (direct, bypasses Claude Code):
|
|
359
|
-
```bash
|
|
360
|
-
claude mcp add gossipcat -s user \
|
|
361
|
-
-e ANTHROPIC_API_KEY=sk-ant-... \
|
|
362
|
-
-- gossipcat
|
|
363
|
-
```
|
|
364
|
-
Use this if you want relay agents running Claude models without going through the Claude Code subscription path — e.g. for parallelism beyond Claude Code's concurrency cap, or for running long background reviews while you keep working.
|
|
179
|
+
<details>
|
|
180
|
+
<summary><strong>Manual MCP config / alternative install paths</strong></summary>
|
|
365
181
|
|
|
366
|
-
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
-e GOOGLE_API_KEY=AIza... \
|
|
370
|
-
-- gossipcat
|
|
182
|
+
Add to `~/.claude/mcp_settings.json` (Claude Code) or project-local `.mcp.json`:
|
|
183
|
+
```json
|
|
184
|
+
{ "mcpServers": { "gossipcat": { "command": "npx", "args": ["gossipcat"] } } }
|
|
371
185
|
```
|
|
372
|
-
Enables `gemini-reviewer`, `gemini-tester`, `gemini-implementer` on the relay. Watch the quota — gossipcat has a built-in 429 watcher that falls back to native agents when Gemini is cooling down.
|
|
373
186
|
|
|
374
|
-
**OpenAI** (and OpenAI-compatible gateways):
|
|
375
|
-
```bash
|
|
376
|
-
claude mcp add gossipcat -s user \
|
|
377
|
-
-e OPENAI_API_KEY=sk-... \
|
|
378
|
-
-- gossipcat
|
|
379
|
-
```
|
|
380
|
-
For Azure / Together / Groq / OpenRouter, add `OPENAI_BASE_URL`:
|
|
381
187
|
```bash
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
-e OPENAI_BASE_URL=https://api.groq.com/openai/v1 \
|
|
385
|
-
-- gossipcat
|
|
386
|
-
```
|
|
188
|
+
# Pin to a version
|
|
189
|
+
npm install -g gossipcat@0.6.5
|
|
387
190
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
# Start the OpenClaw daemon first (see openclaw docs), default port 18789
|
|
391
|
-
claude mcp add gossipcat -s user -- gossipcat
|
|
392
|
-
```
|
|
393
|
-
No env vars. Configure an agent with `provider: "openclaw"` in `.gossip/config.json` and gossipcat talks to the local gateway automatically. Override the port with `base_url` in the agent config if your daemon runs elsewhere.
|
|
191
|
+
# Pin to a GitHub release tarball (bypasses the npm registry)
|
|
192
|
+
npm install -g https://github.com/gossipcat-ai/gossipcat-ai/releases/download/v0.6.5/gossipcat-0.6.5.tgz
|
|
394
193
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
# Pull a model once
|
|
398
|
-
ollama pull llama3.1:8b
|
|
399
|
-
# Then register gossipcat
|
|
400
|
-
claude mcp add gossipcat -s user -- gossipcat
|
|
401
|
-
```
|
|
402
|
-
Configure the agent with `provider: "local"` and `model: "llama3.1:8b"` in `.gossip/config.json`. Good for airgapped dev, offline work, and burning-down-test-debt sessions where you don't want to spend API credits.
|
|
194
|
+
# Project-local (postinstall writes .mcp.json — open the IDE there, no `mcp add` needed)
|
|
195
|
+
cd your-project && npm install --save-dev gossipcat
|
|
403
196
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
-e ANTHROPIC_API_KEY=sk-ant-... \
|
|
409
|
-
-- gossipcat
|
|
197
|
+
# From source (contributors)
|
|
198
|
+
git clone https://github.com/gossipcat-ai/gossipcat-ai.git && cd gossipcat-ai
|
|
199
|
+
npm install && npm run build:mcp
|
|
200
|
+
claude mcp add gossipcat -s user -- node "$PWD/dist-mcp/mcp-server.js"
|
|
410
201
|
```
|
|
411
|
-
Then set up a team with `gemini-reviewer` + `haiku-researcher` (native) + `opus-implementer` (native) + `sonnet-reviewer` (native). Gossipcat dispatches by category strength from the signal pipeline.
|
|
412
202
|
|
|
413
|
-
|
|
414
|
-
- **macOS** — OS Keychain
|
|
415
|
-
- **Linux** — Secret Service (`secret-tool`)
|
|
416
|
-
- **Windows / other** — AES-256-GCM encrypted file
|
|
203
|
+
The install ships the MCP server binary, the prebuilt dashboard (`dist-dashboard/`, launches on a dynamic port), bundled skill templates + rules + project archetypes, and a postinstall wizard that writes `.mcp.json` with correct absolute paths.
|
|
417
204
|
|
|
418
|
-
|
|
205
|
+
**Upgrade:** `npm install -g gossipcat@latest`, or ask in-session *"check for gossipcat updates"* (the `gossip_update` tool applies it with your confirmation).
|
|
206
|
+
</details>
|
|
419
207
|
|
|
420
|
-
|
|
208
|
+
### API keys (relay agents only)
|
|
421
209
|
|
|
422
|
-
|
|
423
|
-
"Set up a gossipcat team with a Gemini reviewer and a Sonnet implementer"
|
|
424
|
-
```
|
|
210
|
+
Native agents need **no key**. For relay agents, pass provider keys with `-e` at registration or set them in your shell:
|
|
425
211
|
|
|
426
|
-
|
|
212
|
+
| Provider | How | Notes |
|
|
213
|
+
|----------|-----|-------|
|
|
214
|
+
| Native (Claude Code / Cursor) | — | Runs through your subscription. No key. |
|
|
215
|
+
| Anthropic API | `ANTHROPIC_API_KEY` | Direct API access without the subscription path |
|
|
216
|
+
| Google Gemini | `GOOGLE_API_KEY` | Built-in 429 watcher falls back to native on cooldown |
|
|
217
|
+
| OpenAI / compatible | `OPENAI_API_KEY` (+ `OPENAI_BASE_URL`) | Point `BASE_URL` at Azure / Together / Groq / OpenRouter |
|
|
218
|
+
| xAI (Grok) | OS keychain via `key_ref` | No env var — store in keychain, set `key_ref` (default service `grok`) |
|
|
219
|
+
| DeepSeek | OS keychain via `key_ref` | No env var — keychain, `key_ref` default service `deepseek` |
|
|
220
|
+
| OpenClaw 🦞 | — (local gateway) | OpenAI-compatible at `http://127.0.0.1:18789/v1`, auth via the local daemon |
|
|
221
|
+
| Ollama (local) | — | `http://localhost:11434`. `ollama pull llama3.1:8b` first |
|
|
427
222
|
|
|
428
|
-
|
|
223
|
+
Keys are stored persistently and cross-platform — macOS Keychain, Linux Secret Service (`secret-tool`), or an AES-256-GCM encrypted file on Windows. Mixing providers is the common production shape: cheap Gemini reviewers + native heavy implementers, dispatched by category strength.
|
|
429
224
|
|
|
430
225
|
<br/>
|
|
431
226
|
|
|
432
|
-
## First Run
|
|
433
|
-
|
|
434
|
-
The fastest path from "just installed" to "first useful review". If you skip this section you'll probably get stuck on the same things everyone else gets stuck on.
|
|
227
|
+
## First Run
|
|
435
228
|
|
|
436
|
-
|
|
229
|
+
The fastest path from "just installed" to "first useful review."
|
|
437
230
|
|
|
438
|
-
|
|
439
|
-
cd ~/your-project
|
|
440
|
-
claude
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
Gossipcat is registered globally now, so it boots automatically. You'll see it in the MCP server list.
|
|
444
|
-
|
|
445
|
-
### Step 2 — Bootstrap once
|
|
446
|
-
|
|
447
|
-
In Claude Code, just type:
|
|
231
|
+
**1 · Open your IDE in a project and bootstrap once.** In Claude Code or Cursor, run:
|
|
448
232
|
|
|
449
233
|
> **Run gossip_status**
|
|
450
234
|
|
|
451
|
-
This loads gossipcat's operating rules into the
|
|
235
|
+
This loads gossipcat's operating rules into the session, creates `.gossip/` on first run, and prints the dashboard URL + auth key:
|
|
452
236
|
|
|
453
|
-
You'll see something like:
|
|
454
237
|
```
|
|
455
238
|
Status:
|
|
456
|
-
Host: claude-code (native agents supported)
|
|
457
|
-
Relay: running :49664
|
|
458
|
-
Workers: 0
|
|
459
|
-
Dashboard: http://localhost:49664/dashboard (key:
|
|
460
|
-
Quota: google — OK
|
|
239
|
+
Host: claude-code (native agents supported) ← which IDE you're in
|
|
240
|
+
Relay: running :49664 ← background server for agents + dashboard
|
|
241
|
+
Workers: 0 ← agents busy right now (rises during a round)
|
|
242
|
+
Dashboard: http://localhost:49664/dashboard (key: c3208820…) ← open it, paste the key
|
|
243
|
+
Quota: google — OK ← provider rate-limit status (falls back to native on cooldown)
|
|
461
244
|
```
|
|
462
245
|
|
|
463
|
-
Open the dashboard URL
|
|
464
|
-
|
|
465
|
-
### Step 3 — Create your first team
|
|
466
|
-
|
|
467
|
-
Tell Claude what you're building:
|
|
246
|
+
Open the dashboard URL, paste the key (it rotates each boot — re-run `gossip_status` for a fresh one).
|
|
468
247
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
Claude calls `gossip_setup()` and proposes a team. Typical proposal:
|
|
472
|
-
|
|
473
|
-
```
|
|
474
|
-
Proposed team:
|
|
475
|
-
- sonnet-reviewer (anthropic/claude-sonnet-4-6, native) reviewer + security
|
|
476
|
-
- gemini-reviewer (google/gemini-2.5-pro, relay) reviewer + types
|
|
477
|
-
- haiku-researcher (anthropic/claude-haiku-4-5, native) researcher
|
|
478
|
-
- opus-implementer (anthropic/claude-opus-4-6, native) implementer
|
|
479
|
-
|
|
480
|
-
Approve? (y/n)
|
|
481
|
-
```
|
|
248
|
+
**2 · Create your first team.** Tell the orchestrator what you're building:
|
|
482
249
|
|
|
483
|
-
|
|
250
|
+
> *"Set up a gossipcat team for this project — a TypeScript Next.js app with Postgres and Stripe."*
|
|
484
251
|
|
|
485
|
-
|
|
252
|
+
It proposes a team matched to your stack. **Smallest working team: `sonnet-reviewer` + `haiku-researcher` — both native, zero API keys.** Drop any relay agent whose provider key you don't have; add it later. Native agents (`native: true`) run on your subscription. Approve, and `.gossip/config.json` is written.
|
|
486
253
|
|
|
487
|
-
|
|
254
|
+
**3 · Run your first review** in a project with some changes:
|
|
488
255
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
> **"Do a consensus review of my recent changes"**
|
|
492
|
-
|
|
493
|
-
What happens (typical timing):
|
|
256
|
+
> *"Do a consensus review of my recent changes"*
|
|
494
257
|
|
|
495
258
|
| Phase | Time | What you see |
|
|
496
259
|
|---|---|---|
|
|
497
|
-
|
|
|
498
|
-
|
|
|
499
|
-
|
|
|
500
|
-
|
|
|
501
|
-
|
|
|
502
|
-
| 6. Signal recording | <1s | Accuracy signals saved per agent |
|
|
503
|
-
|
|
504
|
-
You get a report like:
|
|
260
|
+
| Decompose | ~1s | Orchestrator picks agents, dispatches in parallel |
|
|
261
|
+
| Independent review | 30s–2min | Each agent reads your diff and reports findings |
|
|
262
|
+
| Cross-review | 30s–1min | Each agent checks the others' findings against the code |
|
|
263
|
+
| Consensus report | <1s | Findings tagged CONFIRMED / DISPUTED / UNVERIFIED / UNIQUE |
|
|
264
|
+
| Verify + record | <1s | UNVERIFIED checked against code; accuracy signals saved |
|
|
505
265
|
|
|
506
266
|
```
|
|
507
267
|
Consensus round b81956b2-e0fa4ea4 — 3 agents
|
|
@@ -509,322 +269,180 @@ Consensus round b81956b2-e0fa4ea4 — 3 agents
|
|
|
509
269
|
CONFIRMED (2):
|
|
510
270
|
[critical] Race condition in tasks Map at server.ts:47 — sonnet + gemini
|
|
511
271
|
[high] Missing auth on WebSocket upgrade at server.ts:112 — sonnet + gemini
|
|
512
|
-
|
|
513
272
|
UNIQUE (1):
|
|
514
273
|
[medium] String concat in SQL query at queries.ts:88 — only sonnet caught this
|
|
515
|
-
|
|
516
274
|
DISPUTED (1):
|
|
517
275
|
[low] "Memory leak in timer" — haiku says yes, sonnet/gemini say no
|
|
518
|
-
→ verified
|
|
276
|
+
→ verified: not a leak, cleanup is in finally. False alarm caught.
|
|
519
277
|
|
|
520
278
|
Final: 3 real bugs to fix, 1 false alarm caught by cross-review.
|
|
521
279
|
```
|
|
522
280
|
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
### Step 5 — Watch the dashboard
|
|
526
|
-
|
|
527
|
-
The dashboard shows everything live: agents, scores, active tasks, consensus reports, signals. You can leave it open in a tab while you work — every gossipcat tool call pushes an update via WebSocket.
|
|
528
|
-
|
|
529
|
-
That's the basic loop. The rest of this README covers advanced workflows, troubleshooting, and how to interpret what you're seeing.
|
|
281
|
+
Act on **CONFIRMED** + verified **UNIQUE**. The false alarm that cross-review caught is the bug a single reviewer would have shipped to you.
|
|
530
282
|
|
|
531
283
|
<br/>
|
|
532
284
|
|
|
533
|
-
## How to use it day-to-day
|
|
534
|
-
|
|
535
|
-
Concrete recipes for the most common workflows. Each one shows what to type, what you'll get back, and what to do with it.
|
|
285
|
+
## <a id="daily-use"></a>How to use it day-to-day
|
|
536
286
|
|
|
537
|
-
|
|
287
|
+
Each recipe: what to type, what you get, what to do with it.
|
|
538
288
|
|
|
539
|
-
**
|
|
540
|
-
> "Review my staged changes"
|
|
289
|
+
**Review a diff before committing** → *"Review my staged changes."* Consensus report in 1–3 min; fix CONFIRMED + verified findings. For diffs under ~20 lines, skip consensus — ask `gossip_run` for a single fast agent (~10s) and save the round.
|
|
541
290
|
|
|
542
|
-
**
|
|
291
|
+
**Catch security issues** → *"Security audit `lib/stripe/webhook.ts`."* Each security agent reviews from a different angle (OWASP, validation, auth, secrets); real vulns survive cross-review, theoretical ones get dropped. Be specific about the file — "audit the codebase" is too broad.
|
|
543
292
|
|
|
544
|
-
**
|
|
293
|
+
**Understand code before changing it** → *"Research how the WebSocket lifecycle works before I touch it."* A research agent traces call paths and writes a summary into its cognitive memory, so next time it remembers — no re-discovery cost.
|
|
545
294
|
|
|
546
|
-
**
|
|
295
|
+
**Verify your own assumption** → *"I think there's a race in the tasks Map at server.ts:47 — check if I'm right."* Two agents independently confirm or push back. Author self-review is optimistic; this isn't.
|
|
547
296
|
|
|
548
|
-
|
|
297
|
+
**See which agents you can trust** → *"Show me agent scores."* Per-category accuracy + dispatch weights. If `gemini-reviewer` sits at 30% on `concurrency`, don't trust its concurrency findings solo.
|
|
549
298
|
|
|
550
|
-
|
|
299
|
+
**Improve a struggling agent** → *"gemini-reviewer keeps hallucinating about concurrency — develop a skill for it."* Gossipcat generates a targeted skill from its failure data and measures whether it works (z-test on post-bind signals). Then it's automatic.
|
|
551
300
|
|
|
552
|
-
**
|
|
553
|
-
> "Security audit the payment handler at lib/stripe/webhook.ts"
|
|
554
|
-
|
|
555
|
-
**What you'll get:** Each security-skilled agent reviews from a different angle (OWASP, input validation, auth, secrets). Findings get cross-validated. Real vulns surface; theoretical ones get caught and dropped.
|
|
556
|
-
|
|
557
|
-
**What to do with it:** Fix critical/high findings before merge. Bookmark medium/low findings for the next pass.
|
|
558
|
-
|
|
559
|
-
**Tip:** Be specific about the file or module. "Security audit the codebase" is too broad and produces noisy results. "Security audit `lib/stripe/webhook.ts`" produces actionable findings.
|
|
560
|
-
|
|
561
|
-
---
|
|
562
|
-
|
|
563
|
-
### Recipe 3: Understand a piece of code before changing it
|
|
564
|
-
|
|
565
|
-
**Type:**
|
|
566
|
-
> "Research how the WebSocket connection lifecycle works in this project before I touch it"
|
|
567
|
-
|
|
568
|
-
**What you'll get:** A research agent (haiku-researcher by default — fast and cheap) reads the code, traces call paths, and writes a summary. The summary is saved to that agent's cognitive memory so the next time you ask about the same area it remembers.
|
|
569
|
-
|
|
570
|
-
**What to do with it:** Use the summary to plan your change. The agent will reference it next time you ask anything related — no re-discovery cost.
|
|
571
|
-
|
|
572
|
-
---
|
|
573
|
-
|
|
574
|
-
### Recipe 4: Verify your own assumption
|
|
575
|
-
|
|
576
|
-
**Type:**
|
|
577
|
-
> "I think there's a race condition in the tasks Map at server.ts:47 — check if I'm right"
|
|
578
|
-
|
|
579
|
-
**What you'll get:** Two agents independently check the specific claim and either confirm or push back. Author self-review is optimistic — this isn't.
|
|
580
|
-
|
|
581
|
-
**What to do with it:** If both agree with you, fix it. If they push back, read their reasoning before defending your hypothesis. They might be right.
|
|
582
|
-
|
|
583
|
-
---
|
|
584
|
-
|
|
585
|
-
### Recipe 5: See which agents you can actually trust
|
|
586
|
-
|
|
587
|
-
**Type:**
|
|
588
|
-
> "Show me agent scores"
|
|
589
|
-
|
|
590
|
-
**What you'll get:** A table of agents sorted by reliability with per-category accuracy and dispatch weights. Categories include `trust_boundaries`, `injection_vectors`, `concurrency`, `error_handling`, `data_integrity`, `type_safety`, etc.
|
|
591
|
-
|
|
592
|
-
**What to do with it:** If `gemini-reviewer` is sitting at 30% accuracy on `concurrency`, you know not to trust its concurrency findings without cross-review. If `sonnet-reviewer` is at 90% on `trust_boundaries`, you can ship its findings on auth/session bugs with high confidence.
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
### Recipe 6: Improve an agent that keeps making the same mistake
|
|
597
|
-
|
|
598
|
-
**Type:**
|
|
599
|
-
> "gemini-reviewer keeps hallucinating about concurrency — develop a skill for it"
|
|
600
|
-
|
|
601
|
-
**What you'll get:** Gossipcat reads gemini-reviewer's failure data, generates a targeted skill file with concrete anti-patterns, and injects it into the agent's prompt for all future concurrency-related reviews. Effectiveness is measured statistically (z-test on post-bind signals) — it'll tell you if the skill is actually working after ~30 dispatches.
|
|
602
|
-
|
|
603
|
-
**What to do with it:** Nothing — it's automatic. Just keep using the agent. Over time, the failure rate drops.
|
|
604
|
-
|
|
605
|
-
---
|
|
606
|
-
|
|
607
|
-
### Recipe 7: Set up a team for a brand-new project
|
|
608
|
-
|
|
609
|
-
**Type:**
|
|
610
|
-
> "Set up a gossipcat team for a TypeScript Cloudflare Workers project with Drizzle ORM and KV storage"
|
|
611
|
-
|
|
612
|
-
**What you'll get:** A proposed team with archetypes matched to your stack. Worker projects need different reviewers than long-running Node services — gossipcat picks accordingly.
|
|
613
|
-
|
|
614
|
-
**What to do with it:** Review the proposal, drop agents you can't run (missing API keys), approve.
|
|
615
|
-
|
|
616
|
-
---
|
|
617
|
-
|
|
618
|
-
### Things to avoid
|
|
619
|
-
|
|
620
|
-
- **Don't ask for "review the whole codebase"** — too broad, agents will pick whatever they find first. Scope to a file, module, or diff.
|
|
621
|
-
- **Don't approve findings without reading them** — even after cross-review, ~5% of findings are genuinely wrong. The reasoning matters more than the verdict.
|
|
622
|
-
- **Don't ignore the dashboard** — when something feels weird (slow dispatch, repeated failures, suspicious findings), the dashboard usually shows you why before you have to ask.
|
|
623
|
-
- **Don't run consensus mode for trivial questions** — `gossip_run` with one agent is fine for "what does this function do?"-tier queries. Save consensus for changes that touch shared state, auth, persistence, or the dispatch pipeline itself.
|
|
301
|
+
> **Avoid:** "review the whole codebase" (too broad — scope to a file/module/diff); approving findings without reading the reasoning; running consensus for trivial questions (use a single `gossip_run` agent).
|
|
624
302
|
|
|
625
303
|
<br/>
|
|
626
304
|
|
|
627
305
|
## Reading the dashboard
|
|
628
306
|
|
|
629
|
-
|
|
307
|
+
Open it once with the key from `gossip_status`; leave the tab open while you work. Every tool call pushes a live WebSocket update.
|
|
630
308
|
|
|
631
309
|
<p align="center">
|
|
632
310
|
<img src="https://raw.githubusercontent.com/gossipcat-ai/gossipcat-ai/master/packages/dashboard-v2/public/assets/dashboard-skills.png" alt="Skill graduation grid — per-skill effectiveness curve, 7d window, current/threshold value, and ±pp delta for graduated skills" width="900" />
|
|
633
311
|
</p>
|
|
634
|
-
<p align="center">
|
|
635
|
-
<em>Skill graduation grid — each card is one (skill × agent) pair: post-bind effectiveness curve over a 7-day window with current value vs threshold and ±pp drift on graduated skills.</em>
|
|
636
|
-
</p>
|
|
312
|
+
<p align="center"><em>Skill-graduation grid — each card is one (skill × agent): post-bind effectiveness over a 7-day window vs threshold, with ±pp drift on graduated skills.</em></p>
|
|
637
313
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
| **
|
|
642
|
-
| **
|
|
643
|
-
| **
|
|
644
|
-
| **
|
|
645
|
-
| **
|
|
646
|
-
| **
|
|
647
|
-
| **Logs** | mcp.log
|
|
648
|
-
|
|
649
|
-
**Auth keys rotate every session.** A fresh key is generated each time gossipcat boots. If the dashboard says "unauthorized", run `gossip_status` again to get the new key.
|
|
314
|
+
| Panel | What it shows |
|
|
315
|
+
|---|---|
|
|
316
|
+
| **Overview** | Active agents, dispatch weights, recent finding counts |
|
|
317
|
+
| **Team** | Agents sorted by reliability, with category breakdowns |
|
|
318
|
+
| **Tasks** | Live + historical tasks with agent, duration, status |
|
|
319
|
+
| **Findings** | Consensus reports by round, CONFIRMED/DISPUTED/UNVERIFIED breakdowns |
|
|
320
|
+
| **Agent detail** | Per-agent memory, skills, score history, task history |
|
|
321
|
+
| **Signals** | Raw signal feed (agreement / hallucination / unique_confirmed) |
|
|
322
|
+
| **Chat** | Live two-way bridge into the orchestrator (see below) |
|
|
323
|
+
| **Logs** | `mcp.log` (boot, errors, warnings) |
|
|
650
324
|
|
|
651
325
|
<br/>
|
|
652
326
|
|
|
653
|
-
##
|
|
654
|
-
|
|
655
|
-
### "Dashboard says unauthorized / 401"
|
|
656
|
-
The auth key rotates every boot. Run `gossip_status` in Claude Code to get the current key, paste it into the dashboard login.
|
|
327
|
+
## <a id="drive-it-from-your-browser"></a>Drive it from your browser
|
|
657
328
|
|
|
658
|
-
|
|
659
|
-
Check `~/.gossip/mcp.log` (or `<your-project>/.gossip/mcp.log`) for the boot log. Look for the `[gossipcat] 🌐 Dashboard:` line — that's the actual port. If it's missing, the relay didn't start. Common causes:
|
|
660
|
-
- **Conflicting `.gossip/relay.pid`** from a crashed previous boot — delete it and restart Claude Code
|
|
661
|
-
- **`GOSSIPCAT_PORT` set to a port already in use** — unset the env var or pick a free port
|
|
329
|
+
The dashboard's **Chat** page is a live, two-way bridge into the running orchestrator — type from the browser and your message lands in the active session; the orchestrator's dispatches, findings, and replies mirror back into the same thread in real time.
|
|
662
330
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
### "The same hallucinated finding keeps coming back"
|
|
670
|
-
Record a `hallucination_caught` signal: ask Claude *"record a hallucination_caught signal for finding f3 in the last consensus round — it claimed X but the code shows Y"*. After 3 such signals, the offending agent's score drops in that category and the orchestrator stops asking it questions in that area.
|
|
671
|
-
|
|
672
|
-
### "I want to use my own model / provider"
|
|
673
|
-
Edit `.gossip/config.json` directly. Any OpenAI-compatible endpoint works via `provider: "openai"` + `base_url`. Local models work via Ollama (`provider: "local"`). See the [Configuration](#configuration) section.
|
|
674
|
-
|
|
675
|
-
### "An agent produced output but the consensus report is empty"
|
|
676
|
-
The strict `<agent_finding>` parser drops tags whose `type` isn't one of `finding | suggestion | insight` (see invariant #8 in `docs/HANDBOOK.md`). When that happens, the `gossip_signals` receipt surfaces the drop count and a `finding_dropped_format` pipeline signal is emitted. Check the consensus round's `droppedFindingsByType` field on the dashboard — it names the offending type. If you see `<agent_finding>` instead of raw `<agent_finding>`, a transport layer is entity-encoding the output; pass agent output verbatim to `gossip_relay`.
|
|
677
|
-
|
|
678
|
-
### "Multiple Claude Code instances all want gossipcat"
|
|
679
|
-
Already supported as of v0.1.1 — each instance gets its own dynamic port. If you want a stable port for one specific instance (e.g. for browser bookmarks), set `GOSSIPCAT_PORT=24420` for that one project's environment.
|
|
680
|
-
|
|
681
|
-
### "How do I uninstall?"
|
|
682
|
-
```bash
|
|
683
|
-
npm uninstall -g gossipcat
|
|
684
|
-
claude mcp remove gossipcat -s user
|
|
685
|
-
rm -rf ~/.gossip # if you want to wipe global memory + signals
|
|
686
|
-
rm -rf <project>/.gossip # if you want to wipe per-project state
|
|
687
|
-
```
|
|
331
|
+
| Capability | What it does |
|
|
332
|
+
|---|---|
|
|
333
|
+
| **Multi-conversation tabs** | Several independent threads side by side — each its own `chat_id`, history, and live stream; per-tab unread, persisted across reloads |
|
|
334
|
+
| **Renamable tabs** | Double-click or **F2** to label a tab ("auth refactor", "perf audit") — survives reload |
|
|
335
|
+
| **Working-agents rail** | Live rail of who's dispatched and working right now — watch a round progress without leaving chat |
|
|
336
|
+
| **Structured questions** | When the orchestrator needs a decision, `gossip_ask` renders a single/multi-select card right in the chat; your pick flows back as a normal turn |
|
|
688
337
|
|
|
689
|
-
|
|
690
|
-
File an issue at https://github.com/gossipcat-ai/gossipcat-ai/issues. Include the contents of `.gossip/mcp.log` (last 100 lines) and the output of `gossip_status`. Or ask Claude in-session: *"file a gossipcat bug report about <...>"* — the `gossip_bug_feedback` tool packages it up automatically.
|
|
338
|
+
The `gossip_ask` answer boundary is fail-closed: only known options are accepted and "Other" free-text is sanitized before it reaches the orchestrator, so a dashboard answer can't smuggle instructions into the session. Launch with the `gossipcat code` wrapper (or ask the orchestrator to enable channel mode), then open the **Chat** tab.
|
|
691
339
|
|
|
692
340
|
<br/>
|
|
693
341
|
|
|
694
|
-
##
|
|
342
|
+
## Host compatibility
|
|
695
343
|
|
|
696
|
-
|
|
344
|
+
Gossipcat auto-detects the host and adapts dispatch + the rules file it writes.
|
|
697
345
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
gossip_skills(action: "develop", ...) → improve a struggling agent
|
|
705
|
-
gossip_status() → system status + dashboard URL
|
|
706
|
-
gossip_setup(...) → create or update your team
|
|
707
|
-
```
|
|
346
|
+
| Host | Native agents | Rules file |
|
|
347
|
+
|------|---------------|------------|
|
|
348
|
+
| **Claude Code** | Yes — `Agent()` | `.claude/rules/gossipcat.md` |
|
|
349
|
+
| **Cursor** | Yes — `Task(subagent_type, model, …)` | `.cursor/rules/gossipcat.mdc` |
|
|
350
|
+
| Windsurf | Relay-only (planned) | `.windsurfrules` |
|
|
351
|
+
| VS Code | Relay-only (planned) | — |
|
|
708
352
|
|
|
709
|
-
|
|
353
|
+
On Claude Code and Cursor, native agents run with no API key and participate fully in consensus. Other MCP hosts can still run relay agents.
|
|
710
354
|
|
|
711
355
|
<br/>
|
|
712
356
|
|
|
713
|
-
##
|
|
357
|
+
## Troubleshooting
|
|
714
358
|
|
|
715
|
-
|
|
359
|
+
**Dashboard says unauthorized / 401** — the key rotates every boot. Run `gossip_status` for the current key.
|
|
716
360
|
|
|
717
|
-
If
|
|
361
|
+
**Dashboard URL won't load** — check `.gossip/mcp.log` for the `🌐 Dashboard:` line (the real port). If missing, the relay didn't start: delete a stale `.gossip/relay.pid` from a crashed boot and restart, or free up `GOSSIPCAT_PORT` if it's taken.
|
|
718
362
|
|
|
719
|
-
**
|
|
363
|
+
**Agents return empty findings** — usually quota. `gossip_status` shows `Quota: <provider> — OK / cooling down`. On a rate limit gossipcat falls back to native agents (add some to your team if you have none).
|
|
720
364
|
|
|
721
|
-
|
|
365
|
+
**The same hallucinated finding keeps coming back** — record it: *"record a hallucination_caught signal for finding f3 — it claimed X but the code shows Y."* After 3, the agent's score drops in that category and dispatch stops routing it there.
|
|
722
366
|
|
|
723
|
-
|
|
724
|
-
gossip_status()
|
|
725
|
-
```
|
|
367
|
+
**An agent produced output but the consensus report is empty** — the strict `<agent_finding>` parser drops tags whose `type` isn't `finding | suggestion | insight` (invariant #8 in `docs/HANDBOOK.md`); the `gossip_signals` receipt surfaces the drop and a `finding_dropped_format` signal. If you see `<agent_finding>` instead of raw tags, a transport layer is entity-encoding output — pass agent output verbatim to `gossip_relay`.
|
|
726
368
|
|
|
727
|
-
|
|
369
|
+
**Multiple IDE instances** — each gets its own dynamic port. For a stable port on one project, set `GOSSIPCAT_PORT=24420` in that environment.
|
|
728
370
|
|
|
729
|
-
|
|
371
|
+
**Uninstall** — `npm uninstall -g gossipcat && claude mcp remove gossipcat -s user`; `rm -rf ~/.gossip` (global state) or `<project>/.gossip` (per-project).
|
|
730
372
|
|
|
731
|
-
**
|
|
732
|
-
```
|
|
733
|
-
gossip_run(agent_id: "auto", task: "Review the auth module for security issues")
|
|
734
|
-
```
|
|
735
|
-
The system picks the best agent for the task based on past accuracy. For relay agents, this returns the result directly. For native agents (Claude Code subagents), it returns `⚠️ EXECUTE NOW` instructions — follow them immediately in the same response.
|
|
373
|
+
**Still stuck?** [Open an issue](https://github.com/gossipcat-ai/gossipcat-ai/issues) with the last 100 lines of `.gossip/mcp.log` + `gossip_status` output, or ask in-session *"file a gossipcat bug report about …"* (`gossip_bug_feedback` packages it).
|
|
736
374
|
|
|
737
|
-
|
|
738
|
-
```
|
|
739
|
-
gossip_dispatch(mode: "parallel", tasks: [
|
|
740
|
-
{ agent_id: "gemini-reviewer", task: "..." },
|
|
741
|
-
{ agent_id: "sonnet-reviewer", task: "..." }
|
|
742
|
-
])
|
|
743
|
-
```
|
|
744
|
-
|
|
745
|
-
**Consensus (cross-review):**
|
|
746
|
-
```
|
|
747
|
-
gossip_dispatch(mode: "consensus", tasks: [
|
|
748
|
-
{ agent_id: "gemini-reviewer", task: "..." },
|
|
749
|
-
{ agent_id: "sonnet-reviewer", task: "..." },
|
|
750
|
-
{ agent_id: "haiku-researcher", task: "..." }
|
|
751
|
-
])
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
### Step 3 — Collect results
|
|
755
|
-
|
|
756
|
-
```
|
|
757
|
-
gossip_collect(task_ids: ["id1", "id2", "id3"], consensus: true)
|
|
758
|
-
```
|
|
759
|
-
|
|
760
|
-
With `consensus: true`, agents cross-review each other's findings. If native agents are in the round, `gossip_collect` returns `⚠️ EXECUTE NOW` with prompts — dispatch those `Agent()` calls immediately, then relay each result via `gossip_relay_cross_review`.
|
|
375
|
+
<br/>
|
|
761
376
|
|
|
762
|
-
|
|
377
|
+
## Configuration
|
|
763
378
|
|
|
764
|
-
|
|
379
|
+
Most of `.gossip/config.json` is **auto-generated by `gossip_setup()`** — hand-edit only to change providers/models/endpoints. First-run defaults work for most projects. Config is searched: `.gossip/config.json` → `gossip.agents.json` → `gossip.agents.yaml`.
|
|
765
380
|
|
|
381
|
+
```json
|
|
382
|
+
{
|
|
383
|
+
"main_agent": { "provider": "google", "model": "gemini-2.5-pro" },
|
|
384
|
+
"utility_model": { "provider": "native", "model": "haiku" },
|
|
385
|
+
"consensus_judge": { "provider": "anthropic", "model": "claude-sonnet-4-6", "native": true },
|
|
386
|
+
"agents": {
|
|
387
|
+
"sonnet-reviewer": {
|
|
388
|
+
"provider": "anthropic", "model": "claude-sonnet-4-6",
|
|
389
|
+
"preset": "reviewer", "skills": ["code_review", "security_audit", "typescript"],
|
|
390
|
+
"native": true
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
766
394
|
```
|
|
767
|
-
gossip_signals(action: "record", signals: [{
|
|
768
|
-
signal: "unique_confirmed", // or "hallucination_caught", "agreement"
|
|
769
|
-
agent_id: "gemini-reviewer",
|
|
770
|
-
finding: "Race condition in task map at line 47",
|
|
771
|
-
finding_id: "<consensus_id>:<agent_id>:f1" // mandatory
|
|
772
|
-
}])
|
|
773
|
-
```
|
|
774
|
-
|
|
775
|
-
Signals update dispatch weights. Agents that hallucinate get penalized. Agents that catch real bugs get promoted.
|
|
776
|
-
|
|
777
|
-
### Key rules
|
|
778
395
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
396
|
+
| Field | Description |
|
|
397
|
+
|-------|-------------|
|
|
398
|
+
| `main_agent` | Internal LLM for routing, planning, synthesis (set `provider: "none"` on Claude Code / Cursor to let the host classify natively) |
|
|
399
|
+
| `utility_model` | Memory compaction, gossip, lens generation |
|
|
400
|
+
| `consensus_judge` | Synthesis-only model that merges cross-review results (does not grade) |
|
|
401
|
+
| `agents.<id>.provider` | `anthropic`, `google`, `openai`, `grok`, `deepseek`, `openclaw`, `local`, `native` |
|
|
402
|
+
| `agents.<id>.key_ref` | Keychain service to read the provider key from (default = provider name). Used by keychain providers (`grok`, `deepseek`); env-var providers (`openai`, `google`, `anthropic`) read their key from the environment instead |
|
|
403
|
+
| `agents.<id>.base_url` | Custom endpoint for `openai` / `openclaw` (e.g. `http://127.0.0.1:18789/v1`) |
|
|
404
|
+
| `agents.<id>.native` | `true` = runs via the host's native tool, no API key |
|
|
405
|
+
| `agents.<id>.preset` | `reviewer`, `implementer`, `tester`, `researcher`, `debugger`, `architect`, `security`, `designer`, `planner`, `devops`, `documenter` |
|
|
406
|
+
| `agents.<id>.skills` | Skill labels for dispatch matching |
|
|
782
407
|
|
|
783
|
-
|
|
408
|
+
<details>
|
|
409
|
+
<summary><strong>OpenClaw 🦞 (local gateway provider)</strong></summary>
|
|
784
410
|
|
|
785
|
-
|
|
411
|
+
[OpenClaw](https://github.com/openclaw/openclaw) runs locally and exposes an OpenAI-compatible API; gossipcat talks to it like any relay agent, with a separate quota slot so its rate limits don't bleed into your OpenAI agents. Store the gateway token once (macOS: `security add-generic-password -s gossip-mesh -a openclaw -w <token>`; Linux: `secret-tool store --label "Gossip Mesh openclaw" service gossip-mesh provider openclaw`), then add an agent with `provider: "openclaw"` (default `base_url` `http://127.0.0.1:18789/v1`, models `openclaw` / `openclaw/default` / `openclaw/main`). It joins consensus and earns skills like any other agent.
|
|
412
|
+
</details>
|
|
786
413
|
|
|
787
|
-
|
|
414
|
+
<br/>
|
|
788
415
|
|
|
789
416
|
## MCP Tools
|
|
790
417
|
|
|
791
|
-
|
|
418
|
+
The orchestrator (Claude Code / Cursor) selects and calls these from your natural-language requests — you don't invoke them manually.
|
|
792
419
|
|
|
793
420
|
| Tool | Purpose |
|
|
794
421
|
|------|---------|
|
|
795
422
|
| `gossip_status` | System status, dashboard URL, agent list |
|
|
423
|
+
| `gossip_setup` | Create or update an agent team |
|
|
796
424
|
| `gossip_run` | Single-agent dispatch with auto agent selection |
|
|
797
425
|
| `gossip_dispatch` | Multi-agent dispatch: `single`, `parallel`, or `consensus` |
|
|
798
426
|
| `gossip_collect` | Collect results with optional cross-review synthesis |
|
|
799
|
-
| `
|
|
800
|
-
| `gossip_relay_cross_review` | Feed native cross-review results into consensus |
|
|
801
|
-
| `gossip_plan` | Decompose task into sub-tasks with agent assignments |
|
|
427
|
+
| `gossip_plan` | Decompose a task into sub-tasks with agent assignments |
|
|
802
428
|
| `gossip_signals` | Record or retract accuracy signals |
|
|
803
|
-
| `gossip_scores` | View agent accuracy, uniqueness,
|
|
429
|
+
| `gossip_scores` | View agent accuracy, uniqueness, dispatch weights |
|
|
804
430
|
| `gossip_skills` | Develop, bind, unbind, or list per-agent skills |
|
|
805
|
-
| `
|
|
806
|
-
| `gossip_session_save` | Save session context for next session |
|
|
431
|
+
| `gossip_resolve_findings` | Mark consensus findings resolved/open |
|
|
807
432
|
| `gossip_remember` | Search an agent's cognitive memory |
|
|
433
|
+
| `gossip_verify_memory` | Check a memory claim against current code (FRESH / STALE / CONTRADICTED) before acting on backlog |
|
|
434
|
+
| `gossip_session_save` | Save session context for the next session |
|
|
808
435
|
| `gossip_progress` | Check in-progress task status |
|
|
809
|
-
| `gossip_watch` | Stream signals as agents emit them
|
|
810
|
-
| `
|
|
811
|
-
| `
|
|
436
|
+
| `gossip_watch` | Stream signals as agents emit them (catches pipeline drops mid-round) |
|
|
437
|
+
| `gossip_ask` | Ask the dashboard a structured single/multi-select question |
|
|
438
|
+
| `gossip_guide` | Print the gossipcat handbook for humans |
|
|
439
|
+
| `gossip_config` | Manage runtime feature-gate flags |
|
|
440
|
+
| `gossip_format` | Return the canonical `<agent_finding>` output format block |
|
|
812
441
|
| `gossip_tools` | List all available tools |
|
|
813
|
-
| `gossip_update` | Check for
|
|
814
|
-
| `gossip_bug_feedback` | File a GitHub issue
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
## Dashboard internals
|
|
819
|
-
|
|
820
|
-
> User-facing dashboard guide is in [Reading the dashboard](#reading-the-dashboard) above. This section covers the build + tech stack.
|
|
821
|
-
|
|
822
|
-
Built with React + Vite + shadcn/ui. Source lives at `packages/dashboard-v2/`. The bundled assets ship in `dist-dashboard/` and the relay serves them as static files at `http://localhost:<dynamic-port>/dashboard/`. Live updates push via WebSocket — every gossipcat tool call emits an event that connected dashboard tabs receive in real time.
|
|
823
|
-
|
|
824
|
-
To rebuild from source (contributors only):
|
|
825
|
-
```bash
|
|
826
|
-
npm run build:dashboard
|
|
827
|
-
```
|
|
442
|
+
| `gossip_update` | Check for / apply gossipcat updates from npm |
|
|
443
|
+
| `gossip_bug_feedback` | File a GitHub issue from an in-session bug report |
|
|
444
|
+
| `gossip_reload` | Self-terminate so the host respawns with a fresh bundle (dev loop) |
|
|
445
|
+
| _orchestrator-only_ | `gossip_relay`, `gossip_relay_cross_review`, `reply` — used internally to feed native results + the chat bridge back into the pipeline; you never call these |
|
|
828
446
|
|
|
829
447
|
<br/>
|
|
830
448
|
|
|
@@ -832,181 +450,45 @@ npm run build:dashboard
|
|
|
832
450
|
|
|
833
451
|
```
|
|
834
452
|
gossipcat/
|
|
835
|
-
apps/
|
|
836
|
-
cli/ MCP server, native agent bridge, boot sequence
|
|
453
|
+
apps/cli/ MCP server, host-aware native agent bridge, boot sequence
|
|
837
454
|
packages/
|
|
838
455
|
orchestrator/ Dispatch pipeline, consensus engine, memory, skills,
|
|
839
456
|
performance scoring, task graph, prompt assembly
|
|
840
457
|
relay/ WebSocket relay server, dashboard REST/WS API
|
|
841
|
-
dashboard-v2/ React + Vite frontend (
|
|
458
|
+
dashboard-v2/ React + Vite + shadcn/ui frontend (warm-cream theme — see DESIGN.md)
|
|
842
459
|
client/ Lightweight WebSocket client for relay connections
|
|
843
|
-
tools/ File/shell/git tool implementations for worker agents
|
|
460
|
+
tools/ File / shell / git tool implementations for worker agents
|
|
844
461
|
types/ Shared TypeScript types and message protocol
|
|
845
462
|
```
|
|
846
463
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
## OpenClaw Integration
|
|
850
|
-
|
|
851
|
-
<p align="center">
|
|
852
|
-
<img src="https://img.shields.io/badge/OpenClaw-gateway-4A90D9?style=for-the-badge" alt="OpenClaw" />
|
|
853
|
-
<img src="https://img.shields.io/badge/%F0%9F%A6%9E-lobster%20friendly-red?style=for-the-badge" alt="Lobster friendly" />
|
|
854
|
-
</p>
|
|
855
|
-
|
|
856
|
-
Gossipcat supports [OpenClaw](https://github.com/openclaw/openclaw) as a provider gateway. OpenClaw runs locally and exposes an OpenAI-compatible HTTP API — gossipcat talks to it like any other relay agent, with your stored gateway token and a separate quota slot so OpenClaw rate limits never bleed into your OpenAI agents.
|
|
857
|
-
|
|
858
|
-
### Wiring an OpenClaw agent
|
|
859
|
-
|
|
860
|
-
Store your gateway token once (macOS):
|
|
861
|
-
```bash
|
|
862
|
-
security add-generic-password -s gossip-mesh -a openclaw -w <your-gateway-token>
|
|
863
|
-
```
|
|
864
|
-
|
|
865
|
-
On Linux:
|
|
866
|
-
```bash
|
|
867
|
-
secret-tool store --label "Gossip Mesh openclaw" service gossip-mesh provider openclaw
|
|
868
|
-
# (enter token when prompted)
|
|
869
|
-
```
|
|
870
|
-
|
|
871
|
-
Then add it to your team:
|
|
872
|
-
```
|
|
873
|
-
"Add an OpenClaw reviewer to my team"
|
|
874
|
-
```
|
|
875
|
-
|
|
876
|
-
Or directly via `gossip_setup`:
|
|
877
|
-
```
|
|
878
|
-
gossip_setup(mode: "merge", agents: [{
|
|
879
|
-
id: "openclaw-agent",
|
|
880
|
-
type: "custom",
|
|
881
|
-
provider: "openclaw",
|
|
882
|
-
custom_model: "openclaw/default",
|
|
883
|
-
role: "reviewer",
|
|
884
|
-
skills: ["code_review", "typescript"]
|
|
885
|
-
}])
|
|
886
|
-
```
|
|
887
|
-
|
|
888
|
-
The gateway runs at `http://127.0.0.1:18789/v1` by default. Override with `base_url` if yours is on a different port. Available models: `openclaw`, `openclaw/default`, `openclaw/main`.
|
|
464
|
+
The dashboard ships prebuilt in `dist-dashboard/` and the relay serves it as static files; rebuild from source with `npm run build:dashboard`.
|
|
889
465
|
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
<br/>
|
|
893
|
-
|
|
894
|
-
## Configuration
|
|
895
|
-
|
|
896
|
-
Config is searched in order: `.gossip/config.json` > `gossip.agents.json` > `gossip.agents.yaml`.
|
|
897
|
-
|
|
898
|
-
```json
|
|
899
|
-
{
|
|
900
|
-
"main_agent": {
|
|
901
|
-
"provider": "google",
|
|
902
|
-
"model": "gemini-2.5-pro"
|
|
903
|
-
},
|
|
904
|
-
"utility_model": {
|
|
905
|
-
"provider": "native",
|
|
906
|
-
"model": "haiku"
|
|
907
|
-
},
|
|
908
|
-
"consensus_judge": {
|
|
909
|
-
"provider": "anthropic",
|
|
910
|
-
"model": "claude-sonnet-4-6",
|
|
911
|
-
"native": true
|
|
912
|
-
},
|
|
913
|
-
"agents": {
|
|
914
|
-
"sonnet-reviewer": {
|
|
915
|
-
"provider": "anthropic",
|
|
916
|
-
"model": "claude-sonnet-4-6",
|
|
917
|
-
"preset": "reviewer",
|
|
918
|
-
"skills": ["code_review", "security_audit", "typescript"],
|
|
919
|
-
"native": true
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
}
|
|
923
|
-
```
|
|
924
|
-
|
|
925
|
-
| Field | Description |
|
|
926
|
-
|-------|-------------|
|
|
927
|
-
| `main_agent` | Internal tool LLM for routing, planning, and synthesis |
|
|
928
|
-
| `utility_model` | Memory compaction, gossip, lens generation |
|
|
929
|
-
| `consensus_judge` | Model for cross-review synthesis |
|
|
930
|
-
| `agents.<id>.provider` | `anthropic`, `google`, `openai`, `openclaw`, `local` |
|
|
931
|
-
| `agents.<id>.base_url` | Custom endpoint for `openai`/`openclaw` (e.g. `http://127.0.0.1:18789/v1`) |
|
|
932
|
-
| `agents.<id>.native` | `true` = runs via Claude Code Agent(), no API key |
|
|
933
|
-
| `agents.<id>.preset` | `reviewer`, `implementer`, `tester`, `researcher`, `debugger`, `architect`, `security`, `designer`, `planner`, `devops`, `documenter` |
|
|
934
|
-
| `agents.<id>.skills` | Skill labels for dispatch matching |
|
|
935
|
-
|
|
936
|
-
<br/>
|
|
937
|
-
|
|
938
|
-
## Host compatibility
|
|
939
|
-
|
|
940
|
-
Gossipcat auto-detects the host environment:
|
|
941
|
-
|
|
942
|
-
| Host | Native agents | Rules file |
|
|
943
|
-
|------|---------------|------------|
|
|
944
|
-
| Claude Code | Yes | `.claude/rules/gossipcat.md` |
|
|
945
|
-
| Cursor | No | `.cursor/rules/gossipcat.mdc` |
|
|
946
|
-
| Windsurf | No | `.windsurfrules` |
|
|
947
|
-
| VS Code | No | — |
|
|
466
|
+
> **Reading this as a Claude Code or Cursor instance?** Call `gossip_status()` — it boots your full operating rules. The detailed orchestrator workflow (dispatch rules, consensus protocol, signal pipeline) lives in [`CLAUDE.md`](CLAUDE.md) and [`.claude/rules/gossipcat.md`](.claude/rules/gossipcat.md).
|
|
948
467
|
|
|
949
468
|
<br/>
|
|
950
469
|
|
|
951
470
|
## Roadmap
|
|
952
471
|
|
|
472
|
+
Shipped work lives in [CHANGELOG.md](CHANGELOG.md) and [GitHub Releases](https://github.com/gossipcat-ai/gossipcat-ai/releases). What's next:
|
|
473
|
+
|
|
953
474
|
| Feature | Status |
|
|
954
475
|
|---------|--------|
|
|
955
|
-
| Consensus code review | ✅ Shipped |
|
|
956
|
-
| Adaptive dispatch weights | ✅ Shipped |
|
|
957
|
-
| Per-agent skill development | ✅ Shipped |
|
|
958
|
-
| Agent cognitive memory | ✅ Shipped |
|
|
959
|
-
| Live dashboard | ✅ Shipped |
|
|
960
|
-
| Cross-platform key storage | ✅ Shipped |
|
|
961
|
-
| OpenAI-compatible gateway support (`base_url`) | ✅ Shipped |
|
|
962
|
-
| OpenClaw provider integration 🦞 | ✅ Shipped |
|
|
963
|
-
| Local LLM support (Ollama) | ✅ Shipped |
|
|
964
|
-
| Statistical skill effectiveness (z-test on per-category accuracy, auto pass/fail verdicts) | ✅ Shipped |
|
|
965
|
-
| Native subagents get skill injection + cognitive memory recall | ✅ Shipped |
|
|
966
|
-
| Relay cross-reviewers get `file_read` + `file_grep` (closes tool-blindness gap with natives) | ✅ Shipped |
|
|
967
|
-
| Worktree-aware consensus (`resolutionRoots` + auto-discover for feature-branch reviews) | ✅ Shipped |
|
|
968
|
-
| Signal pipeline observability (format-drop receipts + `finding_dropped_format` meta-signal + `gossip_watch` stream) | ✅ Shipped |
|
|
969
|
-
| Consensus round retraction (`gossip_signals action: retract` with tombstones) | ✅ Shipped |
|
|
970
|
-
| Worktree sandbox hardening (Layer 1+2+3 boundary enforcement + rotated audit log) | ✅ Shipped |
|
|
971
|
-
| In-session bundle hot-swap (`gossip_reload`) | ✅ Shipped |
|
|
972
|
-
| npm package — one-liner install with bundled MCP server + dashboard | ✅ Shipped |
|
|
973
|
-
| Full implementation workflow (agents write code with scoped + worktree isolation) | ✅ Shipped |
|
|
974
476
|
| Dashboard enrichment (graphs, trends, session history) | ☐ Planned |
|
|
975
|
-
| Local Postgres migration (
|
|
976
|
-
|
|
|
977
|
-
|
|
|
978
|
-
| Standalone CLI (no IDE required) | ☐ Planned |
|
|
979
|
-
| CLI parity with MCP pipeline (gossip, task graph, agent memory in chat mode) | ☐ Planned |
|
|
477
|
+
| Local Postgres migration (tasks/signals/consensus/memory — full task results, real queries, no JSONL scans) | ☐ Planned |
|
|
478
|
+
| Windsurf / VS Code native parity | ☐ Planned |
|
|
479
|
+
| Standalone CLI (no IDE required) + chat-mode pipeline parity | ☐ Planned |
|
|
980
480
|
|
|
981
481
|
<br/>
|
|
982
482
|
|
|
983
483
|
## Contributing
|
|
984
484
|
|
|
985
|
-
Gossipcat is open source and early-stage — bug reports,
|
|
986
|
-
|
|
987
|
-
- **Bugs / feature requests** → [open an issue](https://github.com/gossipcat-ai/gossipcat-ai/issues). Or ask Claude Code directly: *"File a gossipcat bug report about <...>"* — the `gossip_bug_feedback` tool posts structured issues from your current session.
|
|
988
|
-
- **Pull requests** → fork, branch, PR against `master`. Run `npm test` before pushing. Commit messages follow conventional commits (`fix:`, `feat:`, `chore:`, `docs:`).
|
|
989
|
-
- **Discussions** → new ideas, design questions, "should this be a feature?" → [GitHub Discussions](https://github.com/gossipcat-ai/gossipcat-ai/discussions).
|
|
990
|
-
|
|
991
|
-
See `CLAUDE.md` in the repo for the operational rules gossipcat's own agents follow during development — it's a useful read if you want to understand the signal pipeline and consensus workflow from the inside.
|
|
992
|
-
|
|
993
|
-
### Cutting a release (maintainers)
|
|
994
|
-
|
|
995
|
-
Releases go to GitHub Releases via a two-stage script that respects branch protection — no direct commits to master.
|
|
485
|
+
Gossipcat is open source and early-stage — bug reports, ideas, and PRs welcome.
|
|
996
486
|
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
# review + merge the PR via gh or web UI
|
|
1002
|
-
gh pr merge <pr-number> --squash --delete-branch
|
|
1003
|
-
|
|
1004
|
-
# Stage 2 — build, tag, release (from master, after the PR is merged)
|
|
1005
|
-
git checkout master && git pull
|
|
1006
|
-
./scripts/release.sh # no args
|
|
1007
|
-
```
|
|
487
|
+
- **Bugs / features** → [open an issue](https://github.com/gossipcat-ai/gossipcat-ai/issues), or ask Claude Code *"file a gossipcat bug report about …"* (`gossip_bug_feedback` posts a structured issue).
|
|
488
|
+
- **Pull requests** → fork, branch, PR against `master`. Run `npm test` first. Conventional commits (`fix:`, `feat:`, `chore:`, `docs:`). Release process and contributor setup are in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
489
|
+
- **Discussions** → [GitHub Discussions](https://github.com/gossipcat-ai/gossipcat-ai/discussions).
|
|
1008
490
|
|
|
1009
|
-
|
|
491
|
+
[`CLAUDE.md`](CLAUDE.md) documents the operational rules gossipcat's own agents follow during development — a useful read for understanding the signal pipeline and consensus workflow from the inside.
|
|
1010
492
|
|
|
1011
493
|
<br/>
|
|
1012
494
|
|