Agent skill
team-update
Write the recurring team update covering a period, assembled from what actually happened in Projects, Calendar, Memos and optionally Tasks rather than from what somebody remembers.
From sarahcallmesmadds/gtm-operator · 27 skills · 0 · pushed 2026-09-02
What it does when it runs
Write the recurring team update covering a period, assembled from what actually happened in Projects, Calendar, Memos and optionally Tasks rather than from what somebody remembers. Use when the user says "write the weekly update", "write the team update", "what shipped this week", "monthly recap for the team", or names a period to summarise. Reads Projects, Calendar, Memos and optionally Tasks, writes one Team Update memo with Period covered set, and sends nothing anywhere.
Read from the skill and the 0 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- mcp__*__notion-create-pages
- mcp__*__notion-fetch
- mcp__*__notion-query-data-sources
- mcp__*__notion-update-page
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- Write
- Bash(node:*)
- mcp__*__notion-fetch
- mcp__*__notion-query-data-sources
- mcp__*__notion-create-pages
- mcp__*__notion-update-page
- Actions present in the files
- shellwrites files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/sarahcallmesmadds/gtm-operator.git /tmp/gtm-operator git -C /tmp/gtm-operator sparse-checkout set "plugins/memos/skills/team-update" mkdir -p ~/.claude/skills/team-update cp -R "/tmp/gtm-operator/plugins/memos/skills/team-update/." ~/.claude/skills/team-update/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 27 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add sarahcallmesmadds/gtm-operator /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
Before you install: this skill will not complete its job on a bare agent. It needs mcp__*__notion-create-pages, mcp__*__notion-fetch, mcp__*__notion-query-data-sources, mcp__*__notion-update-page, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from sarahcallmesmadds/gtm-operator/blob/a93c6e98a742d183823691197b8d9be9edd114c6/plugins/memos/skills/team-update/SKILL.md, which is licensed MIT (repository). 670 words, 8 headings.
team-update
The summary of a period, assembled from the databases rather than from memory.
The line this skill holds: a recurring send that never asks for anything becomes wallpaper within a month, and once it is wallpaper the habit dies. Needs A Decision From You is the section that keeps the update read, it cannot be assembled from status fields, and it is proposed to the user rather than guessed or deleted.
How this skill works
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" context
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" team-update <period.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" window <period.json> <projects.json> <calendar.json> <memos.json> [tasks.json]
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" check <proposed.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" create <memo.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" prove <memo.json> <readback.json> <created-url>
The general write rules are new's and are not restated: refuse without
config, fetch live select options before choosing any value, preview in full
inline, create only on an explicit yes, prove the write, and never edit a
published memo.
Step 1. The period
Write it to a file: { "from": "2026-08-17", "to": "2026-08-23" }. The cadence
is whatever the team already has; nothing here schedules anything, because v1
has no unattended runs.
Step 2. Read the databases
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" team-update period.json
That returns one query per database. Send the memos, projects and calendar queries, each against its own data source url, and save each result whole. Tasks is optional: read it only when a project's own status is not enough to tell the story, and say whether it was read.
Do not compose these queries by hand and do not narrow them with date SQL. The window filtering happens in the script, where the comparison is measured, and the output says why.
Then partition:
node "${CLAUDE_PLUGIN_ROOT}/scripts/memos.js" window period.json projects.json calendar.json memos.json
Step 3. Judge what is worth a line
window partitions and counts. What goes in is your judgment, and the filter
is: would somebody outside the team doing the work change anything on
hearing it? A period produces more movement than a reader wants.
- What Shipped is one line per item, linking out. The related view carries the depth; typing it twice is how the writer stops doing this every week.
- Done projects carry a caveat the output states: Done is the status now, and when it went Done is not recorded. Cross-check against the releases and updates in the period before claiming one shipped this week, and drop the ones that did not.
- What Is Still Open names the stuck items as stuck.
- Do not invent progress. If nothing moved, say nothing moved, which is information.
Step 4. Needs A Decision From You
This section cannot be assembled, and the whole skill exists for it. Knowing what is actually stuck and on whom requires reading between the status fields. Propose candidates from the stuck items, ask the user, and if the honest answer is nothing this week, write "nothing this week" rather than deleting the section. An empty week is information too.
Step 5. Draft, preview, write, prove
TLDR is written last: three to five lines, the whole period, because most
readers will read only that. Period covered is set to the period, which is
the field that separates this type from a Project Update, and the script
requires it. Then the same gates as every write: check, full inline preview,
an explicit yes, create, read back, prove with the created url.
What this skill does not do
- Does not send the update anywhere. There is no outbound Slack field. Read-only Slack and Gmail context is available to other skills, while this skill writes the row and stops.
- Does not invent progress, and does not restate detail the related view carries.
- Does not fill Needs A Decision From You by guessing. It proposes and the user confirms.
- Does not run unattended. Somebody invokes it, on the team's own cadence.
- Does not edit a published update. A correction is a new memo, through
new.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- product-update-logger by Varnan-Tech · 645
- team-performance-dashboard by LaGrowthMachine · 37
- salesforce-pipeline-update by composio-community · 2
Need help setting it up?
This page tells you what team-update does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.