product-manager-weekly-update
Skill0 starsChanged 14 days agoMITView on GitHub
Drafts a Product Manager''s weekly status update from meeting notes, watched Slack channels and DMs, watched docs, and owned features. Markdown in chat by default, or a record in your own tracker (Notion or similar) if connected and you ask. Use whenever the user asks for help with a "weekly update", "PM update", "weekly status", or asks to "draft my update", "write this week''s update", "summarize my week", "what should I tell my manager (or whoever reads it) this week", or "what''s gone on with my features this week". Works on demand or weekly. Single owner of a PM''s own weekly status draft; its output feeds product-lead-weekly-update. Not for rolling several PMs into one leadership update; use product-lead-weekly-update. Not for checking feature records are accurate; use feature-validation.
In this repository23 other files it gives its agents.
- attention-radarSkill
- competitor-release-producerSkill
- conviction-docSkill
- daily-digest-conductorSkill
- daily-digestSkill
- digest-composerSkill
- engineering-progress-producerSkill
- feature-creationSkill
- feature-validationSkill
- feedback-idea-producerSkill
- field-qual-producerSkill
- friction-finderSkill
- funnel-dropoff-investigatorSkill
- gtm-scoringSkill
- launch-watchSkill
- product-announcement-generatorSkill
- product-lead-weekly-updateSkill
- prototype-fidelitySkill
- pulseSkill
- release-kitSkill
- release-note-drafterSkill
- support-trends-producerSkill
- weekly-prioSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 34
Done check: every item in the drafting checklist in references/update-format.md passes: the title is exact, the Features covered line (or …
- Distinctive: line 119
Weekly run: Read the configured sources (or what the user pastes), synthesize, and output the update.
- Very specific: line 154
Bring your own tracker (optional): If output.mode is tracker, or the user asks, write the update as a new page or record in their tracker.
- Very specific: line 156
Follow references/tracker-mode.md: read the target's schema first, map to existing properties by name, never create properties or options, …
- Distinctive: line 245
Use your client's multiple-choice question tool for closed choices (confirm inferred features, pick a schedule, pick a style) if it has one.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Product Manager Weekly Update
Drafts the user's weekly PM update from sources they already produce (meeting
notes, Slack threads, watched docs, owned features), so the weekly update
takes no extra typing. "PM" means whoever owns the product decisions for a
set of features. "Manager" means whoever reads the update (config
audience.name).
Sibling skill, optional: product-lead-weekly-update rolls several PM
updates into one leadership update. It shares this skill's config file and
output conventions. If the sibling isn't installed and the user asks for its
job, say it exists (https://github.com/pendo-io/Product-Loop) and offer to
install it: in Claude Code, or anywhere you can write files and reach
GitHub, offer to do it yourself, and on the user's OK download that skill's
folder from the repo into ~/.claude/skills/<skill-name>/. Elsewhere (for
example the Claude apps), tell the user to download the folder and upload
it as a skill. Never block on it.
Done
- Result: one weekly update titled
<PM name> - PM update - <YYYY-MM-DD>, as markdown in chat (plus a saved file whenoutput.markdown_folderis set), or as one tracker record with its URL in tracker mode. - Done check: every item in the drafting checklist in
references/update-format.mdpasses: the title is exact, the Features covered line (or tracker relation) lists exactly the features in the body, and every claim traces to a source read this run. The user has the update or its location. - Next consumer: the reader in
audience.name, and theproduct-lead-weekly-updateskill, which finds the update by its exact title and Features covered line. - Intent: a short, true update. When the steps don't cover a case, leave a thing out rather than pad; a thin week makes a short update.
Boundaries and authority
- Never invent progress, dates, or links, because every claim must trace to a source read this run. If a source is thin, write a shorter update.
- Never copy a prior title, because the product-lead skill finds PM updates by the exact title format. Mirror prior updates for the body only.
- Never create tracker properties or options, and never write computed,
rollup, or auto-set fields, because a tracker may accept a computed
value and silently discard it. Keep unmatched content in the body and
say so in chat (
references/tracker-mode.md). - Don't enumerate a large Slack workspace, because a workspace-wide search pulls in unrelated threads. Start from the configured channels and DMs and search feature names within them; run a wider search only when the user asks.
- Don't ask questions on scheduled runs, because they are
non-interactive. Use the default for a missing optional setting and note
it in the draft. If something required is missing (no user name, no
sources at all), stop and leave a clear "setup incomplete" note (and a
DM if Slack is connected and
user.slack_user_idis saved; if the id is empty, don't look it up unattended: say in the run's chat output that no DM was sent because no Slack user id is saved). - Leave out personal and people content, because the update is read by people who shouldn't see it, even when the source discusses it: someone's health, family, or time off beyond "out this week", compensation, performance feedback or reviews, hiring or HR matters about a named person, and personal chat. Keep the work: decisions, progress, blockers, risks, asks. If one line mixes both, keep the work part and drop the rest.
- Ask before overwriting a saved update file, because the user may
have edited it since; a scheduled run adds
-2instead. - Read back every write before reporting it done, because a write can
fail or drop a field without an error. Re-fetch the tracker record and
check its title, features field, and body; re-read a saved update
file or the
pm_weeklyconfig section; check the DM's returned permalink; and confirm an installed sibling'sSKILL.mdis on disk.
Authority: the skill can write (1) its own pm_weekly config section
(setup, the saved output preference, last_run); (2) the update as a
markdown file in output.markdown_folder; (3) one tracker record per
update, only when output.mode is tracker or the user asks; (4) a Slack
DM to the user, for the review heads-up when review_step.notify is
slack_dm and for the scheduled "setup incomplete" note; (5) the sibling
skill's folder in ~/.claude/skills/, only on the user's OK. Everything
else is a read.
Judgment vs mechanics
The model judges what was substantive this week, the phrasing, which body pattern (A or B) matches the PM's prior updates, and the voice. Connectors gather the sources. The rest are fixed rules the model still applies in prose, with no script behind them: the window dates, the file name, the title, the match between the Features covered line and the body, and the 150 to 500 word length. Each run rebuilds from config and the sources; don't reuse a draft from an earlier run in the conversation.
Honesty
- An empty week is a valid result. Omit features with nothing
substantive; no "no update this week" filler
(
references/update-format.md→ Content coverage). - "Couldn't check" is not "nothing happened." Say which sources were
skipped because they aren't connected. In tracker mode, a wrong filter
form returns zero rows that look like "no prior updates"
(
references/tracker-mode.md). - Unknown is not empty. The "no metrics set" rule is in
references/update-format.md. - No time estimates for the skill's own work.
Modes
- Setup (first run, optional). Gather the config in
references/setup.mdand offer to save it. Skip it if the user just wants a draft now. - Weekly run. Read the configured sources (or what the user pastes), synthesize, and output the update.
Config
Settings live in the pm_weekly section of a shared config file, by
default config.json in the user's working folder. If the daily-digest
conductor's shared config (.daily-digest/config.json in the workspace)
exists, use this skill's section of that file instead (shape in
config.example.json). config.* below means that section. The sibling
skills read the same file, so keep other sections untouched.
- Config present → weekly run.
- Config absent (or holding only a saved
outputpreference) → ask whether to set up now (about 3 minutes) or just draft this week's update. If "just draft", ask only for what the run can't infer: the user's name, the features to cover (or "whatever I paste"), and any context they want to paste. Never treat missing config as an error. - No writable folder (for example a chat client without file access) → run without saving and say that settings won't persist.
Re-setup triggers such as "update my Slack sources", "change my schedule",
"add a feature I own", or "redo my setup" re-run only the matching step in
references/setup.md.
Output
- Default: markdown. Produce the update in chat in the format in
references/update-format.md. If the config hasoutput.markdown_folder, also save it there as<YYYY-MM-DD>-pm-update-<pm-name-slug>.md(name lowercased, spaces as hyphens) so the product-lead skill can read it. If that file already exists, ask before overwriting (a scheduled run adds-2). Save only the update itself; handoff notes such as the style-fallback note go in chat, never in the file. - Bring your own tracker (optional). If
output.modeistracker, or the user asks, write the update as a new page or record in their tracker. Followreferences/tracker-mode.md: read the target's schema first, map to existing properties by name, never create properties or options, and never write computed, rollup, or auto-set fields. No saved output preference (setup skipped or not done, so the section has no
outputsettings). Show the draft in chat, then ask once, right after it:Where should this live?
- Chat only
- Save to a folder
- Write to your system of record (Notion, Confluence, Jira, or similar)
Save the answer to
config.output(create the section if needed and leave the rest of the config alone), and don't ask again on later runs. Chat only →mode: markdown. Folder →mode: markdownplusmarkdown_folder(ask for the path once, default./weekly-updates/), then save this draft there. System of record →mode: tracker: ask for the destination URL once, validate it perreferences/tracker-mode.md(read the schema, never create properties), save it tooutput.tracker, then write this update there. Saving onlyoutputdoesn't count as finished setup. If there's no writable folder, use the answer for this run and say it won't persist. Scheduled runs don't ask: they use markdown in chat and note in the draft that no output preference is saved. Setup's Step 7 is the full version of this question.
Weekly run flow
- Read config (if present):
user,audience,sources,features,output,template,style,review_step,schedule,last_run. - Determine the window. It runs from your last update to today, in
the user's timezone: from the day after
last_run.iso_timestampwhen that run's status isdeliveredorpublished, or the last 7 days ending today if there's no earlier update. Always use the actual current date; a delayed scheduled run still ends the window today. Update day: under thedaily-digestconductor, the day is the conductor'scadencefor this skill (weekly-<day>) andschedule.dayis not used; run alone, it isschedule.day. If neither is set, use the last working day of the user's week and say in chat that it's the default. - Gather context, in this order, because later steps refer to earlier
ones. Skip any source that isn't connected and say which ones you
skipped. See
references/sources.mdfor tool patterns.- Owned features. From the connected feature tracker (filter on
the owner field set in
features.owner_field), orfeatures.listin config, or ask the user to list them. - Meeting notes. From the meeting-notes connector, for the window. The query returns a list of notes; fetch each note to get its summary, and read the transcript only if the summary is missing. Summarize long ones before drafting.
- Slack. For each
sources.slackentry, read the window. Keep threads the PM wrote, was mentioned in, or that name one of the owned features. Feature-name searches are scoped to the configured and watched channels, not the whole workspace, unless the user asks for a wider search; the same keep rule and content filter apply to search results. - Watched docs. Fetch each
sources.docsentry. Note edits and comments inside the window. - Pasted context. Anything the user pastes counts as a source, and is the only source when nothing is connected. In an on-demand run where no source is configured or connected, ask the user to paste their week (meeting notes, Slack threads, doc changes) before drafting.
- Prior updates. The PM's last 2 or 3 updates, from the tracker
in tracker mode, from
output.markdown_folder, or pasted. These are style anchors: match the PM's voice and body structure. The title format is fixed regardless (seereferences/update-format.md); mirror only the body, never a prior title.
- Owned features. From the connected feature tracker (filter on
the owner field set in
- Draft the update per
references/update-format.md. Each feature gets a bullet that leads with the feature name (a link to the feature record if one exists), then 1 to 3 sentences on progress, blockers, decisions, and what's next. The empty-week, customer-feedback, and "no metrics set" rules live inreferences/update-format.md. Include "Additional work" for items that don't map to a tracked feature. - Deliver. Markdown in chat (and saved to
output.markdown_folderif set), or, in tracker mode, create the record and link it to every feature the body covers. - Review step. In markdown mode the chat draft is the review. In
tracker mode, if
review_step.enabled, tell the user in chat that the record is created and ready to edit in place. Ifreview_step.notifyisslack_dm, also DM them atuser.slack_user_id(references/sources.md→ Slack: send a DM); if Slack isn't connected or the DM fails, say so in chat. Trackers like Notion have no draft state, so review means publish, then edit. - Record the run in
config.last_run(timestamp, status, output location) if config is writable.
Asking the user for input
Use your client's multiple-choice question tool for closed choices (confirm inferred features, pick a schedule, pick a style) if it has one; otherwise show short numbered options. Ask free-text questions (channel names, doc URLs, style notes) in prose. Don't list options in prose and also show them as buttons.
Gotchas
- The feature list in the update mirrors the body, not ownership. Link or list only the features the body covers this week, never the full owned list.
- PMs format updates differently. Some group by product area with
feature sub-bullets, some write one paragraph per feature. Mirror the
individual PM's prior body format (see
references/update-format.md). - Filter by content, not by meeting type. 1:1s and standups carry real work, so read them. The personal-content stop is in Boundaries.
Scheduling (optional)
The skill works on demand. To run it weekly, register a scheduled task in
whatever your client offers (for example /schedule in Claude Cowork or
Claude Code) with the prompt: "Run the product-manager-weekly-update skill. It reads its
config from its section of config.json (see Config)." If you use the
daily-digest conductor, point the prompt at .daily-digest/config.json
instead, since that's where this skill's section lives. Default: late in
the day on your team's update day, in the user's timezone, leaving time to
review before the day ends; if the user doesn't name a day, use the last
working day of their week and tell them it's the default. Keep
config.schedule in sync with what was registered. Under the conductor,
don't register a task or fill schedule: the conductor's cadence holds
the day (see Weekly run flow step 2).
Scheduled tasks generally only run while the machine is awake and the app
is open, and a connector that needs re-authentication will fail the run;
tell the user both during setup.
Files in this skill
| File | When to load |
SKILL.md | Always |
config.example.json | Shape of the pm_weekly config section |
references/setup.md | First run, or when the user changes part of the setup |
references/update-format.md | When drafting |
references/sources.md | When unsure how to read a source |
references/tracker-mode.md | Only in tracker mode |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

