Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Primary distribution: [`vercel-labs/skills`](https://github.com/vercel-labs/skil

- Pin syntax: `npx skills add SebastianElvis/reaper#v0.3.9`. Tagged releases are the pin contract.
- The installer copies the entire skill directory (including Python scripts and `references/`); only `metadata.json`, `.git`, `__pycache__`, `__pypackages__` are excluded.
- All `SKILL.md` files must use host-agnostic phrasing ("invoke the `<name>` skill") for inter-skill calls. Sub-skill `Usage` blocks may show host-specific invocation forms (e.g. `/reaper:<sub>` for Claude Code) as examples, clearly labeled as such.
- All `SKILL.md` files must use host-agnostic phrasing ("invoke the `<name>` skill") for inter-skill calls. Sub-skill `Usage` blocks may show host-specific invocation forms (e.g. `/<sub>` on slash-command hosts like Claude Code) as examples, clearly labeled as such.

Secondary distribution: Claude Code plugin via `.claude-plugin/plugin.json` and `.claude-plugin/marketplace.json`. When adding, removing, or renaming a skill, keep the `skills` array in `marketplace.json` in sync. Keep `version` in both `plugin.json` and `marketplace.json` consistent with the current release tag — note that `marketplace.json.version` is ignored by `npx skills` (which uses git tags), so it serves only the Claude Code plugin path.

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Each skill can be used independently or composed by the orchestrator. Invoke by
| `/search-arxiv` | Search arXiv papers, download PDFs, and trace citation graphs |
| `/search-iacr` | Search IACR ePrint archive for cryptography papers |

> The `/<skill>` form is the canonical display convention used throughout these docs. Slash-command hosts (Claude Code) invoke them directly that way (with sub-skills as `/reaper:clarify-goal` etc.). Auto-discovery hosts (Cursor, Codex CLI, Cline, Continue, Gemini CLI, Copilot, Windsurf, …) invoke them by the bare skill name — drop the leading `/` when asking the agent to run a skill.
> The `/<skill>` form is the canonical display convention used throughout these docs. Slash-command hosts (Claude Code) invoke them directly that way (e.g. `/clarify-goal`). Auto-discovery hosts (Cursor, Codex CLI, Cline, Continue, Gemini CLI, Copilot, Windsurf, …) invoke them by the bare skill name — drop the leading `/` when asking the agent to run a skill.

## Installation

Expand Down Expand Up @@ -128,7 +128,7 @@ See the [Claude Code plugin docs](https://code.claude.com/docs/en/discover-plugi

### Invocation across hosts

- **Slash-command hosts** (Claude Code): `/reaper "<goal>"`, `/reaper:analyze-paper <path>`, etc. The `/<plugin>:<skill>` routing is built into the host.
- **Slash-command hosts** (Claude Code): `/reaper "<goal>"`, `/analyze-paper <path>`, etc. Each skill is available as a top-level slash command.
- **Auto-discovery hosts** (Cursor, Codex CLI, Cline, Continue, Gemini CLI, Copilot, Windsurf, …): the agent loads `SKILL.md` files from its skills folder and invokes them by name when the task matches the skill's `description`. Ask the agent to run the skill, e.g. *"use the reaper skill to research X"*.
- **Manual invocation**: any host can be pointed at a specific `SKILL.md` if its native discovery doesn't pick it up.

Expand Down
6 changes: 3 additions & 3 deletions dev/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ Different models have different strengths. The critique skill should route consu

| Host | Skills folder | Discovery model | Notes |
|------|--------------|-----------------|-------|
| Claude Code | `.claude/skills/` | Slash commands (`/reaper:<sub>`) + Skill tool | Native plugin path also available via `.claude-plugin/marketplace.json` |
| Claude Code | `.claude/skills/` | Slash commands (`/<sub>`) + Skill tool | Native plugin path also available via `.claude-plugin/marketplace.json` |
| Cursor | `.agents/skills/` (universal) | Auto-route by `description` match | |
| OpenAI Codex CLI | `.agents/skills/` (universal) | Auto-route by `description` match | |
| Cline | `.agents/skills/` (universal) | Auto-route by `description` match | |
Expand All @@ -443,14 +443,14 @@ Different models have different strengths. The critique skill should route consu
- The `--codex` flag depends on a host with MCP support and a registered Codex MCP server. Non-MCP hosts silently fall back to self-review.
- Auto-discovery quality varies by host. Reliable routing depends on the skill's `description` matching the user's request — Reaper's descriptions are tuned for action-verb match (e.g. "Run the full Reaper research pipeline…") to improve auto-routing.
- Python dependencies (`arxiv`, `requests`, `beautifulsoup4`) are not installed by `npx skills` — users must `pip install` separately. The skill prose tells the agent to do this if missing.
- Sub-skill `Usage` blocks now lead with the bare-name form and show `/reaper:<sub>` as a slash-command-host example only.
- Sub-skill `Usage` blocks now lead with the bare-name form and show `/<sub>` as a slash-command-host example only.

#### Tasks

- [x] Adopt `vercel-labs/skills` `SKILL.md` convention as the canonical distribution format
- [x] Audit all skill frontmatter for `npx skills` parser compliance (`name` regex, `name` matches directory)
- [x] Rewrite orchestrator + critique inter-skill triggers to host-agnostic phrasing
- [x] Update sub-skill `Usage` blocks to lead with skill-name invocation, mark `/reaper:` as slash-command-host example
- [x] Update sub-skill `Usage` blocks to lead with skill-name invocation, mark `/<skill>` as slash-command-host example
- [x] Document multi-host install in README (`npx skills add` as primary, Claude Code plugin as secondary)
- [x] Add CI: frontmatter validation + `npx skills add` discovery check
- [ ] Per-host smoke test: same research goal on Cursor, Codex CLI, Gemini CLI — compare workspace output quality and routing reliability
Expand Down
2 changes: 1 addition & 1 deletion evals/evals.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"evaluation_protocol": {
"setup": "1. Place a test paper PDF in dev/test-papers/ with the filename matching the test case\n2. Open any skills-supporting AI agent (Claude Code, Cursor, Codex CLI, Cline, Continue, Gemini CLI, Copilot, Windsurf, OpenCode, Warp, Goose, Replit, etc.) in the repo root with the reaper skills installed (`npx skills add SebastianElvis/reaper`)",
"run_full_pipeline": "Invoke the `reaper` skill with arguments: `\"<goal from test case>\" dev/test-papers/<paper>.pdf`. On slash-command hosts: `/reaper \"<goal>\" dev/test-papers/<paper>.pdf`. On auto-discovery hosts: ask the agent to run reaper with the goal and paper path.",
"run_individual_skill": "Invoke the named sub-skill (e.g. `analyze-paper`, `review-literature`) by name with its arguments. On slash-command hosts: `/reaper:<skill-name> <args>`. On auto-discovery hosts: ask the agent to run the skill by name.",
"run_individual_skill": "Invoke the named sub-skill (e.g. `analyze-paper`, `review-literature`) by name with its arguments. On slash-command hosts: `/<skill-name> <args>`. On auto-discovery hosts: ask the agent to run the skill by name.",
"evaluate": "After the pipeline completes, check each expected_output and quality_criteria. Score pass/fail per criterion.",
"iterate": "For each failure, identify whether the issue is in the skill prompt, the orchestrator composition, or the model's capability. Fix skill prompts first."
}
Expand Down
2 changes: 1 addition & 1 deletion skills/analyze-paper/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Extract structured information from an academic paper, producing a comprehensive

## Usage

Invoke this skill by name with the paper path (and optional flags). On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:analyze-paper <args>`).
Invoke this skill by name with the paper path (and optional flags). On slash-command hosts, prefix with `/` (e.g. `/analyze-paper <args>`).

```
# Analyze the primary paper under study
Expand Down
2 changes: 1 addition & 1 deletion skills/brainstorm/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The recurring ideation step. Reads the current research state and proposes new o

## Usage

Invoke this skill by name; pass an optional context hint as a quoted string. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:brainstorm "<hint>"`).
Invoke this skill by name; pass an optional context hint as a quoted string. On slash-command hosts, prefix with `/` (e.g. `/brainstorm "<hint>"`).

```
# Generate ideas based on current state
Expand Down
2 changes: 1 addition & 1 deletion skills/clarify-goal/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Ask the user targeted questions to sharpen a vague research goal into something

## Usage

Invoke this skill by name with the research goal (and optional paper path). On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:clarify-goal "<goal>"`).
Invoke this skill by name with the research goal (and optional paper path). On slash-command hosts, prefix with `/` (e.g. `/clarify-goal "<goal>"`).

```
# Without a paper — goal-driven research
Expand Down
2 changes: 1 addition & 1 deletion skills/critique/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Provide external perspective on investigation results. Three modes: human feedba

## Usage

Invoke this skill by name; pass either feedback as a quoted string, `--codex`, or `--self`. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:critique "<feedback>"`).
Invoke this skill by name; pass either feedback as a quoted string, `--codex`, or `--self`. On slash-command hosts, prefix with `/` (e.g. `/critique "<feedback>"`).

```
# Human feedback — iterate on existing results
Expand Down
2 changes: 1 addition & 1 deletion skills/formalize-problem/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Transform a research goal into precise, testable hypotheses with explicit succes

## Usage

Invoke this skill by name with the research goal as a quoted string. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:formalize-problem "<goal>"`).
Invoke this skill by name with the research goal as a quoted string. On slash-command hosts, prefix with `/` (e.g. `/formalize-problem "<goal>"`).

```
formalize-problem "determine if the security proof in Section 4 holds under asynchrony"
Expand Down
2 changes: 1 addition & 1 deletion skills/investigate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ The core research loop. Run N investigation cycles, each testing a hypothesis an

## Usage

Invoke this skill by name with an optional cycle count. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:investigate 10`).
Invoke this skill by name with an optional cycle count. On slash-command hosts, prefix with `/` (e.g. `/investigate 10`).

```
# Run 10 investigation cycles
Expand Down
6 changes: 3 additions & 3 deletions skills/reaper/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ If any of these are missing from your agent's skills folder, ask the user to rei

References below to running a sub-skill use the host-agnostic phrase "invoke the `<name>` skill" — invoke each sub-skill by its `name` using your host's native skill-loading mechanism. The loaded `SKILL.md` provides the full instructions for that stage. Concrete invocation form varies by host:

- **Slash-command hosts** (e.g. Claude Code): `/reaper:<sub>` (e.g. `/reaper:clarify-goal`)
- **Slash-command hosts** (e.g. Claude Code): `/<sub>` (e.g. `/clarify-goal`)
- **Auto-discovery hosts** (e.g. Cursor, Codex CLI, Cline, Continue, Gemini CLI, Copilot, Windsurf, OpenCode): the agent loads peer `SKILL.md` files from the skills folder and routes by `name` + `description` match.
- **Manual invocation hosts**: explicitly point the agent at the installed skill's `SKILL.md` (typical paths: `~/.claude/skills/<name>/SKILL.md`, `~/.cursor/skills/<name>/SKILL.md`, `~/.agents/skills/<name>/SKILL.md`, `~/.continue/skills/<name>/SKILL.md`, `~/.windsurf/skills/<name>/SKILL.md`, or `<repo-root>/skills/<name>/SKILL.md` during development — substitute `<name>` with the sub-skill directory name like `clarify-goal`).

Expand Down Expand Up @@ -191,7 +191,7 @@ After synthesis completes:

After presenting results, let the user know they can iterate:

> If you'd like to refine, deepen, or challenge any aspect of this research, invoke the `/critique` skill with your feedback as a quoted string. (Slash-command hosts: `/reaper:critique "your feedback here"`.)
> If you'd like to refine, deepen, or challenge any aspect of this research, invoke the `/critique` skill with your feedback as a quoted string. (Slash-command hosts: `/critique "your feedback here"`.)

Do **not** block waiting for a response — the pipeline is complete. The user can invoke `/critique` with quoted feedback at any time to start a feedback round. The critique skill classifies the feedback, may run targeted investigation cycles, and then you should re-invoke `/synthesize` to produce an updated report.

Expand Down Expand Up @@ -220,7 +220,7 @@ Do **not** block waiting for a response — the pipeline is complete. The user c

## Important Notes

- Sub-skills are invoked using the host agent's native skill mechanism — by `name` plus arguments. The exact API differs per host (e.g. Claude Code's `Skill` tool with `skill: "reaper:analyze-paper", args: "paper.pdf"`; Cursor/Codex/Cline auto-route based on the loaded `SKILL.md`). Refer to the host's skill documentation for the exact form.
- Sub-skills are invoked using the host agent's native skill mechanism — by `name` plus arguments. The exact API differs per host (e.g. Claude Code's `Skill` tool with `skill: "analyze-paper", args: "paper.pdf"`; Cursor/Codex/Cline auto-route based on the loaded `SKILL.md`). Refer to the host's skill documentation for the exact form.
- Skills communicate exclusively through workspace files — no in-memory state passing
- If a skill fails, read its output file to diagnose, then retry
- The workspace is the source of truth — if context is compressed, re-read workspace files
Expand Down
4 changes: 2 additions & 2 deletions skills/review-literature/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Search for related academic work, download and deeply read the most important pa

