#355 by GitHub stars

microsoft/ResearchStudio

ResearchStudio: Our AI co-author, from research problem to final publication.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

ResearchStudio-Idea/evaluation/idea_quality/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Idea/skills/idea_spark/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Idea/skills/paper_search/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Idea/skills/scoop_check/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2assets/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2blog/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Local scripts → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Local scripts

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2poster/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2poster/html2pptx/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2reel/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

ResearchStudio-Reel/skills/paper2video/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

063f10088af4 → 063f10088af4

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 063f10088af4

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 063f10088af49909e1a4a7ea8d29efe19633f34e

3.5kGitHub stars
79stars in 7 days
10skills in this repository
0commits in 30 days

Heat

6.3
  • Star growth, last 7 daysAhead of 92% of tracked repositories
  • Star growth, last 24 hoursAhead of 90% of tracked repositories
  • Rank movement, last 7 daysAhead of 60% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 6, 20263,531

Individual skills in this repository

How it works

idea-quality

When your agent uses it

Score the QUALITY of a research idea at the idea stage — given a Markdown file with Title / Motivation / Method sections (no experiments needed), produce a per-axis quality assessment with cited evidence and an overall 0–100 score plus a verdict; or, given two such idea files, a blind head-to-head comparison. TRIGGER when the user asks "how good is this idea", "rate / score / grade this research idea or proposal", "review my idea .md before I write it up", "is this contribution strong enough to pursue", "which of these two idea files is stronger", or hands over an idea Markdown file (Title/Motivation/Method) and wants a quality judgment. Use this even when the user does not say the word "score" but clearly wants an assessment of how strong an idea is. DO NOT trigger for prior-art / overlap / "is this novel vs existing work" checks (that is a literature-collision task), for full reviews of finished papers that already have results, or for generating the idea itself.

What it loads into context

Frontmatter

219 tokens

Always available to the agent

SKILL.md

2,378 tokens

When the skill is activated

Reference documents

622 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Input: an idea Markdown file
  2. Scope: what this judges, and what it deliberately does not
  3. The three axes
  4. Scoring: dual-track
  5. Output format
  6. Anti-bias rules (why they matter)

Files

  • SKILL.mdcore10,142 bytes
  • evals/evals.jsonasset2,601 bytes
  • evals/sample_ideas/mismatch_gate.mddoc880 bytes
  • evals/sample_ideas/strong_grpo.mddoc1,362 bytes
  • evals/sample_ideas/weak_temperature.mddoc677 bytes
Read SKILL.md

# Idea Quality

Judge how strong a research idea is **at the idea stage** — before any experiments exist — and return a quality score with reasons a reviewer would recognize. This skill is self-contained: it judges from first principles on the three axes below. It consults no external corpus, dataset, or other skill, so its judgment is reproducible from the idea text alone.

## Input: an idea Markdown file

The idea is a `.md` file with three sections. Read the file, then map each section to what it feeds:

```markdown
# Title
<≤ ~15 words: the idea's handle>

## Motivation
<the bottleneck / gap the idea attacks, why it matters, and why it is still open>
View the complete source on GitHub

Skills included

  • idea-quality
  • idea-spark
  • paper-search
  • scoop-check
  • paper2assets
  • paper2blog
  • paper2poster
  • html2pptx
  • paper2reel
  • paper2video

Repository facts

License
MIT
Created
Apr 27, 2026
Last pushed
Sep 21, 2026
Forks
203
Open issues
1
Project activity
Active

Rank over the last 12 weeks

Now #355 · best #326 · down 17 in 30 days

  1. #349 on Oct 29
  2. #352 from Oct 30 to Oct 31
  3. #350 on Nov 1
  4. #351 on Nov 2
  5. #353 from Nov 3 to Nov 5
  6. #355 since Nov 6
77 earlier periods
  1. #356 on Aug 2
  2. #354 on Aug 7
  3. #353 on Aug 8
  4. #347 on Aug 9
  5. #358 on Aug 10
  6. #356 on Aug 11
  7. #345 on Aug 12
  8. #351 on Aug 13
  9. #346 on Aug 14
  10. #343 on Aug 15
  11. #346 on Aug 16
  12. #344 on Aug 17
  13. #347 from Aug 18 to Aug 19
  14. #343 on Aug 20
  15. #345 on Aug 21
  16. #340 on Aug 22
  17. #343 on Aug 23
  18. #346 on Aug 24
  19. #345 on Aug 25
  20. #344 on Aug 26
  21. #342 on Aug 27
  22. #345 on Aug 28
  23. #342 on Aug 29
  24. #336 on Aug 30
  25. #340 on Aug 31
  26. #345 on Sep 1
  27. #340 on Sep 2
  28. #344 on Sep 3
  29. #338 on Sep 4
  30. #340 on Sep 5
  31. #335 on Sep 6
  32. #342 on Sep 7
  33. #340 on Sep 8
  34. #341 on Sep 9
  35. #339 on Sep 10
  36. #336 on Sep 11
  37. #338 on Sep 12
  38. #334 on Sep 13
  39. #336 on Sep 14
  40. #338 on Sep 15
  41. #336 on Sep 16
  42. #333 on Sep 17
  43. #332 on Sep 18
  44. #327 on Sep 19
  45. #335 from Sep 20 to Sep 21
  46. #338 on Sep 22
  47. #332 on Sep 23
  48. #330 on Sep 24
  49. #329 on Sep 25
  50. #326 on Sep 26
  51. #334 from Sep 27 to Sep 28
  52. #340 on Sep 29
  53. #336 on Sep 30
  54. #335 on Oct 1
  55. #339 on Oct 2
  56. #333 on Oct 3
  57. #329 on Oct 4
  58. #336 on Oct 5
  59. #338 from Oct 6 to Oct 7
  60. #341 on Oct 8
  61. #339 on Oct 9
  62. #330 on Oct 10
  63. #329 on Oct 11
  64. #334 on Oct 12
  65. #330 on Oct 13
  66. #331 on Oct 14
  67. #328 on Oct 15
  68. #332 on Oct 16
  69. #327 on Oct 17
  70. #332 on Oct 18
  71. #333 on Oct 19
  72. #334 from Oct 20 to Oct 21
  73. #335 on Oct 22
  74. #333 on Oct 23
  75. #331 on Oct 24
  76. #340 on Oct 25
  77. #347 on Oct 28

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 2, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 149 notes
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/idea_spark/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • ResearchStudio-Idea/skills/paper_search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 668 signals by file

ResearchStudio-Idea/skills/idea_spark/SKILL.md

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/references/host-runbook.md

  • Network accessline 45
    - [ ] Phase 0: Literature grounding → lit_table.md, then Phase 0+ full-text fetch (MANDATORY — Phase 1 hard-gates on it)

ResearchStudio-Idea/skills/idea_spark/references/retrieval-runbook.md

  • Network accessline 7
    Phase 0 and 3.1 require **real external retrieval** via the bundled connector scripts (`scripts/search_*.py`) — never WebSearch or ad-hoc fetch (downstream phases reject unstructured output). Gate sentinel: `.lit_grounding_mode` = `real` vs
  • Network accessline 27
    **Phase 0+ full-text fetch — MANDATORY.** The instant `lit_table.md` lands (and after the coverage check), run `phase0_fulltext` (entry-point table) before touching Phase 1. Pool = U (user refs, never capped) + **H (host-recall refs, retrie

ResearchStudio-Idea/skills/idea_spark/references/setup.md

  • Dangerous shell operationline 19
    - **Optional deps (only if you want the extras):** PDF compilation of the idea card needs **xelatex** *or* **tectonic** (macOS `brew install --cask mactex-no-gui` or `brew install tectonic`; Ubuntu `sudo apt-get install texlive-xetex` or `c
  • Network accessline 25
    | Key | Required for | How to get | |---|---|---| | `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signu
  • Network accessline 26
    |---|---|---| | `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signup at https://openreview.net | | `SEM
  • Network accessline 27
    | `OPENREVIEW_USER` + `OPENREVIEW_PASS` | OpenReview connector at logged-in rate limits. Without them (or with rejected ones) the connector reads public submissions anonymously. | Free signup at https://openreview.net |
  • Network accessline 28
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/references/source-routing.md

  • Access to secretsline 14
    [Credential-related source omitted]
  • Network accessline 20
    - **Strength**: CS-focused academic graph (~200M works), returns **TLDR auto-summary** (Allen-AI 1-sentence) and **`externalIds` block** with DOI + ArXiv ID + DBLP key + MAG ID + PMID — enabling cross-source dedup without title-only matchin
  • Network accessline 21
    - **Use for**: peer-reviewed proceedings + journals (6-24mo). DBLP keys arrive via `externalIds`, so no standalone DBLP connector is needed. - **Auth**: `SEMANTICSCHOLAR_API_KEY` strongly recommended. Apply free at https://www.semanticschol
  • Network accessline 22
    [Credential-related source omitted]
  • Access to secretsline 22
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/_merge.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/_time_guard.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/dedup_merge.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/extract_user_refs.py

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    Recognised formats (regex-based, no LLM call):   - arxiv URL:        https://arxiv.org/abs/2401.12345, arxiv.org/pdf/2401.12345v2.pdf, arxiv.org/html/2401.12345
  • Network accessline 4
    - arxiv URL:        https://arxiv.org/abs/2401.12345, arxiv.org/pdf/2401.12345v2.pdf, arxiv.org/html/2401.12345

