Agent skill
problem-statement
Write the case that something is worth fixing, before anyone proposes a fix, as one Problem Statement memo in the Memos log.
From sarahcallmesmadds/gtm-operator · 27 skills · 0 · pushed 2026-09-02
What it does when it runs
Write the case that something is worth fixing, before anyone proposes a fix, as one Problem Statement memo in the Memos log. Use when the user says "write the problem statement", "write up this problem", "make the case for fixing this", when problem-scan hands one over, or before scoping anything. No project needs to exist. Writes one page and its body, nothing without an explicit yes, and never edits anything.
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/projects/skills/problem-statement" mkdir -p ~/.claude/skills/problem-statement cp -R "/tmp/gtm-operator/plugins/projects/skills/problem-statement/." ~/.claude/skills/problem-statement/
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/projects/skills/problem-statement/SKILL.md, which is licensed MIT (repository). 678 words, 6 headings.
problem-statement
The case that something is worth fixing, made before anyone proposes a fix.
The line this skill holds: a problem with no evidence cannot be weighed
against any other problem. The Evidence section is never left blank, and the
whole point of writing the statement down is to make that comparison possible.
It is the input to scope, and scoping something whose stakes were never
written down is how teams build the wrong thing carefully.
How this skill works
scripts/projects.js decides what to send. You send it. The memo shapes
are the same vendored builder the memos plugin runs, so the two plugins
cannot disagree about what a Problem Statement looks like.
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-check <proposed.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-create <memo.json>
node "${CLAUDE_PLUGIN_ROOT}/scripts/projects.js" memo-prove <memo.json> <readback.json> <created-url>
Do not build a property payload by hand, and never invent a select
value: fetch the property's current options from Notion before choosing any
value. Notion refuses an unknown value with a 400 that loses the whole page.
If config is absent, the script refuses and names setup; print what it said
and stop.
Step 1. Is there enough here to be worth writing
The judgment this skill carries. Evidence means numbers where they exist, and where they do not, what was observed and how often. Every line names its source: the channel and date for a quote, the report or file for a number, the person's role. A section also names what is missing and why that absence matters, because a gap in the evidence is often the finding.
Step 2. Draft, in the Problem Statement template
Type is Problem Statement, and this skill writes no other. The sections, in
order: What This Blocks, What's Happening, Who Feels It, Evidence, Cost Of
Doing Nothing, Sources conditional and last.
- What This Blocks leads and carries four things: the goal at risk, where it stands, who owns it, and the dated decision it holds up. Without the dated decision the problem has no urgency and sits unread.
- What's Happening carries no solution. A problem statement with a fix inside it has already skipped the argument it exists to make.
- Who Feels It names the specific people or teams, not "the business".
- Cost Of Doing Nothing states what continues to happen, so the reader weighs stakes rather than inferring them.
- Sources is generated from the structured
sourceslist, each entry saying what was read and what it contributed. The script refuses a hand-written section and one that disagrees with the record.
No project needs to exist, and none is created. If problem-scan handed
this over, carry its evidence lines and their sources in.
Step 3. Check, preview, write on a yes, prove
Run memo-check, fix any problems, and show the whole body inline in the
conversation, properties first. The confirmation gate is hard: create only on
an explicit yes. Then memo-create, create the page, read it back, and run
memo-prove with the url the create returned. A create call that returned
without an error proves nothing, and success is never reported with a
section missing.
Status is Published, Published date today or the day the user names,
Author the configured person and omitted when there is none. The Projects
relation is not written; the output says so, and a problem statement with no
project yet is the ordinary case.
What this skill does not do
- Never edits an existing problem statement. Memos is append-only. A
changed situation is a new row, which is what makes the original a record of
what was believed at the time. A correction goes through
memos:new. - Does not propose a solution, and refuses one smuggled into What's Happening.
- Does not create a project. That is
scope, which will need this memo's url. - Does not write a section it could not fill. Evidence in particular: what was observed and how often is the floor, and below it the honest answer is that there is not enough here yet.
Need help setting it up?
This page tells you what problem-statement 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.