# Fresh Collaborators

> Use when the user asks who a researcher should be talking to that they aren't already, wants to find new potential collaborators outside an existing network, asks 'who else is doing this work', 'who should X meet', 'who are the new faces in this field', or wants to expand a researcher's collaboration network beyond their current circle. Triggers on requests to find recent, relevant researchers who are NOT in an author's existing coauthor list. Also invokable as /valency:fresh-collaborators <author_name>.

- Skill: `valency-oss/fresh-collaborators` (Agent Skill)
- Install (CLI): `npx skillmds@latest add valency-oss/fresh-collaborators`
- Raw SKILL.md: https://api.skillmd.com/api/skills/valency-oss/fresh-collaborators/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: valency-oss (https://skillmd.com/u/valency-oss)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/valency-oss/fresh-collaborators

---


# Fresh Collaborators

Find researchers doing recent (last 12–18 months), thematically relevant work who are **not** in the focal author's existing coauthor network. Useful for expanding a researcher's collaborator pool, suggesting first-author candidates for new projects, or surfacing people for an upcoming conference / visit.

## Input

The user provides an author name (e.g., "David W. Hogg", "Karl Friston").

Optional: a number of months for the recency window. If not specified, default to **18 months**.

## Tool Chain

Use the Valency MCP tools — they come from the `valency` MCP server registered
by the companion Valency connector extension. If no `valency` server is
registered, tell the user to install the connector and run `/mcp auth valency`.
Stop here.

**Date discipline:** Compute the cutoff date as `today - <window_months>`, formatted as `YYYY-MM-DD`. Use this cutoff string consistently in Step 5.

### Step 1: Verify the author exists

Call `get_author_profile` with:
- `author` (string): the author name

If no results are found, tell the user the author was not found. Stop here.

Note from this result:
- The `resolved_name`
- The top 5 categories (you'll use these in Step 4 to select themes)
- The total paper count (sets context for the network size)

### Step 2: Build the exclusion set (existing coauthor network)

Call `find_coauthors` with:
- `author` (string): the resolved name from Step 1
- `limit` (integer): 100

Build the **exclusion set**: a set of normalized names containing every `coauthor_norm` from this result, plus the focal author's `resolved_name` itself.

Note: 100 is the maximum the tool accepts and represents the focal author's strongest collaborators. People who have co-authored only one or two papers may still slip through as "fresh" — that is acceptable, since one-paper coauthors are weak ties and reconnecting with them is also useful.

### Step 3: Pull the focal author's recent papers (current themes)

Call `search_by_author` with:
- `author` (string): the resolved name
- `limit` (integer): 10
- `sort_by` (string): "relevance"
- `strict_mode` (string): "fuzzy"

The default `relevance` sort orders by recency. These 10 papers represent the author's *current* intellectual direction.

### Step 4: Identify 2–4 current themes

From the Step 3 papers, identify **2 to 4 distinct themes** that characterize the author's recent work. A theme is a short natural-language phrase (5–12 words) suitable as a semantic search query — not a category code.

Construct themes by reading the recent paper titles and abstracts. For each theme, you should be able to point to at least two of the recent papers as evidence. If the recent papers cluster tightly, 2 themes is fine; if they span disparate topics, use up to 4.

Examples of well-formed themes:
- "Bayesian experimental design for cosmological survey forecasting"
- "Equivariant neural networks for stellar abundance prediction"
- "Metacognitive uncertainty in human and machine inference"

Bad themes (too narrow or too broad):
- "stars" (too broad)
- "Section 4 of the 2025 paper on REACH 21cm calibration" (too narrow / not a search query)

### Step 5: Search for recent work in each theme

For each theme from Step 4, call `semantic_search_papers` with:
- `query` (string): the theme phrase
- `start_date` (string): the cutoff date computed in the Date discipline section, `YYYY-MM-DD`
- `limit` (integer): 25
- `sort_by` (string): "relevance"
- `include_abstract` (boolean): false

Passing `start_date` restricts the server-side similarity search to papers published on or after the cutoff, so every result is recent by construction — no in-memory date filtering needed.

If a theme returns fewer than 5 papers, that theme is too narrow or the corpus is too sparse for the recency window. Note this in the output but do not stop.

### Step 6: Filter against the exclusion set

For each surviving paper, inspect its `authors` list. **Drop any paper** for which **any author** in the list (after normalization — lowercase, strip extra whitespace) appears in the exclusion set built in Step 2.

This removes papers by the focal author themselves, by their direct collaborators, and by anyone in the top-100 coauthor network. What remains is, by construction, "fresh."

### Step 7: Rank and categorize the fresh faces

For each remaining paper, identify the **first author** as the primary "fresh face" candidate (other authors are noted but secondary). For each unique first author across all surviving papers:

1. **Junior/senior heuristic.** Without making additional tool calls, infer junior vs senior from signals available in the paper records: number of papers in the result set (1 = likely junior; many = likely established), position of the focal-author-adjacent name in the author list, and seniority cues from coauthors. Tag each candidate `[junior]`, `[senior]`, or `[unclear]`.

2. **Theme attribution.** Tag each candidate with which theme(s) surfaced them. Candidates surfaced by multiple themes are stronger matches and should be ranked higher.

3. **Deduplicate.** If the same first author appears via multiple papers, merge into a single entry and list all surfacing papers.

## Output Format

### Author Summary

A short block:
- **Focal author**: name (resolved), total papers, primary domains
- **Existing coauthor network size**: total from Step 2 (note that only the top 100 are in the exclusion set)
- **Recency window**: e.g. "Last 18 months (cutoff: 2024-10-07)"
- **Themes searched**: bullet list of the 2–4 themes from Step 4

### Fresh Faces

A ranked list of fresh-face candidates. Rank by: (a) number of distinct themes that surfaced them, then (b) similarity scores of their surfacing papers.

For each candidate:

#### N. Author Name `[junior|senior|unclear]`

- **Surfaced by themes**: theme A; theme B (if multiple)
- **Surfacing paper(s)**: Title (paper ID), year, category
- **Why fresh**: explicit confirmation that this person is **not** in the focal author's top-100 coauthor list
- **Why interesting**: one sentence on the connection to the focal author's current work

Show the top 10 candidates. If fewer than 10 survived, show all of them.

### Theme Coverage Notes

For each theme from Step 4, report the number of papers returned by the date-restricted search and the number that survived exclusion filtering. This helps the user see which themes are crowded (lots of fresh activity) vs sparse (no one is doing this).

### Suggested Follow-ups

- `/valency:profile <fresh_face_name>` — for a deeper look at any candidate
- `/valency:similar <surfacing_paper_id>` — to find more work in that vein
- `/valency:reading-list <focal_author>` — for the *what* to read alongside the *who* to meet

