Use when assembling strategic context - collects and filters research by topic with expiry management to prevent using stale data in decisions
Scanned 9/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill research-gathering --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Research Gathering?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-research-gathering-claude-skill-registry)More formats (shields.io, HTML) on the badges page.
---
name: research-gathering
description: Use when assembling strategic context - collects and filters research by topic with expiry management to prevent using stale data in decisions
allowed-tools: Read, Grep, Glob
---
# Research Gathering
## Purpose
Assemble relevant research context for strategic sessions:
- Collect sources by topic (competitive-analysis, pricing-strategy, etc.)
- Filter by recency and expiry dates
- Extract key insights and quotes
- Prepare citation-ready references
- Flag stale data requiring refresh
## When to Use This Skill
Activate automatically when:
- `strategy-session` workflow needs context for decision-making
- `content-drafting` workflow requires research backing
- User explicitly requests research on a topic
- Building strategic memos requiring evidence
- Planning features based on market insights
## Research Topics
**Supported strategic categories:**
- `competitive-analysis` - Competitor capabilities, positioning, pricing
- `pricing-strategy` - Pricing models, packaging, value perception
- `market-positioning` - Market trends, customer segments, messaging
- `product-strategy` - Feature prioritization, roadmap direction
- `customer-segmentation` - Audience targeting, persona development
- `growth-strategy` - Acquisition, retention, expansion tactics
## Research Source Schema
**Expected structure** (from `datasets/research/{topic}/{filename}.md`):
```yaml
---
title: "Source Title"
kind: "file" | "url" | "note"
topic: "strategic-category"
url: "https://..." (if applicable)
checksum: "sha256:..."
added_utc: "YYYY-MM-DDTHH:MM:SSZ"
expiry_date: "YYYY-MM-DD"
author: "Author Name" (optional)
published_date: "YYYY-MM-DD" (optional)
tags: ["keyword1", "keyword2"]
---
# Source Title
## Key Insights
- Insight 1
- Insight 2
## Strategic Applications
- How this informs decisions
- Relevant use cases
## Citations / Quotes
> "Verbatim quote for future citation"
> — Author, Publication (Date)
## Related Internal Links
- [Meeting notes](datasets/meetings/...)
- [Epic](datasets/product/epics/...)
```
## Gathering Process
### 1. Determine Topic and Filters
**Inputs:**
- `topic`: Strategic category (required)
- `max_age_days`: Maximum age of sources (optional, default: varies by type)
- `include_expired`: Whether to include expired sources (default: false)
- `keywords`: Additional keyword filter (optional)
**Expiry guidelines:**
| Source Type | Default Max Age | Rationale |
|-------------|-----------------|-----------|
| Frameworks | 365-730 days (1-2 years) | Conceptual models change slowly |
| Market data | 90-180 days (3-6 months) | Markets evolve quickly |
| Competitor intel | 180-365 days (6-12 months) | Products change, pricing shifts |
| Customer insights | 180-365 days (6-12 months) | Needs evolve over time |
### 2. Collect Research Files
**Scan path:**
```
datasets/research/{topic}/**/*.md
```
**Use Glob to find sources:**
```
Glob pattern: datasets/research/{topic}/**/*.md
```
**Example:**
```
Topic: competitive-analysis
→ Glob: datasets/research/competitive-analysis/**/*.md
```
### 3. Filter by Recency and Expiry
**For each source file:**
**A. Read frontmatter:**
```yaml
added_utc: "YYYY-MM-DDTHH:MM:SSZ"
expiry_date: "YYYY-MM-DD"
```
**B. Calculate age:**
```
age_days = current_date - added_utc.date
```
**C. Check expiry:**
```
If expiry_date exists:
is_expired = current_date > expiry_date
Else:
Use default expiry based on source type
```
**D. Apply filters:**
```
Keep source if:
(max_age_days not set OR age_days <= max_age_days) AND
(include_expired=true OR not is_expired)
```
**E. Flag expired sources:**
If source is expired but included (because include_expired=true):
- Mark source as "[EXPIRED]" in output
- Recommend refresh in gathering report
### 4. Extract Key Information
**For each qualifying source:**
**A. Read content sections:**
- `## Key Insights` → Primary takeaways
- `## Strategic Applications` → How to use this research
- `## Citations / Quotes` → Verbatim quotes for citation
- `## Related Internal Links` → Connected context
**B. Extract insights:**
Parse bullet points from "Key Insights" section:
```
- Insight 1: Full text
- Insight 2: Full text
```
**C. Extract quotes:**
Parse blockquotes from "Citations / Quotes" section:
```
> "Verbatim quote text"
> — Author, Source (Date)
```
**D. Record metadata:**
```
{
"title": "Source Title",
"path": "/absolute/path/to/source.md",
"url": "https://..." (if applicable),
"topic": "strategic-category",
"added_date": "YYYY-MM-DD",
"expiry_date": "YYYY-MM-DD",
"is_expired": true|false,
"age_days": N,
"insights": [array of insight strings],
"quotes": [array of quote objects],
"related_links": [array of internal link paths]
}
```
### 5. Apply Keyword Filters (Optional)
**If `keywords` provided:**
**Search across:**
- Source title
- Key insights text
- Strategic applications text
- Quote text
- Tags
**Method:**
```
Use Grep to search for keywords (case-insensitive):
grep -i "keyword" source.md
```
**Keep source if:**
Any keyword match found in source content.
### 6. Organize Output
**Group sources by sub-category (if applicable):**
Example for "competitive-analysis" topic:
- Competitor capabilities
- Pricing comparisons
- Market positioning
- Feature gaps
**Sort sources by:**
1. Recency (most recent first)
2. Relevance (if keyword search applied)
3. Expiry status (non-expired before expired)
### 7. Generate Gathering Report
**Output structure:**
```markdown
# Research Gathering Report
**Topic**: {topic}
**Sources Found**: {N total}
**Active Sources**: {N non-expired}
**Expired Sources**: {N expired}
**Date Range**: {earliest added} to {most recent added}
## Active Sources
### Source 1: {Title}
- **Added**: {YYYY-MM-DD} ({age_days} days ago)
- **Expires**: {YYYY-MM-DD} ({days_until_expiry} days remaining)
- **Path**: {file_path}
- **URL**: {url} (if applicable)
**Key Insights:**
- Insight 1
- Insight 2
**Strategic Applications:**
- Application 1
- Application 2
**Notable Quotes:**
> "Quote text"
> — Author, Source (Date)
---
### Source 2: {Title}
[... same structure ...]
## Expired Sources (Require Refresh)
### Source 3: {Title} [EXPIRED]
- **Added**: {YYYY-MM-DD}
- **Expired**: {YYYY-MM-DD} ({days_expired} days ago)
- **Recommendation**: Refresh or archive
---
## Summary
**Citation-Ready Quotes**: {N quotes extracted}
**Internal Links**: {N related meetings/epics found}
**Recommended Actions**:
1. Refresh {N} expired sources
2. Consider adding research on {identified gaps}
```
## Integration with Workflows
### Strategy Session Integration
**Invoked by:**
- `strategy-session` workflow (context assembly phase)
**Inputs:**
- Topic matching session focus
- Default expiry filtering (exclude expired sources)
**Outputs:**
- Gathered research context for decision-making
- Citation-ready quotes
- Source recommendations
**Usage:**
```
Strategy session on "competitive-analysis"
→ Gather active competitive intel
→ Present insights for discussion
→ Reference in strategy memo
```
### Content Creation Integration
**Invoked by:**
- `content-drafting` workflow (when research backing needed)
**Inputs:**
- Topic matching content subject
- Keyword filters for specificity
**Outputs:**
- Research-backed claims
- Citation sources
- Expert insights for quotes
### Manual Research Queries
**Direct usage:**
User can query research library:
```
"Gather research on pricing-strategy from last 6 months"
"Show competitive-analysis sources with keyword 'segmentation'"
```
## Refresh Recommendations
**When gathering detects expired sources:**
**Auto-generate refresh tasks:**
```
Expired sources requiring refresh:
1. [Source Title] - Expired 45 days ago
- Original URL: {url}
- Suggested action: Re-fetch and update
2. [Source Title] - Expired 120 days ago
- No URL (manual notes)
- Suggested action: Review and archive or manually update
```
**Offer to:**
- Re-fetch URL-based sources automatically
- Schedule manual review for note-based sources
- Archive sources that are no longer relevant
## Success Criteria
Research gathering complete when:
- All sources in topic directory scanned
- Recency and expiry filters applied
- Key insights and quotes extracted
- Sources organized and sorted
- Expired sources flagged for refresh
- Output structured for consuming workflows
## Common Mistakes
| Mistake | Fix |
|---------|-----|
| Including expired sources without flagging | Mark clearly as [EXPIRED] |
| Not extracting verbatim quotes | Preserve exact quote text for citations |
| Missing internal link extraction | Parse and include related links |
| Skipping expiry recommendations | Suggest refresh for expired sources |
| Not respecting topic boundaries | Only gather from specified topic directory |
## Related Skills
- **source-integrity**: Validates source checksums and metadata
- **strategy-session**: Primary consumer of gathered research
- **content-drafting**: Uses gathered research for citations
- **research-processing**: Adds new sources to research library
## Anti-Rationalization Blocks
Common excuses that are **explicitly rejected**:
| Rationalization | Reality |
|----------------|---------|
| "Expired source is still relevant" | Flag as expired, recommend refresh. |
| "Close enough" on quote extraction | Preserve verbatim text exactly. |
| "Skip keyword filtering" | Apply filters as requested. |
| "One source is enough" | Gather all relevant sources. |
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!