## Usage

Invoke this skill by name with the research topic as a quoted string. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:review-literature "<topic>"`).
Invoke this skill by name with the research topic as a quoted string. On slash-command hosts, prefix with `/` (e.g. `/review-literature "<topic>"`).

```
review-literature "post-quantum threshold signatures"
Expand Down Expand Up @@ -151,7 +151,7 @@ After downloading, **delegate paper reading to `/analyze-paper`**. For each down
reaper-workspace/papers/<filename>.pdf --goal "<research-goal>" --output reaper-workspace/papers/<id>-notes.md
```

(On Claude Code: `/reaper:analyze-paper <args>`. On other agents: invoke by skill name with the same arguments.)
(On Claude Code: `/analyze-paper <args>`. On other agents: invoke by skill name with the same arguments.)

**Spawn parallel subagents** (using your host's parallel-spawn primitive — e.g. Claude Code's `Agent` tool — or run sequentially if unavailable) to analyze multiple papers concurrently — each paper is independent.

Expand Down
2 changes: 1 addition & 1 deletion skills/search-arxiv/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Search arXiv for academic papers using the `arxiv` Python package, with citation

## Usage

Invoke this skill by name with the query as a quoted string. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:search-arxiv "<query>"`).
Invoke this skill by name with the query as a quoted string. On slash-command hosts, prefix with `/` (e.g. `/search-arxiv "<query>"`).

```
search-arxiv "post-quantum threshold signatures" --max-results 15 --categories cs.CR
Expand Down
2 changes: 1 addition & 1 deletion skills/search-iacr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Search the IACR Cryptology ePrint Archive for cryptography and security papers.

## Usage

Invoke this skill by name with the query as a quoted string. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:search-iacr "<query>"`).
Invoke this skill by name with the query as a quoted string. On slash-command hosts, prefix with `/` (e.g. `/search-iacr "<query>"`).

```
search-iacr "threshold signatures" --max-results 15
Expand Down
2 changes: 1 addition & 1 deletion skills/synthesize/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Generate a formal research paper from all investigation results. The output shou

## Usage

Invoke this skill by name; no arguments required. On slash-command hosts, prefix with `/reaper:` (e.g. `/reaper:synthesize`).
Invoke this skill by name; no arguments required. On slash-command hosts, prefix with `/` (e.g. `/synthesize`).

```
synthesize
Expand Down
Loading