Get a structured brief on any topic you need to understand before making a marketing decision. I run deep research, cite every source, and deliver angles worth writing about. Feeds blog drafts, ad strategies, and content plans.
Scanned 9/19/2026
Install to Claude Code
npx -y skills add gethouston/houston --skill research-a-topic --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Research A Topic?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/gethouston-research-a-topic)More formats (shields.io, HTML) on the badges page.
---
name: research-a-topic
description: "Get a structured brief on any topic you need to understand before making a marketing decision. I run deep research, cite every source, and deliver angles worth writing about. Feeds blog drafts, ad strategies, and content plans."
version: 1
category: Marketing
featured: no
image: megaphone
integrations: [firecrawl, perplexityai]
x_houston:
created_by: houston
skill_schema: 1
---
# Research A Topic
Source template: Gumloop "AI Research Agent with Automated Report Generation". Adapted for hand-off to other four marketing agents, not 20-page investor memos.
## When to use
- "research {topic}" / "I need a brief on {topic}" / "what's state of {topic}".
- "summarize what's happening in {category}".
- Called implicitly by other skills (`plan-a-campaign`, `watch-my-competitors`, `profile-my-customer`) when they hit an evidence gap that needs a dedicated research run.
## Connections I need
I run external work through Composio. Before this skill runs I check that the categories below are linked. Missing -> I name the category, ask you to connect it from the Integrations tab, stop.
- **Web search (Exa or Perplexity)** - the engine that finds and ranks sources. Required - no useful fallback, I need a search index to start from.
- **Web scrape (Firecrawl)** - optional, fetches full text cleanly. If not connected I fall back to basic HTTP fetch on each source URL, rougher but enough to pull quotes from static pages.
If web search isn't connected I stop. The scrape fallback keeps me going on its own.
## Information I need
I read your marketing context first. For every required field that's missing I ask ONE plain-language question (best modality: connected app > file drop > URL > paste) and wait.
- **Your positioning** - Required. Why I need it: a brief that doesn't filter for your ideal customer and category is just generic internet research. If missing I ask: "Want me to draft your positioning first? It's one skill, takes about five minutes."
- **The research question** - Required. Why I need it: scope creep makes briefs useless. If missing I ask: "What's the one question this brief should answer, and what decision does it unblock?"
- **Depth** - Optional, default standard. If missing I ask: "How deep should I go, a fifteen-minute scan, an hour-long dive, or a deep run? If you don't have a preference I keep going with standard depth."
## Steps
<!-- houston-workflow:v1 -->
1. **Clarify scope in one short exchange (skip if user prompt already specific).** Ask:
- What's the brief feeding next - blog post, ad angles, lifecycle email, social calendar, or just for your own reading?
- What decision must unblock?
- Depth - 15-min scan, 60-min dive, or deep?
2. **Read positioning doc** (own file): `context/marketing-context.md`. Ground brief in our ideal customer and category - generic internet research not a brief.
3. **Discover research tools at runtime.** Do NOT hardcode tool names. Run `composio search research`, `composio search web-search`, `composio search web-scrape` and pick best connected slug per step. If web-search is missing, stop and ask the user to connect a provider (Integrations tab). If only web-scrape is missing, keep going on basic HTTP fetch and flag that JS-heavy sources will be thin.
4. **Run research in layers.** Log sources as you go - final brief needs citations:
1. **Landscape scan** - players, category terminology, top 5-10 authoritative sources.
2. **Evidence drill** - fetch top sources, extract claims, quotes, data points. Cite URL + fetch timestamp per claim.
3. **Contradiction check** - where sources disagree? Name both sides; don't average to mush.
4. **Relevance filter** - which findings matter for OUR ideal customer / OUR positioning / decision at hand? Cut rest.
5. **Structure brief (markdown, ~500-900 words standard depth).**
1. **The question** - one sentence.
2. **TL;DR** - 3-5 bullets user can act on today.
3. **Key findings** - numbered. Each: claim, evidence (cite), implication for us.
4. **Where sources disagree** - short section. Don't hide.
5. **What we don't know** - explicit gaps. Mark `UNKNOWN` + kind of source that resolve.
6. **Recommended next moves** - tagged by agent. Example: `[seo-content] Target cluster "{keyword}" - 8 of 10 top-ranking pages are thin.`
7. **Sources** - URL + title + fetch timestamp.
6. **Never invent.** No synthesized "it seems likely that..." statements without cited source. If research thin, say so and stop - bad briefs cost more than no brief.
7. **Write atomically** to `research/{topic-slug}.md` - `{path}.tmp` then rename. `{topic-slug}` is kebab-case of topic (e.g. `research/geo-audits-category.md`).
8. **Append to `outputs.json`.** Read-merge-write atomically:
```json
{
"id": "<uuid v4>",
"type": "research",
"title": "<Topic>",
"summary": "<2-3 sentences - the TL;DR>",
"path": "research/<slug>.md",
"status": "draft",
"createdAt": "<ISO-8601>",
"updatedAt": "<ISO-8601>"
}
```
9. **Summarize to user.** One paragraph: question, TL;DR one line, 1 move next, path to brief.
## Outputs
- `research/{topic-slug}.md`
- Appends to `outputs.json` with `type: "research"`.
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!