daily-update
Daily Update
Draft Benjamin's #daily-naboo Slack post from Linear, in the team's format. Draft-then-confirm — never post.
Output format (target)
DAILY :
:white_check_mark: DONE :
<https://linear.app/naboo-team/issue/KEY/slug|KEY: Title>,
:rocket: IN PROGRESS:
<https://linear.app/naboo-team/issue/KEY/slug|KEY: Title>,
:x: BLOCKERS:
<https://linear.app/naboo-team/issue/KEY/slug|KEY: Title>,
.
Rules:
- One space before each bullet line (matches team style).
- Each line ends with a comma; the whole post ends with a lone
.. - Omit any section that has zero items (except keep
DONEandIN PROGRESSheaders even if empty — writeNoneunder them). - Bullets use Slack link syntax
<url|KEY: Title>so Slack renders one clickable label per line (no unfurl cards). - If a title contains
|or>, replace them with a space in the label (they break Slack link syntax); keep the full title in the URL.
Step 1 — Resolve the "yesterday" window
Get the previous working day in ISO (YYYY-MM-DD). Treat Saturday/Sunday as still belonging to Friday.
DOW=$(date +%u) # 1=Mon .. 7=Sun
case "$DOW" in
1) SINCE=$(date -v-3d +%Y-%m-%d) ;; # Mon → previous Fri
*) SINCE=$(date -v-1d +%Y-%m-%d) ;;
esac
echo "$SINCE"
Echo the window to the user: "Pulling DONE since <SINCE> and all started issues."
Step 2 — Fetch issues from Linear
Run both queries in parallel. benjamin.gelis is the assignee (confirm once with linear auth whoami if unsure).
# Completed since SINCE
linear issue query --assignee benjamin.gelis --all-teams \
--state completed --updated-after "$SINCE" --limit 50 --json
# Currently started
linear issue query --assignee benjamin.gelis --all-teams \
--state started --limit 50 --json
Parse with jq '.nodes[] | {id: .identifier, title, url, state: .state.name, updatedAt}'.
Filtering rules
- DONE: union of
- completed query results with
state.type == "completed"andupdatedAt >= SINCE(excludecanceled), and - started query results whose
state.namematches/review/i(team convention: "In Review" items are reported as DONE).
- completed query results with
- IN PROGRESS: started query results not matching
/review/iinstate.name. Deduplicate against DONE (an issue in both lists stays in DONE only). - BLOCKERS: issues from the started query that carry a label matching
/blocked/iOR are linked as "blocked by" another open issue. If none, skip the section.
If you want to override a bucket (e.g. treat an "In Review" PR that's reverted as still IN PROGRESS), say so in chat — the iteration step handles re-bucketing.
Step 3 — Draft in chat
Render the post in a fenced block. Above the block, show a one-line summary:
"<n> done · <m> in progress · <k> blockers · window: <SINCE>".
Below the block, list anything the user may want to add manually (non-Linear work like "review PRs", "onboarding session") as a nudge — do not insert these into the draft.
Step 4 — Iterate
Wait for free-form tweaks. Common ones to support without asking:
- "drop BOF-XXX" → remove that line.
- "move BOF-XXX to done / in progress / blockers" → re-bucket.
- "add blocker: " → append a free-text line under
:x: BLOCKERS:. - "shorter titles" → truncate each title to ~60 chars.
Re-render the full block after each change. Never silently drop items.
Step 5 — Finalize
When the user confirms ("ok", "ship it", "lgtm", "copy"), print the final block once more, clean, with no surrounding prose. Do not post to Slack — Benjamin copies it himself.
Notes
- If
linearis missing or auth fails, abort with the install command from thelinear-cliskill. - If both queries return zero issues for Benjamin, say so explicitly and ask whether to draft from yesterday's Slack post (skill does not fetch Slack by default — keep it simple).
- Timezone: the Linear CLI returns UTC. The team posts from Europe/Paris; a UTC cutoff at midnight is close enough — if an issue sits right on the boundary, the user can re-bucket manually.
More from benjaming/ai-skills
confluence-cli
Use confluence-cli (NPM package) to manage Confluence content, pages, and spaces from the command line. Ideal for documentation workflows, bulk content operations, page migration, and when users request CLI-based Confluence interactions. Trigger on requests like "use Confluence CLI", "create Confluence pages via CLI", "migrate Confluence content", "automate documentation workflows", or when users want to script Confluence operations.
43atlassian-cli-jira
Use Atlassian CLI (acli) to manage Jira work items, projects, and workflows from the command line. Ideal for bulk operations, automation, scripting, and when users request CLI-based Jira interactions. Trigger on requests like "use Jira CLI", "create Jira issues via CLI", "bulk update Jira tickets", "automate Jira workflows", or when users want to script Jira operations.
29ralph-loop
Create autonomous iterative loops (Ralph Wiggum pattern) for multi-step tasks. Use when setting up automated workflows that iterate over a backlog of tasks with clear acceptance criteria. Triggers on requests like "create a ralph loop", "set up an iterative agent", "automate this migration", or "create an autonomous loop".
21interview
Interview user to clarify any topic - exploring codebase, investigating issues, planning features, understanding requirements, or drilling into plans. Socratic questioning to uncover details.
20codex-cli
Use OpenAI Codex CLI in non-interactive mode for automated code analysis, review, and programmatic task execution. Trigger on requests like "use Codex to analyze", "run codex exec", "codex code review", or when users want AI-powered code analysis without interactive prompts. Ideal for automation workflows, code quality checks, and generating structured analysis reports.
19daily-standup
Daily standup assistant for Benjamin that compiles work priorities from Jira and Slack into a single prioritized task list. This skill should be used when Benjamin asks for morning standup, daily priorities, what to work on today, or needs to compile work items.
18