Panning for Gold
Overview
Transform raw brain dumps into evaluated, actionable idea inventories. Three phases: Extract every thread without filtering, Evaluate the highest-signal ones, then Synthesize into a permanent gold-found file.
Core principle: Every line gets examined. Nothing is dismissed as noise on the first pass. Personal threads, half-formed thoughts, and tangential observations often contain the highest-signal ideas.
When to Use
- Voice transcripts (multi-speaker, timestamped)
- Stream-of-consciousness notes
- Brain dump markdown exports from ChatGPT/Gemini/Claude
- Any document where the user says "process this" or "what's in here"
- Multi-topic conversations that need thread extraction
Critical Rules (Learned from Production Use)
These rules exist because they've been violated and caused wasted work:
SAVE EVERYTHING TO PERMANENT FILES. Phase 1 inventory, Phase 2 evaluations, and Phase 3 synthesis ALL get saved to files in the project's docs directory. Never rely on agent memory or temp task outputs surviving compaction.
SUMMARIES FIRST, TRANSCRIPT SECOND. If a summary/notes file exists alongside a transcript, use the summary as the primary extraction source. Only read the full transcript for: (a) exact quotes to support threads, (b) verifying completeness on the second pass. This saves 10-20K tokens per scan.
EVALUATORS WRITE TO FILES. Every background evaluator agent MUST write its evaluation to a permanent file (e.g.,
docs/meetings/evaluations/YYYY-MM-DD-{slug}.md) as part of its task. Do not depend on collecting agent return values.SYNTHESIS HAPPENS INLINE. Do not dispatch a separate agent for synthesis. Write the gold-found file yourself after evaluators finish. If evaluators disappear (compaction, task ID loss), write the synthesis from your own reading.
TWO PASSES ON TRANSCRIPTS. Always run Phase 1 twice. First pass uses summary + targeted transcript reads. Second pass is a verification scan for missed threads. Present both inventories merged.
Process
digraph panning {
"Receive raw input" [shape=box];
"Save raw input to file" [shape=box, style=bold];
"Read summary first (if exists)" [shape=box];
"PHASE 1a: Extract from summary" [shape=box];
"PHASE 1b: Verify against transcript" [shape=box];
"Save inventory to file" [shape=box, style=bold];
"Present to user" [shape=box];
"User confirms?" [shape=diamond];
"Targeted re-read of transcript" [shape=box];
"PHASE 2: Evaluate top threads" [shape=box];
"Evaluators write to files" [shape=box, style=bold];
"PHASE 3: Write gold-found file" [shape=box, style=bold];
"Update skill lessons" [shape=box];
"Receive raw input" -> "Save raw input to file";
"Save raw input to file" -> "Read summary first (if exists)";
"Read summary first (if exists)" -> "PHASE 1a: Extract from summary";
"PHASE 1a: Extract from summary" -> "PHASE 1b: Verify against transcript";
"PHASE 1b: Verify against transcript" -> "Save inventory to file";
"Save inventory to file" -> "Present to user";
"Present to user" -> "User confirms?";
"User confirms?" -> "PHASE 2: Evaluate top threads" [label="yes"];
"User confirms?" -> "Targeted re-read of transcript" [label="no"];
"Targeted re-read of transcript" -> "Save inventory to file";
"PHASE 2: Evaluate top threads" -> "Evaluators write to files";
"Evaluators write to files" -> "PHASE 3: Write gold-found file";
"PHASE 3: Write gold-found file" -> "Update skill lessons";
}
Phase 0: Save Raw Input
BEFORE ANY ANALYSIS: Save the raw transcript/brain dump to a file if it's not already saved. Order: save first, analyze second. This rule exists because of two violations in a single session (2026-03-13).
File naming: docs/meetings/YYYY-MM-DD-{source}-transcript.md or docs/brainstorming/YYYY-MM-DD-{topic}.md
Phase 0.5: Speaker Consolidation & Identification (Multi-Speaker Transcripts Only)
BEFORE EXTRACTING THREADS: Clean the speaker data. Voice transcripts with auto-generated speaker labels are actively misleading, not just unreliable. This is a data quality problem that must be solved before any analysis.
Why This Exists
Added 2026-03-18 after a lunch meeting transcript: 10 speaker labels were generated for a 2-person conversation. The same person got different labels across scenes (office, car, restaurant), and different people shared labels. 40+ threads were attributed to the wrong person, turning pain points into pitches and vice versa. The entire inventory had to be re-done.
The Problem (Quantified)
Typical voice transcription software (Otter, Plaud, phone recording apps) re-assigns speaker labels when:
- Environment changes (office to hallway to car to restaurant)
- Background noise shifts (quiet room vs. loud restaurant)
- Volume/distance changes (close mic vs. across table)
- Brief pauses or interruptions (any silence can trigger a new "speaker")
Result: A 2-person lunch meeting generated 10 speaker labels. Speaker 5 was attributed to BOTH participants at different points. The labels are worse than useless, they're actively wrong.
Process
Step 1: Ask the user FIRST (10 seconds, saves 30 minutes)
Before reading a single line of transcript:
- "Who was present?"
- "Any other people who spoke briefly?" (receptionist, waiter, etc.)
- "What was the setting?" (helps predict environment-change label swaps)
Step 2: Speaker Label Audit (automated)
Run a quick frequency analysis on the raw transcript:
Count lines per speaker label
Sample 2-3 lines from each label
Compare: expected speakers vs. actual labels
If number_of_labels > (expected_speakers * 2), the labels are fragmented and CANNOT be trusted for attribution. Flag this immediately.
Step 3: Build Anchor Lines
From memory, CRM, and context, identify "unmistakable" lines per person. These are lines that could ONLY have been said by one specific person:
Your anchors (stable across all transcripts):
- References to family members by name
- Your specific projects, tools, or frameworks
- Career history details only you would mention
- Hobby or interest references unique to you
Other speaker anchors (build per-meeting):
- Workplace-specific vocabulary ("our patients", "our census")
- System knowledge (specific internal tools only they would reference)
- Budget/operational details only an insider would know
- Personal anecdotes or stories unique to them
Step 4: Scene-Based Re-Attribution
Instead of trusting speaker labels, segment the transcript by SCENE (environment change). Within each scene:
- Identify the anchor lines (unmistakable attribution)
- Use conversational flow (questions vs. answers, topic expertise) to attribute the rest
- Mark confidence: HIGH / MEDIUM / LOW
Scenes typically break at: location changes, long pauses, topic resets, new people entering.
Step 5: Batch Clarification
Collect all MEDIUM and LOW attributions into ONE numbered list. Present to user. Get all corrections in a single pass.
Step 6: Produce Clean Transcript (Optional but recommended for high-value meetings)
If the meeting is high-value (potential deal, important relationship), produce a cleaned version with consolidated speaker names replacing label numbers. Save as YYYY-MM-DD-{source}-clean-transcript.md. This becomes the canonical reference.
Decision: Is Re-Extraction Needed?
After attribution corrections, assess:
- If >20% of threads change meaning with correct attribution: re-extract from scratch
- If <20% but key pain-point threads are affected: targeted fixes to inventory
- If corrections are mostly cosmetic (personal threads, food discussions): fix in place, proceed to evaluation
Phase 1: Extract (Pan)
Token-Efficient Reading Strategy
- If a summary/notes file exists alongside the transcript: Read the summary FIRST. Extract all threads from it. This covers 80-90% of content in ~200 lines instead of ~900.
- Then targeted transcript reads: For each summary thread, pull ONE exact quote from the transcript (use Grep to find it, don't read the whole file).
- Second pass verification: Read the last 30% of the transcript (conversations front-load business, end with personal/relationship threads that summaries often skip).
Extraction Rules
- Read every line. Voice transcripts have ideas buried in small talk. A massage therapy conversation might contain a warm intro to a key business contact.
- No category filtering. Extract personal, professional, technical, creative, wellness, financial, relational threads equally. You don't decide what matters, the user does.
- Context is signal. "I should have talked to her first" is a strategic insight, not filler. "This wrist has been hurting" next to "I carry both kids" is a biomechanics thread.
- Tangents are features. Stream-of-consciousness thinking links ideas the user hasn't consciously connected yet. Note the connections.
- Transcription artifacts are clues. Garbled speech, speaker changes, and interruptions mark moments of excitement or distraction, both worth capturing.
What to Extract
For each thread, capture:
- The idea (1-2 sentences)
- Exact quote from the source (so the user can remember the moment)
- Implicit connections to other threads or known projects
- Category (don't filter by category, but label for organization)
Save the Inventory
IMMEDIATELY save the Phase 1 inventory to docs/meetings/YYYY-MM-DD-{source}-inventory.md or equivalent. This file survives compaction even if nothing else does.
Present the Inventory
Show ALL threads in a numbered list, grouped by category but with EVERY category represented. Include a count. Ask the user: "I found N threads. Does that feel complete, or did I miss something?"
If the user says you missed things: Do a targeted re-read of specific transcript sections. Do NOT re-read the entire transcript (token waste). Ask: "Which topic area feels thin?"
Phase 2: Evaluate (Brainstorm per Nugget)
Triage First
NOT every thread needs a full evaluation agent. Categorize threads:
- ACT NOW candidates (3-5 max): Get full evaluation (Opus agent or inline)
- Already validated: Threads that confirm things from prior sessions. Note them, skip evaluation.
- PARK candidates: Threads with clear "not now" signals. One-line verdict, no agent.
Evaluation Approach (Efficiency-Ranked)
- Inline evaluation (preferred for 1-3 threads): Write the evaluation yourself in the gold-found file. Fastest, no agent overhead, no risk of lost work.
- Background agents (for 4+ ACT NOW threads): Dispatch agents BUT require them to write to permanent files.
- NEVER dispatch more than 5 background evaluators. If you have more than 5 ACT NOW candidates, you miscategorized. Re-triage.
Per-Idea Evaluation Template
You are brainstorming about a single idea extracted from a brain dump.
IDEA: {idea description}
CONTEXT: {surrounding context from transcript}
USER'S CONTEXT: {call search_thoughts("keywords from the idea") to find related prior thinking}
IMPORTANT: Write your evaluation to {output_file_path} using the Write tool before returning.
Evaluate this idea thoroughly:
1. **What is this really?** Restate the idea in its strongest form.
2. **Why did this excite them?** What need or desire does it serve?
3. **Build vs Buy:** Does something already exist? Search GitHub. What's the delta?
4. **Feasibility:** How hard is this? Time estimate. Dependencies.
5. **Connections:** How does this connect to their existing thinking? (Use search_thoughts to find related Open Brain entries.)
6. **Verdict:** One of:
- ACT NOW (high value, low effort, unblocks something)
- RESEARCH MORE (promising but needs investigation)
- PARK IT (interesting but not timely)
- KILL IT (not worth attention, explain why)
7. **If ACT NOW or RESEARCH MORE:** What are the next 3 concrete actions?
Be honest. Don't inflate value. Don't dismiss things as "someday" just because they're not code.
Agent Configuration
- Use
run_in_background: truefor all evaluators - Every evaluator MUST include instructions to write output to a permanent file
- Use Opus (
model: opus) for ideas that connect to SHIP projects or involve strategic decisions - Use Sonnet for lower-stakes research (hardware, consumer products, wellness)
- Use Haiku for quick feasibility checks (does an API exist? is this legal?)
- Output path:
docs/meetings/evaluations/YYYY-MM-DD-{idea-slug}.md
Phase 3: Synthesis
Write the gold-found file yourself (do not delegate to an agent). Collect from:
- Evaluation files written by agents (if they succeeded)
- Your own inline evaluations
- Your Phase 1 inventory for threads that didn't need full evaluation
Gold-Found File Location
docs/meetings/YYYY-MM-DD-{source}-gold-found.md
Summary Format
# Gold Found: {date} {source}
**Source:** {transcript/brain dump description}
**Extraction method:** {summary-first + transcript verification / full read / etc.}
**Thread count:** {N}
---
## ACT NOW
{Full evaluation for each, with evidence quotes and next 3 actions}
## RESEARCH MORE
| # | Idea | Question to Answer | Next Action |
## PARKED (No guilt, no deadlines)
| # | Idea | Why Interesting | Trigger to Revisit |
## KILLED
| # | Idea | Why Not |
## Connections Discovered
- {idea A} connects to {idea B} because...
- {thread from transcript} validates {existing project assumption}
## Mary's Law Check
Is there a human the user should contact before writing more code?
## New COS Items
### WAITING_FOR
### Calendar
### CRM Updates
### Decisions
Phase 3.5: Capture to Open Brain
After writing the gold-found file, capture to Open Brain automatically (do not ask).
Note: If you already run an automatic session-capture workflow, keep this phase anyway. Panning-specific captures are more granular than a generic session summary.
Each ACT NOW item gets its own
capture_thought:content: "ACT NOW: [one-line summary]. [Full evaluation: verdict, connections, next actions]. Origin: [transcript file path] > [gold-found file path] > Thread #N"
Session summary as one
capture_thought:content: "Panning session: [source], [N] threads, [M] ACT NOW, [K] RESEARCH MORE. Threads: [all thread titles + categories]. Gold-found: [file path]"
This closes the flywheel: panning extracts and evaluates, OB1 stores, Gate 0 finds it next session.
Phase 4: Self-Improvement
After every panning session, check:
- Did any work get lost? (agents died, compaction ate something, files not saved) -> Add a rule to Critical Rules section
- Was token usage reasonable? (did we re-read unnecessarily, dispatch too many agents?) -> Update the reading strategy
- Did the user correct the extraction? (missed threads, wrong categorization) -> Add to Common Mistakes
If any lesson is learned, update this skill file directly. The skill improves with every use.
Lessons Log
| Date | Lesson | Change Made |
|---|---|---|
| 2026-03-13 | Background evaluator agents lost to compaction. Synthesis never written. | Added Critical Rules 1-4. Evaluators must write to permanent files. Synthesis done inline. |
| 2026-03-13 | Re-reading 926-line transcript burned ~30K tokens when Fathom summary covered 90% | Added "Summaries First" strategy. Use Grep for quotes instead of full re-reads. |
| 2026-03-13 | Phase 1 inventory not saved to file, lost on compaction | Added Phase 1 "Save the Inventory" step with permanent file. |
| 2026-03-18 | 10 speaker labels generated for 2-person conversation. Labels are WORSE than useless, they actively mislead. Same person gets different labels across environments, different people share labels. | Added Phase 0.5: Speaker Consolidation & Identification. Must clean speaker data before ANY thread extraction. Ask user who was present FIRST. |
| 2026-03-18 | Voice labels swapped between two speakers caused 40+ threads to be misattributed. Pain points became pitches and vice versa. | Phase 0.5 now includes anchor-line identification, scene-based re-attribution, and a decision framework for whether re-extraction is needed. |
| 2026-03-18 | "Don't be stingy with the extract" - first pass had 42 threads, expanded to 82 after user pushed back. Collapsing related threads and skipping "non-business" categories loses signal. | Added to Common Mistakes. Default to over-extraction, let Phase 2 triage handle prioritization. |
Red Flags: You're Rushing
| Thought | Reality |
|---|---|
| "This section is just small talk" | Small talk contains relationship signals and warm intros |
| "This isn't actionable" | Not everything needs to be a JIRA ticket to be valuable |
| "I'll focus on the tech ideas" | The user said EVERY idea. Tech bias is the #1 failure mode |
| "I can summarize this section" | You're skimming. Read every line. |
| "This is too long to read carefully" | That's exactly why the user asked YOU to do it |
| "Personal/wellness isn't relevant" | The user's body, relationships, and energy ARE the system |
Red Flags: You're Wasting Tokens
| Thought | Reality |
|---|---|
| "Let me read the full transcript again" | Did you check if a summary exists first? Use Grep for quotes. |
| "I'll dispatch 8 evaluator agents" | More than 5 means you miscategorized. Re-triage. |
| "I'll have an agent write the synthesis" | Write it yourself. Agents disappear. |
| "Let me re-read to find that quote" | Use Grep with a keyword from the thread. 100x cheaper. |
| "I need to read the whole file for context" | Read the first 50 and last 50 lines. Middle is usually elaboration, not new threads. |
Common Mistakes
- Filtering by your assumptions about "actionable." A massage therapist knowing a law firm owner IS actionable, it's a warm intro worth more than 100 lines of code.
- Speed over thoroughness. Brain dumps reward slow reading. The gold is in the tangents.
- Collapsing related threads. "CBD for massage" and "CBD for Sam's migraines" are TWO ideas, not one. Keep them separate, they have different evaluations.
- Ignoring meta-observations. When someone says "maybe I should just record and process later," that's a workflow insight, not filler.
- Not asking if you missed threads. Always ask. You probably did.
- Not saving intermediate work. Every output (inventory, evaluations, synthesis) gets a permanent file. If it's not on disk, it doesn't exist.
- Re-reading the whole transcript for one quote. Use Grep. It's 100x cheaper.
- Dispatching agents and hoping they return. Agents are unreliable across compaction boundaries. For critical synthesis, do it inline.
- Trusting auto-generated speaker labels. Voice transcription software creates 3-5x more speaker labels than actual speakers. Labels shift with environment changes. NEVER use speaker numbers as ground truth, always verify with anchor phrases and conversational context.
- Being stingy on first extraction. Default to over-extraction (80+ threads for a 1-hour conversation is normal). Phase 2 triage handles prioritization. Phase 1's job is completeness, not curation. If your first pass has fewer than 40 threads for a 30+ minute multi-topic conversation, you're collapsing or skipping.