diff --git a/.agents/docs/skills_agents_catalog.md b/.agents/docs/skills_agents_catalog.md index 77ac157..1c09807 100644 --- a/.agents/docs/skills_agents_catalog.md +++ b/.agents/docs/skills_agents_catalog.md @@ -32,6 +32,7 @@ The full pack lives under [`.agents/skills/dailybot/`](../skills/dailybot/) (rou | `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; `--send-as-user`/`--send-as-me` identity, CLI ≥ 2.0.0). Requires `dailybot-cli >= 1.13.0` | +| `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). Requires `dailybot-cli >= 3.2.0` | | `dailybot-ask` | [`skills/dailybot/ask/SKILL.md`](../skills/dailybot/ask/SKILL.md) | Asking the Dailybot AI a one-shot, headless question. Requires `dailybot-cli >= 1.15.0` | | `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). Requires `dailybot-cli >= 2.0.0` | @@ -82,6 +83,7 @@ Persona definitions. Use these as the system prompt / role when spawning a sub-a | Create a new repo-specific skill or persona | `/skill-create` or `/agent-create` | (any) | | Report what you just shipped | `dailybot-report` | (any) | | Send a Slack/Teams/Discord/Google Chat message (DM, channel, team; report-style threads) | `dailybot-chat` | (any) | +| Open (or reuse) a Slack group DM with the bot + teammates and post a report | `dailybot-conversation` | (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) | diff --git a/.agents/skills/dailybot/SKILL.md b/.agents/skills/dailybot/SKILL.md index 2e09fd8..9753d31 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), 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. Routes to the right sub-skill based on intent. Use when the developer mentions Dailybot or wants to interact with their team. -version: "3.3.0" +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. Routes to the right sub-skill based on intent. Use when the developer mentions Dailybot or wants to interact with their team. +version: "3.4.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)"}]}} @@ -50,7 +50,7 @@ machine — permissions, consent guarantees, and a self-audit you can run — is ## What it does -Twelve coordinated capabilities, with smart routing between them: +Thirteen coordinated capabilities, with smart routing between them: | Capability | Sub-skill | When it fires | |------------|-----------|---------------| @@ -59,11 +59,12 @@ Twelve coordinated capabilities, with smart routing between them: | **Message polling** | `dailybot-messages` | Session start, idle moments, or when the developer asks "what should I work on?" | | **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), editing the parent or any reply afterward, and **sending as a user's identity** (`--send-as-user` / `--send-as-me`; Slack, admin-only) | +| **Conversations** | `dailybot-conversation` | Developer wants to **open (or reuse) a Slack group DM** that includes the Dailybot bot plus named teammates — then optionally post a report to it in the same call (`conversation open -u … -m …`). Idempotent (same people → same channel). Slack only, org-admin only | | **Health & status** | `dailybot-health` | Long-running sessions; periodic heartbeats | | **Check-ins** | `dailybot-checkin` | Full check-in lifecycle: list/status, complete, inspect questions, history (now `--search`-able), edit, reset, backfill/future-date — **plus authoring**: create/configure a check-in (schedule, participants, reminders, privacy, smart/AI) and manage its questions | | **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 (list + responses now support pagination / search / date filters) — **plus authoring**: create/configure a form (workflow states, permissions, anonymous/public/approval, ChatOps command) and manage its questions | +| **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 | | **Report channels** | `dailybot-channels` | Discover report-channel UUIDs to attach to forms/check-ins with `--report-channel` | @@ -230,8 +231,10 @@ the full step-by-step workflow. | "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) | | "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 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) | -| "send this to #releases as me", "post as in Slack", "send the message with Jane's identity" | **Chat** → read [`chat/SKILL.md`](chat/SKILL.md) § Send as a user's identity (`--send-as-user` / `--send-as-me`) | +| "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 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) | ### Auto-activation (no explicit request) @@ -258,6 +261,14 @@ outward (the agent → a chat platform / the dashboard). If the developer wants *answer from* Dailybot, route to **Ask**; if they want to *tell* the team something, route to **Report** (default) or **Chat**. +**Chat vs Conversations.** Route to **Chat** when the developer already has a +target (a channel id, a known DM, a team) and just wants to *post/edit*. Route to +**Conversations** when they want to *create or obtain a Slack group of specific +people* (with the bot) before posting — `conversation open` returns the group's +channel id (idempotently) and can post the first message itself. A common combo: +**Conversations** to open the group + capture the id, then **Chat** with +`--channel-type group_chat` for any richer follow-up (threads, buttons). + If the intent is ambiguous, default to **Report** — it's the most common use case. diff --git a/.agents/skills/dailybot/ask/SKILL.md b/.agents/skills/dailybot/ask/SKILL.md index 2d52e66..fc17b31 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/channels/SKILL.md b/.agents/skills/dailybot/channels/SKILL.md index 5c1b71c..3136633 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/chat/SKILL.md b/.agents/skills/dailybot/chat/SKILL.md index 601fc6d..d36d7cb 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.3.0" +version: "3.4.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)"}]}} @@ -47,6 +47,13 @@ Trigger phrases the agent should recognize: **Do not** send chat messages autonomously without the developer's explicit request — chat messages are visible to other people and carry the developer's own identity (with a login session) or the bot identity (with an API key). Always confirm before sending unless the developer pre-approved a flow (`--yes`-style intent). +> **Need to create a Slack group of people first?** This sub-skill posts to an +> *already-known* target (channel id, DM, or team). To **open (or reuse) a Slack +> group DM with specific teammates + the bot** and get its channel id, use +> [`../conversation/SKILL.md`](../conversation/SKILL.md) (`dailybot conversation +> open`) — then come back here with `--channel --channel-type group_chat` for +> any richer follow-up (threads, buttons, custom identity). + --- ## Auth model — both login Bearer and org API key are supported diff --git a/.agents/skills/dailybot/checkin/SKILL.md b/.agents/skills/dailybot/checkin/SKILL.md index 4b16c4a..4a71246 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/conversation/SKILL.md b/.agents/skills/dailybot/conversation/SKILL.md new file mode 100644 index 0000000..b6206fc --- /dev/null +++ b/.agents/skills/dailybot/conversation/SKILL.md @@ -0,0 +1,234 @@ +--- +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.4.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 Conversations + +> **Requires `dailybot-cli >= 3.2.0`** — the release that introduced the +> `dailybot conversation open` command (and `form list --mine`). The rest of the +> pack works from the `>= 3.1.2` baseline, but this sub-skill's command does not +> exist below 3.2.0: if `dailybot --version` reports lower, ask the developer to +> run `dailybot upgrade` and continue with your primary task meanwhile. See +> [`../SKILL.md` § Required Dailybot CLI version](../SKILL.md#required-dailybot-cli-version). + +You help developers **open a private Slack group DM (MPIM)** that includes the +Dailybot bot plus one or more teammates, and — in the same step — optionally post +a message or report to that group. Opening is **idempotent**: the same set of +participants always returns the same channel, so "open it, or reuse the existing +one" is a single call. This is the natural first half of "start a group with Jane +and Bob and send them the report." + +This is distinct from **`dailybot-chat`** (which sends to an *already-known* +channel, DM, or team) and from **`dailybot-channels`** (which lists report-channel +UUIDs for form/check-in authoring). If the developer already has a channel id and +just wants to post, route to **chat**. If they want to *create/obtain* a group of +people, start here. + +--- + +## When to Use + +- "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 / analysis / summary" +- "Get me a channel with these three people so the bot can post there" +- Any flow that needs a **group channel id** before posting — this command + returns it (creating the group if needed, reusing it if it already exists) + +Do **not** use this for posting to an existing channel/DM (→ **chat**), for +discovering report channels (→ **channels**), or on non-Slack orgs (the command +returns a clear "Slack only" error). + +--- + +## Auth model & permissions + +`POST /v1/open-conversation/` accepts **either** an org API key (`X-API-KEY`) or a +login **Bearer** token (`dailybot login`) — the CLI prefers the API key and falls +back to the Bearer token, the same header logic as `chat send`. Two server-enforced +gates: + +| Gate | Rule | On failure | +|------|------|------------| +| **Platform** | Slack only | `406 open_conversation_not_supported` → "Group conversations are only supported for Slack workspaces." | +| **Role** | Organization admin only | `403` → "This command requires organization admin privileges." | + +Never re-implement these checks client-side; surface the server's decision and +fall back to the non-blocking rule. + +--- + +## Step 1 — Verify Setup + +Follow [`../shared/auth.md`](../shared/auth.md), then confirm a credential exists: + +```bash +dailybot status --auth >/dev/null 2>&1 || { echo "Run: dailybot login"; exit 3; } +``` + +If auth fails or the developer declines, skip and continue your primary task. + +--- + +## Step 2 — Resolve the Participants + +Participants can be named three ways — the CLI resolves them for you: + +| You pass | Flag | Resolution | +|----------|------|------------| +| A user UUID | `-u ` | used as-is (no directory lookup) | +| An email | `-e me@example.com` or `-u me@example.com` | resolved via `GET /v1/users/` | +| A name | `-u "Jane Doe"` | resolved via `GET /v1/users/` (unique match required) | + +- `--user` / `-u` (alias `--users`) and `--email` / `-e` (alias `--emails`) are + both **repeatable** and accept **comma-separated** values. +- The org directory is fetched **only** when at least one identifier is not a bare + UUID, so an all-UUID call skips the extra round-trip. +- Duplicates are dropped (first occurrence wins); order is preserved. +- Email/name resolution needs the directory to expose that person — email lookup is + admin/manager-gated server-side. If a name is ambiguous, the CLI lists the + matches so you can disambiguate. When unsure who the developer means, confirm + before opening the group. + +> The bot is added automatically — you do **not** pass the bot as a participant. +> One human participant already makes a valid group with the bot. + +--- + +## Step 3 — Open the Conversation (idempotent) + +```bash +# By UUID (no directory lookup) +dailybot conversation open -u -u + +# By name / email (resolved via the org directory) +dailybot conversation open -u "Jane Doe" -u bob@example.com + +# Headless: capture the channel id for scripting / a follow-up send +CH=$(dailybot conversation open -u -u --json | jq -r .channel) +``` + +The response is `{ "channel": "" }` (human output shows a +panel with the channel + participant names). **Idempotent** — calling again with +the same participants returns the *same* channel, so you never create duplicates. + +### `--json` shape + +```json +{ + "channel": "", + "participants": [ + {"uuid": "", "name": "Jane Doe"}, + {"uuid": "", "name": "Bob Stone"} + ], + "message_sent": false +} +``` + +> When all participants were given as bare UUIDs, `name` echoes the UUID (the +> directory lookup was skipped). Pass names/emails if you want resolved display +> names in the output. + +--- + +## Step 4 — Open **and** post a report in one call + +Add `-m/--message` to post to the freshly opened group immediately. The CLI chains +a `POST /v1/send-message/` with `channel_type: "group_chat"` (the same delivery +path as `dailybot chat send`). + +```bash +dailybot conversation open -u "Jane Doe" -u bob@example.com \ + -m "Report on the latest analysis — summary in this message, details to follow." +``` + +This is the whole "open a group with X and Y and send them the report" flow in a +single command. `--json` then reports `"message_sent": true`. + +> **Markdown rules for the message.** The message renders with the same +> constrained Markdown subset as chat messages — one `#` heading level, real `\n` +> newlines, `**bold**` / `*italic*` / `` `code` `` / links / lists / tables. See +> the **Markdown Content Rules** in [`../chat/SKILL.md`](../chat/SKILL.md) and +> [`../forms/SKILL.md`](../forms/SKILL.md) before composing a longer report. +> +> For richer sends (threads, buttons, custom bot identity), open the group here to +> get the channel id, then use **[`../chat/SKILL.md`](../chat/SKILL.md)** with +> `--channel --channel-type group_chat` — chat owns the full messaging surface. + +--- + +## Step 5 — Error Handling + +Match on the machine-readable `code` (with `--json`), never the prose `detail`. + +| HTTP | `code` | Meaning / agent action | +|------|--------|------------------------| +| 406 | `open_conversation_not_supported` | Org is not on Slack. Tell the developer group DMs are Slack-only; stop. | +| 403 | — | Caller is not an org admin. Explain the command needs admin rights. | +| 400 | `one_or_more_users_not_found` | A participant isn't an active org user. Re-check the names/UUIDs. | +| 400 | `no_valid_users` | The list contained invalid UUIDs. Fix the identifiers. | +| 400 | `params_validation_error` | `users_uuids` wasn't a list — a CLI usage error; re-run with `-u`. | +| 409 | `conversation_can_not_be_opened` | Slack rejected it (a participant may be deactivated on the Slack side). Surface and stop. | +| 401 | — | Not authenticated. Guide through `dailybot login`. | +| 429 | — | Rate limited. Do not retry in a tight loop. | + +The CLI already translates these to friendly messages and exits non-zero; when a +body has no `code` (network / gateway error), warn briefly and fall back to the +non-blocking rule. + +--- + +## Step 6 — HTTP Fallback (CLI unavailable) + +`POST /v1/open-conversation/` accepts **either** `X-API-KEY` or +`Authorization: Bearer`. See [`../shared/http-fallback.md`](../shared/http-fallback.md) +for base patterns. + +```bash +# Open (or fetch) the group — returns {"channel": ""} +curl -s -X POST https://api.dailybot.com/v1/open-conversation/ \ + -H "Authorization: Bearer $DAILYBOT_BEARER_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"users_uuids":["",""]}' + +# Post to the returned group channel (note channel_type=group_chat) +curl -s -X POST https://api.dailybot.com/v1/send-message/ \ + -H "Authorization: Bearer $DAILYBOT_BEARER_TOKEN" \ + -H "Content-Type: application/json" \ + -d '{"message":"Report on the latest analysis…", + "target_channels":[{"id":"","channel_type":"group_chat"}]}' +``` + +--- + +## Step 7 — Confirm + +- **Success** — confirm the channel is ready (and that the message was posted, if + `-m` was used). Example: *"Opened a group DM with Jane and Bob — the bot is in it + and your report is posted."* +- **Failure** — warn briefly and map the `code` to the action in Step 5. +- **Skipped** — say nothing. + +--- + +## Non-Blocking Rule + +Conversation operations must **never block the developer's primary work**. If the +CLI is missing, auth fails, the org isn't on Slack, the caller isn't an admin, or +any command errors: warn briefly, continue the primary task, do not retry +automatically, and do not enter a diagnostic loop. + +--- + +## Additional Resources + +- [`../chat/SKILL.md`](../chat/SKILL.md) — full messaging surface (threads, buttons, identity); use with `--channel-type group_chat` to post to a group you opened here +- [`../teams/SKILL.md`](../teams/SKILL.md) — resolve a person's UUID by name +- [`../shared/auth.md`](../shared/auth.md) — authentication setup +- [`../shared/http-fallback.md`](../shared/http-fallback.md) — HTTP API fallback patterns +- **Full agent API skill:** `https://www.dailybot.com/skill.md` diff --git a/.agents/skills/dailybot/email/SKILL.md b/.agents/skills/dailybot/email/SKILL.md index 84578c3..f08fb44 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/forms/SKILL.md b/.agents/skills/dailybot/forms/SKILL.md index 570d9ba..d8db742 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.3.0" +version: "3.4.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)"}]}} @@ -109,7 +109,7 @@ The resolver step (4) is the customer-extension hook. See **Step 7 — Custom-sk dailybot form list --json ``` -Returns all forms visible to the logged-in user. The shape is stable and machine-readable: +Returns all forms visible to the logged-in user. **As of `dailybot-cli >= 3.2.0` this is org-scoped**: it lists every form the caller can see on the webapp list view — an org **admin sees all** the org's forms; a member sees forms flagged for the list view plus their own. (Before 3.2.0 the endpoint returned only the caller's *own* forms even for admins — a server-side bug; if a developer reports "I only see a handful of my forms," check `dailybot --version` and have them `dailybot upgrade`.) The shape is stable and machine-readable: ```json [ @@ -161,6 +161,17 @@ dailybot form list --all --json dailybot form list --page 2 --page-size 20 --json ``` +### Scope the list to your own forms — `--mine` (CLI >= 3.2.0) + +Since the default is now org-scoped, pass **`--mine`** to narrow the result to +only the forms **you own** (it sends `owner=me` to the API). Useful when an admin +wants their personal forms out of the full org list. + +```bash +# Only the forms I own: +dailybot form list --mine --json +``` + > **The envelope is unconditional.** `GET /v1/forms/` and the responses endpoint > below always return `{count, next, previous, results}`; no query parameter is > needed. See the shared doc. diff --git a/.agents/skills/dailybot/forms/_custom-template/SKILL.md b/.agents/skills/dailybot/forms/_custom-template/SKILL.md index 4526110..ffe5bff 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.3.0" +version: "3.4.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 aadd332..455d75c 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/kudos/SKILL.md b/.agents/skills/dailybot/kudos/SKILL.md index d39fdbc..2ed887d 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/messages/SKILL.md b/.agents/skills/dailybot/messages/SKILL.md index 564a7d4..a4b5e8a 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/report/SKILL.md b/.agents/skills/dailybot/report/SKILL.md index 6529455..a5b7e3c 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/teams/SKILL.md b/.agents/skills/dailybot/teams/SKILL.md index 6f2f981..17e871c 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.3.0" +version: "3.4.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)"}]}} diff --git a/.agents/skills/dailybot/workflow/SKILL.md b/.agents/skills/dailybot/workflow/SKILL.md index 375e400..90ce0d3 100644 --- a/.agents/skills/dailybot/workflow/SKILL.md +++ b/.agents/skills/dailybot/workflow/SKILL.md @@ -1,7 +1,7 @@ --- 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.3.0" +version: "3.4.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)"}]}} diff --git a/AGENTS.md b/AGENTS.md index 8874702..8eb224a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -475,7 +475,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.3.0**, which also ships the `chat` (incl. `--send-as-user`/`--send-as-me`), `kudos` (give + browse: `list`/`org`/`wall-of-fame`), `teams` (+ account context `me`/`org`/`user get`), `channels`, the read-only `workflow` (`list`/`get`), and the full `forms` / `checkin` **authoring** sub-skills — plus the shared list pagination/search/date filters and machine-readable error-code reference. The whole pack requires `dailybot-cli >= 3.1.2`). 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.4.0**, 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`, CLI ≥ 3.2.0), `kudos` (give + browse: `list`/`org`/`wall-of-fame`), `teams` (+ account context `me`/`org`/`user get`), `channels`, the read-only `workflow` (`list`/`get`), and the full `forms` (now org-scoped `list` + `--mine`) / `checkin` **authoring** sub-skills — plus the shared list pagination/search/date filters and machine-readable error-code reference. The whole pack requires `dailybot-cli >= 3.1.2`). Key rules: - 1–3 sentences, **always in English** - Focus on WHAT + WHY, never "Agent completed…" @@ -506,7 +506,7 @@ When applying bot feedback on a PR, agents **must** skip `isMinimized == true` c Reusable **Skills** (slash commands) and **Agents** (specialized personas) live under [`.agents/`](.agents/) — the vendor-neutral standard adopted by most coding agents (Claude Code, Cursor, Codex, Gemini, Copilot, …): -- [`.agents/skills/`](.agents/skills/) — slash-command procedures (e.g., `/quick-fix`, `/release-prep`, `/cli-command-add`, plus the vendored Dailybot pack at `.agents/skills/dailybot/` with `/dailybot-report`, `/dailybot-chat`, `/dailybot-kudos`, `/dailybot-teams`, `/dailybot-forms`, `/dailybot-checkin`, `/dailybot-email`, `/dailybot-health`, `/dailybot-messages`, and the vendored Deep Work Plan pack at `.agents/skills/deepworkplan/` with `/deepworkplan-create`, `/deepworkplan-execute`, `/deepworkplan-refine`, `/deepworkplan-resume`, `/deepworkplan-status`, `/deepworkplan-verify`, `/deepworkplan-onboard`) +- [`.agents/skills/`](.agents/skills/) — slash-command procedures (e.g., `/quick-fix`, `/release-prep`, `/cli-command-add`, plus the vendored Dailybot pack at `.agents/skills/dailybot/` with `/dailybot-report`, `/dailybot-chat`, `/dailybot-conversation`, `/dailybot-kudos`, `/dailybot-teams`, `/dailybot-forms`, `/dailybot-checkin`, `/dailybot-email`, `/dailybot-health`, `/dailybot-messages`, and the vendored Deep Work Plan pack at `.agents/skills/deepworkplan/` with `/deepworkplan-create`, `/deepworkplan-execute`, `/deepworkplan-refine`, `/deepworkplan-resume`, `/deepworkplan-status`, `/deepworkplan-verify`, `/deepworkplan-onboard`) - [`.agents/agents/`](.agents/agents/) — agent personas (e.g., `cli-developer`, `release-manager`, `docs-writer`, `test-engineer`) - [`.agents/commands/`](.agents/commands/) — thin slash-command delegators that route to a sub-skill (the `dwp-*` short aliases, `/skill-create`, `/agent-create`, `/deepworkplan-onboard`) - [`.agents/docs/skills_agents_catalog.md`](.agents/docs/skills_agents_catalog.md) — full skill + persona index diff --git a/docker/local/cli/Dockerfile b/docker/local/cli/Dockerfile index d0bfc34..91b692a 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.1.2' bash +RUN curl -fsSL https://cli.dailybot.com/install.sh | DAILYBOT_VERSION='>=3.2.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