Deep Research skill for Codex
Cited answers with confidence, not confident guesses. Codex splits an open question into answerable sub-questions, works down a source hierarchy from official docs and data to practitioner reports, and logs every finding in an evidence table with quote and date. The report it writes rates each finding high, moderate or low confidence by explicit criteria and lists contradictions and gaps instead of smoothing them over.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- deep-research Installs to ~/.agents/skills/deep-research/ for every project on this machine.
curl -fsSL codexskills.dev/cli.mjs -o codex-skills.mjsnode codex-skills.mjs install deep-research The CLI also searches, updates and removes skills. Run it with no arguments to pick from a list. Needs Node 20.12+.
curl -fsSL codexskills.dev/install.sh \ | sh -s -- --project deep-research Installs to .agents/skills/deep-research/ in the current repository. Commit it and everyone who runs Codex there gets it.
curl -fsSLO codexskills.dev/downloads/deep-research.zipunzip -o deep-research.zip -d ~/.agents/skills/ The archive holds the skill folder with its generated agents/openai.yaml. Unzip into .agents/skills/ to scope it to a repo.
& ([scriptblock]::Create((irm codexskills.dev/install.ps1))) deep-research PowerShell 5.1 or 7. Installs to %USERPROFILE%\.agents\skills\. Add -Project for the current repo.
104-line POSIX script. No sudo, no telemetry. Read install.sh
Use it in Codex
Start a prompt with $deep-research, or pick it from /skills.
You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.
What Codex reads before loading it
Runs multi-source research on an open question - decomposes it into sub-questions, searches primary sources first, triangulates every key claim across independent sources, and delivers a cited report with explicit confidence levels and open gaps. Use when asked to research a topic, investigate how something works across vendors or papers, answer a question that needs more than one search, or produce a briefing with citations rather than an opinion.
Use it when
- A question needs more than one search and the answer must be cited
- You need a briefing that separates solid findings from weak ones
- Sources disagree and you need the disagreement explained
- A decision depends on recent vendor, release or pricing information
Use something else when
- You need a verdict on one specific claim or quote: use fact-checking
- The source base is academic papers and you need a structured review: use literature-review
- You already have the findings and need them turned into a decision: use research-synthesis
How to check the result
Every summary sentence maps to an evidence row, high-confidence findings rest on two independent sources, and spot-checked links contain the exact claims attributed to them.
The mistake it prevents
Counting ten blog posts that repeat one press release as ten sources, which inflates confidence in a claim nobody verified.
Done well means: every material claim in the report links to a source that actually says it, the claims that matter most rest on at least two independent sources, each finding carries a stated confidence, and the reader can see what was not found as clearly as what was.
Before searching
- Pin the question. Restate it in one sentence with scope: time window, geography, versions, audience, and the decision it feeds. If the request is vague (“research vector databases”), ask one clarifying question or state the assumption you will use.
- Check the environment. Research needs network. In Codex, web search depends on the
web_searchsetting inconfig.toml("cached"by default,"live"for fresh results,"disabled") or the--searchflag for a live session. Cached results can be weeks old: for anything fast-moving (prices, releases, laws) say so or ask the user to enable live search. If network is off, say so and work only from files provided. - Read local context. Files the user attached,
AGENTS.md, earlier notes in the repo (research/,docs/decisions/). Do not re-research what the team already settled.
Decompose
Break the question into 3-8 sub-questions that are each answerable by a source. Write them down before searching and keep the list visible in the working notes.
Q: Should we move session storage from Redis to Postgres for a 20k RPS API?
Q1 What read/write latency does Postgres give for key lookups at this rate? (benchmarks, docs)
Q2 What do teams report after making this move? (engineering blogs, talks)
Q3 What are the failure modes: vacuum, connection limits, replication lag? (docs, postmortems)
Q4 What does each option cost at our scale? (pricing pages, our bill)
Q5 What changed in the last 12 months that alters the answer? (release notes)
Source hierarchy
Prefer the closest source to the fact. Go down the list only when the level above is unavailable, and record which level each claim came from.
| Tier | Examples | Use for |
|---|---|---|
| 1 Primary | Official docs, specs, RFCs, source code, filings, datasets, the paper itself, release notes | What something is, does, or costs |
| 2 Expert secondary | Peer-reviewed reviews, maintainers’ posts, standards-body commentary, conference talks | Interpretation, trade-offs |
| 3 Practitioner | Engineering blogs, postmortems, issue threads with reproductions | Real-world behaviour, failure modes |
| 4 Aggregators | News, Wikipedia, vendor comparison pages, listicles | Leads only: follow them to tier 1-3 |
| 5 Unattributed | Forums without evidence, AI-generated summaries, SEO pages | Never cite as support |
Rules:
- A vendor’s page is primary for what the vendor claims, not for whether it is true.
- Wikipedia and search snippets are maps, not territory. Open the cited source.
- Two articles that quote the same press release are one source, not two.
Search loop
For each sub-question:
- Write 2-3 queries using different vocabulary (product term, academic term, the error
message or metric name). Add
site:filters for primary domains when you know them. - Open the most primary-looking results. Read the relevant section, not just the snippet.
- Log each usable finding immediately in the evidence table (below) with URL, date published or last updated, and the exact supporting sentence or number.
- Follow citations one hop back toward the origin of each number.
- Stop a sub-question when two independent tier 1-3 sources agree, or after ~6 sources with no convergence (then record the disagreement as a finding).
Budget: tell the user the plan when the question needs more than ~25 sources; offer to narrow scope rather than skimming.
Evidence table
Keep this as the single source of truth while working. The report is written from it.
| # | Claim | Source (tier) | Date | Quote / figure | Independent of |
|---|---|---|---|---|---|
| E1 | PG 17 adds incremental backup in pg_basebackup | postgresql.org release notes (1) | 2024-09 | "pg_basebackup now supports incremental backups" | - |
| E2 | Team X cut p99 from 40ms to 9ms after moving off Redis | blog.example.com (3) | 2025-03 | "p99 9ms at 18k rps" | E1 |
Confidence levels
Assign one per finding, based on evidence, not on how sure the prose sounds.
| Level | Criteria | Wording in report |
|---|---|---|
| High | 2+ independent tier 1-2 sources agree, recent, no credible contradiction | “X is …” |
| Moderate | One tier 1 source, or several tier 3 sources agree; minor gaps | “X appears to …, based on …” |
| Low | Single tier 3 source, old data, or sources conflict | “One report suggests … (unverified)” |
| Unknown | Searched, not found | “No public data found on …” |
Downgrade one level when: the source has a commercial interest in the claim, the data is older than the relevant product version, the sample is tiny, or you could not open the original. Never upgrade by repetition.
Contradictions
When sources disagree, do not average or pick the convenient one:
- Check whether they measure the same thing (version, workload, definition, region).
- Prefer the more recent, more primary, more transparent method.
- If still unresolved, report both with sources and say what evidence would settle it.
Gotchas
- Recency: release notes and pricing change monthly. Record the access date for every source and flag anything older than 12 months on a fast-moving topic.
- Citation drift: a statistic quoted in ten blogs often traces to one survey with a different definition. Trace it before using it.
- Search results are personalised and SEO-weighted; ranking is not credibility.
- Never fabricate a URL, title, author or quote. If you cannot re-open a source, drop the claim or mark it unverified.
- Do not paste long copyrighted passages into the report; quote the minimum and paraphrase.
- For individual claims needing verdicts (true, false, misleading), hand off to
$fact-checking; for academic corpora use$literature-review.
Verification before delivering
- Every claim in the summary maps to an evidence row (E#)
- Each High-confidence finding has 2+ independent sources
- All links open (spot-check at least five) and support the exact wording used
- Numbers carry units, dates and the population they describe
- Gaps and contradictions are listed, not hidden
- The answer addresses the decision stated at the start
Report template
# <Question>
**Scope:** <time window, versions, geography> | **Researched:** <date> | **Sources:** <n>
## Bottom line
<3-5 sentences answering the question, each with confidence and E# refs>
## Findings
### 1. <Sub-question as a statement> (confidence: high)
<2-6 sentences> [E1][E4]
### 2. ...
## Where sources disagree
- <topic>: <source A says ..., source B says ...>; likely because <difference>.
## Gaps and limits
- No public data on <x>. Would need <internal metric / vendor quote / experiment>.
## Sources
E1. <Title>, <publisher>, <date>. <URL> (accessed <date>)
Keep the bottom line short enough to read in one minute; the evidence lives below it.
What the zip contains
SKILL.md plus the interface file below. Nothing runs on install.
agents/openai.yaml
Gives the Codex app a display name, a one-line description and a starter prompt for this skill.
interface:
display_name: "Deep Research"
short_description: "Cited answers with confidence, not confident guesses"
default_prompt: "$deep-research Research whether we should move session storage from Redis to Postgres and cite your sources" About this skill
Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.