claude-code-swarm 0.3.3 → 0.3.5

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.
Files changed (273) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +22 -1
  3. package/.claude-plugin/run-agent-inbox-mcp.sh +76 -0
  4. package/.claude-plugin/run-minimem-mcp.sh +98 -0
  5. package/.claude-plugin/run-opentasks-mcp.sh +65 -0
  6. package/CLAUDE.md +200 -36
  7. package/README.md +65 -0
  8. package/e2e/helpers/cleanup.mjs +17 -3
  9. package/e2e/helpers/map-mock-server.mjs +201 -25
  10. package/e2e/helpers/sidecar.mjs +222 -0
  11. package/e2e/helpers/workspace.mjs +2 -1
  12. package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
  13. package/e2e/tier6-inbox-mcp.test.mjs +173 -0
  14. package/e2e/tier6-live-agent.test.mjs +759 -0
  15. package/e2e/vitest.config.e2e.mjs +1 -1
  16. package/hooks/hooks.json +15 -8
  17. package/package.json +13 -1
  18. package/references/agent-inbox/CLAUDE.md +151 -0
  19. package/references/agent-inbox/README.md +238 -0
  20. package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
  21. package/references/agent-inbox/docs/DESIGN.md +1156 -0
  22. package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
  23. package/references/agent-inbox/hooks/register-hook.mjs +69 -0
  24. package/references/agent-inbox/package-lock.json +3347 -0
  25. package/references/agent-inbox/package.json +58 -0
  26. package/references/agent-inbox/rules/agent-inbox.md +78 -0
  27. package/references/agent-inbox/src/federation/address.ts +61 -0
  28. package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
  29. package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
  30. package/references/agent-inbox/src/federation/index.ts +6 -0
  31. package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
  32. package/references/agent-inbox/src/federation/trust.ts +71 -0
  33. package/references/agent-inbox/src/index.ts +390 -0
  34. package/references/agent-inbox/src/ipc/ipc-server.ts +207 -0
  35. package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
  36. package/references/agent-inbox/src/map/map-client.ts +414 -0
  37. package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
  38. package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
  39. package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
  40. package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
  41. package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
  42. package/references/agent-inbox/src/push/notifier.ts +233 -0
  43. package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
  44. package/references/agent-inbox/src/router/message-router.ts +175 -0
  45. package/references/agent-inbox/src/storage/interface.ts +48 -0
  46. package/references/agent-inbox/src/storage/memory.ts +145 -0
  47. package/references/agent-inbox/src/storage/sqlite.ts +671 -0
  48. package/references/agent-inbox/src/traceability/traceability.ts +183 -0
  49. package/references/agent-inbox/src/types.ts +303 -0
  50. package/references/agent-inbox/test/federation/address.test.ts +101 -0
  51. package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
  52. package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
  53. package/references/agent-inbox/test/federation/integration.test.ts +857 -0
  54. package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
  55. package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
  56. package/references/agent-inbox/test/federation/trust.test.ts +89 -0
  57. package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
  58. package/references/agent-inbox/test/ipc-server.test.ts +197 -0
  59. package/references/agent-inbox/test/mail-server.test.ts +285 -0
  60. package/references/agent-inbox/test/map-client.test.ts +408 -0
  61. package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
  62. package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
  63. package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
  64. package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
  65. package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
  66. package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
  67. package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
  68. package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
  69. package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
  70. package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
  71. package/references/agent-inbox/test/message-router.test.ts +184 -0
  72. package/references/agent-inbox/test/push-notifier.test.ts +139 -0
  73. package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
  74. package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
  75. package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
  76. package/references/agent-inbox/test/storage.test.ts +196 -0
  77. package/references/agent-inbox/test/traceability.test.ts +123 -0
  78. package/references/agent-inbox/test/wake.test.ts +330 -0
  79. package/references/agent-inbox/tsconfig.json +20 -0
  80. package/references/agent-inbox/tsup.config.ts +10 -0
  81. package/references/agent-inbox/vitest.config.ts +8 -0
  82. package/references/minimem/.claude/settings.json +7 -0
  83. package/references/minimem/.sudocode/issues.jsonl +18 -0
  84. package/references/minimem/.sudocode/specs.jsonl +1 -0
  85. package/references/minimem/CLAUDE.md +329 -0
  86. package/references/minimem/README.md +565 -0
  87. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  88. package/references/minimem/claude-plugin/.mcp.json +7 -0
  89. package/references/minimem/claude-plugin/README.md +158 -0
  90. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  91. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  92. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  93. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  94. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  95. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  96. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  97. package/references/minimem/media/banner.png +0 -0
  98. package/references/minimem/package-lock.json +5373 -0
  99. package/references/minimem/package.json +76 -0
  100. package/references/minimem/scripts/postbuild.js +49 -0
  101. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  102. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  103. package/references/minimem/src/__tests__/helpers.ts +199 -0
  104. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  105. package/references/minimem/src/__tests__/knowledge-frontmatter.test.ts +148 -0
  106. package/references/minimem/src/__tests__/knowledge.test.ts +148 -0
  107. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  108. package/references/minimem/src/__tests__/session.test.ts +190 -0
  109. package/references/minimem/src/cli/__tests__/commands.test.ts +760 -0
  110. package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -0
  111. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  112. package/references/minimem/src/cli/commands/append.ts +76 -0
  113. package/references/minimem/src/cli/commands/config.ts +262 -0
  114. package/references/minimem/src/cli/commands/conflicts.ts +415 -0
  115. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  116. package/references/minimem/src/cli/commands/index.ts +12 -0
  117. package/references/minimem/src/cli/commands/init.ts +166 -0
  118. package/references/minimem/src/cli/commands/mcp.ts +221 -0
  119. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  120. package/references/minimem/src/cli/commands/search.ts +223 -0
  121. package/references/minimem/src/cli/commands/status.ts +84 -0
  122. package/references/minimem/src/cli/commands/store.ts +189 -0
  123. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  124. package/references/minimem/src/cli/commands/sync.ts +70 -0
  125. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  126. package/references/minimem/src/cli/config.ts +611 -0
  127. package/references/minimem/src/cli/index.ts +299 -0
  128. package/references/minimem/src/cli/shared.ts +189 -0
  129. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  130. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  131. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  132. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  133. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  134. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  135. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  136. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  137. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  138. package/references/minimem/src/cli/sync/central.ts +292 -0
  139. package/references/minimem/src/cli/sync/conflicts.ts +205 -0
  140. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  141. package/references/minimem/src/cli/sync/detection.ts +138 -0
  142. package/references/minimem/src/cli/sync/index.ts +107 -0
  143. package/references/minimem/src/cli/sync/operations.ts +373 -0
  144. package/references/minimem/src/cli/sync/registry.ts +279 -0
  145. package/references/minimem/src/cli/sync/state.ts +358 -0
  146. package/references/minimem/src/cli/sync/validation.ts +206 -0
  147. package/references/minimem/src/cli/sync/watcher.ts +237 -0
  148. package/references/minimem/src/cli/version.ts +34 -0
  149. package/references/minimem/src/core/index.ts +9 -0
  150. package/references/minimem/src/core/indexer.ts +628 -0
  151. package/references/minimem/src/core/searcher.ts +221 -0
  152. package/references/minimem/src/db/schema.ts +183 -0
  153. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  154. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  155. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  156. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  157. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  158. package/references/minimem/src/index.ts +132 -0
  159. package/references/minimem/src/internal.ts +299 -0
  160. package/references/minimem/src/minimem.ts +1291 -0
  161. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  162. package/references/minimem/src/search/graph.ts +234 -0
  163. package/references/minimem/src/search/hybrid.ts +151 -0
  164. package/references/minimem/src/search/search.ts +256 -0
  165. package/references/minimem/src/server/__tests__/mcp.test.ts +347 -0
  166. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  167. package/references/minimem/src/server/mcp.ts +326 -0
  168. package/references/minimem/src/server/tools.ts +720 -0
  169. package/references/minimem/src/session.ts +460 -0
  170. package/references/minimem/src/store/__tests__/manifest.test.ts +177 -0
  171. package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
  172. package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
  173. package/references/minimem/src/store/index.ts +27 -0
  174. package/references/minimem/src/store/manifest.ts +203 -0
  175. package/references/minimem/src/store/materialize.ts +185 -0
  176. package/references/minimem/src/store/store-graph.ts +252 -0
  177. package/references/minimem/tsconfig.json +19 -0
  178. package/references/minimem/tsup.config.ts +26 -0
  179. package/references/minimem/vitest.config.ts +29 -0
  180. package/references/openteams/src/cli/generate.ts +23 -1
  181. package/references/openteams/src/generators/agent-prompt-generator.test.ts +94 -0
  182. package/references/openteams/src/generators/agent-prompt-generator.ts +42 -13
  183. package/references/openteams/src/generators/package-generator.ts +9 -1
  184. package/references/openteams/src/generators/skill-generator.test.ts +28 -0
  185. package/references/openteams/src/generators/skill-generator.ts +10 -4
  186. package/references/skill-tree/.claude/settings.json +6 -0
  187. package/references/skill-tree/.sudocode/issues.jsonl +19 -0
  188. package/references/skill-tree/.sudocode/specs.jsonl +3 -0
  189. package/references/skill-tree/CLAUDE.md +132 -0
  190. package/references/skill-tree/README.md +396 -0
  191. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  192. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  193. package/references/skill-tree/docs/TODOS.md +91 -0
  194. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  195. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  196. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  197. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  198. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  199. package/references/skill-tree/docs/scraper/README.md +170 -0
  200. package/references/skill-tree/examples/basic-usage.ts +157 -0
  201. package/references/skill-tree/package-lock.json +1852 -0
  202. package/references/skill-tree/package.json +66 -0
  203. package/references/skill-tree/plan.md +78 -0
  204. package/references/skill-tree/scraper/README.md +123 -0
  205. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  206. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  207. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  208. package/references/skill-tree/scraper/package-lock.json +6329 -0
  209. package/references/skill-tree/scraper/package.json +68 -0
  210. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  211. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  212. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  213. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  214. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  215. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  216. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  217. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  218. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  219. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  220. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  221. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  222. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  223. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  224. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  225. package/references/skill-tree/test/run-all.ts +106 -0
  226. package/references/skill-tree/test/utils.ts +128 -0
  227. package/references/skill-tree/vitest.config.ts +16 -0
  228. package/references/swarmkit/src/commands/init/phases/configure.ts +0 -22
  229. package/references/swarmkit/src/commands/init/phases/global-setup.ts +5 -3
  230. package/references/swarmkit/src/commands/init/wizard.ts +2 -2
  231. package/references/swarmkit/src/packages/setup.test.ts +53 -7
  232. package/references/swarmkit/src/packages/setup.ts +37 -1
  233. package/scripts/bootstrap.mjs +26 -1
  234. package/scripts/generate-agents.mjs +5 -1
  235. package/scripts/map-hook.mjs +97 -64
  236. package/scripts/map-sidecar.mjs +179 -25
  237. package/scripts/team-loader.mjs +12 -41
  238. package/skills/swarm/SKILL.md +89 -25
  239. package/src/__tests__/agent-generator.test.mjs +6 -13
  240. package/src/__tests__/bootstrap.test.mjs +124 -1
  241. package/src/__tests__/config.test.mjs +200 -27
  242. package/src/__tests__/e2e-live-map.test.mjs +536 -0
  243. package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
  244. package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
  245. package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
  246. package/src/__tests__/helpers.mjs +13 -0
  247. package/src/__tests__/inbox.test.mjs +22 -89
  248. package/src/__tests__/index.test.mjs +35 -9
  249. package/src/__tests__/integration.test.mjs +513 -0
  250. package/src/__tests__/map-events.test.mjs +514 -150
  251. package/src/__tests__/mesh-connection.test.mjs +308 -0
  252. package/src/__tests__/opentasks-client.test.mjs +517 -0
  253. package/src/__tests__/paths.test.mjs +185 -41
  254. package/src/__tests__/sidecar-client.test.mjs +35 -0
  255. package/src/__tests__/sidecar-server.test.mjs +124 -0
  256. package/src/__tests__/skilltree-client.test.mjs +80 -0
  257. package/src/agent-generator.mjs +104 -33
  258. package/src/bootstrap.mjs +150 -10
  259. package/src/config.mjs +81 -17
  260. package/src/context-output.mjs +58 -8
  261. package/src/inbox.mjs +9 -54
  262. package/src/index.mjs +39 -8
  263. package/src/map-connection.mjs +4 -3
  264. package/src/map-events.mjs +350 -80
  265. package/src/mesh-connection.mjs +148 -0
  266. package/src/opentasks-client.mjs +269 -0
  267. package/src/paths.mjs +182 -27
  268. package/src/sessionlog.mjs +14 -9
  269. package/src/sidecar-client.mjs +81 -27
  270. package/src/sidecar-server.mjs +175 -16
  271. package/src/skilltree-client.mjs +173 -0
  272. package/src/template.mjs +68 -4
  273. package/vitest.config.mjs +1 -0
