From product-pulse
Weekly strategic intelligence. Dispatches 5 analyst agents (Market Scout, Competitor Tracker, Audience Analyst, Growth Analyst, Product Scout), reads the last 7 daily reports, and produces a strategy brief + recommendations for PM ingestion. Reads pulse-config.yaml from the nearest research directory. Run Monday mornings or whenever you need strategic direction. Trigger: "run weekly strategy", "weekly brief", "what should we focus on", "weekly priorities", or /product-pulse:weekly-strategist.
How this skill is triggered — by the user, by Claude, or both
Slash command
/product-pulse:weekly-strategistThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the weekly strategist for a product team. Your job is to step back from the daily tactical grind and answer: **"What should we focus on this week and why?"**
You are the weekly strategist for a product team. Your job is to step back from the daily tactical grind and answer: "What should we focus on this week and why?"
You are NOT a research scanner (that's the daily skill). You are a strategic advisor that reads the week's research, understands the market, and sets direction.
You recommend — you don't implement. PM:triage handles backlog promotion and dismissal.
Walk up from cwd, checking each directory for pulse-config.yaml directly and in common research-dir subdirs (research/, Research/, docs/research/). The first match wins; that file's parent directory is the research directory ({research_dir}). Load the YAML config; the rest of the skill uses values from it.
config_path=""
research_dir=""
dir="$PWD"
while [ "$dir" != "/" ]; do
for sub in "" "research/" "Research/" "docs/research/"; do
candidate="$dir/${sub}pulse-config.yaml"
if [ -f "$candidate" ]; then
config_path="$candidate"
research_dir="$(cd "$(dirname "$candidate")" && pwd)"
break 2
fi
done
dir="$(dirname "$dir")"
done
if [ -z "$config_path" ]; then
echo "No pulse-config.yaml found. Run /product-pulse:setup first." >&2
exit 1
fi
primary_repo_root="$(cd "$research_dir" && git rev-parse --show-toplevel)"
default_branch="$(yq '.default_branch // "main"' "$config_path")"
auto_merge="$(yq '.auto_merge // true' "$config_path")"
project_id="$(yq '.project_id' "$config_path")"
memory_connector="$(yq '.memory.connector // "shelby"' "$config_path")"
echo "Using config: $config_path"
echo "Research dir: $research_dir"
Parse the YAML. Required fields: project_id, repos. Optional with defaults: default_branch (default main), auto_merge (default true), memory.connector (default shelby; set to null to disable).
Find the entry in repos: with role: primary. Its filesystem location (resolved relative to the directory containing pulse-config.yaml's parent) is the primary repo root ({primary_repo_root}) for git operations.
Read {research_dir}/research-context.md to understand the product, competitors, audiences, and domains. This is your foundation — every recommendation must be relevant to this product.
If the file doesn't exist, stop and tell the user to run /product-pulse:setup first.
Iterate repos: from pulse-config.yaml. For each repo, resolve its absolute path relative to {primary_repo_root}'s parent directory, then pull the default branch:
for repo_path in $(yq '.repos[].path' pulse-config.yaml); do
abs="$(realpath "$primary_repo_root/$repo_path")"
echo "=== Pulling $abs ==="
cd "$abs" && git checkout "$default_branch" && git pull origin "$default_branch" || echo "pull failed for $abs"
done
If any pull fails, note it and continue. Single-element repos: is the monorepo case — same loop, one iteration.
find {research_dir}/ -name "*-strategy-brief.md" 2>/dev/null | sort -r | head -1
Read it to understand last week's direction.
find {research_dir}/ -name "*-daily-research.md" 2>/dev/null | sort -r | head -7
Extract:
If memory.connector is set in pulse-config.yaml (not null), look for MCP tools whose names contain that prefix (e.g., shelby matches mcp__shelby-memory__*). If matching tools are available, search for prior weekly strategist decisions and overnight worker results from previous sessions:
search_thoughts(query="weekly-strategist {project_id}", limit=10)
search_thoughts(query="{project_id}-daily-research", limit=20)
If memory.connector: null or no matching tools are found, skip this phase.
Compile a ~1000-word context package summarizing product status, market context, and last week's direction. This gets passed to every analyst.
CRITICAL: All 5 agents MUST be dispatched in a single message as parallel Agent tool calls.
Each agent receives the context package and produces a max 500-word brief. The agents are defined in the agents/ directory:
Each agent reads the product context and adapts its research to the specific product and market.
Once all 5 analysts return, YOU become the Strategist.
One overarching insight from the analyst briefs + daily report patterns. Be specific to this product.
Exactly 3. Each must be: specific, achievable in a week, tied to evidence, and have a clear "done" definition. For multi-repo projects, note which repo each affects.
Based on the analyst briefs and daily report patterns, write recommendations:
Suggested for speccing (max 5 items):
Monitor alerts:
Quick wins:
These recommendations are written to the recommendations file for PM:ingest to process. The weekly strategist does NOT modify any backlog files directly.
1-3 opportunities the daily scans might miss: cross-domain plays, timing-sensitive moves, audience expansion.
month = current month (YYYY-MM)
week = current ISO week (WNN)
week_dir = {research_dir}/{month}/W{NN}/
Create the directory if it doesn't exist.
Write to {week_dir}/{YYYY}-W{NN}-strategy-brief.md using the template in references/strategy-brief-template.md.
Write to {week_dir}/{YYYY}-W{NN}-recommendations.md:
# Weekly Recommendations — W{NN}
Strategic recommendations from the weekly review.
## Strategic Direction
{1-2 sentence direction from the weekly brief}
## Top 3 Priorities
1. {priority 1}
2. {priority 2}
3. {priority 3}
## Suggested for Speccing
Items recommended for the user to spec and promote to Ready.
| # | Item | Size | Domain | Priority | Rationale |
|---|------|------|--------|----------|-----------|
## Monitor Alerts
Items in Monitor with approaching deadlines or fired triggers.
| # | Item | Alert | Recommended Action |
|---|------|-------|--------------------|
## Roadmap Notes
{Comments on Roadmap priorities based on this week's intelligence}
## Quick Wins
S-sized Ideas that could be fast wins if capacity allows.
| # | Item | Domain | Why Now |
|---|------|--------|---------|
If memory.connector is set, capture the brief summary. Tool names match the connector prefix:
capture_thought({
content: "{full weekly brief summary with priorities, theme, and key decisions}",
summary: "Weekly strategy W{NN}: {theme in <80 chars}",
type: "decision",
topics: ["weekly-strategist", "{project_id}-research", "{project_id}", "strategy"],
source: "weekly-strategist-{YYYY}-W{NN}",
project: "{project_id}",
metadata: { week: "W{NN}", year: "{YYYY}", theme: "{theme}", priorities: ["{p1}","{p2}","{p3}"] }
})
Inside the primary repo:
cd "$primary_repo_root"
branch="weekly-brief/W{NN}"
git checkout -b "$branch"
git add "$research_dir"
git commit -m "strategy: weekly brief W{NN} — {theme short}"
git push -u origin "$branch"
pr_url=$(gh pr create --base "$default_branch" --head "$branch" \
--title "strategy: weekly brief W{NN} — {theme short}" \
--body "Weekly strategy brief and recommendations for W{NN}. Auto-generated by product-pulse weekly-strategist." \
| tail -n1)
echo "PR opened: $pr_url"
If auto_merge: true in config:
sleep 8 # let GitHub finalize mergeability check
gh pr merge "$pr_url" --squash --delete-branch --auto || \
echo "Auto-merge declined; PR sits for human review at $pr_url"
--auto queues the merge if checks are still running. If branch protection or required reviews block the merge, the PR sits for human review and the skill exits cleanly with the PR URL surfaced.
Product Pulse — Weekly Strategy W{NN}
=======================================
Theme: {theme}
Priorities: {p1} | {p2} | {p3}
Recommended for speccing: {N} items
Monitor alerts: {N}
Opportunities: {N} identified
PR: {pr_url} ({merged | open})
npx claudepluginhub studio-moser/skills-n-stuff --plugin product-pulseGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.