# Weekly Strategist

> Use when the last 7 daily reports and current market evidence need a weekly strategy brief, exactly three priorities, and recommendations for PM ingestion.

- Skill: `studio-moser/weekly-strategist` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add studio-moser/weekly-strategist`
- Raw SKILL.md: https://api.skillmd.com/api/skills/studio-moser/weekly-strategist/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Studio-Moser (https://skillmd.com/u/studio-moser)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/studio-moser/weekly-strategist

---


# Product Pulse — Weekly Strategist

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.

---

## Ground Rules

- **Advisor only** — produce recommendations. PM:triage handles promotion.
- **Brevity over comprehensiveness** — The brief should be readable in 5 minutes. Each analyst produces max 500 words.
- **Opinionated** — Make recommendations. Say "do X" not "you could do X or Y."
- **Error tolerant** — If a Harness request fails, continue with the other research packets. If no daily reports exist, use web research. If memory is unavailable, use file-based data.
- **Harness boundary** — Invoke the named Harness skill through `Skill`; do not read Harness skill, reference, script, or rubric files, and do not perform Harness phases inside Product Pulse. Do not read or inspect the model rubric, and do not resolve a model, effort, provider, or executor. Do not repair an unresolved or blocked route inside Product Pulse; consume and report the typed Harness Result.

---

## Phase 0: Load Context

### 0.0 Discover Configuration

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.

```bash
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.

### 0.1 Read Product Context

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.

### 0.2 Pull Latest (all configured repos)

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:

```bash
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.

### 0.3 Read Last Weekly Brief

```bash
find {research_dir}/ -name "*-strategy-brief.md" 2>/dev/null | sort -r | head -1
```

Read it to understand last week's direction.

### 0.4 Read Last 7 Daily Reports

```bash
find {research_dir}/ -name "*-daily-research.md" 2>/dev/null | sort -r | head -7
```

Extract:
- Recurring themes across multiple days
- High-impact findings
- Cross-domain patterns
- Trend lines (increasing frequency or urgency)

### 0.5 Search Memory (if configured)

If `memory.connector` is set in `pulse-config.yaml` (not `null`), define recall
intents for prior weekly decisions and recent daily-research outcomes. Attach them
to each Phase 2 Harness request. Product Pulse does not discover or call a memory
provider; when Harness returns no enrichment, continue from repository reports.

### 0.6 Build Context Package

Compile a ~1000-word context package summarizing product status, market context, and last week's direction. This gets passed to every analyst.

---

## Phase 2: Request Five Analyst Briefs

Invoke `harness:execute` five times with `operation: execute` and `route: bulk`, once
for each named analyst role. Submit independent requests concurrently. Product Pulse
chooses the questions, source standards, and analyst constraints; Harness owns concrete
routing and execution.

Use the packet below for each role. Include the entire role catalog in every request so
a fresh worker can apply the selected role without opening a Product Pulse plugin path.

```yaml
operation: execute
route: bulk
outcome: Return one source-backed weekly analyst brief of at most 500 words for the selected Product Pulse role
context:
  project: {project_id}
  mode: fresh
  state: {selected role, full context package, last 7 daily-report patterns, previous weekly direction, configured sources, and current date}
  files: [{repository-relative research context and accepted daily report paths}]
  memory:
    enabled: {memory.connector is not null}
    recall:
      - purpose: Recover prior weekly strategy decisions
        query: Weekly strategist decisions for {project_id}
        limit: 10
      - purpose: Recover recent daily-research outcomes
        query: Daily research outcomes for {project_id}
        limit: 20
    capture: []
authority:
  working_directory: {absolute primary repository root}
  allowed_paths: [{read-only paths named in context.files}]
  tools: [internet research, read-only source retrieval]
  approvals: []
constraints:
  - |
    Shared Product Pulse analyst rules:
    Adapt every query to this product and the selected role. Prefer developments from
    the last 7 days, append the current month and year to at least one search, and open
    every cited source URL. Assess source credibility from authority, directness,
    corroboration, publication or update date, and currentness. Prefer primary sources;
    do not fabricate URLs or strengthen claims. Return max 500 words, explain the
    product-specific "so what," give one recommended action, and say plainly when no
    significant evidence exists.
  - |
    Role catalog — apply only the selected role:
    Market Scout: investigate industry shifts, new entrants, funding, acquisitions,
    shutdowns, regulation, technology changes, and emerging trends. Return Key
    Findings, Implications for the product, and Recommended Action.
    Competitor Tracker: inspect each named competitor's releases, changelogs, official
    posts, pricing, positioning, hiring signals, and public repository activity. Focus
    on landscape-changing actions. Return Competitor Activity, Competitive Landscape
    Shift, and Recommended Action; name quiet competitors without padding.
    Audience Analyst: investigate recent complaints, requests, discussions, unmet needs,
    and emerging segments. Focus on pain points rather than demographics. Return
    Audience Signals, Emerging Segments, and Recommended Action.
    Growth Analyst: investigate specific distribution channels, partnerships,
    integrations, search demand, content angles, communities, directories, and
    marketplaces appropriate to the product stage. Rank concrete opportunities by
    impact and effort. Return Growth Opportunities and Top Recommendation.
    Product Scout: investigate evidence-backed feature gaps, documented APIs and data
    sources, technical capabilities, UX patterns, integrations, and user requests.
    Include value and small/medium/large effort. Return Product Opportunities and Top
    Recommendation; hypothetical APIs do not qualify.
  - Do not modify files, publish reports, or choose the weekly priorities
