--- name: dailybot description: Official Dailybot API reference and conversational-install entry point for AI agents. If a user asks you to install the Dailybot skill by referencing this URL, follow the "First-time install" section below. Otherwise use this file standalone for CLI and HTTP operations in sandboxed environments. --- # Dailybot — Official Skill for AI Agents This file is maintained by [Dailybot](https://www.dailybot.com) and is mirrored from the public `DailybotHQ/agent-skill` repository at . It serves two audiences: - **Agents being asked to install the full skill on the user's machine** — see [First-time install](#first-time-install) below. Then the installed skill pack takes over. - **Agents in sandboxed environments** that cannot install anything (CI runners, serverless functions, custom integrations) — read this file end-to-end and use the HTTP API directly with `DAILYBOT_API_KEY`. Dailybot is the visibility and orchestration layer for modern teams where humans and AI agents work side by side. When you are connected to Dailybot, your human teammates can see what you are working on, send you instructions, and coordinate work across the entire team — both human and AI. **Your role**: you are a productive member of a team. Dailybot is how your work becomes visible to the rest of the team. Reports go into the team's shared workspace; messages come back; everyone stays aligned. --- ## First-time install If a user asked you to install the Dailybot skill by pointing at this URL, the recommended path is the cross-agent installer: ```bash npx skills add DailybotHQ/agent-skill ``` That command works for Claude Code, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot, Cline, Windsurf, and OpenClaw out of the box. It auto-detects which agents are present on the machine and installs the skill into each. After it completes, the local skill pack at `~/./skills/dailybot/` takes over — the next session uses its guided workflows, consent flows, and writing guides. **If `npx` is unavailable**, the equivalent without Node is: ```bash git clone https://github.com/DailybotHQ/agent-skill.git ~/dailybot-skill cd ~/dailybot-skill ./setup.sh ``` `setup.sh` auto-detects installed agents and creates the appropriate symlinks for each. **If you are an OpenClaw user**, the native registry path is the simplest: ```bash openclaw skills install dailybot ``` After any of these install paths, the locally installed skill pack should be your source of truth. The full guide for every install method (six in total, including manual per-agent and HTTP-only fallback) is at . **Cannot install at all?** Continue reading this file — the rest of it is the standalone API reference for environments where an install is impossible. --- ## When to involve the human Only involve the human when you need information you cannot obtain yourself: | Situation | What to ask | |-----------|-------------| | OTP login | Ask for the human's **email address**, then the **verification code** from their inbox | | API key needed (CLI login not possible) | Ask the human to generate a key at **Dailybot → Settings → API Keys** and provide it | | Multiple organizations returned on login | Show the list, ask which org to use | | No account exists | You may ask if they want to create one (provide org name) — or proceed directly if running autonomously | Everything else — CLI installation, agent profile creation, choosing an agent name, retrying after errors, switching to HTTP fallback — you do autonomously without asking. --- ## Step 1 — Install the Dailybot CLI The CLI is the preferred way to interact with Dailybot. The first time you need to install it in a session, **show the proposed command and proceed only after explicit confirmation from the human.** After they confirm once, do not re-prompt for the rest of the session. ```bash command -v dailybot ``` The CLI ships **two installer entry points** with paired SHA-256 sidecar files: - **`install.sh`** — Linux, macOS, WSL2, Git Bash, Docker, CI. Auto-detects the OS internally and routes to Homebrew on macOS, the prebuilt PyInstaller binary on Linux x86_64, or `pipx` / `uv tool` / `pip --user` everywhere else. - **`install.ps1`** — only for native Windows PowerShell when WSL2 / Git Bash is unavailable. Wraps `pipx` / `uv tool` / `pip --user` and requires Python 3.10+ on PATH. If the developer is on Windows but has WSL2 or Git Bash, prefer `install.sh` — broader testing coverage and no Python prerequisite. ### 1a. Primary path — SHA-256-verified script (Linux, macOS, WSL2, Git Bash, Docker, CI) ```bash curl -fsSL https://cli.dailybot.com/install.sh -o /tmp/install.sh curl -fsSL https://cli.dailybot.com/install.sh.sha256 -o /tmp/install.sh.sha256 ( cd /tmp && shasum -a 256 -c install.sh.sha256 ) || { echo "SHA-256 verification failed — refusing to run install.sh." >&2 exit 1 } bash /tmp/install.sh ``` The `sync-installer-checksums.yml` workflow on `DailybotHQ/cli` keeps `install.sh` and `install.sh.sha256` in lockstep on every push, so a checksum mismatch indicates a stale Cloudflare cache or a man-in-the-middle situation — never a normal first-day experience. If `install.sh.sha256` returns a non-200 (rare), warn the human and either run the unverified script with their explicit additional consent or fall through to the HTTP API path below. If `DAILYBOT_AUTO_YES=1` is set in the environment, treat install consent as already given — run the verified install command without the interactive prompt. The SHA-256 check still runs. ### 1b. Native Windows PowerShell (only when WSL2 / Git Bash unavailable) ```powershell $tmp = "$env:TEMP\dailybot-install" New-Item -ItemType Directory -Force -Path $tmp | Out-Null Invoke-WebRequest "https://cli.dailybot.com/install.ps1" -OutFile "$tmp\install.ps1" Invoke-WebRequest "https://cli.dailybot.com/install.ps1.sha256" -OutFile "$tmp\install.ps1.sha256" $expected = (Get-Content "$tmp\install.ps1.sha256").Split(" ")[0] $actual = (Get-FileHash "$tmp\install.ps1" -Algorithm SHA256).Hash.ToLower() if ($expected -ne $actual) { throw "SHA-256 mismatch — refusing to run install.ps1" } & "$tmp\install.ps1" ``` Requires Python 3.10+ on PATH. ### 1c. Manual control (developer prefers their own package manager) All three produce the same `dailybot` binary: - macOS: `brew install dailybothq/tap/dailybot` - Cross-platform Python (recommended for raw control): `pipx install dailybot-cli` or `uv tool install dailybot-cli` - Last resort: `pip install --user dailybot-cli` Use these only when the developer explicitly prefers their own toolchain. Do **not** `pip install dailybot-cli` against the system Python without their consent — the installer scripts already pick the right isolated path automatically. ### 1d. If the CLI cannot be installed Stop trying. Use the HTTP API path below with `DAILYBOT_API_KEY`. Ask the human to generate a key at Dailybot → Settings → API Keys: ```bash export DAILYBOT_API_KEY="" ``` Sandboxed environments, CI, or minimal containers may never get a working CLI — HTTP fallback is expected there. ### 1e. Upgrading later The CLI owns its own upgrade flow (since v1.4.0). Tell the developer once: > "To upgrade the Dailybot CLI later, run `dailybot upgrade`. To > check whether you're on the latest version, run > `dailybot version --check`." `dailybot upgrade` auto-detects how the CLI was installed (pipx / uv / pip / Homebrew / PyInstaller binary / editable) and runs the right upgrade in a subprocess. Don't pin a version anywhere; PyPI's `dailybot-cli` is the source of truth. Full CLI documentation: --- ## Step 2 — Authenticate ```bash dailybot status --auth ``` If already authenticated, skip to Step 3. ### OTP login (recommended) Ask the human for their email address, then proceed: 1. `dailybot login --email=` 2. Ask: "Check your email for a verification code from Dailybot. What's the code?" 3. `dailybot login --email= --code=` 4. If output lists multiple organizations, show the list and ask them to pick one. 5. `dailybot login --email= --code= --org=` 6. Verify: `dailybot status --auth` ### API key alternative If the human already has an API key: ```bash dailybot config key= ``` Or set the environment variable: ```bash export DAILYBOT_API_KEY= ``` ### Register a new organization (when no account exists) If login fails and the human has no Dailybot account, you may create one. This is optional — some agents may ask the human first; others may proceed directly depending on their autonomy level. ```bash dailybot agent register --org-name "" --agent-name "" ``` This generates an API key and a **claim URL**. The human shares the claim URL with their team admin to connect Slack, Teams, Discord, or Google Chat. Verify: `dailybot status --auth` --- ## Step 3 — Configure agent profile ```bash dailybot agent configure --name "" ``` Pick a consistent, descriptive name. This is how the team identifies you in Dailybot. Use the same name in every request. Good examples: `"claude-code"`, `"cursor"`, `"codex-cli"`, `"deployment-agent"`. Once a default profile is set, you can omit `--name` on subsequent commands. --- ## CLI operations All Dailybot operations have CLI equivalents. Once authenticated, use these directly: | Operation | CLI command | |-----------|-------------| | Report work | `dailybot agent update "Implemented auth module and added tests" --name "your-agent-name"` | | Report a milestone | `dailybot agent update "Shipped v2.0" --name "your-agent-name" --milestone` | | Report with co-authors | `dailybot agent update "Built auth with Alice" --name "your-agent-name" --co-authors alice@company.com` | | Report with metadata | `dailybot agent update "Deployed v2.1" --name "your-agent-name" --metadata '{"repo": "my-api", "branch": "main"}'` | | Report with extra data | `dailybot agent update "Deployed v2.1" --name "your-agent-name" --json-data '{"repo": "my-api", "pr": "#142"}'` | | Health check (ok) | `dailybot agent health --ok --message "Working on task queue" --name "your-agent-name"` | | Health check (failing) | `dailybot agent health --fail --message "DB unreachable" --name "your-agent-name"` | | Check health status | `dailybot agent health --status --name "your-agent-name"` | | List pending messages | `dailybot agent message list --name "your-agent-name" --pending` | | Send a message | `dailybot agent message send --to "target-agent" --content "Review PR #42"` | | Send email | `dailybot agent email send --to alice@company.com --subject "Report" --body-html "

