$npx -y skills add phira-ai/Phi-Skills --skill search-conferenceUse when tasks involve semantically matching a user's idea (query or example papers) to papers in a specific OpenReview venue. Uses embed-papers to crawl metadata, build/use embedding caches, run cosine-similarity search, then produces a short, grouped Markdown reading list wit
| 1 | # When to use |
| 2 | |
| 3 | - Need to find papers in an OpenReview venue that match one or more ideas/topics. |
| 4 | |
| 5 | # Dependencies |
| 6 | |
| 7 | - `embed-papers` must be installed and available in `PATH`. |
| 8 | - Check with: `command -v embed-papers` |
| 9 | - Install with: `pip install embed-papers` |
| 10 | - OpenReview must be reachable. |
| 11 | - `OPENAI_API_KEY` is required to compute embeddings of the papers (cached) or the search intent (not cached). |
| 12 | - Check with: `printenv OPENAI_API_KEY` |
| 13 | - If missing and embeddings are required: stop and tell the user how to set it (immediate stop). |
| 14 | |
| 15 | # Inputs from user |
| 16 | |
| 17 | - Venue (one of): |
| 18 | - `venue_id` (preferred), e.g. `ICLR.cc/2024/Conference` |
| 19 | - OR `{conference, year}` to derive `venue_id` as `{CONF}.cc/{YEAR}/Conference`, e.g. `NeurIPS`, `2025` |
| 20 | - Search intent (one of): |
| 21 | - `query` (string of ideas) |
| 22 | - OR `examples` (list of `{title, abstract}` objects) |
| 23 | - Optional: |
| 24 | - `top_k` (default: 100) for retrieval breadth |
| 25 | |
| 26 | # CLI contract (how to interpret tool output) |
| 27 | |
| 28 | - Success envelope: `{ ok: true, schema_version: "1", command, data }` |
| 29 | - Error envelope: `{ ok: false, schema_version: "1", command, error: { type, message } }` |
| 30 | - Always parse stdout as JSON. |
| 31 | - Treat any `ok=false` as a terminal error unless the error section below says otherwise. |
| 32 | |
| 33 | # HARD CONSTRAINT (TOOLS): |
| 34 | |
| 35 | - Do NOT call Read/Glob/Grep on any cache/embedding files or directories (e.g. anything under .cache/ or any path containing "cache", "embedding", "paper", "atlas"). |
| 36 | - Treat caches as opaque implementation details. Never inspect them “just to check”. |
| 37 | - If you need cache status, ONLY use `embed-papers warm-cache` and rely on its JSON stdout. |
| 38 | - If a command outputs a cache path, DO NOT open it; proceed using the CLI utilities. |
| 39 | |
| 40 | # Pipeline |
| 41 | |
| 42 | 1. Resolve `venue_id` |
| 43 | - If the user gave `{conference, year}`, build: `{CONF}.cc/{YEAR}/Conference` |
| 44 | - If ambiguous, ask a single clarifying question (conference acronym + year). |
| 45 | |
| 46 | 2. Crawl venue metadata (idempotent) |
| 47 | - Run: |
| 48 | - `embed-papers crawl --venue-id "<venue_id>" --skip-if-exists` |
| 49 | - Record: |
| 50 | - `data.output_file` |
| 51 | - `data.total` |
| 52 | |
| 53 | 3. Ensure embeddings are available (cache) |
| 54 | - Run: |
| 55 | - `embed-papers warm-cache --venue-id "<venue_id>"` |
| 56 | - If this fails due to missing API key, stop and instruct the user to set `OPENAI_API_KEY`. |
| 57 | - This command also computes the embedding if no cache is found. |
| 58 | - You MUST NOT access the cache. |
| 59 | - You MUST use the package's provided utility. |
| 60 | |
| 61 | 4. Search (choose based on user input) |
| 62 | - Query mode: |
| 63 | - `embed-papers search --venue-id "<venue_id>" --query "<query>" --top-k <top_k>` |
| 64 | - Examples mode: |
| 65 | - If needed, write a temporary JSON file containing: |
| 66 | - `[{"title":"...","abstract":"..."}, ...]` |
| 67 | - Then run: |
| 68 | - `embed-papers search --venue-id "<venue_id>" --examples-file "<tmp.json>" --top-k <top_k>` |
| 69 | |
| 70 | 5. Organize results (post-processing) |
| 71 | - Group primarily by `primary_area` (if present). |
| 72 | - Within groups, prefer papers with clear overlap to the query/examples. |
| 73 | - For each recommended paper, add agent judgment notes: |
| 74 | - why it matches |
| 75 | - what seems novel/different |
| 76 | - caveats (weak match, missing abstract, unclear claims, etc.) |
| 77 | |
| 78 | # Report requirements (Markdown only) |
| 79 | |
| 80 | - Output is a Markdown report only (no raw JSON). |
| 81 | - Keep the final recommendation list short: 5-10 papers max. |
| 82 | - Do not output a full ranked list or appendix by default (only if the user asks). |
| 83 | |
| 84 | ## What I'd start with |
| 85 | |
| 86 | - Begin this section with a short, casual sentence (lowercase is fine). |
| 87 | - Example: "here's what i recommend you to read as a beginning." |
| 88 | - Then list 5-10 papers. |
| 89 | - Each item must include: |
| 90 | - Title (bold) |
| 91 | - OpenReview link |
| 92 | - 1-2 sentence rationale (fit + why it matters, use italic to emphasis) |
| 93 | |
| 94 | ## How I organized it |
| 95 | |
| 96 | - Briefly explain grouping logic and where judgment calls were applied. |
| 97 | - Note missing metadata (e.g., missing abstracts) when relevant. |
| 98 | |
| 99 | ## Why these stand out |
| 100 | |
| 101 | - Use informal labels in the narrative (no formal rubric), e.g.: |
| 102 | - "the obvious hits" |
| 103 | - "the surprisingly relevant ones" |
| 104 | - "the quirky but promising picks" |
| 105 | |
| 106 | # Error handling |
| 107 | |
| 108 | - `NoPapersFoundError` |
| 109 | - Likely invalid `venue_id`; suggest the pattern `{CONF}.cc/{YEAR}/Conference` and ask for the correct venue. |
| 110 | - `CacheMissRequiresApiKeyError` |
| 111 | - Instruct the user to set `OPENAI_API_KEY` and retry. |
| 112 | - `OpenReviewRequestError` / `EmbeddingRequestError` |
| 113 | - Suggest retrying, reducing load (smaller `top_k`), or trying later (rate limits / transient failures). |