Product Discovery
majiayu000/spellbook
Product discovery and market research expert. An agent skill from majiayu000/spellbook.
Builds an Opportunity Solution Tree that links one measurable outcome to customer opportunities, candidate solutions and experiments.
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install avelikiy/great_cto opportunity-solution-tree --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/opportunity-solution-tree .claude/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .claude/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-treeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install avelikiy/great_cto opportunity-solution-tree --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/opportunity-solution-tree .agents/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .agents/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install avelikiy/great_cto opportunity-solution-tree --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/opportunity-solution-tree .cursor/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .cursor/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/avelikiy/great_cto.git --path skills/opportunity-solution-tree--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install avelikiy/great_cto opportunity-solution-tree --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/opportunity-solution-tree .gemini/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .gemini/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install avelikiy/great_cto opportunity-solution-treeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/opportunity-solution-tree .github/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .github/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install avelikiy/great_cto opportunity-solution-tree --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/avelikiy/great_cto.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/opportunity-solution-tree .opencode/skills/opportunity-solution-tree && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "opportunity-solution-tree" agent skill from https://github.com/avelikiy/great_cto/tree/main/skills/opportunity-solution-tree into .opencode/skills/opportunity-solution-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "opportunity-solution-tree", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
opportunity-solution-treeBuilds an Opportunity Solution Tree that links one measurable outcome to customer opportunities, candidate solutions and experiments.
Based on Teresa Torres' Continuous Discovery Habits, this skill connects a desired outcome to customer opportunities, solutions and experiments so a team does not jump to solutions before the problem space is validated. It suits moments when nobody is sure what to build next, when several opportunities compete, or before a PRD for a complex feature area.
The agent first gets one measurable outcome, rejecting vague ones such as building a better onboarding or improving the product, and asks what would make the effort a success when no metric is given. It then maps roughly 3 to 7 customer opportunities from interviews, analytics, support tickets or NPS feedback, framed from the customer's point of view, and ranks them with the Opportunity Score, importance times one minus satisfaction. Each top opportunity gets at least 3 candidate solutions before one is chosen, and experiments serve as the cheapest way to test assumptions.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 97dd037. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteWebFetchWebSearchFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Opportunity Solution Tree loads about 1.8k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 595 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from avelikiy/great_cto at commit 97dd037, republished under its MIT licence (© avelikiy). 595 words, ~1,811 tokens.
.claude/skills/opportunity-solution-tree/SKILL.md (or your agent's skills folder).Structures product discovery by connecting a desired outcome → customer opportunities → solutions → experiments. Prevents jumping to solutions before validating the problem space.
Based on Teresa Torres, Continuous Discovery Habits (2021).
┌─────────────────────┐
│ DESIRED OUTCOME │ ← single measurable metric
└──────────┬──────────┘
┌───────────────┼────────────────┐
┌──────┴─────┐ ┌──────┴─────┐ ┌──────┴─────┐
│Opportunity │ │Opportunity │ │Opportunity │ ← customer pain/need
│ A │ │ B │ │ C │
└──────┬─────┘ └──────┬─────┘ └────────────┘
┌──────┴───┐ ┌──────┴───┐
┌───┴──┐ ┌───┴──┐ ┌───┴──┐ ┌───┴──┐
│Sol 1 │ │Sol 2 │ │Sol 3 │ │Sol 4 │ ← possible solutions
└───┬──┘ └──────┘ └───┬──┘ └──────┘
┌────┴────┐ ┌───┴────┐
│ Exp 1 │ │ Exp 2 │ ← fast experiments
└─────────┘ └────────┘Key principles:
Confirm or help the user articulate one measurable outcome at the top of the tree.
Good outcomes:
Bad outcomes (reject these):
If the user can't state a metric: ask "What would need to be true for you to consider this effort a success?"
From customer interviews, analytics, support tickets, or NPS feedback, identify 3–7 customer opportunities (pain points, unmet needs, desires).
Frame each from the customer's perspective:
Prioritise using Opportunity Score (Dan Olsen, The Lean Product Playbook):
Opportunity Score = Importance × (1 − Satisfaction)Survey customers: rate each need on Importance (0–1) and current Satisfaction (0–1).
For each top-priority opportunity, brainstorm ≥3 solutions from three angles:
Rules:
For the most promising solutions, design 1–2 fast experiments:
| Experiment | Assumption tested | Method | Success metric | Effort |
|---|---|---|---|---|
<experiment name> | <what belief this validates> | <A/B test / fake door / prototype / interview> | <metric + threshold> | <1d / 3d / 1w> |
Assumption categories (prioritise in this order):
Cheap experiment types:
Write docs/discovery/OST-<outcome-slug>.md:
# Opportunity Solution Tree: <Outcome>
**Desired outcome**: <metric> from <current> to <target> by <date>
**Last updated**: <date>
## Opportunity map
| # | Opportunity | Importance | Satisfaction | Opportunity Score | Priority |
|---|------------|-----------|-------------|-------------------|---------|
| A | <customer need> | 0.8 | 0.3 | 0.56 | 1st |
| B | <customer need> | 0.7 | 0.6 | 0.28 | 3rd |
| C | <customer need> | 0.6 | 0.2 | 0.48 | 2nd |
## Solutions for top opportunities
### Opportunity A: <name>
| Solution | Description | Experiment |
|---------|-------------|-----------|
| Sol A1 | <description> | <experiment> |
| Sol A2 | <description> | <experiment> |
| Sol A3 | <description> | <experiment> |
## Active experiments
| Experiment | Assumption | Status | Result |
|-----------|-----------|--------|--------|
| <name> | <assumption> | Running / Done | <result or pending> |
## Learning log
- <date>: Discovered <insight> from <source>. Killed <solution> / promoted <opportunity>.Once an opportunity is validated and a solution is chosen:
→ Run /spec prd with the validated opportunity as the problem statement
→ The OST's Opportunity Score data feeds directly into PRD §3 (Success Metrics) and §4 (Target Users)
❌ Opportunity = solution in disguise: "Users need a search bar" is a solution. "Users can't find past purchases" is an opportunity.
❌ Skipping divergence: Picking the first solution for each opportunity. Always generate ≥3 before choosing.
❌ Experiments that take >1 week: If it takes longer than a week to learn, it's not an experiment — it's a feature.
❌ Updating the tree once: OST is a continuous practice. Update weekly as you learn.
❌ Too many outcomes: One outcome per tree. If you have multiple outcomes, run multiple trees or pick the highest priority.
© avelikiy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/opportunity-solution-tree of avelikiy/great_cto.
Open the folder on GitHubat commit 97dd037
Opportunity Solution Tree next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Opportunity Solution Tree this skillavelikiy/great_cto | 102 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Product Discoverymajiayu000/spellbook | 287 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Product Manager Toolkitborghei/Claude-Skills | 891 | — | ~5.8k | Automated safety check: Pass | MIT | |
| Competitor Gapsacogood/diffmode_free | 163 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Product Manager Toolkitdavila7/claude-code-templates | 33k | 7 repos | ~2.2k | Automated safety check: Pass | MIT | |
| Product Discovery Processdeanpeters/Product-Manager-Skills | 7.2k | 1 repos | ~4.9k | Automated safety check: Pass | Custom licence |
majiayu000/spellbook
Product discovery and market research expert. An agent skill from majiayu000/spellbook.
borghei/Claude-Skills
Product manager toolkit covering RICE prioritization, customer interview analysis, PRDs, and discovery frameworks.
acogood/diffmode_free
Competitive gap analysis for a founder's product — a Diffmode growth-tactics think-tank research stage (prompt TT-DG-002).
davila7/claude-code-templates
Scores feature requests with RICE, mines customer interview transcripts for pain points, and offers PRD templates, with two Python scripts behind it.
deanpeters/Product-Manager-Skills
Guides a product manager through a full discovery cycle from problem hypothesis to validated solution: framing, interviews, synthesis, solution options and experiments.
Gingiris-1031/Competitor-analysis-tool
🇺🇸 User Interview & Cold-Start Operations Playbook — Battle-tested framework from HeyGen's 937 interviews to PMF.
avelikiy/great_cto
Analyzes a screenshot, website or Figma file and writes a `design.md` with its token system, component inventory and reconstruction notes, or an `element.md` for one element.
avelikiy/great_cto
Rewrites a feature-list roadmap into outcome statements that name the customer segment, the result they get and the business impact, grouped into themes.
avelikiy/great_cto
Turns a leaked key, token or password into one tracked rotation task the moment it's spotted, instead of a reminder repeated every session.
avelikiy/great_cto
Runs a three-round self-challenge plus an arbiter over high-stakes findings, so false positives from reviews, audits and flaky-test verdicts do not become blockers.
avelikiy/great_cto
greatcto's own committed aesthetic — the instrument panel. An agent skill from avelikiy/great_cto.
avelikiy/great_cto
Catalogue of known SDLC anti-patterns that greatcto agents must actively reject when reviewing architecture, plans, code, or post-mortems.
Categories
Builds an Opportunity Solution Tree that links one measurable outcome to customer opportunities, candidate solutions and experiments. Based on Teresa Torres' Continuous Discovery Habits, this skill connects a desired outcome to customer opportunities, solutions and experiments so a team does not jump to solutions before the problem space is validated. It suits moments when nobody is sure what to build next, when several opportunities compete, or before a PRD for a complex feature area.
Opportunity Solution Tree fits situations like: the team is unsure what to build next; several customer opportunities are competing for attention; preparing discovery work before writing a PRD for a complex feature area; turning interview and support-ticket findings into a prioritized opportunity map.
Run `npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a claude-code`. Or copy the skill folder (skills/opportunity-solution-tree in avelikiy/great_cto) into .claude/skills/opportunity-solution-tree in your project. Claude Code loads it when a task matches its description.
Run `npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a codex`. Or copy the skill folder (skills/opportunity-solution-tree in avelikiy/great_cto) into .agents/skills/opportunity-solution-tree in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add avelikiy/great_cto --skill opportunity-solution-tree -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/opportunity-solution-tree, .gemini/skills/opportunity-solution-tree, .github/skills/opportunity-solution-tree and .opencode/skills/opportunity-solution-tree in your project.
SKILL.md names no scripts, command-line tools or credentials: Opportunity Solution Tree is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Write, WebFetch, WebSearch.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Opportunity Solution Tree is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Opportunity Solution Tree: Product Discovery (majiayu000/spellbook, 287 stars), Product Manager Toolkit (borghei/Claude-Skills, 891 stars), Competitor Gaps (acogood/diffmode_free, 163 stars) and Product Manager Toolkit (davila7/claude-code-templates, 33k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
avelikiy (a GitHub user) maintains it in avelikiy/great_cto, which has 102 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 9, 2026.
Source: avelikiy/great_cto on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.