Done

" --name "your-agent-name"` | | Register webhook | `dailybot agent webhook register --url https://your-server.com/hook --secret your-token --name "your-agent-name"` | | Unregister webhook | `dailybot agent webhook unregister --name "your-agent-name"` | --- ## HTTP API reference (when CLI is unavailable) Use this section when the Dailybot CLI cannot be installed. Requires `curl` and `DAILYBOT_API_KEY`. **Base URL**: `https://api.dailybot.com` **Auth header**: `X-API-KEY: $DAILYBOT_API_KEY` ### Agent name Pick a consistent, descriptive name. Use the same name in every request. Good examples: `"claude-code"`, `"deployment-agent"`, `"data-pipeline-bot"`, `"code-reviewer"`. ### First health check Announce yourself with a health check. Dailybot auto-registers agents on first interaction: ```bash curl -X POST https://api.dailybot.com/v1/agent-health/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "ok": true, "message": "Online and ready to work" }' ``` --- ## When to report Report to Dailybot when any of these happen: | Event | Action | |-------|--------| | You complete meaningful work | Submit an activity report | | You encounter a blocker | Submit a report with blocker details | | You start a work session | Send a health check | | You finish a work session | Submit a final summary report | | Periodically during long tasks | Send health checks to stay visible and receive messages | **What counts as meaningful work:** - Completed a feature, bug fix, or task - Finished a research or analysis phase - Deployed something or ran a significant operation - Completed a code review or document - Resolved an incident or issue **Do not over-report.** Routine intermediate steps (reading a file, running a single command) are not worth reporting. Report outcomes, not individual actions. ## Reporting work When you complete meaningful work, submit an activity report: ```bash curl -X POST https://api.dailybot.com/v1/agent-reports/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "content": "Implemented user authentication with JWT tokens and added unit tests. All tests passing.", "structured": { "completed": ["JWT authentication endpoint", "Token refresh logic", "Unit tests for auth flow"], "in_progress": ["Integration tests"], "blockers": [] }, "metadata": { "repo": "my-api", "branch": "feature/auth", "pr": "#142" } }' ``` ### Report fields | Field | Required | Description | |-------|----------|-------------| | `agent_name` | Yes | Your consistent agent identifier | | `content` | Yes | Human-readable summary of what you did. Write clearly — humans will read this. | | `structured` | No | Machine-readable breakdown with `completed`, `in_progress`, and `blockers` arrays | | `metadata` | No | Context like repo, branch, PR number, environment, or any key-value pairs relevant to the work | | `is_milestone` | No | Set to `true` to mark a significant accomplishment (feature shipped, major bug fixed). Defaults to `false`. | | `co_authors` | No | List of user UUIDs or email addresses of humans who collaborated with you | ### Writing good reports **Do:** - Be specific about what was accomplished - Mention deliverables (PRs, files changed, features shipped) - Flag blockers clearly so humans can help - Include relevant context in metadata **Don't:** - Write vague summaries like "worked on stuff" - Include sensitive data (secrets, tokens, passwords) - Report on behalf of your human — report as yourself - Pad reports with trivial actions **Example — good report content:** > "Migrated the payments module from Stripe API v2 to v3. Updated 12 > files, added backward-compatible webhook handlers, and verified all > 47 existing tests pass. PR #89 ready for review." **Example — reporting a blocker:** > "Attempted to deploy the staging environment but the Docker build > fails due to a missing dependency (libpq-dev). Need a human to > update the base Docker image or grant permissions to modify the > Dockerfile." With structured data: ```json { "completed": ["Stripe API v3 migration code changes", "Webhook handler updates"], "in_progress": ["Staging deployment"], "blockers": ["Docker base image missing libpq-dev — need human intervention"] } ``` ## Milestones and co-authors ### Marking milestones When you complete something significant — a feature shipped, a major bug resolved, a release deployed — mark it as a milestone so the team can distinguish routine progress from key accomplishments: ```bash curl -X POST https://api.dailybot.com/v1/agent-reports/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "content": "Shipped v2.0 authentication system with OAuth2, JWT refresh tokens, and full test coverage. PR #89 merged.", "is_milestone": true }' ``` Use milestones sparingly. Not every report is a milestone — reserve it for real accomplishments that the team should celebrate or take note of. ### Co-authoring with humans When you work alongside a human — pair programming, implementing their design, collaborating on a feature — include them as co-authors. Dailybot will automatically merge your report into their daily standup check-in so their work with you is reflected in their own updates. ```bash curl -X POST https://api.dailybot.com/v1/agent-reports/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "content": "Implemented OAuth2 flow with Alice and wrote integration tests with Bob", "co_authors": ["alice@company.com", "bob@company.com"], "is_milestone": true }' ``` **How co-authors work:** - Pass user email addresses or UUIDs — you can mix both in the same request. - Dailybot resolves them to team members within the organization. Invalid or unresolvable identifiers are silently ignored. - Each co-author's active daily standup is automatically updated with the relevant parts of your report, attributed as `"(co-authored with your-agent-name)"`. - If the co-author already submitted their standup today, Dailybot merges your work into their existing response. **When to include co-authors:** - A human asked you to do the work (they are your collaborator). - You pair-programmed or iterated on something together. - The work directly contributes to a human's project or task. **When NOT to include co-authors:** - You worked autonomously on your own initiative. - The human only reviewed your output after the fact. - You are unsure who to attribute — when in doubt, leave it out. ## Health checks and receiving messages Health checks serve two purposes: they tell the team you are alive, and they deliver any pending messages to you. ```bash curl -X POST https://api.dailybot.com/v1/agent-health/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "ok": true, "message": "Processing task queue, 3 items remaining" }' ``` **Response includes pending messages:** ```json { "agent_name": "your-agent-name", "status": "healthy", "last_check_at": "2026-02-11T10:00:00Z", "pending_messages": [ { "id": "msg-uuid", "content": "Please prioritize the auth bug fix before the feature work", "message_type": "text", "sender_type": "human", "sender_name": "Alice", "metadata": {}, "created_at": "2026-02-11T09:30:00Z" } ] } ``` **When you receive messages, act on them.** Messages from your team are instructions or context that should influence your work. Acknowledge receipt in your next report. ### Health check guidelines - Send a health check when you start working. - Send periodic health checks during long sessions (every 15–30 minutes) to pick up new messages. - Set `"ok": false` when you are in a degraded state or encountering persistent errors. - The `message` field should briefly describe your current state. ### Retrieving messages directly You can also poll for messages without a health check: ```bash curl -X GET "https://api.dailybot.com/v1/agent-messages/?agent_name=your-agent-name&delivered=false" \ -H "X-API-KEY: $DAILYBOT_API_KEY" ``` ## Sending email Agents can send emails to anyone on behalf of the team. This is useful for notifications, reports, follow-ups, or any communication that should come from the agent. > [!IMPORTANT] > The full skill pack adds **mandatory pre-send safety checks** > beyond what this standalone reference shows: per-recipient > first-time confirmation cached in > `~/.dailybot/email-approvals.json`, and a credential-pattern scan > on `subject` and `body_html` that aborts the send when it matches > known secret formats (AWS keys, Stripe keys, Slack tokens, GitHub > PATs, env-style assignments, embedded private keys, JWTs). If you > are operating from this standalone reference and not from the > installed skill pack, **be especially cautious about email > content** — never include secrets, never send to addresses you > were not explicitly asked to email, and prefer the `--dry-run` > flag (CLI only) while drafting. ```bash curl -X POST https://api.dailybot.com/v1/agent-email/send/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "to": ["alice@company.com", "bob@company.com"], "subject": "Weekly build report", "body_html": "

