Skip to content

Commands ​

Configure AsyncUp by @mentioning it in the space where reports post. When a space has several standups, prefix commands with the standup id, e.g. @AsyncUp #2 time 09:30 — status lists all standups with their ids.

help shows the essentials; help all lists every command.

Configuration ​

The person who runs setup becomes the standup's first admin (setup itself is open to everyone in the space — there is nobody to gate it before the first standup exists). Changing a standup needs a permission on it, which its admins (Managers) hold: standups.configure for the schedule, questions and run now, people.manage for the roster, admins and roles, schedules.manage for people's days, and standups.archive to archive (Roles and permissions). status, trends, blockers, blocker, poll, polls, export and help are open to everyone in the space. status without a #id prefix reports every standup in the space.

CommandEffect
setup [name]Create a standup reporting to this space (creator becomes admin; names must be unique across the workspace)
run nowOpen today's run immediately and prompt everyone — see the whole flow without waiting for the schedule. Refused once today's deadline has passed, since the run would close at once; a scheduled run never opens after its deadline either
archiveRetire the standup: prompts and reports stop, history stays
add @user…Add participants (mandatory by default)
remove @user…Remove participants
mandatory @user… / optional @user…Count toward the wrap-up report, or not
vacation @user… / back @user…Mark people away — no prompts, not counted as missing
off @user <date|range> [reason] / working @user <date>Mark someone away or working on given days; off @user cancel <date> undoes (Personal schedules)
days @user mon-thu|adhoc|resetSomeone's days on this standup
admin @user… / unadmin @user…Manage the standup's admins, who are its Managers
role @user <role> / role @user remove <role>Grant or revoke a role on this standup, say Viewer for a stakeholder. Roles follow email, so role pat@example.com Viewer works for someone not yet in Chat. You can only grant a role whose permissions you hold here
rolesWho holds a role on this standup, and the roles you can grant
time HH:MMPrompt time — interpreted in each participant's own timezone (participants set theirs by DMing timezone <IANA>; default is the standup timezone)
deadline HH:MMWhen the run closes and the wrap-up posts — standup timezone
remind <minutes>Nudge non-submitters this many minutes before the deadline (0 disables)
timezone <IANA>Standup timezone, e.g. Asia/Kolkata
days mon,tue,…Which days the standup runs (default mon–fri)
questionsShow the current question list
questions set Q1 | Q2 | …Replace the questions (1–10, pipe-separated)
questions resetBack to the default three questions
mood on|off|anon (also anonymous)Mood dropdown, with an optional comment. Moods are seen in the web app only, never in the space; anon hides who felt what there too
escalate @userDM this person when blockers stay open too long
escalate days N / escalate offEscalation threshold (default 2 days) / disable
digest on|offWeekly digest posted after the last run of the week

Insights (everyone) ​

CommandEffect
statusConfiguration + today's progress (submitted / pending / away)
trendsLast 4 weeks: participation % (mood stays out of the space)
blockersOpen blockers with ids, age, who's tagged, and update counts
exportHow to download a CSV of submissions

Working a blocker together (everyone) ​

Blockers get an id (blockers shows them). When your answer opens a blocker, the bot DMs you its card with 👥 Tag people: pick anyone in your Workspace who can help. Tagged people get the same card, so they can pull others in too. From a space, tag by command:

CommandEffect
blocker 12 tag @Asha @RohitTagged people get an interactive DM card (✋ Acknowledge · 👥 Tag people · 📝 Add update · ✅ Resolve)
blocker 12 update <text>Post an update — DMed to the reporter and everyone tagged, and added to the blocker's thread in the space
blocker 12 resolveClose it (reporter, tagged people, or admins)

How collaboration changes the lifecycle:

  • Tagging makes it explicit-resolve. Untagged blockers still auto-resolve when the reporter's next standup is blocker-free; once a blocker is tagged or has updates, only an explicit resolve closes it — someone's clean standup can't silently end a conversation others are having.
  • Acknowledge stops the nudges. Tagged people get one DM per day (at run close) until they hit ✋ Acknowledge; posting an update acknowledges implicitly. The reporter is notified of every ack.
  • Everything is tracked. Updates and resolution land in a per-blocker thread in the team space, and open blockers keep appearing in wrap-ups, digests, and escalation pings until resolved.

