From dailybot
Report work progress to Dailybot. Use after completing a discrete task or subtask, or after any batch of edits that modifies 3 or more files. Do not wait for permission. Include what changed and why.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dailybot:reportThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Report work progress to Dailybot so your team sees what was accomplished. Every report should read like a human giving their daily standup update.
Report work progress to Dailybot so your team sees what was accomplished. Every report should read like a human giving their daily standup update.
Read and follow the authentication steps in ${CLAUDE_PLUGIN_ROOT}/shared/auth.md. That file covers CLI installation, login, API key setup, and agent profile configuration.
If auth fails or the user declines, skip reporting entirely and continue with your primary task.
Run the bundled context detection script:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/detect-context.sh"
This outputs JSON with repo, branch, agent_tool, and agent_name fields. Capture this output — you will use it as the base for the --metadata value.
Before sending the report, add your model identifier to the metadata. For example, if the script outputs:
{"repo":"my-app","branch":"main","agent_tool":"claude-code","agent_name":"claude-code"}
You should send:
{"repo":"my-app","branch":"main","agent_tool":"claude-code","agent_name":"claude-code","model":"claude-opus-4-6"}
Fallback — if the script fails or is unavailable, build metadata manually:
repo: git remote get-url origin 2>/dev/null | sed 's|.*/||;s|\.git$||' or current folder namebranch: git branch --show-current 2>/dev/null or "unknown"agent_tool: always "claude-code"agent_name: "claude-code" (default)model: your model identifierSend a progress report when either condition is met:
Do not wait for permission. Do not second-guess whether the work is "significant enough." If either condition is met, report.
If the user explicitly asks you to report, always report regardless of these conditions.
Every report must answer two questions:
If you completed multiple related changes, combine them into ONE report:
BAD (3 separate reports):
"Updated the user model"
"Added user preferences endpoint"
"Added tests for preferences"
GOOD (1 combined report):
"Built the user preferences system — new data model, API endpoint, and full test coverage."
You are an extension of the human who works with you. When you report progress, it reflects the human's accomplishment — they decided what to build, directed the work, and are accountable for the result.
Rules:
| Aspect | Standard |
|---|---|
| Length | 1-3 sentences maximum |
| Tone | Professional, conversational — like telling a teammate what you did |
| Structure | WHAT was accomplished + WHY it matters or what it enables |
| Tense | Past tense for completed work |
| Language | Always English |
Plain report — single bug fix, small feature, one-off change:
Rich report — multi-deliverable feature, major refactor, complex task completion:
--json-data with structured data + metadata--milestone for major accomplishments{
"completed": ["Deliverable 1", "Deliverable 2"],
"in_progress": ["Item still being worked on"],
"blockers": ["Blocker description"]
}
Rules:
--milestoneMark a report as a milestone only when the top-level task is fully completed — all subtasks are done and the entire requested piece of work is wrapped up. Individual subtask completions are regular reports, not milestones. If the user explicitly asks for a milestone, always honor it.
NEVER include these in the report message:
| Forbidden | Example | Why |
|---|---|---|
| File paths | app/services/auth.py | Nobody reads paths in a standup |
| Git statistics | 3 files changed, +127 -12 | Meaningless without context |
| Raw commit messages | feat(scope): description | Commit syntax is for git, not humans |
| Branch names | pushed to dev, merged to main | Internal workflow detail |
| Agent attribution | Agent completed..., Claude did... | Violates human-first rule |
| Defer to git | see git log for details | Reports must be self-contained |
| Technical jargon without context | resolved hydration mismatch | Most readers won't understand |
| Plan names or task IDs | PLAN_auth_refactor, task-3 | Internal identifiers, not outcomes |
| Non-English text | Se corrigió un error | All reports must be in English |
| Vague fallbacks | Updated code, Made changes | If you can't be specific, don't report |
For detailed writing guidelines: quality-guide.md For good vs bad examples: examples.md
command -v dailybot
${CLAUDE_PLUGIN_ROOT}/shared/http-fallback.md for base curl patterns)Timeout: Allow at least 30 seconds for CLI commands to complete. Do not use a shorter timeout.
dailybot agent update "<message>" \
--name "<agent_name>" \
--metadata '<metadata_json>'
dailybot agent update "<message>" \
--name "<agent_name>" \
--json-data '<structured_json>' \
--metadata '<metadata_json>'
dailybot agent update "<message>" \
--name "<agent_name>" \
--milestone \
--json-data '<structured_json>' \
--metadata '<metadata_json>'
Where:
<message>: your 1-3 sentence standup-style summary<agent_name>: from the context detection output (defaults to "claude-code")<metadata_json>: the JSON from Step 2 with model added<structured_json>: completed/in_progress/blockers arrays (rich reports only)Do NOT add --co-authors by default. The Dailybot backend automatically credits the authenticated CLI user as a co-author when using CLI login.
Only add --co-authors if the user explicitly asks to credit additional collaborators:
dailybot agent update "<message>" \
--name "<agent_name>" \
--co-authors "[email protected],[email protected]" \
--metadata '<metadata_json>'
curl -s -X POST https://api.dailybot.com/v1/agent-reports/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "<agent_name>",
"content": "<message>",
"metadata": <metadata_json>
}'
curl -s -X POST https://api.dailybot.com/v1/agent-reports/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "<agent_name>",
"content": "<message>",
"structured": {
"completed": ["Deliverable 1", "Deliverable 2"],
"in_progress": ["Item still being worked on"],
"blockers": []
},
"metadata": <metadata_json>
}'
curl -s -X POST https://api.dailybot.com/v1/agent-reports/ \
-H "X-API-KEY: $DAILYBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_name": "<agent_name>",
"content": "<message>",
"is_milestone": true,
"structured": {
"completed": ["..."],
"in_progress": [],
"blockers": []
},
"metadata": <metadata_json>
}'
After a successful report, the plugin automatically marks the session as reported via a PostToolUse hook — no manual step is needed.
After the command runs:
dailybot status --auth if it looks auth-related.Reporting must NEVER block your main work. If the CLI is missing, auth fails, the network is down, or the send command errors:
This skill should activate when either trigger condition is met:
For in-depth report writing standards and templates by work type, see quality-guide.md. For 15 side-by-side good vs bad report comparisons, see examples.md.
npx claudepluginhub dailybothq/dailybot-claude-plugin --plugin dailybotReference for writing and editing skills with predictable behavior, covering invocation models, description writing, and information hierarchy.