ResearchStudio-Idea/skills/idea_spark/scripts/fetch_sections.py

  • Executable scriptline 1
    Executable file
  • Network accessline 113
    try:         req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 114
    req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 115
    with urllib.request.urlopen(req, timeout=timeout) as resp:
  • Network accessline 131
    base_id = arxiv_id.split("v")[0]     url = f"https://arxiv.org/html/{base_id}"
  • Network accessline 132
    url = f"https://arxiv.org/html/{base_id}"
  • Access to secretsline 292
    [Credential-related source omitted]
  • Network accessline 294
    for lookup in candidates:         url = f"https://api.semanticscholar.org/graph/v1/paper/{urllib.parse.quote(lookup, safe=':/')}?fields=externalIds"
  • Network accessline 295
    url = f"https://api.semanticscholar.org/graph/v1/paper/{urllib.parse.quote(lookup, safe=':/')}?fields=externalIds"
  • Network accessline 300
    time.sleep(_SS_MIN_INTERVAL_SEC - since_last)             try:                 req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 301
    [Credential-related source omitted]
  • Network accessline 302
    req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 303
    [Credential-related source omitted]
  • Access to secretsline 303
    [Credential-related source omitted]
  • Network accessline 304
    [Credential-related source omitted]
  • Access to secretsline 304
    [Credential-related source omitted]
  • Network accessline 305
    with urllib.request.urlopen(req, timeout=15) as r:
  • Network accessline 333
    [Credential-related source omitted]
  • Network accessline 334
    [Credential-related source omitted]
  • Access to secretsline 334
    [Credential-related source omitted]
  • Network accessline 335
    url = (f"https://api.semanticscholar.org/graph/v1/paper/"            f"{urllib.parse.quote(f'DOI:{doi}', safe=':/')}?fields=openAccessPdf")     for attempt in range(2):
  • Network accessline 340
    time.sleep(_SS_MIN_INTERVAL_SEC - since_last)         try:             req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 341
    [Credential-related source omitted]
  • Network accessline 342
    req = urllib.request.Request(url, headers={"User-Agent": "idea-spark/1.0"})
  • Network accessline 343
    [Credential-related source omitted]
  • Access to secretsline 343
    [Credential-related source omitted]
  • Network accessline 344
    [Credential-related source omitted]
  • Access to secretsline 344
    [Credential-related source omitted]
  • Network accessline 345
    with urllib.request.urlopen(req, timeout=15) as r:
  • Access to secretsline 417
    [Credential-related source omitted]
  • Network accessline 511
    pdf_candidates: list[tuple[str, str]] = []  # (source_label, url)     if arxiv_id:         pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}"))
  • Network accessline 512
    if arxiv_id:         pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}"))     ss_pdf = paper_meta.get("openAccessPdf") or {}
  • Network accessline 513
    pdf_candidates.append(("arxiv", f"https://arxiv.org/pdf/{arxiv_id}"))
  • Network accessline 517
    # ACL Anthology DOI -> free PDF. ACL / EMNLP / NAACL / *findings* papers are open even when     # the connector only surfaced a landing-page URL, so derive the anthology PDF from the DOI:     # 10.18653/[vN/]<id>  ->  https://aclanthology.o
  • Network accessline 519
    # 10.18653/[vN/]<id>  ->  https://aclanthology.org/<id>.pdf
  • Network accessline 520
    acl_m = re.match(r"^10\.18653/(?:v\d+/)?(.+)$", (paper_meta.get("doi") or "").strip(), re.I)     if acl_m:         pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf"))
  • Network accessline 521
    if acl_m:         pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf"))     if or_id:
  • Network accessline 522
    pdf_candidates.append(("acl", f"https://aclanthology.org/{acl_m.group(1)}.pdf"))
  • Network accessline 525
    pdf_candidates.append(("or", f"https://openreview.net/pdf?id={or_id}"))

ResearchStudio-Idea/skills/idea_spark/scripts/gen_pipeline.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 94
    [Credential-related source omitted]
  • Network accessline 97
    token_provider = get_bearer_token_provider(             DefaultAzureCredential(managed_identity_client_id=identity_id),             "https://cognitiveservices.azure.com/.default",
  • Network accessline 98
    DefaultAzureCredential(managed_identity_client_id=identity_id),             "https://cognitiveservices.azure.com/.default",         )
  • Network accessline 99
    "https://cognitiveservices.azure.com/.default",
  • Access to secretsline 106
    [Credential-related source omitted]
  • Possible obfuscationline 137
    image_bytes = base64.b64decode(image_b64)

ResearchStudio-Idea/skills/idea_spark/scripts/intent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 59
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/json_repair.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/lint_markdown_safety.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/merge_revisions.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/next_step.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 216
    [Credential-related source omitted]
  • Access to secretsline 269
    [Credential-related source omitted]
  • Access to secretsline 352
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/pattern_summary.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 70
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/phase4_skeleton.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/quality_cli.py

  • Executable scriptline 1
    Executable file
  • Network accessline 42
    raw = [b for b in co.get('unrepaired', []) if b.get('severity') == 'blocking']         nc = (co.get('trace_report') or {}).get('naive_comparison') or {}
  • Network accessline 43
    nc = (co.get('trace_report') or {}).get('naive_comparison') or {}
  • Access to secretsline 550
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/quality_contract.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 467
    else:             out.append(finding(label + '_structural_anomaly', str(a.get('anomaly', ''))[:160], 'warn'))     nc = trace.get('naive_comparison') or {}
  • Network accessline 468
    out.append(finding(label + '_structural_anomaly', str(a.get('anomaly', ''))[:160], 'warn'))     nc = trace.get('naive_comparison') or {}     if nc.get('verdict') == 'equivalent_to_naive':
  • Network accessline 469
    nc = trace.get('naive_comparison') or {}

