Additional
Using CoWork from WhatsApp and Other Channels
Synced from github.com/CoWork-OS/CoWork-OS/docs
This guide explains how to use CoWork from remote chat channels such as WhatsApp, Telegram, Slack, Discord, and other configured messaging integrations.
It focuses on daily usage: starting work, following up, stopping tasks, using temporary sessions, invoking skills, and getting scheduled results back in chat. For setup, see Channel Integrations. For per-channel features and best practices, see Channel User Guides. For the lower-level lifecycle model, see Gateway Message Lifecycle.
Mental Model
Think of each chat as a remote control for CoWork.
You can:
- send a normal message to start a task
- send another normal message to add context to the current task
- use commands when you want to control the task lifecycle
- use skill slashes when you want a specific workflow
- receive progress, approvals, final answers, and scheduled results in the same chat
The most important rule is simple: ordinary text during a running task is treated as a follow-up, not as a new task.
If you want a new task, send /new. If you want to stop the current task, send /stop.
Starting a Task
Send the task directly:
Update the README with the new onboarding flow.
Research the latest pricing for these three tools and summarize the differences.
Draft a customer reply based on the last email thread.
CoWork will route the message into the selected workspace for that chat. If no workspace is selected, it may ask you to choose one or use the channel's default behavior.
Best practices:
- Be specific about the desired output.
- Mention files, folders, links, or constraints up front when you know them.
- Use follow-up messages for corrections or extra context while the task is still running.
- Use
/newbefore changing topics.
Following Up on a Running Task
When a task is active, normal chat messages become follow-ups:
Also make sure the examples use TypeScript.
Ignore the old API section. That is deprecated.
Use the shorter version and keep it under 500 words.
This is useful when you notice something mid-run. You do not need a command for ordinary context, corrections, or extra requirements.
If you want to make the follow-up more explicit, use:
/queue Add tests for the retry behavior too.
Use /queue <message> when you want the text to clearly be handled as task input rather than a command or a new topic.
Steering a Task
Use /steer for high-priority guidance during an active task:
/steer Prioritize correctness over speed. Do not change public APIs.
/steer Stop editing docs and focus only on the failing test.
Use this for corrections that should affect the current run immediately. For ordinary extra details, a normal message is usually enough.
Best practices:
- Keep steering messages short and directive.
- Use
/steerfor constraints, not for unrelated new work. - If the task is going in the wrong direction entirely, use
/stopand then start again.
Starting Fresh Without Stopping the Old Task
Use /new or /newtask when you want the next message to start a new task:
/new
Then send the new request:
Now write a short launch announcement for the feature.
/new unlinks the chat from the current task. It does not cancel the old task. This is useful when a task can continue in the background but you want to move on in the chat.
Best practices:
- Use
/newwhen changing topics. - Use
/newbefore asking an unrelated question while a task is still running. - Use
/stopinstead if the old task should not continue.
Stopping a Task
Use /stop or /cancel to cancel the active task:
/stop
/cancel
After cancellation, CoWork clears that chat's task association so late updates from the stopped task are not sent back into the chat.
Best practices:
- Use
/stopwhen the task is wrong, obsolete, or no longer worth completing. - Use
/newinstead when the task may continue but you want the chat to move on. - After
/stop, send a fresh task message with the corrected request.
Temporary Sessions
Use /new temp for scratch work:
/new temp
Then send a task:
Prototype a small Node script that parses this CSV shape.
Temporary sessions are useful for experiments, one-off analysis, and work that should not attach to a normal project workspace.
CoWork hides temporary workspace paths from chat replies and from /workspaces so the workspace list stays focused on real user workspaces.
Best practices:
- Use
/new tempfor scratch prototypes, quick writing drafts, isolated analysis, or throwaway experiments. - Use a real workspace when the task should edit project files or use project context.
- Do not expect temporary sessions to be a long-term project home.
Checking Status
Use /status for gateway and task status:
/status
Use /task for a current task snapshot:
/task
Use /queue to inspect queued work:
/queue
Best practices:
- Use
/taskwhen you want to know what CoWork thinks it is currently doing. - Use
/queuewhen multiple tasks or follow-ups may be waiting. - Use
/statuswhen you are checking whether the channel is connected and responsive.
Pausing and Resuming
Use:
/pause
/resume
Pause is useful when you need time to review, provide missing context, or stop the agent from continuing temporarily without cancelling the task.
Best practices:
- Use
/pausewhen you intend to continue the same task. - Use
/stopwhen you do not want the task to continue. - Send any missing context before
/resume.
Background Tasks
Use /background, /bg, or /btw to start a task that should not take over the current chat task:
/background Prepare a short competitor summary for Linear, Asana, and Trello.
/bg Check whether the docs mention the old product name.
/btw Draft a weekly update from this workspace context.
Background tasks are useful for side work. They should be self-contained because they are intentionally unlinked from the active chat task.
Best practices:
- Use background tasks for independent work.
- Include enough context in the command itself.
- Do not use background tasks for urgent corrections to the active task; use a normal follow-up or
/steer.
Workspace Selection
Use /workspaces to list available workspaces:
/workspaces
Use /workspace to select one:
/workspace 2
/workspace cowork
Temporary scratch workspaces are hidden from /workspaces.
Best practices:
- Select the workspace before asking CoWork to edit files.
- Use clear workspace names where possible.
- Use
/new tempinstead of adding a temporary folder to the normal workspace list.
Commands and Help
Use /help for a compact reminder:
/help
Use /commands for the fuller command catalog:
/commands
Some channels support category views:
/commands task
Best practices:
- Use
/helpwhen you only need the basics. - Use
/commandswhen looking for less common controls. - If you type an unknown slash command, CoWork will tell you it is unknown instead of treating it as a task.
Skill Slash Commands
Skills are specialized workflows. Use /skills to see what is available:
/skills
Toggle a skill with:
/skill skill-id
Run an enabled skill with its slash form:
/simplify Make this proposal shorter and clearer.
/batch Update every docs page that still uses the old term.
/llm-wiki Build a research vault for agent workflow patterns.
Enabled skills can also be invoked by their skill slug:
/react-best-practices Review this component architecture.
Best practices:
- Use skill slashes when you know the workflow you want.
- Use normal language when you want CoWork to choose the approach.
- Keep
/skill <id>for toggling skills; use/<skill-slug> argsto run one. - If a skill is disabled, enable it first or ask CoWork to use another approach.
Approvals
When CoWork asks for approval, respond with:
/approve
or:
/yes
To reject:
/deny
or:
/no
Best practices:
- Read approval prompts carefully before approving.
- Use
/denywhen the requested action is too broad, risky, or no longer needed. - Add a short follow-up after denial if you want CoWork to try a safer alternative.
Scheduled Results in Chat
Scheduled tasks can deliver results back to a channel. The result is formatted and delivered through the same path as normal chat replies.
Examples:
/schedule Every weekday at 9am, summarize new issues in this repo.
/brief schedule morning
Scheduled tasks should produce the final result as task output. CoWork handles sending that output to the selected chat.
Best practices:
- Make scheduled prompts explicit about the desired final answer.
- Use
deliverOnlyIfResultwhen empty successful runs should stay quiet. - Include the relevant chat transcript variables only when the recurring job needs recent chat context.
- Avoid asking the scheduled task to message you directly; delivery is handled by the scheduler.
WhatsApp-Specific Tips
WhatsApp supports a few conveniences:
- natural shortcuts such as
help,status,new task,new temp,stop,queue ..., andbackground ... - typing indicators while CoWork is working
- editable progress messages, so repeated progress updates can update one message instead of spamming the chat
- self-chat mode for using your personal "Message Yourself" thread
- response prefixes when you want bot replies to be visually distinct
Best practices:
- Use self-chat mode when connecting your personal WhatsApp number.
- Set a short response prefix if your own messages and CoWork replies are hard to distinguish.
- Use
/new tempfor scratch work instead of creating random temporary folders. - Use
/commandswhen you forget the exact slash form.
Telegram Tips
Telegram exposes the core gateway commands in the bot's / menu after the bot connects.
Useful commands:
/newand/newtaskstart the next message fresh./stopand/cancelstop the active task./queue messageadds an explicit follow-up to the current task./steer guidancesends high-priority guidance to the active task./background promptstarts unlinked side work./commandsshows the full remote command catalog.
Best practices:
- Use the Telegram
/menu for common controls. - In groups, check the configured routing mode. Some groups route only mentions or commands.
- Reply to the bot or mention it when using Telegram group modes that require a mention.
- Telegram can show draft-style streaming for assistant text; concise follow-ups keep the chat easier to read.
Discord Tips
Discord supports native slash commands for the core lifecycle controls.
Useful commands:
/new mode:tempstarts a scratch temporary session./stopcancels the active task./commands category:task controlbrowses command groups./queue message:...sends an explicit follow-up./steer guidance:...steers the active task./background prompt:...starts unlinked side work./task prompt:...remains a compatibility shortcut for starting a task directly.
Best practices:
- Use
/task prompt:...only when you want to start task text from Discord's native slash UI. - Use
/statusfor current state;/taskin normal text channels is the gateway task snapshot command when delivered as text. - In servers, confirm the bot has access to the channel and that the server is allowed by the channel configuration.
- In threads, CoWork preserves thread context where the adapter can provide it.
Slack Tips
Slack can route messages from DMs, mentions, and registered slash commands. CoWork can handle the command text once Slack delivers it, but Slack slash commands must be registered in the Slack app configuration first.
Recommended Slack slash commands:
/help
/commands
/status
/workspaces
/workspace
/new
/newtask
/stop
/cancel
/pause
/resume
/queue
/steer
/background
/skills
/skill
/schedule
/brief
/approve
/deny
/models
/providers
/agent
Manifest-style snippet:
features:
slash_commands:
- command: /new
description: Start the next CoWork message fresh
usage_hint: "[temp]"
should_escape: false
- command: /stop
description: Stop the active CoWork task
should_escape: false
- command: /commands
description: Browse CoWork commands
usage_hint: "[category]"
should_escape: false
- command: /queue
description: Show queue status or add a task follow-up
usage_hint: "[clear|message]"
should_escape: false
- command: /steer
description: Send guidance to the active task
usage_hint: "<guidance>"
should_escape: false
- command: /background
description: Start unlinked side work
usage_hint: "<prompt>"
should_escape: false
Repeat that pattern for the remaining core commands you want visible in Slack. In Socket Mode setups, keep the existing Socket Mode receiver and app tokens; the command entries just make Slack deliver those slash payloads to CoWork.
Best practices:
- Register the core slash commands in the Slack app manifest or app settings.
- Use Slack DMs for personal work and channel mentions for shared work.
- Prefer
/queue messageor/steer guidancefor active-task input in busy channels. - Slack supports message edits for curated progress, so one progress message can be updated instead of sending repeated status messages.
Common Patterns
Start a project task:
/workspace cowork
Update the channel docs to mention editable WhatsApp progress.
Add context while it runs:
Also mention that /stop cancels and /new only starts fresh.
Steer the task:
/steer Keep this end-user facing. Avoid implementation details.
Move on without cancelling:
/new
Draft a short changelog entry for the same feature.
Cancel and restart:
/stop
Rewrite the request from scratch: focus only on WhatsApp, not all channels.
Use scratch mode:
/new temp
Create a quick outline for a support article about remote commands.
Run a skill:
/simplify Make this announcement clearer for non-technical users.
Run side work:
/background Check if any docs still mention the old command list.
Troubleshooting
If CoWork does not respond:
- send
/status - check that the channel is enabled
- check self-chat or group routing settings
- confirm the sender is allowed by the channel security mode
- use
/workspacesto confirm the chat has a usable workspace
If a message went to the wrong task:
- use
/newbefore changing topics - use
/taskto inspect the active task - use
/stopif the active task should be cancelled
If a slash command does not work:
- send
/commands - check spelling and aliases
- use
/skillsif it is a skill command - enable the skill with
/skill <id>if needed
If progress messages look noisy:
- prefer WhatsApp or channels with editable progress where available
- use concise follow-ups
- avoid repeatedly sending unrelated messages into an active task
Quick Reference
| Goal | Command |
|---|---|
| Show help | /help |
| Show command catalog | /commands |
| Check status | /status |
| Show current task | /task |
| Start next message fresh | /new |
| Start scratch temporary session | /new temp |
| Stop active task | /stop |
| Pause active task | /pause |
| Resume active task | /resume |
| Send explicit follow-up | /queue <message> |
| Steer active task | /steer <guidance> |
| Start side work | /background <prompt> |
| List workspaces | /workspaces |
| Select workspace | /workspace <name or number> |
| List skills | /skills |
| Toggle skill | /skill <id> |
| Run skill | /<skill-slug> args |
| Approve action | /approve or /yes |
| Deny action | /deny or /no |