cowork-os 0.3.21

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 (526) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1638 -0
  3. package/bin/cowork.js +42 -0
  4. package/build/entitlements.mac.plist +16 -0
  5. package/build/icon.icns +0 -0
  6. package/build/icon.png +0 -0
  7. package/dist/electron/electron/activity/ActivityRepository.js +190 -0
  8. package/dist/electron/electron/agent/browser/browser-service.js +639 -0
  9. package/dist/electron/electron/agent/context-manager.js +225 -0
  10. package/dist/electron/electron/agent/custom-skill-loader.js +566 -0
  11. package/dist/electron/electron/agent/daemon.js +975 -0
  12. package/dist/electron/electron/agent/executor.js +3561 -0
  13. package/dist/electron/electron/agent/llm/anthropic-provider.js +155 -0
  14. package/dist/electron/electron/agent/llm/bedrock-provider.js +202 -0
  15. package/dist/electron/electron/agent/llm/gemini-provider.js +375 -0
  16. package/dist/electron/electron/agent/llm/index.js +34 -0
  17. package/dist/electron/electron/agent/llm/ollama-provider.js +263 -0
  18. package/dist/electron/electron/agent/llm/openai-oauth.js +101 -0
  19. package/dist/electron/electron/agent/llm/openai-provider.js +657 -0
  20. package/dist/electron/electron/agent/llm/openrouter-provider.js +232 -0
  21. package/dist/electron/electron/agent/llm/pricing.js +160 -0
  22. package/dist/electron/electron/agent/llm/provider-factory.js +880 -0
  23. package/dist/electron/electron/agent/llm/types.js +178 -0
  24. package/dist/electron/electron/agent/queue-manager.js +378 -0
  25. package/dist/electron/electron/agent/sandbox/docker-sandbox.js +402 -0
  26. package/dist/electron/electron/agent/sandbox/macos-sandbox.js +407 -0
  27. package/dist/electron/electron/agent/sandbox/runner.js +410 -0
  28. package/dist/electron/electron/agent/sandbox/sandbox-factory.js +228 -0
  29. package/dist/electron/electron/agent/sandbox/security-utils.js +258 -0
  30. package/dist/electron/electron/agent/search/brave-provider.js +119 -0
  31. package/dist/electron/electron/agent/search/google-provider.js +100 -0
  32. package/dist/electron/electron/agent/search/index.js +28 -0
  33. package/dist/electron/electron/agent/search/provider-factory.js +395 -0
  34. package/dist/electron/electron/agent/search/serpapi-provider.js +112 -0
  35. package/dist/electron/electron/agent/search/tavily-provider.js +90 -0
  36. package/dist/electron/electron/agent/search/types.js +40 -0
  37. package/dist/electron/electron/agent/security/index.js +12 -0
  38. package/dist/electron/electron/agent/security/input-sanitizer.js +303 -0
  39. package/dist/electron/electron/agent/security/output-filter.js +217 -0
  40. package/dist/electron/electron/agent/skill-eligibility.js +281 -0
  41. package/dist/electron/electron/agent/skill-registry.js +396 -0
  42. package/dist/electron/electron/agent/skills/document.js +878 -0
  43. package/dist/electron/electron/agent/skills/image-generator.js +225 -0
  44. package/dist/electron/electron/agent/skills/organizer.js +141 -0
  45. package/dist/electron/electron/agent/skills/presentation.js +367 -0
  46. package/dist/electron/electron/agent/skills/spreadsheet.js +165 -0
  47. package/dist/electron/electron/agent/tools/browser-tools.js +523 -0
  48. package/dist/electron/electron/agent/tools/builtin-settings.js +384 -0
  49. package/dist/electron/electron/agent/tools/canvas-tools.js +530 -0
  50. package/dist/electron/electron/agent/tools/cron-tools.js +577 -0
  51. package/dist/electron/electron/agent/tools/edit-tools.js +194 -0
  52. package/dist/electron/electron/agent/tools/file-tools.js +719 -0
  53. package/dist/electron/electron/agent/tools/glob-tools.js +283 -0
  54. package/dist/electron/electron/agent/tools/grep-tools.js +387 -0
  55. package/dist/electron/electron/agent/tools/image-tools.js +111 -0
  56. package/dist/electron/electron/agent/tools/mention-tools.js +282 -0
  57. package/dist/electron/electron/agent/tools/node-tools.js +476 -0
  58. package/dist/electron/electron/agent/tools/registry.js +2719 -0
  59. package/dist/electron/electron/agent/tools/search-tools.js +91 -0
  60. package/dist/electron/electron/agent/tools/shell-tools.js +574 -0
  61. package/dist/electron/electron/agent/tools/skill-tools.js +274 -0
  62. package/dist/electron/electron/agent/tools/system-tools.js +578 -0
  63. package/dist/electron/electron/agent/tools/web-fetch-tools.js +444 -0
  64. package/dist/electron/electron/agent/tools/x-tools.js +264 -0
  65. package/dist/electron/electron/agents/AgentRoleRepository.js +420 -0
  66. package/dist/electron/electron/agents/HeartbeatService.js +356 -0
  67. package/dist/electron/electron/agents/MentionRepository.js +197 -0
  68. package/dist/electron/electron/agents/TaskSubscriptionRepository.js +168 -0
  69. package/dist/electron/electron/agents/WorkingStateRepository.js +229 -0
  70. package/dist/electron/electron/canvas/canvas-manager.js +714 -0
  71. package/dist/electron/electron/canvas/canvas-preload.js +53 -0
  72. package/dist/electron/electron/canvas/canvas-protocol.js +195 -0
  73. package/dist/electron/electron/canvas/canvas-store.js +174 -0
  74. package/dist/electron/electron/canvas/index.js +13 -0
  75. package/dist/electron/electron/control-plane/client.js +364 -0
  76. package/dist/electron/electron/control-plane/handlers.js +572 -0
  77. package/dist/electron/electron/control-plane/index.js +41 -0
  78. package/dist/electron/electron/control-plane/node-manager.js +264 -0
  79. package/dist/electron/electron/control-plane/protocol.js +194 -0
  80. package/dist/electron/electron/control-plane/remote-client.js +437 -0
  81. package/dist/electron/electron/control-plane/server.js +640 -0
  82. package/dist/electron/electron/control-plane/settings.js +369 -0
  83. package/dist/electron/electron/control-plane/ssh-tunnel.js +549 -0
  84. package/dist/electron/electron/cron/index.js +30 -0
  85. package/dist/electron/electron/cron/schedule.js +190 -0
  86. package/dist/electron/electron/cron/service.js +614 -0
  87. package/dist/electron/electron/cron/store.js +155 -0
  88. package/dist/electron/electron/cron/types.js +82 -0
  89. package/dist/electron/electron/cron/webhook.js +258 -0
  90. package/dist/electron/electron/database/SecureSettingsRepository.js +444 -0
  91. package/dist/electron/electron/database/TaskLabelRepository.js +120 -0
  92. package/dist/electron/electron/database/repositories.js +1781 -0
  93. package/dist/electron/electron/database/schema.js +978 -0
  94. package/dist/electron/electron/extensions/index.js +33 -0
  95. package/dist/electron/electron/extensions/loader.js +313 -0
  96. package/dist/electron/electron/extensions/registry.js +485 -0
  97. package/dist/electron/electron/extensions/types.js +11 -0
  98. package/dist/electron/electron/gateway/channel-registry.js +1102 -0
  99. package/dist/electron/electron/gateway/channels/bluebubbles-client.js +479 -0
  100. package/dist/electron/electron/gateway/channels/bluebubbles.js +432 -0
  101. package/dist/electron/electron/gateway/channels/discord.js +975 -0
  102. package/dist/electron/electron/gateway/channels/email-client.js +593 -0
  103. package/dist/electron/electron/gateway/channels/email.js +443 -0
  104. package/dist/electron/electron/gateway/channels/google-chat.js +631 -0
  105. package/dist/electron/electron/gateway/channels/imessage-client.js +363 -0
  106. package/dist/electron/electron/gateway/channels/imessage.js +465 -0
  107. package/dist/electron/electron/gateway/channels/index.js +36 -0
  108. package/dist/electron/electron/gateway/channels/line-client.js +470 -0
  109. package/dist/electron/electron/gateway/channels/line.js +479 -0
  110. package/dist/electron/electron/gateway/channels/matrix-client.js +432 -0
  111. package/dist/electron/electron/gateway/channels/matrix.js +592 -0
  112. package/dist/electron/electron/gateway/channels/mattermost-client.js +394 -0
  113. package/dist/electron/electron/gateway/channels/mattermost.js +496 -0
  114. package/dist/electron/electron/gateway/channels/signal-client.js +500 -0
  115. package/dist/electron/electron/gateway/channels/signal.js +582 -0
  116. package/dist/electron/electron/gateway/channels/slack.js +415 -0
  117. package/dist/electron/electron/gateway/channels/teams.js +596 -0
  118. package/dist/electron/electron/gateway/channels/telegram.js +1390 -0
  119. package/dist/electron/electron/gateway/channels/twitch-client.js +502 -0
  120. package/dist/electron/electron/gateway/channels/twitch.js +396 -0
  121. package/dist/electron/electron/gateway/channels/types.js +8 -0
  122. package/dist/electron/electron/gateway/channels/whatsapp.js +953 -0
  123. package/dist/electron/electron/gateway/context-policy.js +268 -0
  124. package/dist/electron/electron/gateway/index.js +1063 -0
  125. package/dist/electron/electron/gateway/infrastructure.js +496 -0
  126. package/dist/electron/electron/gateway/router.js +2700 -0
  127. package/dist/electron/electron/gateway/security.js +375 -0
  128. package/dist/electron/electron/gateway/session.js +115 -0
  129. package/dist/electron/electron/gateway/tunnel.js +503 -0
  130. package/dist/electron/electron/guardrails/guardrail-manager.js +348 -0
  131. package/dist/electron/electron/hooks/gmail-watcher.js +300 -0
  132. package/dist/electron/electron/hooks/index.js +46 -0
  133. package/dist/electron/electron/hooks/mappings.js +381 -0
  134. package/dist/electron/electron/hooks/server.js +480 -0
  135. package/dist/electron/electron/hooks/settings.js +447 -0
  136. package/dist/electron/electron/hooks/types.js +41 -0
  137. package/dist/electron/electron/ipc/canvas-handlers.js +158 -0
  138. package/dist/electron/electron/ipc/handlers.js +3138 -0
  139. package/dist/electron/electron/ipc/mission-control-handlers.js +141 -0
  140. package/dist/electron/electron/main.js +448 -0
  141. package/dist/electron/electron/mcp/client/MCPClientManager.js +330 -0
  142. package/dist/electron/electron/mcp/client/MCPServerConnection.js +437 -0
  143. package/dist/electron/electron/mcp/client/transports/SSETransport.js +304 -0
  144. package/dist/electron/electron/mcp/client/transports/StdioTransport.js +307 -0
  145. package/dist/electron/electron/mcp/client/transports/WebSocketTransport.js +329 -0
  146. package/dist/electron/electron/mcp/host/MCPHostServer.js +354 -0
  147. package/dist/electron/electron/mcp/host/ToolAdapter.js +100 -0
  148. package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +497 -0
  149. package/dist/electron/electron/mcp/settings.js +446 -0
  150. package/dist/electron/electron/mcp/types.js +59 -0
  151. package/dist/electron/electron/memory/MemoryService.js +435 -0
  152. package/dist/electron/electron/notifications/index.js +17 -0
  153. package/dist/electron/electron/notifications/service.js +118 -0
  154. package/dist/electron/electron/notifications/store.js +144 -0
  155. package/dist/electron/electron/preload.js +842 -0
  156. package/dist/electron/electron/reports/StandupReportService.js +272 -0
  157. package/dist/electron/electron/security/concurrency.js +293 -0
  158. package/dist/electron/electron/security/index.js +15 -0
  159. package/dist/electron/electron/security/policy-manager.js +435 -0
  160. package/dist/electron/electron/settings/appearance-manager.js +193 -0
  161. package/dist/electron/electron/settings/personality-manager.js +724 -0
  162. package/dist/electron/electron/settings/x-manager.js +58 -0
  163. package/dist/electron/electron/tailscale/exposure.js +188 -0
  164. package/dist/electron/electron/tailscale/index.js +28 -0
  165. package/dist/electron/electron/tailscale/settings.js +205 -0
  166. package/dist/electron/electron/tailscale/tailscale.js +355 -0
  167. package/dist/electron/electron/tray/QuickInputWindow.js +568 -0
  168. package/dist/electron/electron/tray/TrayManager.js +895 -0
  169. package/dist/electron/electron/tray/index.js +9 -0
  170. package/dist/electron/electron/updater/index.js +6 -0
  171. package/dist/electron/electron/updater/update-manager.js +418 -0
  172. package/dist/electron/electron/utils/env-migration.js +209 -0
  173. package/dist/electron/electron/utils/process.js +102 -0
  174. package/dist/electron/electron/utils/rate-limiter.js +104 -0
  175. package/dist/electron/electron/utils/validation.js +419 -0
  176. package/dist/electron/electron/utils/x-cli.js +177 -0
  177. package/dist/electron/electron/voice/VoiceService.js +507 -0
  178. package/dist/electron/electron/voice/index.js +14 -0
  179. package/dist/electron/electron/voice/voice-settings-manager.js +359 -0
  180. package/dist/electron/shared/channelMessages.js +170 -0
  181. package/dist/electron/shared/types.js +1185 -0
  182. package/package.json +159 -0
  183. package/resources/skills/1password.json +10 -0
  184. package/resources/skills/add-documentation.json +31 -0
  185. package/resources/skills/analyze-csv.json +17 -0
  186. package/resources/skills/apple-notes.json +10 -0
  187. package/resources/skills/apple-reminders.json +10 -0
  188. package/resources/skills/auto-commenter.json +10 -0
  189. package/resources/skills/bear-notes.json +10 -0
  190. package/resources/skills/bird.json +35 -0
  191. package/resources/skills/blogwatcher.json +10 -0
  192. package/resources/skills/blucli.json +10 -0
  193. package/resources/skills/bluebubbles.json +10 -0
  194. package/resources/skills/camsnap.json +10 -0
  195. package/resources/skills/clean-imports.json +18 -0
  196. package/resources/skills/code-review.json +18 -0
  197. package/resources/skills/coding-agent.json +10 -0
  198. package/resources/skills/compare-files.json +23 -0
  199. package/resources/skills/convert-code.json +34 -0
  200. package/resources/skills/create-changelog.json +24 -0
  201. package/resources/skills/debug-error.json +17 -0
  202. package/resources/skills/dependency-check.json +10 -0
  203. package/resources/skills/discord.json +10 -0
  204. package/resources/skills/eightctl.json +10 -0
  205. package/resources/skills/explain-code.json +29 -0
  206. package/resources/skills/extract-todos.json +18 -0
  207. package/resources/skills/food-order.json +10 -0
  208. package/resources/skills/gemini.json +10 -0
  209. package/resources/skills/generate-readme.json +10 -0
  210. package/resources/skills/gifgrep.json +10 -0
  211. package/resources/skills/git-commit.json +10 -0
  212. package/resources/skills/github.json +10 -0
  213. package/resources/skills/gog.json +10 -0
  214. package/resources/skills/goplaces.json +10 -0
  215. package/resources/skills/himalaya.json +10 -0
  216. package/resources/skills/imsg.json +10 -0
  217. package/resources/skills/karpathy-guidelines.json +12 -0
  218. package/resources/skills/last30days.json +26 -0
  219. package/resources/skills/local-places.json +10 -0
  220. package/resources/skills/mcporter.json +10 -0
  221. package/resources/skills/model-usage.json +10 -0
  222. package/resources/skills/nano-banana-pro.json +10 -0
  223. package/resources/skills/nano-pdf.json +10 -0
  224. package/resources/skills/notion.json +10 -0
  225. package/resources/skills/obsidian.json +10 -0
  226. package/resources/skills/openai-image-gen.json +10 -0
  227. package/resources/skills/openai-whisper-api.json +10 -0
  228. package/resources/skills/openai-whisper.json +10 -0
  229. package/resources/skills/openhue.json +10 -0
  230. package/resources/skills/oracle.json +10 -0
  231. package/resources/skills/ordercli.json +10 -0
  232. package/resources/skills/peekaboo.json +10 -0
  233. package/resources/skills/project-structure.json +10 -0
  234. package/resources/skills/proofread.json +17 -0
  235. package/resources/skills/refactor-code.json +31 -0
  236. package/resources/skills/rename-symbol.json +23 -0
  237. package/resources/skills/sag.json +10 -0
  238. package/resources/skills/security-audit.json +18 -0
  239. package/resources/skills/session-logs.json +10 -0
  240. package/resources/skills/sherpa-onnx-tts.json +10 -0
  241. package/resources/skills/skill-creator.json +15 -0
  242. package/resources/skills/skill-hub.json +29 -0
  243. package/resources/skills/slack.json +10 -0
  244. package/resources/skills/songsee.json +10 -0
  245. package/resources/skills/sonoscli.json +10 -0
  246. package/resources/skills/spotify-player.json +10 -0
  247. package/resources/skills/startup-cfo.json +55 -0
  248. package/resources/skills/summarize-folder.json +18 -0
  249. package/resources/skills/summarize.json +10 -0
  250. package/resources/skills/things-mac.json +10 -0
  251. package/resources/skills/tmux.json +10 -0
  252. package/resources/skills/translate.json +36 -0
  253. package/resources/skills/trello.json +10 -0
  254. package/resources/skills/video-frames.json +10 -0
  255. package/resources/skills/voice-call.json +10 -0
  256. package/resources/skills/wacli.json +10 -0
  257. package/resources/skills/weather.json +10 -0
  258. package/resources/skills/write-tests.json +31 -0
  259. package/src/electron/activity/ActivityRepository.ts +238 -0
  260. package/src/electron/agent/browser/browser-service.ts +721 -0
  261. package/src/electron/agent/context-manager.ts +257 -0
  262. package/src/electron/agent/custom-skill-loader.ts +634 -0
  263. package/src/electron/agent/daemon.ts +1097 -0
  264. package/src/electron/agent/executor.ts +4017 -0
  265. package/src/electron/agent/llm/anthropic-provider.ts +175 -0
  266. package/src/electron/agent/llm/bedrock-provider.ts +236 -0
  267. package/src/electron/agent/llm/gemini-provider.ts +422 -0
  268. package/src/electron/agent/llm/index.ts +9 -0
  269. package/src/electron/agent/llm/ollama-provider.ts +347 -0
  270. package/src/electron/agent/llm/openai-oauth.ts +127 -0
  271. package/src/electron/agent/llm/openai-provider.ts +686 -0
  272. package/src/electron/agent/llm/openrouter-provider.ts +273 -0
  273. package/src/electron/agent/llm/pricing.ts +180 -0
  274. package/src/electron/agent/llm/provider-factory.ts +971 -0
  275. package/src/electron/agent/llm/types.ts +291 -0
  276. package/src/electron/agent/queue-manager.ts +408 -0
  277. package/src/electron/agent/sandbox/docker-sandbox.ts +453 -0
  278. package/src/electron/agent/sandbox/macos-sandbox.ts +426 -0
  279. package/src/electron/agent/sandbox/runner.ts +453 -0
  280. package/src/electron/agent/sandbox/sandbox-factory.ts +337 -0
  281. package/src/electron/agent/sandbox/security-utils.ts +251 -0
  282. package/src/electron/agent/search/brave-provider.ts +141 -0
  283. package/src/electron/agent/search/google-provider.ts +131 -0
  284. package/src/electron/agent/search/index.ts +6 -0
  285. package/src/electron/agent/search/provider-factory.ts +450 -0
  286. package/src/electron/agent/search/serpapi-provider.ts +138 -0
  287. package/src/electron/agent/search/tavily-provider.ts +108 -0
  288. package/src/electron/agent/search/types.ts +118 -0
  289. package/src/electron/agent/security/index.ts +20 -0
  290. package/src/electron/agent/security/input-sanitizer.ts +380 -0
  291. package/src/electron/agent/security/output-filter.ts +259 -0
  292. package/src/electron/agent/skill-eligibility.ts +334 -0
  293. package/src/electron/agent/skill-registry.ts +457 -0
  294. package/src/electron/agent/skills/document.ts +1070 -0
  295. package/src/electron/agent/skills/image-generator.ts +272 -0
  296. package/src/electron/agent/skills/organizer.ts +131 -0
  297. package/src/electron/agent/skills/presentation.ts +418 -0
  298. package/src/electron/agent/skills/spreadsheet.ts +166 -0
  299. package/src/electron/agent/tools/browser-tools.ts +546 -0
  300. package/src/electron/agent/tools/builtin-settings.ts +422 -0
  301. package/src/electron/agent/tools/canvas-tools.ts +572 -0
  302. package/src/electron/agent/tools/cron-tools.ts +723 -0
  303. package/src/electron/agent/tools/edit-tools.ts +196 -0
  304. package/src/electron/agent/tools/file-tools.ts +811 -0
  305. package/src/electron/agent/tools/glob-tools.ts +303 -0
  306. package/src/electron/agent/tools/grep-tools.ts +432 -0
  307. package/src/electron/agent/tools/image-tools.ts +126 -0
  308. package/src/electron/agent/tools/mention-tools.ts +371 -0
  309. package/src/electron/agent/tools/node-tools.ts +550 -0
  310. package/src/electron/agent/tools/registry.ts +3052 -0
  311. package/src/electron/agent/tools/search-tools.ts +111 -0
  312. package/src/electron/agent/tools/shell-tools.ts +651 -0
  313. package/src/electron/agent/tools/skill-tools.ts +340 -0
  314. package/src/electron/agent/tools/system-tools.ts +665 -0
  315. package/src/electron/agent/tools/web-fetch-tools.ts +528 -0
  316. package/src/electron/agent/tools/x-tools.ts +267 -0
  317. package/src/electron/agents/AgentRoleRepository.ts +557 -0
  318. package/src/electron/agents/HeartbeatService.ts +469 -0
  319. package/src/electron/agents/MentionRepository.ts +242 -0
  320. package/src/electron/agents/TaskSubscriptionRepository.ts +231 -0
  321. package/src/electron/agents/WorkingStateRepository.ts +278 -0
  322. package/src/electron/canvas/canvas-manager.ts +818 -0
  323. package/src/electron/canvas/canvas-preload.ts +102 -0
  324. package/src/electron/canvas/canvas-protocol.ts +174 -0
  325. package/src/electron/canvas/canvas-store.ts +200 -0
  326. package/src/electron/canvas/index.ts +8 -0
  327. package/src/electron/control-plane/client.ts +527 -0
  328. package/src/electron/control-plane/handlers.ts +723 -0
  329. package/src/electron/control-plane/index.ts +51 -0
  330. package/src/electron/control-plane/node-manager.ts +322 -0
  331. package/src/electron/control-plane/protocol.ts +269 -0
  332. package/src/electron/control-plane/remote-client.ts +517 -0
  333. package/src/electron/control-plane/server.ts +853 -0
  334. package/src/electron/control-plane/settings.ts +401 -0
  335. package/src/electron/control-plane/ssh-tunnel.ts +624 -0
  336. package/src/electron/cron/index.ts +9 -0
  337. package/src/electron/cron/schedule.ts +217 -0
  338. package/src/electron/cron/service.ts +743 -0
  339. package/src/electron/cron/store.ts +165 -0
  340. package/src/electron/cron/types.ts +291 -0
  341. package/src/electron/cron/webhook.ts +303 -0
  342. package/src/electron/database/SecureSettingsRepository.ts +514 -0
  343. package/src/electron/database/TaskLabelRepository.ts +148 -0
  344. package/src/electron/database/repositories.ts +2397 -0
  345. package/src/electron/database/schema.ts +1017 -0
  346. package/src/electron/extensions/index.ts +18 -0
  347. package/src/electron/extensions/loader.ts +336 -0
  348. package/src/electron/extensions/registry.ts +546 -0
  349. package/src/electron/extensions/types.ts +372 -0
  350. package/src/electron/gateway/channel-registry.ts +1267 -0
  351. package/src/electron/gateway/channels/bluebubbles-client.ts +641 -0
  352. package/src/electron/gateway/channels/bluebubbles.ts +509 -0
  353. package/src/electron/gateway/channels/discord.ts +1150 -0
  354. package/src/electron/gateway/channels/email-client.ts +708 -0
  355. package/src/electron/gateway/channels/email.ts +516 -0
  356. package/src/electron/gateway/channels/google-chat.ts +760 -0
  357. package/src/electron/gateway/channels/imessage-client.ts +473 -0
  358. package/src/electron/gateway/channels/imessage.ts +520 -0
  359. package/src/electron/gateway/channels/index.ts +21 -0
  360. package/src/electron/gateway/channels/line-client.ts +598 -0
  361. package/src/electron/gateway/channels/line.ts +559 -0
  362. package/src/electron/gateway/channels/matrix-client.ts +632 -0
  363. package/src/electron/gateway/channels/matrix.ts +655 -0
  364. package/src/electron/gateway/channels/mattermost-client.ts +526 -0
  365. package/src/electron/gateway/channels/mattermost.ts +550 -0
  366. package/src/electron/gateway/channels/signal-client.ts +722 -0
  367. package/src/electron/gateway/channels/signal.ts +666 -0
  368. package/src/electron/gateway/channels/slack.ts +458 -0
  369. package/src/electron/gateway/channels/teams.ts +681 -0
  370. package/src/electron/gateway/channels/telegram.ts +1727 -0
  371. package/src/electron/gateway/channels/twitch-client.ts +665 -0
  372. package/src/electron/gateway/channels/twitch.ts +468 -0
  373. package/src/electron/gateway/channels/types.ts +1002 -0
  374. package/src/electron/gateway/channels/whatsapp.ts +1101 -0
  375. package/src/electron/gateway/context-policy.ts +382 -0
  376. package/src/electron/gateway/index.ts +1274 -0
  377. package/src/electron/gateway/infrastructure.ts +645 -0
  378. package/src/electron/gateway/router.ts +3206 -0
  379. package/src/electron/gateway/security.ts +422 -0
  380. package/src/electron/gateway/session.ts +144 -0
  381. package/src/electron/gateway/tunnel.ts +626 -0
  382. package/src/electron/guardrails/guardrail-manager.ts +380 -0
  383. package/src/electron/hooks/gmail-watcher.ts +355 -0
  384. package/src/electron/hooks/index.ts +30 -0
  385. package/src/electron/hooks/mappings.ts +404 -0
  386. package/src/electron/hooks/server.ts +574 -0
  387. package/src/electron/hooks/settings.ts +466 -0
  388. package/src/electron/hooks/types.ts +245 -0
  389. package/src/electron/ipc/canvas-handlers.ts +223 -0
  390. package/src/electron/ipc/handlers.ts +3661 -0
  391. package/src/electron/ipc/mission-control-handlers.ts +182 -0
  392. package/src/electron/main.ts +496 -0
  393. package/src/electron/mcp/client/MCPClientManager.ts +406 -0
  394. package/src/electron/mcp/client/MCPServerConnection.ts +514 -0
  395. package/src/electron/mcp/client/transports/SSETransport.ts +360 -0
  396. package/src/electron/mcp/client/transports/StdioTransport.ts +355 -0
  397. package/src/electron/mcp/client/transports/WebSocketTransport.ts +384 -0
  398. package/src/electron/mcp/host/MCPHostServer.ts +388 -0
  399. package/src/electron/mcp/host/ToolAdapter.ts +140 -0
  400. package/src/electron/mcp/registry/MCPRegistryManager.ts +565 -0
  401. package/src/electron/mcp/settings.ts +468 -0
  402. package/src/electron/mcp/types.ts +371 -0
  403. package/src/electron/memory/MemoryService.ts +523 -0
  404. package/src/electron/notifications/index.ts +16 -0
  405. package/src/electron/notifications/service.ts +161 -0
  406. package/src/electron/notifications/store.ts +163 -0
  407. package/src/electron/preload.ts +2845 -0
  408. package/src/electron/reports/StandupReportService.ts +356 -0
  409. package/src/electron/security/concurrency.ts +333 -0
  410. package/src/electron/security/index.ts +17 -0
  411. package/src/electron/security/policy-manager.ts +539 -0
  412. package/src/electron/settings/appearance-manager.ts +182 -0
  413. package/src/electron/settings/personality-manager.ts +800 -0
  414. package/src/electron/settings/x-manager.ts +62 -0
  415. package/src/electron/tailscale/exposure.ts +262 -0
  416. package/src/electron/tailscale/index.ts +34 -0
  417. package/src/electron/tailscale/settings.ts +218 -0
  418. package/src/electron/tailscale/tailscale.ts +379 -0
  419. package/src/electron/tray/QuickInputWindow.ts +609 -0
  420. package/src/electron/tray/TrayManager.ts +1005 -0
  421. package/src/electron/tray/index.ts +6 -0
  422. package/src/electron/updater/index.ts +1 -0
  423. package/src/electron/updater/update-manager.ts +447 -0
  424. package/src/electron/utils/env-migration.ts +203 -0
  425. package/src/electron/utils/process.ts +124 -0
  426. package/src/electron/utils/rate-limiter.ts +130 -0
  427. package/src/electron/utils/validation.ts +493 -0
  428. package/src/electron/utils/x-cli.ts +198 -0
  429. package/src/electron/voice/VoiceService.ts +583 -0
  430. package/src/electron/voice/index.ts +9 -0
  431. package/src/electron/voice/voice-settings-manager.ts +403 -0
  432. package/src/renderer/App.tsx +775 -0
  433. package/src/renderer/components/ActivityFeed.tsx +407 -0
  434. package/src/renderer/components/ActivityFeedItem.tsx +285 -0
  435. package/src/renderer/components/AgentRoleCard.tsx +343 -0
  436. package/src/renderer/components/AgentRoleEditor.tsx +805 -0
  437. package/src/renderer/components/AgentSquadSettings.tsx +295 -0
  438. package/src/renderer/components/AgentWorkingStatePanel.tsx +411 -0
  439. package/src/renderer/components/AppearanceSettings.tsx +122 -0
  440. package/src/renderer/components/ApprovalDialog.tsx +100 -0
  441. package/src/renderer/components/BlueBubblesSettings.tsx +505 -0
  442. package/src/renderer/components/BuiltinToolsSettings.tsx +307 -0
  443. package/src/renderer/components/CanvasPreview.tsx +1189 -0
  444. package/src/renderer/components/CommandOutput.tsx +202 -0
  445. package/src/renderer/components/ContextPolicySettings.tsx +523 -0
  446. package/src/renderer/components/ControlPlaneSettings.tsx +1134 -0
  447. package/src/renderer/components/DisclaimerModal.tsx +124 -0
  448. package/src/renderer/components/DiscordSettings.tsx +436 -0
  449. package/src/renderer/components/EmailSettings.tsx +606 -0
  450. package/src/renderer/components/ExtensionsSettings.tsx +542 -0
  451. package/src/renderer/components/FileViewer.tsx +224 -0
  452. package/src/renderer/components/GoogleChatSettings.tsx +535 -0
  453. package/src/renderer/components/GuardrailSettings.tsx +487 -0
  454. package/src/renderer/components/HooksSettings.tsx +581 -0
  455. package/src/renderer/components/ImessageSettings.tsx +484 -0
  456. package/src/renderer/components/LineSettings.tsx +483 -0
  457. package/src/renderer/components/MCPRegistryBrowser.tsx +386 -0
  458. package/src/renderer/components/MCPSettings.tsx +943 -0
  459. package/src/renderer/components/MainContent.tsx +2433 -0
  460. package/src/renderer/components/MatrixSettings.tsx +510 -0
  461. package/src/renderer/components/MattermostSettings.tsx +473 -0
  462. package/src/renderer/components/MemorySettings.tsx +247 -0
  463. package/src/renderer/components/MentionBadge.tsx +87 -0
  464. package/src/renderer/components/MentionInput.tsx +409 -0
  465. package/src/renderer/components/MentionList.tsx +476 -0
  466. package/src/renderer/components/MissionControlPanel.tsx +1995 -0
  467. package/src/renderer/components/NodesSettings.tsx +316 -0
  468. package/src/renderer/components/NotificationPanel.tsx +481 -0
  469. package/src/renderer/components/Onboarding/AwakeningOrb.tsx +44 -0
  470. package/src/renderer/components/Onboarding/Onboarding.tsx +443 -0
  471. package/src/renderer/components/Onboarding/TypewriterText.tsx +102 -0
  472. package/src/renderer/components/Onboarding/index.ts +3 -0
  473. package/src/renderer/components/OnboardingModal.tsx +698 -0
  474. package/src/renderer/components/PairingCodeDisplay.tsx +324 -0
  475. package/src/renderer/components/PersonalitySettings.tsx +597 -0
  476. package/src/renderer/components/QueueSettings.tsx +119 -0
  477. package/src/renderer/components/QuickTaskFAB.tsx +71 -0
  478. package/src/renderer/components/RightPanel.tsx +413 -0
  479. package/src/renderer/components/ScheduledTasksSettings.tsx +1328 -0
  480. package/src/renderer/components/SearchSettings.tsx +328 -0
  481. package/src/renderer/components/Settings.tsx +1504 -0
  482. package/src/renderer/components/Sidebar.tsx +344 -0
  483. package/src/renderer/components/SignalSettings.tsx +673 -0
  484. package/src/renderer/components/SkillHubBrowser.tsx +458 -0
  485. package/src/renderer/components/SkillParameterModal.tsx +185 -0
  486. package/src/renderer/components/SkillsSettings.tsx +451 -0
  487. package/src/renderer/components/SlackSettings.tsx +442 -0
  488. package/src/renderer/components/StandupReportViewer.tsx +614 -0
  489. package/src/renderer/components/TaskBoard.tsx +498 -0
  490. package/src/renderer/components/TaskBoardCard.tsx +357 -0
  491. package/src/renderer/components/TaskBoardColumn.tsx +211 -0
  492. package/src/renderer/components/TaskLabelManager.tsx +472 -0
  493. package/src/renderer/components/TaskQueuePanel.tsx +144 -0
  494. package/src/renderer/components/TaskQuickActions.tsx +492 -0
  495. package/src/renderer/components/TaskTimeline.tsx +216 -0
  496. package/src/renderer/components/TaskView.tsx +162 -0
  497. package/src/renderer/components/TeamsSettings.tsx +518 -0
  498. package/src/renderer/components/TelegramSettings.tsx +421 -0
  499. package/src/renderer/components/Toast.tsx +76 -0
  500. package/src/renderer/components/TraySettings.tsx +189 -0
  501. package/src/renderer/components/TwitchSettings.tsx +511 -0
  502. package/src/renderer/components/UpdateSettings.tsx +295 -0
  503. package/src/renderer/components/VoiceIndicator.tsx +270 -0
  504. package/src/renderer/components/VoiceSettings.tsx +867 -0
  505. package/src/renderer/components/WhatsAppSettings.tsx +721 -0
  506. package/src/renderer/components/WorkingStateEditor.tsx +309 -0
  507. package/src/renderer/components/WorkingStateHistory.tsx +481 -0
  508. package/src/renderer/components/WorkspaceSelector.tsx +150 -0
  509. package/src/renderer/components/XSettings.tsx +311 -0
  510. package/src/renderer/global.d.ts +9 -0
  511. package/src/renderer/hooks/useAgentContext.ts +153 -0
  512. package/src/renderer/hooks/useOnboardingFlow.ts +548 -0
  513. package/src/renderer/hooks/useVoiceInput.ts +268 -0
  514. package/src/renderer/index.html +12 -0
  515. package/src/renderer/main.tsx +10 -0
  516. package/src/renderer/public/cowork-os-logo.png +0 -0
  517. package/src/renderer/quick-input.html +164 -0
  518. package/src/renderer/styles/index.css +14504 -0
  519. package/src/renderer/utils/agentMessages.ts +749 -0
  520. package/src/renderer/utils/voice-directives.ts +169 -0
  521. package/src/shared/channelMessages.ts +213 -0
  522. package/src/shared/types.ts +3608 -0
  523. package/tsconfig.electron.json +26 -0
  524. package/tsconfig.json +26 -0
  525. package/tsconfig.node.json +10 -0
  526. package/vite.config.ts +23 -0
