📋daily-briefing
- プラグイン
- monday-crm
- 引数
- [optional: board name or ID, e.g. 'Deals', 'Contacts', or '12345678']
- ソース
- GitHub で見る ↗
説明
優先順位付きのCRMブリーフィングで一日をスタートできます。パイプライン、コンタクト、アカウント、リード、ボードなしなど、あらゆるmonday CRMの設定に対応しています。 次のような場合に使用: 「morning briefing」「daily brief」「今日の予定は?」「自分の案件をまとめて」「何に注意が必要?」「自分が対応すべきことは?」「案件で急ぎのものは?」「パイプラインで注目すべきものは?」「パイプラインのサマリー」「今日の業務を始めよう」「デイリースタンドアップの準備」などと伝えた場合。
原文を表示
Start your day with a prioritized CRM briefing — works for any monday CRM setup: pipeline, contacts, accounts, leads, or no board at all. Use when someone says 'morning briefing', 'daily brief', 'what's on my plate today', 'catch me up on my deals', 'what needs attention', 'what needs my attention', 'anything urgent in my deals', 'what's hot in my pipeline', 'pipeline summary', 'start my day', or 'daily standup prep'.
ユースケース
- ✓朝の優先順位確認
- ✓今日の案件をまとめる
- ✓パイプラインのサマリー確認
- ✓緊急対応が必要な案件を把握
- ✓デイリースタンドアップの準備
本文
Morning Briefing
Produces a daily prioritized briefing over the user's monday CRM data and publishes it as a monday artifact — so the brief lives inside monday, not just in the chat.
Works for any monday CRM setup: pipeline users get deal buckets and pipeline totals; contacts/accounts users get relationship health and follow-up queues; lead managers get inbound lead status. If the user has no monday CRM board at all, the skill runs in standalone mode — ask for context, produce a useful brief from what they tell you.
When monday CRM features are in use, the brief automatically gets richer:
| monday CRM feature | What it adds | MCP access |
|---|---|---|
| Notetaker | Recent meeting notes matched to open deals or contacts | get_notetaker_meetings |
| Activity log | Logged calls, emails, and meetings on deals/contacts (last 48h) | get_board_activity + get_updates |
| Tasks / follow-ups | Items with a date column = today across deals or contacts board | get_board_items_page with date filter |
| Calendar sync (Outlook/Google) | Today's CRM-linked meetings | Not yet in MCP — skipped; wired when available (see workset status.md) |
| Email sync (Gmail/Outlook) | Tracked email threads on deals/contacts | Not yet in MCP — skipped; logged emails accessible today via get_updates on contacts/deals |
monday CRM's calendar and email sync features exist in the product but are not fully exposed via the MCP connector yet. The skill attempts to reach them via
all_monday_apiraw GraphQL. If the data isn't there, it notes the gap in the brief and skips the section — it does not error out.
Flow: Connector check → Mode → Connector discovery → Board detection → Board type → Data pull → Synthesize → Publish → Share (opt-in) → Proactive (opt-in).
Input
- Optional: board name or ID via argument.
- Optional: mode override (Default / Silent / Proactive) via project instructions or one-shot prompt.
Output
- α (default): A monday update on a pinned "My Morning" item OR a new doc in the user's personal workspace, titled
Morning Briefing — <weekday>, <Mon DD>. Body carries theGenerated by Claudefooter + an HTML comment<!-- claude-skill-id: daily-briefing -->for idempotency. Markdown brief printed in chat as a mirror. - β (Share mode, opt-in): Notification to manager + update on team-rollup board.
- Proactive extension (opt-in): Per-item
create_updateon stalled records;create_notificationfor commitments due today. - Standalone mode (no board): Brief printed in chat only — no monday artifact (nothing to publish to).
Knowledge
- Board type detection + synthesis buckets per type (§ Steps 2b and 6).
- Shared artifact conventions (§ Shared patterns).
Tools (MCP)
get_user_context— resolve user + favorite boards.list_workspaces— enumerate workspaces when search is ambiguous.search— find CRM boards by broad search terms.get_board_info— board schema + column IDs + labels.get_column_type_info— resolve columns by type when names aren't English.get_board_items_page— pull active records, recently closed, recent activity.board_insights— aggregate fallback when >200 items.create_update— publish α to pinned item; proactive nudges on stalled records.create_doc— publish α as a doc when no pinned item exists.create_notification— β share; proactive alert for commitments due today.list_users_and_teams— resolve recipient for β share.all_monday_api— escape hatch for doc updates / metadata lookups not in wrapped tools.
Cross-skill handoffs
- To forecast-dashboard: If briefing surfaces forecast hygiene issues, suggest
/monday-crm:forecast-dashboard. - To board-diagnosis: If >30% of records are unowned, or core fields missing on most items, suggest
/monday-crm:board-diagnosis.
Step 0: Connector check
Goal: Fail fast if the user has no monday MCP connection.
- Try
mcp__monday__get_user_context. - If the tool is missing, returns auth-style error, or the user has no accessible workspace:
- Print: "I don't see the monday connector active on this session. Install it from https://monday.com/mcp, then run this skill again."
- Stop. Do not proceed.
- If connector works, cache
user.idanduser.name.
PAUSE: do not write any
create_*call before Step 6, and never before Step 0 passes.
Step 1: Detect mode and output config
Goal: Know write behavior and output preferences before doing anything else.
Write mode
- Default — confirm every
create_*orchange_*call in chat before executing. - Silent — skip confirmations, stay on α scope.
- Proactive — ask once at the top of the session: "Proactive mode will post per-item updates on stalled records and notify you on commitments due today. (a) Approve all, (b) Review each, (c) Deny all?" Store the choice for the session.
If no mode declared, assume Default. Trigger: morning briefing silent / morning briefing proactive / mode: proactive in project instructions.
Hard safety rail regardless of mode: no deletes, no amount-column writes, no cross-workspace moves. Stage, owner, last-touch, and source column edits are allowed when bundled in a batched-confirm plan (Default) or session-level approval (Proactive).
Output config
Read from project instructions or per-run prompt. All fields are optional — defaults apply when absent.
Verbosity (default: full)
full— all sections, per-deal detail, pipeline totalsquick— headline numbers + top 3 action items only (fits in ~20 lines)tldr— single paragraph: one priority, one number, one action
Trigger phrases: quick brief / quick morning briefing → quick; tldr / tldr my day → tldr.
Sections (default: all on)
Set per-run with natural language ("skip yesterday's movements", "only show what needs attention") or in project instructions:
output:
sections:
pipeline_totals: true # "Pipeline at a glance"
yesterday_movements: true # won/lost since last run
meeting_today: true # deals with a meeting today (requires notetaker or calendar)
tasks_today: true # tasks/follow-ups due today
needs_action: true # slipping, stale, follow-up buckets
on_track: true # hot deals
activity_summary: true # logged calls/emails/notes count
new_this_week: false # new deals added (off by default — low urgency)
data_hygiene: true # missing fields, unowned items
Any section with no items is automatically omitted regardless of config (don't print empty headers).
Style (default: bullets)
bullets— markdown bullets and headers (default, renders well in monday docs and chat)tables— key data in markdown tables (better for scanning many deals)prose— short paragraph per section (better for sharing / pasting into email)
Trigger: morning briefing table format → tables; morning briefing prose → prose.
Destination (default: monday+chat)
monday+chat— publish artifact to monday AND mirror in chatmonday— publish to monday only, no chat mirrorchat— chat only, no monday artifact (useful for quick checks without cluttering monday)doc— force a new monday doc even if a "My Morning" pinned item exists
Trigger: morning briefing chat only → chat; morning briefing doc → doc.
Config precedence: per-run prompt overrides project instructions, which overrides defaults. A per-run phrase like "quick brief" applies to this run only — it does not change stored config.
Step 1b: Discover monday CRM enrichment sources (MUST RUN — not optional)
Goal: Know which monday-native data sources are live before pulling CRM data. Run in parallel with Step 2.
Try each source silently — don't stop if one fails:
-
Notetaker meetings — call
get_notetaker_meetings. If it returns results, cache them. If it errors or returns empty, marknotetaker: false. -
Calendar sync — not yet available via monday MCP. Mark
calendar: false. Skip. Will be wired when monday exposescalendar_eventsin the MCP connector (tracked in workset status.md). -
Email sync — not yet available via monday MCP. Mark
email: false. Skip. Will be wired when monday exposescrm_emailsin the MCP connector (tracked in workset status.md). Note: logged emails stored as item updates on contacts/deals are accessible today viaget_updates— those are handled in Step 5d. -
Tasks board — search
get_user_context→relevantBoardsfor a board namedtasks|to-do|actions|follow-up. If found, marktasks_board: <boardId>. If not found, skip — tasks will be inferred from deal/contact items with date columns = today.
None of these failing should block the rest of the skill. Calendar and email sync are product features not yet fully exposed in the MCP — the attempt is best-effort. Notetaker and tasks are available today.
Step 2: Resolve board(s)
Goal: Find the user's CRM board(s), or confirm there are none and fall back to standalone.
Broad search — cast the net wide:
-
If the user passed a board via argument:
- Numeric → use as
boardIddirectly. - String →
mcp__monday__search(searchType: "BOARD", searchTerm: <arg>). One match → use it. Multiple →AskUserQuestion.
- Numeric → use as
-
If no argument, scan
get_user_context→relevantBoards+favoritesfor names matching any of:- Pipeline signals:
deal|deals|opportunity|opportunities|pipeline|sales - Contact/account signals:
contact|contacts|account|accounts|client|clients|customer|customers - Lead signals:
lead|leads|prospect|prospects|inbound - Relationship signals:
partner|partners|renewal|renewals|relationship
- Pipeline signals:
-
If no matches in context, run
searchwithsearchTerm: "crm"then"contacts"then"deals". Collect all candidates. -
If still zero matches → Standalone fallback (see Step 2c below). Do not stop the skill.
-
If multiple candidates of the same type (e.g., two pipeline boards):
- Auto-select the one with the most recent
updated_aton its items — this is the board the user is actively working in. Note the selection in the brief's Data hygiene section: "Briefing on [Board Name]. To brief a different board, pass its name as an argument." - If
updated_atis the same day or indeterminate:AskUserQuestionwith board names + "all of them" option.
- Auto-select the one with the most recent
-
If candidates are of different types (e.g., one pipeline + one contacts board): run both paths and combine into one brief — no disambiguation question needed.
If the user explicitly picks "all": run Steps 3–7 per board and publish one combined α artifact.
Step 2b: Classify board type (MUST RUN — execute immediately after Step 2)
Goal: Tailor the data pull and synthesis to what the user actually has.
After resolving the board, call get_board_info and classify as one of:
| Type | Signals |
|---|---|
pipeline |
status column with is_done: true labels (Won) + numbers column with $ unit (value) |
leads |
status column without is_done: true (no Won state) + lead-sounding labels (e.g. "New", "Contacted", "Qualified", "Disqualified") |
contacts |
Majority text / email / phone columns; few or no numbers columns; no Won/Lost pattern |
accounts |
Mix of text, numbers (revenue/ARR), status columns; company-centric item names |
general |
CRM board that doesn't fit above — treat like accounts |
Cache the detected boardType for Steps 3–6.
If a user has both a pipeline board and a contacts/accounts board, run both paths and combine into one brief under separate sections.
Step 2c: Standalone fallback (no board) (MUST RUN when Step 2 finds zero boards)
Goal: Still produce a useful briefing even without a monday board connected.
Run this path if Step 2 found zero boards OR the user says "I don't have a CRM set up yet."
Ask the user two questions (one AskUserQuestion call, both together):
- "What meetings or calls do you have today?"
- "What deals, accounts, or relationships need your attention this week?"
Work with whatever they provide. Produce a briefing using the Standalone template (§ Step 6c). Skip Steps 3–5 and Steps 7–9 (nothing to publish). Print the brief in chat only.
Step 3: Read board schema
Goal: Resolve column IDs by type — global teams have non-English column titles.
get_board_info(boardId). Cache columns.- Classify columns by type:
Pipeline columns:
| Concept | Type | Title hint | Fallback |
|---|---|---|---|
| Stage | status |
stage, status | first status with is_done labels |
| Owner | people |
owner, rep, person | first people column |
| Value | numbers |
value, amount, revenue, size | first numbers with $ unit |
| Close probability | numbers |
probability, % | first numbers with % unit |
| Expected close date | date |
close, expected, target | first date-type column matching |
| Last interaction | date |
interaction, activity, touch, contacted | second date-type column |
| Forecast value | formula |
forecast, weighted | optional; computed from value × prob if absent |
Contacts/accounts columns (additional):
| Concept | Type | Title hint |
|---|---|---|
| Company | text |
company, account, organization |
email |
||
| Phone | phone |
phone |
| Last contacted | date |
last contacted, last touch, last interaction |
| Next follow-up | date |
follow-up, next contact, next step |
| Owner | people |
owner, rep, assigned |
| Status | status |
status, stage, health |
| Tags | tags |
tags, segment, type |
- For ambiguous columns call
get_column_type_info. - If a column type is missing entirely, continue without it and note in the brief under "Data hygiene".
Step 4: Identify terminal labels (pipeline only)
Goal: Distinguish closed records from active — without hardcoding English.
Skip this step for contacts, accounts, general board types.
From the stage column's settings.labels:
- Won = labels with
is_done: true. - Lost = labels where text (lowercased) contains
lost|closed lost|cerrado perdido|verloren|perdu. - If no
is_done: truelabel exists, ask the user which label means "won".
Cache label index values.
Step 5: Pull data
Goal: Get the items needed to build the brief. Adapt the queries to the board type.
5a — Pipeline boards
Three passes:
Pass A — Active: get_board_items_page with stage not_any_of [won_idx, lost_idx], limit 200.
Pass B — Recent closures: stage any_of [won_idx, lost_idx], ordered by updated_at desc, limit 50; in-memory filter to items with updated_at within last 24h.
Pass C — Recent activity: reuse Pass A; sort by updated_at desc; last 24h.
Volume edges:
- Pagination: pull until cursor is null or 2,000 items. Flag sampling if capped.
-
10K items: stop at 2,000, surface sampling note.
board_insightsfallback if >200 active items for aggregate-only view.
5b — Contacts / accounts boards
Two passes:
Pass A — All active contacts/accounts: get_board_items_page, no status filter (include all non-archived), limit 200. Include: owner, last-contacted date, next-follow-up date, status, company.
Pass B — Recent activity: sort Pass A by updated_at desc; last 48h.
5c — Leads boards
Two passes:
Pass A — Open leads: get_board_items_page, filter out terminal labels (e.g., "Disqualified", "Converted"), limit 200.
Pass B — Recent additions: sort by created_at desc, last 48h.
5d — Activities / updates (all board types)
This is the primary way to get logged emails, calls, and activities from monday CRM today. When users log a call, send an email (via monday email sync), or add a note on a contact or deal, it's stored as an update thread on that item. get_updates surfaces all of it.
For each resolved board:
get_board_activity(boardId, from: <48h ago>)— structural changes: stage moves, owner assignments, column edits. Tells you what changed on which items.get_updates(boardId, limit: 100)— update threads: logged calls, tracked emails, meeting notes, manual notes added by reps. This is the activity log.
If either call returns a permission error (403 or similar): note in the brief's Data hygiene section — "Activity log unavailable — the MCP connector lacks read access to this board's activity feed. A board admin can grant it under Board Settings → Permissions → View board." Do not stop or retry; proceed without activity data.
Classify each update body by content signals:
- Contains "called", "spoke", "phone call", "left voicemail" → logged call
- Contains "email", "sent", "replied", "re:", "subject:" → logged email (may be auto-logged by monday email sync, or manually added)
- Contains "meeting", "met with", "visited", "demo", "call recording" → logged meeting
- monday Notetaker auto-posts meeting summaries as updates on the linked item — detect by checking for notetaker-style formatting (bullet summary, attendee list)
- Anything else → note
For the contacts board specifically: this is where email/activity history lives. Pull updates for all contacts that appear in your deals or that you own — not the full board. Filter by updated_at within last 48h to stay relevant.
Cache per item: {itemId, activityType, summary (first 100 chars), timestamp, author}[]. Group by deal/contact for synthesis.
5e — Notetaker meetings
If notetaker: true from Step 1b: the cached get_notetaker_meetings results contain recent meeting recordings/notes with associated items.
For each notetaker entry:
- Match to a deal or contact in the boards via item name or ID.
- Extract: meeting title, date, attendees (if present), matched item.
- Cache:
matched_meeting_notes[]for synthesis.
Unmatched meetings (no CRM item linked): surface separately in the brief under "Meetings not linked to a deal" — they're an upsell opportunity.
5f — Tasks due today
If tasks_board was found in Step 1b: call get_board_items_page on that board filtered by due date = today.
If no tasks board: scan Pass A results (deals/contacts) for items where any date column = today that isn't the close date (treat as a follow-up or task date).
Cache as tasks_today[] with item name, assigned owner, linked board.
5g — Calendar events (future)
Not available via monday MCP today. Skip. When monday exposes calendar_events on the connector: pull today's events, cross-reference with open deals/contacts by crm_item link or attendee domain match, cache as crm_meetings_today[] for synthesis Step 6a. See workset status.md for tracking.
5h — Email sync (future)
Not available via monday MCP today. Skip. Logged emails stored as item updates on contacts/deals are covered by Step 5d (get_updates). When monday exposes crm_emails on the connector: pull unread emails + awaiting_reply threads, cross-reference with CRM items, surface in the brief under "Email priorities". See workset status.md for tracking.
Rate limit handling (all types)
429 → exponential backoff 3x (1s, 2s, 4s). On third failure: "monday is rate-limiting right now. Retry in 60 seconds, or narrow to fewer boards." Stop.
Step 6: Synthesize
Goal: Rank items by what needs action today.
6a — Pipeline synthesis
| Bucket | Criteria |
|---|---|
| Meeting today | deal has a crm_meetings_today entry — always surface, regardless of other signals |
| Task due today | deal appears in tasks_today — surface with task description |
| Commit-today | close_date = today AND stage ≠ Won/Lost |
| Slipping | close_date in past AND stage ≠ Won/Lost |
| Stale | last_interaction > 14d ago AND stage in non-closed |
| Follow-up | last_interaction > 7d ago AND probability ≥ 50% |
| Hot | probability ≥ 70% AND last_interaction ≤ 7d AND close_date ≤ 30d |
| New | created within last 7d AND stage = earliest-index label |
Priority order: Meeting today > Task due today > Commit-today > Slipping > Stale > Follow-up > Hot > New.
A deal can appear in multiple buckets — display in the highest-priority one only, but annotate lower-priority signals inline (e.g., a Stale deal that also has a meeting today → show under "Meeting today" with a 🔴 stale flag).
Totals: active pipeline Σ value; forecast Σ (value × prob/100); closing this week count + Σ value; yesterday wins Σ value; yesterday losses count.
Section header counts must match body item counts exactly. Count the items in each bucket after applying verbosity limits, then write ### Slipping (N) where N is the actual number of lines that follow. Never use a pre-limit count in the header.
Activity summary: count of logged calls, emails, meetings, and notes in the last 24h across all active deals. Surface as a one-liner in the brief (e.g., "5 activities logged yesterday — 2 calls, 2 emails, 1 note").
6b — Contacts / accounts synthesis
| Bucket | Criteria |
|---|---|
| Overdue follow-up | next_follow_up date in past |
| Going cold | last_contacted > 21d ago AND no upcoming follow-up |
| Follow-up today | next_follow_up = today |
| Recently active | updated_at within last 24h |
| New this week | created_at within last 7d |
Priority order: Overdue > Follow-up today > Going cold > Recently active > New.
No pipeline totals for contacts boards. Instead surface: total contacts, unowned contacts (%), contacts with no follow-up date set.
6c — Leads synthesis
| Bucket | Criteria |
|---|---|
| Hot leads | status in early/qualified stages AND created within last 7d |
| Unassigned | owner column empty |
| Stale | created > 14d ago AND no status change in 7d |
| Recent additions | created_at within last 48h |
Surface: total open leads, unassigned count, conversion rate (if terminal labels detected).
6d — Standalone (no board)
Prioritize from user-provided input:
- Meetings today with a deal/account at stake
- Items the user flagged as urgent
- Deals/relationships the user mentioned as needing action
Step 7: Publish α
Goal: Put the brief inside monday. Skip for standalone mode (nothing to publish to).
Target selection
Respect the destination config from Step 1:
chat→ skip this step entirely; print to chat only.doc→ skip "My Morning" search; go directly tocreate_doc.mondayormonday+chat(default) → follow steps below.
- Call
search(searchType: "ITEM", searchTerm: "My Morning"). Filter results to boards the user owns or is a member of (to avoid false matches on shared workspaces). If exactly one match →create_updateon that item. If multiple → take the one in the user's personal workspace (fromget_user_context→personal_workspace_id). If none → proceed to step 2. - Else:
create_docin personal workspace with titleMorning Briefing — <weekday>, <Mon DD>, <YYYY>. - Idempotency: before creating, search by exact title. If found, update in place. If search returns ambiguous results, add a suffix (
— v2). Never duplicate.
Apply verbosity and section config before writing
Before assembling the brief body, apply the config from Step 1:
tldrverbosity: replace the full template with: one sentence on top priority, one pipeline number, one suggested action. Skip all sections.quickverbosity: include onlypipeline_totals+needs_action(top 2 items max per bucket, 1-line each). Skipyesterday_movements,on_track,new_this_week,activity_summary,data_hygiene. Hard cap: 25 lines total including headers and footer. (~20 is achievable when fewer buckets are populated; top 2 per bucket keeps within cap even when all three action buckets are full.)fullverbosity (default): all sections per config.- Section overrides: suppress any section the user turned off. Never print a section header with no content.
tablesstyle: render deal lists as markdown tables (| Deal | Stage | Value | Alert |) instead of bullets.prosestyle: write each section as 1–2 sentences, no headers. Use plain paragraph breaks.
If a section is configured
onbut has zero items, omit it silently — don't print "(none)".
Brief templates
Pipeline template:
# CRM Morning Briefing — <weekday>, <Mon DD>
<!-- claude-skill-id: daily-briefing -->
## Pipeline at a glance
- Active pipeline: $<total>K across <N> deals
- Forecast: $<forecast>K (weighted)
- Closing this week: <N> deals, $<value>K
## Yesterday's movements
- Won: <deal> ($<value>K, <owner>)
- Lost: <deal> ($<value>K, <owner>)
## Needs you today
### Closing today (<N>)
- <deal> — <stage>, $<value>K, owner <name>, last touch <X days ago>
### Slipping (<N>)
- <deal> — <stage>, $<value>K, expected <date> (<X> days overdue), owner <name>
### Going cold (<N>)
- <deal> — <stage>, no touch in <X> days, owner <name>
### Follow-up (<N>)
- <deal> — <stage>, <probability>%, last touch <X days ago>
## On track
- <deal> — <stage>, <probability>%, closing in <X> days
## Data hygiene
- <N> deals missing owner · <N> missing close date · <N> missing amount
---
Generated by Claude · <ISO timestamp> · run `/monday-crm:daily-briefing` to refresh.
Contacts / accounts template:
# CRM Morning Briefing — <weekday>, <Mon DD>
<!-- claude-skill-id: daily-briefing -->
## Relationships at a glance
- <N> contacts/accounts total · <N> owned by you · <N> unowned
## Needs you today
### Overdue follow-ups (<N>)
- <name> (<company>) — follow-up was due <date>, owner <name>
### Follow up today (<N>)
- <name> (<company>) — scheduled for today, last touched <X days ago>
### Going cold (<N>)
- <name> (<company>) — no contact in <X> days, no follow-up scheduled
## Recently active
- <name> — updated <X hours ago>
## New this week
- <name> (<company>) — added <date>
## Data hygiene
- <N> contacts missing owner · <N> with no follow-up date set
- (Run `/monday-crm:board-diagnosis` for a full audit.)
---
Generated by Claude · <ISO timestamp> · run `/monday-crm:daily-briefing` to refresh.
Leads template:
# CRM Morning Briefing — <weekday>, <Mon DD>
<!-- claude-skill-id: daily-briefing -->
## Leads at a glance
- <N> open leads · <N> unassigned · <N> added this week
## Needs you today
### Unassigned leads (<N>)
- <lead name> — <stage>, added <date>
### Hot leads (<N>)
- <lead name> — <stage>, <X> days old, owner <name>
### Going stale (<N>)
- <lead name> — <stage>, no activity in <X> days
## Recent additions
- <lead name> — added <X hours ago>, source <source>
## Data hygiene
- <N> leads unassigned · <N> with no status change in 7+ days
- (Run `/monday-crm:board-diagnosis` for a full audit.)
---
Generated by Claude · <ISO timestamp> · run `/monday-crm:daily-briefing` to refresh.
Standalone template (chat-only, no artifact):
# Morning Brief — <weekday>, <Mon DD>
## #1 Priority
**[Most important thing from what you told me]**
[Why it matters]
## Today's meetings
- [Time / Company / What's at stake]
## Needs attention
- [Item 1 — why]
- [Item 2 — why]
## Suggested next actions
1. [Action] — [why now]
2. [Action] — [why now]
3. [Action] — [why now]
Confirm-before-write (Default mode)
Print before any create_*: "I'll publish this as <target>. OK to post? (yes / no / show first)." Silent and Proactive modes skip this.
Print to chat
monday+chat(default): print the brief in chat as a mirror + artifact URL on last line:Posted: <url>.monday: print one-liner only:Posted: <url>— no full mirror.chat: print the full brief in chat. No artifact URL.doc: same asmonday+chat.
Publish errors
- Perms failure: degrade
create_update→create_doc→ print-only with banner "Couldn't publish to monday (permission error). Brief below."
Step 8: Share β (opt-in)
Runs only if user explicitly asked ("share with my manager", "post to the team", or Proactive mode selected Share).
list_users_and_teams→ resolve recipient. Default to declared manager if present; elseAskUserQuestionwith top-5 linked teammates.create_notification({ userId, itemId: <artifact>, text: "Morning briefing for <Mon DD>" }).- Optional:
create_updateon a team-rollup board (resolve bysearch/AskUserQuestion— don't assume a fixed name). Same footer + skill-id-comment convention.
Step 9: Proactive extension (opt-in)
Runs only if mode = Proactive AND session decision was "approve all" or "review each".
For each item in Stale / Going cold bucket:
create_update(itemId, "*Claude nudge:* No activity in <X> days. What's the next step?").
For each item in Commit-today / Overdue follow-up bucket:
create_notification({ userId: <owner>, itemId, text: "Action due today on <name>" }).
"Review each" flow: print a one-line proposal per item before writing. yes → execute; no → skip; stop → halt.
Guard rails:
- If total actions > 20: batch into one review-list doc (
Proactive actions — <date>) with a single prompt. - Never post on items the user doesn't own unless they're board admin AND gave Proactive approval this session.
- Safety rail holds: no deletes, no amount-column writes, no cross-workspace moves.
Step 10: Close the loop
Print: Published Morning Briefing — <date>. <N> items scanned, <N> actions posted, <N> pending.
If any write failed mid-run: list written items in chat for manual cleanup. Do not attempt compensating deletes.
Shared patterns
- No title prefix. Discoverability via
Generated by Claude · <timestamp>footer +<!-- claude-skill-id: daily-briefing -->HTML comment. - Idempotency before create. Search same-day artifact first. Update, don't duplicate.
- Safety rail. No deletes, no amount-column writes, no cross-workspace moves. Stage/owner/last-touch/source edits OK in batched-confirm plan.
- Type-based column resolution, not name-based — global teams have non-English columns.
- Ask once per session when entering Proactive mode.
- Board type drives output — don't show pipeline totals to a contacts user; don't show follow-up queues to a pipeline user unless they also have a contacts board.
Error handling
| Failure | Behavior |
|---|---|
| Connector not installed | Step 0 stops; print install link |
| No CRM board found | Standalone fallback (Step 2c) — don't stop |
| Board >10K items | Cap at 2K most-recent, flag sampling |
| MCP tool error (retryable) | Backoff 3x; skip that strand; surface partial brief |
| Same-day artifact exists | Update in place |
| User halts mid-session | List written items in chat; no compensating deletes |
| 429 rate limit | Backoff 3x, then stop with retry message |
| Publish perms failure | Degrade to doc → print-only |
| Multiple CRM boards | AskUserQuestion with "all of them" option |
| Non-English columns | Resolve by type via get_column_type_info |
| Proactive writes >20 | Batch into one review-list doc |
Completion criteria
- [ ] Step 0 (connector check) ran and passed.
- [ ] Board type detected and synthesis path matched (pipeline / contacts / accounts / leads / standalone).
- [ ] If board found: exactly one α artifact created or updated (no duplicate — verified via skill-id HTML comment).
- [ ] If standalone: brief printed in chat only.
- [ ] Artifact body carries
Generated by Claudefooter +<!-- claude-skill-id: daily-briefing -->comment. - [ ] Chat mirror includes artifact URL on last line (non-standalone only).
- [ ] Any failed writes listed in final summary.
- [ ] Safety rail held: no deletes, no amount-column writes, no cross-workspace moves.
- [ ] Stage/owner/last-touch edits (if any) ran inside batched-confirm plan.
- [ ] If Proactive mode: single session-level decision captured, not per-item.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。