verification:
  seam: Open every source URL and compare each claim, date, credibility assessment, role requirement, and recommendation with the source and supplied product context
  expected: The selected role brief is current, source-supported, product-specific, complete, and at most 500 words
```

Consume the exact Harness Result. Accept a brief only from `status: accepted` with
`evidence.outcome: proven`, then reproduce the verification seam. Log failed, blocked,
or abandoned roles and continue. Do not take a single analyst claim at face value:
corroborate any claim that could drive a top-three priority.

---

## Phase 3: Adjudicate Evidence and Synthesize Strategy

When accepted sources remain contradictory or a high-impact claim is not adequately
corroborated, materialize the disputed claim, full citations, credibility assessments,
and source excerpts as one immutable snapshot digest before requesting a strategy draft.
Invoke `harness:review` with `operation: review` and `route: review`; do not silently
pick a winner or let contested evidence reach synthesis first.

```yaml
operation: review
route: review
outcome: Adjudicate one contradictory or insufficiently corroborated high-impact research claim before strategy synthesis
context:
  project: {project_id}
  mode: fresh
  state: {disputed claim, full source excerpts, publication dates, prior corroboration attempts, and product impact}
  files: [{read-only repository-relative immutable claim packet when materialized as a file}]
authority:
  working_directory: {absolute primary repository root}
  allowed_paths: [{read-only immutable claim packet and cited evidence}]
  tools: [read-only source retrieval and inspection]
  approvals: []
constraints:
  - Compare the contradictory evidence without strengthening either position
  - Assess source credibility, freshness, authority, directness, and corroboration
  - Verify all citations and identify what remains unknown
  - Report whether the high-impact claim is supported, refuted, or unresolved; do not edit files
verification:
  seam: Reopen every citation and reproduce the credibility comparison against the immutable claim packet
  expected: The adjudication names the best-supported position and all unresolved uncertainty with no fabricated claim
  fixed_target: {immutable digest of the contradictory or high-impact claim packet and cited evidence}
```

Only use an adjudication with `status: accepted`, matching `evidence.fixed_target`,
and `evidence.outcome: proven`. Otherwise keep the conflict visible and exclude it from
priority-setting.

### Branch Manifest

Build the Branch Manifest before synthesis with one row for the five analyst roles plus
every required adjudication. For a returned result, record branch identity, exact Harness
`status`, evidence outcome, blockers, and elapsed when available (`unavailable`
otherwise). When no Harness Result exists, retain the expected identity. Record
`status: unavailable (no result)` as a Product Pulse manifest sentinel, not a Harness
status; record evidence outcome `unproven`, blocker `missing Harness Result`, and elapsed
`unavailable`; count that row as unproven for coverage and exclude its claims. Only
accepted/proven branches whose verification seam Product Pulse reproduced may contribute
content. Keep every other expected branch in the manifest and exclude its claims.

After every required adjudication is accepted or explicitly excluded, invoke
`harness:execute` with `operation: execute` and `route: taste` for the strategy draft.
Product Pulse remains the accepting workflow and writes the files only after validating
the returned Harness Result.

```yaml
operation: execute
route: taste
outcome: Produce a concise weekly strategy brief and recommendations draft grounded in accepted research and adjudications
context:
  project: {project_id}
  mode: fresh
  state: {complete branch manifest, accepted analyst briefs, accepted adjudications, excluded unresolved claims, last 7 daily reports, previous weekly direction, product context, configured repos, and corroboration notes}
  files: [{repository-relative accepted daily reports and prior strategy brief}]
  memory:
    enabled: {memory.connector is not null}
    recall: []
    capture:
      - when: accepted
        type: decision
        summary: Weekly strategy W{NN}: {theme in fewer than 80 characters}
        content: {proven theme, exactly three priorities, and key decisions}
        topics: [weekly-strategist, {project_id}-research, {project_id}, strategy]
