Chat commands
All available Twitch chat commands
Once you've connected a bot account, viewers can interact with Dirework through Twitch chat commands.
The bot listens while its page is open. Copy the bot page URL from Dashboard → Bot and add it to OBS as a browser source (or keep it in a pinned browser tab). While that page is open, the bot reads chat and replies — close it and the bot goes quiet. If you regenerate the bot token, re-copy the URL.
Task commands (all viewers)
| Command | Description |
|---|---|
!task <text> | Add a new task (your first task automatically becomes your active one) |
!done | Mark your active task as done |
!done <number> | Mark a specific task by position as done |
!edit <number> <text> | Edit a specific task by position |
!remove <number> | Remove a specific task by position |
!focus <number> | Set a task as your active/focused task |
!check | Show your current active task |
!check @user | Show another user's active task |
!next <text> | Complete your active task and start a new one |
!help | Show available commands in chat |
Task commands (broadcaster / mods)
| Command | Description |
|---|---|
!clear all | Clear all tasks from the list |
!clear done | Clear all completed tasks |
!clear @user | Remove all tasks from a specific user |
Timer commands (broadcaster / mods)
| Command | Description |
|---|---|
!timer start | Start the timer with default settings |
!timer start <cycles> | Start the timer with a specific cycle count |
!timer pause | Pause the timer |
!timer resume | Resume the timer |
!timer skip | Skip the current phase |
!timer reset | Reset the timer to idle |
!timer eta | Show time remaining in the current phase and the whole session |
Meta commands (always available)
These commands are always enabled regardless of task or timer command settings.
| Command | Description |
|---|---|
!dwhelp | Posts a link to this commands reference page — or, if no docs URL is configured, an inline list of the available commands |
!dwcommands | Same as !dwhelp |
Active task and focus
When you add your first task with !task, it automatically becomes your active task. Subsequent tasks are added as pending.
- Your active task is what shows as your current focus in the overlay and in
!checkresponses. - When you complete a task with
!done, the next pending task is automatically activated. - Use
!focus <number>to manually switch which task is active. The number is the position in your task list (1-based).
Command aliases
Broadcasters can remap command names in Bot Settings (/dashboard/bot). For example, you could set add to map to task, so viewers can use !add instead of !task.
Aliases are resolved for every command before it runs, so an alias can remap to any command — task, timer, !clear, and even the meta commands (!dwhelp, !dwcommands). The built-in command names always keep working regardless of your aliases.
Task priority
Tasks created by the broadcaster (stream owner) are pinned to the top of the list. Viewer tasks appear below in the order they were added.
Bot responses
All bot response messages are customizable from the Bot Settings page (/dashboard/bot). Task and timer command groups can also be individually enabled or disabled.
Task bot responses
| Message | Default | Variables |
|---|---|---|
| Task Added | Awooo! The task "{task}" has been added to the pack, {user}! | {task}, {user} |
| No Task Added | Your paws are full, {user}! Finish a task with !done before adding another. | {user} |
| No Task Content | Tell the pack what you're working on! Use !task [task], {user}! | {user} |
| No Task to Edit | No task in your den to edit, {user} — try !edit [number] [new task]! | {user} |
| Task Edited | The hunt has changed! Task updated to "{task}" {user} | {task}, {user} |
| Task Removed | Task "{task}" has been scent-wiped from the list, {user} | {task}, {user} |
| Task Next | Paws-ome work finishing '{oldTask}'! Now tracking '{newTask}', {user}! | {oldTask}, {newTask}, {user} |
| Admin Delete Tasks | All of the user's tasks have been cleared from the forest. | none |
| Task Done | Alpha work! You finished "{task}" {user}! | {task}, {user} |
| Task Check | {user}, you're on the scent of "{task}" | {user}, {task} |
| Task Check User | {user}, {user2} is currently tracking: "{task}" | {user}, {user2}, {task} |
| No Task | Looks like you aren't tracking anything in the forest right now, {user} — start a hunt with !task [task]! | {user} |
| No Task (Other) | The scent is cold, {user} — that viewer isn't tracking a task right now. | {user} |
| Not Mod | Grrr! Permission denied, {user} — only pack leaders (mods) can do that. | {user} |
| Cleared All | The forest has been cleared of all tasks! | none |
| Cleared Done | All finished tasks have been cleared from the den! | none |
| Next No Content | Don't leave the pack hanging! Try !next [task], {user}! | {user} |
| Help | {user}, join the hunt: !task, !done, !edit, !remove, !focus, !check, !next — or !dwhelp for the full list. | {user} |
Timer bot responses
| Message | Default | Variables |
|---|---|---|
| Not Running | The timer isn't howling yet! Start it up first. | none |
| Wrong Command | My ears didn't catch that... Try !timer start, pause, resume, skip, reset, or eta. | none |
| Timer Running | The hunt is already in progress! | none |
| Command Success | Paw-fect! Done! | none |
| Cycle Wrong | That cycle count won't work — pick 1 to 99, like !timer start 4. | none |
| ETA | This phase ends in {phase} · the hunt is done in {time} | {phase}, {time} |
The bot replies to !timer commands, but does not announce phase changes on
its own. Dirework runs on Cloudflare Workers with no always-on process, so
there is nothing to fire a message when a focus block ends — the overlay is
what shows the current phase. Editable "focus started" / "break started" /
"stream starting" / "timer finished" messages used to exist here but never
sent anything, so they were removed.
Message variables reference
| Variable | Description |
|---|---|
{user} | The Twitch display name of the person who ran the command |
{user2} | The Twitch display name of the target user (e.g., !check @other) |
{task} | The task text content |
{oldTask} | The task that was just completed (used in !next) |
{newTask} | The new task now being tracked (used in !next) |
{channel} | The Twitch channel name, used as @mention to ping chat |
{phase} | Time remaining in the current phase, as a relative duration (e.g., 18m) |
{time} | Time remaining until the whole session ends, as a relative duration (e.g., 1h 55m) |