ResearchStudio-Idea/skills/idea_spark/scripts/quality_flow.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 56
    [Credential-related source omitted]
  • Access to secretsline 176
    [Credential-related source omitted]
  • Access to secretsline 560
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/render_pdf.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 838
    [Credential-related source omitted]
  • Dangerous shell operationline 904
    f'       Ubuntu: sudo apt-get install texlive-xetex   (or: cargo install tectonic)\n',
  • Access to secretsline 988
    [Credential-related source omitted]
  • Access to secretsline 989
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/run.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 62
    [Credential-related source omitted]
  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 85
    [Credential-related source omitted]
  • Access to secretsline 87
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]
  • Access to secretsline 93
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 108
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]
  • Access to secretsline 111
    [Credential-related source omitted]
  • Access to secretsline 222
    [Credential-related source omitted]
  • Access to secretsline 223
    [Credential-related source omitted]
  • Access to secretsline 266
    [Credential-related source omitted]
  • Access to secretsline 332
    [Credential-related source omitted]
  • Access to secretsline 446
    [Credential-related source omitted]
  • Access to secretsline 450
    [Credential-related source omitted]
  • Access to secretsline 641
    [Credential-related source omitted]
  • Access to secretsline 792
    [Credential-related source omitted]
  • Access to secretsline 960
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/search_arxiv.py

  • Executable scriptline 1
    Executable file
  • Network accessline 27
    # https (not http): http://export.arxiv.org 301-redirects to https, wasting a round-trip
  • Network accessline 29
    ARXIV_API = 'https://export.arxiv.org/api/query'
  • Network accessline 31
    USER_AGENT = 'research-studio-idea/1.0 (+https://arxiv.org/help/api)'
  • Network accessline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Network accessline 33
    MAX_RETRIES = 4        # on 429, back off and retry this many times before giving up NS = {'atom': 'http://www.w3.org/2005/Atom',       'arxiv': 'http://arxiv.org/schemas/atom'}
  • Network accessline 34
    NS = {'atom': 'http://www.w3.org/2005/Atom',
  • Network accessline 35
    'arxiv': 'http://arxiv.org/schemas/atom'}
  • Network accessline 82
    for attempt in range(MAX_RETRIES + 1):         _throttle()         req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})
  • Network accessline 83
    _throttle()         req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})         try:
  • Network accessline 84
    req = urllib.request.Request(url, headers={'User-Agent': USER_AGENT})
  • Network accessline 85
    try:             with urllib.request.urlopen(req, timeout=30) as r:                 return r.read()
  • Network accessline 86
    with urllib.request.urlopen(req, timeout=30) as r:
  • Network accessline 137
    'source_id': arxiv_id,             'doi': '',             'paper_url': f'https://arxiv.org/abs/{arxiv_id}',
  • Network accessline 138
    'doi': '',             'paper_url': f'https://arxiv.org/abs/{arxiv_id}',             'published_iso': published,
  • Network accessline 139
    'paper_url': f'https://arxiv.org/abs/{arxiv_id}',

ResearchStudio-Idea/skills/idea_spark/scripts/search_openalex.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 6
    [Credential-related source omitted]
  • Network accessline 23
    API = 'https://api.openalex.org/works'
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Network accessline 54
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Network accessline 55
    url = f'{API}?{urllib.parse.urlencode(q)}'         req = urllib.request.Request(url, headers={'User-Agent': 'idea-spark/1.0'})         try:
  • Network accessline 56
    req = urllib.request.Request(url, headers={'User-Agent': 'idea-spark/1.0'})
  • Network accessline 57
    try:             with urllib.request.urlopen(req, timeout=timeout) as r:                 return json.loads(r.read())
  • Network accessline 58
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Access to secretsline 61
    [Credential-related source omitted]
  • Network accessline 90
    # Normalize: "https://arxiv.org/abs/2412.14171" → "2412.14171"
  • Network accessline 108
    'source': 'openalex',         'source_id': work.get('id', '').split('/')[-1],         'doi': (work.get('doi') or '').replace('https://doi.org/', ''),
  • Network accessline 109
    'source_id': work.get('id', '').split('/')[-1],         'doi': (work.get('doi') or '').replace('https://doi.org/', ''),         'arxiv_id': arxiv_id or None,
  • Network accessline 110
    'doi': (work.get('doi') or '').replace('https://doi.org/', ''),

ResearchStudio-Idea/skills/idea_spark/scripts/search_openreview.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 38
    [Credential-related source omitted]
  • Network accessline 39
    [Credential-related source omitted]
  • Network accessline 40
    [Credential-related source omitted]
  • Network accessline 41
    [Credential-related source omitted]
  • Network accessline 42
    except Exception as e:             print(f'  openreview: login rejected ({str(e)[:80]}); continuing anonymously', file=sys.stderr)     return openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net')
  • Network accessline 44
    return openreview.api.OpenReviewClient(baseurl='https://api2.openreview.net')
  • Network accessline 138
    'source_id': n.id,                 'doi': '',                 'paper_url': f'https://openreview.net/forum?id={n.id}',
  • Network accessline 139
    'doi': '',                 'paper_url': f'https://openreview.net/forum?id={n.id}',                 'published_iso': '',
  • Network accessline 140
    'paper_url': f'https://openreview.net/forum?id={n.id}',

ResearchStudio-Idea/skills/idea_spark/scripts/search_semanticscholar.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 11
    [Credential-related source omitted]
  • Network accessline 32
    API = 'https://api.semanticscholar.org/graph/v1/paper/search'
  • Network accessline 77
    headers = {k: v for k, v in headers.items() if k != 'x-api-key'}     for attempt in range(len(_BACKOFF_S) + 1):         req = urllib.request.Request(url, headers=headers)
  • Network accessline 78
    for attempt in range(len(_BACKOFF_S) + 1):         req = urllib.request.Request(url, headers=headers)         try:
  • Network accessline 79
    req = urllib.request.Request(url, headers=headers)
  • Network accessline 80
    try:             with urllib.request.urlopen(req, timeout=45) as r:                 return json.loads(r.read())
  • Network accessline 81
    with urllib.request.urlopen(req, timeout=45) as r:
  • Access to secretsline 106
    [Credential-related source omitted]
  • Access to secretsline 121
    [Credential-related source omitted]
  • Access to secretsline 122
    [Credential-related source omitted]
  • Network accessline 154
    'arxiv_id': ext.get('ArXiv', ''),             'dblp_key': ext.get('DBLP', ''),             'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}',
  • Network accessline 155
    'dblp_key': ext.get('DBLP', ''),             'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}',             'published_iso': paper.get('publicationDate', ''),
  • Network accessline 156
    'paper_url': oa.get('url', '') or f'https://www.semanticscholar.org/paper/{paper.get("paperId","")}',
  • Access to secretsline 198
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/source-routing.md

  • Access to secretsline 14
    [Credential-related source omitted]
  • Network accessline 20
    - **Strength**: CS-focused academic graph (~200M works), returns **TLDR auto-summary** (Allen-AI 1-sentence) and **`externalIds` block** with DOI + ArXiv ID + DBLP key + MAG ID + PMID — enabling cross-source dedup without title-only matchin
  • Network accessline 21
    - **Use for**: peer-reviewed proceedings + journals (6-24mo). DBLP keys arrive via `externalIds`, so no standalone DBLP connector is needed. - **Auth**: `SEMANTICSCHOLAR_API_KEY` strongly recommended. Apply free at https://www.semanticschol
  • Network accessline 22
    [Credential-related source omitted]
  • Access to secretsline 22
    [Credential-related source omitted]

