Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/rodrigopg/whatsapp-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/rodrigopg/whatsapp-mcp/morning)<a href="https://agentmods.dev/commands/rodrigopg/whatsapp-mcp/morning"><img src="https://agentmods.dev/badge/commands/rodrigopg/whatsapp-mcp/morning/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/rodrigopg/whatsapp-mcp/morning"><img src="https://agentmods.dev/badge/commands/rodrigopg/whatsapp-mcp/morning.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.00649 |
| Opus 5.5 | $0.00000 | $0.00260 |
| Sonnet 5.5 | $0.00000 | $0.00130 |
| Haiku 4.5 | $0.00000 | $0.00065 |
Grade A, and why
morning scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 38 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Run the morning routine for the user. Nothing leaves this machine and no message is sent.
1. Review what is new
Do what /whats:triage does: review_next_messages, record or close matters following its rules, then mark_reviewed with next_cursor. Skip this step if there is nothing new.
2. Write chase drafts
Call list_matters with attention_only: true (same as_of as below). For each matter that the other person owes (owed_by: "other") and that has no pending draft in list_chase_drafts (state written), write a short, friendly message in the language and tone of that chat that asks about the snippet, and save it with create_chase_draft. This only saves a draft: nothing is sent.
3. Get the summary
Call morning_summary with as_of set to the current time with the user's UTC offset (for example 2026-10-12T07:00:00-03:00). The first call of the day builds the summary and stores it; calling again returns the same one.
4. Show it
One table, no running text, only what needs the user's action: name, time, snippet, link (when there is one), why it is there, and mark the uncertain ones. Keep the order you received (favorites, then who chased them or what they promised, then the rest).
- If
moreis above zero, end with "N more": offer to show them and, if the user agrees, callmorning_summaryagain withall: true. - Under the table, list the
announcementsas "closed because the other person confirmed": name, snippet, and offerreopen_matterif the user disagrees. - If nothing needs action, say so in one line.
5. Drafts waiting for the user
Show the drafts of the summary in a second table: draft id, name, the snippet it refers to and the text. For each one, ask the user: send as is, edit it, or discard it.
- Call
approve_chase_draftonly after the user explicitly said to send that draft, passing exactly the text they approved (their edit, if they edited). That is the only way anything is sent. - If they discard it, call
discard_chase_draft. If they say nothing, leave it: it shows up again tomorrow. - Never approve on your own, not even a draft that looks obvious, and never on a vague "ok" for several drafts at once.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 38 lines · 0 tokens per session scan A 4b296f6f2f08
morning is a command published in the GitHub repository rodrigopg/whatsapp-mcp (4 stars, last pushed today), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 649 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-12.
Other commands, from other repositories
scout-meta-review
Run an interactive Scout meta-review — a system-level audit that sits above the individual session types. Checks whether sessions are running, mistake audit is trending well, proposals are flowing, KB files are healthy, and data-source coverage is consistent across session types. Runs in the current conversation.
scout-work
Interactive work session — walks through today's actionable items one at a time, presents a recommended action with draft content, and executes each one only with explicit approval. Runs in the current conversation (not as a background session).
backfill
Backfill older message history.
messages
List messages in a WhatsApp chat.
context
Get surrounding message context.
pm-learn
Auto-extract repeatable patterns, decisions, and cost outliers from the current session and append to .great-pm/lessons.md. Promotes ≥3-occurrence patterns to /.great-pm/decisions.md. Runs continuous-learner.