-
Notifications
You must be signed in to change notification settings - Fork 1
chore: add research-link skill, rename to SKILL.md #101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,184 @@ | |||||||||||||||||||||||
| --- | |||||||||||||||||||||||
| description: "Research any link, article, tool, or concept and evaluate what it means for this project" | |||||||||||||||||||||||
| argument-hint: "<url, tool name, concept, or pasted content> [optional: specific angle to evaluate]" | |||||||||||||||||||||||
| allowed-tools: | |||||||||||||||||||||||
| - WebFetch | |||||||||||||||||||||||
| - WebSearch | |||||||||||||||||||||||
| - Read | |||||||||||||||||||||||
| - Write | |||||||||||||||||||||||
| - Edit | |||||||||||||||||||||||
| - Grep | |||||||||||||||||||||||
| - Glob | |||||||||||||||||||||||
| - Agent | |||||||||||||||||||||||
| - AskUserQuestion | |||||||||||||||||||||||
| - Bash | |||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Keeping unused tools unnecessarily widens the privilege surface. Remove Prompt To Fix With AIThis is a comment left during a code review.
Path: .claude/skills/research-link/SKILL.md
Line: 14
Comment:
**`Bash` tool is listed but not used**
`Bash` appears in `allowed-tools` but no phase in the skill actually requires shell execution. All content acquisition uses `WebFetch`/`WebSearch`, local file access uses `Read`/`Grep`/`Glob`, and the only shell reference is the optional parenthetical "(or `gh api` if it's on GitHub)" which is not a required step.
Keeping unused tools unnecessarily widens the privilege surface. Remove `Bash` from the tool list unless a concrete shell step is added to the instructions.
How can I resolve this? If you propose a fix, please make it concise. |
|||||||||||||||||||||||
| --- | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| # Research Link | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| Research any external content — URL, tool, concept, pasted article, code snippet — and evaluate what it means for the ai-company project. Produces a decision-oriented assessment with concrete verdicts and next-step options. | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| **Arguments:** "$ARGUMENTS" | |||||||||||||||||||||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If the user invokes Since
Suggested change
Prompt To Fix With AIThis is a comment left during a code review.
Path: .claude/skills/research-link/SKILL.md
Line: 21
Comment:
If the user invokes `/research-link` with no arguments, `$ARGUMENTS` is empty and Phase 1 immediately tries to classify the input — but none of the five rows in the detection table match an empty string. The skill has no recovery path and will likely hallucinate an input type or stall.
Since `<url, tool name, concept, or pasted content>` is documented as a required argument, add an explicit empty-argument guard before Phase 1:
```suggestion
**Arguments:** "$ARGUMENTS"
> If `$ARGUMENTS` is empty, use `AskUserQuestion` to ask the user what they want to research (a URL, tool name, concept, or pasted content) before proceeding to Phase 1.
```
How can I resolve this? If you propose a fix, please make it concise. |
|||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| --- | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ## Phase 1: Identify Input Type and Acquire Content | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| Detect what the user provided: | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| | Input Type | Detection | Action | | |||||||||||||||||||||||
| |------------|-----------|--------| | |||||||||||||||||||||||
| | **URL** | Starts with `http://` or `https://` | Fetch with WebFetch | | |||||||||||||||||||||||
| | **GitHub repo** | `github.com/` in input or `owner/repo` pattern | Fetch repo README + metadata | | |||||||||||||||||||||||
| | **Tool/library name** | Short name like "LiteLLM", "Mem0", "hologram-cognitive" | WebSearch for official site + GitHub repo | | |||||||||||||||||||||||
| | **Concept/pattern** | Descriptive phrase like "pressure-based context routing" | WebSearch for articles, implementations, prior art | | |||||||||||||||||||||||
| | **Pasted content** | Large block of text in the conversation (>500 chars beyond the command) | Use directly, search for source URL if identifiable | | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### Fetching Strategy | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| 1. **Try primary fetch** (WebFetch for URLs, WebSearch for names/concepts) | |||||||||||||||||||||||
| 2. **If primary fails** (403, paywall, timeout): | |||||||||||||||||||||||
| - Search for the title + author + key phrases | |||||||||||||||||||||||
| - Look for: GitHub repos, HN/Reddit discussions, dev.to reposts, author's other posts | |||||||||||||||||||||||
| - Fetch whatever supplementary sources are found | |||||||||||||||||||||||
| 3. **If user pasted content in the conversation**: use that directly — don't waste time trying to fetch a paywalled URL the user already provided the content for | |||||||||||||||||||||||
| 4. **Collect the primary content** before proceeding | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### Supplementary Source Gathering | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| For every tool, library, or GitHub repo referenced in the content: | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| 1. **Fetch the GitHub repo** README via WebFetch (or `gh api` if it's on GitHub) | |||||||||||||||||||||||
| 2. **Check**: license, stars, last commit date, open issues count, language | |||||||||||||||||||||||
| 3. **Search for**: known issues, security concerns, alternatives | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| Launch supplementary fetches **in parallel** where possible. Cap at 4 supplementary fetches to avoid over-researching. | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ## Phase 2: Extract Core Ideas | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| From the acquired content, extract: | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### What It Is | |||||||||||||||||||||||
| - One paragraph: what problem does this solve and for whom? | |||||||||||||||||||||||
| - The core technique, architecture, or approach (not marketing fluff) | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### Key Technical Details | |||||||||||||||||||||||
| - Algorithms, patterns, data structures, or protocols used | |||||||||||||||||||||||
| - Architecture decisions and their rationale | |||||||||||||||||||||||
| - Performance characteristics or benchmarks cited | |||||||||||||||||||||||
| - Dependencies and requirements | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### Tools & Libraries Referenced | |||||||||||||||||||||||
| For each tool/library/framework mentioned: | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| | Tool | What It Does | License | Activity | Relevance | | |||||||||||||||||||||||
| |------|-------------|---------|----------|-----------| | |||||||||||||||||||||||
| | ... | ... | ... | last commit, stars | High/Medium/Low | | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ### Author's Key Claims | |||||||||||||||||||||||
| - What results do they claim? | |||||||||||||||||||||||
| - Are claims backed by data or anecdotal? | |||||||||||||||||||||||
| - Any obvious biases (selling a product, promoting their framework)? | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| ## Phase 3: Map to Project | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| Cross-reference findings against the ai-company project. Search these in parallel: | |||||||||||||||||||||||
|
|
|||||||||||||||||||||||
| 1. **DESIGN_SPEC.md** — Grep for related sections (memory, providers, communication, agents, etc.) | |||||||||||||||||||||||
| 2. **Source code** — Grep `src/ai_company/` for overlapping implementations or modules | |||||||||||||||||||||||
| 3. **CLAUDE.md** — Check for relevant conventions, decisions, or constraints | |||||||||||||||||||||||
| 4. **Memory files** — Grep `~/.claude/projects/C--Users-Aurelio-ai-company/memory/` for prior research on same or related topics | |||||||||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The file path for memory files is hardcoded to a user-specific path ( This path should be determined dynamically. The Claude environment likely provides a variable (e.g.,
greptile-apps[bot] marked this conversation as resolved.
Outdated
|
|||||||||||||||||||||||
| 4. **Memory files** — Grep `~/.claude/projects/C--Users-Aurelio-ai-company/memory/` for prior research on same or related topics | |
| 4. **Memory files** — Grep this project's Claude memory directory (for example, `~/.claude/projects/<your-project-id>/memory/`) for prior research on the same or related topics |
Copilot
AI
Mar 5, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The license-check rule is underspecified and may not match the repo’s actual dependency license policy (there is an explicit allow-list in the Dependency Review workflow). Consider pointing the skill at the allow-list (and/or CLAUDE.md’s dependency review notes) so recommendations don’t inadvertently approve a license CI will reject, or reject licenses that are actually allowed.
| - **USE** and **REPLACE** require license check (must be compatible with BUSL-1.1 / Apache 2.0) | |
| - **USE** and **REPLACE** require a license check against the repo’s official dependency policy (use the Dependency Review workflow’s allow-list and the dependency review notes in `CLAUDE.md`; do not recommend anything CI would reject) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The skill says "Create the file with a header row if it doesn't exist yet" but only provides the data row template — it never specifies what the header itself should look like. The model will have to guess, potentially producing inconsistent headers across machines or sessions.
Consider explicitly defining the header:
| ``` | |
| | YYYY-MM-DD | [Title](URL) | VERDICT | Relevant areas | One-line summary | | |
| ``` | |
| Create the file with a header row if it doesn't exist yet. | |
| **Always** (regardless of user choice): append a one-liner to `research-log.md` in the project's auto memory directory: | |
| Date | Source | Verdict | Relevant Areas | Summary |
|---|
Create the file with the above header row if it doesn't exist yet. Then append the new entry:
| YYYY-MM-DD | Title | VERDICT | Relevant areas | One-line summary |
Prompt To Fix With AI
This is a comment left during a code review.
Path: .claude/skills/research-link/SKILL.md
Line: 163-168
Comment:
The skill says "Create the file with a header row if it doesn't exist yet" but only provides the data row template — it never specifies what the header itself should look like. The model will have to guess, potentially producing inconsistent headers across machines or sessions.
Consider explicitly defining the header:
```suggestion
**Always** (regardless of user choice): append a one-liner to `research-log.md` in the project's auto memory directory:
```
| Date | Source | Verdict | Relevant Areas | Summary |
|------|--------|---------|----------------|---------|
```
Create the file with the above header row if it doesn't exist yet. Then append the new entry:
```
| YYYY-MM-DD | [Title](URL) | VERDICT | Relevant areas | One-line summary |
```
```
How can I resolve this? If you propose a fix, please make it concise.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Similar to the previous comment, the paths for the research log and detailed memory files are hardcoded to a user-specific path (~/.claude/projects/C--Users-Aurelio-ai-company/memory/...). This will cause the skill to fail on any other machine or for any other user.
Please replace the hardcoded path with a dynamic approach, likely using an environment variable provided by the Claude environment to locate the project's memory directory.
Copilot
AI
Mar 5, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These instructions hard-code a per-user Claude memory path for writing the research log and detailed notes. That makes the skill non-portable and likely to fail for anyone whose Claude project directory name differs. Use a project-agnostic memory location (or instructions to compute it) so the skill works on Linux/macOS/Windows without editing paths.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agentis included inallowed-toolsbut no phase in the skill ever instructs the model to invoke it. Unlike other tools with explicit usage patterns,Agentspawns sub-agents that inherit the full tool set — making it the highest-privilege tool here. Listing it without defined usage patterns gives the model latitude to spin up arbitrary sub-agents for tasks that could be accomplished with direct parallel tool calls.The "Launch supplementary fetches in parallel" instruction in Phase 1 and the "Search these in parallel" in Phase 3 are achievable with native parallel tool calls (multiple
WebFetch/Grepcalls in a single response) — noAgentsub-agent is needed.Consider removing
Agentunless a specific phase explicitly requires multi-turn sub-agent delegation.Prompt To Fix With AI