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.
- package/LICENSE +21 -0
- package/README.md +1638 -0
- package/bin/cowork.js +42 -0
- package/build/entitlements.mac.plist +16 -0
- package/build/icon.icns +0 -0
- package/build/icon.png +0 -0
- package/dist/electron/electron/activity/ActivityRepository.js +190 -0
- package/dist/electron/electron/agent/browser/browser-service.js +639 -0
- package/dist/electron/electron/agent/context-manager.js +225 -0
- package/dist/electron/electron/agent/custom-skill-loader.js +566 -0
- package/dist/electron/electron/agent/daemon.js +975 -0
- package/dist/electron/electron/agent/executor.js +3561 -0
- package/dist/electron/electron/agent/llm/anthropic-provider.js +155 -0
- package/dist/electron/electron/agent/llm/bedrock-provider.js +202 -0
- package/dist/electron/electron/agent/llm/gemini-provider.js +375 -0
- package/dist/electron/electron/agent/llm/index.js +34 -0
- package/dist/electron/electron/agent/llm/ollama-provider.js +263 -0
- package/dist/electron/electron/agent/llm/openai-oauth.js +101 -0
- package/dist/electron/electron/agent/llm/openai-provider.js +657 -0
- package/dist/electron/electron/agent/llm/openrouter-provider.js +232 -0
- package/dist/electron/electron/agent/llm/pricing.js +160 -0
- package/dist/electron/electron/agent/llm/provider-factory.js +880 -0
- package/dist/electron/electron/agent/llm/types.js +178 -0
- package/dist/electron/electron/agent/queue-manager.js +378 -0
- package/dist/electron/electron/agent/sandbox/docker-sandbox.js +402 -0
- package/dist/electron/electron/agent/sandbox/macos-sandbox.js +407 -0
- package/dist/electron/electron/agent/sandbox/runner.js +410 -0
- package/dist/electron/electron/agent/sandbox/sandbox-factory.js +228 -0
- package/dist/electron/electron/agent/sandbox/security-utils.js +258 -0
- package/dist/electron/electron/agent/search/brave-provider.js +119 -0
- package/dist/electron/electron/agent/search/google-provider.js +100 -0
- package/dist/electron/electron/agent/search/index.js +28 -0
- package/dist/electron/electron/agent/search/provider-factory.js +395 -0
- package/dist/electron/electron/agent/search/serpapi-provider.js +112 -0
- package/dist/electron/electron/agent/search/tavily-provider.js +90 -0
- package/dist/electron/electron/agent/search/types.js +40 -0
- package/dist/electron/electron/agent/security/index.js +12 -0
- package/dist/electron/electron/agent/security/input-sanitizer.js +303 -0
- package/dist/electron/electron/agent/security/output-filter.js +217 -0
- package/dist/electron/electron/agent/skill-eligibility.js +281 -0
- package/dist/electron/electron/agent/skill-registry.js +396 -0
- package/dist/electron/electron/agent/skills/document.js +878 -0
- package/dist/electron/electron/agent/skills/image-generator.js +225 -0
- package/dist/electron/electron/agent/skills/organizer.js +141 -0
- package/dist/electron/electron/agent/skills/presentation.js +367 -0
- package/dist/electron/electron/agent/skills/spreadsheet.js +165 -0
- package/dist/electron/electron/agent/tools/browser-tools.js +523 -0
- package/dist/electron/electron/agent/tools/builtin-settings.js +384 -0
- package/dist/electron/electron/agent/tools/canvas-tools.js +530 -0
- package/dist/electron/electron/agent/tools/cron-tools.js +577 -0
- package/dist/electron/electron/agent/tools/edit-tools.js +194 -0
- package/dist/electron/electron/agent/tools/file-tools.js +719 -0
- package/dist/electron/electron/agent/tools/glob-tools.js +283 -0
- package/dist/electron/electron/agent/tools/grep-tools.js +387 -0
- package/dist/electron/electron/agent/tools/image-tools.js +111 -0
- package/dist/electron/electron/agent/tools/mention-tools.js +282 -0
- package/dist/electron/electron/agent/tools/node-tools.js +476 -0
- package/dist/electron/electron/agent/tools/registry.js +2719 -0
- package/dist/electron/electron/agent/tools/search-tools.js +91 -0
- package/dist/electron/electron/agent/tools/shell-tools.js +574 -0
- package/dist/electron/electron/agent/tools/skill-tools.js +274 -0
- package/dist/electron/electron/agent/tools/system-tools.js +578 -0
- package/dist/electron/electron/agent/tools/web-fetch-tools.js +444 -0
- package/dist/electron/electron/agent/tools/x-tools.js +264 -0
- package/dist/electron/electron/agents/AgentRoleRepository.js +420 -0
- package/dist/electron/electron/agents/HeartbeatService.js +356 -0
- package/dist/electron/electron/agents/MentionRepository.js +197 -0
- package/dist/electron/electron/agents/TaskSubscriptionRepository.js +168 -0
- package/dist/electron/electron/agents/WorkingStateRepository.js +229 -0
- package/dist/electron/electron/canvas/canvas-manager.js +714 -0
- package/dist/electron/electron/canvas/canvas-preload.js +53 -0
- package/dist/electron/electron/canvas/canvas-protocol.js +195 -0
- package/dist/electron/electron/canvas/canvas-store.js +174 -0
- package/dist/electron/electron/canvas/index.js +13 -0
- package/dist/electron/electron/control-plane/client.js +364 -0
- package/dist/electron/electron/control-plane/handlers.js +572 -0
- package/dist/electron/electron/control-plane/index.js +41 -0
- package/dist/electron/electron/control-plane/node-manager.js +264 -0
- package/dist/electron/electron/control-plane/protocol.js +194 -0
- package/dist/electron/electron/control-plane/remote-client.js +437 -0
- package/dist/electron/electron/control-plane/server.js +640 -0
- package/dist/electron/electron/control-plane/settings.js +369 -0
- package/dist/electron/electron/control-plane/ssh-tunnel.js +549 -0
- package/dist/electron/electron/cron/index.js +30 -0
- package/dist/electron/electron/cron/schedule.js +190 -0
- package/dist/electron/electron/cron/service.js +614 -0
- package/dist/electron/electron/cron/store.js +155 -0
- package/dist/electron/electron/cron/types.js +82 -0
- package/dist/electron/electron/cron/webhook.js +258 -0
- package/dist/electron/electron/database/SecureSettingsRepository.js +444 -0
- package/dist/electron/electron/database/TaskLabelRepository.js +120 -0
- package/dist/electron/electron/database/repositories.js +1781 -0
- package/dist/electron/electron/database/schema.js +978 -0
- package/dist/electron/electron/extensions/index.js +33 -0
- package/dist/electron/electron/extensions/loader.js +313 -0
- package/dist/electron/electron/extensions/registry.js +485 -0
- package/dist/electron/electron/extensions/types.js +11 -0
- package/dist/electron/electron/gateway/channel-registry.js +1102 -0
- package/dist/electron/electron/gateway/channels/bluebubbles-client.js +479 -0
- package/dist/electron/electron/gateway/channels/bluebubbles.js +432 -0
- package/dist/electron/electron/gateway/channels/discord.js +975 -0
- package/dist/electron/electron/gateway/channels/email-client.js +593 -0
- package/dist/electron/electron/gateway/channels/email.js +443 -0
- package/dist/electron/electron/gateway/channels/google-chat.js +631 -0
- package/dist/electron/electron/gateway/channels/imessage-client.js +363 -0
- package/dist/electron/electron/gateway/channels/imessage.js +465 -0
- package/dist/electron/electron/gateway/channels/index.js +36 -0
- package/dist/electron/electron/gateway/channels/line-client.js +470 -0
- package/dist/electron/electron/gateway/channels/line.js +479 -0
- package/dist/electron/electron/gateway/channels/matrix-client.js +432 -0
- package/dist/electron/electron/gateway/channels/matrix.js +592 -0
- package/dist/electron/electron/gateway/channels/mattermost-client.js +394 -0
- package/dist/electron/electron/gateway/channels/mattermost.js +496 -0
- package/dist/electron/electron/gateway/channels/signal-client.js +500 -0
- package/dist/electron/electron/gateway/channels/signal.js +582 -0
- package/dist/electron/electron/gateway/channels/slack.js +415 -0
- package/dist/electron/electron/gateway/channels/teams.js +596 -0
- package/dist/electron/electron/gateway/channels/telegram.js +1390 -0
- package/dist/electron/electron/gateway/channels/twitch-client.js +502 -0
- package/dist/electron/electron/gateway/channels/twitch.js +396 -0
- package/dist/electron/electron/gateway/channels/types.js +8 -0
- package/dist/electron/electron/gateway/channels/whatsapp.js +953 -0
- package/dist/electron/electron/gateway/context-policy.js +268 -0
- package/dist/electron/electron/gateway/index.js +1063 -0
- package/dist/electron/electron/gateway/infrastructure.js +496 -0
- package/dist/electron/electron/gateway/router.js +2700 -0
- package/dist/electron/electron/gateway/security.js +375 -0
- package/dist/electron/electron/gateway/session.js +115 -0
- package/dist/electron/electron/gateway/tunnel.js +503 -0
- package/dist/electron/electron/guardrails/guardrail-manager.js +348 -0
- package/dist/electron/electron/hooks/gmail-watcher.js +300 -0
- package/dist/electron/electron/hooks/index.js +46 -0
- package/dist/electron/electron/hooks/mappings.js +381 -0
- package/dist/electron/electron/hooks/server.js +480 -0
- package/dist/electron/electron/hooks/settings.js +447 -0
- package/dist/electron/electron/hooks/types.js +41 -0
- package/dist/electron/electron/ipc/canvas-handlers.js +158 -0
- package/dist/electron/electron/ipc/handlers.js +3138 -0
- package/dist/electron/electron/ipc/mission-control-handlers.js +141 -0
- package/dist/electron/electron/main.js +448 -0
- package/dist/electron/electron/mcp/client/MCPClientManager.js +330 -0
- package/dist/electron/electron/mcp/client/MCPServerConnection.js +437 -0
- package/dist/electron/electron/mcp/client/transports/SSETransport.js +304 -0
- package/dist/electron/electron/mcp/client/transports/StdioTransport.js +307 -0
- package/dist/electron/electron/mcp/client/transports/WebSocketTransport.js +329 -0
- package/dist/electron/electron/mcp/host/MCPHostServer.js +354 -0
- package/dist/electron/electron/mcp/host/ToolAdapter.js +100 -0
- package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +497 -0
- package/dist/electron/electron/mcp/settings.js +446 -0
- package/dist/electron/electron/mcp/types.js +59 -0
- package/dist/electron/electron/memory/MemoryService.js +435 -0
- package/dist/electron/electron/notifications/index.js +17 -0
- package/dist/electron/electron/notifications/service.js +118 -0
- package/dist/electron/electron/notifications/store.js +144 -0
- package/dist/electron/electron/preload.js +842 -0
- package/dist/electron/electron/reports/StandupReportService.js +272 -0
- package/dist/electron/electron/security/concurrency.js +293 -0
- package/dist/electron/electron/security/index.js +15 -0
- package/dist/electron/electron/security/policy-manager.js +435 -0
- package/dist/electron/electron/settings/appearance-manager.js +193 -0
- package/dist/electron/electron/settings/personality-manager.js +724 -0
- package/dist/electron/electron/settings/x-manager.js +58 -0
- package/dist/electron/electron/tailscale/exposure.js +188 -0
- package/dist/electron/electron/tailscale/index.js +28 -0
- package/dist/electron/electron/tailscale/settings.js +205 -0
- package/dist/electron/electron/tailscale/tailscale.js +355 -0
- package/dist/electron/electron/tray/QuickInputWindow.js +568 -0
- package/dist/electron/electron/tray/TrayManager.js +895 -0
- package/dist/electron/electron/tray/index.js +9 -0
- package/dist/electron/electron/updater/index.js +6 -0
- package/dist/electron/electron/updater/update-manager.js +418 -0
- package/dist/electron/electron/utils/env-migration.js +209 -0
- package/dist/electron/electron/utils/process.js +102 -0
- package/dist/electron/electron/utils/rate-limiter.js +104 -0
- package/dist/electron/electron/utils/validation.js +419 -0
- package/dist/electron/electron/utils/x-cli.js +177 -0
- package/dist/electron/electron/voice/VoiceService.js +507 -0
- package/dist/electron/electron/voice/index.js +14 -0
- package/dist/electron/electron/voice/voice-settings-manager.js +359 -0
- package/dist/electron/shared/channelMessages.js +170 -0
- package/dist/electron/shared/types.js +1185 -0
- package/package.json +159 -0
- package/resources/skills/1password.json +10 -0
- package/resources/skills/add-documentation.json +31 -0
- package/resources/skills/analyze-csv.json +17 -0
- package/resources/skills/apple-notes.json +10 -0
- package/resources/skills/apple-reminders.json +10 -0
- package/resources/skills/auto-commenter.json +10 -0
- package/resources/skills/bear-notes.json +10 -0
- package/resources/skills/bird.json +35 -0
- package/resources/skills/blogwatcher.json +10 -0
- package/resources/skills/blucli.json +10 -0
- package/resources/skills/bluebubbles.json +10 -0
- package/resources/skills/camsnap.json +10 -0
- package/resources/skills/clean-imports.json +18 -0
- package/resources/skills/code-review.json +18 -0
- package/resources/skills/coding-agent.json +10 -0
- package/resources/skills/compare-files.json +23 -0
- package/resources/skills/convert-code.json +34 -0
- package/resources/skills/create-changelog.json +24 -0
- package/resources/skills/debug-error.json +17 -0
- package/resources/skills/dependency-check.json +10 -0
- package/resources/skills/discord.json +10 -0
- package/resources/skills/eightctl.json +10 -0
- package/resources/skills/explain-code.json +29 -0
- package/resources/skills/extract-todos.json +18 -0
- package/resources/skills/food-order.json +10 -0
- package/resources/skills/gemini.json +10 -0
- package/resources/skills/generate-readme.json +10 -0
- package/resources/skills/gifgrep.json +10 -0
- package/resources/skills/git-commit.json +10 -0
- package/resources/skills/github.json +10 -0
- package/resources/skills/gog.json +10 -0
- package/resources/skills/goplaces.json +10 -0
- package/resources/skills/himalaya.json +10 -0
- package/resources/skills/imsg.json +10 -0
- package/resources/skills/karpathy-guidelines.json +12 -0
- package/resources/skills/last30days.json +26 -0
- package/resources/skills/local-places.json +10 -0
- package/resources/skills/mcporter.json +10 -0
- package/resources/skills/model-usage.json +10 -0
- package/resources/skills/nano-banana-pro.json +10 -0
- package/resources/skills/nano-pdf.json +10 -0
- package/resources/skills/notion.json +10 -0
- package/resources/skills/obsidian.json +10 -0
- package/resources/skills/openai-image-gen.json +10 -0
- package/resources/skills/openai-whisper-api.json +10 -0
- package/resources/skills/openai-whisper.json +10 -0
- package/resources/skills/openhue.json +10 -0
- package/resources/skills/oracle.json +10 -0
- package/resources/skills/ordercli.json +10 -0
- package/resources/skills/peekaboo.json +10 -0
- package/resources/skills/project-structure.json +10 -0
- package/resources/skills/proofread.json +17 -0
- package/resources/skills/refactor-code.json +31 -0
- package/resources/skills/rename-symbol.json +23 -0
- package/resources/skills/sag.json +10 -0
- package/resources/skills/security-audit.json +18 -0
- package/resources/skills/session-logs.json +10 -0
- package/resources/skills/sherpa-onnx-tts.json +10 -0
- package/resources/skills/skill-creator.json +15 -0
- package/resources/skills/skill-hub.json +29 -0
- package/resources/skills/slack.json +10 -0
- package/resources/skills/songsee.json +10 -0
- package/resources/skills/sonoscli.json +10 -0
- package/resources/skills/spotify-player.json +10 -0
- package/resources/skills/startup-cfo.json +55 -0
- package/resources/skills/summarize-folder.json +18 -0
- package/resources/skills/summarize.json +10 -0
- package/resources/skills/things-mac.json +10 -0
- package/resources/skills/tmux.json +10 -0
- package/resources/skills/translate.json +36 -0
- package/resources/skills/trello.json +10 -0
- package/resources/skills/video-frames.json +10 -0
- package/resources/skills/voice-call.json +10 -0
- package/resources/skills/wacli.json +10 -0
- package/resources/skills/weather.json +10 -0
- package/resources/skills/write-tests.json +31 -0
- package/src/electron/activity/ActivityRepository.ts +238 -0
- package/src/electron/agent/browser/browser-service.ts +721 -0
- package/src/electron/agent/context-manager.ts +257 -0
- package/src/electron/agent/custom-skill-loader.ts +634 -0
- package/src/electron/agent/daemon.ts +1097 -0
- package/src/electron/agent/executor.ts +4017 -0
- package/src/electron/agent/llm/anthropic-provider.ts +175 -0
- package/src/electron/agent/llm/bedrock-provider.ts +236 -0
- package/src/electron/agent/llm/gemini-provider.ts +422 -0
- package/src/electron/agent/llm/index.ts +9 -0
- package/src/electron/agent/llm/ollama-provider.ts +347 -0
- package/src/electron/agent/llm/openai-oauth.ts +127 -0
- package/src/electron/agent/llm/openai-provider.ts +686 -0
- package/src/electron/agent/llm/openrouter-provider.ts +273 -0
- package/src/electron/agent/llm/pricing.ts +180 -0
- package/src/electron/agent/llm/provider-factory.ts +971 -0
- package/src/electron/agent/llm/types.ts +291 -0
- package/src/electron/agent/queue-manager.ts +408 -0
- package/src/electron/agent/sandbox/docker-sandbox.ts +453 -0
- package/src/electron/agent/sandbox/macos-sandbox.ts +426 -0
- package/src/electron/agent/sandbox/runner.ts +453 -0
- package/src/electron/agent/sandbox/sandbox-factory.ts +337 -0
- package/src/electron/agent/sandbox/security-utils.ts +251 -0
- package/src/electron/agent/search/brave-provider.ts +141 -0
- package/src/electron/agent/search/google-provider.ts +131 -0
- package/src/electron/agent/search/index.ts +6 -0
- package/src/electron/agent/search/provider-factory.ts +450 -0
- package/src/electron/agent/search/serpapi-provider.ts +138 -0
- package/src/electron/agent/search/tavily-provider.ts +108 -0
- package/src/electron/agent/search/types.ts +118 -0
- package/src/electron/agent/security/index.ts +20 -0
- package/src/electron/agent/security/input-sanitizer.ts +380 -0
- package/src/electron/agent/security/output-filter.ts +259 -0
- package/src/electron/agent/skill-eligibility.ts +334 -0
- package/src/electron/agent/skill-registry.ts +457 -0
- package/src/electron/agent/skills/document.ts +1070 -0
- package/src/electron/agent/skills/image-generator.ts +272 -0
- package/src/electron/agent/skills/organizer.ts +131 -0
- package/src/electron/agent/skills/presentation.ts +418 -0
- package/src/electron/agent/skills/spreadsheet.ts +166 -0
- package/src/electron/agent/tools/browser-tools.ts +546 -0
- package/src/electron/agent/tools/builtin-settings.ts +422 -0
- package/src/electron/agent/tools/canvas-tools.ts +572 -0
- package/src/electron/agent/tools/cron-tools.ts +723 -0
- package/src/electron/agent/tools/edit-tools.ts +196 -0
- package/src/electron/agent/tools/file-tools.ts +811 -0
- package/src/electron/agent/tools/glob-tools.ts +303 -0
- package/src/electron/agent/tools/grep-tools.ts +432 -0
- package/src/electron/agent/tools/image-tools.ts +126 -0
- package/src/electron/agent/tools/mention-tools.ts +371 -0
- package/src/electron/agent/tools/node-tools.ts +550 -0
- package/src/electron/agent/tools/registry.ts +3052 -0
- package/src/electron/agent/tools/search-tools.ts +111 -0
- package/src/electron/agent/tools/shell-tools.ts +651 -0
- package/src/electron/agent/tools/skill-tools.ts +340 -0
- package/src/electron/agent/tools/system-tools.ts +665 -0
- package/src/electron/agent/tools/web-fetch-tools.ts +528 -0
- package/src/electron/agent/tools/x-tools.ts +267 -0
- package/src/electron/agents/AgentRoleRepository.ts +557 -0
- package/src/electron/agents/HeartbeatService.ts +469 -0
- package/src/electron/agents/MentionRepository.ts +242 -0
- package/src/electron/agents/TaskSubscriptionRepository.ts +231 -0
- package/src/electron/agents/WorkingStateRepository.ts +278 -0
- package/src/electron/canvas/canvas-manager.ts +818 -0
- package/src/electron/canvas/canvas-preload.ts +102 -0
- package/src/electron/canvas/canvas-protocol.ts +174 -0
- package/src/electron/canvas/canvas-store.ts +200 -0
- package/src/electron/canvas/index.ts +8 -0
- package/src/electron/control-plane/client.ts +527 -0
- package/src/electron/control-plane/handlers.ts +723 -0
- package/src/electron/control-plane/index.ts +51 -0
- package/src/electron/control-plane/node-manager.ts +322 -0
- package/src/electron/control-plane/protocol.ts +269 -0
- package/src/electron/control-plane/remote-client.ts +517 -0
- package/src/electron/control-plane/server.ts +853 -0
- package/src/electron/control-plane/settings.ts +401 -0
- package/src/electron/control-plane/ssh-tunnel.ts +624 -0
- package/src/electron/cron/index.ts +9 -0
- package/src/electron/cron/schedule.ts +217 -0
- package/src/electron/cron/service.ts +743 -0
- package/src/electron/cron/store.ts +165 -0
- package/src/electron/cron/types.ts +291 -0
- package/src/electron/cron/webhook.ts +303 -0
- package/src/electron/database/SecureSettingsRepository.ts +514 -0
- package/src/electron/database/TaskLabelRepository.ts +148 -0
- package/src/electron/database/repositories.ts +2397 -0
- package/src/electron/database/schema.ts +1017 -0
- package/src/electron/extensions/index.ts +18 -0
- package/src/electron/extensions/loader.ts +336 -0
- package/src/electron/extensions/registry.ts +546 -0
- package/src/electron/extensions/types.ts +372 -0
- package/src/electron/gateway/channel-registry.ts +1267 -0
- package/src/electron/gateway/channels/bluebubbles-client.ts +641 -0
- package/src/electron/gateway/channels/bluebubbles.ts +509 -0
- package/src/electron/gateway/channels/discord.ts +1150 -0
- package/src/electron/gateway/channels/email-client.ts +708 -0
- package/src/electron/gateway/channels/email.ts +516 -0
- package/src/electron/gateway/channels/google-chat.ts +760 -0
- package/src/electron/gateway/channels/imessage-client.ts +473 -0
- package/src/electron/gateway/channels/imessage.ts +520 -0
- package/src/electron/gateway/channels/index.ts +21 -0
- package/src/electron/gateway/channels/line-client.ts +598 -0
- package/src/electron/gateway/channels/line.ts +559 -0
- package/src/electron/gateway/channels/matrix-client.ts +632 -0
- package/src/electron/gateway/channels/matrix.ts +655 -0
- package/src/electron/gateway/channels/mattermost-client.ts +526 -0
- package/src/electron/gateway/channels/mattermost.ts +550 -0
- package/src/electron/gateway/channels/signal-client.ts +722 -0
- package/src/electron/gateway/channels/signal.ts +666 -0
- package/src/electron/gateway/channels/slack.ts +458 -0
- package/src/electron/gateway/channels/teams.ts +681 -0
- package/src/electron/gateway/channels/telegram.ts +1727 -0
- package/src/electron/gateway/channels/twitch-client.ts +665 -0
- package/src/electron/gateway/channels/twitch.ts +468 -0
- package/src/electron/gateway/channels/types.ts +1002 -0
- package/src/electron/gateway/channels/whatsapp.ts +1101 -0
- package/src/electron/gateway/context-policy.ts +382 -0
- package/src/electron/gateway/index.ts +1274 -0
- package/src/electron/gateway/infrastructure.ts +645 -0
- package/src/electron/gateway/router.ts +3206 -0
- package/src/electron/gateway/security.ts +422 -0
- package/src/electron/gateway/session.ts +144 -0
- package/src/electron/gateway/tunnel.ts +626 -0
- package/src/electron/guardrails/guardrail-manager.ts +380 -0
- package/src/electron/hooks/gmail-watcher.ts +355 -0
- package/src/electron/hooks/index.ts +30 -0
- package/src/electron/hooks/mappings.ts +404 -0
- package/src/electron/hooks/server.ts +574 -0
- package/src/electron/hooks/settings.ts +466 -0
- package/src/electron/hooks/types.ts +245 -0
- package/src/electron/ipc/canvas-handlers.ts +223 -0
- package/src/electron/ipc/handlers.ts +3661 -0
- package/src/electron/ipc/mission-control-handlers.ts +182 -0
- package/src/electron/main.ts +496 -0
- package/src/electron/mcp/client/MCPClientManager.ts +406 -0
- package/src/electron/mcp/client/MCPServerConnection.ts +514 -0
- package/src/electron/mcp/client/transports/SSETransport.ts +360 -0
- package/src/electron/mcp/client/transports/StdioTransport.ts +355 -0
- package/src/electron/mcp/client/transports/WebSocketTransport.ts +384 -0
- package/src/electron/mcp/host/MCPHostServer.ts +388 -0
- package/src/electron/mcp/host/ToolAdapter.ts +140 -0
- package/src/electron/mcp/registry/MCPRegistryManager.ts +565 -0
- package/src/electron/mcp/settings.ts +468 -0
- package/src/electron/mcp/types.ts +371 -0
- package/src/electron/memory/MemoryService.ts +523 -0
- package/src/electron/notifications/index.ts +16 -0
- package/src/electron/notifications/service.ts +161 -0
- package/src/electron/notifications/store.ts +163 -0
- package/src/electron/preload.ts +2845 -0
- package/src/electron/reports/StandupReportService.ts +356 -0
- package/src/electron/security/concurrency.ts +333 -0
- package/src/electron/security/index.ts +17 -0
- package/src/electron/security/policy-manager.ts +539 -0
- package/src/electron/settings/appearance-manager.ts +182 -0
- package/src/electron/settings/personality-manager.ts +800 -0
- package/src/electron/settings/x-manager.ts +62 -0
- package/src/electron/tailscale/exposure.ts +262 -0
- package/src/electron/tailscale/index.ts +34 -0
- package/src/electron/tailscale/settings.ts +218 -0
- package/src/electron/tailscale/tailscale.ts +379 -0
- package/src/electron/tray/QuickInputWindow.ts +609 -0
- package/src/electron/tray/TrayManager.ts +1005 -0
- package/src/electron/tray/index.ts +6 -0
- package/src/electron/updater/index.ts +1 -0
- package/src/electron/updater/update-manager.ts +447 -0
- package/src/electron/utils/env-migration.ts +203 -0
- package/src/electron/utils/process.ts +124 -0
- package/src/electron/utils/rate-limiter.ts +130 -0
- package/src/electron/utils/validation.ts +493 -0
- package/src/electron/utils/x-cli.ts +198 -0
- package/src/electron/voice/VoiceService.ts +583 -0
- package/src/electron/voice/index.ts +9 -0
- package/src/electron/voice/voice-settings-manager.ts +403 -0
- package/src/renderer/App.tsx +775 -0
- package/src/renderer/components/ActivityFeed.tsx +407 -0
- package/src/renderer/components/ActivityFeedItem.tsx +285 -0
- package/src/renderer/components/AgentRoleCard.tsx +343 -0
- package/src/renderer/components/AgentRoleEditor.tsx +805 -0
- package/src/renderer/components/AgentSquadSettings.tsx +295 -0
- package/src/renderer/components/AgentWorkingStatePanel.tsx +411 -0
- package/src/renderer/components/AppearanceSettings.tsx +122 -0
- package/src/renderer/components/ApprovalDialog.tsx +100 -0
- package/src/renderer/components/BlueBubblesSettings.tsx +505 -0
- package/src/renderer/components/BuiltinToolsSettings.tsx +307 -0
- package/src/renderer/components/CanvasPreview.tsx +1189 -0
- package/src/renderer/components/CommandOutput.tsx +202 -0
- package/src/renderer/components/ContextPolicySettings.tsx +523 -0
- package/src/renderer/components/ControlPlaneSettings.tsx +1134 -0
- package/src/renderer/components/DisclaimerModal.tsx +124 -0
- package/src/renderer/components/DiscordSettings.tsx +436 -0
- package/src/renderer/components/EmailSettings.tsx +606 -0
- package/src/renderer/components/ExtensionsSettings.tsx +542 -0
- package/src/renderer/components/FileViewer.tsx +224 -0
- package/src/renderer/components/GoogleChatSettings.tsx +535 -0
- package/src/renderer/components/GuardrailSettings.tsx +487 -0
- package/src/renderer/components/HooksSettings.tsx +581 -0
- package/src/renderer/components/ImessageSettings.tsx +484 -0
- package/src/renderer/components/LineSettings.tsx +483 -0
- package/src/renderer/components/MCPRegistryBrowser.tsx +386 -0
- package/src/renderer/components/MCPSettings.tsx +943 -0
- package/src/renderer/components/MainContent.tsx +2433 -0
- package/src/renderer/components/MatrixSettings.tsx +510 -0
- package/src/renderer/components/MattermostSettings.tsx +473 -0
- package/src/renderer/components/MemorySettings.tsx +247 -0
- package/src/renderer/components/MentionBadge.tsx +87 -0
- package/src/renderer/components/MentionInput.tsx +409 -0
- package/src/renderer/components/MentionList.tsx +476 -0
- package/src/renderer/components/MissionControlPanel.tsx +1995 -0
- package/src/renderer/components/NodesSettings.tsx +316 -0
- package/src/renderer/components/NotificationPanel.tsx +481 -0
- package/src/renderer/components/Onboarding/AwakeningOrb.tsx +44 -0
- package/src/renderer/components/Onboarding/Onboarding.tsx +443 -0
- package/src/renderer/components/Onboarding/TypewriterText.tsx +102 -0
- package/src/renderer/components/Onboarding/index.ts +3 -0
- package/src/renderer/components/OnboardingModal.tsx +698 -0
- package/src/renderer/components/PairingCodeDisplay.tsx +324 -0
- package/src/renderer/components/PersonalitySettings.tsx +597 -0
- package/src/renderer/components/QueueSettings.tsx +119 -0
- package/src/renderer/components/QuickTaskFAB.tsx +71 -0
- package/src/renderer/components/RightPanel.tsx +413 -0
- package/src/renderer/components/ScheduledTasksSettings.tsx +1328 -0
- package/src/renderer/components/SearchSettings.tsx +328 -0
- package/src/renderer/components/Settings.tsx +1504 -0
- package/src/renderer/components/Sidebar.tsx +344 -0
- package/src/renderer/components/SignalSettings.tsx +673 -0
- package/src/renderer/components/SkillHubBrowser.tsx +458 -0
- package/src/renderer/components/SkillParameterModal.tsx +185 -0
- package/src/renderer/components/SkillsSettings.tsx +451 -0
- package/src/renderer/components/SlackSettings.tsx +442 -0
- package/src/renderer/components/StandupReportViewer.tsx +614 -0
- package/src/renderer/components/TaskBoard.tsx +498 -0
- package/src/renderer/components/TaskBoardCard.tsx +357 -0
- package/src/renderer/components/TaskBoardColumn.tsx +211 -0
- package/src/renderer/components/TaskLabelManager.tsx +472 -0
- package/src/renderer/components/TaskQueuePanel.tsx +144 -0
- package/src/renderer/components/TaskQuickActions.tsx +492 -0
- package/src/renderer/components/TaskTimeline.tsx +216 -0
- package/src/renderer/components/TaskView.tsx +162 -0
- package/src/renderer/components/TeamsSettings.tsx +518 -0
- package/src/renderer/components/TelegramSettings.tsx +421 -0
- package/src/renderer/components/Toast.tsx +76 -0
- package/src/renderer/components/TraySettings.tsx +189 -0
- package/src/renderer/components/TwitchSettings.tsx +511 -0
- package/src/renderer/components/UpdateSettings.tsx +295 -0
- package/src/renderer/components/VoiceIndicator.tsx +270 -0
- package/src/renderer/components/VoiceSettings.tsx +867 -0
- package/src/renderer/components/WhatsAppSettings.tsx +721 -0
- package/src/renderer/components/WorkingStateEditor.tsx +309 -0
- package/src/renderer/components/WorkingStateHistory.tsx +481 -0
- package/src/renderer/components/WorkspaceSelector.tsx +150 -0
- package/src/renderer/components/XSettings.tsx +311 -0
- package/src/renderer/global.d.ts +9 -0
- package/src/renderer/hooks/useAgentContext.ts +153 -0
- package/src/renderer/hooks/useOnboardingFlow.ts +548 -0
- package/src/renderer/hooks/useVoiceInput.ts +268 -0
- package/src/renderer/index.html +12 -0
- package/src/renderer/main.tsx +10 -0
- package/src/renderer/public/cowork-os-logo.png +0 -0
- package/src/renderer/quick-input.html +164 -0
- package/src/renderer/styles/index.css +14504 -0
- package/src/renderer/utils/agentMessages.ts +749 -0
- package/src/renderer/utils/voice-directives.ts +169 -0
- package/src/shared/channelMessages.ts +213 -0
- package/src/shared/types.ts +3608 -0
- package/tsconfig.electron.json +26 -0
- package/tsconfig.json +26 -0
- package/tsconfig.node.json +10 -0
- 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.
|