package/README.md ADDED
@@ -0,0 +1,1638 @@
1
+ <p align="center">
2
+ <img src="screenshots/cowork-os-logo.png" alt="CoWork OS Logo" width="120">
3
+ </p>
4
+
5
+ <div align="center">
6
+ <pre>
7
+ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗ ███████╗
8
+ ██╔════╝██╔═══██╗██║ ██║██╔═══██╗██╔══██╗██║ ██╔╝ ██╔═══██╗██╔════╝
9
+ ██║ ██║ ██║██║ █╗ ██║██║ ██║██████╔╝█████╔╝ ██║ ██║███████╗
10
+ ██║ ██║ ██║██║███╗██║██║ ██║██╔══██╗██╔═██╗ ██║ ██║╚════██║
11
+ ╚██████╗╚██████╔╝╚███╔███╔╝╚██████╔╝██║ ██║██║ ██╗ ╚██████╔╝███████║
12
+ ╚═════╝ ╚═════╝ ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝
13
+ </pre>
14
+ </div>
15
+
16
+ <p align="center">
17
+ <a href="https://github.com/CoWork-OS/CoWork-OS/actions/workflows/ci.yml"><img src="https://github.com/CoWork-OS/CoWork-OS/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
18
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
19
+ <a href="https://www.apple.com/macos/"><img src="https://img.shields.io/badge/platform-macOS-blue.svg" alt="macOS"></a>
20
+ <a href="https://www.electronjs.org/"><img src="https://img.shields.io/badge/electron-40.0.0-47848F.svg" alt="Electron"></a>
21
+ </p>
22
+
23
+ **The operating system for personal AI assistants**
24
+
25
+ Your AI needs a secure home. CoWork OS provides the runtime, security layers, and I/O channels to run AI agents across WhatsApp, Telegram, Discord, Slack, Microsoft Teams, Google Chat, iMessage, Signal, Mattermost, Matrix, Twitch, LINE, BlueBubbles, and Email — with the control you expect from an operating system.
26
+
27
+ | | |
28
+ |---|---|
29
+ | **6 AI Providers** | Claude, GPT-4, Gemini, Bedrock, OpenRouter, Ollama (free/local) |
30
+ | **14 Messaging Channels** | WhatsApp, Telegram, Discord, Slack, Teams, Google Chat, iMessage, Signal, Mattermost, Matrix, Twitch, LINE, BlueBubbles, Email |
31
+ | **Security-First** | 1800+ unit tests, configurable guardrails, approval workflows |
32
+ | **Local-First** | Your data stays on your machine. BYOK (Bring Your Own Key) |
33
+
34
+ > **Status**: macOS desktop app (cross-platform support planned)
35
+
36
+ ---
37
+
38
+ ### Security Verified by ZeroLeaks
39
+
40
+ <p align="center">
41
+ <img src="screenshots/ZeroLeaks-result-010226.png" alt="ZeroLeaks Security Assessment Result" width="600">
42
+ <br>
43
+ <em>CoWork OS achieves one of the highest security scores on <a href="https://zeroleaks.ai/">ZeroLeaks</a> — outperforming solutions like OpenClaw in prompt injection resistance</em>
44
+ <br>
45
+ <a href="ZeroLeaks-Report-jn70f56art03m4rj7fp4b5k9p180aqfd.pdf">View Full Security Assessment Report</a>
46
+ </p>
47
+
48
+ ---
49
+
50
+ <p align="center">
51
+ <img src="screenshots/cowork-os-main.png" alt="CoWork OS Interface" width="700">
52
+ <br>
53
+ <em>Terminal-inspired UI with real-time task timeline</em>
54
+ </p>
55
+
56
+ ---
57
+
58
+ ## Why CoWork OS?
59
+
60
+ ### Security Without Compromise
61
+
62
+ - **Configurable guardrails**: Token budgets, cost limits, iteration caps
63
+ - **Dangerous command blocking**: Built-in patterns + custom regex rules
64
+ - **Approval workflows**: User consent required for destructive operations
65
+ - **Pairing & allowlists**: Control who can access your AI via messaging channels
66
+ - **1800+ tests**: Comprehensive test coverage for access control and policies
67
+
68
+ ### Your Data, Your Control
69
+
70
+ - **100% local-first**: Database, credentials, and artifacts stay on your machine
71
+ - **No telemetry**: We don't track you
72
+ - **BYOK**: Bring your own API keys — no middleman, no proxy
73
+ - **Open source**: Audit the code yourself
74
+
75
+ ### Connect from Anywhere
76
+
77
+ - Message your AI from WhatsApp, Telegram, Discord, Slack, Microsoft Teams, Google Chat, iMessage, Signal, Mattermost, Matrix, Twitch, LINE, BlueBubbles, or Email
78
+ - **Mobile Companions**: iOS and Android apps for on-the-go access via local network
79
+ - Schedule recurring tasks with cron expressions
80
+ - Secure remote access via Tailscale or SSH tunnels
81
+ - WebSocket API for custom integrations
82
+
83
+ ### Developer-Friendly Tools
84
+
85
+ - Claude Code-style tools: `glob`, `grep`, `edit_file`
86
+ - Browser automation with Playwright
87
+ - 75+ bundled skills for popular services
88
+ - MCP (Model Context Protocol) support for extensibility
89
+
90
+ ---
91
+
92
+ ## Security Architecture
93
+
94
+ CoWork OS is designed with security as a core principle, not an afterthought.
95
+
96
+ ### Defense in Depth
97
+
98
+ | Layer | Protection |
99
+ |-------|------------|
100
+ | **Channel Access** | Pairing codes, allowlists, brute-force lockout (5 attempts, 15 min cooldown) |
101
+ | **Context Policies** | Per-context security modes (DM vs group), tool restrictions per context |
102
+ | **Encrypted Storage** | OS keychain (macOS/Windows/Linux) + AES-256 fallback, SHA-256 integrity checks |
103
+ | **Tool Execution** | Risk-level categorization, context-aware isolation |
104
+ | **Sandbox Isolation** | Docker containers (cross-platform) or macOS sandbox-exec |
105
+ | **File Operations** | Workspace boundaries, path traversal protection |
106
+ | **Shell Commands** | Dangerous command blocking, explicit approval required |
107
+ | **Browser Automation** | Domain allowlist, configurable restrictions |
108
+ | **Resource Limits** | Token budgets, cost caps, iteration limits, file size limits |
109
+
110
+ ### Security Test Coverage
111
+
112
+ - **132 security unit tests** for access control and policy enforcement
113
+ - **259 WebSocket protocol tests** for API security
114
+ - Monotonic policy precedence (deny-wins across security layers)
115
+ - Context-aware tool isolation for shared gateway environments
116
+
117
+ ### Sandbox Isolation
118
+
119
+ Shell commands run in isolated sandboxes:
120
+
121
+ | Platform | Sandbox Type | Features |
122
+ |----------|--------------|----------|
123
+ | **macOS** | `sandbox-exec` | Native Apple sandbox profiles, no setup required |
124
+ | **Linux/Windows** | Docker | Container isolation, resource limits, network isolation |
125
+ | **Fallback** | Process isolation | Timeouts, resource limits (when Docker unavailable) |
126
+
127
+ Docker sandbox features:
128
+ - CPU and memory limits (`--cpus`, `--memory`)
129
+ - Network isolation (`--network none` by default)
130
+ - Read-only workspace mounting option
131
+ - Automatic cleanup of containers
132
+
133
+ ### Per-Context Security Policies
134
+
135
+ Different security settings for direct messages vs group chats:
136
+
137
+ | Context | Default Mode | Default Restrictions |
138
+ |---------|--------------|---------------------|
139
+ | **DM** | Pairing | No restrictions |
140
+ | **Group** | Pairing | Memory tools blocked (clipboard) |
141
+
142
+ Configure per-context policies in **Settings > Channels > [Channel] > Context Policies**.
143
+
144
+ > **See also:** [docs/security/](docs/security/) for comprehensive security documentation.
145
+
146
+ ---
147
+
148
+ ## Providers & Costs (BYOK)
149
+
150
+ CoWork OS is **free and open source**. To run tasks, configure your own model credentials or use local models.
151
+
152
+ | Provider | Configuration | Billing |
153
+ |----------|---------------|---------|
154
+ | Anthropic API | API key in Settings | Pay-per-token |
155
+ | Google Gemini | API key in Settings | Pay-per-token (free tier available) |
156
+ | OpenRouter | API key in Settings | Pay-per-token (multi-model access) |
157
+ | OpenAI (API Key) | API key in Settings | Pay-per-token |
158
+ | OpenAI (ChatGPT OAuth) | Sign in with ChatGPT account | Uses your ChatGPT subscription |
159
+ | AWS Bedrock | AWS credentials in Settings | Pay-per-token via AWS |
160
+ | Ollama (Local) | Install Ollama and pull models | **Free** (runs locally) |
161
+
162
+ **Your usage is billed directly by your provider.** CoWork OS does not proxy or resell model access.
163
+
164
+ ---
165
+
166
+ ## Features
167
+
168
+ ### Multi-Channel AI Gateway
169
+
170
+ - **WhatsApp**: QR code pairing, self-chat mode, markdown support
171
+ - **Telegram**: Bot commands, streaming responses, workspace selection
172
+ - **Discord**: Slash commands, DM support, guild integration
173
+ - **Slack**: Socket Mode, channel mentions, file uploads
174
+ - **Microsoft Teams**: Bot Framework SDK, DM/channel mentions, adaptive cards
175
+ - **Google Chat**: Service account auth, spaces/DMs, threaded conversations, cards
176
+ - **iMessage**: macOS native integration, pairing codes
177
+ - **Signal**: End-to-end encrypted messaging via signal-cli
178
+ - **Mattermost**: WebSocket real-time, REST API, team/channel support
179
+ - **Matrix**: Federated messaging, room-based, end-to-end encryption ready
180
+ - **Twitch**: IRC chat integration, multi-channel, whisper support
181
+ - **LINE**: Messaging API webhooks, reply tokens, 200M+ users in Asia
182
+ - **BlueBubbles**: iMessage via Mac server, SMS support, attachments
183
+ - **Email**: IMAP/SMTP, any email provider, subject filtering, threading
184
+
185
+ All channels support:
186
+ - Security modes (pairing, allowlist, open)
187
+ - Brute-force protection
188
+ - Session management
189
+ - Rate limiting
190
+
191
+ ### Agent Capabilities
192
+
193
+ - **Task-Based Workflow**: Multi-step execution with plan-execute-observe loops
194
+ - **Goal Mode**: Define success criteria and auto-retry until verification passes
195
+ - **Dynamic Re-Planning**: Agent can revise its plan mid-execution
196
+ - **75+ Built-in Skills**: GitHub, Slack, Notion, Spotify, Apple Notes, and more
197
+ - **Document Creation**: Excel, Word, PDF, PowerPoint with professional formatting
198
+ - **Persistent Memory**: Cross-session context with privacy-aware observation capture
199
+
200
+ ### Voice Mode (NEW)
201
+
202
+ Talk to your AI assistant with voice input and audio responses.
203
+
204
+ | Feature | Description |
205
+ |---------|-------------|
206
+ | **Text-to-Speech** | ElevenLabs (premium), OpenAI TTS, or local Web Speech API |
207
+ | **Speech-to-Text** | OpenAI Whisper for accurate transcription |
208
+ | **Multiple Voices** | Choose from ElevenLabs voices or OpenAI voices (alloy, echo, fable, onyx, nova, shimmer) |
209
+ | **Customizable** | Volume, speech rate, language settings |
210
+ | **Secure Storage** | All settings encrypted via OS keychain (macOS/Windows/Linux) with AES-256 fallback |
211
+
212
+ **Supported Providers:**
213
+
214
+ | Provider | TTS | STT | Cost |
215
+ |----------|-----|-----|------|
216
+ | **ElevenLabs** | ✓ (Premium quality) | — | Pay-per-character |
217
+ | **OpenAI** | ✓ | ✓ (Whisper) | Pay-per-token |
218
+ | **Local** | ✓ (Web Speech API) | Coming soon | Free |
219
+
220
+ Configure in **Settings** > **Voice**.
221
+
222
+ ### Persistent Memory System
223
+
224
+ Capture and recall observations across sessions for improved context continuity.
225
+
226
+ | Feature | Description |
227
+ |---------|-------------|
228
+ | **Auto-Capture** | Observations, decisions, and errors captured during task execution |
229
+ | **Privacy Protection** | Auto-detects sensitive patterns (API keys, passwords, tokens) |
230
+ | **FTS5 Search** | Full-text search with relevance ranking |
231
+ | **LLM Compression** | Summarizes observations for ~10x token efficiency |
232
+ | **Progressive Retrieval** | 3-layer approach: snippets → timeline → full details |
233
+ | **Per-Workspace Settings** | Enable/disable, privacy modes, retention policies |
234
+
235
+ **Privacy Modes:**
236
+
237
+ | Mode | Description |
238
+ |------|-------------|
239
+ | **Normal** | Auto-detect and mark sensitive data as private |
240
+ | **Strict** | Mark all memories as private (local only) |
241
+ | **Disabled** | No memory capture |
242
+
243
+ Configure in **Settings** > **Memory** for each workspace.
244
+
245
+ ### Configurable Guardrails
246
+
247
+ | Guardrail | Description | Default | Range |
248
+ |-----------|-------------|---------|-------|
249
+ | **Token Budget** | Total tokens (input + output) per task | 100,000 | 1K - 10M |
250
+ | **Cost Budget** | Estimated cost (USD) per task | $1.00 (disabled) | $0.01 - $100 |
251
+ | **Iteration Limit** | LLM calls per task | 50 | 5 - 500 |
252
+ | **Dangerous Command Blocking** | Block shell commands matching patterns | Enabled | On/Off + custom |
253
+ | **Auto-Approve Trusted Commands** | Skip approval for safe commands | Disabled | On/Off + patterns |
254
+ | **File Size Limit** | Max file size agent can write | 50 MB | 1 - 500 MB |
255
+ | **Domain Allowlist** | Restrict browser to approved domains | Disabled | On/Off + domains |
256
+
257
+ ### Code Tools
258
+
259
+ Claude Code-style tools for efficient code navigation and editing:
260
+
261
+ | Tool | Description |
262
+ |------|-------------|
263
+ | **glob** | Fast pattern-based file search (e.g., `**/*.ts`, `src/**/*.tsx`) |
264
+ | **grep** | Regex content search across files with context lines |
265
+ | **edit_file** | Surgical file editing with find-and-replace |
266
+
267
+ ### Browser Automation
268
+
269
+ Full Playwright integration:
270
+ - Navigate to URLs, take screenshots, save as PDF
271
+ - Click, fill forms, type text, press keys
272
+ - Extract page content, links, and form data
273
+ - Scroll pages, wait for elements, execute JavaScript
274
+
275
+ ### System Tools
276
+
277
+ - Take screenshots (full screen or specific windows)
278
+ - Read/write clipboard content
279
+ - Open applications, URLs, and file paths
280
+ - Run AppleScript to automate macOS apps
281
+ - Get system information and environment variables
282
+
283
+ ### Remote Access
284
+
285
+ - **Tailscale Serve**: Expose to your private tailnet
286
+ - **Tailscale Funnel**: Public HTTPS endpoint via Tailscale edge
287
+ - **SSH Tunnels**: Standard SSH port forwarding
288
+ - **WebSocket API**: Programmatic task management
289
+
290
+ ### MCP (Model Context Protocol)
291
+
292
+ - **MCP Client**: Connect to external MCP servers
293
+ - **MCP Host**: Expose CoWork's tools as an MCP server
294
+ - **MCP Registry**: Browse and install servers from a catalog
295
+
296
+ ### Personality System
297
+
298
+ Customize agent behavior via Settings or conversation:
299
+
300
+ - **Personalities**: Professional, Friendly, Concise, Creative, Technical, Casual
301
+ - **Personas**: Jarvis, Friday, HAL, Computer, Alfred, Intern, Sensei, Pirate, Noir
302
+ - **Response Style**: Emoji usage, response length, code comments, explanation depth
303
+ - **Quirks**: Catchphrases, sign-offs, analogy domains
304
+ - **Relationship**: Agent remembers your name and tracks interactions
305
+
306
+ ---
307
+
308
+ ## Data Handling
309
+
310
+ - **Stored locally**: Task metadata, timeline events, artifact index, workspace config, memories (SQLite)
311
+ - **Sent to provider**: Task prompt and context you choose to include
312
+ - **Not sent**: Your API keys (stored locally via OS keychain), private memories (marked sensitive)
313
+
314
+ ---
315
+
316
+ ## Architecture
317
+
318
+ ```
319
+ ┌─────────────────────────────────────────────────────────────────┐
320
+ │ Security Layers │
321
+ ├─────────────────────────────────────────────────────────────────┤
322
+ │ Channel Access Control: Pairing | Allowlist | Rate Limiting │
323
+ │ Guardrails & Limits: Token Budget | Cost Cap | Iterations │
324
+ │ Approval Workflows: Shell | Delete | Bulk Operations │
325
+ │ Workspace Isolation: Path Traversal | File Boundaries │
326
+ └─────────────────────────────────────────────────────────────────┘
327
+
328
+ ┌─────────────────────────────────────────────────────────────────┐
329
+ │ React UI (Renderer) │
330
+ │ Task List | Timeline | Approval Dialogs | Live Canvas │
331
+ │ Settings | Notification Panel | MCP Registry │
332
+ └─────────────────────────────────────────────────────────────────┘
333
+ ↕ IPC
334
+ ┌─────────────────────────────────────────────────────────────────┐
335
+ │ Agent Daemon (Main Process) │
336
+ │ Task Queue Manager | Agent Executor | Tool Registry │
337
+ │ Permission Manager | Cron Service | Memory Service │
338
+ └─────────────────────────────────────────────────────────────────┘
339
+
340
+ ┌─────────────────────────────────────────────────────────────────┐
341
+ │ Execution Layer │
342
+ │ File Operations | Document Skills | Browser Automation │
343
+ │ LLM Providers (6) | Search Providers (4) | MCP Client │
344
+ └─────────────────────────────────────────────────────────────────┘
345
+
346
+ ┌─────────────────────────────────────────────────────────────────┐
347
+ │ SQLite Database | MCP Host Server | WebSocket Control Plane │
348
+ │ Tailscale / SSH Tunnel Remote Access │
349
+ └─────────────────────────────────────────────────────────────────┘
350
+ ```
351
+
352
+ ---
353
+
354
+ ## System Requirements
355
+
356
+ | Requirement | Minimum | Recommended |
357
+ |-------------|---------|-------------|
358
+ | **macOS** | 12 (Monterey) | 13+ (Ventura or later) |
359
+ | **RAM** | 4 GB | 8 GB+ |
360
+ | **CPU** | 2 cores | 4+ cores |
361
+ | **Architecture** | Intel (x64) or Apple Silicon (arm64) | Apple Silicon |
362
+
363
+ ### Supported macOS Versions
364
+
365
+ - macOS 12 Monterey
366
+ - macOS 13 Ventura
367
+ - macOS 14 Sonoma
368
+ - macOS 15 Sequoia
369
+
370
+ ### Resource Usage Notes
371
+
372
+ - **Base memory**: ~300-500 MB (Electron + React UI)
373
+ - **Per bot integration**: ~50-100 MB additional (WhatsApp, Telegram, etc.)
374
+ - **Playwright automation**: ~200-500 MB when active
375
+ - **CPU**: Mostly idle; spikes during AI API calls (network I/O bound)
376
+
377
+ ### Running on a macOS VM
378
+
379
+ If you prefer not to run CoWork OS on your main Mac, you can install it on a macOS virtual machine:
380
+
381
+ | Platform | VM Options |
382
+ |----------|------------|
383
+ | **Apple Silicon Mac** | UTM, Parallels Desktop, VMware Fusion |
384
+ | **Intel Mac** | Parallels Desktop, VMware Fusion, VirtualBox |
385
+
386
+ **Recommended VM specs:**
387
+ - 4+ GB RAM allocated to VM
388
+ - 2+ CPU cores
389
+ - 40+ GB disk space
390
+
391
+ This is a good option for:
392
+ - Testing before installing on your main machine
393
+ - Isolating AI agent file operations from your primary system
394
+ - Running experimental tasks in a sandboxed environment
395
+
396
+ ---
397
+
398
+ ## Setup
399
+
400
+ ### Prerequisites
401
+
402
+ - Node.js 18+ and npm
403
+ - macOS 12 (Monterey) or later
404
+ - One of: Anthropic API key, Google Gemini API key, OpenRouter API key, OpenAI API key, AWS Bedrock access, or Ollama installed locally
405
+
406
+ ### Installation
407
+
408
+ ```bash
409
+ # Clone the repository
410
+ git clone https://github.com/CoWork-OS/CoWork-OS.git
411
+ cd CoWork-OS
412
+
413
+ # Install dependencies
414
+ npm install
415
+
416
+ # Run in development mode
417
+ npm run dev
418
+
419
+ # Configure your API credentials in Settings (gear icon)
420
+ ```
421
+
422
+ ### Building for Production
423
+
424
+ ```bash
425
+ npm run build
426
+ npm run package
427
+ ```
428
+
429
+ The packaged app will be in the `release/` directory.
430
+
431
+ ---
432
+
433
+ ## Screenshots
434
+
435
+ <p align="center">
436
+ <img src="screenshots/cowork-os-main2.png" alt="CoWork OS Interface" width="800">
437
+ <br>
438
+ <em>Main interface with task timeline and execution view</em>
439
+ </p>
440
+
441
+ <p align="center">
442
+ <img src="screenshots/cowork-os-settings1.png" alt="CoWork OS Settings" width="800">
443
+ <br>
444
+ <em>Settings panel for AI providers and channel configuration</em>
445
+ </p>
446
+
447
+ <p align="center">
448
+ <img src="screenshots/cowork-os-settings3.png" alt="CoWork OS Channel Settings" width="800">
449
+ <br>
450
+ <em>Messaging channel integrations and security modes</em>
451
+ </p>
452
+
453
+ ---
454
+
455
+ ## Usage
456
+
457
+ ### 1. Select a Workspace
458
+
459
+ On first launch, select a folder where CoWork OS can work. This folder will be:
460
+ - Mounted for read/write access
461
+ - Protected by permission boundaries
462
+ - Used as the working directory for all tasks
463
+
464
+ ### 2. Create a Task
465
+
466
+ Click "New Task" and describe what you want to accomplish:
467
+
468
+ **Example Tasks:**
469
+ - "Organize my Downloads folder by file type"
470
+ - "Create a quarterly report spreadsheet with Q1-Q4 data"
471
+ - "Generate a presentation about our product roadmap"
472
+ - "Analyze these CSV files and create a summary document"
473
+
474
+ ### 3. Monitor Execution
475
+
476
+ Watch the task timeline as the agent:
477
+ - Creates an execution plan
478
+ - Executes steps using available tools
479
+ - Requests approvals for destructive operations
480
+ - Produces artifacts (files)
481
+
482
+ <p align="center">
483
+ <img src="screenshots/cowork-os-settings2.png" alt="CoWork OS Security Settings" width="800">
484
+ <br>
485
+ <em>Security and workspace configuration options</em>
486
+ </p>
487
+
488
+ ### 4. Approve Requests
489
+
490
+ When the agent needs to perform destructive actions, you'll see an approval dialog. Review the details and approve or deny.
491
+
492
+ ---
493
+
494
+ ## Security & Safety
495
+
496
+ > **See also:** [SECURITY_GUIDE.md](SECURITY_GUIDE.md) for a comprehensive guide on the app's security model, permissions, and best practices.
497
+
498
+ ### Important Warnings
499
+
500
+ - **Don't point this at sensitive folders** — select only folders you're comfortable giving the agent access to
501
+ - **Use version control / backups** — always have backups of important files before running tasks
502
+ - **Review approvals carefully** — read what the agent wants to do before approving
503
+ - **Treat web content as untrusted input** — be cautious with tasks involving external data
504
+
505
+ ### Workspace Boundaries
506
+
507
+ All file operations are constrained to the selected workspace folder. Path traversal attempts are rejected.
508
+
509
+ ### Permission Model
510
+
511
+ ```typescript
512
+ interface WorkspacePermissions {
513
+ read: boolean; // Read files
514
+ write: boolean; // Create/modify files
515
+ delete: boolean; // Delete files (requires approval)
516
+ network: boolean; // Network access
517
+ shell: boolean; // Execute shell commands (requires approval)
518
+ }
519
+ ```
520
+
521
+ ### Approval Requirements
522
+
523
+ The following operations always require user approval:
524
+ - File deletion
525
+ - Shell command execution (when enabled)
526
+ - Bulk rename (>10 files)
527
+ - Network access beyond allowlist
528
+ - External service calls
529
+
530
+ ---
531
+
532
+ ## Parallel Task Queue
533
+
534
+ Run multiple tasks concurrently with configurable limits.
535
+
536
+ ### How It Works
537
+
538
+ 1. **Concurrency Limit**: Set maximum simultaneous tasks (1-10, default: 3)
539
+ 2. **FIFO Queue**: Tasks beyond the limit are queued in order
540
+ 3. **Auto-Start**: Completed tasks trigger the next in queue
541
+ 4. **Persistence**: Queued tasks survive app restarts
542
+
543
+ ### Queue Panel
544
+
545
+ When tasks are running or queued, a panel shows:
546
+ - **Running tasks** with spinner indicator
547
+ - **Queued tasks** with position (#1, #2, etc.)
548
+ - **View** and **Cancel** buttons for each task
549
+
550
+ ### Quick Task FAB
551
+
552
+ Floating action button for rapid task creation:
553
+ 1. Click the **+** button
554
+ 2. Type your task prompt
555
+ 3. Press Enter to queue
556
+
557
+ ---
558
+
559
+ ## Scheduled Tasks (Cron Jobs)
560
+
561
+ Schedule recurring tasks with cron expressions and optional channel delivery.
562
+
563
+ ### Features
564
+
565
+ - **Cron Expressions**: Standard cron syntax (minute, hour, day, month, weekday)
566
+ - **Workspace Binding**: Each job runs in a specific workspace
567
+ - **Channel Delivery**: Send results to Telegram, Discord, Slack, Teams, Google Chat, WhatsApp, iMessage, Signal, Mattermost, Matrix, Twitch, LINE, BlueBubbles, or Email
568
+ - **Run History**: View execution history with status and duration
569
+ - **Enable/Disable**: Toggle jobs without deleting them
570
+
571
+ ### Cron Expression Examples
572
+
573
+ | Schedule | Expression | Description |
574
+ |----------|------------|-------------|
575
+ | Every hour | `0 * * * *` | Start of every hour |
576
+ | Daily at 9am | `0 9 * * *` | Every day at 9:00 AM |
577
+ | Weekdays at 6pm | `0 18 * * 1-5` | Monday-Friday at 6:00 PM |
578
+ | Weekly on Sunday | `0 0 * * 0` | Every Sunday at midnight |
579
+
580
+ ---
581
+
582
+ ## WhatsApp Bot Integration
583
+
584
+ Run tasks via WhatsApp using the Baileys library for Web WhatsApp connections.
585
+
586
+ ### Setting Up WhatsApp
587
+
588
+ 1. Open **Settings** > **WhatsApp** tab
589
+ 2. Click **Add WhatsApp Channel**
590
+ 3. Scan the QR code with your phone (WhatsApp > Settings > Linked Devices)
591
+ 4. Once connected, the channel status shows "Connected"
592
+
593
+ ### Self-Chat Mode
594
+
595
+ | Mode | Description | Best For |
596
+ |------|-------------|----------|
597
+ | **Self-Chat Mode ON** (default) | Bot only responds in "Message Yourself" chat | Using your personal WhatsApp |
598
+ | **Self-Chat Mode OFF** | Bot responds to all incoming messages | Dedicated bot phone number |
599
+
600
+ ### Security Modes
601
+
602
+ | Mode | Description |
603
+ |------|-------------|
604
+ | **Pairing** (default) | Users must enter a pairing code |
605
+ | **Allowlist** | Only pre-approved phone numbers |
606
+ | **Open** | Anyone can message (not recommended) |
607
+
608
+ ### Bot Commands
609
+
610
+ | Command | Description |
611
+ |---------|-------------|
612
+ | `/workspaces` | List available workspaces |
613
+ | `/workspace <n>` | Select workspace by number |
614
+ | `/newtask` | Start fresh conversation |
615
+ | `/status` | Check bot status |
616
+ | `/cancel` | Cancel running task |
617
+ | `/pair <code>` | Pair with code |
618
+
619
+ ---
620
+
621
+ ## Telegram Bot Integration
622
+
623
+ Run tasks remotely via Telegram bot.
624
+
625
+ ### Setting Up Telegram
626
+
627
+ 1. Create a bot with [@BotFather](https://t.me/BotFather) and copy the token
628
+ 2. Open **Settings** > **Channels** tab
629
+ 3. Enter your bot token and click **Add Telegram Channel**
630
+ 4. Test and enable the channel
631
+
632
+ ### Bot Commands
633
+
634
+ | Command | Description |
635
+ |---------|-------------|
636
+ | `/workspaces` | List workspaces |
637
+ | `/workspace <n>` | Select workspace |
638
+ | `/addworkspace <path>` | Add new workspace |
639
+ | `/status` | Show session status |
640
+ | `/cancel` | Cancel running task |
641
+
642
+ ---
643
+
644
+ ## Discord Bot Integration
645
+
646
+ Run tasks via Discord slash commands or direct messages.
647
+
648
+ ### Setting Up Discord
649
+
650
+ 1. Create application at [Discord Developer Portal](https://discord.com/developers/applications)
651
+ 2. Add bot and copy token
652
+ 3. Enable **Message Content Intent** in Privileged Gateway Intents
653
+ 4. Invite bot with `bot` and `applications.commands` scopes
654
+ 5. Configure in **Settings** > **Channels**
655
+
656
+ ### Slash Commands
657
+
658
+ | Command | Description |
659
+ |---------|-------------|
660
+ | `/workspaces` | List workspaces |
661
+ | `/workspace [path]` | Select workspace |
662
+ | `/task <prompt>` | Run task directly |
663
+ | `/status` | Show session status |
664
+ | `/cancel` | Cancel running task |
665
+
666
+ ---
667
+
668
+ ## Slack Bot Integration
669
+
670
+ Run tasks via Slack using Socket Mode.
671
+
672
+ ### Setting Up Slack
673
+
674
+ 1. Create app at [Slack API Apps](https://api.slack.com/apps)
675
+ 2. Enable Socket Mode and create App-Level Token (`xapp-...`)
676
+ 3. Add bot scopes: `app_mentions:read`, `chat:write`, `im:history`, `im:read`, `im:write`, `users:read`, `files:write`
677
+ 4. Subscribe to events: `app_mention`, `message.im`
678
+ 5. Install to workspace and copy Bot Token (`xoxb-...`)
679
+ 6. Configure in **Settings** > **Channels** > **Slack**
680
+
681
+ ---
682
+
683
+ ## Microsoft Teams Bot Integration
684
+
685
+ Run tasks via Microsoft Teams using the Bot Framework SDK for full bi-directional messaging.
686
+
687
+ ### Prerequisites
688
+
689
+ - Azure account with Bot Services access
690
+ - Microsoft Teams workspace where you can add apps
691
+ - Public webhook URL (use ngrok for local development)
692
+
693
+ ### Setting Up Teams
694
+
695
+ 1. **Create an Azure Bot**:
696
+ - Go to [Azure Portal - Create Bot](https://portal.azure.com/#create/Microsoft.AzureBot)
697
+ - Choose **Multi-tenant** or **Single-tenant** type
698
+ - Create or select a resource group
699
+ - Click **Create**
700
+
701
+ 2. **Get Bot Credentials**:
702
+ - In the Bot resource, go to **Configuration**
703
+ - Copy the **Microsoft App ID**
704
+ - Click **Manage Password** to go to App Registration
705
+ - Under **Certificates & secrets**, create a new client secret
706
+ - Copy the secret value (shown only once)
707
+
708
+ 3. **Add Teams Channel**:
709
+ - In the Bot resource, go to **Channels**
710
+ - Click **Microsoft Teams** and enable the channel
711
+
712
+ 4. **Set Up Webhook (for local development)**:
713
+ ```bash
714
+ ngrok http 3978
715
+ ```
716
+ - Copy the HTTPS URL from ngrok
717
+ - In Azure Bot **Configuration**, set Messaging endpoint to: `https://your-ngrok-url/api/messages`
718
+
719
+ 5. **Configure in CoWork OS**:
720
+ - Open **Settings** > **Teams** tab
721
+ - Enter your Microsoft App ID
722
+ - Enter your App Password (client secret)
723
+ - Optionally enter Tenant ID (for single-tenant apps)
724
+ - Set webhook port (default: 3978)
725
+ - Click **Add Teams Bot**
726
+
727
+ ### Security Modes
728
+
729
+ | Mode | Description |
730
+ |------|-------------|
731
+ | **Pairing** (default) | Users must enter a pairing code to interact |
732
+ | **Allowlist** | Only pre-approved Teams users can message |
733
+ | **Open** | Anyone can message (not recommended) |
734
+
735
+ ### Bot Commands
736
+
737
+ | Command | Description |
738
+ |---------|-------------|
739
+ | `/workspaces` | List available workspaces |
740
+ | `/workspace <n>` | Select workspace by number |
741
+ | `/newtask` | Start fresh conversation |
742
+ | `/status` | Check bot status |
743
+ | `/cancel` | Cancel running task |
744
+ | `/pair <code>` | Pair with code |
745
+
746
+ ### Message Features
747
+
748
+ - **Direct Messages**: Chat directly with the bot
749
+ - **Channel Mentions**: @mention the bot in any channel it's added to
750
+ - **Adaptive Cards**: Rich card formatting for responses
751
+ - **Markdown Support**: Basic markdown in messages
752
+ - **File Attachments**: Send documents and images
753
+ - **Message Editing**: Edit and delete messages
754
+
755
+ ### Important Notes
756
+
757
+ - **Webhook Required**: A public endpoint is needed to receive messages from Teams
758
+ - **ngrok for Development**: Use ngrok or similar to expose local port 3978
759
+ - **Rate Limits**: Teams has rate limits (50 requests/second per bot)
760
+ - **Auto-Reconnect**: Built-in reconnection with exponential backoff
761
+
762
+ ---
763
+
764
+ ## Google Chat Bot Integration
765
+
766
+ Run tasks via Google Chat using the Google Chat API with service account authentication.
767
+
768
+ ### Prerequisites
769
+
770
+ - Google Cloud project with Chat API enabled
771
+ - Service account with appropriate permissions
772
+ - Public webhook URL (use ngrok for local development)
773
+
774
+ ### Setting Up Google Chat
775
+
776
+ 1. **Enable Google Chat API**:
777
+ - Go to [Google Cloud Console](https://console.cloud.google.com/apis/library/chat.googleapis.com)
778
+ - Enable the Google Chat API for your project
779
+
780
+ 2. **Create a Service Account**:
781
+ - Go to **IAM & Admin** > **Service Accounts**
782
+ - Click **Create Service Account**
783
+ - Give it a name and description
784
+ - Grant roles: `Chat Bots Viewer` and `Chat Bots Admin`
785
+ - Create a JSON key and download it
786
+
787
+ 3. **Configure Chat App**:
788
+ - Go to [Chat API Configuration](https://console.cloud.google.com/apis/api/chat.googleapis.com/hangouts-chat)
789
+ - Set **App Status** to "Live"
790
+ - Under **Connection settings**, select "HTTP endpoint URL"
791
+ - Enter your public webhook URL (e.g., `https://your-ngrok-url/googlechat/webhook`)
792
+
793
+ 4. **Set Up Webhook (for local development)**:
794
+ ```bash
795
+ ngrok http 3979
796
+ ```
797
+ - Copy the HTTPS URL and use it in the Chat API configuration
798
+
799
+ 5. **Configure in CoWork OS**:
800
+ - Open **Settings** > **Google Chat** tab
801
+ - Enter the path to your service account JSON key file
802
+ - Optionally enter Project ID
803
+ - Set webhook port (default: 3979)
804
+ - Click **Add Google Chat Bot**
805
+
806
+ ### Security Modes
807
+
808
+ | Mode | Description |
809
+ |------|-------------|
810
+ | **Pairing** (default) | Users must enter a pairing code to interact |
811
+ | **Allowlist** | Only pre-approved Google users can message |
812
+ | **Open** | Anyone can message (not recommended) |
813
+
814
+ ### Bot Commands
815
+
816
+ | Command | Description |
817
+ |---------|-------------|
818
+ | `/workspaces` | List available workspaces |
819
+ | `/workspace <n>` | Select workspace by number |
820
+ | `/newtask` | Start fresh conversation |
821
+ | `/status` | Check bot status |
822
+ | `/cancel` | Cancel running task |
823
+ | `/pair <code>` | Pair with code |
824
+
825
+ ### Message Features
826
+
827
+ - **Direct Messages**: Chat directly with the bot in 1:1 conversations
828
+ - **Spaces**: Add the bot to Google Chat spaces for team access
829
+ - **Threaded Replies**: Maintains conversation threads
830
+ - **Cards**: Rich card formatting for responses (coming soon)
831
+ - **Message Editing**: Edit and delete messages
832
+
833
+ ### Important Notes
834
+
835
+ - **Webhook Required**: A public endpoint is needed to receive messages from Google Chat
836
+ - **ngrok for Development**: Use ngrok or similar to expose local port 3979
837
+ - **Service Account**: Different from OAuth - uses JWT for server-to-server auth
838
+ - **Workspace Users Only**: Google Chat bots only work within Google Workspace organizations
839
+
840
+ ---
841
+
842
+ ## iMessage Bot Integration (macOS Only)
843
+
844
+ Run tasks via iMessage using the `imsg` CLI tool.
845
+
846
+ ### Prerequisites
847
+
848
+ - macOS with Messages app signed in
849
+ - `imsg` CLI: `brew install steipete/tap/imsg`
850
+ - Full Disk Access granted to Terminal
851
+
852
+ ### How It Works
853
+
854
+ Messages from your own Apple ID are filtered. To use the bot:
855
+ - Use a **dedicated Apple ID** for the bot Mac
856
+ - Message the bot from your personal devices
857
+
858
+ ---
859
+
860
+ ## Signal Bot Integration
861
+
862
+ Run tasks via Signal with end-to-end encryption using `signal-cli`.
863
+
864
+ ### Prerequisites
865
+
866
+ - **signal-cli**: Install via Homebrew or from [GitHub](https://github.com/AsamK/signal-cli)
867
+ ```bash
868
+ brew install signal-cli
869
+ ```
870
+ - **Dedicated phone number**: Signal allows only one registration per phone number. Using the bot will deregister your existing Signal app on that number.
871
+ - **Java Runtime**: signal-cli requires Java 17+
872
+
873
+ ### Registration Options
874
+
875
+ | Option | Description | Best For |
876
+ |--------|-------------|----------|
877
+ | **Dedicated Number** | Register with a separate phone number | Production use |
878
+ | **Link as Device** | Link signal-cli as secondary device to existing account | Testing (limited functionality) |
879
+
880
+ ### Setting Up Signal
881
+
882
+ 1. **Register your phone number** (if using dedicated number):
883
+ ```bash
884
+ signal-cli -a +1234567890 register
885
+ # Enter verification code when received
886
+ signal-cli -a +1234567890 verify CODE
887
+ ```
888
+
889
+ 2. **Configure in CoWork OS**:
890
+ - Open **Settings** > **Signal** tab
891
+ - Enter your phone number
892
+ - Select data directory (default: `~/.local/share/signal-cli`)
893
+ - Click **Add Signal Channel**
894
+
895
+ 3. **Check registration status** using the "Check Registration" button
896
+
897
+ ### Security Modes
898
+
899
+ | Mode | Description |
900
+ |------|-------------|
901
+ | **Pairing** (default) | Users must enter a pairing code to interact |
902
+ | **Allowlist** | Only pre-approved phone numbers can message |
903
+ | **Open** | Anyone can message (not recommended) |
904
+
905
+ ### Trust Modes
906
+
907
+ | Mode | Description |
908
+ |------|-------------|
909
+ | **TOFU** (Trust On First Use) | Auto-trust new identity keys on first contact |
910
+ | **Always** | Always trust identity keys (less secure) |
911
+ | **Manual** | Require manual verification of identity keys |
912
+
913
+ ### Operating Modes
914
+
915
+ | Mode | Description |
916
+ |------|-------------|
917
+ | **Native** | Direct signal-cli command execution |
918
+ | **Daemon** | Connect to signal-cli JSON-RPC daemon (advanced) |
919
+
920
+ ### Bot Commands
921
+
922
+ | Command | Description |
923
+ |---------|-------------|
924
+ | `/workspaces` | List available workspaces |
925
+ | `/workspace <n>` | Select workspace by number |
926
+ | `/newtask` | Start fresh conversation |
927
+ | `/status` | Check bot status |
928
+ | `/cancel` | Cancel running task |
929
+ | `/pair <code>` | Pair with code |
930
+
931
+ ### Important Notes
932
+
933
+ - **Single Registration Limitation**: Signal only allows one active registration per phone number. Registering signal-cli will deregister any existing Signal app using that number.
934
+ - **Verification Codes**: You'll need access to receive SMS or voice calls on the phone number for verification.
935
+ - **Identity Keys**: Signal uses identity keys for end-to-end encryption. The trust mode determines how new keys are handled.
936
+
937
+ ---
938
+
939
+ ## Mattermost Bot Integration
940
+
941
+ Run tasks via Mattermost using the REST API and WebSocket for real-time messaging.
942
+
943
+ ### Prerequisites
944
+
945
+ - Mattermost server (self-hosted or cloud)
946
+ - Personal Access Token with appropriate permissions
947
+
948
+ ### Setting Up Mattermost
949
+
950
+ 1. **Generate a Personal Access Token**:
951
+ - Go to **Account Settings** > **Security** > **Personal Access Tokens**
952
+ - Click **Create Token** and copy the token
953
+
954
+ 2. **Configure in CoWork OS**:
955
+ - Open **Settings** > **Mattermost** tab
956
+ - Enter your server URL (e.g., `https://your-team.mattermost.com`)
957
+ - Enter your Personal Access Token
958
+ - Optionally specify a Team ID
959
+ - Click **Connect Mattermost**
960
+
961
+ ### Security Modes
962
+
963
+ | Mode | Description |
964
+ |------|-------------|
965
+ | **Pairing** (default) | Users must enter a pairing code to interact |
966
+ | **Allowlist** | Only pre-approved users can message |
967
+ | **Open** | Anyone can message (not recommended) |
968
+
969
+ ### Bot Commands
970
+
971
+ | Command | Description |
972
+ |---------|-------------|
973
+ | `/workspaces` | List available workspaces |
974
+ | `/workspace <n>` | Select workspace by number |
975
+ | `/newtask` | Start fresh conversation |
976
+ | `/status` | Check bot status |
977
+ | `/cancel` | Cancel running task |
978
+ | `/pair <code>` | Pair with code |
979
+
980
+ ---
981
+
982
+ ## Matrix Bot Integration
983
+
984
+ Run tasks via Matrix protocol with support for federated messaging and rooms.
985
+
986
+ ### Prerequisites
987
+
988
+ - Matrix homeserver (Matrix.org, Element, Synapse, or self-hosted)
989
+ - Access token for your Matrix account
990
+
991
+ ### Setting Up Matrix
992
+
993
+ 1. **Get your Access Token**:
994
+ - Log into your Matrix client (Element, etc.)
995
+ - Go to **Settings** > **Help & About** > **Advanced**
996
+ - Copy your Access Token
997
+ - Or use the Matrix API to generate one
998
+
999
+ 2. **Configure in CoWork OS**:
1000
+ - Open **Settings** > **Matrix** tab
1001
+ - Enter your homeserver URL (e.g., `https://matrix.org`)
1002
+ - Enter your User ID (e.g., `@yourbot:matrix.org`)
1003
+ - Enter your Access Token
1004
+ - Optionally specify Room IDs to monitor
1005
+ - Click **Connect Matrix**
1006
+
1007
+ ### Security Modes
1008
+
1009
+ | Mode | Description |
1010
+ |------|-------------|
1011
+ | **Pairing** (default) | Users must enter a pairing code to interact |
1012
+ | **Allowlist** | Only pre-approved Matrix users can message |
1013
+ | **Open** | Anyone can message (not recommended) |
1014
+
1015
+ ### Bot Commands
1016
+
1017
+ | Command | Description |
1018
+ |---------|-------------|
1019
+ | `/workspaces` | List available workspaces |
1020
+ | `/workspace <n>` | Select workspace by number |
1021
+ | `/newtask` | Start fresh conversation |
1022
+ | `/status` | Check bot status |
1023
+ | `/cancel` | Cancel running task |
1024
+ | `/pair <code>` | Pair with code |
1025
+
1026
+ ### Important Notes
1027
+
1028
+ - **Room-Based**: Matrix operates on rooms. Configure specific room IDs or let the bot respond in any room it's invited to.
1029
+ - **Federation**: Matrix is federated, allowing communication across different homeservers.
1030
+ - **E2EE**: End-to-end encryption support depends on room settings.
1031
+
1032
+ ---
1033
+
1034
+ ## Twitch Bot Integration
1035
+
1036
+ Run tasks via Twitch chat using IRC over WebSocket.
1037
+
1038
+ ### Prerequisites
1039
+
1040
+ - Twitch account for the bot
1041
+ - OAuth token with chat permissions
1042
+
1043
+ ### Getting an OAuth Token
1044
+
1045
+ 1. Visit [twitchtokengenerator.com](https://twitchtokengenerator.com/)
1046
+ 2. Select **Chat Bot** token type
1047
+ 3. Authorize with your Twitch account
1048
+ 4. Copy the OAuth token (starts with `oauth:`)
1049
+
1050
+ ### Setting Up Twitch
1051
+
1052
+ 1. **Configure in CoWork OS**:
1053
+ - Open **Settings** > **Twitch** tab
1054
+ - Enter your Twitch username
1055
+ - Enter your OAuth token
1056
+ - Enter channel names to join (comma-separated, without #)
1057
+ - Optionally enable whispers (DMs)
1058
+ - Click **Connect Twitch**
1059
+
1060
+ ### Security Modes
1061
+
1062
+ | Mode | Description |
1063
+ |------|-------------|
1064
+ | **Pairing** (default) | Users must enter a pairing code to interact |
1065
+ | **Allowlist** | Only pre-approved Twitch users can message |
1066
+ | **Open** | Anyone can message (not recommended) |
1067
+
1068
+ ### Bot Commands
1069
+
1070
+ | Command | Description |
1071
+ |---------|-------------|
1072
+ | `/workspaces` | List available workspaces |
1073
+ | `/workspace <n>` | Select workspace by number |
1074
+ | `/newtask` | Start fresh conversation |
1075
+ | `/status` | Check bot status |
1076
+ | `/cancel` | Cancel running task |
1077
+ | `/pair <code>` | Pair with code |
1078
+
1079
+ ### Limitations
1080
+
1081
+ - **No File Attachments**: Twitch chat is text-only
1082
+ - **Rate Limited**: 20 messages per 30 seconds
1083
+ - **Message Length**: 500 characters max per message (auto-split for longer responses)
1084
+ - **Whispers**: May require verified account status
1085
+
1086
+ ---
1087
+
1088
+ ## LINE Bot Integration
1089
+
1090
+ Run tasks via LINE Messaging API with webhooks and push/reply messages.
1091
+
1092
+ ### Prerequisites
1093
+
1094
+ - LINE Developers account ([developers.line.biz](https://developers.line.biz/))
1095
+ - Messaging API channel with Channel Access Token and Channel Secret
1096
+ - Public webhook URL (use ngrok or cloudflare tunnel for development)
1097
+
1098
+ ### Setting Up LINE
1099
+
1100
+ 1. **Create a LINE Messaging API Channel**:
1101
+ - Go to [LINE Developers Console](https://developers.line.biz/console/)
1102
+ - Create a new provider or select existing
1103
+ - Create a new Messaging API channel
1104
+ - Copy the Channel Access Token (long-lived)
1105
+ - Copy the Channel Secret
1106
+
1107
+ 2. **Configure in CoWork OS**:
1108
+ - Open **Settings** > **LINE** tab
1109
+ - Enter your Channel Access Token
1110
+ - Enter your Channel Secret
1111
+ - Configure webhook port (default: 3100)
1112
+ - Click **Connect LINE**
1113
+
1114
+ 3. **Configure Webhook in LINE Console**:
1115
+ - Set webhook URL to your public endpoint (e.g., `https://your-domain.com/line/webhook`)
1116
+ - Enable "Use webhook"
1117
+ - Disable "Auto-reply messages" and "Greeting messages"
1118
+
1119
+ ### Security Modes
1120
+
1121
+ | Mode | Description |
1122
+ |------|-------------|
1123
+ | **Pairing** (default) | Users must enter a pairing code to interact |
1124
+ | **Allowlist** | Only pre-approved LINE user IDs can message |
1125
+ | **Open** | Anyone can message (not recommended) |
1126
+
1127
+ ### Bot Commands
1128
+
1129
+ | Command | Description |
1130
+ |---------|-------------|
1131
+ | `/workspaces` | List available workspaces |
1132
+ | `/workspace <n>` | Select workspace by number |
1133
+ | `/newtask` | Start fresh conversation |
1134
+ | `/status` | Check bot status |
1135
+ | `/cancel` | Cancel running task |
1136
+ | `/pair <code>` | Pair with code |
1137
+
1138
+ ### Message Types
1139
+
1140
+ - **Reply Messages**: Free, use reply tokens (valid 1 minute)
1141
+ - **Push Messages**: Uses monthly quota, for proactive messaging
1142
+
1143
+ ### Important Notes
1144
+
1145
+ - **Reply tokens are ephemeral** - valid only for ~1 minute after receiving a message
1146
+ - **Push messages count against quota** - free plan has limited monthly messages
1147
+ - **Media messages** require hosting URLs (image/video sending not fully implemented)
1148
+
1149
+ ---
1150
+
1151
+ ## BlueBubbles Bot Integration
1152
+
1153
+ Run tasks via iMessage using BlueBubbles server running on a Mac.
1154
+
1155
+ ### Prerequisites
1156
+
1157
+ - Mac computer running 24/7 with Messages app signed in
1158
+ - BlueBubbles server installed ([bluebubbles.app](https://bluebubbles.app/))
1159
+ - Network access to the BlueBubbles server
1160
+
1161
+ ### Setting Up BlueBubbles
1162
+
1163
+ 1. **Install BlueBubbles Server on Mac**:
1164
+ - Download from [bluebubbles.app](https://bluebubbles.app/)
1165
+ - Follow setup wizard to configure
1166
+ - Note the server URL and password
1167
+
1168
+ 2. **Configure in CoWork OS**:
1169
+ - Open **Settings** > **BlueBubbles** tab
1170
+ - Enter your server URL (e.g., `http://192.168.1.100:1234`)
1171
+ - Enter your server password
1172
+ - Optionally configure contact allowlist
1173
+ - Click **Connect BlueBubbles**
1174
+
1175
+ ### Security Modes
1176
+
1177
+ | Mode | Description |
1178
+ |------|-------------|
1179
+ | **Pairing** (default) | Users must enter a pairing code to interact |
1180
+ | **Allowlist** | Only pre-approved phone numbers/emails can message |
1181
+ | **Open** | Anyone can message (not recommended) |
1182
+
1183
+ ### Bot Commands
1184
+
1185
+ | Command | Description |
1186
+ |---------|-------------|
1187
+ | `/workspaces` | List available workspaces |
1188
+ | `/workspace <n>` | Select workspace by number |
1189
+ | `/newtask` | Start fresh conversation |
1190
+ | `/status` | Check bot status |
1191
+ | `/cancel` | Cancel running task |
1192
+ | `/pair <code>` | Pair with code |
1193
+
1194
+ ### Features
1195
+
1196
+ - **iMessage and SMS**: Send to both iMessage and SMS contacts
1197
+ - **Group Chats**: Support for group conversations
1198
+ - **Webhooks or Polling**: Real-time via webhooks or fallback polling
1199
+
1200
+ ### Important Notes
1201
+
1202
+ - **Requires Mac running 24/7** - BlueBubbles server must stay online
1203
+ - **iMessage limitations** - No message editing or deletion (iMessage doesn't support it)
1204
+ - **Network access** - CoWork OS must be able to reach the BlueBubbles server
1205
+
1206
+ ---
1207
+
1208
+ ## Email Bot Integration
1209
+
1210
+ Run tasks via email using IMAP/SMTP. Universal channel that works with any email provider.
1211
+
1212
+ ### Prerequisites
1213
+
1214
+ - Email account with IMAP and SMTP access
1215
+ - App password (for Gmail, Outlook, Yahoo with 2FA enabled)
1216
+
1217
+ ### Setting Up Email
1218
+
1219
+ 1. **Configure in CoWork OS**:
1220
+ - Open **Settings** > **Email** tab
1221
+ - Use quick setup for Gmail, Outlook, or Yahoo (fills server details)
1222
+ - Enter your email address
1223
+ - Enter your password or app password
1224
+ - Configure IMAP and SMTP settings if using other provider
1225
+ - Click **Connect Email**
1226
+
1227
+ ### Email Provider Settings
1228
+
1229
+ | Provider | IMAP Host | IMAP Port | SMTP Host | SMTP Port |
1230
+ |----------|-----------|-----------|-----------|-----------|
1231
+ | **Gmail** | imap.gmail.com | 993 | smtp.gmail.com | 587 |
1232
+ | **Outlook** | outlook.office365.com | 993 | smtp.office365.com | 587 |
1233
+ | **Yahoo** | imap.mail.yahoo.com | 993 | smtp.mail.yahoo.com | 465 |
1234
+
1235
+ ### Security Modes
1236
+
1237
+ | Mode | Description |
1238
+ |------|-------------|
1239
+ | **Pairing** (default) | Users must enter a pairing code to interact |
1240
+ | **Allowlist** | Only pre-approved email addresses can message |
1241
+ | **Open** | Anyone can message (not recommended) |
1242
+
1243
+ ### Bot Commands
1244
+
1245
+ | Command | Description |
1246
+ |---------|-------------|
1247
+ | `/workspaces` | List available workspaces |
1248
+ | `/workspace <n>` | Select workspace by number |
1249
+ | `/newtask` | Start fresh conversation |
1250
+ | `/status` | Check bot status |
1251
+ | `/cancel` | Cancel running task |
1252
+ | `/pair <code>` | Pair with code |
1253
+
1254
+ ### Filtering Options
1255
+
1256
+ - **Allowed Senders**: Comma-separated email addresses to accept (leave empty for all)
1257
+ - **Subject Filter**: Only process emails containing this text in subject (e.g., `[CoWork]`)
1258
+
1259
+ ### Features
1260
+
1261
+ - **Reply Threading**: Maintains conversation threads via In-Reply-To headers
1262
+ - **Subject Filtering**: Only process emails with specific subject patterns
1263
+ - **Sender Allowlist**: Restrict to specific email addresses
1264
+ - **Universal**: Works with any email provider supporting IMAP/SMTP
1265
+
1266
+ ### Important Notes
1267
+
1268
+ - **App Passwords**: Gmail/Outlook with 2FA require app passwords, not regular passwords
1269
+ - **No editing/deletion**: Email doesn't support modifying sent messages
1270
+ - **Attachments**: Not yet implemented
1271
+ - **Polling**: Uses IMAP polling (default 30 seconds) - not instant delivery
1272
+
1273
+ ---
1274
+
1275
+ ## Menu Bar App (macOS)
1276
+
1277
+ Native menu bar companion for quick access without the main window.
1278
+
1279
+ ### Features
1280
+
1281
+ - Quick access to workspaces and tasks
1282
+ - Channel connection status
1283
+ - New task shortcut
1284
+ - Configure in **Settings** > **Menu Bar**
1285
+
1286
+ ### Quick Input Window
1287
+
1288
+ Press **⌘⇧Space** from anywhere to open a floating input window:
1289
+ - Global shortcut works from any app
1290
+ - See responses inline
1291
+ - Copy results to clipboard
1292
+
1293
+ ---
1294
+
1295
+ ## Mobile Companions (iOS/Android)
1296
+
1297
+ Access CoWork OS from your iPhone, iPad, or Android device via the local network.
1298
+
1299
+ ### Prerequisites
1300
+
1301
+ - CoWork OS running on your Mac
1302
+ - Mobile device on the same local network (WiFi)
1303
+ - Control Plane enabled with LAN access
1304
+
1305
+ ### Setting Up Mobile Access
1306
+
1307
+ 1. **Enable Control Plane**:
1308
+ - Open **Settings** > **Control Plane**
1309
+ - Check **Enable Control Plane**
1310
+ - Check **Allow LAN Connections (Mobile Companions)**
1311
+
1312
+ 2. **Get Connection Details**:
1313
+ - Note your Mac's local IP address (shown in Control Plane settings or run `ipconfig getifaddr en0`)
1314
+ - Copy the authentication token (click **Show** then **Copy**)
1315
+
1316
+ 3. **Connect from Mobile App**:
1317
+ - Enter server URL: `ws://<your-mac-ip>:18789` (e.g., `ws://192.168.1.100:18789`)
1318
+ - Enter authentication token
1319
+ - Tap **Connect**
1320
+
1321
+ ### Features
1322
+
1323
+ | Feature | Description |
1324
+ |---------|-------------|
1325
+ | **Task Creation** | Create and run tasks from your mobile device |
1326
+ | **Real-time Updates** | See task progress and results in real-time |
1327
+ | **Workspace Selection** | Switch between workspaces |
1328
+ | **Secure Authentication** | Token-based authentication protects access |
1329
+
1330
+ ### Security Considerations
1331
+
1332
+ - **LAN Only**: Mobile companions connect via local network only (not exposed to internet)
1333
+ - **Token Required**: Each connection requires the authentication token
1334
+ - **Firewall**: Ensure your Mac's firewall allows connections on port 18789
1335
+ - **Same Network**: Mobile device must be on the same WiFi network as your Mac
1336
+
1337
+ ### Troubleshooting
1338
+
1339
+ | Issue | Solution |
1340
+ |-------|----------|
1341
+ | Cannot connect | Verify "Allow LAN Connections" is enabled and restart the server |
1342
+ | Connection refused | Check firewall settings, ensure port 18789 is accessible |
1343
+ | Authentication failed | Regenerate and re-enter the authentication token |
1344
+ | Server not found | Verify Mac's IP address, ensure both devices are on same network |
1345
+
1346
+ ---
1347
+
1348
+ ## Web Search Integration
1349
+
1350
+ Multi-provider web search for research tasks.
1351
+
1352
+ ### Supported Providers
1353
+
1354
+ | Provider | Types | Best For |
1355
+ |----------|-------|----------|
1356
+ | **Tavily** | Web, News | AI-optimized results (recommended) |
1357
+ | **Brave Search** | Web, News, Images | Privacy-focused |
1358
+ | **SerpAPI** | Web, News, Images | Google results |
1359
+ | **Google Custom Search** | Web, Images | Direct Google integration |
1360
+
1361
+ Configure in **Settings** > **Web Search**.
1362
+
1363
+ ---
1364
+
1365
+ ## Code Tools
1366
+
1367
+ Claude Code-style tools for developers.
1368
+
1369
+ ### glob - Pattern-Based File Search
1370
+
1371
+ ```
1372
+ "Find all TypeScript test files"
1373
+ → glob pattern="**/*.test.ts"
1374
+ ```
1375
+
1376
+ ### grep - Regex Content Search
1377
+
1378
+ ```
1379
+ "Find all TODO comments"
1380
+ → grep pattern="TODO:" glob="*.ts"
1381
+ ```
1382
+
1383
+ ### edit_file - Surgical Editing
1384
+
1385
+ ```
1386
+ "Rename function getUser to fetchUser"
1387
+ → edit_file file_path="src/api.ts" old_string="function getUser" new_string="function fetchUser"
1388
+ ```
1389
+
1390
+ ---
1391
+
1392
+ ## Web Fetch Tools
1393
+
1394
+ ### web_fetch
1395
+
1396
+ Fetch and parse web pages with HTML-to-text conversion.
1397
+
1398
+ ```
1399
+ "Get main content from docs"
1400
+ → web_fetch url="https://docs.example.com" selector="main"
1401
+ ```
1402
+
1403
+ ### http_request
1404
+
1405
+ Full HTTP client for API calls (curl-like).
1406
+
1407
+ ```
1408
+ "Check API endpoint"
1409
+ → http_request url="https://api.example.com/health" method="GET"
1410
+ ```
1411
+
1412
+ ---
1413
+
1414
+ ## Personality & Customization
1415
+
1416
+ Tell the agent what you want:
1417
+
1418
+ | Say this | Effect |
1419
+ |----------|--------|
1420
+ | "be more professional" | Changes to formal style |
1421
+ | "be like Jarvis" | Adopts Jarvis persona |
1422
+ | "use more emojis" | Increases emoji usage |
1423
+ | "be brief" | Shorter responses |
1424
+ | "call yourself Max" | Changes agent name |
1425
+
1426
+ ---
1427
+
1428
+ ## Ollama Integration (Local LLMs)
1429
+
1430
+ Run completely offline and free.
1431
+
1432
+ ### Setup
1433
+
1434
+ ```bash
1435
+ # Install
1436
+ brew install ollama
1437
+
1438
+ # Pull a model
1439
+ ollama pull llama3.2
1440
+
1441
+ # Start server
1442
+ ollama serve
1443
+ ```
1444
+
1445
+ ### Recommended Models
1446
+
1447
+ | Model | Size | Best For |
1448
+ |-------|------|----------|
1449
+ | `llama3.2` | 3B | Quick tasks |
1450
+ | `qwen2.5:14b` | 14B | Balanced performance |
1451
+ | `deepseek-r1:14b` | 14B | Coding tasks |
1452
+
1453
+ ---
1454
+
1455
+ ## Google Gemini Integration
1456
+
1457
+ ### Setup
1458
+
1459
+ 1. Get API key from [Google AI Studio](https://aistudio.google.com/apikey)
1460
+ 2. Configure in **Settings** > **Google Gemini**
1461
+
1462
+ ### Models
1463
+
1464
+ - `gemini-2.0-flash` (default)
1465
+ - `gemini-2.5-pro` (most capable)
1466
+ - `gemini-2.5-flash` (fast)
1467
+
1468
+ ---
1469
+
1470
+ ## OpenRouter Integration
1471
+
1472
+ Access multiple AI providers through one API.
1473
+
1474
+ ### Setup
1475
+
1476
+ 1. Get API key from [OpenRouter](https://openrouter.ai/keys)
1477
+ 2. Configure in **Settings** > **OpenRouter**
1478
+
1479
+ ### Available Models
1480
+
1481
+ Claude, GPT-4, Gemini, Llama, Mistral, and more — see [openrouter.ai/models](https://openrouter.ai/models)
1482
+
1483
+ ---
1484
+
1485
+ ## OpenAI / ChatGPT Integration
1486
+
1487
+ ### Option 1: API Key
1488
+
1489
+ Standard pay-per-token access to GPT models.
1490
+
1491
+ ### Option 2: ChatGPT OAuth
1492
+
1493
+ Sign in with your ChatGPT subscription to use without additional API costs.
1494
+
1495
+ ---
1496
+
1497
+ ## Built-in Skills (75+)
1498
+
1499
+ | Category | Skills |
1500
+ |----------|--------|
1501
+ | **Developer** | GitHub, GitLab, Linear, Jira, Sentry |
1502
+ | **Communication** | Slack, Discord, Telegram, Email |
1503
+ | **Productivity** | Notion, Obsidian, Todoist, Apple Notes/Reminders |
1504
+ | **Media** | Spotify, YouTube, SoundCloud |
1505
+ | **Documents** | Excel, Word, PDF, PowerPoint |
1506
+
1507
+ ---
1508
+
1509
+ ## MCP (Model Context Protocol)
1510
+
1511
+ ### MCP Client
1512
+
1513
+ Connect to external MCP servers for extended capabilities.
1514
+
1515
+ ### MCP Host
1516
+
1517
+ Expose CoWork's tools as an MCP server for external clients.
1518
+
1519
+ ### MCP Registry
1520
+
1521
+ Browse and install servers from a catalog with one-click installation.
1522
+
1523
+ ---
1524
+
1525
+ ## WebSocket Control Plane
1526
+
1527
+ Programmatic API for external automation and mobile companion apps.
1528
+
1529
+ ### Features
1530
+
1531
+ - Challenge-response token authentication
1532
+ - Request/response/event protocol
1533
+ - Rate limiting for auth attempts
1534
+ - Full task API (create, list, get, cancel)
1535
+ - Real-time event streaming
1536
+ - **LAN Access**: Enable "Allow LAN Connections" for mobile companion support
1537
+
1538
+ ### Connection Modes
1539
+
1540
+ | Mode | Binding | Use Case |
1541
+ |------|---------|----------|
1542
+ | **Local Only** | `127.0.0.1:18789` | Desktop automation, localhost only |
1543
+ | **LAN Access** | `0.0.0.0:18789` | Mobile companions, local network access |
1544
+
1545
+ Configure in **Settings** > **Control Plane**.
1546
+
1547
+ ---
1548
+
1549
+ ## Tailscale Integration
1550
+
1551
+ Secure remote access without port forwarding.
1552
+
1553
+ - **Serve Mode**: Expose to your private tailnet
1554
+ - **Funnel Mode**: Public HTTPS via Tailscale edge network
1555
+ - Automatic TLS certificates
1556
+
1557
+ ---
1558
+
1559
+ ## SSH Tunnel Support
1560
+
1561
+ Standard SSH port forwarding for remote access.
1562
+
1563
+ - Connect to remote instances
1564
+ - Auto-reconnection with backoff
1565
+ - Encrypted transport with keychain storage
1566
+
1567
+ ---
1568
+
1569
+ ## Compliance
1570
+
1571
+ Users must comply with their model provider's terms:
1572
+
1573
+ - [Anthropic Commercial Terms](https://www.anthropic.com/legal/commercial-terms)
1574
+ - [Anthropic Usage Policy](https://www.anthropic.com/legal/aup)
1575
+ - [AWS Bedrock Third-Party Model Terms](https://aws.amazon.com/legal/bedrock/third-party-models/)
1576
+
1577
+ ---
1578
+
1579
+ ## Roadmap
1580
+
1581
+ ### Completed
1582
+
1583
+ - [x] Multi-provider LLM support (6 providers)
1584
+ - [x] Multi-channel messaging (14 channels)
1585
+ - [x] Configurable guardrails and security
1586
+ - [x] Browser automation with Playwright
1587
+ - [x] Code tools (glob, grep, edit_file)
1588
+ - [x] Document creation (Excel, Word, PDF, PowerPoint)
1589
+ - [x] MCP support (Client, Host, Registry)
1590
+ - [x] WebSocket Control Plane with API
1591
+ - [x] Tailscale and SSH remote access
1592
+ - [x] Personality system
1593
+ - [x] 75+ bundled skills
1594
+ - [x] 1800+ unit tests
1595
+ - [x] Docker-based sandboxing (cross-platform)
1596
+ - [x] Per-context security policies (DM vs group)
1597
+ - [x] Enhanced pairing code UI with countdown
1598
+ - [x] Persistent memory system with privacy protection
1599
+ - [x] Mobile Companions with LAN access support
1600
+ - [x] Voice Mode with ElevenLabs and OpenAI integration
1601
+
1602
+ ### Planned
1603
+
1604
+ - [ ] VM sandbox using macOS Virtualization.framework
1605
+ - [ ] Network egress controls with proxy
1606
+ - [ ] Cross-platform UI support (Windows, Linux)
1607
+
1608
+ ---
1609
+
1610
+ ## Contributing
1611
+
1612
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
1613
+
1614
+ ---
1615
+
1616
+ ## Security
1617
+
1618
+ See [SECURITY.md](SECURITY.md) for vulnerability reporting.
1619
+
1620
+ For end-user security guidance, see:
1621
+ - [SECURITY_GUIDE.md](SECURITY_GUIDE.md) - Quick reference
1622
+ - [docs/security/](docs/security/) - Comprehensive security documentation
1623
+ - [Security Model](docs/security/security-model.md) - Architecture overview
1624
+ - [Trust Boundaries](docs/security/trust-boundaries.md) - Isolation layers
1625
+ - [Configuration Guide](docs/security/configuration-guide.md) - Setup instructions
1626
+ - [Best Practices](docs/security/best-practices.md) - Recommended settings
1627
+
1628
+ ---
1629
+
1630
+ ## License
1631
+
1632
+ MIT License. See [LICENSE](LICENSE).
1633
+
1634
+ ---
1635
+
1636
+ ## Legal
1637
+
1638
+ "Cowork" is an Anthropic product name. CoWork OS is an independent open-source project and is not affiliated with, endorsed by, or sponsored by Anthropic. If requested by the rights holder, we will update naming/branding.