Skip to main content
AIDiveForge AIDiveForge
🕸️

Citation Neighborhood Walker

Search & Retrieval · by AIDiveForge · Apr 20, 2026 · Advanced

Build a bounded citation neighborhood from identified papers and traceable links.

Get a two-hop graph with edge evidence and relevance notes.

Free · 2 KB · SKILL.md, instructions and example files. Requires stable paper identifiers and access to reference/citation records.

A worked example

A small example to try before using your own data.

Input

{
  "seed": "A",
  "cites": {
    "A": [
      "B",
      "C"
    ],
    "B": [
      "D"
    ],
    "C": [
      "D",
      "E"
    ]
  },
  "max_hops": 2
}

Expected result

{
  "nodes": [
    "A",
    "B",
    "C",
    "D",
    "E"
  ],
  "edges": [
    [
      "A",
      "B"
    ],
    [
      "A",
      "C"
    ],
    [
      "B",
      "D"
    ],
    [
      "C",
      "D"
    ],
    [
      "C",
      "E"
    ]
  ],
  "hops": {
    "A": 0,
    "B": 1,
    "C": 1,
    "D": 2,
    "E": 2
  }
}

What to check: Deduplicate D while retaining both incoming edges. Do not expand D or E into a third hop.

Limits: Citation databases have incomplete and delayed coverage. The graph is not evidence that every cited work is relevant or correct.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "citation-neighborhood-walker"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/citation-neighborhood-walker.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "a76e547d3c737895c8070769d17fc5ad4f3d7e36b14abd990dbf1781cde9c0b3":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/citation-neighborhood-walker/SKILL.md. Codex: ~/.codex/skills/citation-neighborhood-walker/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

Deduplicate D while retaining both incoming edges. Do not expand D or E into a third hop.

⚙️ How it works

  1. Resolve the seed paper to a stable identifier and state whether edges mean cites or is cited by.
  1. Collect first-hop records from a named source and retain identifiers, direction and retrieval date.
  1. Expand only the declared second hop, deduplicate identifiers and cap traversal to the requested budget.
  1. Rank relevance using title/abstract evidence and the user’s thesis; citation count alone is not relevance.
  1. Mark incomplete metadata and missing abstracts rather than inventing graph edges or summaries.

Description

Get a two-hop graph with edge evidence and relevance notes.

Requires stable paper identifiers and access to reference/citation records.

Limits: Citation databases have incomplete and delayed coverage. The graph is not evidence that every cited work is relevant or correct.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.

No matches yet. Be the first to suggest a pairing, or the Forge will populate suggestions as signals align.