neohive 6.0.2 → 6.0.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [6.0.3] - 2026-04-03
4
+
5
+ ### Fixed
6
+
7
+ - **MCP data directory** — When the MCP process starts with cwd outside the repo (e.g. Cursor home) and no `NEOHIVE_DATA_DIR`, resolve the hive from repo `.cursor/mcp.json` / sibling config (`lib/resolve-server-data-dir.js`); `lib/config.js` uses the same root so agents and dashboard agree.
8
+ - **Dashboard `projects.json`** — Only rewrite the projects file when the canonical list differs from on-disk data (`pack(nonRedundant) !== pack(raw)`), not on every load when duplicates or default-hive rows were only present in the normalized pass-through list.
9
+
3
10
  ## [5.1.0] - 2026-03-19
4
11
 
5
12
  ### Major — True Autonomy Engine + Team Intelligence + Scale to 100
package/cli.js CHANGED
@@ -17,9 +17,12 @@ function printUsage() {
17
17
  npx neohive init --claude Configure for Claude Code only
18
18
  npx neohive init --gemini Configure for Gemini CLI only
19
19
  npx neohive init --codex Configure for Codex CLI only
20
- npx neohive init --all Configure for all detected CLIs
20
+ npx neohive init --cursor Configure for Cursor IDE only (.cursor/mcp.json)
21
+ npx neohive init --all Configure for all supported CLIs
21
22
  npx neohive init --ollama Setup Ollama local LLM bridge
22
23
  npx neohive init --template T Initialize with a team template
24
+ npx neohive serve Run MCP server in HTTP mode (port 4321)
25
+ npx neohive serve --port 8080 Custom port for HTTP server
23
26
  npx neohive dashboard Launch web dashboard (http://localhost:3000)
24
27
  npx neohive dashboard --lan Dashboard accessible on LAN
25
28
  npx neohive status Show active agents and tasks
@@ -55,6 +58,11 @@ function detectCLIs() {
55
58
  detected.push('codex');
56
59
  }
57
60
 
61
+ // Cursor IDE: ~/.cursor/ (app support) exists
62
+ if (fs.existsSync(path.join(home, '.cursor'))) {
63
+ detected.push('cursor');
64
+ }
65
+
58
66
  return detected;
59
67
  }
60
68
 
@@ -167,6 +175,41 @@ timeout = 300
167
175
  console.log(' [ok] Codex CLI: .codex/config.toml updated');
168
176
  }
169
177
 
178
+ // Configure for Cursor IDE — absolute NEOHIVE_DATA_DIR so Node never sees unexpanded ${workspaceFolder}.
179
+ // If the IDE omits env on spawn, server startup still resolves the hive via lib/resolve-server-data-dir.js
180
+ // (walks cwd ancestors for the same MCP files).
181
+ function setupCursor(serverPath, cwd) {
182
+ const cursorDir = path.join(cwd, '.cursor');
183
+ const mcpConfigPath = path.join(cursorDir, 'mcp.json');
184
+ const abDataDir = path.join(path.resolve(cwd), '.neohive').replace(/\\/g, '/');
185
+
186
+ if (!fs.existsSync(cursorDir)) {
187
+ fs.mkdirSync(cursorDir, { recursive: true });
188
+ }
189
+
190
+ let mcpConfig = { mcpServers: {} };
191
+ if (fs.existsSync(mcpConfigPath)) {
192
+ try {
193
+ mcpConfig = JSON.parse(fs.readFileSync(mcpConfigPath, 'utf8'));
194
+ if (!mcpConfig.mcpServers) mcpConfig.mcpServers = {};
195
+ } catch {
196
+ const backup = mcpConfigPath + '.backup';
197
+ fs.copyFileSync(mcpConfigPath, backup);
198
+ console.log(' [warn] Existing .cursor/mcp.json was invalid — backed up to mcp.json.backup');
199
+ }
200
+ }
201
+
202
+ mcpConfig.mcpServers['neohive'] = {
203
+ command: 'node',
204
+ args: [serverPath],
205
+ env: { NEOHIVE_DATA_DIR: abDataDir },
206
+ timeout: 300,
207
+ };
208
+
209
+ fs.writeFileSync(mcpConfigPath, JSON.stringify(mcpConfig, null, 2) + '\n');
210
+ console.log(' [ok] Cursor IDE: .cursor/mcp.json updated');
211
+ }
212
+
170
213
  // Setup Ollama agent bridge script
