Skip to content
Academy Menu

Authoring and automating check-ins from the CLI

Create a check-in from scratch, tune its schedule and reminders, complete it headlessly from a script or agent, and route results to report channels — full CLI contract.

deep-diveDeveloperOps11 min read

A check-in you can only complete by clicking through the chat UI is a check-in an agent can’t drive. Every step of the lifecycle — creating one from scratch, tuning its schedule, answering it, editing a past response, routing results to a channel — has a headless CLI/API path, all covered here.

Creating a check-in

A check-in needs a name, at least one participant, and at least one question — skip either and create fails fast (checkin_requires_participant / questions_required respectively; an interactive TTY prompts instead of erroring).

dailybot checkin create -n "Daily Standup" \
  --user [email protected] --user "Jane Doe" --team "My Team" \
  --questions-file q.json --json

Users resolve by name, email, or UUID (email lookup needs admin/manager rights). Creating a check-in is open to any authenticated member; configuring, archiving, and editing its questions are admin/manager operations.

Scheduling

dailybot checkin config <followup_uuid> \
  --time 09:30 --days 1,2,3,4,5 --timezone America/New_York \
  --frequency weekly --report-time 10:00
Flag Values Notes
--time HH:MM Delivery time
--days 0-6 comma list 0 = Sunday; 1,2,3,4,5 = Mon–Fri
--timezone IANA name e.g. America/New_York
--frequency weekly only --frequency-advanced monthly/custom for anything else — --frequency monthly fails fast
--frequency-advanced disabled / monthly / custom Use custom with --cron "m h dom mon dow"
--start-on / --end-on YYYY-MM-DD Active window bounds
--participant-timezone / --custom-timezone flag Per-participant vs. one shared timezone
--report-time HH:MM When the aggregated report posts

Reminders

dailybot checkin config <followup_uuid> --reminders 2 --reminder-interval 30 \
  --reminder-condition smart_frequency --reminder-tone persuasive

--reminders (0–5, 0 = off), --reminder-interval (0–60 minutes between them), --reminder-condition (smart_frequency / fixed_frequency), --reminder-tone (standard / persuasive, anything else → invalid_reminder_tone).

Question authoring

Same four types and report-title rule as forms — text, multiple_choice (--options "A,B,C"), boolean, numeric — and --short-question/--ai-short-question is mandatory on add:

dailybot checkin questions add <followup_uuid> \
  --type text --question "What did you complete yesterday?" \
  --short-question "Yesterday" --required

dailybot checkin questions add <followup_uuid> \
  --type boolean --question "Any blockers?" --short-question "Blockers" --blocker

--blocker marks a question so leaving it blank blocks submission — pair it with boolean questions; answering a blocker question "None" is rejected because it isn’t a valid boolean string (use no / false / 0). Conditional jump logic (--jump-if-equals / --jump-to / --logic-file) works identically to forms, including trigger_form and trigger_checkin actions for chaining into another check-in or form based on an answer.

Completing headlessly

dailybot checkin complete <followup_uuid> \
  -a 0="Shipped the auth refactor with full test coverage" \
  -a 1="Starting the payment integration" \
  -a 2=no \
  --yes

Match the answer to the question’s own type — read it first with dailybot checkin show <followup_uuid> --json if you don’t already know it:

question_type Answer with
text Free text
boolean yes/no, true/false, or 1/0
numeric A number
multiple_choice One of the question’s own choices labels

A mismatch returns 400 without saying which question was wrong — check types first for a scripted flow. Backfill or future-date with --response-date YYYY-MM-DD (gated by the check-in’s own --allow-past/--allow-future settings — previous_responses_are_not_allowed / future_responses_are_not_allowed otherwise).

Editing and browsing history

# Override specific answers on an already-submitted response
dailybot checkin edit <followup_uuid> -a 0="Updated answer" --yes

# Every participant's responses over a range (admin/manager can filter --user)
dailybot checkin history <followup_uuid> --days 30 --user <user_uuid> --json

# Delete your own response for a day
dailybot checkin reset <followup_uuid> --yes

Check-in history is team-wide by default (unlike forms, which default to your own responses) — a member always sees only their own regardless of --user, which is admin/manager-only. --user takes a UUID only; resolve names/emails first with dailybot user list --json.

Routing results to report channels

dailybot checkin config <followup_uuid> \
  --report-channel "$STANDUP_CHANNEL_UUID" --report-channel "$LEADS_CHANNEL_UUID"

--report-channel is repeatable, max 3 (too_many_report_channels past that). On config it replaces the entire channel set — list every channel you want active, every time you change it. The aggregated report posts at --report-time if set, summarizing that day’s completions.

Smart / AI settings

dailybot checkin config <followup_uuid> --smart --intelligence --max-clarifying 2

--intelligence requires --smart; --max-clarifying > 0 requires --intelligence — both enforced server-side (intelligence_requires_smart_checkin).

Privacy

dailybot checkin config <followup_uuid> --privacy managers_and_members

Values: only_owner, owner_and_members, managers_and_members, managers_and_admins, org_admins, everyone, custom. --anonymous is irreversible--no-anonymous on an already-anonymous check-in fails with anonymous_irreversible (unlike forms, where anonymity toggles freely both ways).

Round-trip verification

After any authoring call, read the config back to confirm it landed:

dailybot checkin show <followup_uuid> --json

Cross-references

Browse the Solutions hub for the product-facing tour of automating check-ins end to end.

FAQ

What's the minimum required to create a check-in?
A name, at least one participant (--user or --team), and at least one question. Non-interactive create with no participant fails fast with checkin_requires_participant; create with no questions fails with questions_required. Creating a check-in is allowed for any authenticated member — configuring, archiving, and editing questions are admin/manager operations.
How do I complete a check-in headlessly from a script or agent?
dailybot checkin complete <followup_uuid> -a 0="answer text" -a 1=8 -a 2=no --yes, where each -a index=response pair matches the question's 0-based index and answer type (text, boolean as yes/no or true/false, numeric, or one of a multiple_choice question's own labels).
How do I route a check-in's results to a Slack or Teams channel?
--report-channel <channel-uuid>, repeatable up to 3 channels. On checkin config, --report-channel REPLACES the entire channel set, so list every channel you want active each time you set it.
Can I turn off anonymity once a check-in is anonymous?
No — --anonymous on a check-in is irreversible; --no-anonymous on an already-anonymous check-in fails with anonymous_irreversible. This differs from forms, where --anonymous / --no-anonymous can be freely toggled in both directions.
How do I back-date or future-date a check-in response?
dailybot checkin complete accepts --response-date YYYY-MM-DD, and edit / reset / history accept --date (or --from/--to). The check-in's own settings gate this: previous_responses_are_not_allowed or future_responses_are_not_allowed if backfill or future-dating is disabled, followup_not_allow_responses_before_trigger_time if it's too early.