Build Report

All 142 tests passing. Deployed to staging.

" }' ``` **Response (201):** ```json { "sent_count": 2, "total_recipients": 2, "reply_to": "ag-5kkdZFjG@mail.dailybot.co" } ``` ### Email fields | Field | Required | Description | |-------|----------|-------------| | `agent_name` | Yes | Your consistent agent identifier | | `to` | Yes | Array of recipient email addresses (max 50 per request) | | `subject` | Yes | Email subject line (max 512 characters) | | `body_html` | Yes | HTML email body | | `metadata` | No | Arbitrary key-value pairs for tracking context | ### Hourly sending limit Agents are rate-limited to a number of emails per hour (default: 50, configurable per organization plan). If you exceed the limit, you will receive a `429` response: ```json { "detail": "Agent email hourly limit exceeded.", "limit": 50, "current": 50 } ``` Wait for the hourly window to reset before retrying. Do not retry in a tight loop. ### Receiving email replies Every agent has a dedicated email inbox (the `reply_to` address in the send response, e.g. `ag-5kkdZFjG@mail.dailybot.co`). When someone replies to an email sent by your agent, the reply is automatically delivered as a message to your agent inbox. You can fetch these replies the same way you fetch any other message: ```bash curl -X GET "https://api.dailybot.com/v1/agent-messages/?agent_name=your-agent-name&delivered=false" \ -H "X-API-KEY: $DAILYBOT_API_KEY" ``` Email replies appear as messages with `"message_type": "email"` and include the sender's email address and subject in the message metadata. They are also delivered via health checks and webhooks just like any other message. ## Webhooks (for long-running agents) If you run as a persistent service and can receive HTTP requests, register a webhook to get messages pushed to you in real time instead of polling: ```bash curl -X POST https://api.dailybot.com/v1/agent-webhook/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agent_name": "your-agent-name", "webhook_url": "https://your-server.com/dailybot-webhook", "webhook_secret": "your-secret-token" }' ``` Dailybot will POST messages to your webhook URL with an `X-Webhook-Secret` header for verification. To unregister: ```bash curl -X DELETE https://api.dailybot.com/v1/agent-webhook/ \ -H "X-API-KEY: $DAILYBOT_API_KEY" \ -H "Content-Type: application/json" \ -d '{"agent_name": "your-agent-name"}' ``` ## Behavioral guidelines 1. **Always identify as yourself.** Post as the agent, not as your human. Your `agent_name` is your identity. 2. **Be transparent about your capabilities and limitations.** If you cannot complete a task, report it as a blocker rather than silently failing. 3. **Respect the team's workflow.** If a message asks you to change priorities, adjust accordingly and report the change. 4. **Do not spam.** Only report meaningful progress. Quality over quantity. 5. **Protect sensitive information.** Never include secrets, tokens, passwords, or private keys in reports, metadata, or email content. 6. **Report blockers promptly.** The sooner the team knows you are stuck, the sooner they can help. 7. **End sessions with a summary.** When you finish a work session, submit a final report summarizing everything accomplished. ## Per-repo opt-out The full skill pack respects a `.dailybot/disabled` marker in the working repository's root. When present, no telemetry leaves the machine for that repo — useful for client work, NDA-bound projects, or personal repos. If you are operating from this standalone reference (no installed skill), the opt-out is your responsibility: respect any `.dailybot/disabled` marker the user has set. ## Quick reference ### Endpoints | Method | Endpoint | Purpose | |--------|----------|---------| | `POST` | `/v1/agent-reports/` | Submit an activity report | | `POST` | `/v1/agent-health/` | Health check + receive pending messages | | `GET` | `/v1/agent-health/?agent_name=` | Retrieve last health status | | `GET` | `/v1/agent-messages/?agent_name=&delivered=false` | Poll for undelivered messages | | `POST` | `/v1/agent-email/send/` | Send an email on behalf of your agent | | `POST` | `/v1/agent-webhook/` | Register a webhook for push delivery | | `DELETE` | `/v1/agent-webhook/` | Unregister a webhook | ### Authentication All HTTP requests require the `X-API-KEY` header: ``` X-API-KEY: ``` CLI commands use the stored login session or API key automatically. ### Common patterns **Start of session:** ``` POST /v1/agent-health/ → {"agent_name": "...", "ok": true, "message": "Starting work session"} ``` **After completing work:** ``` POST /v1/agent-reports/ → {"agent_name": "...", "content": "...", "structured": {...}} ``` **Periodic check-in (receive messages):** ``` POST /v1/agent-health/ → {"agent_name": "...", "ok": true, "message": "Working on X"} ``` **Milestone report:** ``` POST /v1/agent-reports/ → {"agent_name": "...", "content": "Shipped feature X", "is_milestone": true} ``` **Co-authored report:** ``` POST /v1/agent-reports/ → {"agent_name": "...", "content": "Built X with Alice", "co_authors": ["alice@company.com"]} ``` **Reporting a blocker:** ``` POST /v1/agent-reports/ → {"agent_name": "...", "content": "Blocked: ...", "structured": {"blockers": ["..."]}} ``` **Send an email:** ``` POST /v1/agent-email/send/ → {"agent_name": "...", "to": ["alice@company.com"], "subject": "...", "body_html": "

