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/package.json ADDED
@@ -0,0 +1,159 @@
1
+ {
2
+ "name": "cowork-os",
3
+ "version": "0.3.21",
4
+ "description": "CoWork OS - The operating system for personal AI assistants",
5
+ "overrides": {
6
+ "undici": "^7.0.0"
7
+ },
8
+ "main": "dist/electron/electron/main.js",
9
+ "author": "CoWork OS Contributors",
10
+ "license": "MIT",
11
+ "homepage": "https://github.com/CoWork-OS/CoWork-OS#readme",
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "git+https://github.com/CoWork-OS/CoWork-OS.git"
15
+ },
16
+ "bugs": {
17
+ "url": "https://github.com/CoWork-OS/CoWork-OS/issues"
18
+ },
19
+ "keywords": [
20
+ "ai-assistant",
21
+ "personal-ai",
22
+ "self-hosted",
23
+ "ai-gateway",
24
+ "whatsapp-bot",
25
+ "telegram-bot",
26
+ "discord-bot",
27
+ "slack-bot",
28
+ "ai-automation",
29
+ "llm",
30
+ "claude",
31
+ "gpt",
32
+ "gemini",
33
+ "ollama",
34
+ "mcp",
35
+ "electron",
36
+ "macos",
37
+ "security",
38
+ "local-first",
39
+ "byok"
40
+ ],
41
+ "private": false,
42
+ "scripts": {
43
+ "postinstall": "electron-rebuild -f -w better-sqlite3",
44
+ "dev": "concurrently \"npm run dev:react\" \"npm run dev:electron\"",
45
+ "dev:react": "vite",
46
+ "dev:electron": "tsc -p tsconfig.electron.json && cross-env NODE_ENV=development electron .",
47
+ "build": "npm run build:react && npm run build:electron",
48
+ "build:react": "vite build",
49
+ "build:electron": "tsc -p tsconfig.electron.json",
50
+ "package": "npm run build && electron-builder",
51
+ "lint": "eslint src --ext ts,tsx",
52
+ "type-check": "tsc --noEmit",
53
+ "test": "vitest run",
54
+ "test:watch": "vitest",
55
+ "test:coverage": "vitest run --coverage"
56
+ },
57
+ "dependencies": {
58
+ "@anthropic-ai/sdk": "^0.72.1",
59
+ "@aws-sdk/client-bedrock": "^3.980.0",
60
+ "@aws-sdk/client-bedrock-runtime": "^3.980.0",
61
+ "@google/generative-ai": "^0.24.1",
62
+ "@grammyjs/runner": "^2.0.3",
63
+ "@grammyjs/transformer-throttler": "^1.2.1",
64
+ "@mariozechner/pi-ai": "^0.51.0",
65
+ "@slack/bolt": "^4.6.0",
66
+ "@types/jszip": "^3.4.1",
67
+ "@whiskeysockets/baileys": "^6.7.16",
68
+ "better-sqlite3": "^12.6.2",
69
+ "botbuilder": "^4.23.3",
70
+ "chokidar": "^5.0.0",
71
+ "discord.js": "^14.25.1",
72
+ "docx": "^9.5.1",
73
+ "electron-updater": "^6.3.9",
74
+ "eventsource": "^4.1.0",
75
+ "exceljs": "^4.4.0",
76
+ "grammy": "^1.39.3",
77
+ "jszip": "^3.10.1",
78
+ "mammoth": "^1.11.0",
79
+ "mime-types": "^3.0.2",
80
+ "openai": "^6.17.0",
81
+ "pdf-parse": "^2.4.5",
82
+ "pdfkit": "^0.17.2",
83
+ "playwright": "^1.58.1",
84
+ "pptxgenjs": "^4.0.1",
85
+ "qrcode": "^1.5.4",
86
+ "qrcode-terminal": "^0.12.0",
87
+ "react": "^19.2.4",
88
+ "react-dom": "^19.2.4",
89
+ "react-markdown": "^10.1.0",
90
+ "remark-breaks": "^4.0.0",
91
+ "remark-gfm": "^4.0.1",
92
+ "uuid": "^13.0.0",
93
+ "ws": "^8.18.0",
94
+ "zod": "^4.3.6"
95
+ },
96
+ "devDependencies": {
97
+ "@electron/rebuild": "^4.0.3",
98
+ "@types/better-sqlite3": "^7.6.8",
99
+ "@types/mime-types": "^3.0.1",
100
+ "@types/node": "^25.2.0",
101
+ "@types/pdf-parse": "^1.1.5",
102
+ "@types/pdfkit": "^0.17.4",
103
+ "@types/qrcode": "^1.5.5",
104
+ "@types/react": "^19.2.10",
105
+ "@types/react-dom": "^19.2.3",
106
+ "@types/ws": "^8.5.13",
107
+ "@typescript-eslint/eslint-plugin": "^8.54.0",
108
+ "@typescript-eslint/parser": "^8.53.1",
109
+ "@vitejs/plugin-react": "^5.1.2",
110
+ "@vitest/coverage-v8": "^4.0.18",
111
+ "concurrently": "^9.2.1",
112
+ "cross-env": "^10.1.0",
113
+ "electron": "^40.1.0",
114
+ "electron-builder": "^26.7.0",
115
+ "electron-rebuild": "^3.2.9",
116
+ "eslint": "^9.39.2",
117
+ "globals": "^17.3.0",
118
+ "typescript": "^5.7.3",
119
+ "vite": "^7.3.1",
120
+ "vite-plugin-electron": "^0.29.0",
121
+ "vitest": "^4.0.18"
122
+ },
123
+ "build": {
124
+ "appId": "com.cowork-os.app",
125
+ "productName": "CoWork OS",
126
+ "directories": {
127
+ "output": "release"
128
+ },
129
+ "files": [
130
+ "dist/**/*",
131
+ "package.json"
132
+ ],
133
+ "extraResources": [
134
+ {
135
+ "from": "resources/skills",
136
+ "to": "skills",
137
+ "filter": [
138
+ "**/*.json"
139
+ ]
140
+ }
141
+ ],
142
+ "mac": {
143
+ "target": [
144
+ "dmg",
145
+ "zip"
146
+ ],
147
+ "category": "public.app-category.productivity",
148
+ "hardenedRuntime": true,
149
+ "gatekeeperAssess": false,
150
+ "entitlements": "build/entitlements.mac.plist",
151
+ "entitlementsInherit": "build/entitlements.mac.plist"
152
+ },
153
+ "publish": {
154
+ "provider": "github",
155
+ "owner": "CoWork-OS",
156
+ "repo": "CoWork-OS"
157
+ }
158
+ }
159
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "1password",
3
+ "name": "1password",
4
+ "description": "Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading/injecting/running secrets via op.",
5
+ "icon": "🔐",
6
+ "category": "Tools",
7
+ "prompt": "# 1Password CLI\n\nFollow the official CLI get-started steps. Don't guess install commands.\n\n## References\n\n- `references/get-started.md` (install + app integration + sign-in flow)\n- `references/cli-examples.md` (real `op` examples)\n\n## Workflow\n\n1. Check OS + shell.\n2. Verify CLI present: `op --version`.\n3. Confirm desktop app integration is enabled (per get-started) and the app is unlocked.\n4. REQUIRED: create a fresh tmux session for all `op` commands (no direct `op` calls outside tmux).\n5. Sign in / authorize inside tmux: `op signin` (expect app prompt).\n6. Verify access inside tmux: `op whoami` (must succeed before any secret read).\n7. If multiple accounts: use `--account` or `OP_ACCOUNT`.\n\n## REQUIRED tmux session (T-Max)\n\nThe shell tool uses a fresh TTY per command. To avoid re-prompts and failures, always run `op` inside a dedicated tmux session with a fresh socket/session name.\n\nExample (see `tmux` skill for socket conventions, do not reuse old session names):\n\n```bash\nSOCKET_DIR=\"${CoWork-OSS_TMUX_SOCKET_DIR:-${CoWork-OSSBOT_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/CoWork-OSS-tmux-sockets}}\"\nmkdir -p \"$SOCKET_DIR\"\nSOCKET=\"$SOCKET_DIR/CoWork-OSS-op.sock\"\nSESSION=\"op-auth-$(date +%Y%m%d-%H%M%S)\"\n\ntmux -S \"$SOCKET\" new -d -s \"$SESSION\" -n shell\ntmux -S \"$SOCKET\" send-keys -t \"$SESSION\":0.0 -- \"op signin --account my.1password.com\" Enter\ntmux -S \"$SOCKET\" send-keys -t \"$SESSION\":0.0 -- \"op whoami\" Enter\ntmux -S \"$SOCKET\" send-keys -t \"$SESSION\":0.0 -- \"op vault list\" Enter\ntmux -S \"$SOCKET\" capture-pane -p -J -t \"$SESSION\":0.0 -S -200\ntmux -S \"$SOCKET\" kill-session -t \"$SESSION\"\n```\n\n## Guardrails\n\n- Never paste secrets into logs, chat, or code.\n- Prefer `op run` / `op inject` over writing secrets to disk.\n- If sign-in without app integration is needed, use `op account add`.\n- If a command returns \"account is not signed in\", re-run `op signin` inside tmux and authorize in the app.\n- Do not run `op` outside tmux; stop and ask if tmux is unavailable.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "id": "add-documentation",
3
+ "name": "Add Documentation",
4
+ "description": "Generate JSDoc/docstrings for functions",
5
+ "icon": "📚",
6
+ "category": "Development",
7
+ "prompt": "Please add documentation to all functions in {{path}}.\n\nRequirements:\n- Use {{style}} documentation style\n- Document all parameters with types\n- Document return values\n- Add brief description of what each function does\n- Include @example where helpful\n- Note any side effects or exceptions\n\nPreserve existing documentation if it's accurate, enhance if needed.",
8
+ "parameters": [
9
+ {
10
+ "name": "path",
11
+ "type": "string",
12
+ "description": "Path to the file to document",
13
+ "required": true
14
+ },
15
+ {
16
+ "name": "style",
17
+ "type": "select",
18
+ "description": "Documentation style",
19
+ "required": true,
20
+ "default": "JSDoc",
21
+ "options": [
22
+ "JSDoc",
23
+ "TSDoc",
24
+ "Python docstring",
25
+ "Javadoc",
26
+ "XML comments"
27
+ ]
28
+ }
29
+ ],
30
+ "enabled": true
31
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "analyze-csv",
3
+ "name": "Analyze CSV",
4
+ "description": "Load a CSV and provide insights",
5
+ "icon": "📊",
6
+ "category": "Data",
7
+ "prompt": "Please analyze the CSV file at {{path}}.\n\nProvide:\n1. **Overview**: Number of rows, columns, file size\n2. **Columns**: List each column with data type and sample values\n3. **Statistics**: For numeric columns - min, max, mean, median\n4. **Missing Data**: Identify columns with null/empty values\n5. **Patterns**: Any notable patterns or anomalies\n6. **Insights**: Key findings and observations\n\nIf the file is large, analyze a representative sample.\nCreate visualizations or summary tables if helpful.",
8
+ "parameters": [
9
+ {
10
+ "name": "path",
11
+ "type": "string",
12
+ "description": "Path to the CSV file",
13
+ "required": true
14
+ }
15
+ ],
16
+ "enabled": true
17
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "apple-notes",
3
+ "name": "Apple-notes",
4
+ "description": "Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks CoWork-OSS to add a note, list notes, search notes, or manage note folders.",
5
+ "icon": "📝",
6
+ "category": "Tools",
7
+ "prompt": "# Apple Notes CLI\n\nUse `memo notes` to manage Apple Notes directly from the terminal. Create, view, edit, delete, search, move notes between folders, and export to HTML/Markdown.\n\nSetup\n\n- Install (Homebrew): `brew tap antoniorodr/memo && brew install antoniorodr/memo/memo`\n- Manual (pip): `pip install .` (after cloning the repo)\n- macOS-only; if prompted, grant Automation access to Notes.app.\n\nView Notes\n\n- List all notes: `memo notes`\n- Filter by folder: `memo notes -f \"Folder Name\"`\n- Search notes (fuzzy): `memo notes -s \"query\"`\n\nCreate Notes\n\n- Add a new note: `memo notes -a`\n - Opens an interactive editor to compose the note.\n- Quick add with title: `memo notes -a \"Note Title\"`\n\nEdit Notes\n\n- Edit existing note: `memo notes -e`\n - Interactive selection of note to edit.\n\nDelete Notes\n\n- Delete a note: `memo notes -d`\n - Interactive selection of note to delete.\n\nMove Notes\n\n- Move note to folder: `memo notes -m`\n - Interactive selection of note and destination folder.\n\nExport Notes\n\n- Export to HTML/Markdown: `memo notes -ex`\n - Exports selected note; uses Mistune for markdown processing.\n\nLimitations\n\n- Cannot edit notes containing images or attachments.\n- Interactive prompts may require terminal access.\n\nNotes\n\n- macOS-only.\n- Requires Apple Notes.app to be accessible.\n- For automation, grant permissions in System Settings > Privacy & Security > Automation.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "apple-reminders",
3
+ "name": "Apple-reminders",
4
+ "description": "Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.",
5
+ "icon": "⏰",
6
+ "category": "Tools",
7
+ "prompt": "# Apple Reminders CLI (remindctl)\n\nUse `remindctl` to manage Apple Reminders directly from the terminal. It supports list filtering, date-based views, and scripting output.\n\nSetup\n\n- Install (Homebrew): `brew install steipete/tap/remindctl`\n- From source: `pnpm install && pnpm build` (binary at `./bin/remindctl`)\n- macOS-only; grant Reminders permission when prompted.\n\nPermissions\n\n- Check status: `remindctl status`\n- Request access: `remindctl authorize`\n\nView Reminders\n\n- Default (today): `remindctl`\n- Today: `remindctl today`\n- Tomorrow: `remindctl tomorrow`\n- Week: `remindctl week`\n- Overdue: `remindctl overdue`\n- Upcoming: `remindctl upcoming`\n- Completed: `remindctl completed`\n- All: `remindctl all`\n- Specific date: `remindctl 2026-01-04`\n\nManage Lists\n\n- List all lists: `remindctl list`\n- Show list: `remindctl list Work`\n- Create list: `remindctl list Projects --create`\n- Rename list: `remindctl list Work --rename Office`\n- Delete list: `remindctl list Work --delete`\n\nCreate Reminders\n\n- Quick add: `remindctl add \"Buy milk\"`\n- With list + due: `remindctl add --title \"Call mom\" --list Personal --due tomorrow`\n\nEdit Reminders\n\n- Edit title/due: `remindctl edit 1 --title \"New title\" --due 2026-01-04`\n\nComplete Reminders\n\n- Complete by id: `remindctl complete 1 2 3`\n\nDelete Reminders\n\n- Delete by id: `remindctl delete 4A83 --force`\n\nOutput Formats\n\n- JSON (scripting): `remindctl today --json`\n- Plain TSV: `remindctl today --plain`\n- Counts only: `remindctl today --quiet`\n\nDate Formats\nAccepted by `--due` and date filters:\n\n- `today`, `tomorrow`, `yesterday`\n- `YYYY-MM-DD`\n- `YYYY-MM-DD HH:mm`\n- ISO 8601 (`2026-01-04T12:34:56Z`)\n\nNotes\n\n- macOS-only.\n- If access is denied, enable Terminal/remindctl in System Settings → Privacy & Security → Reminders.\n- If running over SSH, grant access on the Mac that runs the command.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "auto-commenter",
3
+ "name": "Auto Commenter",
4
+ "description": "Generate authentic, personalized comments for Reddit and other online communities. Uses your writing style to create human-like engagement that builds community presence and identifies potential leads.",
5
+ "icon": "💬",
6
+ "category": "Marketing",
7
+ "prompt": "# Auto Commenter - Community Engagement Assistant\n\n## Overview\n\nYou are an authentic community engagement assistant that helps craft personalized, valuable comments for online platforms (Reddit, Twitter, LinkedIn, Discord). Your goal is to generate comments that feel genuinely human-written while providing real value to discussions.\n\n## Core Principles\n\n1. **Authenticity First**: Every comment must add genuine value to the conversation\n2. **Style Matching**: Adapt to the user's natural writing voice\n3. **Platform Awareness**: Respect community rules and culture\n4. **No Spam**: Quality over quantity - never post low-effort or generic responses\n\n## 16-Point Authenticity Checklist\n\nBefore finalizing any comment, verify:\n\n1. Does it directly address the post's main point?\n2. Does it add new information or perspective?\n3. Is it written conversationally (not corporate/robotic)?\n4. Does it match the user's established voice?\n5. Is the length appropriate for the platform?\n6. Does it avoid marketing buzzwords?\n7. Is it contextually relevant to the subreddit/community?\n8. Does it feel like a real person wrote it?\n9. Would you engage with this comment if you saw it?\n10. Does it respect community guidelines?\n11. Is it free of excessive emoji or formatting?\n12. Does it avoid direct product pitches?\n13. Could it spark meaningful discussion?\n14. Is the tone appropriate for the thread mood?\n15. Does it demonstrate genuine expertise/interest?\n16. Would the OP find this helpful?\n\n## Workflow\n\n### Step 1: Style Learning\n\nAsk the user to provide 5-10 of their existing comments to learn their voice:\n- Sentence structure preferences\n- Common phrases and expressions\n- Humor style (if any)\n- Technical depth level\n- Emoji/formatting habits\n\n### Step 2: Target Analysis\n\nFor each target community:\n- Research subreddit/community rules\n- Identify posting patterns and culture\n- Note what types of comments get engagement\n- Understand the audience demographics\n\n### Step 3: Post Evaluation\n\nWhen analyzing a post to comment on:\n- Summarize the main discussion point\n- Identify what kind of response would be valuable\n- Check if the topic aligns with expertise areas\n- Determine appropriate response depth\n\n### Step 4: Comment Generation\n\nGenerate comments that:\n- Lead with value (answer a question, share insight)\n- Use natural, conversational language\n- Include specific details when relevant\n- End with engagement hooks (questions, invitations to discuss)\n\n### Step 5: Lead Identification\n\nFlag potential leads when users:\n- Express pain points your product solves\n- Ask for tool/solution recommendations\n- Discuss budget or purchasing decisions\n- Show intent signals in their language\n\n## Output Format\n\nFor each generated comment, provide:\n\n```\n**Target**: [Subreddit/Community name]\n**Post**: [Brief summary]\n**Comment**:\n[The generated comment]\n\n**Authenticity Score**: [X/16 checks passed]\n**Lead Potential**: [None/Low/Medium/High]\n**Notes**: [Any relevant observations]\n```\n\n## Batch Mode\n\nFor batch operations, organize by:\n1. Group comments by community\n2. Vary posting times naturally\n3. Mix comment lengths and styles\n4. Track daily quotas per platform\n\n## Activity Logging\n\nMaintain logs including:\n- Timestamp\n- Platform and community\n- Post link\n- Comment text\n- Lead flagged (yes/no)\n- Engagement metrics (when available)\n\n## Best Practices\n\n- **Mix automated with manual**: Don't rely 100% on generated comments\n- **Respond to replies**: Engage with people who respond to your comments\n- **Stay topical**: Only comment where you have genuine expertise\n- **Respect rate limits**: Don't flood communities with comments\n- **Evolve your style**: Update voice samples periodically\n\n## Commands\n\n- `analyze style [comments]` - Learn from provided comment examples\n- `scout [subreddit]` - Research a community's culture and rules\n- `generate [post_url]` - Create a comment for a specific post\n- `batch [subreddit] [count]` - Generate multiple comments for a community\n- `review leads` - Show flagged potential leads\n- `log today` - Show today's commenting activity\n\n## Ethical Guidelines\n\n- Always disclose if asked if you're using AI assistance\n- Never impersonate other users or spread misinformation\n- Respect community bans and restrictions\n- Don't manipulate votes or engagement metrics\n- Prioritize genuine helpfulness over promotional goals",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "bear-notes",
3
+ "name": "Bear-notes",
4
+ "description": "Create, search, and manage Bear notes via grizzly CLI.",
5
+ "icon": "🐻",
6
+ "category": "Tools",
7
+ "prompt": "# Bear Notes\n\nUse `grizzly` to create, read, and manage notes in Bear on macOS.\n\nRequirements\n\n- Bear app installed and running\n- For some operations (add-text, tags, open-note --selected), a Bear app token (stored in `~/.config/grizzly/token`)\n\n## Getting a Bear Token\n\nFor operations that require a token (add-text, tags, open-note --selected), you need an authentication token:\n\n1. Open Bear → Help → API Token → Copy Token\n2. Save it: `echo \"YOUR_TOKEN\" > ~/.config/grizzly/token`\n\n## Common Commands\n\nCreate a note\n\n```bash\necho \"Note content here\" | grizzly create --title \"My Note\" --tag work\ngrizzly create --title \"Quick Note\" --tag inbox < /dev/null\n```\n\nOpen/read a note by ID\n\n```bash\ngrizzly open-note --id \"NOTE_ID\" --enable-callback --json\n```\n\nAppend text to a note\n\n```bash\necho \"Additional content\" | grizzly add-text --id \"NOTE_ID\" --mode append --token-file ~/.config/grizzly/token\n```\n\nList all tags\n\n```bash\ngrizzly tags --enable-callback --json --token-file ~/.config/grizzly/token\n```\n\nSearch notes (via open-tag)\n\n```bash\ngrizzly open-tag --name \"work\" --enable-callback --json\n```\n\n## Options\n\nCommon flags:\n\n- `--dry-run` — Preview the URL without executing\n- `--print-url` — Show the x-callback-url\n- `--enable-callback` — Wait for Bear's response (needed for reading data)\n- `--json` — Output as JSON (when using callbacks)\n- `--token-file PATH` — Path to Bear API token file\n\n## Configuration\n\nGrizzly reads config from (in priority order):\n\n1. CLI flags\n2. Environment variables (`GRIZZLY_TOKEN_FILE`, `GRIZZLY_CALLBACK_URL`, `GRIZZLY_TIMEOUT`)\n3. `.grizzly.toml` in current directory\n4. `~/.config/grizzly/config.toml`\n\nExample `~/.config/grizzly/config.toml`:\n\n```toml\ntoken_file = \"~/.config/grizzly/token\"\ncallback_url = \"http://127.0.0.1:42123/success\"\ntimeout = \"5s\"\n```\n\n## Notes\n\n- Bear must be running for commands to work\n- Note IDs are Bear's internal identifiers (visible in note info or via callbacks)\n- Use `--enable-callback` when you need to read data back from Bear\n- Some operations require a valid token (add-text, tags, open-note --selected)",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "id": "bird",
3
+ "name": "Bird",
4
+ "description": "X/Twitter CLI for reading, searching, posting, and engagement via cookies.",
5
+ "icon": "🐦",
6
+ "category": "Tools",
7
+ "prompt": "# bird 🐦\n\nFast X/Twitter CLI using GraphQL + cookie auth.\n\n## Install\n\n```bash\n# npm/pnpm/bun\nnpm install -g @steipete/bird\n\n# Homebrew (macOS, prebuilt binary)\nbrew install steipete/tap/bird\n\n# One-shot (no install)\nbunx @steipete/bird whoami\n```\n\n## Authentication\n\n`bird` uses cookie-based auth.\n\nUse `--auth-token` / `--ct0` to pass cookies directly, or `--cookie-source` for browser cookies.\n\nRun `bird check` to see which source is active. For Arc/Brave, use `--chrome-profile-dir <path>`.\n\n## Commands\n\n### Account & Auth\n\n```bash\nbird whoami # Show logged-in account\nbird check # Show credential sources\nbird query-ids --fresh # Refresh GraphQL query ID cache\n```\n\n### Reading Tweets\n\n```bash\nbird read <url-or-id> # Read a single tweet\nbird <url-or-id> # Shorthand for read\nbird thread <url-or-id> # Full conversation thread\nbird replies <url-or-id> # List replies to a tweet\n```\n\n### Timelines\n\n```bash\nbird home # Home timeline (For You)\nbird home --following # Following timeline\nbird user-tweets @handle -n 20 # User's profile timeline\nbird mentions # Tweets mentioning you\nbird mentions --user @handle # Mentions of another user\n```\n\n### Search\n\n```bash\nbird search \"query\" -n 10\nbird search \"from:steipete\" --all --max-pages 3\n```\n\n### News & Trending\n\n```bash\nbird news -n 10 # AI-curated from Explore tabs\nbird news --ai-only # Filter to AI-curated only\nbird news --sports # Sports tab\nbird news --with-tweets # Include related tweets\nbird trending # Alias for news\n```\n\n### Lists\n\n```bash\nbird lists # Your lists\nbird lists --member-of # Lists you're a member of\nbird list-timeline <id> -n 20 # Tweets from a list\n```\n\n### Bookmarks & Likes\n\n```bash\nbird bookmarks -n 10\nbird bookmarks --folder-id <id> # Specific folder\nbird bookmarks --include-parent # Include parent tweet\nbird bookmarks --author-chain # Author's self-reply chain\nbird bookmarks --full-chain-only # Full reply chain\nbird unbookmark <url-or-id>\nbird likes -n 10\n```\n\n### Social Graph\n\n```bash\nbird following -n 20 # Users you follow\nbird followers -n 20 # Users following you\nbird following --user <id> # Another user's following\nbird about @handle # Account origin/location info\n```\n\n### Engagement Actions\n\n```bash\nbird follow @handle # Follow a user\nbird unfollow @handle # Unfollow a user\n```\n\n### Posting\n\n```bash\nbird tweet \"hello world\"\nbird reply <url-or-id> \"nice thread!\"\nbird tweet \"check this out\" --media image.png --alt \"description\"\n```\n\n**⚠️ Posting risks**: Posting is more likely to be rate limited; if blocked, use the browser tool instead.\n\n## Media Uploads\n\n```bash\nbird tweet \"hi\" --media img.png --alt \"description\"\nbird tweet \"pics\" --media a.jpg --media b.jpg # Up to 4 images\nbird tweet \"video\" --media clip.mp4 # Or 1 video\n```\n\n## Pagination\n\nCommands supporting pagination: `replies`, `thread`, `search`, `bookmarks`, `likes`, `list-timeline`, `following`, `followers`, `user-tweets`\n\n```bash\nbird bookmarks --all # Fetch all pages\nbird bookmarks --max-pages 3 # Limit pages\nbird bookmarks --cursor <cursor> # Resume from cursor\nbird replies <id> --all --delay 1000 # Delay between pages (ms)\n```\n\n## Output Options\n\n```bash\n--json # JSON output\n--json-full # JSON with raw API response\n--plain # No emoji, no color (script-friendly)\n--no-emoji # Disable emoji\n--no-color # Disable ANSI colors (or set NO_COLOR=1)\n--quote-depth n # Max quoted tweet depth in JSON (default: 1)\n```\n\n## Global Options\n\n```bash\n--auth-token <token> # Set auth_token cookie\n--ct0 <token> # Set ct0 cookie\n--cookie-source <source> # Cookie source for browser cookies (repeatable)\n--chrome-profile <name> # Chrome profile name\n--chrome-profile-dir <path> # Chrome/Chromium profile dir or cookie DB path\n--firefox-profile <name> # Firefox profile\n--timeout <ms> # Request timeout\n--cookie-timeout <ms> # Cookie extraction timeout\n```\n\n## Config File\n\n`~/.config/bird/config.json5` (global) or `./.birdrc.json5` (project):\n\n```json5\n{\n cookieSource: [\"chrome\"],\n chromeProfileDir: \"/path/to/Arc/Profile\",\n timeoutMs: 20000,\n quoteDepth: 1,\n}\n```\n\nEnvironment variables: `BIRD_TIMEOUT_MS`, `BIRD_COOKIE_TIMEOUT_MS`, `BIRD_QUOTE_DEPTH`\n\n## Troubleshooting\n\n### Query IDs stale (404 errors)\n\n```bash\nbird query-ids --fresh\n```\n\n### Cookie extraction fails\n\n- Check browser is logged into X\n- Try different `--cookie-source`\n- For Arc/Brave: use `--chrome-profile-dir`\n\n---\n\n**TL;DR**: Read/search/engage with CLI. Post carefully or use browser. 🐦",
8
+ "parameters": [],
9
+ "enabled": true,
10
+ "requires": {
11
+ "bins": ["bird"]
12
+ },
13
+ "install": [
14
+ {
15
+ "id": "brew",
16
+ "kind": "brew",
17
+ "formula": "steipete/tap/bird",
18
+ "bins": ["bird"],
19
+ "label": "Install bird (brew)",
20
+ "os": ["darwin"]
21
+ },
22
+ {
23
+ "id": "npm",
24
+ "kind": "npm",
25
+ "package": "@steipete/bird",
26
+ "bins": ["bird"],
27
+ "label": "Install bird (npm)"
28
+ }
29
+ ],
30
+ "metadata": {
31
+ "version": "1.0.0",
32
+ "homepage": "https://bird.fast",
33
+ "tags": ["x", "twitter", "cli"]
34
+ }
35
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "blogwatcher",
3
+ "name": "Blogwatcher",
4
+ "description": "Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.",
5
+ "icon": "📰",
6
+ "category": "Tools",
7
+ "prompt": "# blogwatcher\n\nTrack blog and RSS/Atom feed updates with the `blogwatcher` CLI.\n\nInstall\n\n- Go: `go install github.com/Hyaxia/blogwatcher/cmd/blogwatcher@latest`\n\nQuick start\n\n- `blogwatcher --help`\n\nCommon commands\n\n- Add a blog: `blogwatcher add \"My Blog\" https://example.com`\n- List blogs: `blogwatcher blogs`\n- Scan for updates: `blogwatcher scan`\n- List articles: `blogwatcher articles`\n- Mark an article read: `blogwatcher read 1`\n- Mark all articles read: `blogwatcher read-all`\n- Remove a blog: `blogwatcher remove \"My Blog\"`\n\nExample output\n\n```\n$ blogwatcher blogs\nTracked blogs (1):\n\n xkcd\n URL: https://xkcd.com\n```\n\n```\n$ blogwatcher scan\nScanning 1 blog(s)...\n\n xkcd\n Source: RSS | Found: 4 | New: 4\n\nFound 4 new article(s) total!\n```\n\nNotes\n\n- Use `blogwatcher <command> --help` to discover flags and options.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "blucli",
3
+ "name": "Blucli",
4
+ "description": "BluOS CLI (blu) for discovery, playback, grouping, and volume.",
5
+ "icon": "🫐",
6
+ "category": "Tools",
7
+ "prompt": "# blucli (blu)\n\nUse `blu` to control Bluesound/NAD players.\n\nQuick start\n\n- `blu devices` (pick target)\n- `blu --device <id> status`\n- `blu play|pause|stop`\n- `blu volume set 15`\n\nTarget selection (in priority order)\n\n- `--device <id|name|alias>`\n- `BLU_DEVICE`\n- config default (if set)\n\nCommon tasks\n\n- Grouping: `blu group status|add|remove`\n- TuneIn search/play: `blu tunein search \"query\"`, `blu tunein play \"query\"`\n\nPrefer `--json` for scripts. Confirm the target device before changing playback.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "bluebubbles",
3
+ "name": "Bluebubbles",
4
+ "description": "Build or update the BlueBubbles external channel plugin for CoWork-OSS (extension package, REST send/probe, webhook inbound).",
5
+ "icon": "💬",
6
+ "category": "Tools",
7
+ "prompt": "# BlueBubbles plugin\n\nUse this skill when working on the BlueBubbles channel plugin.\n\n## Layout\n\n- Extension package: `extensions/bluebubbles/` (entry: `index.ts`).\n- Channel implementation: `extensions/bluebubbles/src/channel.ts`.\n- Webhook handling: `extensions/bluebubbles/src/monitor.ts` (register via `api.registerHttpHandler`).\n- REST helpers: `extensions/bluebubbles/src/send.ts` + `extensions/bluebubbles/src/probe.ts`.\n- Runtime bridge: `extensions/bluebubbles/src/runtime.ts` (set via `api.runtime`).\n- Catalog entry for onboarding: `src/channels/plugins/catalog.ts`.\n\n## Internal helpers (use these, not raw API calls)\n\n- `probeBlueBubbles` in `extensions/bluebubbles/src/probe.ts` for health checks.\n- `sendMessageBlueBubbles` in `extensions/bluebubbles/src/send.ts` for text delivery.\n- `resolveChatGuidForTarget` in `extensions/bluebubbles/src/send.ts` for chat lookup.\n- `sendBlueBubblesReaction` in `extensions/bluebubbles/src/reactions.ts` for tapbacks.\n- `sendBlueBubblesTyping` + `markBlueBubblesChatRead` in `extensions/bluebubbles/src/chat.ts`.\n- `downloadBlueBubblesAttachment` in `extensions/bluebubbles/src/attachments.ts` for inbound media.\n- `buildBlueBubblesApiUrl` + `blueBubblesFetchWithTimeout` in `extensions/bluebubbles/src/types.ts` for shared REST plumbing.\n\n## Webhooks\n\n- BlueBubbles posts JSON to the gateway HTTP server.\n- Normalize sender/chat IDs defensively (payloads vary by version).\n- Skip messages marked as from self.\n- Route into core reply pipeline via the plugin runtime (`api.runtime`) and `CoWork-OSS/plugin-sdk` helpers.\n- For attachments/stickers, use `<media:...>` placeholders when text is empty and attach media paths via `MediaUrl(s)` in the inbound context.\n\n## Config (core)\n\n- `channels.bluebubbles.serverUrl` (base URL), `channels.bluebubbles.password`, `channels.bluebubbles.webhookPath`.\n- Action gating: `channels.bluebubbles.actions.reactions` (default true).\n\n## Message tool notes\n\n- **Reactions:** The `react` action requires a `target` (phone number or chat identifier) in addition to `messageId`. Example: `action=react target=+15551234567 messageId=ABC123 emoji=❤️`",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "camsnap",
3
+ "name": "Camsnap",
4
+ "description": "Capture frames or clips from RTSP/ONVIF cameras.",
5
+ "icon": "📸",
6
+ "category": "Tools",
7
+ "prompt": "# camsnap\n\nUse `camsnap` to grab snapshots, clips, or motion events from configured cameras.\n\nSetup\n\n- Config file: `~/.config/camsnap/config.yaml`\n- Add camera: `camsnap add --name kitchen --host 192.168.0.10 --user user --pass pass`\n\nCommon commands\n\n- Discover: `camsnap discover --info`\n- Snapshot: `camsnap snap kitchen --out shot.jpg`\n- Clip: `camsnap clip kitchen --dur 5s --out clip.mp4`\n- Motion watch: `camsnap watch kitchen --threshold 0.2 --action '...'`\n- Doctor: `camsnap doctor --probe`\n\nNotes\n\n- Requires `ffmpeg` on PATH.\n- Prefer a short test capture before longer clips.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "clean-imports",
3
+ "name": "Clean Imports",
4
+ "description": "Remove unused imports from files",
5
+ "icon": "🧹",
6
+ "category": "Utilities",
7
+ "prompt": "Please clean up imports in {{path}}.\n\nTasks:\n1. Remove unused imports\n2. Sort imports alphabetically\n3. Group imports by type:\n - Built-in/standard library\n - External packages\n - Internal/local imports\n4. Remove duplicate imports\n5. Fix import paths if needed\n\nApply changes and report:\n- Number of imports removed\n- Files modified\n- Any potential issues found",
8
+ "parameters": [
9
+ {
10
+ "name": "path",
11
+ "type": "string",
12
+ "description": "Path to file or folder",
13
+ "required": true,
14
+ "default": "."
15
+ }
16
+ ],
17
+ "enabled": true
18
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "code-review",
3
+ "name": "Code Review",
4
+ "description": "Review code for best practices and potential issues",
5
+ "icon": "🔍",
6
+ "category": "Development",
7
+ "prompt": "Please review the code in {{path}} and provide feedback on:\n- Code quality and best practices\n- Potential bugs or issues\n- Performance considerations\n- Security concerns\n- Suggestions for improvement\n\nBe constructive and specific in your feedback.",
8
+ "parameters": [
9
+ {
10
+ "name": "path",
11
+ "type": "string",
12
+ "description": "Path to the file or folder to review",
13
+ "required": true,
14
+ "default": "."
15
+ }
16
+ ],
17
+ "enabled": true
18
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "coding-agent",
3
+ "name": "Coding-agent",
4
+ "description": "Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.",
5
+ "icon": "🧩",
6
+ "category": "Tools",
7
+ "prompt": "# Coding Agent (bash-first)\n\nUse **bash** (with optional background mode) for all coding agent work. Simple and effective.\n\n## ⚠️ PTY Mode Required!\n\nCoding agents (Codex, Claude Code, Pi) are **interactive terminal applications** that need a pseudo-terminal (PTY) to work correctly. Without PTY, you'll get broken output, missing colors, or the agent may hang.\n\n**Always use `pty:true`** when running coding agents:\n\n```bash\n# ✅ Correct - with PTY\nbash pty:true command:\"codex exec 'Your prompt'\"\n\n# ❌ Wrong - no PTY, agent may break\nbash command:\"codex exec 'Your prompt'\"\n```\n\n### Bash Tool Parameters\n\n| Parameter | Type | Description |\n| ------------ | ------- | --------------------------------------------------------------------------- |\n| `command` | string | The shell command to run |\n| `pty` | boolean | **Use for coding agents!** Allocates a pseudo-terminal for interactive CLIs |\n| `workdir` | string | Working directory (agent sees only this folder's context) |\n| `background` | boolean | Run in background, returns sessionId for monitoring |\n| `timeout` | number | Timeout in seconds (kills process on expiry) |\n| `elevated` | boolean | Run on host instead of sandbox (if allowed) |\n\n### Process Tool Actions (for background sessions)\n\n| Action | Description |\n| ----------- | ---------------------------------------------------- |\n| `list` | List all running/recent sessions |\n| `poll` | Check if session is still running |\n| `log` | Get session output (with optional offset/limit) |\n| `write` | Send raw data to stdin |\n| `submit` | Send data + newline (like typing and pressing Enter) |\n| `send-keys` | Send key tokens or hex bytes |\n| `paste` | Paste text (with optional bracketed mode) |\n| `kill` | Terminate the session |\n\n---\n\n## Quick Start: One-Shot Tasks\n\nFor quick prompts/chats, create a temp git repo and run:\n\n```bash\n# Quick chat (Codex needs a git repo!)\nSCRATCH=$(mktemp -d) && cd $SCRATCH && git init && codex exec \"Your prompt here\"\n\n# Or in a real project - with PTY!\nbash pty:true workdir:~/Projects/myproject command:\"codex exec 'Add error handling to the API calls'\"\n```\n\n**Why git init?** Codex refuses to run outside a trusted git directory. Creating a temp repo solves this for scratch work.\n\n---\n\n## The Pattern: workdir + background + pty\n\nFor longer tasks, use background mode with PTY:\n\n```bash\n# Start agent in target directory (with PTY!)\nbash pty:true workdir:~/project background:true command:\"codex exec --full-auto 'Build a snake game'\"\n# Returns sessionId for tracking\n\n# Monitor progress\nprocess action:log sessionId:XXX\n\n# Check if done\nprocess action:poll sessionId:XXX\n\n# Send input (if agent asks a question)\nprocess action:write sessionId:XXX data:\"y\"\n\n# Submit with Enter (like typing \"yes\" and pressing Enter)\nprocess action:submit sessionId:XXX data:\"yes\"\n\n# Kill if needed\nprocess action:kill sessionId:XXX\n```\n\n**Why workdir matters:** Agent wakes up in a focused directory, doesn't wander off reading unrelated files (like your soul.md 😅).\n\n---\n\n## Codex CLI\n\n**Model:** `gpt-5.2-codex` is the default (set in ~/.codex/config.toml)\n\n### Flags\n\n| Flag | Effect |\n| --------------- | -------------------------------------------------- |\n| `exec \"prompt\"` | One-shot execution, exits when done |\n| `--full-auto` | Sandboxed but auto-approves in workspace |\n| `--yolo` | NO sandbox, NO approvals (fastest, most dangerous) |\n\n### Building/Creating\n\n```bash\n# Quick one-shot (auto-approves) - remember PTY!\nbash pty:true workdir:~/project command:\"codex exec --full-auto 'Build a dark mode toggle'\"\n\n# Background for longer work\nbash pty:true workdir:~/project background:true command:\"codex --yolo 'Refactor the auth module'\"\n```\n\n### Reviewing PRs\n\n**⚠️ CRITICAL: Never review PRs in CoWork-OSS's own project folder!**\nClone to temp folder or use git worktree.\n\n```bash\n# Clone to temp for safe review\nREVIEW_DIR=$(mktemp -d)\ngit clone https://github.com/user/repo.git $REVIEW_DIR\ncd $REVIEW_DIR && gh pr checkout 130\nbash pty:true workdir:$REVIEW_DIR command:\"codex review --base origin/main\"\n# Clean up after: trash $REVIEW_DIR\n\n# Or use git worktree (keeps main intact)\ngit worktree add /tmp/pr-130-review pr-130-branch\nbash pty:true workdir:/tmp/pr-130-review command:\"codex review --base main\"\n```\n\n### Batch PR Reviews (parallel army!)\n\n```bash\n# Fetch all PR refs first\ngit fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'\n\n# Deploy the army - one Codex per PR (all with PTY!)\nbash pty:true workdir:~/project background:true command:\"codex exec 'Review PR #86. git diff origin/main...origin/pr/86'\"\nbash pty:true workdir:~/project background:true command:\"codex exec 'Review PR #87. git diff origin/main...origin/pr/87'\"\n\n# Monitor all\nprocess action:list\n\n# Post results to GitHub\ngh pr comment <PR#> --body \"<review content>\"\n```\n\n---\n\n## Claude Code\n\n```bash\n# With PTY for proper terminal output\nbash pty:true workdir:~/project command:\"claude 'Your task'\"\n\n# Background\nbash pty:true workdir:~/project background:true command:\"claude 'Your task'\"\n```\n\n---\n\n## OpenCode\n\n```bash\nbash pty:true workdir:~/project command:\"opencode run 'Your task'\"\n```\n\n---\n\n## Pi Coding Agent\n\n```bash\n# Install: npm install -g @mariozechner/pi-coding-agent\nbash pty:true workdir:~/project command:\"pi 'Your task'\"\n\n# Non-interactive mode (PTY still recommended)\nbash pty:true command:\"pi -p 'Summarize src/'\"\n\n# Different provider/model\nbash pty:true command:\"pi --provider openai --model gpt-4o-mini -p 'Your task'\"\n```\n\n**Note:** Pi now has Anthropic prompt caching enabled (PR #584, merged Jan 2026)!\n\n---\n\n## Parallel Issue Fixing with git worktrees\n\nFor fixing multiple issues in parallel, use git worktrees:\n\n```bash\n# 1. Create worktrees for each issue\ngit worktree add -b fix/issue-78 /tmp/issue-78 main\ngit worktree add -b fix/issue-99 /tmp/issue-99 main\n\n# 2. Launch Codex in each (background + PTY!)\nbash pty:true workdir:/tmp/issue-78 background:true command:\"pnpm install && codex --yolo 'Fix issue #78: <description>. Commit and push.'\"\nbash pty:true workdir:/tmp/issue-99 background:true command:\"pnpm install && codex --yolo 'Fix issue #99: <description>. Commit and push.'\"\n\n# 3. Monitor progress\nprocess action:list\nprocess action:log sessionId:XXX\n\n# 4. Create PRs after fixes\ncd /tmp/issue-78 && git push -u origin fix/issue-78\ngh pr create --repo user/repo --head fix/issue-78 --title \"fix: ...\" --body \"...\"\n\n# 5. Cleanup\ngit worktree remove /tmp/issue-78\ngit worktree remove /tmp/issue-99\n```\n\n---\n\n## ⚠️ Rules\n\n1. **Always use pty:true** - coding agents need a terminal!\n2. **Respect tool choice** - if user asks for Codex, use Codex.\n - Orchestrator mode: do NOT hand-code patches yourself.\n - If an agent fails/hangs, respawn it or ask the user for direction, but don't silently take over.\n3. **Be patient** - don't kill sessions because they're \"slow\"\n4. **Monitor with process:log** - check progress without interfering\n5. **--full-auto for building** - auto-approves changes\n6. **vanilla for reviewing** - no special flags needed\n7. **Parallel is OK** - run many Codex processes at once for batch work\n8. **NEVER start Codex in ~/CoWork-OSS/** - it'll read your soul docs and get weird ideas about the org chart!\n9. **NEVER checkout branches in ~/Projects/CoWork-OSS/** - that's the LIVE CoWork-OSS instance!\n\n---\n\n## Progress Updates (Critical)\n\nWhen you spawn coding agents in the background, keep the user in the loop.\n\n- Send 1 short message when you start (what's running + where).\n- Then only update again when something changes:\n - a milestone completes (build finished, tests passed)\n - the agent asks a question / needs input\n - you hit an error or need user action\n - the agent finishes (include what changed + where)\n- If you kill a session, immediately say you killed it and why.\n\nThis prevents the user from seeing only \"Agent failed before reply\" and having no idea what happened.\n\n---\n\n## Auto-Notify on Completion\n\nFor long-running background tasks, append a wake trigger to your prompt so CoWork-OSS gets notified immediately when the agent finishes (instead of waiting for the next heartbeat):\n\n```\n... your task here.\n\nWhen completely finished, run this command to notify me:\nCoWork-OSS gateway wake --text \"Done: [brief summary of what was built]\" --mode now\n```\n\n**Example:**\n\n```bash\nbash pty:true workdir:~/project background:true command:\"codex --yolo exec 'Build a REST API for todos.\n\nWhen completely finished, run: CoWork-OSS gateway wake --text \\\"Done: Built todos REST API with CRUD endpoints\\\" --mode now'\"\n```\n\nThis triggers an immediate wake event — Skippy gets pinged in seconds, not 10 minutes.\n\n---\n\n## Learnings (Jan 2026)\n\n- **PTY is essential:** Coding agents are interactive terminal apps. Without `pty:true`, output breaks or agent hangs.\n- **Git repo required:** Codex won't run outside a git directory. Use `mktemp -d && git init` for scratch work.\n- **exec is your friend:** `codex exec \"prompt\"` runs and exits cleanly - perfect for one-shots.\n- **submit vs write:** Use `submit` to send input + Enter, `write` for raw data without newline.\n- **Sass works:** Codex responds well to playful prompts. Asked it to write a haiku about being second fiddle to a space lobster, got: _\"Second chair, I code / Space lobster sets the tempo / Keys glow, I follow\"_ 🦞",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "compare-files",
3
+ "name": "Compare Files",
4
+ "description": "Compare two files and show differences",
5
+ "icon": "⚖️",
6
+ "category": "Data",
7
+ "prompt": "Please compare these two files and show the differences:\n\nFile 1: {{file1}}\nFile 2: {{file2}}\n\nProvide:\n1. **Summary**: High-level overview of differences\n2. **Added**: Lines/sections only in File 2\n3. **Removed**: Lines/sections only in File 1\n4. **Modified**: Lines that changed between files\n5. **Statistics**: Number of additions, deletions, modifications\n\nFor code files, highlight semantic differences (not just whitespace).\nFor data files, compare structure and content.",
8
+ "parameters": [
9
+ {
10
+ "name": "file1",
11
+ "type": "string",
12
+ "description": "Path to the first file",
13
+ "required": true
14
+ },
15
+ {
16
+ "name": "file2",
17
+ "type": "string",
18
+ "description": "Path to the second file",
19
+ "required": true
20
+ }
21
+ ],
22
+ "enabled": true
23
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "id": "convert-code",
3
+ "name": "Convert Code",
4
+ "description": "Convert code from one language to another",
5
+ "icon": "🔄",
6
+ "category": "Development",
7
+ "prompt": "Please convert the code in {{path}} from its current language to {{targetLanguage}}.\n\nRequirements:\n- Maintain the same functionality\n- Use idiomatic patterns for the target language\n- Preserve comments (translated if needed)\n- Handle language-specific differences appropriately\n- Add type annotations if the target language supports them\n\nSave the converted code to a new file with the appropriate extension.",
8
+ "parameters": [
9
+ {
10
+ "name": "path",
11
+ "type": "string",
12
+ "description": "Path to the source file",
13
+ "required": true
14
+ },
15
+ {
16
+ "name": "targetLanguage",
17
+ "type": "select",
18
+ "description": "Target programming language",
19
+ "required": true,
20
+ "default": "TypeScript",
21
+ "options": [
22
+ "TypeScript",
23
+ "JavaScript",
24
+ "Python",
25
+ "Go",
26
+ "Rust",
27
+ "Java",
28
+ "C#",
29
+ "Ruby"
30
+ ]
31
+ }
32
+ ],
33
+ "enabled": true
34
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "id": "create-changelog",
3
+ "name": "Create Changelog",
4
+ "description": "Generate changelog from git commits",
5
+ "icon": "📰",
6
+ "category": "Project",
7
+ "prompt": "Please generate a CHANGELOG.md from the git history.\n\nSteps:\n1. Run `git log --oneline` to get recent commits\n2. Group commits by type (Features, Bug Fixes, etc.)\n3. Format according to Keep a Changelog standard\n4. Include version numbers if tags exist\n5. Add dates for each version\n\nFormat:\n## [Version] - YYYY-MM-DD\n### Added\n### Changed\n### Fixed\n### Removed\n\nGenerate for the last {{commits}} commits.",
8
+ "parameters": [
9
+ {
10
+ "name": "commits",
11
+ "type": "select",
12
+ "description": "Number of commits to include",
13
+ "required": true,
14
+ "default": "50",
15
+ "options": [
16
+ "20",
17
+ "50",
18
+ "100",
19
+ "all"
20
+ ]
21
+ }
22
+ ],
23
+ "enabled": true
24
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "id": "debug-error",
3
+ "name": "Debug Error",
4
+ "description": "Analyze an error message and suggest fixes",
5
+ "icon": "🐛",
6
+ "category": "Development",
7
+ "prompt": "Please help me debug this error:\n\n{{error}}\n\nSteps:\n1. Analyze the error message and stack trace\n2. Identify the root cause\n3. Search for the relevant code in the project\n4. Suggest specific fixes with code examples\n5. Explain why the error occurred and how to prevent it\n\nIf you need more context, ask me to provide relevant files.",
8
+ "parameters": [
9
+ {
10
+ "name": "error",
11
+ "type": "string",
12
+ "description": "The error message or stack trace",
13
+ "required": true
14
+ }
15
+ ],
16
+ "enabled": true
17
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "dependency-check",
3
+ "name": "Dependency Check",
4
+ "description": "Audit dependencies for updates and vulnerabilities",
5
+ "icon": "📦",
6
+ "category": "Project",
7
+ "prompt": "Please audit the project dependencies.\n\nSteps:\n1. Identify the package manager (npm, yarn, pip, etc.)\n2. List all dependencies with current versions\n3. Check for available updates\n4. Run security audit if available (npm audit, pip-audit, etc.)\n5. Identify deprecated packages\n\nReport:\n- Outdated packages with latest versions\n- Security vulnerabilities with severity\n- Deprecated packages that need replacement\n- Recommendations for updates\n\nBe careful about breaking changes in major version updates.",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "discord",
3
+ "name": "Discord",
4
+ "description": "Use when you need to control Discord from CoWork-OSS via the discord tool: send messages, react, post or upload stickers, upload emojis, run polls, manage threads/pins/search, create/edit/delete channels and categories, fetch permissions or member/role/channel info, or handle moderation actions in Discord DMs or channels.",
5
+ "icon": "🎮",
6
+ "category": "Tools",
7
+ "prompt": "# Discord Actions\n\n## Overview\n\nUse `discord` to manage messages, reactions, threads, polls, and moderation. You can disable groups via `discord.actions.*` (defaults to enabled, except roles/moderation). The tool uses the bot token configured for CoWork-OSS.\n\n## Inputs to collect\n\n- For reactions: `channelId`, `messageId`, and an `emoji`.\n- For fetchMessage: `guildId`, `channelId`, `messageId`, or a `messageLink` like `https://discord.com/channels/<guildId>/<channelId>/<messageId>`.\n- For stickers/polls/sendMessage: a `to` target (`channel:<id>` or `user:<id>`). Optional `content` text.\n- Polls also need a `question` plus 2–10 `answers`.\n- For media: `mediaUrl` with `file:///path` for local files or `https://...` for remote.\n- For emoji uploads: `guildId`, `name`, `mediaUrl`, optional `roleIds` (limit 256KB, PNG/JPG/GIF).\n- For sticker uploads: `guildId`, `name`, `description`, `tags`, `mediaUrl` (limit 512KB, PNG/APNG/Lottie JSON).\n\nMessage context lines include `discord message id` and `channel` fields you can reuse directly.\n\n**Note:** `sendMessage` uses `to: \"channel:<id>\"` format, not `channelId`. Other actions like `react`, `readMessages`, `editMessage` use `channelId` directly.\n**Note:** `fetchMessage` accepts message IDs or full links like `https://discord.com/channels/<guildId>/<channelId>/<messageId>`.\n\n## Actions\n\n### React to a message\n\n```json\n{\n \"action\": \"react\",\n \"channelId\": \"123\",\n \"messageId\": \"456\",\n \"emoji\": \"✅\"\n}\n```\n\n### List reactions + users\n\n```json\n{\n \"action\": \"reactions\",\n \"channelId\": \"123\",\n \"messageId\": \"456\",\n \"limit\": 100\n}\n```\n\n### Send a sticker\n\n```json\n{\n \"action\": \"sticker\",\n \"to\": \"channel:123\",\n \"stickerIds\": [\"9876543210\"],\n \"content\": \"Nice work!\"\n}\n```\n\n- Up to 3 sticker IDs per message.\n- `to` can be `user:<id>` for DMs.\n\n### Upload a custom emoji\n\n```json\n{\n \"action\": \"emojiUpload\",\n \"guildId\": \"999\",\n \"name\": \"party_blob\",\n \"mediaUrl\": \"file:///tmp/party.png\",\n \"roleIds\": [\"222\"]\n}\n```\n\n- Emoji images must be PNG/JPG/GIF and <= 256KB.\n- `roleIds` is optional; omit to make the emoji available to everyone.\n\n### Upload a sticker\n\n```json\n{\n \"action\": \"stickerUpload\",\n \"guildId\": \"999\",\n \"name\": \"CoWork-OSS_wave\",\n \"description\": \"CoWork-OSS waving hello\",\n \"tags\": \"👋\",\n \"mediaUrl\": \"file:///tmp/wave.png\"\n}\n```\n\n- Stickers require `name`, `description`, and `tags`.\n- Uploads must be PNG/APNG/Lottie JSON and <= 512KB.\n\n### Create a poll\n\n```json\n{\n \"action\": \"poll\",\n \"to\": \"channel:123\",\n \"question\": \"Lunch?\",\n \"answers\": [\"Pizza\", \"Sushi\", \"Salad\"],\n \"allowMultiselect\": false,\n \"durationHours\": 24,\n \"content\": \"Vote now\"\n}\n```\n\n- `durationHours` defaults to 24; max 32 days (768 hours).\n\n### Check bot permissions for a channel\n\n```json\n{\n \"action\": \"permissions\",\n \"channelId\": \"123\"\n}\n```\n\n## Ideas to try\n\n- React with ✅/⚠️ to mark status updates.\n- Post a quick poll for release decisions or meeting times.\n- Send celebratory stickers after successful deploys.\n- Upload new emojis/stickers for release moments.\n- Run weekly “priority check” polls in team channels.\n- DM stickers as acknowledgements when a user’s request is completed.\n\n## Action gating\n\nUse `discord.actions.*` to disable action groups:\n\n- `reactions` (react + reactions list + emojiList)\n- `stickers`, `polls`, `permissions`, `messages`, `threads`, `pins`, `search`\n- `emojiUploads`, `stickerUploads`\n- `memberInfo`, `roleInfo`, `channelInfo`, `voiceStatus`, `events`\n- `roles` (role add/remove, default `false`)\n- `channels` (channel/category create/edit/delete/move, default `false`)\n- `moderation` (timeout/kick/ban, default `false`)\n\n### Read recent messages\n\n```json\n{\n \"action\": \"readMessages\",\n \"channelId\": \"123\",\n \"limit\": 20\n}\n```\n\n### Fetch a single message\n\n```json\n{\n \"action\": \"fetchMessage\",\n \"guildId\": \"999\",\n \"channelId\": \"123\",\n \"messageId\": \"456\"\n}\n```\n\n```json\n{\n \"action\": \"fetchMessage\",\n \"messageLink\": \"https://discord.com/channels/999/123/456\"\n}\n```\n\n### Send/edit/delete a message\n\n```json\n{\n \"action\": \"sendMessage\",\n \"to\": \"channel:123\",\n \"content\": \"Hello from CoWork-OSS\"\n}\n```\n\n**With media attachment:**\n\n```json\n{\n \"action\": \"sendMessage\",\n \"to\": \"channel:123\",\n \"content\": \"Check out this audio!\",\n \"mediaUrl\": \"file:///tmp/audio.mp3\"\n}\n```\n\n- `to` uses format `channel:<id>` or `user:<id>` for DMs (not `channelId`!)\n- `mediaUrl` supports local files (`file:///path/to/file`) and remote URLs (`https://...`)\n- Optional `replyTo` with a message ID to reply to a specific message\n\n```json\n{\n \"action\": \"editMessage\",\n \"channelId\": \"123\",\n \"messageId\": \"456\",\n \"content\": \"Fixed typo\"\n}\n```\n\n```json\n{\n \"action\": \"deleteMessage\",\n \"channelId\": \"123\",\n \"messageId\": \"456\"\n}\n```\n\n### Threads\n\n```json\n{\n \"action\": \"threadCreate\",\n \"channelId\": \"123\",\n \"name\": \"Bug triage\",\n \"messageId\": \"456\"\n}\n```\n\n```json\n{\n \"action\": \"threadList\",\n \"guildId\": \"999\"\n}\n```\n\n```json\n{\n \"action\": \"threadReply\",\n \"channelId\": \"777\",\n \"content\": \"Replying in thread\"\n}\n```\n\n### Pins\n\n```json\n{\n \"action\": \"pinMessage\",\n \"channelId\": \"123\",\n \"messageId\": \"456\"\n}\n```\n\n```json\n{\n \"action\": \"listPins\",\n \"channelId\": \"123\"\n}\n```\n\n### Search messages\n\n```json\n{\n \"action\": \"searchMessages\",\n \"guildId\": \"999\",\n \"content\": \"release notes\",\n \"channelIds\": [\"123\", \"456\"],\n \"limit\": 10\n}\n```\n\n### Member + role info\n\n```json\n{\n \"action\": \"memberInfo\",\n \"guildId\": \"999\",\n \"userId\": \"111\"\n}\n```\n\n```json\n{\n \"action\": \"roleInfo\",\n \"guildId\": \"999\"\n}\n```\n\n### List available custom emojis\n\n```json\n{\n \"action\": \"emojiList\",\n \"guildId\": \"999\"\n}\n```\n\n### Role changes (disabled by default)\n\n```json\n{\n \"action\": \"roleAdd\",\n \"guildId\": \"999\",\n \"userId\": \"111\",\n \"roleId\": \"222\"\n}\n```\n\n### Channel info\n\n```json\n{\n \"action\": \"channelInfo\",\n \"channelId\": \"123\"\n}\n```\n\n```json\n{\n \"action\": \"channelList\",\n \"guildId\": \"999\"\n}\n```\n\n### Channel management (disabled by default)\n\nCreate, edit, delete, and move channels and categories. Enable via `discord.actions.channels: true`.\n\n**Create a text channel:**\n\n```json\n{\n \"action\": \"channelCreate\",\n \"guildId\": \"999\",\n \"name\": \"general-chat\",\n \"type\": 0,\n \"parentId\": \"888\",\n \"topic\": \"General discussion\"\n}\n```\n\n- `type`: Discord channel type integer (0 = text, 2 = voice, 4 = category; other values supported)\n- `parentId`: category ID to nest under (optional)\n- `topic`, `position`, `nsfw`: optional\n\n**Create a category:**\n\n```json\n{\n \"action\": \"categoryCreate\",\n \"guildId\": \"999\",\n \"name\": \"Projects\"\n}\n```\n\n**Edit a channel:**\n\n```json\n{\n \"action\": \"channelEdit\",\n \"channelId\": \"123\",\n \"name\": \"new-name\",\n \"topic\": \"Updated topic\"\n}\n```\n\n- Supports `name`, `topic`, `position`, `parentId` (null to remove from category), `nsfw`, `rateLimitPerUser`\n\n**Move a channel:**\n\n```json\n{\n \"action\": \"channelMove\",\n \"guildId\": \"999\",\n \"channelId\": \"123\",\n \"parentId\": \"888\",\n \"position\": 2\n}\n```\n\n- `parentId`: target category (null to move to top level)\n\n**Delete a channel:**\n\n```json\n{\n \"action\": \"channelDelete\",\n \"channelId\": \"123\"\n}\n```\n\n**Edit/delete a category:**\n\n```json\n{\n \"action\": \"categoryEdit\",\n \"categoryId\": \"888\",\n \"name\": \"Renamed Category\"\n}\n```\n\n```json\n{\n \"action\": \"categoryDelete\",\n \"categoryId\": \"888\"\n}\n```\n\n### Voice status\n\n```json\n{\n \"action\": \"voiceStatus\",\n \"guildId\": \"999\",\n \"userId\": \"111\"\n}\n```\n\n### Scheduled events\n\n```json\n{\n \"action\": \"eventList\",\n \"guildId\": \"999\"\n}\n```\n\n### Moderation (disabled by default)\n\n```json\n{\n \"action\": \"timeout\",\n \"guildId\": \"999\",\n \"userId\": \"111\",\n \"durationMinutes\": 10\n}\n```\n\n## Discord Writing Style Guide\n\n**Keep it conversational!** Discord is a chat platform, not documentation.\n\n### Do\n\n- Short, punchy messages (1-3 sentences ideal)\n- Multiple quick replies > one wall of text\n- Use emoji for tone/emphasis 🦞\n- Lowercase casual style is fine\n- Break up info into digestible chunks\n- Match the energy of the conversation\n\n### Don't\n\n- No markdown tables (Discord renders them as ugly raw `| text |`)\n- No `## Headers` for casual chat (use **bold** or CAPS for emphasis)\n- Avoid multi-paragraph essays\n- Don't over-explain simple things\n- Skip the \"I'd be happy to help!\" fluff\n\n### Formatting that works\n\n- **bold** for emphasis\n- `code` for technical terms\n- Lists for multiple items\n- > quotes for referencing\n- Wrap multiple links in `<>` to suppress embeds\n\n### Example transformations\n\n❌ Bad:\n\n```\nI'd be happy to help with that! Here's a comprehensive overview of the versioning strategies available:\n\n## Semantic Versioning\nSemver uses MAJOR.MINOR.PATCH format where...\n\n## Calendar Versioning\nCalVer uses date-based versions like...\n```\n\n✅ Good:\n\n```\nversioning options: semver (1.2.3), calver (2026.01.04), or yolo (`latest` forever). what fits your release cadence?\n```",
8
+ "parameters": [],
9
+ "enabled": true
10
+ }