Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5b4e0b7
feat(client): add report-channel + forms authoring methods - Task 1 o…
xergioalex Jul 4, 2026
8aa8b75
feat(client): add check-ins authoring methods - Task 2 of PLAN_agent_…
xergioalex Jul 4, 2026
e7b2f18
feat(cli): add forms/check-ins authoring helpers and display - Task 3…
xergioalex Jul 4, 2026
d0628a7
feat(cli): add channels list command - Task 4 of PLAN_agent_forms_che…
xergioalex Jul 4, 2026
aaf4874
feat(cli): add form authoring commands - Task 5 of PLAN_agent_forms_c…
xergioalex Jul 4, 2026
5464066
feat(cli): add check-in authoring commands - Task 6 of PLAN_agent_for…
xergioalex Jul 4, 2026
db6dc41
feat(cli): add interactive question builder - Task 7 of PLAN_agent_fo…
xergioalex Jul 4, 2026
6c7f261
fix(cli): harden authoring validation and error mapping - Task 8 of P…
xergioalex Jul 4, 2026
7bb74cf
test(cli): add authoring lifecycle integration tests - Task 9 of PLAN…
xergioalex Jul 4, 2026
ac03d08
docs: document forms/check-ins authoring commands - Task 10 of PLAN_a…
xergioalex Jul 4, 2026
c870893
docs(skill): sync vendored dailybot skill with authoring - Task 11 of…
xergioalex Jul 4, 2026
b734d22
chore(security): security review of authoring feature - Task 12 of PL…
xergioalex Jul 4, 2026
128a821
refactor(cli): attach report_channels inline on form create
xergioalex Jul 4, 2026
e8a13bb
refactor(display): drop question-shape fallbacks now the API contract…
xergioalex Jul 4, 2026
13d4a15
feat(release): support minimum-version floor in installers
xergioalex Jul 4, 2026
235ad93
feat(forms): align authoring surface to the finalized canonical contract
xergioalex Jul 4, 2026
0b0d20f
fix(client): unwrap {"channels": [...]} from the report-channels endp…
xergioalex Jul 4, 2026
3a76674
feat(display): render report-channel names + map report_channel_not_f…
xergioalex Jul 5, 2026
a7ca34f
feat(checkin): require at least one participant; edit participants vi…
xergioalex Jul 5, 2026
a8eb201
feat(checkin): map server-side checkin_requires_participant error
xergioalex Jul 5, 2026
68f7337
feat(checkin): full check-in configuration via create + config flags
xergioalex Jul 5, 2026
648311c
feat(checkin): expose smart/AI, reminder tone & advanced cron config …
xergioalex Jul 5, 2026
c1d24ff
fix(checkin): frequency_type is weekly-only; monthly/custom via frequ…
xergioalex Jul 5, 2026
c1d22dd
feat(forms,checkin): per-question extras (short title, variations, lo…
xergioalex Jul 5, 2026
1e95efe
feat(forms,checkin): finalize question logic — required else, forward…
xergioalex Jul 5, 2026
bdc0a7e
fix(forms,checkin): correct numeric logic operator spelling (_than su…
xergioalex Jul 5, 2026
423668b
fix(checkin): friendly error for an unresolvable --user/--team partic…
xergioalex Jul 5, 2026
db869b1
feat(forms,checkin): require an explicit short_question unless --ai-s…
xergioalex Jul 5, 2026
5bffa88
feat(forms,checkin): forward generate_short_question opt-in + map sho…
xergioalex Jul 6, 2026
cf2f4d7
feat(forms): full form config authoring — workflow, permissions, appr…
xergioalex Jul 6, 2026
218b4a6
fix(client): question reorder sent the wrong field name (silent no-op)
xergioalex Jul 6, 2026
7c1ce87
feat(forms,checkin): map reorder validation codes + explicit full-rep…
xergioalex Jul 6, 2026
e23b06c
feat(forms,checkin): surface public_url + enforce the 3 report-channe…
xergioalex Jul 6, 2026
f894dd9
feat(forms,checkin): resolve users by email + --no-approvers to clear…
xergioalex Jul 6, 2026
3f9a2cd
feat(client): request include_email so email resolution works (admin/…
xergioalex Jul 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .agents/docs/skills_agents_catalog.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ The full pack lives under [`.agents/skills/dailybot/`](../skills/dailybot/) (rou
| `dailybot-messages` | [`skills/dailybot/messages/SKILL.md`](../skills/dailybot/messages/SKILL.md) | Polling for instructions sent to this agent by teammates |
| `dailybot-health` | [`skills/dailybot/health/SKILL.md`](../skills/dailybot/health/SKILL.md) | Announcing online/offline status on long sessions |
| `dailybot-email` | [`skills/dailybot/email/SKILL.md`](../skills/dailybot/email/SKILL.md) | Sending email on the agent's behalf (with mandatory pre-send safety checks) |
| `dailybot-checkin` | [`skills/dailybot/checkin/SKILL.md`](../skills/dailybot/checkin/SKILL.md) | Listing and completing pending check-ins (user-scoped) |
| `dailybot-checkin` | [`skills/dailybot/checkin/SKILL.md`](../skills/dailybot/checkin/SKILL.md) | Listing/completing check-ins + authoring (create/config/archive + questions, CLI ≥ 1.17.0) |
| `dailybot-kudos` | [`skills/dailybot/kudos/SKILL.md`](../skills/dailybot/kudos/SKILL.md) | Giving kudos to a teammate or a whole team |
| `dailybot-teams` | [`skills/dailybot/teams/SKILL.md`](../skills/dailybot/teams/SKILL.md) | Listing / resolving teams (the resolver `dailybot-kudos` and `dailybot-chat` delegate to) |
| `dailybot-forms` | [`skills/dailybot/forms/SKILL.md`](../skills/dailybot/forms/SKILL.md) | Listing, submitting, updating, or transitioning form responses |
| `dailybot-forms` | [`skills/dailybot/forms/SKILL.md`](../skills/dailybot/forms/SKILL.md) | Listing/submitting/updating/transitioning responses + authoring (create/config/archive + questions, CLI ≥ 1.17.0) |
| `dailybot-channels` | [`skills/dailybot/channels/SKILL.md`](../skills/dailybot/channels/SKILL.md) | Discovering report-channel UUIDs for `--report-channel` (CLI ≥ 1.17.0) |
| `dailybot-chat` | [`skills/dailybot/chat/SKILL.md`](../skills/dailybot/chat/SKILL.md) | Sending / editing Dailybot bot messages on Slack / Teams / Discord / Google Chat (DMs, channels, teams; report-style threads; in-place edits). Requires `dailybot-cli >= 1.13.0` |

### Deep Work Plan skill pack (vendored from [`DailybotHQ/deepworkplan-skill`](https://github.com/DailybotHQ/deepworkplan-skill))
Expand Down Expand Up @@ -81,7 +82,9 @@ Persona definitions. Use these as the system prompt / role when spawning a sub-a
| Send a Slack/Teams/Discord/Google Chat message (DM, channel, team; report-style threads) | `dailybot-chat` | (any) |
| Recognize a teammate or a whole team | `dailybot-kudos` | (any) |
| Complete a pending check-in / standup | `dailybot-checkin` | (any) |
| Create / configure a check-in or form (author) | `dailybot-checkin` / `dailybot-forms` | (any) |
| Submit / transition / update a form response | `dailybot-forms` | (any) |
| Find a report-channel UUID for authoring | `dailybot-channels` | (any) |

## Conventions

Expand Down
21 changes: 17 additions & 4 deletions .agents/skills/dailybot/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ Ten coordinated capabilities, with smart routing between them:
| **Email** | `dailybot-email` | Explicit user request, with mandatory pre-send safety checks |
| **Chat** | `dailybot-chat` | Developer wants to send / edit a bot message on Slack, Teams, Discord, or Google Chat — to a channel, DMs, or whole team. Supports report-style threads (headline + replies in one call) and editing the parent or any reply afterward |
| **Health & status** | `dailybot-health` | Long-running sessions; periodic heartbeats |
| **Check-ins** | `dailybot-checkin` | Full check-in lifecycle: list/status, complete, inspect questions, history, edit, reset, backfill/future-date |
| **Check-ins** | `dailybot-checkin` | Full check-in lifecycle: list/status, complete, inspect questions, history, edit, reset, backfill/future-date — plus **authoring** (create/config/archive + questions) on CLI ≥ 1.17.0 |
| **Kudos** | `dailybot-kudos` | Developer wants to recognize a teammate or a whole team's contribution |
| **Teams** | `dailybot-teams` | List teams, inspect members, or resolve a team name → UUID (used as a resolver by other skills) |
| **Forms** | `dailybot-forms` | Developer wants to list, submit, update, or transition forms — including workflow-state forms with audience permissions |
| **Forms** | `dailybot-forms` | Developer wants to list, submit, update, or transition forms — including workflow-state forms with audience permissions — plus **authoring** (create/config/archive + questions) on CLI ≥ 1.17.0 |
| **Report channels** | `dailybot-channels` | Discover report-channel UUIDs to attach to forms/check-ins with `--report-channel` (CLI ≥ 1.17.0) |

## Install

Expand Down Expand Up @@ -90,6 +91,17 @@ fallback). Full guide: [`docs/INSTALLATION.md`](https://github.com/DailybotHQ/ag
> status / show / history / edit / reset` plus backfill/future-dating — all
> headless with `--json`. See [`checkin/SKILL.md`](checkin/SKILL.md) § "The full
> check-in lifecycle". Below 1.15.0 only `checkin list` + `complete` exist.
>
> **`1.17.0` floor for forms & check-ins *authoring*** (paired with the matching
> API server rollout): `dailybot channels list`, `form create / edit / archive`,
> the `form questions` subgroup, extended `form responses` (`--all` / `--user` /
> `--from` / `--to`), owner/admin editing of another user's response, and
> `checkin create / config / archive` + the `checkin questions` subgroup all
> first ship in 1.17.0. This is what lets an agent **author and configure** forms
> and check-ins (not just fill them in), role-permission-gated server-side. Below
> 1.17.0 only the fill-in commands exist. The authoring sections of
> [`forms/SKILL.md`](forms/SKILL.md) and [`checkin/SKILL.md`](checkin/SKILL.md),
> and the [`channels/SKILL.md`](channels/SKILL.md) sub-skill, require this minimum.

### Why this minimum

Expand Down Expand Up @@ -193,10 +205,11 @@ the full step-by-step workflow.
| "check messages", "do I have messages?", "what should I work on?", "any instructions?" | **Messages** → read [`messages/SKILL.md`](messages/SKILL.md) |
| "email this to Alice", "send an email", "send a summary to the team" | **Email** → read [`email/SKILL.md`](email/SKILL.md) |
| "go online", "announce status", "health check" | **Health** → read [`health/SKILL.md`](health/SKILL.md) |
| "complete my check-in", "fill in my standup", "check-in status", "what does my standup ask?", "check-in history", "edit / reset my check-in", "submit my standup for yesterday" | **Checkin** → read [`checkin/SKILL.md`](checkin/SKILL.md) |
| "complete my check-in", "fill in my standup", "check-in status", "what does my standup ask?", "check-in history", "edit / reset my check-in", "submit my standup for yesterday", "create a standup", "add a question to the check-in", "change the standup schedule" | **Checkin** → read [`checkin/SKILL.md`](checkin/SKILL.md) |
| "give kudos to Jane", "recognize Alice", "kudos al equipo Engineering", "felicita al team de QA" | **Kudos** → read [`kudos/SKILL.md`](kudos/SKILL.md) |
| "list my teams", "who's in QA?", "resolve the Engineering team", or another skill needs a team UUID | **Teams** → read [`teams/SKILL.md`](teams/SKILL.md) |
| "list my forms", "submit the retro form", "continue my release-form draft", "transition the release to released", "show me the last form response" | **Forms** → read [`forms/SKILL.md`](forms/SKILL.md) |
| "list my forms", "submit the retro form", "continue my release-form draft", "transition the release to released", "show me the last form response", "create a form", "add / reorder questions", "archive the form", "read everyone's responses" | **Forms** → read [`forms/SKILL.md`](forms/SKILL.md) |
| "which channels can Dailybot post to?", "list report channels", "I need a channel UUID for the form" | **Channels** → read [`channels/SKILL.md`](channels/SKILL.md) |
| "send a Slack message", "DM Sergio in chat", "post the deploy report to #releases (with a thread)", "edit that chat message I just sent", "ping the Engineering team in chat" | **Chat** → read [`chat/SKILL.md`](chat/SKILL.md) |

### Auto-activation (no explicit request)
Expand Down
75 changes: 75 additions & 0 deletions .agents/skills/dailybot/channels/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
name: dailybot-channels
description: Discover the report channels (Slack/Teams/Discord/Google Chat) available to you via Dailybot, so their UUIDs can be attached to forms and check-ins with --report-channel. Use when the developer needs a channel UUID for form/check-in authoring.
version: "1.0.0"
documentation_url: https://api.dailybot.com/skill.md
user-invocable: true
metadata: {"openclaw":{"emoji":"📣","homepage":"https://dailybot.com","requires":{"anyBins":["dailybot","curl"]},"primaryEnv":"DAILYBOT_API_KEY","install":[{"id":"cli-install-script","kind":"download","url":"https://cli.dailybot.com/install.sh","label":"Install Dailybot CLI (official script — preferred on Linux/macOS)"},{"id":"pip","kind":"pip","package":"dailybot-cli","bins":["dailybot"],"label":"Install Dailybot CLI via pip (fallback if binary fails)"}]}}
allowed-tools: Bash, Read, Grep, Glob
---

# Dailybot Report Channels

> **Requires `dailybot-cli >= 1.17.0`.** The `dailybot channels list` command first
> ships in 1.17.0, alongside forms & check-ins authoring. If `dailybot --version`
> reports below 1.17.0, ask the developer to run `dailybot upgrade`. See
> [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version).

Report channels are the Slack / Microsoft Teams / Discord / Google Chat
destinations where Dailybot posts form and check-in reports. This sub-skill lists
the channels available to you so their UUIDs can be attached to a form or check-in
with `--report-channel` during authoring.

## Auth model — API key or login

Works under a login session (Bearer) **or** an org API key (`DAILYBOT_API_KEY`).
Visibility is role-scoped server-side; the CLI never client-filters.

## When to Use

- The developer is **authoring** a form or check-in (see
[`../forms/SKILL.md`](../forms/SKILL.md) § Authoring and
[`../checkin/SKILL.md`](../checkin/SKILL.md) § Authoring) and needs a channel
UUID for `--report-channel`.
- The developer asks "which channels can Dailybot post to?".

Do **not** use this to *send* a message to a channel — that's `dailybot-chat`.

## Step 1 — List channels

```bash
# Human-readable table
dailybot channels list

# Machine-readable (recommended for agents)
dailybot channels list --json
```

JSON shape:

```json
[
{"uuid": "abc123-def456", "name": "#engineering", "platform": "slack", "channel_id": "C0123ABCDEF"}
]
```

## Step 2 — Use a channel UUID in authoring

```bash
dailybot form create -n "Sprint Retro" --report-channel abc123-def456
dailybot checkin config <followup_uuid> --report-channel abc123-def456
```

`--report-channel` is repeatable to attach multiple channels.

## Non-Blocking Rule

If the CLI is unavailable or unauthenticated, surface the issue once and continue;
never block work on channel discovery. The HTTP fallback is
`GET /v1/report-channels/` (see [`../shared/http-fallback.md`](../shared/http-fallback.md)).

## Additional Resources

- [`../forms/SKILL.md`](../forms/SKILL.md) — forms authoring
- [`../checkin/SKILL.md`](../checkin/SKILL.md) — check-in authoring
- [`../SKILL.md`](../SKILL.md) — router + version floors
86 changes: 86 additions & 0 deletions .agents/skills/dailybot/checkin/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,92 @@ prompts — handy for humans; agents should use the headless commands above.

---

## Step 3.6 — Authoring check-ins (`dailybot-cli >= 1.17.0`)

Beyond completing check-ins, you can **create and configure** them. Authoring is
**role-gated on the server** (admins/managers) — the CLI validates shape only and
surfaces the server's `403`; it never elevates. Works under a login session **or**
an API key.

```bash
# Create a check-in with a schedule, participants, and questions
dailybot checkin create -n "Daily Standup" --time 09:00 --days 1,2,3,4,5 \
--timezone America/New_York --questions-file questions.json
dailybot checkin create -n "Daily Standup" --user "Jane Doe" --team "Engineering"
dailybot checkin create -n "Daily Standup" --interactive # guided question builder

# Edit config / participants / activate-deactivate / archive. Note: `checkin config`
# edits the definition; `checkin edit` still edits your *response*, `checkin reset`
# deletes it. --user/--team replace participants (a check-in always needs ≥1).
dailybot checkin config <followup_uuid> --time 10:00 --days 1,2,3,4,5
dailybot checkin config <followup_uuid> --team "Engineering"
dailybot checkin config <followup_uuid> --reminders 3 --reminder-interval 30
dailybot checkin config <followup_uuid> --no-past --privacy everyone --inactive
dailybot checkin archive <followup_uuid>

# Manage questions (same shapes as form questions; --blocker tags the blocker Q)
dailybot checkin questions add <followup_uuid> --type text --question "Focus today?"
dailybot checkin questions add <followup_uuid> --type boolean --question "Any blockers?" --blocker
# Per-question extras: report title, alternate phrasings, and conditional logic
dailybot checkin questions add <followup_uuid> --type text --question "What did you do?" \
--short-question "Yesterday" --variation "What did you accomplish?"
dailybot checkin questions edit <followup_uuid> <question_uuid> \
--jump-if-equals "No" --jump-to -1 # inline single-jump logic
dailybot checkin questions edit <followup_uuid> <question_uuid> --logic-file branching.json
dailybot checkin questions edit <followup_uuid> <question_uuid> --question "Need help?"
dailybot checkin questions edit <followup_uuid> <question_uuid> --blocker
dailybot checkin questions delete <followup_uuid> <question_uuid> --yes
dailybot checkin questions reorder <followup_uuid> <q2> <q1>

# Read a check-in back — canonical detail: schedule, resolved participants
# (names), attached report channels, and canonical questions in one call
dailybot checkin show <followup_uuid> --json

# Admin/owner: read everyone's response history, filtered by user
dailybot checkin history <followup_uuid> --days 7 # your own; --all/--user are on `responses` API
```

**Schedule:** `--days` are ISO weekday integers (0=Sunday … 6=Saturday); `--time`
is `HH:MM`; `--timezone` is an IANA name. Or pass `--schedule-file`
(`{"days": [...], "time": "HH:MM", "timezone": "..."}`). **Full config** (create +
config, partial): `--start-on/--end-on`, `--frequency weekly` (monthly/custom
cadences are driven by `--frequency-advanced`),
`--every N`, `--trigger-based/--fixed-time`,
`--participant-timezone/--custom-timezone`, `--reminders 0-5`,
`--reminder-interval 0-60`, `--reminder-condition smart_frequency|fixed_frequency`,
`--work-days/--no-work-days`, `--allow-early/--no-early`, `--allow-past/--no-past`,
`--allow-future/--no-future`, `--anonymous/--no-anonymous`, `--privacy <level>`,
`--one-by-one/--aggregated`, `--intro/--outro`, `--report-time HH:MM`,
`--reminder-tone standard|persuasive`, `--smart/--no-smart`,
`--intelligence/--no-intelligence` (needs `--smart`), `--max-clarifying 0-5`
(needs `--intelligence`), `--frequency-advanced disabled|monthly|custom`,
`--cron "0 9 * * 1,3,5"` — full 100% parity with the web's Frequency +
Additional-settings panels (only the computed `summary` stays read-only);
`checkin show` echoes them all back.
**Participants:**
repeatable `--user` / `--team` accept a name or a UUID. **A check-in must have at
least one participant** (a team or a person) — it only triggers for its
participants. If you create with no `--user`/`--team`, an interactive terminal
prompts you to pick some (the default team is suggested); a non-interactive run
(agent/script) errors instead of creating an empty check-in. Add or replace
participants later with `checkin config --user/--team`. **Question types** match
forms: `text`, `multiple_choice` (needs `--options`), `boolean` (no options),
`numeric`; up to 50 (this is the complete catalog). Tag the blocker question with
`--blocker`. **Per-question extras** (`questions add`/`edit`): `--short-question`
(report title, ≤512 chars), `--variation` (repeatable, ≤10), and conditional logic
via `--logic-file` or inline `--jump-if-equals VALUE --jump-to N` (`-1` = end).
**A report title is required** when adding/seeding a question — pass
`--short-question` (or `--ai-short-question` to let Dailybot generate it). Empty
question text is rejected server-side.

**Reading back (`checkin show`):** returns the canonical detail shape — schedule,
`participants` (users/teams resolved to names), attached `report_channels`, and
`questions` in the canonical `{uuid, index, question, question_type, required,
is_blocker, choices}` form (identical to form detail). Use it to verify a
check-in you just created — who's assigned, where it reports, and question order.

---

## Step 4 — HTTP Fallback (when CLI is unavailable)

See [`../shared/http-fallback.md`](../shared/http-fallback.md) for base patterns.
Expand Down
Loading