From 4d00495fe21b4fe0a7b1a2f28cb4b43382d59d1f Mon Sep 17 00:00:00 2001 From: Sergio Alexander Florez Galeano Date: Fri, 24 Jul 2026 03:10:31 +0000 Subject: [PATCH] chore(skills): sync vendored dailybot skill pack to v3.11.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Dogfood sync of .agents/skills/dailybot/ to DailybotHQ/agent-skill v3.11.0 — documents interactive chat buttons (approvals, workflow triggers, modals, callbacks) and workflow trigger, and raises the pack CLI floor to dailybot-cli >= 3.8.0. ## Change Log - Sync all vendored SKILL.md / shared docs to v3.11.0 - Bump pack version + CLI floor in AGENTS.md and skills_agents_catalog.md - docker/local/cli: raise the dev-container CLI floor to >=3.8.0 ## Risks - None at runtime — vendored docs + local dev tooling only; no source or packaging changes [skip release] Co-authored-by: Cursor --- .agents/docs/skills_agents_catalog.md | 6 +- .agents/skills/dailybot/SKILL.md | 50 ++-- .agents/skills/dailybot/ask/SKILL.md | 6 +- .agents/skills/dailybot/channels/SKILL.md | 6 +- .agents/skills/dailybot/chat/SKILL.md | 219 +++++++++++++++++- .agents/skills/dailybot/checkin/SKILL.md | 6 +- .agents/skills/dailybot/conversation/SKILL.md | 4 +- .agents/skills/dailybot/email/SKILL.md | 4 +- .agents/skills/dailybot/env/SKILL.md | 14 +- .agents/skills/dailybot/forms/SKILL.md | 8 +- .../dailybot/forms/_custom-template/SKILL.md | 2 +- .agents/skills/dailybot/health/SKILL.md | 4 +- .agents/skills/dailybot/kudos/SKILL.md | 6 +- .agents/skills/dailybot/messages/SKILL.md | 4 +- .agents/skills/dailybot/report/SKILL.md | 10 +- .agents/skills/dailybot/report/hooks.md | 4 +- .agents/skills/dailybot/shared/auth.md | 2 +- .../skills/dailybot/shared/dashboard-urls.md | 2 +- .agents/skills/dailybot/shared/env-json.md | 6 +- .../dailybot/shared/list-query-and-errors.md | 19 +- .agents/skills/dailybot/teams/SKILL.md | 6 +- .agents/skills/dailybot/workflow/SKILL.md | 153 +++++++++--- AGENTS.md | 2 +- docker/local/cli/Dockerfile | 2 +- 24 files changed, 437 insertions(+), 108 deletions(-) diff --git a/.agents/docs/skills_agents_catalog.md b/.agents/docs/skills_agents_catalog.md index 1ac4dc3..923457f 100644 --- a/.agents/docs/skills_agents_catalog.md +++ b/.agents/docs/skills_agents_catalog.md @@ -18,7 +18,7 @@ Slash commands. Invoked as `/` (Claude Code) or `#` (Codex/Cursor/Ge ### Dailybot agent skill pack (vendored from [`DailybotHQ/agent-skill`](https://github.com/DailybotHQ/agent-skill)) -The full pack lives under [`.agents/skills/dailybot/`](../skills/dailybot/) (router + fourteen sub-skills; vendored at **v3.10.3**). Every sub-skill requires `dailybot-cli >= 3.7.0` — the pack baseline. The router auto-routes by intent — read [`skills/dailybot/SKILL.md`](../skills/dailybot/SKILL.md) and let it pick the right sub-skill. Direct sub-skill entry points: +The full pack lives under [`.agents/skills/dailybot/`](../skills/dailybot/) (router + fourteen sub-skills; vendored at **v3.11.0**). Every sub-skill requires `dailybot-cli >= 3.8.0` — the pack baseline. The router auto-routes by intent — read [`skills/dailybot/SKILL.md`](../skills/dailybot/SKILL.md) and let it pick the right sub-skill. Direct sub-skill entry points: | Slug | Procedure | Use when | |------|-----------|----------| @@ -31,10 +31,10 @@ The full pack lives under [`.agents/skills/dailybot/`](../skills/dailybot/) (rou | `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/transitioning responses + authoring (create/config/archive + questions) | | `dailybot-channels` | [`skills/dailybot/channels/SKILL.md`](../skills/dailybot/channels/SKILL.md) | Discovering report-channel UUIDs for `--report-channel` | -| `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; `--send-as-user`/`--send-as-me` identity) | +| `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; `--send-as-user`/`--send-as-me` identity; interactive buttons with approval flows, workflow triggers, modals, callbacks) | | `dailybot-conversation` | [`skills/dailybot/conversation/SKILL.md`](../skills/dailybot/conversation/SKILL.md) | Opening (or idempotently reusing) a Slack group DM with the bot + named teammates, then optionally posting a report (`conversation open -u … -m …`; Slack only, org-admin only) | | `dailybot-ask` | [`skills/dailybot/ask/SKILL.md`](../skills/dailybot/ask/SKILL.md) | Asking the Dailybot AI a one-shot, headless question | -| `dailybot-workflow` | [`skills/dailybot/workflow/SKILL.md`](../skills/dailybot/workflow/SKILL.md) | Reading the org's workflows — `workflow list` / `workflow get` (read-only; plan-gated) | +| `dailybot-workflow` | [`skills/dailybot/workflow/SKILL.md`](../skills/dailybot/workflow/SKILL.md) | Listing / reading / triggering org workflows — `workflow list` (incl. `--filter api_trigger`) / `workflow get` / `workflow trigger` (plan-gated) | | `dailybot-env` | [`skills/dailybot/env/SKILL.md`](../skills/dailybot/env/SKILL.md) | Managing per-repo API keys in the opt-in, gitignored `.dailybot/env.json` (`env add/use/show/list/remove/off/on`) — be "logged into different orgs in different repos" | ### Deep Work Plan skill pack (vendored from [`DailybotHQ/deepworkplan-skill`](https://github.com/DailybotHQ/deepworkplan-skill)) diff --git a/.agents/skills/dailybot/SKILL.md b/.agents/skills/dailybot/SKILL.md index 37cff99..d137738 100644 --- a/.agents/skills/dailybot/SKILL.md +++ b/.agents/skills/dailybot/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot -description: Official Dailybot agent skill pack — report progress, check messages, send emails, announce agent status, complete check-ins, give kudos (to users or teams), resolve teams, run the full forms lifecycle (list, submit, update, transition between workflow states), **author check-ins and forms from scratch** (create/configure questions, workflow states, permissions, reminders, scheduling, AI settings, sharing), send/edit chat messages on the team's Slack/Teams/Discord/Google Chat (including report-style threads and sending as a user's identity), open (or reuse) a Slack group DM with the bot and post a report to it, ask the Dailybot AI a question headlessly, **and browse/read the workspace** — who am I / my org / a user's profile (`me` / `org` / `user get`), browse the kudos feed + the org-wide feed + wall of fame, and list/read workflows — all with shared pagination / search / date-range filters. Also **manages per-repo API keys** through the opt-in `.dailybot/env.json` file (dailybot env add/use/show/list/remove/off/on — CLI 3.7.0+) so a developer can be "logged into different orgs in different repos" simultaneously. Routes to the right sub-skill based on intent. Use when the developer mentions Dailybot or wants to interact with their team. -version: "3.10.3" +description: Official Dailybot agent skill pack — report progress, check messages, send emails, announce agent status, complete check-ins, give kudos (to users or teams), resolve teams, run the full forms lifecycle (list, submit, update, transition between workflow states), **author check-ins and forms from scratch** (create/configure questions, workflow states, permissions, reminders, scheduling, AI settings, sharing), send/edit chat messages on the team's Slack/Teams/Discord/Google Chat (including report-style threads, sending as a user's identity, and interactive buttons with approval flows, workflow triggers, modals, and callbacks), open (or reuse) a Slack group DM with the bot and post a report to it, ask the Dailybot AI a question headlessly, **and browse/read/trigger the workspace** — who am I / my org / a user's profile (`me` / `org` / `user get`), browse the kudos feed + the org-wide feed + wall of fame, list/read workflows, and trigger API-triggerable workflows with optional payloads — all with shared pagination / search / date-range filters. Also **manages per-repo API keys** through the opt-in `.dailybot/env.json` file (dailybot env add/use/show/list/remove/off/on — pack baseline `>= 3.8.0`) so a developer can be "logged into different orgs in different repos" simultaneously. Routes to the right sub-skill based on intent. Use when the developer mentions Dailybot or wants to interact with their team. +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -30,7 +30,7 @@ no network fetch is required** to know what to do. Run first-run setup in order: the `dailybot` CLI is the integration surface. If it is missing, follow [`shared/auth.md`](shared/auth.md) — it proposes the checksum-verified installer and installs **only after the developer confirms**. Confirm with - `dailybot --version` (minimum `>= 3.7.0` — the skill-pack baseline for + `dailybot --version` (minimum `>= 3.8.0` — the skill-pack baseline for every sub-skill). 2. **Authenticate.** `dailybot login` (email OTP) **or** set `DAILYBOT_API_KEY` — see [`shared/auth.md`](shared/auth.md). Credentials are stored owner-only @@ -66,9 +66,9 @@ Thirteen coordinated capabilities, with smart routing between them: | **Kudos** | `dailybot-kudos` | Recognize a teammate or a whole team — **plus browsing (read)**: `kudos list` the recognition feed (filter received/given), `kudos org` the whole org's feed (admin-only), and `kudos wall-of-fame` leaderboard | | **Teams** | `dailybot-teams` | List teams, inspect members, resolve a team name → UUID (used as a resolver by other skills) — **plus account context**: `dailybot me` (who am I / role), `dailybot org` (which org), and `dailybot user get` (one user's profile) | | **Forms** | `dailybot-forms` | List, submit, update, or transition forms — including workflow-state forms with audience permissions (`form list` is now **org-scoped** by default, with `--mine` to narrow to your own; list + responses support pagination / search / date filters) — **plus authoring**: create/configure a form (workflow states, permissions, anonymous/public/approval, ChatOps command) and manage its questions | -| **Workflows** | `dailybot-workflow` | Developer wants to **read** the org's workflows — `workflow list` (paginated/searchable) and `workflow get`. Read-only; writes are web-app only. Plan-gated | +| **Workflows** | `dailybot-workflow` | Developer wants to **read or trigger** the org's workflows — `workflow list` (paginated/searchable, with `--filter api_trigger`), `workflow get`, and `workflow trigger` (fire an API-triggerable workflow with an optional JSON payload). Creating/editing workflows is web-app only. Plan-gated | | **Report channels** | `dailybot-channels` | Discover report-channel UUIDs to attach to forms/check-ins with `--report-channel` | -| **Per-repo API keys** | `dailybot-env` | Configure `.dailybot/env.json` — an **opt-in, gitignored** file that carries API keys + URLs for one or more environments (live, local, staging) so the developer can be "logged into different orgs in different repos". `dailybot env add / use / show / list / remove / off / on`. CLI >= 3.7.0 | +| **Per-repo API keys** | `dailybot-env` | Configure `.dailybot/env.json` — an **opt-in, gitignored** file that carries API keys + URLs for one or more environments (live, local, staging) so the developer can be "logged into different orgs in different repos". `dailybot env add / use / show / list / remove / off / on`. Pack baseline (`>= 3.8.0`) | ## Install @@ -86,7 +86,7 @@ reporting, ships **inside this skill** — follow **[Start here (first run)](#st ## Required Dailybot CLI version -> **Baseline: `dailybot-cli >= 3.7.0`** for **every** sub-skill in the pack — +> **Baseline: `dailybot-cli >= 3.8.0`** for **every** sub-skill in the pack — > one single floor, no per-sub-skill exceptions. Recommended install / upgrade > target: **latest release** — `dailybot upgrade` (or `pip install > --upgrade dailybot-cli`) always satisfies it. @@ -98,22 +98,24 @@ reporting, ships **inside this skill** — follow **[Start here (first run)](#st > upgrade`) installs today; run `dailybot version --check` to see the exact > number. Everything this pack documents — reporting, hooks, chat, the AI `ask` > command, check-in and form authoring, the browse/read surface (`me` / `org` / -> `user get`, kudos browsing, workflows), the shared list query flags, and the -> machine-readable error codes — is available at this floor. +> `user get`, kudos browsing, workflows), interactive chat buttons (approvals, +> workflow triggers, modals, callbacks), `workflow trigger`, the shared list +> query flags, and the machine-readable error codes — is available at this floor. ### Why this minimum -`3.7.0` is the release that completed the auth story this pack relies on: -the `env` sub-skill's `dailybot env` command group and `.dailybot/env.json` -per-repo credentials (with the wire-preference guarantee that a repo-local -key beats the global Bearer session), the hardened refuse-if-tracked guard, -and every earlier surface the pack documents (reporting, hooks, chat, forms -and check-in authoring, kudos, teams, workflows, `ask`, the shared list -query flags, and the machine-readable error codes). Pinning one single -floor keeps agent behavior predictable — no per-sub-skill version matrix. - -If `dailybot --version` reports below 3.7.0, ask the developer to run -`dailybot upgrade` (or `pip install --upgrade 'dailybot-cli>=3.7.0'`) +`3.8.0` is the release that shipped the interactive-button contract on +`dailybot chat send` / `update` (`--buttons`, approval / workflow-button +flags, modals, callbacks) and `dailybot workflow trigger` (plus +`workflow list --filter api_trigger`). It also includes everything earlier +floors already covered: `.dailybot/env.json` per-repo credentials (from +3.7.0), reporting, hooks, forms and check-in authoring, kudos, teams, +`ask`, the shared list query flags, and the machine-readable error codes. +Pinning one single floor keeps agent behavior predictable — no per-sub-skill +version matrix. + +If `dailybot --version` reports below 3.8.0, ask the developer to run +`dailybot upgrade` (or `pip install --upgrade 'dailybot-cli>=3.8.0'`) before using any sub-skill. ### Checking the installed version @@ -121,7 +123,7 @@ before using any sub-skill. ```bash # Single-line, scriptable dailybot --version -# → dailybot 3.7.0 (Python 3.12.4) +# → dailybot 3.8.0 (Python 3.12.4) # Multi-line panel: version, Python runtime, install path, release notes link dailybot version @@ -141,7 +143,7 @@ Homebrew / Linux binary / editable dev) and either runs the right command in a subprocess or prints the exact command for installs the CLI shouldn't drive. `dailybot upgrade --dry-run` previews without executing. -If the developer is below the pack baseline (`dailybot-cli >= 3.7.0`), +If the developer is below the pack baseline (`dailybot-cli >= 3.8.0`), ask them to run `dailybot upgrade` once, then resume. Do not retry CLI commands in a loop while the upgrade is pending. @@ -149,7 +151,7 @@ commands in a loop while the upgrade is pending. | Channel | Command | |---------|---------| -| pip | `pip install 'dailybot-cli>=3.7.0'` (the pack baseline) | +| pip | `pip install 'dailybot-cli>=3.8.0'` (the pack baseline) | | Homebrew | `brew install dailybothq/tap/dailybot` | | Universal installer (Linux / macOS / WSL2 / Git Bash) | `curl -fsSL https://cli.dailybot.com/install.sh \| bash` | | Windows PowerShell (when WSL2 / Git Bash unavailable) | `irm https://cli.dailybot.com/install.ps1 \| iex` | @@ -174,7 +176,7 @@ Full safety story (SHA-256 sidecar, cross-origin diff, optional cosign): see Every install method defaults to the latest release but can pin an exact version — useful when a developer needs to reproduce a known-good setup or -pin the `3.7.0` pack baseline (the installer scripts, `pip`, and Homebrew all +pin the `3.8.0` pack baseline (the installer scripts, `pip`, and Homebrew all accept a version pin): | Channel | Pin a version | @@ -241,8 +243,10 @@ the full step-by-step workflow. | "who am I?", "what's my role?", "which org am I in?", "show a user's profile" | **Teams** → read [`teams/SKILL.md`](teams/SKILL.md) § Step 4.5 (`me` / `org` / `user get`) | | "browse kudos", "kudos I received / gave", "org kudos stats", "who's on the wall of fame?" | **Kudos** → read [`kudos/SKILL.md`](kudos/SKILL.md) § Browsing kudos | | "list my workflows", "show workflows", "what's in workflow X?" | **Workflows** → read [`workflow/SKILL.md`](workflow/SKILL.md) | +| "trigger the deploy workflow", "fire automation X", "run workflow ``", "trigger workflow with payload" | **Workflows** → read [`workflow/SKILL.md`](workflow/SKILL.md) § Step 4 (Trigger) | | "which channels can Dailybot post to?", "list report channels", "I need a channel UUID for the form / check-in" | **Channels** → read [`channels/SKILL.md`](channels/SKILL.md) | | "send a Slack message", "DM someone in chat", "post the deploy report to a channel (with a thread)", "edit that chat message I just sent", "ping the Engineering team in chat" | **Chat** → read [`chat/SKILL.md`](chat/SKILL.md) | +| "send an approval request with buttons", "post a message with interactive buttons", "add a workflow button to a message", "send a message with approve/reject" | **Chat** → read [`chat/SKILL.md`](chat/SKILL.md) § Buttons | | "send this to a channel as me", "post as `` in Slack", "send the message with someone's identity" | **Chat** → read [`chat/SKILL.md`](chat/SKILL.md) § Send as a user's identity (`--send-as-user` / `--send-as-me`) | | "open a group DM with Jane and Bob", "start a Slack group with the release team and the bot", "open a group with `` and send them this report", "get me a channel with these people" | **Conversations** → read [`conversation/SKILL.md`](conversation/SKILL.md) | | "list my forms", "which forms does the org have?", "only my own forms" (`--mine`) | **Forms** → read [`forms/SKILL.md`](forms/SKILL.md) | diff --git a/.agents/skills/dailybot/ask/SKILL.md b/.agents/skills/dailybot/ask/SKILL.md index 41f7ad7..28d1f62 100644 --- a/.agents/skills/dailybot/ask/SKILL.md +++ b/.agents/skills/dailybot/ask/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-ask description: Ask the Dailybot AI a question from the terminal and read the answer, non-interactively. Runs headless — a single `dailybot ask ""` prints the assistant's reply to stdout (or structured JSON with `--json`), so an autonomous agent (Claude Code, CI, a bot) can query the Dailybot AI with only an API key. Use when the developer or agent says "ask Dailybot ...", "query the Dailybot AI", "what does Dailybot say about ...", or wants a one-shot answer from Dailybot's assistant. Distinct from dailybot-chat (bot messages to Slack/Teams) and dailybot-report (progress to the dashboard). -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,7 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Ask -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline) — the `dailybot ask` +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline) — the `dailybot ask` > command and full API-key parity on the AI chat. On much older CLIs the AI chat only > exists as the interactive TUI (`dailybot interactive`) and requires a login > session. If `dailybot ask --help` is not recognized, ask the developer to run @@ -59,7 +59,7 @@ Read and follow the authentication steps in [`../shared/auth.md`](../shared/auth The AI chat accepts **either** a login session **or** an org API key — an agent with only `DAILYBOT_API_KEY` set can use `dailybot ask` directly. -Confirm the command exists (`dailybot-cli >= 3.7.0`): +Confirm the command exists (`dailybot-cli >= 3.8.0`): ```bash dailybot ask --help 2>&1 | head -1 diff --git a/.agents/skills/dailybot/channels/SKILL.md b/.agents/skills/dailybot/channels/SKILL.md index 825edb1..4fab635 100644 --- a/.agents/skills/dailybot/channels/SKILL.md +++ b/.agents/skills/dailybot/channels/SKILL.md @@ -1,7 +1,7 @@ --- 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: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,9 +10,9 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Report Channels -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The `dailybot channels list` +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The `dailybot channels list` > command is available at this floor. If `dailybot --version` reports below -> 3.7.0, ask the developer to run `dailybot upgrade`. See +> 3.8.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 diff --git a/.agents/skills/dailybot/chat/SKILL.md b/.agents/skills/dailybot/chat/SKILL.md index 76a2218..a676b5d 100644 --- a/.agents/skills/dailybot/chat/SKILL.md +++ b/.agents/skills/dailybot/chat/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-chat -description: Send and edit Dailybot bot messages on the team's connected chat platform (Slack, Microsoft Teams, Discord, Google Chat) — to user DMs, channels, or whole teams. Supports report-style threads (one headline + replies, in one call) and editing the parent or any reply afterward. Use when the developer says "send a message to my Slack channel", "ping the team in chat", "post the deploy report to #releases", or wants to update a previously sent bot message. Works headless for agents. -version: "3.10.3" +description: Send and edit Dailybot bot messages on the team's connected chat platform (Slack, Microsoft Teams, Discord, Google Chat) — to user DMs, channels, or whole teams. Supports report-style threads (one headline + replies, in one call), interactive buttons (approval flows, workflow triggers, modals, callbacks), and editing the parent or any reply afterward. Use when the developer says "send a message to my Slack channel", "ping the team in chat", "post the deploy report to #releases", "send an approval request with buttons", or wants to update a previously sent bot message. Works headless for agents. +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,15 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Chat -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The `dailybot chat send` / `chat update` command group, the `--thread-message` flag (≤10 replies per call, each independently editable), the login-Bearer auth path on `/v1/send-message/` (send without an org API key), and `--send-as-user` / `--send-as-me` (admin-only) are all available. If `dailybot --version` is below 3.7.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The +> `dailybot chat send` / `chat update` command group — including +> `--thread-message`, login-Bearer auth on `/v1/send-message/`, +> `--send-as-user` / `--send-as-me`, and the full interactive-button +> surface (`--buttons`, approval / workflow-button flags, modals, +> callbacks) — is available at this floor. If `dailybot --version` is +> below 3.8.0, ask the developer to run `dailybot upgrade`. See +> [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) +> for install commands and version-check tooling. You send **Dailybot bot messages** on the developer's behalf to the organization's connected chat platform (Slack, Microsoft Teams, Discord, Google Chat) — to user DMs, channels, or whole teams (expanded to member DMs server-side). This skill is the right surface for: @@ -40,6 +48,11 @@ Trigger phrases the agent should recognize: - "post a deploy summary to #releases with the changelog as a thread" - "send a chat message to the QA team" +**Interactive buttons / approvals:** +- "send an approval request with approve/reject buttons" +- "post a message with a button that triggers the deploy workflow" +- "send a message with interactive buttons to #releases" + **Edit / update a previous message:** - "update the deploy message to say done" - "edit that Slack message I just sent" @@ -228,15 +241,134 @@ Ephemeral needs a `--user` target. A channel-only ephemeral send is skipped by t ### Buttons +The CLI supports multiple button styles — from simple link buttons to rich +interactive actions (approval flows, workflow triggers, modals). **Max 25 +buttons per message.** All button flags are repeatable. + +#### Link buttons (jump to a URL) + ```bash -# Link button (jumps to a URL) --link-button "View PR::https://github.com/org/repo/pull/123" +``` + +#### Interactive buttons (server-side action; value is what's sent on click) -# Interactive button (server-side action; value is what's sent on click) +```bash --button "Approve::approve-release-v2.4" ``` -Both flags are repeatable. +#### Approval flow buttons + +A shorthand for the common approve/reject pattern. Each button carries a +`callback_url` where the server POSTs the button value on click, plus an +optional Bearer token for the callback endpoint: + +```bash +dailybot chat send -c C0123 -m "Release v2.5 ready for approval" \ + --approve-button "Approve=approved" \ + --reject-button "Reject=rejected" \ + --callback-url "https://ci.example.com/hooks/release" \ + --callback-bearer "$CI_TOKEN" +``` + +`--approve-button` and `--reject-button` take `"Label=value"` (equals sign +separator). `--callback-url` sets the URL for both. `--callback-bearer` is +optional — when set, each button gets +`callback_auth: {"type": "bearer", "token": ""}`. Prefer passing the +token via an env var (`--callback-bearer "$TOKEN"`) so it does not land in +shell history or process lists. + +#### Workflow trigger buttons + +Fire a Dailybot workflow when clicked — the button carries a +`callback_workflow` reference: + +```bash +dailybot chat send -c C0123 -m "Ready to deploy?" \ + --workflow-button "Deploy now=" +``` + +`--workflow-button` takes `"Label="`. Only workflows with the +`api_trigger` event type ("When triggered via API or button") can be fired this +way. Resolve eligible UUIDs with `dailybot workflow list --filter api_trigger`. +See [`../workflow/SKILL.md`](../workflow/SKILL.md) for triggering workflows +directly (including `--payload`). + +#### Full-control buttons via `--buttons` (JSON pass-through) + +For advanced callbacks (forms, commands, prompts, modals, auth overrides), pass +the full button contract as a JSON array. Keys are forwarded untouched (including +unknown future fields). Prefer including `button_type` / `value` for interactive +buttons (the ergonomic flags set these automatically): + +```bash +dailybot chat send -u -m "Pick an action" \ + --buttons '[ + {"label": "Open form", "button_type": "interactive", "value": "open_form", + "callback_form": ""}, + {"label": "Run command", "button_type": "interactive", "value": "run_cmd", + "callback_command": "/deploy staging"}, + {"label": "Ask AI", "button_type": "interactive", "value": "ask", + "callback_prompt": "Summarize the last deploy"}, + {"label": "Start workflow", "button_type": "interactive", "value": "wf", + "callback_workflow": ""}, + {"label": "Confirm", "button_type": "interactive", "value": "confirm", + "callback_url": "https://ci.example.com/confirm", + "callback_auth": {"type": "bearer", "token": ""}}, + {"label": "Details", "button_type": "interactive", "value": "details", + "response": "Here are the deploy details…"}, + {"label": "Fill info", "button_type": "interactive", "value": "fill", + "callback_url": "https://hooks.example.com/x", + "modal_body": { + "title": "Request details", + "submit_label": "Submit", + "blocks": [ + {"type": "input", "name": "summary", "label": "Summary", "optional": false}, + {"type": "input", "name": "notes", "label": "Notes", "multiline": true, "optional": true} + ] + }} + ]' +``` + +**Button contract fields:** + +| Field | Description | +|-------|-------------| +| `label` | Button text (required) | +| `button_type` | `"link"` (needs `url`) or `"interactive"` (needs `value` + a callback / `response`) | +| `url` | Destination for link buttons | +| `value` | Click payload for interactive buttons | +| `callback_url` | HTTPS URL the server POSTs to on click (may include modal answers) | +| `callback_form` | Open a Dailybot form for the user to fill | +| `callback_command` | Execute a Dailybot ChatOps command | +| `callback_prompt` | Send a prompt to the Dailybot AI | +| `callback_workflow` | Trigger a Dailybot `api_trigger` workflow by UUID | +| `modal_body` | Modal composer: `{title, submit_label?, blocks: [{type, name, label, …}]}` — used with `callback_url` or `callback_workflow` when collecting inputs | +| `response` | Auto-reply text (may nest further buttons) | +| `callback_auth` | Auth for `callback_url` only: `{type: "bearer"\|"basic"\|"custom_header", …}` — never a bare `"Bearer …"` string | + +**Constraints:** + +- At most **one** of the five callback types (`callback_url`, `callback_form`, + `callback_command`, `callback_prompt`, `callback_workflow`) per button. + Combining two is rejected with `button_callback_conflict`. +- A button cannot mix a link `url` with any `callback_*` — that's + `button_link_and_callback_conflict`. +- Unknown keys are forwarded to the API (forward-compatible). +- Max **25** buttons per message (`buttons_count_out_of_range`). +- `callback_auth` is only valid with `callback_url`. + +#### Button behavior on `chat update` + +When editing a message, buttons are round-tripped — the existing buttons are +preserved unless you pass new button flags. Custom identity flags +(`--bot-name`/`--bot-icon-*`) and send-as-user flags are ignored on edits. +The 72-hour edit window applies. + +> Interactive-button flags (`--buttons`, `--approve-button` / +> `--reject-button`, `--callback-url`, `--callback-bearer`, +> `--workflow-button`) require **`dailybot-cli >= 3.8.0`** (this pack's +> baseline). `--link-button` and `--button` are also available at that floor. ### Headless / agent use — capture the ids in JSON @@ -289,6 +421,12 @@ The chat platform keeps the message's original bot name/avatar on an edit, so id | `--image-url` | `-i` | Public image URL to attach | | `--link-button` | | `"Label::https://url"` (repeatable) | | `--button` | | `"Label::value"` interactive button (repeatable) | +| `--buttons` | | JSON array of button objects (full contract; see § Buttons) | +| `--approve-button` | | `"Label=value"` approval button (repeatable) | +| `--reject-button` | | `"Label=value"` rejection button (repeatable) | +| `--callback-url` | | Callback URL for approve/reject buttons | +| `--callback-bearer` | | Bearer token sent with the callback POST | +| `--workflow-button` | | `"Label="` trigger a workflow on click (repeatable) | | `--thread-message` | | Reply posted in the parent's thread (repeatable; max 10) | | `--thread` | | Reply into an existing platform thread id (channels) | | `--channel-type` | | `channel` / `private_channel` / `group_chat` / `direct_message` | @@ -402,6 +540,17 @@ The CLI translates these to friendly messages automatically. In `--json` mode (o | `400` | `send_as_user_conflict` | `--send-as-user`/`--send-as-me` combined with `--bot-name`/`--bot-icon-*` | Drop the custom-identity flags — the two are mutually exclusive. (Caught client-side.) | | `400` | `send_as_user_invalid_uuid` | `--send-as-user` isn't a valid UUID | Fix the UUID. (Caught client-side before the request.) | | `400` | `send_as_user_not_found` | The `--send-as-user` UUID doesn't resolve to a user | Confirm the user exists (`dailybot user list`). | +| `400` | `button_link_and_callback_conflict` | A button has both a link `url` and a `callback_*` field | Use one or the other — a button is either a link or an interactive callback. | +| `400` | `button_callback_conflict` | A button has more than one `callback_*` field | Only one of `callback_url`/`callback_form`/`callback_command`/`callback_prompt`/`callback_workflow` per button. | +| `400` | `button_callback_url_invalid` | `callback_url` is not a valid URL | Fix the URL. | +| `400` | `button_modal_body_invalid` | `modal_body` JSON is malformed or has invalid field types | Use `{title, submit_label?, blocks: [{type, name, label, …}]}` — not a bare array of fields. | +| `400` | `button_callback_form_not_found` | `callback_form` UUID doesn't match a form | Verify the form UUID (`dailybot form list`). | +| `400` | `button_callback_command_invalid` | `callback_command` is not a recognized ChatOps command | Check the command string. | +| `400` | `button_callback_prompt_invalid` | `callback_prompt` is empty or too long | Fix the prompt text. | +| `400` | `button_callback_workflow_not_found` | `callback_workflow` UUID doesn't match a workflow, or the workflow isn't triggerable | Verify the UUID (`dailybot workflow list --filter api_trigger`). | +| `400` | `button_response_invalid` | `response` text is empty or too long | Fix the response text. | +| `400` | `button_callback_auth_invalid` | `callback_auth` value is malformed | Use `{type: "bearer"\|"basic"\|"custom_header", …}` — only with `callback_url`. | +| `400` | `buttons_count_out_of_range` | More than 25 buttons on a single message | Reduce to ≤25 buttons. | | `400` | (other) | No/invalid targets, malformed UUID, empty channel id, invalid bot identity | Surface the `detail` verbatim and fix the input. | | `401` / `403` | | Unauthenticated / invalid auth | Suggest `dailybot login` (or, if the developer prefers, `dailybot config key=...`). | | `403` | `cli_send_message_target_not_allowed` | Login Bearer caller targeting outside their role scope (cross-org, channel they can't post to, team they don't belong to) | Tell the developer which target was rejected and suggest either picking an in-scope target or using an org API key for org-wide reach. | @@ -466,7 +615,63 @@ Agent: 4. Surface success. ``` -### Dialogue E — Team not visible to the caller (role scope) +### Dialogue E — Approval flow with callback + +``` +Developer: "send a release approval request to #releases with approve/reject buttons + that POST to our CI webhook" +Agent: + 1. Confirm: + "I'll post to C0123456789: + Message: 🚢 Release v2.5 ready for approval + Buttons: [Approve] → POST approved, [Reject] → POST rejected + Callback: https://ci.example.com/hooks/release + Send? (y/n)" + 2. dailybot chat send -c C0123456789 \ + -m "🚢 Release v2.5 ready for approval" \ + --approve-button "Approve=approved" \ + --reject-button "Reject=rejected" \ + --callback-url "https://ci.example.com/hooks/release" \ + --callback-bearer "$CI_TOKEN" --json + 3. Surface the bot_message_id. +``` + +### Dialogue F — Workflow trigger button + +``` +Developer: "post a message to #deploys with a button that fires the deploy workflow" +Agent: + 1. dailybot workflow list --filter api_trigger --json → find the deploy workflow UUID + 2. Confirm: + "I'll post to C0123456789: + Message: Deploy ready — click to start + Button: [Deploy now] → triggers workflow + Send? (y/n)" + 3. dailybot chat send -c C0123456789 \ + -m "Deploy ready — click to start" \ + --workflow-button "Deploy now=" --json + 4. Surface the bot_message_id. +``` + +### Dialogue G — Modal with inputs + callback URL + +``` +Developer: "DM me a button that opens a form modal and POSTs the answers to our webhook" +Agent: + 1. Resolve the developer's user UUID (`dailybot me --json` or `user list`). + 2. Confirm the message + that the modal collects Summary + Notes, callback = the webhook URL. + 3. dailybot chat send -u -m "Please fill in the details" \ + --buttons '[{"label":"Open form","button_type":"interactive","value":"open", + "callback_url":"https://hooks.example.com/x", + "modal_body":{"title":"Request details","submit_label":"Submit", + "blocks":[ + {"type":"input","name":"summary","label":"Summary"}, + {"type":"input","name":"notes","label":"Notes","multiline":true}]}}]' --json + 4. Surface the bot_message_id; remind that answers land on the webhook after Submit. +``` + +### Dialogue H — Team not visible to the caller (role scope) + ``` Developer: "post a heads-up to the Security team's channel" diff --git a/.agents/skills/dailybot/checkin/SKILL.md b/.agents/skills/dailybot/checkin/SKILL.md index 1a5b213..3f08c6e 100644 --- a/.agents/skills/dailybot/checkin/SKILL.md +++ b/.agents/skills/dailybot/checkin/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-checkin description: Drive the full check-in lifecycle via Dailybot — list and complete pending check-ins, see pending/completed status for a day, inspect a check-in's questions and schedule, browse response history, edit or reset a submitted response, and backfill or future-date responses. Also authors check-ins — create and configure a check-in (schedule, participants, reminders, privacy, smart/AI) and manage its questions (types, report titles, variations, conditional logic). Works headless with an API key. Use when the developer asks to fill in their standup, answer daily questions, check what check-ins they have, edit or reset a check-in, review past responses, or create/configure a check-in. Do not use for free-text progress reports — those go through dailybot-report. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -285,11 +285,11 @@ prompts — handy for humans; agents should use the headless commands above. ## Step 3.7 — Authoring check-ins (create / configure / questions) -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The authoring surface — `checkin create`, +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The authoring surface — `checkin create`, > `checkin config`, `checkin archive`, the `checkin questions add|edit|delete|reorder` > group, resolving people by email, the smart/AI flags, and the **create requires > ≥ 1 question** rule (`questions_required`) — is all available. If -> `dailybot --version` is below 3.7.0, run `dailybot upgrade`. +> `dailybot --version` is below 3.8.0, run `dailybot upgrade`. Everything above **answers** a check-in. This section **builds** one. As of the authoring release, an agent can create a check-in from scratch, tune every diff --git a/.agents/skills/dailybot/conversation/SKILL.md b/.agents/skills/dailybot/conversation/SKILL.md index eb017a2..d1ddbb7 100644 --- a/.agents/skills/dailybot/conversation/SKILL.md +++ b/.agents/skills/dailybot/conversation/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-conversation description: Open (or idempotently reuse) a private Slack group DM (MPIM) that includes the Dailybot bot, then optionally post a message or report to it. Use when the developer wants to start a Slack group with specific teammates plus the bot — e.g. "open a group DM with Jane and Bob and send them the analysis report". Slack only, org-admin only. Distinct from dailybot-chat (which posts to existing channels/DMs) and dailybot-channels (which discovers report-channel UUIDs). -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,7 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Conversations -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline; the +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline; the > `dailybot conversation open` command itself shipped in 3.2.0). If > `dailybot --version` reports lower, ask the developer to run > `dailybot upgrade` and continue with your primary task meanwhile. See diff --git a/.agents/skills/dailybot/email/SKILL.md b/.agents/skills/dailybot/email/SKILL.md index 9770a81..2a55c23 100644 --- a/.agents/skills/dailybot/email/SKILL.md +++ b/.agents/skills/dailybot/email/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-email description: Send emails to a confirmed recipient via Dailybot on behalf of the agent. Use for notifications, summaries, follow-ups, or any communication the developer asks you to send. Always confirm recipients with the developer before sending — never guess addresses. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.dailybot.com/skill.md user-invocable: false 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)"}]}} @@ -12,7 +12,7 @@ allowed-tools: Bash, Read, Grep, Glob You send emails on behalf of the developer's agent through Dailybot. Useful for notifications, summaries, follow-ups, weekly reports, or any communication that should be delivered as email. -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). --- diff --git a/.agents/skills/dailybot/env/SKILL.md b/.agents/skills/dailybot/env/SKILL.md index 70a65d7..1b8c5db 100644 --- a/.agents/skills/dailybot/env/SKILL.md +++ b/.agents/skills/dailybot/env/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-env -description: Manage per-repo API key overrides in `.dailybot/env.json` — an opt-in, gitignored file that carries API keys + optional URLs for one or more environments (live, local, staging). One profile is active at a time; when set, it overrides `DAILYBOT_API_KEY`, `config.json`, and the login Bearer session for the enclosing repo. Use when the developer wants to be "logged into different orgs in different repos" simultaneously, needs a local dev key just for this project, or wants to toggle between staging and prod without touching global config or env vars. Requires CLI >= 3.7.0. -version: "3.10.3" +description: Manage per-repo API key overrides in `.dailybot/env.json` — an opt-in, gitignored file that carries API keys + optional URLs for one or more environments (live, local, staging). One profile is active at a time; when set, it overrides `DAILYBOT_API_KEY`, `config.json`, and the login Bearer session for the enclosing repo. Use when the developer wants to be "logged into different orgs in different repos" simultaneously, needs a local dev key just for this project, or wants to toggle between staging and prod without touching global config or env vars. Requires CLI >= 3.8.0 (pack baseline; `env` shipped in 3.7.0). +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,11 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot per-repo API key override (`env.json`) -> **Requires `dailybot-cli >= 3.7.0`** — the `dailybot env` command group and the `.dailybot/env.json` loader are new in that release. If `dailybot --version` reports below 3.7.0, ask the developer to run `dailybot upgrade` before continuing. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The +> `dailybot env` command group and `.dailybot/env.json` loader shipped in +> 3.7.0 and are included in this floor. If `dailybot --version` reports +> below 3.8.0, ask the developer to run `dailybot upgrade` before continuing. +> See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). This sub-skill lets an agent configure and manage `/.dailybot/env.json` — an **opt-in, gitignored** file that pins API keys + URL overrides per environment (live, local, staging) for the enclosing repo. When a profile is *active*, it overrides `DAILYBOT_API_KEY`, `config.json`, and the login Bearer session **only for that repo**. @@ -34,11 +38,11 @@ Route here when the developer says any of: ## Pre-flight — before writing anything -1. **Confirm the CLI supports `env`** (>= 3.7.0): +1. **Confirm the CLI meets the pack baseline** (>= 3.8.0): ```bash dailybot env --help >/dev/null 2>&1 || { - echo "This feature requires dailybot-cli >= 3.7.0. Run: dailybot upgrade" >&2 + echo "This feature requires dailybot-cli >= 3.8.0. Run: dailybot upgrade" >&2 exit 1 } ``` diff --git a/.agents/skills/dailybot/forms/SKILL.md b/.agents/skills/dailybot/forms/SKILL.md index c472a13..09ab5a7 100644 --- a/.agents/skills/dailybot/forms/SKILL.md +++ b/.agents/skills/dailybot/forms/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-forms description: List, inspect, submit, update, and transition form responses via Dailybot — including forms with workflow states and audience-scoped permissions. Also authors forms — create and configure a form (workflow states, permissions, anonymous/public/approval, ChatOps command) and manage its questions (types, report titles, variations, conditional logic). Use when the developer wants to see available forms, fill out a survey, continue an in-progress response, move a response between states, read prior responses, or create/configure a form. Do not use for daily check-ins — those go through dailybot-checkin. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,7 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Forms -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The full forms lifecycle — `form list` / `submit` / `get` / `responses` / `response get` / `update` / `transition` / `delete` — plus the structured `--json` 4xx error shape are all available. If `dailybot --version` is below 3.7.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The full forms lifecycle — `form list` / `submit` / `get` / `responses` / `response get` / `update` / `transition` / `delete` — plus the structured `--json` 4xx error shape are all available. If `dailybot --version` is below 3.8.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. You help developers work with the full Dailybot forms lifecycle: list, inspect, submit, update, transition between workflow states, and read prior responses. Forms are custom questionnaires created by team leads — feedback surveys, retrospectives, release checklists, approval flows, or any structured data collection. Some forms are simple "fill once and done"; others have **workflow states** (e.g. `draft → review → released`) with audience-scoped permissions on who can edit and who can transition. @@ -140,7 +140,7 @@ Returns all forms in the caller's organization. Every org member sees every org ### Pagination, search, and date filters -> **Note:** the shared list query flags below are part of the `dailybot-cli >= 3.7.0` baseline. Older CLIs +> **Note:** the shared list query flags below are part of the `dailybot-cli >= 3.8.0` baseline. Older CLIs > return the full list with no filtering. `form list` accepts the **full shared list query flag set** — pagination @@ -314,7 +314,7 @@ When the form has a workflow (`workflow.enabled: true`), the agent must understa ## Step 5.5 — Authoring forms (create / configure / questions) -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The full authoring surface — `form create`, `form config` (workflow states, the three permission audiences, anonymous/public/brand/require-identity with `public_url`, approval + approvers, the ChatOps command), `form archive`, the `form questions add|edit|delete|reorder` group, resolving people by email, `--no-approvers`, the 3 report-channel cap, and the **create requires ≥ 1 question** rule (`questions_required`) — is all available. If `dailybot --version` is below 3.7.0, ask the developer to run `dailybot upgrade`. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The full authoring surface — `form create`, `form config` (workflow states, the three permission audiences, anonymous/public/brand/require-identity with `public_url`, approval + approvers, the ChatOps command), `form archive`, the `form questions add|edit|delete|reorder` group, resolving people by email, `--no-approvers`, the 3 report-channel cap, and the **create requires ≥ 1 question** rule (`questions_required`) — is all available. If `dailybot --version` is below 3.8.0, ask the developer to run `dailybot upgrade`. Everything above this point *reads* and *responds to* forms. This section *builds and reshapes* them. An agent with the right permissions can now create a form, wire up its workflow states, permission audiences, approval flow, and ChatOps command, and manage its questions — all end-to-end from the CLI, without opening the Dailybot webapp. diff --git a/.agents/skills/dailybot/forms/_custom-template/SKILL.md b/.agents/skills/dailybot/forms/_custom-template/SKILL.md index 68fdbad..827cd62 100644 --- a/.agents/skills/dailybot/forms/_custom-template/SKILL.md +++ b/.agents/skills/dailybot/forms/_custom-template/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-custom-form-template description: STARTER TEMPLATE — do not consume this file in place. Copy it to .agents/skills/dailybot-custom//SKILL.md in your own repo, then customize. This is the bootstrap skeleton for authoring a per-form custom skill that the universal dailybot-forms resolver will load from .dailybot/profile.json. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.dailybot.com/skill.md user-invocable: false allowed-tools: Bash, Read, Grep, Glob diff --git a/.agents/skills/dailybot/health/SKILL.md b/.agents/skills/dailybot/health/SKILL.md index 96b7bc2..ee610fe 100644 --- a/.agents/skills/dailybot/health/SKILL.md +++ b/.agents/skills/dailybot/health/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-health description: Announce agent online/offline status to Dailybot and receive pending messages from the team. Use for long-running or scheduled agents to stay visible and pick up instructions. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.dailybot.com/skill.md user-invocable: false 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)"}]}} @@ -12,7 +12,7 @@ allowed-tools: Bash, Read, Grep, Glob You announce the agent's status (online, working, offline, degraded) to Dailybot so the team knows whether the agent is alive and what it's doing. Health check responses also deliver pending messages from the team. -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). --- diff --git a/.agents/skills/dailybot/kudos/SKILL.md b/.agents/skills/dailybot/kudos/SKILL.md index b0a4014..d8b2a2f 100644 --- a/.agents/skills/dailybot/kudos/SKILL.md +++ b/.agents/skills/dailybot/kudos/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-kudos description: Give kudos to a teammate or to an entire team via Dailybot to recognize their contributions. Use when the developer wants to thank or recognize one person, or recognize a whole team (e.g. "kudos al equipo Engineering"). Do not use for general progress reports — those go through dailybot-report. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,7 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Kudos -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). Giving kudos to a user (`--to`) or a team (`--team`), and browsing kudos (`list` / `org` / `wall-of-fame`), are all available. If `dailybot --version` is below 3.7.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). Giving kudos to a user (`--to`) or a team (`--team`), and browsing kudos (`list` / `org` / `wall-of-fame`), are all available. If `dailybot --version` is below 3.8.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. You help developers recognize teammates by sending kudos through Dailybot. Kudos are team-visible appreciation messages — the whole team sees them in Dailybot's recognition feed and in connected chat platforms (Slack, Teams, Discord). @@ -32,7 +32,7 @@ If the developer has only an API key, kudos still work — the CLI falls back to ## Browsing kudos (read) > **Baseline:** the three read commands below (`kudos list`, `kudos org`, -> `kudos wall-of-fame`) are part of the `dailybot-cli >= 3.7.0` baseline. +> `kudos wall-of-fame`) are part of the `dailybot-cli >= 3.8.0` baseline. Beyond *giving* kudos, an agent can **browse** the recognition feed and read org-wide stats. All three return the standard pagination envelope where diff --git a/.agents/skills/dailybot/messages/SKILL.md b/.agents/skills/dailybot/messages/SKILL.md index 7663b54..acd1713 100644 --- a/.agents/skills/dailybot/messages/SKILL.md +++ b/.agents/skills/dailybot/messages/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-messages description: Check for pending messages and instructions from your team via Dailybot. Use when starting a work session, when idle, or when asked what to work on next. Messages are instructions that should influence your work. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.dailybot.com/skill.md user-invocable: false 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)"}]}} @@ -14,7 +14,7 @@ You check for pending messages and instructions from the developer's team. Messa This is the "what should I work on next?" skill. -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). --- diff --git a/.agents/skills/dailybot/report/SKILL.md b/.agents/skills/dailybot/report/SKILL.md index c849f8f..4c5b446 100644 --- a/.agents/skills/dailybot/report/SKILL.md +++ b/.agents/skills/dailybot/report/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-report description: Report work progress to Dailybot. Activate after completing a discrete task or subtask, or after any batch of edits that modifies 3 or more files. Compose a standup-style update describing what changed and why. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -123,10 +123,10 @@ trigger in a previous session. #### Check whether hooks apply, and whether they are already installed -1. **CLI version.** Run `dailybot --version`. If it reports below `3.7.0` - (or the CLI is absent), the `dailybot hook` group does not exist — skip - Step 0b silently and continue to Step 1. The Step 0a trigger alone still - works. +1. **CLI version.** Run `dailybot --version`. If it reports below `3.8.0` + (or the CLI is absent), skip Step 0b silently and continue to Step 1 — + the pack baseline is `dailybot-cli >= 3.8.0`, and the Step 0a trigger + alone still works on older installs. 2. **Harness support.** If the current harness has no lifecycle-hook system (e.g. Cline today), skip Step 0b silently — Step 0a covers it. 3. **Already installed?** Check whether the hook config already references diff --git a/.agents/skills/dailybot/report/hooks.md b/.agents/skills/dailybot/report/hooks.md index 5c76e12..e51e5d5 100644 --- a/.agents/skills/dailybot/report/hooks.md +++ b/.agents/skills/dailybot/report/hooks.md @@ -12,7 +12,7 @@ in once, and from then on the harness re-arms the reminders in every future session, container, and repo. No human reminders, no reliance on the model's memory. -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The `dailybot hook` command group +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The `dailybot hook` command group > is available at this floor. > Check with `dailybot --version`; if older, ask the developer to run > `dailybot upgrade` once. Hooks installed against an older CLI fail @@ -163,7 +163,7 @@ the only remaining per-person step is `dailybot login`, and the | `soft_turn_threshold` | `8` (`5` in `continuous` mode when omitted) | Agent turns without a report before a soft nudge is eligible | Invalid `mode` values fall back to `"balanced"`; invalid `soft_turn_threshold` - values fall back to the mode default. (Part of the `dailybot-cli >= 3.7.0` + values fall back to the mode default. (Part of the `dailybot-cli >= 3.8.0` baseline; much older CLIs ignore `mode`/`soft_turn_threshold` and stay on the balanced defaults. diff --git a/.agents/skills/dailybot/shared/auth.md b/.agents/skills/dailybot/shared/auth.md index 0a43e62..ab7316a 100644 --- a/.agents/skills/dailybot/shared/auth.md +++ b/.agents/skills/dailybot/shared/auth.md @@ -45,7 +45,7 @@ treat that as session-wide consent. > [!NOTE] > **Installing a specific version.** Both installers default to the latest -> release but accept a version pin (the skill-pack baseline is **`dailybot-cli >= 3.7.0`**): +> release but accept a version pin (the skill-pack baseline is **`dailybot-cli >= 3.8.0`**): > - `install.sh` — set `DAILYBOT_VERSION=` in the environment, or > pass `bash -s -- --version `. Example (drop it into the verified > snippet below, right before `bash /tmp/install.sh`): diff --git a/.agents/skills/dailybot/shared/dashboard-urls.md b/.agents/skills/dailybot/shared/dashboard-urls.md index 7a9e4b4..55f752b 100644 --- a/.agents/skills/dailybot/shared/dashboard-urls.md +++ b/.agents/skills/dailybot/shared/dashboard-urls.md @@ -1,6 +1,6 @@ # Shared reference — Dailybot dashboard URLs -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The > `--app-url` flag and `DAILYBOT_APP_URL` env var for configuring the dashboard > base URL are available at this floor, as is the per-profile `app_url` in > [`env-json.md`](env-json.md). diff --git a/.agents/skills/dailybot/shared/env-json.md b/.agents/skills/dailybot/shared/env-json.md index c679e64..17c7586 100644 --- a/.agents/skills/dailybot/shared/env-json.md +++ b/.agents/skills/dailybot/shared/env-json.md @@ -294,9 +294,9 @@ Rules: Developer: *"I need to test against my local Dailybot instance for this project without breaking my prod login."* ```bash -# 1. Confirm CLI >= 3.7.0 (env command exists). +# 1. Confirm CLI >= 3.8.0 (pack baseline; env command exists). dailybot env --help >/dev/null 2>&1 || { - echo "This feature requires dailybot-cli >= 3.7.0. Run: dailybot upgrade" >&2 + echo "This feature requires dailybot-cli >= 3.8.0. Run: dailybot upgrade" >&2 } # 2. Ensure the gitignore covers .dailybot/* (create if needed). @@ -438,7 +438,7 @@ That's what `~/.config/dailybot/agents.json` (global profiles) is for — see `d ## Version compatibility -- Requires **`dailybot-cli >= 3.7.0`**. Older CLIs never look at `.dailybot/env.json` and treat it as harmless clutter. +- Requires **`dailybot-cli >= 3.8.0`**. Older CLIs never look at `.dailybot/env.json` and treat it as harmless clutter. - The Dailybot agent skill pack targeting this doc requires the same floor. - If a developer is on an older CLI, offer to upgrade first: `dailybot upgrade` (auto-detects install method). diff --git a/.agents/skills/dailybot/shared/list-query-and-errors.md b/.agents/skills/dailybot/shared/list-query-and-errors.md index c48cec8..b9a05e6 100644 --- a/.agents/skills/dailybot/shared/list-query-and-errors.md +++ b/.agents/skills/dailybot/shared/list-query-and-errors.md @@ -1,10 +1,10 @@ # Shared reference — list query flags, pagination, and machine-readable errors -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). Everything on this page — the shared +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). Everything on this page — the shared > list query flags, the `{count, next, previous, results}` pagination envelope, > the `Showing X of N` footer, the machine-readable error `code` dispatch, and > the API-key / Bearer parity + free-plan gating rules — is available at this -> floor. If `dailybot --version` is below 3.7.0, ask the developer to run +> floor. If `dailybot --version` is below 3.8.0, ask the developer to run > `dailybot upgrade`. This is the **single source of truth** for behavior shared across every @@ -145,6 +145,8 @@ In `--json` mode the error surfaces as `{ error, status, code, detail }`. | `insufficient_role` | The caller's role is below what the action requires. Carries the required and current role. | Name the required role; suggest an admin/manager runs it. | | `member_in_scope_required` | The caller must be a member of the targeted scope (team/check-in/form). | Pick a scope the caller belongs to. | | `org_admin_required` | The endpoint is org-admin only (e.g. `kudos org`, `chat send --send-as-user`, webhook/team-member management). | Only an org admin can run it — a member must ask an admin or use an admin API key. Not a session problem. | +| `workflow_execute_not_allowed` | The caller doesn't have permission to execute (trigger) workflows. | An admin or a user with the execute permission must run it. | +| `workflow_frozen` | The workflow is disabled (frozen) and cannot be triggered. | Tell the developer; the workflow must be re-enabled in the Dailybot web app. | ### 400 — bad input @@ -160,6 +162,19 @@ In `--json` mode the error surfaces as `{ error, status, code, detail }`. | `send_as_user_not_found` | The `--send-as-user` UUID doesn't resolve to a user. | Confirm the user exists (`dailybot user list`). | | `invalid_kudos_filter` | `kudos list --filter` got an unrecognized value. | Use `received` or `given` (the CLI also accepts `KUDOS_RECEIVED` / `KUDOS_GIVEN`). | | `send_message_validation_error` | `chat send` payload is missing content or otherwise invalid. | Read the `detail` — it names the problem (e.g. no message/buttons/image). | +| `button_link_and_callback_conflict` | A button has both a link `url` and a `callback_*` field. | Use one or the other — a button is either a link or an interactive callback. | +| `button_callback_conflict` | A button has more than one `callback_*` field. | Only one of `callback_url`/`callback_form`/`callback_command`/`callback_prompt`/`callback_workflow` per button. | +| `button_callback_url_invalid` | `callback_url` is not a valid URL. | Fix the URL. | +| `button_modal_body_invalid` | `modal_body` JSON is malformed or has invalid field types. | Use `{title, submit_label?, blocks: [{type, name, label, …}]}` — not a bare array of fields. | +| `button_callback_form_not_found` | `callback_form` UUID doesn't match a form. | Verify the form UUID (`dailybot form list`). | +| `button_callback_command_invalid` | `callback_command` is not a recognized ChatOps command. | Check the command string. | +| `button_callback_prompt_invalid` | `callback_prompt` is empty or too long. | Fix the prompt text. | +| `button_callback_workflow_not_found` | `callback_workflow` UUID doesn't match a workflow, or the workflow isn't API-triggerable. | Verify the UUID (`dailybot workflow list --filter api_trigger`). | +| `button_response_invalid` | `response` text is empty or too long. | Fix the response text. | +| `button_callback_auth_invalid` | `callback_auth` value is malformed. | Use an object: `{type: "bearer"\|"basic"\|"custom_header", …}` — only with `callback_url`. | +| `buttons_count_out_of_range` | More than 25 buttons on a single message. | Reduce to ≤25 buttons. | +| `workflow_not_triggerable` | `workflow trigger` targeted a workflow whose event type is not `api_trigger`. | Only `api_trigger` workflows can be triggered. Use `workflow list --filter api_trigger`. | +| `workflow_trigger_payload_invalid` | `workflow trigger --payload` is not a valid JSON object or exceeds 8 KiB. | Fix the payload — must be a JSON object ≤8 KiB (measured as sent on the wire). | | `invalid_owner_user_id` | `--owner` value isn't a valid UUID (after resolution). | Fix the UUID or name. | | `too_many_owner_user_ids` | More than 50 `--owner` values. | Narrow the filter — max 50 owners per request. | diff --git a/.agents/skills/dailybot/teams/SKILL.md b/.agents/skills/dailybot/teams/SKILL.md index dae65ca..8f40ba8 100644 --- a/.agents/skills/dailybot/teams/SKILL.md +++ b/.agents/skills/dailybot/teams/SKILL.md @@ -1,7 +1,7 @@ --- name: dailybot-teams description: Read and resolve teams visible to the authenticated user. Use when the developer references a team by name (for kudos targeting, member lookup, or routing context) and an agent needs to obtain its UUID. Other Dailybot skills (kudos, messages) delegate team-name resolution to this skill rather than duplicating the logic. -version: "3.10.3" +version: "3.11.0" documentation_url: https://www.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)"}]}} @@ -10,7 +10,7 @@ allowed-tools: Bash, Read, Grep, Glob # Dailybot Teams -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). `dailybot team list`, `dailybot team get`, and the account-context commands `dailybot me` / `org` / `user get` are all available. If `dailybot --version` is below 3.7.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). `dailybot team list`, `dailybot team get`, and the account-context commands `dailybot me` / `org` / `user get` are all available. If `dailybot --version` is below 3.8.0, ask the developer to run `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) for install commands and version-check tooling. You help agents resolve and read teams visible to the logged-in user. Teams are how Dailybot groups people inside an organization — they're the targets for team-scoped kudos, the routing context for some messages, and the source of truth for "who's in X?". @@ -170,7 +170,7 @@ Returns the team plus its membership when `--with-members` is set. Useful when t ## Step 4.5 — Read a single user, and your own account context -> **Baseline:** `user get`, `me`, and `org` are part of the `dailybot-cli >= 3.7.0` baseline. +> **Baseline:** `user get`, `me`, and `org` are part of the `dailybot-cli >= 3.8.0` baseline. The org directory has always been readable in bulk via `dailybot user list` (names + UUIDs; emails hidden as PII). You can also read diff --git a/.agents/skills/dailybot/workflow/SKILL.md b/.agents/skills/dailybot/workflow/SKILL.md index 9a052b3..f35f407 100644 --- a/.agents/skills/dailybot/workflow/SKILL.md +++ b/.agents/skills/dailybot/workflow/SKILL.md @@ -1,34 +1,37 @@ --- name: dailybot-workflow -description: List and inspect Dailybot workflows (read-only) — enumerate the workflows configured for the organization and read one workflow's configuration. Use when the developer asks "list my workflows", "show workflows", or "what's in the release workflow?". Writes are done in the Dailybot web app; this skill only reads. Plan-gated feature. -version: "3.10.3" +description: List, inspect, and trigger Dailybot workflows — enumerate the workflows configured for the organization, read one workflow's configuration, and fire API-triggerable workflows on demand. Use when the developer asks "list my workflows", "show workflows", "what's in the release workflow?", "trigger the deploy workflow", or "fire automation X". Creating/editing workflows is done in the Dailybot web app. Plan-gated feature. +version: "3.11.0" documentation_url: https://www.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 Workflows (read-only) +# Dailybot Workflows -> **Requires `dailybot-cli >= 3.7.0`** (the skill-pack baseline). The `dailybot workflow list` / -> `dailybot workflow get` command group is available. If -> `dailybot --version` reports below 3.7.0, ask the developer to run -> `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version) -> for install commands and version-check tooling. +> **Requires `dailybot-cli >= 3.8.0`** (the skill-pack baseline). The +> `dailybot workflow list` / `get` / `trigger` command group — including +> `--filter api_trigger` and `--payload` — is available at this floor. If +> `dailybot --version` reports below 3.8.0, ask the developer to run +> `dailybot upgrade`. See [`../SKILL.md` § Required Dailybot CLI +> version](../SKILL.md#required-dailybot-cli-version) for install commands and +> version-check tooling. -You help developers **read** the workflows configured for their organization. -Workflows are Dailybot's automation objects (multi-step sequences that connect -check-ins, forms, and chat actions). This skill is **read-only** — it lists -workflows and reads one workflow's configuration so an agent can reference or -explain them. +You help developers **read** and **trigger** the workflows configured for +their organization. Workflows are Dailybot's automation objects (multi-step +sequences that connect check-ins, forms, and chat actions). -> **Writes are web-app only.** Creating, editing, enabling, or deleting a -> workflow is done in the Dailybot web app — there is **no** CLI write path. -> Do not attempt to mutate a workflow from the CLI; if the developer wants to -> change one, point them at the Dailybot web app. +- **List / Get** — enumerate workflows and inspect their configuration. +- **Trigger** — fire an API-triggerable workflow on demand, optionally with a + JSON payload that the workflow can reference as `{{trigger.body.*}}`. + +> **Creating / editing workflows is web-app only.** There is no CLI path for +> creating, editing, enabling, or deleting a workflow. If the developer wants +> to change one, point them at the Dailybot web app. > **Plan-gated feature.** Workflows are available on higher-tier plans. On a -> plan without them (and on the FREE plan generally) these reads return +> plan without them (and on the FREE plan generally) these operations return > `403 plan_upgrade_required` with an `upgrade_url` — surface the upgrade path > and stop. See [`../shared/list-query-and-errors.md`](../shared/list-query-and-errors.md) § 6. @@ -36,7 +39,7 @@ explain them. ## Auth model — API key or login -Workflow reads accept **either** a Bearer login session (`dailybot login`) +Workflow commands accept **either** a Bearer login session (`dailybot login`) **or** an org API key (`DAILYBOT_API_KEY`). Results are scoped to the acting identity's permissions (the server resolves the API key's owner). See [`../shared/list-query-and-errors.md`](../shared/list-query-and-errors.md) § 6 @@ -46,10 +49,17 @@ for the full API-key ↔ Bearer parity and plan-gating rules. ## When to Use +**List / inspect:** - "list my workflows", "show the org's workflows", "what workflows do we have?" - "show me the release workflow", "what's configured in workflow X?" - Another skill needs a workflow's UUID or its configuration for context. +**Trigger:** +- "trigger the deploy workflow", "fire automation X", "run the onboarding workflow" +- "trigger workflow `` with this payload" +- A chat button with `callback_workflow` fires the same path — see + [`../chat/SKILL.md`](../chat/SKILL.md) § Workflow trigger buttons. + Do **not** use this skill to *create* or *change* a workflow — that's a web-app operation. And do not confuse it with **form workflow states** (the `draft → review → released` states inside a single form) — those are managed in @@ -100,8 +110,16 @@ dailybot workflow list --search release --page-size 20 --json # Fetch every page explicitly: dailybot workflow list --all --json + +# Filter to only API-triggerable workflows (client-side filter): +dailybot workflow list --filter api_trigger --json ``` +The `--filter api_trigger` flag is a client-side convenience — it returns only +workflows whose event type is `api_trigger` ("When triggered via API or +button"), i.e. the workflows you can fire from `workflow trigger` or from a +chat button's `callback_workflow`. + --- ## Step 3 — Inspect a Workflow @@ -116,14 +134,69 @@ developer rather than re-deriving them. --- -## Step 4 — Error Handling +## Step 4 — Trigger a Workflow + +> **Only `api_trigger` workflows can be triggered.** Workflows with other event +> types (schedule, form submission, etc.) are not triggerable from the CLI — +> the server returns `workflow_not_triggerable`. + +> **Confirm before triggering.** `workflow trigger` is side-effecting — it can +> start a deploy or other automation and enqueues a run. Restate the target +> workflow (name + UUID) and the payload (or "no payload") to the developer and +> wait for an explicit yes before running the command. Do not fire workflows +> unprompted. Same confirm-before-write posture as chat button sends. + +```bash +dailybot workflow trigger --json +``` + +### With a JSON payload + +The optional `--payload` flag passes a JSON object (≤8 KiB) that the workflow +can reference in its steps as `{{trigger.body.}}`: + +```bash +dailybot workflow trigger \ + --payload '{"version": "v2.5", "environment": "production"}' --json +``` + +### Trigger behavior + +- **Success** returns HTTP `202` — the workflow run is **queued**, not + synchronous. There is no run output in the response; the workflow executes + asynchronously on the server. +- The payload must be a valid JSON object (not an array or scalar). Payloads + over 8 KiB are rejected with `workflow_trigger_payload_invalid`. +- The caller must have permission to execute workflows. If not, + `workflow_execute_not_allowed` is returned. +- A frozen (disabled) workflow returns `workflow_frozen`. +- An unknown UUID returns `404`. + +### CLI flag cheat sheet + +| Flag | Description | +|------|-------------| +| `` | Workflow UUID (positional, required) | +| `--payload` | JSON object payload (≤8 KiB); available to the workflow as `{{trigger.body.*}}` | +| `--json` | Emit the raw API response as JSON to stdout | + +### Cross-reference: chat buttons + +Chat messages can include buttons that trigger workflows on click via the +`callback_workflow` field (or the `--workflow-button` shorthand). This uses the +same server-side trigger mechanism — see +[`../chat/SKILL.md`](../chat/SKILL.md) § Workflow trigger buttons. + +--- + +## Step 5 — Error Handling Match on the structured `code` field, never the prose `detail`. The full error-code table (including `plan_upgrade_required`, `insufficient_role`, and the 429 back-off behavior) is in [`../shared/list-query-and-errors.md`](../shared/list-query-and-errors.md) § 5. -Most likely codes for this skill: +### List / Get errors - `plan_upgrade_required` (403, carries `upgrade_url`) — workflows aren't on the org's plan. Surface the upgrade link and stop. @@ -131,9 +204,20 @@ Most likely codes for this skill: read workflows. Suggest an admin runs it. - Not authenticated (401) — guide through `dailybot login`. +### Trigger errors + +| Status | Code | Meaning | Agent behavior | +|--------|------|---------|----------------| +| `202` | | Queued — the workflow run is enqueued | Surface success; note the run is async (no output). | +| `400` | `workflow_not_triggerable` | The workflow's event type is not `api_trigger` | Only `api_trigger` workflows can be triggered. Use `workflow list --filter api_trigger` to find eligible ones. | +| `400` | `workflow_trigger_payload_invalid` | Payload is not a valid JSON object, or exceeds 8 KiB | Fix the payload — must be a JSON object ≤8 KiB. | +| `403` | `workflow_execute_not_allowed` | The caller doesn't have permission to execute workflows | An admin or a user with execute permission must run it. | +| `403` | `workflow_frozen` | The workflow is disabled (frozen) | Tell the developer; the workflow must be re-enabled in the web app. | +| `404` | | Workflow UUID not found | Verify the UUID (`dailybot workflow list`). | + --- -## Step 5 — HTTP Fallback (when CLI is unavailable) +## Step 6 — HTTP Fallback (when CLI is unavailable) See [`../shared/http-fallback.md`](../shared/http-fallback.md) for base patterns. Workflow endpoints accept **either** Bearer token or `X-API-KEY`. @@ -152,21 +236,37 @@ curl -s -H "Authorization: Bearer $DAILYBOT_BEARER_TOKEN" \ https://api.dailybot.com/v1/workflows// ``` +### Trigger a workflow + +```bash +curl -s -X POST \ + -H "Authorization: Bearer $DAILYBOT_BEARER_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"payload": {"version": "v2.5"}}' \ + https://api.dailybot.com/v1/workflows//trigger/ +``` + +The `payload` field is optional. On success, the response is `202` with a +confirmation body. The workflow run is asynchronous. + --- -## Step 6 — Confirm +## Step 7 — Confirm -- **Success** — surface the requested workflow(s) directly. If the count footer +- **List success** — surface the requested workflow(s) directly. If the count footer showed `X < N`, tell the developer the view is truncated and how to widen it. +- **Trigger success** — confirm the workflow was queued: + > *"Workflow `` triggered (queued). The run executes asynchronously — there is no output to wait for."* - **Failure** — warn briefly. For `plan_upgrade_required`, name the plan gap and - surface the `upgrade_url`. + surface the `upgrade_url`. For `workflow_not_triggerable`, explain that only + `api_trigger` workflows can be fired. - **Skipped** — say nothing. --- ## Non-Blocking Rule -Workflow reads must **never block your primary work**. If the CLI is missing, +Workflow operations must **never block your primary work**. If the CLI is missing, auth fails, the feature isn't on the plan, the network is down, or any command errors: @@ -182,5 +282,6 @@ errors: - [`../shared/list-query-and-errors.md`](../shared/list-query-and-errors.md) — list query flags, pagination envelope, error codes, plan gating - [`../shared/auth.md`](../shared/auth.md) — authentication setup - [`../shared/http-fallback.md`](../shared/http-fallback.md) — HTTP API fallback patterns +- [`../chat/SKILL.md`](../chat/SKILL.md) — chat buttons can trigger workflows via `callback_workflow` - **Live API spec:** `https://api.dailybot.com/api/swagger/` - **Full agent API skill:** `https://www.dailybot.com/skill.md` diff --git a/AGENTS.md b/AGENTS.md index 75f59db..53f4ad9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -491,7 +491,7 @@ dailybot agent update --name "Claude Code" --milestone \ --metadata '{"model":"claude-opus-4-7","plan":"PLAN_agent_profiles","repo":"cli"}' ``` -Full philosophy, what to report, and what to skip: [.agents/skills/dailybot/report/SKILL.md](.agents/skills/dailybot/report/SKILL.md) (part of the vendored Dailybot agent skill pack at `.agents/skills/dailybot/`, **v3.10.3**, which also ships the `chat` (incl. `--send-as-user`/`--send-as-me`), the `conversation` sub-skill (open/reuse a Slack group DM with the bot and post a report, `conversation open`), `kudos` (give + browse: `list`/`org`/`wall-of-fame`), `teams` (+ account context `me`/`org`/`user get`), `channels`, the read-only `workflow` (`list`/`get`), the full `forms` (org-scoped `list` + `--mine`) / `checkin` **authoring** sub-skills, and the `env` sub-skill (per-repo API keys via the opt-in, gitignored `.dailybot/env.json`) — plus the shared list pagination/search/date filters and machine-readable error-code reference. The whole pack requires `dailybot-cli >= 3.7.0` (single baseline)). Key rules: +Full philosophy, what to report, and what to skip: [.agents/skills/dailybot/report/SKILL.md](.agents/skills/dailybot/report/SKILL.md) (part of the vendored Dailybot agent skill pack at `.agents/skills/dailybot/`, **v3.11.0**, which also ships the `chat` (incl. `--send-as-user`/`--send-as-me`, interactive buttons with approval flows / workflow triggers / modals / callbacks), the `conversation` sub-skill (open/reuse a Slack group DM with the bot and post a report, `conversation open`), `kudos` (give + browse: `list`/`org`/`wall-of-fame`), `teams` (+ account context `me`/`org`/`user get`), `channels`, the `workflow` surface (`list`/`get`/`trigger`, plus `--filter api_trigger`), the full `forms` (org-scoped `list` + `--mine`) / `checkin` **authoring** sub-skills, and the `env` sub-skill (per-repo API keys via the opt-in, gitignored `.dailybot/env.json`) — plus the shared list pagination/search/date filters and machine-readable error-code reference. The whole pack requires `dailybot-cli >= 3.8.0` (single baseline)). Key rules: - 1–3 sentences, **always in English** - Focus on WHAT + WHY, never "Agent completed…" diff --git a/docker/local/cli/Dockerfile b/docker/local/cli/Dockerfile index 7dbe742..cb39f09 100644 --- a/docker/local/cli/Dockerfile +++ b/docker/local/cli/Dockerfile @@ -46,7 +46,7 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | d # dev-user). `-f` makes an HTTP error a non-zero curl exit instead of piping an error # page into bash; the `SHELL … pipefail` above makes a failing curl abort the build. # install.sh itself runs `set -euo pipefail`, so failures inside it abort too. -RUN curl -fsSL https://cli.dailybot.com/install.sh | DAILYBOT_VERSION='>=3.7.2' bash +RUN curl -fsSL https://cli.dailybot.com/install.sh | DAILYBOT_VERSION='>=3.8.0' bash # Install all Python dev/runtime deps from the repo's lock file. # This single COPY/RUN pair is the only build cache layer pip touches — it