Dutyroll docs: commands, setup and FAQ
Everything Dutyroll can do today, in one page: the /dutyroll commands, the setup form, how the schedule,
Skip and Swap with next work, the Slack permissions it asks for, the plans, and fixes for the usual problems.
Where something does not exist yet, this page says so.
Add to Slack Free for one rotation. Pro is $9/month per workspace.
Contents: Commands · Set up a rotation · Schedule · Skip, Swap, Post now, Edit, Pause, Mark away · Home tab · Not there yet · Permissions · Free and Pro · FAQ
Commands
| Command | What it does | Who sees the answer |
|---|---|---|
/dutyroll new | Opens the New rotation form. Run it in the channel where the hand-over should appear and that channel is filled in for you. | Only you (the form); the announcement goes to the chosen channel |
/dutyroll who | Lists the rotations you set up or are in, plus those that post in the channel where you type it: channel, who is on duty now and who is next. | Only you |
/dutyroll away @dana 12 Nov 14 Nov | Marks a person away for those days (both count; one date = one day; me works; dates like 12 Nov, Nov 12 or 2026-11-12, in your Slack time zone). A hand-over on those days goes to the next person who is not away. /dutyroll away list shows the saved away dates; remove one in the Home tab. | Only you |
/dutyroll help | Shows the command list. Any other text after /dutyroll (or none) shows the same help. | Only you |
/dutyroll handle @oncall [rotation] | Coming, not switched on yet. Keeps a Slack user group (such as @oncall) holding whoever is on duty, updated at every hand-over, Skip and Swap; /dutyroll handle off [rotation] stops it. It needs two more Slack permissions (user groups read/write), and Slack lets user groups be edited only on paid Slack plans. | Only you |
To edit, pause or resume a rotation, use its buttons in the Home tab; see the buttons.
Set up a rotation
- Add Dutyroll to Slack and press Allow. Your workspace admin may have to approve apps first.
- In the channel where the hand-over should appear, type
/dutyroll new(or press New rotation in Dutyroll's Home tab). - Fill in the form and press Create:
| Field | What to enter |
|---|---|
| Name | The duty, up to 60 characters: On-call, Standup host, Code review. |
| People, in order | Pick the people in the order they take turns (1 to 100 people). The first person you pick is on duty first. |
| Post in channel | Public or private channel for the posts. Private channel: run /invite @Dutyroll there first. |
| Hand over | Every week, Every weekday (Mon-Fri), Every 2 weeks or Every month; see the cadence table. |
| Weekly or every 2 weeks: on | The day of the hand-over (default Monday). Every 2 weeks starts on the first such day after you press Create, then every 14 days. For monthly, it is the day used by "The last <day>". Ignored for every weekday. |
| Monthly: on | Day 1 to 31 of the month (29-31 fall on the last day of shorter months), or The last <day>: the last Friday, say, using the day picked above. Ignored for the other cadences. |
| At | The time of the hand-over (default 09:00), in the time zone shown under the field: your own Slack time zone. |
| Extra line (optional) | One line of your own, up to 300 characters, shown under who is on duty in every post: Runbook: https://wiki.example.com/oncall or Check the pager before standup. Links work: paste a URL, or write <https://example.com|Runbook> for a named link. @here, @channel and @everyone are removed, so the post never pings the whole channel. Leave it empty for no line; clear it in Edit to remove it. |
When you press Create, Dutyroll posts an announcement in the channel: the rotation is set up, who is first and from when. Nobody is "on duty" until the first scheduled hand-over, which names the first person in the list.
How the schedule works
- Every week: one post on the chosen day at the chosen time. Every weekday: one post Monday to Friday at the chosen time, none at weekends. Every 2 weeks and Every month: see the table.
- The time zone is the Slack time zone of the person who created the rotation, read when they opened the form, and it stays fixed. Daylight saving time is handled: 09:00 stays 09:00 local time.
- Each hand-over after the first moves the duty to the next person in the list; after the last person it wraps back to the first.
- Every hand-over post says who is on duty and who is next, with Skip and Swap with next buttons (when the rotation has 2 or more people).
- Away dates: if the person whose turn it is is marked away on the hand-over day (that day in the rotation's time zone), the turn goes to the next person who is not away and the post says why, e.g. "@dana is away until 12 Nov, so it is @sam". They stay in the list. If everyone is away, the usual person is named with a note. Away dates end by themselves.
- The Home tab shows each rotation's schedule, time zone and the date of its next post.
| Hand over | When it posts | The post says | Example |
|---|---|---|---|
| Every week | Once a week, on the chosen day | This week: @dana | On-call, Mondays 09:00 |
| Every weekday | Monday to Friday, none at weekends | Today: @dana | Standup host, 09:50 |
| Every 2 weeks | On the chosen day every 14 days, counted from the first hand-over (the first such day after you press Create) | These 2 weeks: @dana | Sprint release captain, every other Monday |
| Every month | On a day of the month (1-31; the 29th-31st move to the last day of shorter months, so "31" means the month's last day) or on the last given weekday of the month (the last Friday, say) | This month: @dana | Dependency updates on the 1st; retro host on the last Friday |
Skip, Swap and away dates change who is on duty, never the dates: an every-2-weeks rotation stays on its 14-day rhythm. Editing only the time keeps that rhythm; picking a new day starts a new one from the first such day after you save.
Skip, Swap with next, Post now, Edit, Pause, Mark away
| Button | Where | What happens |
|---|---|---|
| Skip | On every hand-over post | The next person is on duty now. The skipped person stays in the list and comes up again in normal order. The post updates in place and says who skipped. |
| Swap with next | On every hand-over post | The current and the next person trade places in the order: the next person takes this turn, the current person takes the following one. The post updates in place. |
| Post now | Home tab | Posts who is on duty right now in the rotation's channel. It repeats the current person and never moves the rotation on. |
| Edit | Home tab | Opens the rotation's form filled in: name, people in order, channel, how often (weekly, every weekday, every 2 weeks or monthly), day and time (in the rotation's own time zone). Press Save. Whoever is on duty stays on duty if they are still in the list; if you removed them, the rotation starts again with the first person, whose turn begins at the next hand-over. Dutyroll posts one line in the channel saying who changed what. |
| Pause / Resume | Home tab | Pause stops the hand-over posts and keeps the person on duty where they are; the Home tab and /dutyroll who mark it paused. Resume carries on from the next scheduled time; missed hand-overs are not posted afterwards. Each press posts one line in the channel. |
| Delete | Home tab | Deletes the rotation after a confirm. This cannot be undone. |
| Mark away | Home tab (Away dates) | Pick the person (you or anyone in your rotations), the first and the last day away, and press Save. It applies to every rotation they are in: a hand-over on those days skips them and says so in the post. Free and Pro alike. |
| Remove | Home tab, next to each away date | Deletes that away date at once (someone came back early). Past away dates disappear by themselves. |
Anyone who can see the post can press Skip or Swap; anyone in the workspace can open the Home tab.
The Home tab
Open Dutyroll in Slack's sidebar (Apps) and choose Home. It shows a New rotation button, your plan (Free or Pro, with Upgrade to Pro or Manage billing), and each rotation you set up or are in, with its channel, who is on duty and next, its schedule and the next post time (or paused), with Post now, Edit, Pause (or Resume) and Delete. Below them, Away dates lists the upcoming away dates of the people in your rotations, each with Remove, and a Mark away button. With no rotations yet, it shows the 3 setup steps. Rotations you have no part in do not show, so a rotation in a private channel never reveals its name or people to anyone outside it. After a couple of scheduled posts it asks once, "How is Dutyroll working for you?"; you can answer there or press No thanks, and it does not ask again.
Not there yet (honestly)
- Absences from a calendar: away dates are entered in Dutyroll (Mark away or
/dutyroll away); no sync with Google Calendar, Outlook or HR tools, and no public-holiday calendar. - @oncall user group: built, waiting for the two extra Slack permissions (see
/dutyroll handleabove). - Paging: Dutyroll never calls, texts or escalates; it posts a message in a channel.
- Slack Marketplace: not listed yet; you install Dutyroll from this site.
Missing something you need? Email ops@tuper.app: requests decide what gets built next.
Slack permissions and why
| Permission | Why Dutyroll needs it |
|---|---|
commands | Adds the /dutyroll command. |
chat:write | Posts the announcement and hand-overs, updates a post after Skip or Swap, and sends the one welcome message to the person who installed it. |
chat:write.public | Posts in public channels without being invited first. Private channels still need /invite @Dutyroll. |
users:read | Reads your Slack time zone when you open the New rotation form, so the hand-over runs at your local time (and for away dates, so "12 Nov" means your 12 Nov); for /dutyroll away @name, finds which person in your rotations you meant. |
usergroups:read, usergroups:write | Coming, only for the @oncall user group feature; not asked for today. |
Dutyroll never reads messages, files or channel history. What it stores is in the privacy policy; uninstalling deletes your rotations and the Slack token.
Free and Pro
| Free | Pro | |
|---|---|---|
| Price | $0 | $9/month per workspace, never per user |
| Rotations | 1 | Unlimited |
| People per rotation | Up to 100 | Up to 100 |
| Commands, schedule, Skip, Swap, away dates, Home tab | All | All |
14-day Pro trial, no card. The first time a workspace installs Dutyroll it gets Pro for 14 days; the Home tab shows Pro trial: N days left and an Upgrade button. When the trial ends the workspace is on Free: the oldest rotation keeps running, the others are paused (kept, not deleted), each paused rotation's channel gets one message saying so, and the Home tab says why. Subscribing during the trial ends it and Pro simply continues. One trial per workspace: uninstalling and reinstalling does not start another.
On Free, creating a second rotation shows an Upgrade to Pro form instead. Upgrade from the Home tab; payment is by Polar (polar.sh), our merchant of record, which sends the receipt. Cancel any time with Manage billing. If Pro ends, the oldest rotation keeps running and the others are paused (kept, not deleted, marked paused in the Home tab) until you subscribe again. Full comparison with other apps: rotation apps compared.
FAQ
Dutyroll says it can't post in my channel
The channel is private, or Dutyroll was removed from it. Run /invite @Dutyroll in that channel, then press Post now in the Home tab
to check. Dutyroll sends you a direct message when a post from the form or Post now fails, with this same fix.
The hand-over did not post at the time I expected
- Time zone: the time is in the time zone of whoever created the rotation. The Home tab shows it next to the schedule, e.g. "every Monday at 09:00 (Europe/Berlin)". If it is wrong, set your Slack time zone, then delete and re-create the rotation (Edit keeps the rotation's time zone).
- Day: a weekly rotation posts on its one day only; every weekday skips Saturday and Sunday; every 2 weeks posts every other week (the Home tab shows the next date); monthly on the 29th-31st posts on the last day of shorter months.
- Right after creating: the post you saw was the announcement. The first hand-over comes at the next scheduled time (the Home tab shows the date).
- Paused: someone pressed Pause (the Home tab shows paused and a Resume button), or on the Free plan only the oldest rotation posts and the others are marked paused.
- Private channel: see the question above. A missed scheduled post is not repeated; the rotation still moves on to the next person at that time.
Can a rotation change every two weeks or once a month?
Yes. In the form (or Edit), set Hand over to Every 2 weeks and pick the day, or to Every month and pick a day of the month or "The last <day>" (for example the last Friday). The post then says "These 2 weeks" or "This month". Every 2 weeks counts 14 days from the first hand-over, so Skip and Swap never shift it. Free and Pro alike. For a shift length other than a day, a week, 2 weeks or a month, there is no option yet; tell us at ops@tuper.app.
Can I add a runbook link to the post?
Yes. Fill in Extra line in the form (or press Edit in the Home tab): up to 300 characters, for example Runbook: https://wiki.example.com/oncall
or <https://wiki.example.com/oncall|Runbook> · check the pager first. It appears under who is on duty in every hand-over, in Post now
and after Skip or Swap, and the Home tab shows it on the rotation. @here, @channel and @everyone are taken out, so the line never pings the whole channel.
Empty the field and Save to remove it. Free and Pro alike.
Who can create, change or delete rotations?
Anyone in the workspace who can use the app: they can create a rotation, press Post now, Edit, Pause, Resume or Delete in the Home tab, and press Skip or Swap on a post. There are no admin-only settings yet. If that is a problem for your team, tell us at ops@tuper.app.
How do I add or remove a person?
Press Edit on the rotation in the Home tab, add or remove people (or change their order) and press Save. The person on duty stays on duty unless you removed them; then the rotation starts again with the first person.
How do I mark someone away or on holiday?
Press Mark away in the Home tab, pick the person and the first and last day, and press Save; or type /dutyroll away @dana 12 Nov 14 Nov.
On those days the hand-over skips them, names the next person who is not away and says why ("@dana is away until 14 Nov, so it is @sam"). They stay in the rotation,
and the rotation carries on in its normal order from the person who stood in. Away dates end by themselves; press Remove to end one early. It is free on both plans.
How do I pause a rotation for a holiday or a quiet week?
Press Pause on the rotation in the Home tab. Nothing is posted and nobody moves on until someone presses Resume; then the next hand-over comes at its normal time. To skip just one person, press Skip on the post instead.
Does someone get notified?
The hand-over post mentions the person on duty and the next one, so Slack notifies them as for any mention.
What happens when I uninstall?
Slack tells Dutyroll and we delete the installation, the token, every rotation and the post log for that workspace at once.
Who answers support?
Email support@tuper.app or ops@tuper.app. Tuper is run by an AI agent with a human owner; the agent answers and the owner sees what matters.
Free tool: Rotation schedule generator: type the names, pick weekly, weekdays, every 2 weeks or monthly, and get the schedule as a table, Slack text, a calendar file (.ics) or CSV.
More guides
- On-call rotation in Slack
- Standup host rotation in Slack
- Support and bug triage rotation in Slack
- Slack rotation app pricing: per workspace vs per user
- Rotating a name with Slack Workflow Builder (and what to use instead)
- Round robin in Slack: a scheduled round-robin app
- Slack rotation apps compared: Pagerly, Rotation App, RosterBird, Dutyroll
- A duty roster in Slack