171
214
  function setupOllama(serverPath, cwd) {
172
215
  const dir = dataDir(cwd);
@@ -314,8 +357,10 @@ function init() {
314
357
  targets = ['gemini'];
315
358
  } else if (flag === '--codex') {
316
359
  targets = ['codex'];
360
+ } else if (flag === '--cursor') {
361
+ targets = ['cursor'];
317
362
  } else if (flag === '--all') {
318
- targets = ['claude', 'gemini', 'codex'];
363
+ targets = ['claude', 'gemini', 'codex', 'cursor'];
319
364
  } else if (flag === '--ollama') {
320
365
  const ollama = detectOllama();
321
366
  if (!ollama.installed) {
@@ -347,11 +392,12 @@ function init() {
347
392
  case 'claude': setupClaude(serverPath, cwd); break;
348
393
  case 'gemini': setupGemini(serverPath, cwd); break;
349
394
  case 'codex': setupCodex(serverPath, cwd); break;
395
+ case 'cursor': setupCursor(serverPath, cwd); break;
350
396
  }
351
397
  }
352
398
 
353
399
  // Add .neohive/ and MCP config files to .gitignore
354
- const gitignoreEntries = ['.neohive/', '.mcp.json', '.codex/', '.gemini/'];
400
+ const gitignoreEntries = ['.neohive/', '.mcp.json', '.cursor/mcp.json', '.codex/', '.gemini/'];
355
401
  if (fs.existsSync(gitignorePath)) {
356
402
  let content = fs.readFileSync(gitignorePath, 'utf8');
357
403
  const missing = gitignoreEntries.filter(e => !content.includes(e));
@@ -367,8 +413,13 @@ function init() {
367
413
  console.log(' [ok] .gitignore created');
368
414
  }
369
415
 
416
+ const configuredCursor = targets.includes('cursor');
370
417
  console.log('');
371
- console.log(' Neohive is ready! Restart your CLI to pick up the MCP tools.');
418
+ console.log(
419
+ configuredCursor
420
+ ? ' Neohive is ready! Restart Cursor (or reload MCP tools) and restart any terminal CLIs you use.'
421
+ : ' Neohive is ready! Restart your CLI to pick up the MCP tools.'
422
+ );
372
423
  console.log('');
373
424
 
374
425
  // Show template if --template was provided
@@ -383,7 +434,11 @@ function init() {
383
434
  if (templateFlag) {
384
435
  showTemplate(templateFlag);
385
436
  } else {
386
- console.log(' Open two terminals and start a conversation between agents.');
437
+ if (configuredCursor) {
438
+ console.log(' Cursor: use register + listen() from chat (neohive MCP). Terminal CLIs: one session per agent.');
439
+ } else {
440
+ console.log(' Open two terminals and start a conversation between agents.');
441
+ }
387
442
  console.log(' Tip: Use "npx neohive init --template pair" for ready-made prompts.');
388
443
  console.log('');
389
444
  console.log(' \x1b[1m Monitor:\x1b[0m');
@@ -502,6 +557,17 @@ function showTemplate(templateName) {
502
557
  }
503
558
  }
504
559
 
560
+ function serve() {
561
+ // Parse --port flag
562
+ const portIdx = process.argv.indexOf('--port');
563
+ if (portIdx !== -1 && process.argv[portIdx + 1]) {
564
+ process.env.NEOHIVE_SERVER_PORT = process.argv[portIdx + 1];
565
+ }
566
+ // Signal server.js to use HTTP transport
567
+ process.env.NEOHIVE_TRANSPORT = 'http';
568
+ require('./server.js');
569
+ }
570
+
505
571
  function dashboard() {
506
572
  if (process.argv.includes('--lan')) {
507
573
  process.env.NEOHIVE_LAN = 'true';
@@ -847,6 +913,44 @@ function uninstall() {
847
913
  }
848
914
  }
849
915
 
916
+ // 7. Remove from Cursor IDE project config (.cursor/mcp.json in cwd)
917
+ const cursorMcpPath = path.join(cwd, '.cursor', 'mcp.json');
918
+ if (fs.existsSync(cursorMcpPath)) {
919
+ try {
920
+ const mcpConfig = JSON.parse(fs.readFileSync(cursorMcpPath, 'utf8'));
921
+ if (mcpConfig.mcpServers && mcpConfig.mcpServers['neohive']) {
922
+ delete mcpConfig.mcpServers['neohive'];
923
+ fs.writeFileSync(cursorMcpPath, JSON.stringify(mcpConfig, null, 2) + '\n');
924
+ removed.push('Cursor IDE (project): ' + cursorMcpPath);
925
+ } else {
926
+ notFound.push('Cursor IDE (project): no neohive entry in .cursor/mcp.json');
927
+ }
928
+ } catch (e) {
929
+ console.log(' [warn] Could not parse ' + cursorMcpPath + ': ' + e.message);
930
+ }
931
+ } else {
932
+ notFound.push('Cursor IDE (project): .cursor/mcp.json not found');
933
+ }
934
+
935
+ // 8. Remove from Cursor IDE user config (~/.cursor/mcp.json)
936
+ const cursorGlobalPath = path.join(home, '.cursor', 'mcp.json');
937
+ if (fs.existsSync(cursorGlobalPath)) {
938
+ try {
939
+ const mcpConfig = JSON.parse(fs.readFileSync(cursorGlobalPath, 'utf8'));
940
+ if (mcpConfig.mcpServers && mcpConfig.mcpServers['neohive']) {
941
+ delete mcpConfig.mcpServers['neohive'];
942
+ fs.writeFileSync(cursorGlobalPath, JSON.stringify(mcpConfig, null, 2) + '\n');
943
+ removed.push('Cursor IDE (global): ' + cursorGlobalPath);
944
+ } else {
945
+ notFound.push('Cursor IDE (global): no neohive entry');
946
+ }
947
+ } catch (e) {
948
+ console.log(' [warn] Could not parse ' + cursorGlobalPath + ': ' + e.message);
949
+ }
950
+ } else {
951
+ notFound.push('Cursor IDE (global): ~/.cursor/mcp.json not found');
952
+ }
953
+
850
954
  // Print summary
851
955
  if (removed.length > 0) {
852
956
  console.log(' Removed neohive from:');
@@ -865,7 +969,7 @@ function uninstall() {
865
969
  }
866
970
  }
867
971
 
868
- // 7. Check for data directory
972
+ // 9. Check for data directory
869
973
  const dataPath = path.join(cwd, '.neohive');
870
974
  if (fs.existsSync(dataPath)) {
871
975
  console.log('');
@@ -887,6 +991,9 @@ switch (command) {
887
991
  case 'templates':
888
992
  listTemplates();
889
993
  break;
994
+ case 'serve':
995
+ serve();
996
+ break;
890
997
  case 'dashboard':
891
998
  dashboard();
892
999
  break;
@@ -2,11 +2,61 @@
2
2
  "id": "autonomous-feature",
3
3
  "name": "Autonomous Feature Build",
4
4
  "description": "Full autonomous feature build: architecture, parallel backend+frontend, integration testing. Zero human intervention.",
5
+ "category": "development",
6
+ "conversation_mode": "direct",
5
7
  "agents": [
6
- { "name": "Architect", "role": "Software Architect", "skills": ["design", "interfaces", "architecture"], "prompt": "You are a software architect. Design the feature architecture with clear interfaces. Call verify_and_advance() when done. Use get_work() to stay in the proactive loop." },
7
- { "name": "Backend", "role": "Backend Developer", "skills": ["api", "database", "server", "backend"], "prompt": "You are a backend developer. Implement server-side logic, APIs, and data models. Write unit tests. Call verify_and_advance() when done. Never wait for approval." },
8
- { "name": "Frontend", "role": "Frontend Developer", "skills": ["ui", "css", "components", "frontend"], "prompt": "You are a frontend developer. Implement UI components, pages, and client-side logic. Write component tests. Call verify_and_advance() when done. Never wait for approval." },
9
- { "name": "Tester", "role": "QA Engineer", "skills": ["testing", "qa", "integration", "verification"], "prompt": "You are a QA engineer. Write and run integration tests. Verify all components work together. Call verify_and_advance() when done." }
8
+ {
9
+ "name": "Architect",
10
+ "role": "lead",
11
+ "display_name": "Software Architect",
12
+ "skills": ["design", "interfaces", "architecture", "planning"],
13
+ "responsibilities": [
14
+ "Design feature architecture with clear interfaces",
15
+ "Define contracts between backend and frontend",
16
+ "Create implementation plan"
17
+ ],
18
+ "tools_focus": ["create_workflow", "advance_workflow", "kb_write", "share_file"],
19
+ "prompt": "You are a software architect. Design the feature architecture with clear interfaces. Call verify_and_advance() when done. Use get_work() to stay in the proactive loop."
20
+ },
21
+ {
22
+ "name": "Backend",
23
+ "role": "backend",
24
+ "display_name": "Backend Developer",
25
+ "skills": ["api", "database", "server", "backend", "nodejs"],
26
+ "responsibilities": [
27
+ "Implement server-side logic, APIs, and data models",
28
+ "Write unit tests for backend code",
29
+ "Lock files before editing"
30
+ ],
31
+ "tools_focus": ["lock_file", "unlock_file", "update_task", "advance_workflow", "share_file"],
32
+ "prompt": "You are a backend developer. Implement server-side logic, APIs, and data models. Write unit tests. Use lock_file() before editing. Call verify_and_advance() when done. Never wait for approval."
33
+ },
34
+ {
35
+ "name": "Frontend",
36
+ "role": "frontend",
37
+ "display_name": "Frontend Developer",
38
+ "skills": ["ui", "css", "components", "frontend", "html"],
39
+ "responsibilities": [
40
+ "Implement UI components, pages, and client-side logic",
41
+ "Write component tests",
42
+ "Lock files before editing"
43
+ ],
44
+ "tools_focus": ["lock_file", "unlock_file", "update_task", "advance_workflow", "share_file"],
45
+ "prompt": "You are a frontend developer. Implement UI components, pages, and client-side logic. Write component tests. Use lock_file() before editing. Call verify_and_advance() when done. Never wait for approval."
46
+ },
47
+ {
48
+ "name": "Tester",
49
+ "role": "quality",
50
+ "display_name": "QA Engineer",
51
+ "skills": ["testing", "qa", "integration", "verification"],
52
+ "responsibilities": [
53
+ "Write and run integration tests",
54
+ "Verify all components work together",
55
+ "Submit review results via submit_review()"
56
+ ],
57
+ "tools_focus": ["request_review", "submit_review", "advance_workflow", "get_reputation"],
58
+ "prompt": "You are a QA engineer. Write and run integration tests. Verify all components work together. Call verify_and_advance() when done."
59
+ }
10
60
  ],
11
61
  "workflow": {
12
62
  "name": "Autonomous Feature",
@@ -2,10 +2,48 @@
2
2
  "id": "code-review",
3
3
  "name": "Code Review Pipeline",
4
4
  "description": "Developer writes code, Reviewer checks it, Tester validates. Autonomous: review + test run in parallel after code is written.",
5
+ "category": "quality",
6
+ "conversation_mode": "direct",
5
7
  "agents": [
6
- { "name": "Developer", "role": "Developer", "skills": ["code", "implementation"], "prompt": "You are a developer. Write code as instructed. Call verify_and_advance() when done. If review feedback arrives, fix issues and re-submit. Never wait idle." },
7
- { "name": "Reviewer", "role": "Code Reviewer", "skills": ["review", "standards", "security"], "prompt": "You are a code reviewer. Review code for bugs, style, and best practices. Use submit_review() to approve or request changes. Call verify_and_advance() when done." },
8
- { "name": "Tester", "role": "QA Tester", "skills": ["testing", "qa", "verification"], "prompt": "You are a QA tester. Write and run tests for the code. Report results. Call verify_and_advance() when done. Never wait for approval." }
8
+ {
9
+ "name": "Developer",
10
+ "role": "backend",
11
+ "display_name": "Developer",
12
+ "skills": ["code", "implementation", "javascript", "nodejs"],
13
+ "responsibilities": [
14
+ "Write code as instructed",
15
+ "Address review feedback and fix issues",
16
+ "Lock files before editing"
17
+ ],
18
+ "tools_focus": ["lock_file", "unlock_file", "update_task", "advance_workflow", "share_file"],
19
+ "prompt": "You are a developer. Write code as instructed. Use lock_file() before editing shared code. Call verify_and_advance() when done. If review feedback arrives, fix issues and re-submit. Never wait idle."
20
+ },
21
+ {
22
+ "name": "Reviewer",
23
+ "role": "quality",
24
+ "display_name": "Code Reviewer",
25
+ "skills": ["review", "standards", "security", "quality"],
26
+ "responsibilities": [
27
+ "Review code for bugs, style, and best practices",
28
+ "Check for security vulnerabilities",
29
+ "Approve or request changes via submit_review()"
30
+ ],
31
+ "tools_focus": ["request_review", "submit_review", "advance_workflow", "get_reputation"],
32
+ "prompt": "You are a code reviewer. Review code for bugs, style, and best practices. Use submit_review() to approve or request changes. Call verify_and_advance() when done."
33
+ },
34
+ {
35
+ "name": "Tester",
36
+ "role": "quality",
37
+ "display_name": "QA Tester",
38
+ "skills": ["testing", "qa", "verification", "regression"],
39
+ "responsibilities": [
40
+ "Write and run tests for the code",
41
+ "Report test results and coverage",
42
+ "Verify edge cases and error handling"
43
+ ],
44
+ "tools_focus": ["update_task", "advance_workflow", "submit_review", "share_file"],
45
+ "prompt": "You are a QA tester. Write and run tests for the code. Report results. Call verify_and_advance() when done. Never wait for approval."
46
+ }
9
47
  ],
10
48
  "workflow": {
11
49
  "name": "Code Review",
@@ -2,10 +2,48 @@
2
2
  "id": "debug-squad",
3
3
  "name": "Debug Squad",
4
4
  "description": "Investigator finds the bug, Fixer patches it, Verifier confirms the fix. Autonomous: no waiting between steps.",
5
+ "category": "development",
6
+ "conversation_mode": "direct",
5
7
  "agents": [
6
- { "name": "Investigator", "role": "Bug Investigator", "skills": ["debugging", "analysis", "tracing"], "prompt": "You investigate bugs. Analyze error logs, trace code paths, and identify root causes. Call verify_and_advance() when root cause is found. Never wait idle." },
7
- { "name": "Fixer", "role": "Bug Fixer", "skills": ["code", "fixing", "patching"], "prompt": "You fix bugs. Implement fixes based on investigation findings. Write regression tests. Call verify_and_advance() when done. If fix fails, use retry_with_improvement()." },
8
- { "name": "Verifier", "role": "Fix Verifier", "skills": ["testing", "verification", "qa"], "prompt": "You verify bug fixes. Test the fix, confirm resolution, and check for regressions. Call verify_and_advance() when done." }
8
+ {
9
+ "name": "Investigator",
10
+ "role": "quality",
11
+ "display_name": "Bug Investigator",
12
+ "skills": ["debugging", "analysis", "tracing", "investigation"],
13
+ "responsibilities": [
14
+ "Analyze error logs and trace code paths",
15
+ "Identify root causes with evidence",
16
+ "Document findings with file paths and line numbers"
17
+ ],
18
+ "tools_focus": ["search_messages", "kb_write", "advance_workflow", "share_file"],
19
+ "prompt": "You investigate bugs. Analyze error logs, trace code paths, and identify root causes. Include file paths and line numbers in your findings. Use kb_write() to document root cause. Call verify_and_advance() when root cause is found. Never wait idle."
20
+ },
21
+ {
22
+ "name": "Fixer",
23
+ "role": "backend",
24
+ "display_name": "Bug Fixer",
25
+ "skills": ["code", "fixing", "patching", "testing"],
26
+ "responsibilities": [
27
+ "Implement fixes based on investigation findings",
28
+ "Write regression tests",
29
+ "Lock files before editing"
30
+ ],
31
+ "tools_focus": ["lock_file", "unlock_file", "update_task", "advance_workflow", "share_file"],
32
+ "prompt": "You fix bugs. Implement fixes based on investigation findings. Write regression tests. Use lock_file() before editing. Call verify_and_advance() when done. If fix fails, use retry_with_improvement()."
33
+ },
34
+ {
35
+ "name": "Verifier",
36
+ "role": "quality",
37
+ "display_name": "Fix Verifier",
38
+ "skills": ["testing", "verification", "qa", "regression"],
39
+ "responsibilities": [
40
+ "Test the fix and confirm resolution",
41
+ "Check for regressions",
42
+ "Approve via submit_review()"
43
+ ],
44
+ "tools_focus": ["request_review", "submit_review", "advance_workflow", "get_reputation"],
45
+ "prompt": "You verify bug fixes. Test the fix, confirm resolution, and check for regressions. Use submit_review() to formally approve. Call verify_and_advance() when done."
46
+ }
9
47
  ],
10
48
  "workflow": {
11
49
  "name": "Bug Fix",
@@ -2,10 +2,48 @@
2
2
  "id": "feature-build",
3
3
  "name": "Feature Development",
4
4
  "description": "Architect designs, Builder implements, Reviewer approves. Autonomous mode: agents auto-advance through steps.",
5
+ "category": "development",
6
+ "conversation_mode": "direct",
5
7
  "agents": [
6
- { "name": "Architect", "role": "Software Architect", "skills": ["design", "interfaces", "architecture"], "prompt": "You are a software architect. Design the feature architecture, define interfaces, and create the implementation plan. When done, call verify_and_advance(). Never wait for approval." },
7
- { "name": "Builder", "role": "Developer", "skills": ["code", "implementation", "testing"], "prompt": "You are a developer. Implement the feature following the architecture design. Write tests. When done, call verify_and_advance(). Never wait for approval." },
8
- { "name": "Reviewer", "role": "Senior Reviewer", "skills": ["review", "quality", "standards"], "prompt": "You are a senior reviewer. Review implementations against the architecture. Use submit_review() to approve or request changes. Call verify_and_advance() when done." }
8
+ {
9
+ "name": "Architect",
10
+ "role": "lead",
11
+ "display_name": "Software Architect",
12
+ "skills": ["design", "interfaces", "architecture", "planning"],
13
+ "responsibilities": [
14
+ "Design feature architecture with clear interfaces",
15
+ "Define API contracts between components",
16
+ "Create the implementation plan as a workflow"
17
+ ],
18
+ "tools_focus": ["create_workflow", "advance_workflow", "kb_write", "share_file"],
19
+ "prompt": "You are a software architect. Design the feature architecture, define interfaces, and create the implementation plan. When done, call verify_and_advance(). Never wait for approval."
20
+ },
21
+ {
22
+ "name": "Builder",
23
+ "role": "backend",
24
+ "display_name": "Developer",
25
+ "skills": ["code", "implementation", "testing", "javascript", "nodejs"],
26
+ "responsibilities": [
27
+ "Implement the feature following the architecture design",
28
+ "Write unit tests alongside code",
29
+ "Lock files before editing, unlock after"
30
+ ],
31
+ "tools_focus": ["lock_file", "unlock_file", "update_task", "advance_workflow", "share_file"],
32
+ "prompt": "You are a developer. Implement the feature following the architecture design. Write tests. Use lock_file() before editing shared code. Call verify_and_advance() when done. Never wait for approval."
33
+ },
34
+ {
35
+ "name": "Reviewer",
36
+ "role": "quality",
37
+ "display_name": "Senior Reviewer",
38
+ "skills": ["review", "quality", "standards", "security", "testing"],
39
+ "responsibilities": [
40
+ "Review implementations against the architecture",
41
+ "Check for bugs, security issues, and quality",
42
+ "Approve or request changes via submit_review()"
43
+ ],
44
+ "tools_focus": ["request_review", "submit_review", "get_reputation", "advance_workflow"],
45
+ "prompt": "You are a senior reviewer. Review implementations against the architecture. Use submit_review() to approve or request changes. Call verify_and_advance() when done."
46
+ }
9
47
  ],
10
48
  "workflow": {
11
49
  "name": "Feature Dev",
@@ -2,10 +2,48 @@
2
2
  "id": "research-write",
3
3
  "name": "Research & Write",
4
4
  "description": "Researcher gathers info, Writer creates content, Editor polishes. Autonomous: writer starts as soon as research is ready.",
5
+ "category": "content",
6
+ "conversation_mode": "direct",
5
7
  "agents": [
6
- { "name": "Researcher", "role": "Researcher", "skills": ["research", "analysis", "data"], "prompt": "You are a researcher. Gather information on the given topic. Organize findings into a structured research brief. Call verify_and_advance() when done." },
7
- { "name": "Writer", "role": "Writer", "skills": ["writing", "content", "structure"], "prompt": "You are a writer. Write clear, well-structured content based on the research findings. Call verify_and_advance() when done. If editor requests changes, use retry_with_improvement()." },
8
- { "name": "Editor", "role": "Editor", "skills": ["editing", "style", "accuracy"], "prompt": "You are an editor. Review and polish content. Check for clarity, accuracy, and style. Use submit_review() to approve or request revisions. Call verify_and_advance() when done." }
8
+ {
9
+ "name": "Researcher",
10
+ "role": "quality",
11
+ "display_name": "Researcher",
12
+ "skills": ["research", "analysis", "data", "investigation"],
13
+ "responsibilities": [
14
+ "Gather information on the given topic",
15
+ "Organize findings into a structured brief",
16
+ "Store findings in KB for team access"
17
+ ],
18
+ "tools_focus": ["kb_write", "kb_read", "search_messages", "advance_workflow", "share_file"],
19
+ "prompt": "You are a researcher. Gather information on the given topic. Organize findings into a structured research brief. Use kb_write() to store key findings. Call verify_and_advance() when done."
20
+ },
21
+ {
22
+ "name": "Writer",
23
+ "role": "backend",
24
+ "display_name": "Writer",
25
+ "skills": ["writing", "content", "structure", "documentation"],
26
+ "responsibilities": [
27
+ "Write clear, well-structured content from research",
28
+ "Address editor feedback via retry_with_improvement()",
29
+ "Finalize and publish content"
30
+ ],
31
+ "tools_focus": ["update_task", "advance_workflow", "kb_read", "share_file"],
32
+ "prompt": "You are a writer. Write clear, well-structured content based on the research findings. Use kb_read() to access research data. Call verify_and_advance() when done. If editor requests changes, use retry_with_improvement()."
33
+ },
34
+ {
35
+ "name": "Editor",
36
+ "role": "quality",
37
+ "display_name": "Editor",
38
+ "skills": ["editing", "style", "accuracy", "review"],
39
+ "responsibilities": [
40
+ "Review and polish content for clarity and accuracy",
41
+ "Check style, grammar, and factual correctness",
42
+ "Approve or request revisions via submit_review()"
43
+ ],
44
+ "tools_focus": ["request_review", "submit_review", "advance_workflow", "get_reputation"],
45
+ "prompt": "You are an editor. Review and polish content. Check for clarity, accuracy, and style. Use submit_review() to approve or request revisions. Call verify_and_advance() when done."
46
+ }
9
47
  ],
10
48
  "workflow": {
11
49
  "name": "Content Pipeline",