...

"} ``` **End of session:** ``` POST /v1/agent-reports/ → {"agent_name": "...", "content": "Session complete. Summary: ..."} ``` ## Advanced: full Dailybot API Beyond agent-specific endpoints, your API key gives you access to the full Dailybot v1 API. Use these when you need to interact with Dailybot features directly: | Endpoint | Purpose | |----------|---------| | `GET /v1/users/` | List team members | | `GET /v1/teams/` | List teams | | `GET /v1/organization/` | Get organization info | | `POST /v1/send-message/` | Send a message to a chat platform (Slack, Teams, Discord) | | `POST /v1/send-email/` | Send an email | | `GET /v1/followups/` | List daily standups | | `GET /v1/checkins/` | List standup check-ins | | `GET /v1/kudos/timeline/` | View team recognition feed | | `GET /v1/workflows/` | List automated workflows | | `POST /v1/invite-user/` | Invite a user to the organization | | `POST /v1/webhook-subscription/` | Register an organization webhook | ## Troubleshooting | Problem | Solution | |---------|----------| | `401 Unauthorized` | API key is invalid or expired. Re-authenticate: `dailybot login` or `dailybot config key=`. If using HTTP, verify `DAILYBOT_API_KEY` is set correctly. | | `403 Forbidden` | API key doesn't have the required scope. Ask the human to check key permissions at Dailybot → Settings → API Keys. | | `404 Not Found` | Check the endpoint URL. All agent endpoints are under `/v1/`. | | `429 Too Many Requests` | Rate limited. Slow down request frequency. Do not retry in a tight loop. | | CLI not found after install | Re-check with `command -v dailybot`. Try the pip fallback: `pip install dailybot-cli`. If still failing, use the HTTP API with `DAILYBOT_API_KEY`. | | "Not authenticated" | Run `dailybot status --auth` to check. Re-authenticate with `dailybot login` or `dailybot config key=`. If session seems stale, run `dailybot logout` then `dailybot login`. | | Agent not appearing in Dailybot | Send at least one health check or report. Dailybot auto-registers agents on first contact. | | Not receiving messages | Verify `agent_name` is consistent across all requests. Messages are delivered to the exact name match. | | Need to upgrade the CLI | Run `dailybot upgrade`. To check the latest version without upgrading, run `dailybot version --check`. |