Polls (everyone) ​

Quick team decisions without a meeting — a card in the space, one tap to vote:

CommandEffect
poll Question? | Option A | Option BPost a poll card (2–6 options). Votes update the card live; voting again changes your vote
pollsList open polls with vote counts, and open polls with questions with how many have answered
poll <id> resultsCurrent tallies with voter names
poll <id> closeClose it and post final results (creator or admin)

DM self-service ​

Anyone can DM the bot directly:

MessageEffect
vacation (or ooo)Pause prompts for yourself across all your standups
off <date|range> [reason] / working <date>A day off (e.g. off tomorrow comp off) or an extra working day
off list / off cancel <date>Upcoming entries / withdraw one
days [#standup] mon-thu|adhoc|resetYour days on one standup; on several, the bot asks which and gives the number (Personal schedules)
backResume prompts
unskipTake back today's skip while the run is open — or press ↩️ Undo skip on the prompt card
timezone <IANA>Get prompts at the standup's prompt time in your timezone (all your standups)
timezone resetFollow each standup's timezone again (timezone alone shows the current setting)

Behavior notes ​

  • Editing: re-open Fill standup before the deadline to edit — the posted card updates in place and is marked edited.
  • Skip today: the prompt card has a 🏖️ Skip today button. It asks for a one-line reason, posts it in the day's thread, and lists you as away, not missing. Undo skip removes that thread reply.
  • Every field is required: each question and the mood is marked (required). The mood comment, Want to say why?, is the one optional field. Submitting with one empty brings the form back with a red line naming what's missing and your answers kept; nothing posts until all are filled. (Google Chat can't grey out Submit for apps yet.) Answer the blockers question with "none" when there are none. The skip reason works the same way.
  • Formatting: *bold*, _italic_, ~strike~, __underline__, `code` and - lists show as formatting on the posted card, in blocker cards and in the web app. Exports, webhooks, the API and MCP keep the text exactly as typed. Plain-text messages such as nudges and the digest show Chat's own syntax, without underline.
  • Pre-fill: the "yesterday" answer is pre-filled from your previous "today" answer.
  • Late submissions after the deadline still post, flagged late, until midnight in the standup's timezone; the wrap-up isn't recalculated.
  • Editing after the deadline needs a manager's approval: Ask to edit on the prompt card sends the standup's managers a card. Once approved, answers can change until midnight, and the posted card names who approved it.
  • Untagged blockers auto-resolve when the same person submits a blocker-free standup on a later day; tagged ones need an explicit blocker <id> resolve. With escalate @user configured, the contact gets one DM at run close listing every blocker that newly crossed the threshold — each blocker is escalated once.
  • Calendar OOO (when enabled): participants with an Out of office event in Google Calendar are automatically marked away for that day's run. Emails come from the Directory when the service account has its admin role (works for everyone immediately), otherwise they are learned from Chat interactions — kicking in after a person has used the bot at least once.
  • Roster snapshots: the day's roster is frozen when the run opens, so add and vacation apply from the next run. remove also takes the person off a run that is still open, unless they have already answered.
  • Custom questions apply from the next run. Questions containing the word "blocker" get blocker tracking; questions containing "yesterday"/"today" get pre-fill behavior.

The prompt card ​

The DM card that asks for today's standup keeps up with you: once you submit it shows when (with Edit answers until the deadline), and once you skip it shows your reason with ↩️ Undo skip. At the deadline it offers Ask to edit, then shows whether your request is waiting, approved (with Edit answers until midnight), declined or lapsed. Reminders and nudges update the same way.

On a standup whose roster follows a Google Group, add keeps working: people you add stay on. remove keeps a group member off at later syncs, the same as unticking them in the web app's People grid (group rosters).

Released under the MIT License.