authority:
  working_directory: {absolute primary repository root}
  allowed_paths: [{read-only paths named in context.files}]
  tools: [read-only inspection]
  approvals: []
constraints:
  - |
    Product Pulse weekly strategist:
    Identify one product-specific weekly theme. Set exactly 3 priorities; each must be
    achievable in one week, tied to evidence, identify the affected repo, and include a
    clear done definition. Only corroborated claims or accepted adjudications may drive
    a priority; exclude unresolved contested claims and preserve source citations,
    credibility caveats, dates, and confidence.
  - |
    Produce an opinionated strategy brief readable in 5 minutes plus recommendations:
    at most 5 Suggested for Speccing items with rationale, served priority, and size;
    Monitor Alerts; Quick Wins; Roadmap Notes; and 1-3 cross-domain opportunities.
    Recommend only—do not promote, dismiss, or modify backlog items.
  - |
    Include the intended report paths {week_dir}/{YYYY}-W{NN}-strategy-brief.md and
    {week_dir}/{YYYY}-W{NN}-recommendations.md. Do not write or publish files.
  - |
    Report coverage as expected, accepted/proven, failed, blocked, abandoned, and
    unproven. Count an accepted/unproven result as unproven, not accepted. Mark degraded
    coverage whenever accepted/proven is fewer than expected. Never describe a failed,
    blocked, abandoned, unproven, or missing branch as scanned, researched, or covered.
verification:
  seam: Trace every theme, priority, alert, and recommendation to accepted cited evidence or adjudication and verify branch manifest totals, including no-result unproven classification, degraded-coverage disclosure, excluded claims, exact priority count, report sections, brevity, and report paths
  expected: The strategy brief and recommendations are evidence-grounded, decisive, complete, accurately disclose coverage, and ready for Product Pulse publication
```

Require `status: accepted` and `evidence.outcome: proven`, then reproduce the seam.

### 3.1 Identify the Week's Theme

One overarching insight from the analyst briefs + daily report patterns. Be specific to this product.

### 3.2 Set Top 3 Priorities

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.

### 3.3 Write Recommendations

Based on the analyst briefs and daily report patterns, write recommendations:

**Suggested for speccing** (max 5 items):
- Identify up to 5 opportunities from the week's findings that deserve deeper investigation and speccing
- Explain why each is recommended and which priority it serves
- Note the suggested size

**Monitor alerts:**
- Flag any external developments that should be tracked (competitor launches, API changes, regulatory moves)

**Quick wins:**
- S-sized opportunities that could be fast wins if capacity allows

These recommendations are written to the recommendations file for PM:ingest to process. The weekly strategist does NOT modify any backlog files directly.

### 3.4 Spot Opportunities

1-3 opportunities the daily scans might miss: cross-domain plays, timing-sensitive moves, audience expansion.

---

## Phase 4: Write Output

### Determine paths

```
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 Strategy Brief

Write to `{week_dir}/{YYYY}-W{NN}-strategy-brief.md` using the template in `references/strategy-brief-template.md`.
Add this line immediately below the title: `Research Coverage: {accepted}/{expected}
accepted/proven; {failed} failed; {blocked} blocked; {abandoned} abandoned; {unproven}
unproven{ — degraded coverage when accepted < expected}`.

### Write Recommendations

Write to `{week_dir}/{YYYY}-W{NN}-recommendations.md`:

```markdown
# Weekly Recommendations — W{NN}

Research Coverage: {accepted}/{expected} accepted/proven; {failed} failed; {blocked} blocked; {abandoned} abandoned; {unproven} unproven{ — degraded coverage when accepted < expected}

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 |
|---|------|--------|---------|
```

---

## Phase 5: Persist

### 5.1 Confirm optional memory enrichment

The Phase 3 Harness request carries the weekly capture intent. After Product Pulse
reproduces its proof, retain any returned Harness memory identifiers in the run
summary. If memory is disabled or unavailable, continue with the brief and leave
those optional identifiers empty; do not call a provider directly.

### 5.2 Branch + commit + PR (always)

Inside the primary repo:

```bash
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"
```

### 5.3 Auto-merge (if enabled and mergeable)

If `auto_merge: true` in config:

```bash
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.

---

## Phase 6: Summary

```
Product Pulse — Weekly Strategy W{NN}
=======================================
Theme: {theme}
Priorities: {p1} | {p2} | {p3}
Research Coverage: {accepted}/{expected} accepted/proven; {failed} failed; {blocked} blocked; {abandoned} abandoned; {unproven} unproven{ — degraded coverage when accepted < expected}
Recommended for speccing: {N} items
Monitor alerts: {N}
Opportunities: {N} identified
PR: {pr_url} ({merged | open})
```