ResearchStudio-Idea/skills/idea_spark/scripts/validators/__init__.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/alias_collateral_coverage.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/chinese_word_order.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/expansion_completeness.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/implementability_completeness.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/implementability_readability.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/kill_switch_integrity.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/motivation_opener.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/subpattern_citation_consistency.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/threat_grounding.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/idea_spark/scripts/validators/user_direction.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Idea/skills/paper_search/SKILL.md

  • Executable scriptline 1
    Executable file
  • Network accessline 357
    | #   | Title       | Year | Venue   | Notes | |-----|-------------|------|---------|-------| | [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X |
  • Network accessline 358
    |-----|-------------|------|---------|-------| | [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X | | [2](...) | Title here | 2024 | ICLR | (uncertain — verify) |
  • Network accessline 359
    | [1](https://scholar.google.com/scholar?q=Title) | Title here | 2018 | NeurIPS | Foundational; often cited by recent work on X |

ResearchStudio-Idea/skills/paper_search/scripts/_env.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 3
    [Credential-related source omitted]
  • Access to secretsline 6
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 50
    [Credential-related source omitted]

ResearchStudio-Idea/skills/paper_search/scripts/_http_runtime.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 56
    [Credential-related source omitted]
  • Network accessline 93
    session = requests.Session()

ResearchStudio-Idea/skills/paper_search/scripts/postprocess.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 39
    def norm_doi(d) -> str:     d = (d or "").strip().lower()     for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"):
  • Network accessline 40
    d = (d or "").strip().lower()     for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"):         if d.startswith(prefix):
  • Network accessline 41
    for prefix in ("https://doi.org/", "http://doi.org/", "doi.org/", "doi:"):

ResearchStudio-Idea/skills/paper_search/scripts/search_papers.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_arxiv.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 20
    [Credential-related source omitted]
  • Network accessline 71
    ARXIV_API = "https://export.arxiv.org/api/query"
  • Network accessline 99
    ATOM_NS = {"atom": "http://www.w3.org/2005/Atom"}
  • Network accessline 129
    m = re.search(r"arxiv\.org/abs/([^\s]+?)(v\d+)?$", paper_url)         arxiv_id = m.group(1) if m else None         doi_node = entry.find("{http://arxiv.org/schemas/atom}doi")
  • Network accessline 130
    arxiv_id = m.group(1) if m else None         doi_node = entry.find("{http://arxiv.org/schemas/atom}doi")         doi = (doi_node.text or "").strip() if doi_node is not None else None
  • Network accessline 131
    doi_node = entry.find("{http://arxiv.org/schemas/atom}doi")

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_crossref.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 27
    url = "https://api.crossref.org/works"

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_dblp.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 28
    url = "https://dblp.org/search/publ/api"
  • Network accessline 103
    # Extract DOI from URL like https://doi.org/10.xxxx/yyyy or direct DOI
  • Network accessline 111
    session,             "GET",             f"https://api.crossref.org/works/{doi}",
  • Network accessline 112
    "GET",             f"https://api.crossref.org/works/{doi}",             source="dblp",
  • Network accessline 113
    f"https://api.crossref.org/works/{doi}",

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_google_scholar.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 20
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_open_alex.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 28
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Network accessline 29
    url = "https://api.openalex.org/works"
  • Access to secretsline 44
    [Credential-related source omitted]
  • Network accessline 69
    "publication_date": work.get("publication_date", ""),                 "source": "open_alex",                 "doi": (work.get("doi") or "").replace("https://doi.org/", "") or None,
  • Network accessline 70
    "source": "open_alex",                 "doi": (work.get("doi") or "").replace("https://doi.org/", "") or None,                 "arxiv_id": None,
  • Network accessline 71
    "doi": (work.get("doi") or "").replace("https://doi.org/", "") or None,

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_openreview.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 12
    [Credential-related source omitted]
  • Access to secretsline 47
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 50
    }     try:         v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net")
  • Network accessline 51
    try:         v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net")         v1 = openreview.Client(baseurl="https://api.openreview.net")
  • Network accessline 52
    v2 = openreview.api.OpenReviewClient(baseurl="https://api2.openreview.net")
  • Network accessline 53
    v1 = openreview.Client(baseurl="https://api.openreview.net")
  • Access to secretsline 55
    [Credential-related source omitted]
  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 66
    [Credential-related source omitted]
  • Network accessline 104
    "year": pub.year,         "abstract": abstract,         "url": f"https://openreview.net/forum?id={note_id}" if note_id else "",
  • Network accessline 105
    "abstract": abstract,         "url": f"https://openreview.net/forum?id={note_id}" if note_id else "",         "venue": venue,
  • Network accessline 106
    "url": f"https://openreview.net/forum?id={note_id}" if note_id else "",

ResearchStudio-Idea/skills/paper_search/scripts/search_papers_by_semantic_scholar.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 28
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Network accessline 29
    url = "https://api.semanticscholar.org/graph/v1/paper/search"
  • Access to secretsline 45
    [Credential-related source omitted]

ResearchStudio-Idea/skills/paper_search/scripts/selftest_postprocess.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 32
    title_norm('  Held-Out: Widget Gating!  ') == 'held out widget gating') check('norm_doi strips url prefixes',       norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz'
  • Network accessline 33
    check('norm_doi strips url prefixes',       norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz'       and norm_doi('doi:10.1/a') == '10.1/a')
  • Network accessline 34
    norm_doi('https://doi.org/10.1000/XYZ') == '10.1000/xyz'

ResearchStudio-Idea/skills/paper_search/scripts/selftest_runtime.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 63
    [Credential-related source omitted]
  • Access to secretsline 65
    [Credential-related source omitted]
  • Access to secretsline 69
    [Credential-related source omitted]
  • Access to secretsline 70
    [Credential-related source omitted]
  • Access to secretsline 77
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Access to secretsline 83
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Access to secretsline 106
    [Credential-related source omitted]
  • Network accessline 111
    with self.assertRaises(requests.exceptions.ConnectTimeout):             _http_runtime.request(                 session, "GET", "https://example.invalid", source="open_alex"
  • Network accessline 112
    _http_runtime.request(                 session, "GET", "https://example.invalid", source="open_alex"             )
  • Network accessline 113
    session, "GET", "https://example.invalid", source="open_alex"
  • Network accessline 120
    with mock.patch.object(_http_runtime.time, "sleep") as sleep:             response = _http_runtime.request(                 session, "GET", "https://example.invalid", source="crossref"
  • Network accessline 121
    response = _http_runtime.request(                 session, "GET", "https://example.invalid", source="crossref"             )
  • Network accessline 122
    session, "GET", "https://example.invalid", source="crossref"
  • Network accessline 130
    session = FakeSession()         _http_runtime.configure_external_session(session, "openreview")         session.request("GET", "https://example.invalid")
  • Network accessline 131
    _http_runtime.configure_external_session(session, "openreview")         session.request("GET", "https://example.invalid")         self.assertEqual(session.calls[0][2]["timeout"], (15.0, 300.0))
  • Network accessline 132
    session.request("GET", "https://example.invalid")
  • Access to secretsline 162
    [Credential-related source omitted]
  • Access to secretsline 163
    [Credential-related source omitted]
  • Network accessline 164
    [Credential-related source omitted]
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 165
    session = _http_runtime.create_session()         base = f"http://127.0.0.1:{server.server_port}"         try:
  • Network accessline 166
    base = f"http://127.0.0.1:{server.server_port}"         try:             with self.assertRaises(requests.exceptions.RequestException):
  • Access to secretsline 312
    [Credential-related source omitted]
  • Access to secretsline 342
    [Credential-related source omitted]
  • Network accessline 351
    all(client.session.calls[0][2]["timeout"] == (15.0, 300.0) for client in created)         )         v2.session.request("GET", "https://example.invalid")
  • Network accessline 352
    )         v2.session.request("GET", "https://example.invalid")         self.assertEqual(v2.session.calls[-1][2]["timeout"], (15.0, 300.0))
  • Network accessline 353
    v2.session.request("GET", "https://example.invalid")
  • Network accessline 377
    def test_mock_response_matches_legacy_fixture_output(self):         xml = """<?xml version="1.0" encoding="UTF-8"?>         <feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom">
  • Network accessline 378
    xml = """<?xml version="1.0" encoding="UTF-8"?>         <feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom">           <entry>
  • Network accessline 379
    <feed xmlns="http://www.w3.org/2005/Atom" xmlns:arxiv="http://arxiv.org/schemas/atom">
  • Network accessline 380
    <entry>             <id>https://arxiv.org/abs/2401.12345v2</id>             <published>2024-01-20T00:00:00Z</published>
  • Network accessline 381
    <id>https://arxiv.org/abs/2401.12345v2</id>
  • Network accessline 406
    "year": 2024,                 "abstract": "Abstract body.",                 "url": "https://arxiv.org/abs/2401.12345v2",
  • Network accessline 407
    "abstract": "Abstract body.",                 "url": "https://arxiv.org/abs/2401.12345v2",                 "venue": "arXiv",
  • Network accessline 408
    "url": "https://arxiv.org/abs/2401.12345v2",

ResearchStudio-Idea/skills/paper_search/scripts/source_worker.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Idea/skills/scoop_check/SKILL.md

  • Executable scriptline 1
    Executable file
  • Network accessline 94
    1. **Resolve a PDF URL.** Start from the source link / ID recorded in Step 3. For arXiv entries, convert `https://arxiv.org/abs/<id>` to `https://arxiv.org/pdf/<id>.pdf`. For OpenReview / ACL Anthology / publisher pages, follow the "PDF" li

ResearchStudio-Idea/skills/scoop_check/scripts/fetch_paper.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 7
    # Behavior: #   1. Downloads the PDF to ${CLAUDE_PROJECT_DIR}/papers/<pdf_name>.pdf via curl #      (falls back to wget if curl is missing).
  • Network accessline 8
    #   1. Downloads the PDF to ${CLAUDE_PROJECT_DIR}/papers/<pdf_name>.pdf via curl #      (falls back to wget if curl is missing). #   2. Verifies the result is actually a PDF (catches HTML error pages saved
  • Network accessline 9
    #      (falls back to wget if curl is missing).
  • Network accessline 43
    download() {   if command -v curl >/dev/null 2>&1; then
  • Network accessline 44
    if command -v curl >/dev/null 2>&1; then
  • Network accessline 45
    curl -fsSL --max-time 60 -o "${PDF_PATH}" "${PDF_URL}"
  • Network accessline 46
    elif command -v wget >/dev/null 2>&1; then
  • Network accessline 47
    wget -q --timeout=60 -O "${PDF_PATH}" "${PDF_URL}"
  • Network accessline 48
    else     echo "FAILED: neither curl nor wget is installed" >&2     return 1
  • Network accessline 49
    echo "FAILED: neither curl nor wget is installed" >&2

ResearchStudio-Reel/skills/paper2assets/SKILL.md

  • Broad permissionsline 1
    Bash(*), Read, Write, Edit, Grep, Glob, AskUserQuestion, WebFetch, WebSearch
  • Network accessline 189
    "institutes": ["First Institute", "Second Institute"],   "venue": "NeurIPS 2025",   "paper_url": "https://arxiv.org/abs/...",
  • Network accessline 190
    "venue": "NeurIPS 2025",   "paper_url": "https://arxiv.org/abs/...",   "code_url": "https://github.com/..."
  • Network accessline 191
    "paper_url": "https://arxiv.org/abs/...",
  • Network accessline 192
    "code_url": "https://github.com/..."

ResearchStudio-Reel/skills/paper2assets/scripts/build_package.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2assets/scripts/crop_figure.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2assets/scripts/extract_pdf.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 977
    if m:         metadata["arxiv_id"] = m.group(1)         metadata["paper_url"] = f"https://arxiv.org/pdf/{m.group(1)}"
  • Network accessline 979
    metadata["paper_url"] = f"https://arxiv.org/pdf/{m.group(1)}"

ResearchStudio-Reel/skills/paper2assets/scripts/fetch_conf_logo.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 66
    def fetch(url, timeout=20, retries=4):
  • Network accessline 71
    for attempt in range(retries):         try:             req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 72
    try:             req = urllib.request.Request(url, headers={"User-Agent": UA})             with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 73
    req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 74
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 82
    def fetch_json(url):     return json.loads(fetch(url).decode("utf-8"))
  • Network accessline 83
    return json.loads(fetch(url).decode("utf-8"))
  • Network accessline 99
    def wikidata_item(term):     url = ("https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json"            "&language=en&type=item&limit=7&search=" + urllib.parse.quote(term))
  • Network accessline 100
    url = ("https://www.wikidata.org/w/api.php?action=wbsearchentities&format=json"            "&language=en&type=item&limit=7&search=" + urllib.parse.quote(term))     hits = fetch_json(url).get("search", [])
  • Network accessline 109
    def p154_filename(qid):     url = ("https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json"
  • Network accessline 110
    url = ("https://www.wikidata.org/w/api.php?action=wbgetclaims&format=json"
  • Network accessline 121
    def commons_url(filename, width=600):     return ("https://commons.wikimedia.org/wiki/Special:FilePath/"             + urllib.parse.quote(filename) + "?width=" + str(width))
  • Network accessline 122
    return ("https://commons.wikimedia.org/wiki/Special:FilePath/"
  • Network accessline 135
    if not title:         return None     url = ("https://en.wikipedia.org/api/rest_v1/page/summary/"
  • Network accessline 136
    return None     url = ("https://en.wikipedia.org/api/rest_v1/page/summary/"            + urllib.parse.quote(title.replace(" ", "_")))
  • Network accessline 137
    url = ("https://en.wikipedia.org/api/rest_v1/page/summary/"            + urllib.parse.quote(title.replace(" ", "_")))     try:
  • Network accessline 155
    if not title:         return None     url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages"
  • Network accessline 156
    return None     url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages"            "&piprop=original|thumbnail&pithumbsize=600&pilicense=any&redirects=1&titles="
  • Network accessline 157
    url = ("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages"            "&piprop=original|thumbnail&pithumbsize=600&pilicense=any&redirects=1&titles="            + urllib.parse.quote(title))
  • Network accessline 211
    if not img_url:             print(json.dumps({**base, "reason": f"no Wikipedia lead image / P154 logo for '{term}'"})); return 0         img = fetch(img_url)
  • Network accessline 212
    print(json.dumps({**base, "reason": f"no Wikipedia lead image / P154 logo for '{term}'"})); return 0         img = fetch(img_url)         if not is_image(img) or len(img) < 200:
  • Network accessline 213
    img = fetch(img_url)

ResearchStudio-Reel/skills/paper2assets/scripts/fetch_logos.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 27
    python fetch_logos.py --outdir <outdir> --from-spec <outdir>/paper_spec.md     # WEB-SEARCH FALLBACK for an institute this Wikimedia pass missed:     python fetch_logos.py --outdir <outdir> --add-logo "Westlake University=https://.../westla
  • Network accessline 29
    python fetch_logos.py --outdir <outdir> --add-logo "Westlake University=https://.../westlake-logo.png"
  • Network accessline 158
    def fetch(url: str, timeout: float = 15.0) -> bytes:
  • Network accessline 159
    req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 160
    with urllib.request.urlopen(req, timeout=timeout) as r:
  • Network accessline 176
    api = "https://en.wikipedia.org/w/api.php?" + urllib.parse.urlencode({
  • Network accessline 178
    "namespace": "0", "format": "json", "redirects": "resolve"})     try:         data = json.loads(fetch(api).decode("utf-8", errors="ignore"))
  • Network accessline 179
    try:         data = json.loads(fetch(api).decode("utf-8", errors="ignore"))         return [t for t in (data[1] if len(data) > 1 else []) if t]
  • Network accessline 180
    data = json.loads(fetch(api).decode("utf-8", errors="ignore"))
  • Network accessline 490
    return []     try:         raw = fetch(
  • Network accessline 491
    try:         raw = fetch(             f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
  • Network accessline 492
    raw = fetch(
  • Network accessline 493
    f"https://www.wikidata.org/wiki/Special:EntityData/{qid}.json"
  • Network accessline 521
    ))     rows.sort(key=lambda r: (r[0], r[1], r[2], r[3]), reverse=True)     return ["https://commons.wikimedia.org/wiki/Special:FilePath/"
  • Network accessline 522
    rows.sort(key=lambda r: (r[0], r[1], r[2], r[3]), reverse=True)     return ["https://commons.wikimedia.org/wiki/Special:FilePath/"             + urllib.parse.quote(fn.replace(" ", "_")) for *_, fn in rows]
  • Network accessline 523
    return ["https://commons.wikimedia.org/wiki/Special:FilePath/"
  • Network accessline 530
    Wikimedia rejects arbitrary thumb widths with HTTP 400 ("Use thumbnail     sizes listed on https://w.wiki/GHai"). For raster originals we strip
  • Network accessline 531
    sizes listed on https://w.wiki/GHai"). For raster originals we strip
  • Network accessline 780
    try:         data = fetch(url)
  • Network accessline 781
    data = fetch(url)
  • Network accessline 818
    """Fetch (don't yet write) the best logo for `name`.
  • Network accessline 886
    for title in titles:         page = "https://en.wikipedia.org/wiki/" + urllib.parse.quote(title.replace(" ", "_"))
  • Network accessline 887
    page = "https://en.wikipedia.org/wiki/" + urllib.parse.quote(title.replace(" ", "_"))
  • Network accessline 888
    try:             html = fetch(page).decode("utf-8", errors="ignore")         except Exception as e:
  • Network accessline 889
    html = fetch(page).decode("utf-8", errors="ignore")
  • Network accessline 917
    for full in full_candidates:             try:                 blob = fetch(full)
  • Network accessline 918
    try:                 blob = fetch(full)             except Exception:
  • Network accessline 919
    blob = fetch(full)

ResearchStudio-Reel/skills/paper2assets/scripts/figure_semantics.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2assets/scripts/make_qr.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 22
    # or, explicit URLs:     python make_qr.py --outdir <outdir> \         --paper-url https://arxiv.org/pdf/1706.03762 \
  • Network accessline 23
    python make_qr.py --outdir <outdir>          --paper-url https://arxiv.org/pdf/1706.03762
  • Network accessline 24
    --paper-url https://arxiv.org/pdf/1706.03762 \
  • Network accessline 25
    --code-url https://github.com/tensorflow/tensor2tensor
  • Network accessline 27
    Prints a JSON summary on stdout AND writes it into metadata.json under `"qr"`:     {"qr": [        {"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"},
  • Network accessline 28
    {"qr": [        {"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"},        {"kind": "code",  "url": "https://...", "path": "assets/qr/code.png",  "label": "Code"}
  • Network accessline 29
    {"kind": "paper", "url": "https://...", "path": "assets/qr/paper.png", "label": "Paper"},
  • Network accessline 30
    {"kind": "code",  "url": "https://...", "path": "assets/qr/code.png",  "label": "Code"}
  • Network accessline 38
    Sourcing rules:   - `paper_url` falls back to `https://arxiv.org/pdf/<arxiv_id>` only when empty
  • Network accessline 39
    - `paper_url` falls back to `https://arxiv.org/pdf/<arxiv_id>` only when empty
  • Network accessline 97
    `code_url` and `project_url` are taken verbatim. `paper_url` falls back to     `https://arxiv.org/pdf/<arxiv_id>` only when empty AND an arxiv_id is present.
  • Network accessline 98
    `https://arxiv.org/pdf/<arxiv_id>` only when empty AND an arxiv_id is present.
  • Network accessline 102
    arxiv_id = (meta.get("arxiv_id") or "").strip()         if arxiv_id:             paper_url = f"https://arxiv.org/pdf/{arxiv_id}"
  • Network accessline 103
    if arxiv_id:             paper_url = f"https://arxiv.org/pdf/{arxiv_id}"     project_url = (meta.get("project_url") or "").strip()
  • Network accessline 104
    paper_url = f"https://arxiv.org/pdf/{arxiv_id}"

ResearchStudio-Reel/skills/paper2assets/scripts/source_figures.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 60
    def download_arxiv_source(aid: str, dest: Path) -> bool:     url = f"https://arxiv.org/e-print/{aid}"
  • Network accessline 61
    url = f"https://arxiv.org/e-print/{aid}"
  • Network accessline 62
    tarball = dest / "source.tar.gz"     try:         req = urllib.request.Request(url, headers=_UA)
  • Network accessline 63
    try:         req = urllib.request.Request(url, headers=_UA)         with urllib.request.urlopen(req, timeout=60) as r, open(tarball, "wb") as f:
  • Network accessline 64
    req = urllib.request.Request(url, headers=_UA)
  • Network accessline 65
    with urllib.request.urlopen(req, timeout=60) as r, open(tarball, "wb") as f:
  • Network accessline 274
    if re.match(r"https?://", ref):         try:             req = urllib.request.Request(ref, headers=_UA)
  • Network accessline 275
    try:             req = urllib.request.Request(ref, headers=_UA)             with urllib.request.urlopen(req, timeout=60) as r:
  • Network accessline 276
    req = urllib.request.Request(ref, headers=_UA)
  • Network accessline 277
    with urllib.request.urlopen(req, timeout=60) as r:

ResearchStudio-Reel/skills/paper2assets/scripts/utils/__init__.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2assets/scripts/utils/layout.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2assets/scripts/utils/logo_quality.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2assets/scripts/utils/logo_trim.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2blog/scripts/build_wechat_docx.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2blog/scripts/check_blog_package.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 47
    NS = {     "w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
  • Network accessline 48
    "w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
  • Network accessline 49
    "wp": "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing",
  • Network accessline 50
    "a": "http://schemas.openxmlformats.org/drawingml/2006/main",
  • Network accessline 51
    "r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships",

ResearchStudio-Reel/skills/paper2blog/scripts/crop_figure.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2blog/scripts/extract_pdf.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 765
    if m:         metadata["arxiv_id"] = m.group(1)         metadata["paper_url"] = f"https://arxiv.org/pdf/{m.group(1)}"
  • Network accessline 767
    metadata["paper_url"] = f"https://arxiv.org/pdf/{m.group(1)}"

ResearchStudio-Reel/skills/paper2poster/SKILL.md

  • Broad permissionsline 1
    Bash(*), Read, Write, Edit, Grep, Glob, AskUserQuestion, WebFetch, WebSearch
  • Access to secretsline 463
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/assets/fonts/Arimo-LICENSE.txt

  • Network accessline 1
    Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
  • Network accessline 2
    Upstream-Name: Noto Upstream-Contact: https://github.com/googlei18n/noto-fonts/issues  http://groups.google.com/group/noto-font
  • Network accessline 3
    Upstream-Contact: https://github.com/googlei18n/noto-fonts/issues
  • Network accessline 4
    http://groups.google.com/group/noto-font
  • Network accessline 5
    Source: https://github.com/googlei18n/noto-fonts

ResearchStudio-Reel/skills/paper2poster/assets/katex/auto-render.min.js

  • Possible obfuscationline 1
    !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderM
  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/assets/katex/katex.min.js

  • Possible obfuscationline 1
    [Credential-related source omitted]
  • Executable scriptline 1
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/assets/layouts/3col.html

  • Network accessline 1171
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1172
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1173
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts/full.html

  • Network accessline 1294
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1295
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1296
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts/half.html

  • Network accessline 1181
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1182
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1183
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts/methoddriven.html

  • Network accessline 1387
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1388
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1389
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts/methoddriven4.html

  • Network accessline 1373
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1374
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1375
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts_portrait/full.html

  • Network accessline 1714
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1715
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1716
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/layouts_portrait/half.html

  • Network accessline 1491
    // Resolve sibling URL; works for file:// too (fetch may fail there — that's OK).     const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {
  • Network accessline 1492
    const url = new URL("poster_debug.json", document.baseURI).toString();     fetch(url).then(r => r.ok ? r.json() : null).then(j => {       if (!j || !Array.isArray(j.columns)) { cb(); return; }
  • Network accessline 1493
    fetch(url).then(r => r.ok ? r.json() : null).then(j => {

ResearchStudio-Reel/skills/paper2poster/assets/math/katex.html

  • Network accessline 7
    survives in each .katex's <annotation encoding="application/x-tex">, which      html2pptx reads to rasterize/emit the equation (engine-agnostic math pass). --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/kate
  • Network accessline 8
    html2pptx reads to rasterize/emit the equation (engine-agnostic math pass). --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css"> <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/ka
  • Network accessline 9
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
  • Network accessline 10
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
  • Network accessline 11
    <script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"

ResearchStudio-Reel/skills/paper2poster/assets/math/mathjax.html

  • Network accessline 33
    }; </script> <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
  • Network accessline 35
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>

ResearchStudio-Reel/skills/paper2poster/assets/mathjax/LICENSE

  • Network accessline 2
    Apache License                            Version 2.0, January 2004                         http://www.apache.org/licenses/
  • Network accessline 4
    http://www.apache.org/licenses/
  • Network accessline 196
    http://www.apache.org/licenses/LICENSE-2.0

ResearchStudio-Reel/skills/paper2poster/assets/mathjax/tex-svg.js

  • Possible obfuscationline 1
    [Credential-related source omitted]
  • Executable scriptline 1
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/html2pptx/GOTCHAS.md

  • Possible obfuscationline 141
    2. Before sending text to PPT, run each long word (≥7 chars) through `pyphen.Pyphen(lang="en_US").inserted(word, "<U+00AD>")`

ResearchStudio-Reel/skills/paper2poster/html2pptx/README.md

  • Network accessline 5
    Designed as a [Claude Code skill](https://docs.claude.com/en/docs/claude-code/skills) but the scripts work standalone.
  • Dangerous shell operationline 28
    sudo apt install libreoffice-impress

ResearchStudio-Reel/skills/paper2poster/html2pptx/SKILL.md

  • Access to secretsline 3
    [Credential-related source omitted]
  • Dangerous shell operationline 34
    sudo apt install libreoffice-impress
  • Network accessline 53
    # Download static-weight TTFs (variable fonts register under wrong family name) mkdir -p /tmp/fonts-dl && cd /tmp/fonts-dl curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip
  • Network accessline 54
    mkdir -p /tmp/fonts-dl && cd /tmp/fonts-dl curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip curl -sL "https://github.com/adobe-fonts/source-serif/releases/download/4.005R/source-serif-4.005_Desktop.
  • Network accessline 55
    curl -sL "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o Inter.zip
  • Network accessline 56
    curl -sL "https://github.com/adobe-fonts/source-serif/releases/download/4.005R/source-serif-4.005_Desktop.zip" -o SourceSerif4.zip
  • Network accessline 57
    curl -sL "https://github.com/JetBrains/JetBrainsMono/releases/download/v2.304/JetBrainsMono-2.304.zip" -o JetBrainsMono.zip
  • Access to secretsline 120
    [Credential-related source omitted]
  • Access to secretsline 121
    [Credential-related source omitted]
  • Access to secretsline 175
    [Credential-related source omitted]
  • Access to secretsline 337
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/html2pptx/__init__.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/__init__.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/auto_correct_loop.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 130
    [Credential-related source omitted]
  • Access to secretsline 131
    [Credential-related source omitted]
  • Access to secretsline 270
    [Credential-related source omitted]
  • Access to secretsline 271
    [Credential-related source omitted]
  • Access to secretsline 272
    [Credential-related source omitted]
  • Access to secretsline 274
    [Credential-related source omitted]
  • Access to secretsline 275
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/auto_fix_loop.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/font_embedder.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 54
    NS_P = "http://schemas.openxmlformats.org/presentationml/2006/main"
  • Network accessline 55
    NS_R = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
  • Network accessline 56
    NS_CT = "http://schemas.openxmlformats.org/package/2006/content-types"
  • Network accessline 57
    NS_PR = "http://schemas.openxmlformats.org/package/2006/relationships"
  • Network accessline 58
    FONT_REL_TYPE = ("http://schemas.openxmlformats.org/"

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/font_resolver.py

  • Executable scriptline 1
    Executable file
  • Network accessline 41
    FONT_DIR = Path.home() / ".local/share/fonts" GOOGLE_FONTS_CSS = "https://fonts.googleapis.com/css2"
  • Network accessline 42
    GOOGLE_FONTS_CSS = "https://fonts.googleapis.com/css2"
  • Network accessline 43
    # UA without WOFF2 support → Google serves plain TTF with .ttf URL. # Note: stricter UAs like "Mozilla/4.0 (compatible; MSIE 6.0)" cause Google # to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that
  • Network accessline 44
    # Note: stricter UAs like "Mozilla/4.0 (compatible; MSIE 6.0)" cause Google # to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that # our regex won't catch. Plain "Mozilla/4.0" gets clean .ttf URLs.
  • Network accessline 45
    # to serve extensionless URLs (https://...gstatic.com/l/font?kit=...) that
  • Network accessline 207
    }     url = GOOGLE_FONTS_CSS + "?" + urllib.parse.urlencode(params)     req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA})
  • Network accessline 208
    url = GOOGLE_FONTS_CSS + "?" + urllib.parse.urlencode(params)     req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA})     try:
  • Network accessline 209
    req = urllib.request.Request(url, headers={"User-Agent": LEGACY_UA})
  • Network accessline 210
    try:         with urllib.request.urlopen(req, timeout=HTTP_TIMEOUT) as r:             if r.status != 200:
  • Network accessline 211
    with urllib.request.urlopen(req, timeout=HTTP_TIMEOUT) as r:
  • Network accessline 215
    except Exception:         return 0     ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css)
  • Network accessline 216
    return 0     ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css)     if not ttf_urls:
  • Network accessline 217
    ttf_urls = re.findall(r"url\((https://[^)]+?\.ttf)\)", css)
  • Network accessline 227
    continue         try:             with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f:
  • Network accessline 228
    try:             with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f:                 fname.write_bytes(f.read())
  • Network accessline 229
    with urllib.request.urlopen(font_url, timeout=HTTP_TIMEOUT) as f:

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/html_to_pptx.py

  • Executable scriptline 1
    Executable file
  • Network accessline 57
    _M_NS   = "http://schemas.openxmlformats.org/officeDocument/2006/math"
  • Network accessline 58
    _A14_NS = "http://schemas.microsoft.com/office/drawing/2010/main"
  • Possible obfuscationline 1892
    f.write(base64.b64decode(m.group(1)))
  • Possible obfuscationline 2338
    core = _hyph.inserted(core, "<U+00AD>")
  • Network accessline 2976
    body2 = body.replace(                         "<m:rPr>",                         f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>',
  • Network accessline 2977
    "<m:rPr>",                         f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>',                         1,
  • Network accessline 2978
    f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/>',
  • Network accessline 2981
    else:                     body2 = (                         f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>'
  • Network accessline 2982
    body2 = (                         f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>'                         + body
  • Network accessline 2983
    f'<m:rPr><a:rPr xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" sz="{sz_attr}"/></m:rPr>'

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_aggregate.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_audit.py

  • Executable scriptline 1
    Executable file
  • Network accessline 142
    [Credential-related source omitted]
  • Access to secretsline 142
    [Credential-related source omitted]
  • Access to secretsline 143
    [Credential-related source omitted]
  • Access to secretsline 145
    [Credential-related source omitted]
  • Network accessline 165
    }],     }     req = urllib.request.Request(
  • Network accessline 166
    }     req = urllib.request.Request(         base.rstrip("/") + "/v1/messages",
  • Network accessline 167
    req = urllib.request.Request(
  • Network accessline 172
    "content-type": "application/json"},     )     with urllib.request.urlopen(req, timeout=240) as r:
  • Network accessline 173
    )     with urllib.request.urlopen(req, timeout=240) as r:         resp = json.loads(r.read())
  • Network accessline 174
    with urllib.request.urlopen(req, timeout=240) as r:

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_compare.py

  • Executable scriptline 1
    Executable file
  • Network accessline 104
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Network accessline 126
    }],     }     req = urllib.request.Request(
  • Network accessline 127
    }     req = urllib.request.Request(         base.rstrip("/") + "/v1/messages",
  • Network accessline 128
    req = urllib.request.Request(
  • Network accessline 135
    },     )     with urllib.request.urlopen(req, timeout=180) as r:
  • Network accessline 136
    )     with urllib.request.urlopen(req, timeout=180) as r:         resp = json.loads(r.read())
  • Network accessline 137
    with urllib.request.urlopen(req, timeout=180) as r:

ResearchStudio-Reel/skills/paper2poster/html2pptx/scripts/vision_eval_harness.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/references/apply_theme.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/references/audio_narration.md

  • Access to secretsline 61
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/references/build_poster.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/references/compose_poster.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 355
    [Credential-related source omitted]
  • Access to secretsline 358
    [Credential-related source omitted]
  • Access to secretsline 457
    [Credential-related source omitted]
  • Access to secretsline 535
    [Credential-related source omitted]
  • Access to secretsline 629
    [Credential-related source omitted]
  • Access to secretsline 631
    [Credential-related source omitted]
  • Access to secretsline 642
    [Credential-related source omitted]
  • Access to secretsline 647
    [Credential-related source omitted]
  • Access to secretsline 677
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/references/fit_logos.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/references/staged_fill.md

  • Network accessline 284
    - Inject after Takeaway (per the SKILL.md custom-section table). - `Necessary` reads as a short link list, e.g., `Code: github.com/user/repo · Paper: arxiv.org/pdf/1706.03762 · Project: project.io`. Strip the `https://` prefix for compactne
  • Network accessline 285
    - `Necessary` reads as a short link list, e.g., `Code: github.com/user/repo · Paper: arxiv.org/pdf/1706.03762 · Project: project.io`. Strip the `https://` prefix for compactness; render each as a `<a href="...">` link.

ResearchStudio-Reel/skills/paper2poster/references/template_substitution.md

  • Network accessline 47
    | `{{VENUE_TAG}}` | Short badge label used by landscape `v5` and Portrait `pv1`–`pv5`, normally `POSTER`. Replace only when the composed header contains it. | | `{{VENUE_LOGO}}` | Optional conference logo used by landscape `v1`–`v4`. Set to
  • Network accessline 48
    | `{{VENUE_LOGO}}` | Optional conference logo used by landscape `v1`–`v4`. Set to `assets/logos/_venue.png` only when that file exists; otherwise leave empty so the text venue fallback renders. | | `{{VENUE_LINK}}` | Link used by landscape 
  • Network accessline 49
    | `{{VENUE_LINK}}` | Link used by landscape `v5` and Portrait `pv1`–`pv5`. **Priority order:** (1) `metadata.json` `code_url` if non-empty; (2) else `metadata.json` `paper_url` (which for arXiv papers is `https://arxiv.org/pdf/<arxiv_id>`);
  • Network accessline 188
    | `{{QR_PAPER}}` / `{{QR_CODE}}` | the QR PNG paths (as above) — every variant keeps the `.tq` / `.qr-img` tiles. | | `{{CONTACT}}` | corresponding-author email (as above) — used by `aside` / `contact`. | | `{{URL_PAPER}}` / `{{URL_CODE}}` 
  • Network accessline 190
    | `{{URL_PAPER}}` / `{{URL_CODE}}` / `{{URL_PROJECT}}` | **Display-only short URL text** for the link-listing variants (`directory`, `chips`, `hero`, `banner`, `twin`). Source from `metadata.json` `paper_url` / `code_url` / `project_url`, *

ResearchStudio-Reel/skills/paper2poster/scripts/check_poster.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/scripts/generate_audio.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 86
    [Credential-related source omitted]
  • Network accessline 88
    )     cfg = {         "endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com",
  • Network accessline 89
    cfg = {         "endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com",         "deployment": "tts",
  • Network accessline 90
    "endpoint": "https://67786-mpmfvjz3-swedencentral.cognitiveservices.azure.com",
  • Access to secretsline 93
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/scripts/render_poster.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 2103
    [Credential-related source omitted]
  • Access to secretsline 2392
    [Credential-related source omitted]
  • Access to secretsline 2447
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/scripts/select_figures.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2poster/scripts/utils/__init__.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/autofit.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/canvas.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/cli_common.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/column_pack.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 33
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/scripts/utils/deliverables.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/figure_semantics.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/font_fidelity.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/polish.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 66
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/scripts/utils/preflight.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/render.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/slack.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 117
    [Credential-related source omitted]
  • Access to secretsline 146
    [Credential-related source omitted]
  • Access to secretsline 174
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2poster/scripts/utils/textutil.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2poster/scripts/utils/verify_final.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 74
    [Credential-related source omitted]

ResearchStudio-Reel/skills/paper2reel/README.md

  • Network accessline 60
    Open `http://127.0.0.1:8900/reel.html`. Do not use `python -m http.server` for validation; video seek requires HTTP Range support.

ResearchStudio-Reel/skills/paper2reel/SKILL.md

  • Network accessline 298
    Open `http://127.0.0.1:8900/reel.html`. The preview is not considered faithful unless video requests return `206 Partial Content` for Range requests.

ResearchStudio-Reel/skills/paper2reel/scripts/build_poster_slides_view.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 46
    LOCAL_OPEN_RUNTIME = "srcdoc-poster.v1" MATHJAX_VERSION = "3.2.2" MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz"
  • Network accessline 47
    MATHJAX_VERSION = "3.2.2" MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz" REEL_ROOT = Path(__file__).resolve().parents[3]
  • Network accessline 48
    MATHJAX_TARBALL_URL = f"https://registry.npmjs.org/mathjax/-/mathjax-{MATHJAX_VERSION}.tgz"
  • Network accessline 67
    (         re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css"
  • Network accessline 68
    re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css"         ),
  • Network accessline 69
    r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.css"
  • Network accessline 73
    (         re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js"
  • Network accessline 74
    re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js"         ),
  • Network accessline 75
    r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/dist/katex\.min\.js"
  • Network accessline 79
    (         re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/"
  • Network accessline 80
    re.compile(             r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/"             r"dist/contrib/auto-render\.min\.js"
  • Network accessline 81
    r"https://cdn\.jsdelivr\.net/npm/katex@[^/\"']+/"
  • Network accessline 1823
    print(f"[paper2reel] downloading MathJax {MATHJAX_VERSION} for local-open bundles")         try:             urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball)
  • Network accessline 1824
    try:             urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball)         except Exception as exc:
  • Network accessline 1825
    urllib.request.urlretrieve(MATHJAX_TARBALL_URL, tarball)

ResearchStudio-Reel/skills/paper2reel/scripts/build_reel_from_paper.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2reel/scripts/build_section_media_from_timeline.py

  • Executable scriptline 1
    #!/usr/bin/env python3

ResearchStudio-Reel/skills/paper2reel/scripts/check_reel_package.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 1281
    checked += 1         url = f"{base_url}/{candidate}"         request = urllib.request.Request(url, headers={"Range": "bytes=0-99"})
  • Network accessline 1282
    url = f"{base_url}/{candidate}"         request = urllib.request.Request(url, headers={"Range": "bytes=0-99"})         try:
  • Network accessline 1283
    request = urllib.request.Request(url, headers={"Range": "bytes=0-99"})
  • Network accessline 1284
    try:             with urllib.request.urlopen(request, timeout=5) as response:                 status = int(response.status)
  • Network accessline 1285
    with urllib.request.urlopen(request, timeout=5) as response:
  • Network accessline 1327
    for kind in ARCHIVE_ORDER:         url = f"{base_url}/__download__/{kind}"         request = urllib.request.Request(url, method="HEAD")
  • Network accessline 1328
    url = f"{base_url}/__download__/{kind}"         request = urllib.request.Request(url, method="HEAD")         try:
  • Network accessline 1329
    request = urllib.request.Request(url, method="HEAD")
  • Network accessline 1330
    try:             with urllib.request.urlopen(request, timeout=5) as response:                 status = int(response.status)
  • Network accessline 1331
    with urllib.request.urlopen(request, timeout=5) as response:
  • Network accessline 2558
    thread = threading.Thread(target=httpd.serve_forever, daemon=True)         thread.start()         base_url = f"http://127.0.0.1:{port}"
  • Network accessline 2559
    thread.start()         base_url = f"http://127.0.0.1:{port}"         url = f"{base_url}/reel.html"
  • Network accessline 2560
    base_url = f"http://127.0.0.1:{port}"

ResearchStudio-Reel/skills/paper2reel/scripts/reel_downloads.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 25
    VIDEO_README_TEXT = (     "Convert edited PPTX file into video using the PPTX2Video project. "     "Project link: https://github.com/ai-nuts/pptx2video"
  • Network accessline 26
    "Convert edited PPTX file into video using the PPTX2Video project. "     "Project link: https://github.com/ai-nuts/pptx2video" )
  • Network accessline 27
    "Project link: https://github.com/ai-nuts/pptx2video"

ResearchStudio-Reel/skills/paper2reel/scripts/serve_reel.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 222
    host, port = httpd.server_address         print(f"[serve_reel] serving {bundle_dir}")         print(f"[serve_reel] http://{host}:{port}/reel.html")
  • Network accessline 223
    print(f"[serve_reel] serving {bundle_dir}")         print(f"[serve_reel] http://{host}:{port}/reel.html")         print("[serve_reel] Range support enabled for video seeking")
  • Network accessline 224
    print(f"[serve_reel] http://{host}:{port}/reel.html")

ResearchStudio-Reel/skills/paper2video/README.md

  • Network accessline 58
    npx skills add ai-nuts/pptx2video --skill pptx2video python -m pip install \   'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
  • Network accessline 59
    python -m pip install    'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
  • Network accessline 60
    'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'

ResearchStudio-Reel/skills/paper2video/SKILL.md

  • Broad permissionsline 1
    Bash(*), Read, Write, Edit, Grep, Glob, AskUserQuestion, WebFetch, WebSearch
  • Network accessline 126
    python -m pip install \   'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
  • Network accessline 127
    'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'

ResearchStudio-Reel/skills/paper2video/references/pptx2video.md

  • Network accessline 3
    Paper2Video delegates every render to the independently maintained [`ai-nuts/pptx2video`](https://github.com/ai-nuts/pptx2video) skill and its
  • Network accessline 4
    [`ai-nuts/pptx2video`](https://github.com/ai-nuts/pptx2video) skill and its
  • Network accessline 14
    npx skills add ai-nuts/pptx2video --skill pptx2video python -m pip install \   'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
  • Network accessline 15
    python -m pip install    'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'
  • Network accessline 16
    'pptx2video[svg] @ git+https://github.com/ai-nuts/pptx2video.git'

ResearchStudio-Reel/skills/paper2video/scripts/ppt_options_contract.py

  • Executable scriptline 1
    Executable file

ResearchStudio-Reel/skills/paper2video/scripts/ppt_stage_validator.py

  • Executable scriptline 1
    Executable file
  • Network accessline 297
    P_NS = "http://schemas.openxmlformats.org/presentationml/2006/main"

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 26 facts
Signal confidence: 474 facts

and 424 more

Only the first 500 facts are listed.

Works with

  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

microsoft/ResearchStudio: #355 on hotskills, 3.5k stars

[![microsoft/ResearchStudio on hotskills](https://hotskills.dev/badge/microsoft-researchstudio.svg)](https://hotskills.dev/skill/microsoft-researchstudio/)