Observe
You analyze any artifact — conversation transcripts, strategy docs, proposals, PRFAQs, planning notes, meeting recordings, Slack threads — and extract everything meaningful hiding in it: observations (objective and subjective), assumptions, and tensions. This is an action skill — it reads the input, runs a structured extraction process, and produces a visual analysis page plus structured data.
The user's input is: $ARGUMENTS
Input Detection
Determine what the user gave you:
- File path — If
$ARGUMENTS looks like a file path (contains /, .md, .txt, .doc, etc.), read the file using the Read tool.
- Pasted text — If
$ARGUMENTS is a long block of text (more than a couple sentences), treat it as the artifact to analyze.
- Short description — If
$ARGUMENTS is a short phrase like "our product strategy" or "the sprint retro notes", ask the user to paste the content or provide a file path.
- Empty — If
$ARGUMENTS is empty or blank, ask:
"What should I analyze? You can:
- Paste a transcript, strategy doc, proposal, or any artifact right here
- Give me a file path like
notes/meeting-2026-04-02.md
What are we working with?"
Wait for the user's response before proceeding.
The Extraction Process
Once you have the artifact text, follow this exact process:
Step 1: Identify Themes
Read the full artifact. Identify 2–5 high-level themes present in the content. These should be specific to THIS artifact, not a generic list.
Examples of good themes: "user willingness to pay", "technical scalability under load", "team capacity for Q3", "regulatory approval timeline"
Examples of bad themes: "business", "technology", "people" (too generic)
Step 2: Derive Types
Based on the themes, create tailored type categories for each extraction type.
Observation Types (3–5 types):
- Stated Fact — Verifiable claims or data points mentioned in the artifact
- Behavioral Observation — Actions, reactions, or behaviors described or implied
- Contextual Detail — Background information, constraints, or environmental factors mentioned
- Sentiment Signal — Emotional tone, enthusiasm, hesitation, or discomfort expressed
Assumption Types (5–8 types):
- User Behavior Assumption — Beliefs about how users will act, adopt, or respond
- Market Timing Assumption — Beliefs about when the market will be ready
- Technical Feasibility Assumption — Beliefs about what can be built and how fast
- Revenue Assumption — Beliefs about willingness to pay, pricing, conversion rates
Tailor these to the specific artifact — the examples above are starting points, not fixed categories.
Step 3: Extract Observations
Go through the artifact carefully. For each observation, capture:
- Quote — The exact excerpt from the artifact
- Observation — What was observed, clearly stated
- Objectivity — Is this objective (verifiable fact) or subjective (interpretation, impression, tone)?
- Type — Which observation type from Step 2
Rules:
- Objective observations are verifiable facts: "3 competitors were mentioned by name", "The meeting lasted 45 minutes", "Revenue was reported as $2M"
- Subjective observations are interpretations: "The team seemed hesitant about the timeline", "There was notable enthusiasm for the API approach", "The CEO appeared to defer to the CTO on technical decisions"
- Ground everything in the text — don't observe things that aren't there
- Focus on observations that matter for downstream analysis — skip trivial ones
Step 4: Extract Assumptions
Go through the artifact carefully. For each assumption, capture:
- Quote — The exact excerpt from the artifact (keep it short, just the relevant part)
- Assumption — The underlying belief, clearly stated
- Type — Which assumption type from Step 2
- Why it's an assumption — What is uncertain or unverified about this
- Risk level — Low, Medium, or High based on:
- How critical is this to the overall plan?
- How uncertain is this?
- What's the blast radius if it's wrong?
- Validation suggestion — One concrete way to test or validate this assumption
Rules:
- Do NOT infer assumptions that aren't grounded in the text
- Focus on meaningful assumptions, not trivial ones
- Prefer fewer, high-quality assumptions over many weak ones
- Be precise and avoid vague language
- An assumption is something stated as fact that could be wrong — not every statement is an assumption
Step 5: Extract Tensions
Look for places where the artifact contradicts itself or holds competing priorities. For each tension, capture:
- Tension — What's in conflict, clearly stated
- Sides — The two (or more) competing positions, each described in one sentence
- Related IDs — References to specific observations or assumptions that are part of this tension (use their prefixed IDs)
Rules:
- A tension is NOT just two different topics — it's two things that genuinely pull in different directions
- "Speed to market was emphasized, but so was quality" is a tension
- "We discussed pricing AND discussed marketing" is NOT a tension — they're just two topics
- Tensions are gold for downstream skills like /challenge and /core-principles
- Fewer, real tensions are better than many manufactured ones
Step 6: Map Assumptions
Place each assumption on a 2×2 grid:
- Y-axis: Importance (how critical to the plan)
- X-axis: Uncertainty (how much we don't know)
This creates four quadrants:
- Test First (high importance, high uncertainty) — These are dangerous. Validate before building.
- Monitor (high importance, low uncertainty) — Important but you're probably right. Keep an eye on them.
- Research (low importance, high uncertainty) — Uncertain but won't kill you. Investigate when you have time.
- Park (low importance, low uncertainty) — Safe to ignore for now.
Step 7: Write the Plain-Language Summary
Write a 3–5 sentence summary in plain English that captures the overall landscape. This should read like something you'd say out loud to a colleague:
- How many observations, assumptions, and tensions were found
- What the dominant themes are
- Which assumptions are most dangerous and why
- Any notable tensions worth addressing
- The one thing they should validate first
Example: "I found 6 observations, 8 assumptions, and 2 tensions in this strategy doc. The biggest cluster of assumptions is around user behavior — there are 3 high-risk assumptions about adoption without training. There's a real tension between the push for speed-to-market and the emphasis on trust-building, which are pulling the product in different directions. I'd validate the assumption about users sharing expensive tools with strangers first — that's the one that could sink the whole model."
Output
Generate TWO artifacts plus speak the summary.
1. HTML Page
Save as .decisions/observe-[slug].html where [slug] is derived from the artifact name or content (e.g., observe-sprint-retro.html, observe-product-strategy.html).
The HTML page must include:
Header:
- Title: "Observation Analysis"
- Subtitle: the artifact name or source
- Date
Plain-Language Summary:
- The 3–5 sentence summary from Step 7, displayed prominently at the top in a callout/banner style
Counts Bar:
- Show counts inline: "X observations · Y assumptions · Z tensions"
- Color-coded: blue for observations, red for assumptions, purple for tensions
Assumption Map (2×2 Grid):
- Visual grid with four quadrants: Test First, Monitor, Research, Park
- Each assumption appears as a small labeled dot or card in its quadrant
- Color-coded: red (Test First), amber (Monitor), blue (Research), gray (Park)
- This is the visual centerpiece — it should be prominent and immediately visible
Tension Strip:
- Compact cards below the map showing each tension as "X vs Y"
- Purple accent color
- Each card shows the two sides briefly
Tabbed Detail Section:
- Three tabs: Observations (count), Assumptions (count), Tensions (count)
- Default to the Observations tab
- Use inline JavaScript for tab switching (simple
onclick handlers)
Observations Tab:
- Cards for each observation
- Blue dot for objective, amber dot for subjective
- Shows: quote, observation statement, objectivity badge, type badge
Assumptions Tab:
- Cards for each assumption, ordered by risk level (High first)
- Each card shows: quote, assumption statement, type badge, risk badge, why it's an assumption, validation suggestion
- Cards are color-coded by quadrant placement
Tensions Tab:
- Cards for each tension
- Purple accent
- Shows: tension statement, the two sides, related observation/assumption IDs
Use the same dark theme as all other skills in this repo:
- Background:
#0f1117
- Surface:
#1a1d27
- Border:
#2d3140
- Text:
#e2e4e9
- Accent:
#7c6ef0
- Observation color:
#3b82f6 (blue)
- Assumption color:
#ef4444 (red)
- Tension color:
#a855f7 (purple)
- Self-contained HTML with inline CSS and inline JavaScript, no external dependencies
Open the HTML page:
open .decisions/observe-[slug].html
2. JSON File
Save as .decisions/observe-[slug].json alongside the HTML.
Schema:
{
"source": "Name or path of the analyzed artifact",
"analyzedAt": "ISO timestamp",
"summary": "The plain-language summary from Step 7",
"themes": [
"Theme 1",
"Theme 2"
],
"observationTypes": [
{
"name": "Stated Fact",
"definition": "Verifiable claims or data points mentioned in the artifact"
}
],
"assumptionTypes": [
{
"name": "User Behavior Assumption",
"definition": "Beliefs about how users will act, adopt, or respond"
}
],
"observations": [
{
"id": "OBS-001",
"quote": "Exact excerpt from the artifact",
"observation": "What was observed, clearly stated",
"objectivity": "objective",
"type": "Stated Fact"
}
],
"assumptions": [
{
"id": "ASM-001",
"quote": "Exact excerpt from the artifact",
"assumption": "The underlying belief, clearly stated",
"type": "User Behavior Assumption",
"whyItsAnAssumption": "What is uncertain or unverified",
"risk": "high",
"quadrant": "test-first",
"validation": "One concrete way to test this"
}
],
"tensions": [
{
"id": "TEN-001",
"tension": "What's in conflict, clearly stated",
"sides": ["Side A description", "Side B description"],
"relatedIds": ["ASM-001", "OBS-003"]
}
],
"quadrantCounts": {
"testFirst": 0,
"monitor": 0,
"research": 0,
"park": 0
}
}
3. Speak the Summary
After generating both files, say the plain-language summary conversationally to the user. Don't just paste the summary — introduce it naturally:
"Here's what I found:
[The plain-language summary from Step 7]
The full analysis is at .decisions/observe-[slug].html — it has the assumption map, observation cards, and tension strips."
Important Reminders
- Any artifact, not just transcripts. Strategy docs, proposals, PRFAQs, meeting notes, Slack threads, product specs — anything where someone is stating beliefs, making observations, or holding competing priorities.
- Quality over quantity. 5 solid observations and 5 solid assumptions are better than 15 weak ones of each. If something is trivial or obvious, skip it.
- Ground everything in the text. Every extraction must trace back to a specific quote. Don't infer things the author didn't say or imply.
- The summary is key. Both artifacts include it. The AI speaks it. Three places, same words. This is what people remember.
- Risk levels must be justified. High risk = critical to the plan AND uncertain. Don't mark everything as high risk.
- The 2×2 map is the visual centerpiece. It should be the first thing someone sees after the summary. The whole point is to show which assumptions need attention NOW.
- Tensions are gold. They surface where the real decisions are hiding. Don't manufacture tensions, but don't miss real ones either.
- Open the HTML automatically. Always
open .decisions/observe-[slug].html.
- Prefixed IDs are required. Use OBS-001, ASM-001, TEN-001 format. Tensions should reference related IDs when applicable.
1---2name: observe3description: Extract observations, assumptions and tensions hiding in any artifact — transcripts, strategy docs, proposals, PRFAQs, planning notes, meeting notes, Slack threads. Produces a visual analysis page plus structured data. Use when you have raw material and need to see what's actually in it.4---56# Observe78You analyze any artifact — conversation transcripts, strategy docs, proposals, PRFAQs, planning notes, meeting recordings, Slack threads — and extract everything meaningful hiding in it: observations (objective and subjective), assumptions, and tensions. This is an **action skill** — it reads the input, runs a structured extraction process, and produces a visual analysis page plus structured data.910The user's input is: **$ARGUMENTS**1112---1314## Input Detection1516Determine what the user gave you:17181. **File path** — If `$ARGUMENTS` looks like a file path (contains `/`, `.md`, `.txt`, `.doc`, etc.), read the file using the Read tool.192. **Pasted text** — If `$ARGUMENTS` is a long block of text (more than a couple sentences), treat it as the artifact to analyze.203. **Short description** — If `$ARGUMENTS` is a short phrase like "our product strategy" or "the sprint retro notes", ask the user to paste the content or provide a file path.214. **Empty** — If `$ARGUMENTS` is empty or blank, ask:2223> "What should I analyze? You can:24> - **Paste** a transcript, strategy doc, proposal, or any artifact right here25> - **Give me a file path** like `notes/meeting-2026-04-02.md`26>27> What are we working with?"2829Wait for the user's response before proceeding.3031---3233## The Extraction Process3435Once you have the artifact text, follow this exact process:3637### Step 1: Identify Themes3839Read the full artifact. Identify 2–5 high-level themes present in the content. These should be specific to THIS artifact, not a generic list.4041Examples of good themes: "user willingness to pay", "technical scalability under load", "team capacity for Q3", "regulatory approval timeline"4243Examples of bad themes: "business", "technology", "people" (too generic)4445### Step 2: Derive Types4647Based on the themes, create tailored type categories for each extraction type.4849**Observation Types** (3–5 types):50- **Stated Fact** — Verifiable claims or data points mentioned in the artifact51- **Behavioral Observation** — Actions, reactions, or behaviors described or implied52- **Contextual Detail** — Background information, constraints, or environmental factors mentioned53- **Sentiment Signal** — Emotional tone, enthusiasm, hesitation, or discomfort expressed5455**Assumption Types** (5–8 types):56- **User Behavior Assumption** — Beliefs about how users will act, adopt, or respond57- **Market Timing Assumption** — Beliefs about when the market will be ready58- **Technical Feasibility Assumption** — Beliefs about what can be built and how fast59- **Revenue Assumption** — Beliefs about willingness to pay, pricing, conversion rates6061Tailor these to the specific artifact — the examples above are starting points, not fixed categories.6263### Step 3: Extract Observations6465Go through the artifact carefully. For each observation, capture:66671. **Quote** — The exact excerpt from the artifact682. **Observation** — What was observed, clearly stated693. **Objectivity** — Is this objective (verifiable fact) or subjective (interpretation, impression, tone)?704. **Type** — Which observation type from Step 27172**Rules:**73- Objective observations are verifiable facts: "3 competitors were mentioned by name", "The meeting lasted 45 minutes", "Revenue was reported as $2M"74- Subjective observations are interpretations: "The team seemed hesitant about the timeline", "There was notable enthusiasm for the API approach", "The CEO appeared to defer to the CTO on technical decisions"75- Ground everything in the text — don't observe things that aren't there76- Focus on observations that matter for downstream analysis — skip trivial ones7778### Step 4: Extract Assumptions7980Go through the artifact carefully. For each assumption, capture:81821. **Quote** — The exact excerpt from the artifact (keep it short, just the relevant part)832. **Assumption** — The underlying belief, clearly stated843. **Type** — Which assumption type from Step 2854. **Why it's an assumption** — What is uncertain or unverified about this865. **Risk level** — Low, Medium, or High based on:87 - How critical is this to the overall plan?88 - How uncertain is this?89 - What's the blast radius if it's wrong?906. **Validation suggestion** — One concrete way to test or validate this assumption9192**Rules:**93- Do NOT infer assumptions that aren't grounded in the text94- Focus on meaningful assumptions, not trivial ones95- Prefer fewer, high-quality assumptions over many weak ones96- Be precise and avoid vague language97- An assumption is something stated as fact that could be wrong — not every statement is an assumption9899### Step 5: Extract Tensions100101Look for places where the artifact contradicts itself or holds competing priorities. For each tension, capture:1021031. **Tension** — What's in conflict, clearly stated1042. **Sides** — The two (or more) competing positions, each described in one sentence1053. **Related IDs** — References to specific observations or assumptions that are part of this tension (use their prefixed IDs)106107**Rules:**108- A tension is NOT just two different topics — it's two things that genuinely pull in different directions109- "Speed to market was emphasized, but so was quality" is a tension110- "We discussed pricing AND discussed marketing" is NOT a tension — they're just two topics111- Tensions are gold for downstream skills like /challenge and /core-principles112- Fewer, real tensions are better than many manufactured ones113114### Step 6: Map Assumptions115116Place each assumption on a 2×2 grid:117- **Y-axis:** Importance (how critical to the plan)118- **X-axis:** Uncertainty (how much we don't know)119120This creates four quadrants:121- **Test First** (high importance, high uncertainty) — These are dangerous. Validate before building.122- **Monitor** (high importance, low uncertainty) — Important but you're probably right. Keep an eye on them.123- **Research** (low importance, high uncertainty) — Uncertain but won't kill you. Investigate when you have time.124- **Park** (low importance, low uncertainty) — Safe to ignore for now.125126### Step 7: Write the Plain-Language Summary127128Write a 3–5 sentence summary in plain English that captures the overall landscape. This should read like something you'd say out loud to a colleague:129130- How many observations, assumptions, and tensions were found131- What the dominant themes are132- Which assumptions are most dangerous and why133- Any notable tensions worth addressing134- The one thing they should validate first135136Example: "I found 6 observations, 8 assumptions, and 2 tensions in this strategy doc. The biggest cluster of assumptions is around user behavior — there are 3 high-risk assumptions about adoption without training. There's a real tension between the push for speed-to-market and the emphasis on trust-building, which are pulling the product in different directions. I'd validate the assumption about users sharing expensive tools with strangers first — that's the one that could sink the whole model."137138---139140## Output141142Generate TWO artifacts plus speak the summary.143144### 1. HTML Page145146Save as `.decisions/observe-[slug].html` where `[slug]` is derived from the artifact name or content (e.g., `observe-sprint-retro.html`, `observe-product-strategy.html`).147148The HTML page must include:149150**Header:**151- Title: "Observation Analysis"152- Subtitle: the artifact name or source153- Date154155**Plain-Language Summary:**156- The 3–5 sentence summary from Step 7, displayed prominently at the top in a callout/banner style157158**Counts Bar:**159- Show counts inline: "X observations · Y assumptions · Z tensions"160- Color-coded: blue for observations, red for assumptions, purple for tensions161162**Assumption Map (2×2 Grid):**163- Visual grid with four quadrants: Test First, Monitor, Research, Park164- Each assumption appears as a small labeled dot or card in its quadrant165- Color-coded: red (Test First), amber (Monitor), blue (Research), gray (Park)166- **This is the visual centerpiece — it should be prominent and immediately visible**167168**Tension Strip:**169- Compact cards below the map showing each tension as "X vs Y"170- Purple accent color171- Each card shows the two sides briefly172173**Tabbed Detail Section:**174- Three tabs: Observations (count), Assumptions (count), Tensions (count)175- Default to the Observations tab176- Use inline JavaScript for tab switching (simple `onclick` handlers)177178**Observations Tab:**179- Cards for each observation180- Blue dot for objective, amber dot for subjective181- Shows: quote, observation statement, objectivity badge, type badge182183**Assumptions Tab:**184- Cards for each assumption, ordered by risk level (High first)185- Each card shows: quote, assumption statement, type badge, risk badge, why it's an assumption, validation suggestion186- Cards are color-coded by quadrant placement187188**Tensions Tab:**189- Cards for each tension190- Purple accent191- Shows: tension statement, the two sides, related observation/assumption IDs192193**Use the same dark theme as all other skills in this repo:**194- Background: `#0f1117`195- Surface: `#1a1d27`196- Border: `#2d3140`197- Text: `#e2e4e9`198- Accent: `#7c6ef0`199- Observation color: `#3b82f6` (blue)200- Assumption color: `#ef4444` (red)201- Tension color: `#a855f7` (purple)202- Self-contained HTML with inline CSS and inline JavaScript, no external dependencies203204Open the HTML page:205```bash206open .decisions/observe-[slug].html207```208209### 2. JSON File210211Save as `.decisions/observe-[slug].json` alongside the HTML.212213Schema:214```json215{216 "source": "Name or path of the analyzed artifact",217 "analyzedAt": "ISO timestamp",218 "summary": "The plain-language summary from Step 7",219 "themes": [220 "Theme 1",221 "Theme 2"222 ],223 "observationTypes": [224 {225 "name": "Stated Fact",226 "definition": "Verifiable claims or data points mentioned in the artifact"227 }228 ],229 "assumptionTypes": [230 {231 "name": "User Behavior Assumption",232 "definition": "Beliefs about how users will act, adopt, or respond"233 }234 ],235 "observations": [236 {237 "id": "OBS-001",238 "quote": "Exact excerpt from the artifact",239 "observation": "What was observed, clearly stated",240 "objectivity": "objective",241 "type": "Stated Fact"242 }243 ],244 "assumptions": [245 {246 "id": "ASM-001",247 "quote": "Exact excerpt from the artifact",248 "assumption": "The underlying belief, clearly stated",249 "type": "User Behavior Assumption",250 "whyItsAnAssumption": "What is uncertain or unverified",251 "risk": "high",252 "quadrant": "test-first",253 "validation": "One concrete way to test this"254 }255 ],256 "tensions": [257 {258 "id": "TEN-001",259 "tension": "What's in conflict, clearly stated",260 "sides": ["Side A description", "Side B description"],261 "relatedIds": ["ASM-001", "OBS-003"]262 }263 ],264 "quadrantCounts": {265 "testFirst": 0,266 "monitor": 0,267 "research": 0,268 "park": 0269 }270}271```272273### 3. Speak the Summary274275After generating both files, say the plain-language summary conversationally to the user. Don't just paste the summary — introduce it naturally:276277> "Here's what I found:278>279> [The plain-language summary from Step 7]280>281> The full analysis is at `.decisions/observe-[slug].html` — it has the assumption map, observation cards, and tension strips."282283---284285## Important Reminders2862871. **Any artifact, not just transcripts.** Strategy docs, proposals, PRFAQs, meeting notes, Slack threads, product specs — anything where someone is stating beliefs, making observations, or holding competing priorities.2882. **Quality over quantity.** 5 solid observations and 5 solid assumptions are better than 15 weak ones of each. If something is trivial or obvious, skip it.2893. **Ground everything in the text.** Every extraction must trace back to a specific quote. Don't infer things the author didn't say or imply.2904. **The summary is key.** Both artifacts include it. The AI speaks it. Three places, same words. This is what people remember.2915. **Risk levels must be justified.** High risk = critical to the plan AND uncertain. Don't mark everything as high risk.2926. **The 2×2 map is the visual centerpiece.** It should be the first thing someone sees after the summary. The whole point is to show which assumptions need attention NOW.2937. **Tensions are gold.** They surface where the real decisions are hiding. Don't manufacture tensions, but don't miss real ones either.2948. **Open the HTML automatically.** Always `open .decisions/observe-[slug].html`.2959. **Prefixed IDs are required.** Use OBS-001, ASM-001, TEN-001 format. Tensions should reference related IDs when applicable.