Skip to content
Back to skills

Research

ASecurity

Research one question with fetched, numbered sources: quick (one reader on primary sources, the default), deep (the research workflow), or docs (library and repo docs). Use when the person says /research, research this, look into, find out, or what do the docs say.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentspythongogitapi

Works with

  • api
  • mcp

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned November 7, 2026

npx -y skills add foxrun-ai/foxrun --skill research --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Research?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Research
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/foxrun-ai-research/badge)](https://www.skillsdirectory.com/skills/foxrun-ai-research)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: research
description: "Research one question with fetched, numbered sources: quick (one reader on primary sources, the default), deep (the research workflow), or docs (library and repo docs). Use when the person says /research, research this, look into, find out, or what do the docs say."
kind: tool, knowledge
---

# research

Answer one question from sources you fetched, never from memory.
Every claim from a source carries a number, such as `[2]`.
The numbers come from the citation ledger, `bin/sources.py`, so a number always points at a page you read.

## Steps

1. Pick the mode from the person's words:

   | Mode | When | Engine |
   |---|---|---|
   | `quick` (default) | One question, one sitting | You, on primary sources, with the `/read` engines |
   | `deep` | `/research deep`, or a question with many sides and real stakes | The flow `research` workflow: three researchers, then a writer |
   | `docs` | `/research docs`, or a question about a library, an API, or a repo | `ctx7`, DeepWiki, and the repo through `gh` |

   Recent social talk (`/research pulse`) is not this skill. Use `last30days`, or `x-research` for X.
   Done when you have one mode and the question in neutral words.

2. Start a clean ledger for this question:

   ```sh
   R="${FOXRUN_HOME:-$HOME/.foxrun}/skills/research"
   export FOXRUN_CITATION_LEDGER="$(mktemp -d)/ledger.json"
   python3 "$R/bin/sources.py" reset
   ```

   Done when it prints `ledger reset:` and the path.

3. Fetch the sources for the mode.

   - `quick`: find the primary source that owns each fact: the official page, the spec, the code, the first-party data. Read each one with the `read` skill and save its text to the ledger folder.
   - `docs`: `ctx7 library <name> "<question>"` gives a library id, then `ctx7 docs <id> "<question>"` gives the docs. For a GitHub repo, ask DeepWiki (`ask_wiki_question` on the DeepWiki MCP), and read the files with `gh api repos/<owner>/<repo>/contents/<path>` or `gh search code`.
   - `deep`: run `python3 "${FOXRUN_HOME:-$HOME/.foxrun}/work/flow.py" run research --input question="<question>"` as a background task. Follow the `flow` skill until the run is `done`, then take its `answer.md` to step 5.

   After each fetch, register the URL right away: `python3 "$R/bin/sources.py" add <url> --title "<title>"`. It prints the number.
   Done when every source you will cite has a number from `add`.

4. Attach the exact words for each claim that carries the answer:

   ```sh
   python3 "$R/bin/sources.py" quote <n> --text "<words copied from the page>" --from <saved page text>
   ```

   The ledger refuses a quote that is not in the fetched text. Copy the words; never retype them.
   Done when each cited source has at least one quote.

5. Write the answer in a draft file in the ledger folder.
   Put the number right after the sentence it supports, such as `Ice floats.[1]`. Use at most three numbers on a sentence.
   A claim you could not source gets `[unverified]`, not a number.
   Then add the source list: `python3 "$R/bin/sources.py" render --style evidence --replace-in <draft>`.
   Done when the draft ends with a `## Sources` block that the script wrote.

6. Check it: `python3 "$R/bin/sources.py" verify <draft> --evidence`.
   Done when it prints `citations OK`. On `FAIL`, fix the draft or fetch the missing source, then check again.

7. Give the person the answer with its numbered sources.
   Save a file only when the person asks. A kept answer goes to `<ws>/wiki/queries/`.
   Done when the person has the answer and every number resolves to a fetched page.

## Gotchas

- Register a source when you fetch it, not after you write. A number added from memory defeats the ledger.
- Never edit numbers or the source list by hand. Use `render --replace-in`.
- A search result snippet is not the page. Read the page before you cite it.
- A Reddit thread or a post shows what people report, not what is true. Pair it with a primary source, or label it as opinion.
- A copy from `capture-recover` is an archived snapshot. Cite it with its date.
- `deep` starts several agents and takes up to 30 minutes. Say so before you start it.
- Parallel helpers that feed one answer share one ledger: pass each the same `FOXRUN_CITATION_LEDGER`.
- `bin/sources.py` is ported from Hermes Agent's grounded-citations skill under the MIT License. Its header holds the notice.

Files in this skill

  • SKILL.md4.3 KB
  • bin/sources.py25.3 KB
  • replays/check-citations.json433 B
  • replays/read-modes.json208 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.