@@ -12,9 +12,14 @@ import fs from "fs";
12
12
  */
13
13
  export function formatBootstrapContext({
14
14
  template,
15
+ team,
15
16
  mapStatus,
16
17
  sessionlogStatus,
17
18
  sessionlogSync,
19
+ opentasksStatus,
20
+ inboxEnabled,
21
+ minimemStatus,
22
+ skilltreeStatus,
18
23
  }) {
19
24
  const lines = ["## Claude Code Swarm", ""];
20
25
 
@@ -40,7 +45,45 @@ export function formatBootstrapContext({
40
45
  }
41
46
  }
42
47
 
48
+ if (opentasksStatus) {
49
+ lines.push(`Opentasks: ${opentasksStatus}`);
50
+ if (opentasksStatus === "connected" || opentasksStatus === "enabled") {
51
+ lines.push("Use **opentasks MCP tools** (opentasks__create_task, opentasks__update_task, opentasks__list_tasks) for task management instead of native TaskCreate/TaskUpdate/TaskList.");
52
+ }
53
+ }
54
+
55
+ if (inboxEnabled) {
56
+ lines.push("Inbox: enabled (agent-inbox messaging)");
57
+ }
58
+
59
+ if (minimemStatus && minimemStatus !== "disabled") {
60
+ lines.push(`Memory: ${minimemStatus}`);
61
+ if (minimemStatus === "ready") {
62
+ lines.push("Use **minimem MCP tools** (minimem__memory_search, minimem__knowledge_search) to recall past decisions and context.");
63
+ }
64
+ }
65
+
66
+ if (skilltreeStatus && skilltreeStatus !== "disabled") {
67
+ lines.push(`Skills: ${skilltreeStatus} (per-role loadouts from team.yaml)`);
68
+ }
69
+
43
70
  lines.push("");
71
+
72
+ if (team) {
73
+ // Embed the SKILL.md content directly so the agent has the topology immediately
74
+ const skillPath = `${team.outputDir}/SKILL.md`;
75
+ try {
76
+ const skillContent = fs.readFileSync(skillPath, "utf-8");
77
+ lines.push(skillContent);
78
+ lines.push("");
79
+ } catch {
80
+ // SKILL.md not readable — just show the path
81
+ }
82
+
83
+ lines.push(`Agent prompts: \`${team.outputDir}/agents/<role>.md\``);
84
+ lines.push("");
85
+ }
86
+
44
87
  lines.push(
45
88
  "Use `/swarm` to launch the team (creates a native Claude Code team)."
46
89
  );
@@ -53,7 +96,7 @@ export function formatBootstrapContext({
53
96
  /**
54
97
  * Format the team-loaded context output.
55
98
  */
56
- export function formatTeamLoadedContext(generatedDir, templatePath, teamName) {
99
+ export function formatTeamLoadedContext(generatedDir, templatePath, teamName, { opentasksStatus } = {}) {
57
100
  const lines = ["## Claude Code Swarm — Team Loaded", ""];
58
101
 
59
102
  // Include the catalog if available
@@ -78,13 +121,13 @@ export function formatTeamLoadedContext(generatedDir, templatePath, teamName) {
78
121
  "1. Call **TeamCreate** to set up a native Claude Code team"
79
122
  );
80
123
  lines.push(
81
- "2. Spawn a **coordinator agent** (the root role) as a team member with `team_name`"
124
+ "2. Create tasks via **TaskCreate** based on the user's goal"
82
125
  );
83
126
  lines.push(
84
- "3. The coordinator creates tasks via **TaskCreate** and spawns agents with `team_name`"
127
+ "3. Spawn agents directly as teammates (only you can spawn teammates cannot spawn other teammates)"
85
128
  );
86
129
  lines.push(
87
- "4. All agents coordinate via **SendMessage** and track progress via **TaskUpdate**"
130
+ "4. Coordinate the team via **SendMessage** and track progress via **TaskUpdate**"
88
131
  );
89
132
  lines.push("");
90
133
  lines.push(
@@ -96,10 +139,17 @@ export function formatTeamLoadedContext(generatedDir, templatePath, teamName) {
96
139
  lines.push("");
97
140
  lines.push("### Coordination");
98
141
  lines.push("");
99
- lines.push("This team uses Claude Code's native team features:");
100
- lines.push("- **TaskCreate/TaskUpdate** for task lifecycle");
101
- lines.push("- **SendMessage** for agent-to-agent communication");
102
- lines.push("- **TeamCreate** for team setup");
142
+ if (opentasksStatus === "connected" || opentasksStatus === "enabled") {
143
+ lines.push("This team uses **opentasks MCP tools** for task management:");
144
+ lines.push("- **opentasks__create_task / opentasks__update_task / opentasks__list_tasks** for task lifecycle");
145
+ lines.push("- **SendMessage** for agent-to-agent communication");
146
+ lines.push("- **TeamCreate** for team setup");
147
+ } else {
148
+ lines.push("This team uses Claude Code's native team features:");
149
+ lines.push("- **TaskCreate/TaskUpdate** for task lifecycle");
150
+ lines.push("- **SendMessage** for agent-to-agent communication");
151
+ lines.push("- **TeamCreate** for team setup");
152
+ }
103
153
  lines.push("");
104
154
  lines.push(
105
155
  "**MAP (if enabled):** Lifecycle events are emitted for external observability."
package/src/inbox.mjs CHANGED
@@ -1,56 +1,9 @@
1
1
  /**
2
- * inbox.mjs — MAP inbox management for claude-code-swarm
2
+ * inbox.mjs — Inbox formatting for claude-code-swarm
3
3
  *
4
- * Handles reading, formatting, clearing, and writing the inbox.jsonl file
5
- * that bridges MAP messages into Claude's context.
4
+ * Provides markdown formatting for messages retrieved via agent-inbox IPC.
6
5
  */
7
6
 
8
- import fs from "fs";
9
- import { INBOX_PATH } from "./paths.mjs";
10
-
11
- /**
12
- * Read and parse all messages from the inbox.
13
- * Returns an array of parsed message objects. Never throws.
14
- */
15
- export function readInbox(inboxPath = INBOX_PATH) {
16
- try {
17
- const content = fs.readFileSync(inboxPath, "utf-8").trim();
18
- if (!content) return [];
19
-
20
- const messages = [];
21
- for (const line of content.split("\n")) {
22
- if (!line.trim()) continue;
23
- try {
24
- messages.push(JSON.parse(line));
25
- } catch {
26
- // Skip malformed lines
27
- }
28
- }
29
- return messages;
30
- } catch {
31
- return [];
32
- }
33
- }
34
-
35
- /**
36
- * Clear the inbox file.
37
- */
38
- export function clearInbox(inboxPath = INBOX_PATH) {
39
- try {
40
- fs.writeFileSync(inboxPath, "");
41
- } catch {
42
- // Non-critical
43
- }
44
- }
45
-
46
- /**
47
- * Append a message to the inbox as an NDJSON line.
48
- * Used by the sidecar to write incoming MAP messages.
49
- */
50
- export function writeToInbox(message, inboxPath = INBOX_PATH) {
51
- fs.appendFileSync(inboxPath, JSON.stringify(message) + "\n");
52
- }
53
-
54
7
  /**
55
8
  * Format inbox messages as markdown for injection into Claude's context.
56
9
  * Returns empty string if no messages.
@@ -65,17 +18,19 @@ export function formatInboxAsMarkdown(messages) {
65
18
  ];
66
19
 
67
20
  for (const msg of messages) {
68
- const from = msg.from || "unknown";
69
- const age = msg.timestamp
70
- ? formatAge(now - new Date(msg.timestamp).getTime())
21
+ const from = msg.from || msg.sender_id || "unknown";
22
+ const age = msg.timestamp || msg.created_at
23
+ ? formatAge(now - new Date(msg.timestamp || msg.created_at).getTime())
71
24
  : "unknown";
72
- const priority = msg.meta?.priority;
73
- const payload = msg.payload || {};
25
+ const priority = msg.meta?.priority || msg.importance;
26
+ const payload = msg.payload || msg.content || {};
74
27
 
75
28
  lines.push(`**From ${from}** (${age} ago)`);
76
29
 
77
30
  if (typeof payload === "string") {
78
31
  lines.push(`> ${payload}`);
32
+ } else if (payload.type === "text" && payload.text) {
33
+ lines.push(`> ${payload.text}`);
79
34
  } else if (payload.type) {
80
35
  lines.push(
81
36
  `> [${payload.type}] ${payload.description || payload.message || JSON.stringify(payload)}`
package/src/index.mjs CHANGED
@@ -3,33 +3,41 @@
3
3
  */
4
4
 
5
5
  // Config
6
- export { readConfig, resolveScope, resolveTeamName, DEFAULTS } from "./config.mjs";
6
+ export { readConfig, resolveScope, resolveTeamName, resolveMapServer, DEFAULTS } from "./config.mjs";
7
7
 
8
8
  // Paths
9
9
  export {
10
10
  SWARM_DIR,
11
11
  SOCKET_PATH,
12
- INBOX_PATH,
13
12
  PID_PATH,
14
13
  ROLES_PATH,
15
14
  SESSIONLOG_STATE_PATH,
16
15
  CONFIG_PATH,
16
+ GLOBAL_CONFIG_DIR,
17
+ GLOBAL_CONFIG_PATH,
17
18
  SESSIONLOG_DIR,
18
19
  TMP_DIR,
19
20
  TEAMS_DIR,
20
21
  MAP_DIR,
21
22
  SIDECAR_LOG_PATH,
23
+ IS_GLOBAL_PATHS,
24
+ OPENTASKS_DIR,
25
+ OPENTASKS_SYNC_STATE_PATH,
22
26
  teamDir,
23
27
  ensureSwarmDir,
24
28
  ensureMapDir,
29
+ ensureOpentasksDir,
25
30
  pluginDir,
31
+ sessionPaths,
32
+ ensureSessionDir,
33
+ listSessionDirs,
26
34
  } from "./paths.mjs";
27
35
 
28
36
  // Roles
29
37
  export { readRoles, matchRole, writeRoles } from "./roles.mjs";
30
38
 
31
39
  // Inbox
32
- export { readInbox, clearInbox, writeToInbox, formatInboxAsMarkdown, formatAge } from "./inbox.mjs";
40
+ export { formatInboxAsMarkdown, formatAge } from "./inbox.mjs";
33
41
 
34
42
  // Context output
35
43
  export {
@@ -42,6 +50,9 @@ export {
42
50
  // MAP connection
43
51
  export { connectToMAP, fireAndForget, fireAndForgetTrajectory } from "./map-connection.mjs";
44
52
 
53
+ // Mesh connection
54
+ export { createMeshPeer, createMeshInbox, meshFireAndForget } from "./mesh-connection.mjs";
55
+
45
56
  // Sidecar client
46
57
  export { sendToSidecar, isSidecarAlive, startSidecar, killSidecar, ensureSidecar } from "./sidecar-client.mjs";
47
58
 
@@ -52,14 +63,17 @@ export { createSocketServer, createCommandHandler, respond } from "./sidecar-ser
52
63
  export {
53
64
  sendCommand,
54
65
  emitPayload,
55
- buildSpawnCommand,
56
- buildDoneCommand,
57
66
  buildSubagentSpawnCommand,
58
67
  buildSubagentDoneCommand,
59
68
  buildStateCommand,
60
- buildTaskDispatchedPayload,
61
- buildTaskCompletedPayload,
62
- buildTaskStatusPayload,
69
+ handleTaskCreated,
70
+ handleTaskCompleted,
71
+ handleTaskStatusCompleted,
72
+ buildTaskSyncPayload,
73
+ buildOpentasksBridgeCommands,
74
+ mapNativeTaskStatus,
75
+ handleNativeTaskCreatedEvent,
76
+ handleNativeTaskUpdatedEvent,
63
77
  } from "./map-events.mjs";
64
78
 
65
79
  // Sessionlog
@@ -76,6 +90,7 @@ export {
76
90
  listAvailableTemplates,
77
91
  readTeamManifest,
78
92
  generateTeamArtifacts,
93
+ loadTeam,
79
94
  } from "./template.mjs";
80
95
 
81
96
  // Agent generator
@@ -94,5 +109,21 @@ export {
94
109
  resolveSwarmkit,
95
110
  } from "./swarmkit-resolver.mjs";
96
111
 
112
+ // opentasks client
113
+ export {
114
+ findSocketPath,
115
+ rpcRequest,
116
+ isDaemonAlive,
117
+ ensureDaemon,
118
+ pushSyncEvent,
119
+ } from "./opentasks-client.mjs";
120
+
121
+ // Skill-tree client
122
+ export {
123
+ parseSkillTreeExtension,
124
+ compileRoleLoadout,
125
+ compileAllRoleLoadouts,
126
+ } from "./skilltree-client.mjs";
127
+
97
128
  // Bootstrap
98
129
  export { bootstrap } from "./bootstrap.mjs";
@@ -5,7 +5,7 @@
5
5
  * for when the sidecar is unavailable.
6
6
  */
7
7
 
8
- import { resolveScope, resolveTeamName, DEFAULTS } from "./config.mjs";
8
+ import { resolveScope, resolveTeamName, resolveMapServer, DEFAULTS } from "./config.mjs";
9
9
 
10
10
  /**
11
11
  * Connect to a MAP server as an agent.
@@ -24,6 +24,7 @@ export async function connectToMAP({ server, scope, systemId, onMessage }) {
24
24
  scopes: [scope],
25
25
  capabilities: {
26
26
  trajectory: { canReport: true },
27
+ tasks: { canCreate: true, canAssign: true, canUpdate: true, canList: true },
27
28
  },
28
29
  metadata: {
29
30
  systemId,
@@ -60,7 +61,7 @@ export async function connectToMAP({ server, scope, systemId, onMessage }) {
60
61
  export async function fireAndForget(config, event) {
61
62
  try {
62
63
  const { AgentConnection } = await import("@multi-agent-protocol/sdk");
63
- const server = config.map?.server || DEFAULTS.mapServer;
64
+ const server = resolveMapServer(config);
64
65
  const scope = resolveScope(config);
65
66
  const teamName = resolveTeamName(config);
66
67
 
@@ -84,7 +85,7 @@ export async function fireAndForget(config, event) {
84
85
  export async function fireAndForgetTrajectory(config, checkpoint) {
85
86
  try {
86
87
  const { AgentConnection } = await import("@multi-agent-protocol/sdk");
87
- const server = config.map?.server || DEFAULTS.mapServer;
88
+ const server = resolveMapServer(config);
88
89
  const scope = resolveScope(config);
89
90
  const teamName = resolveTeamName(config);
90
91