Literature Review Agent
Ar9av/PaperOrchestra
Step 3 of the PaperOrchestra pipeline (arXiv:2604.05018). An agent skill from Ar9av/PaperOrchestra.
A skill your agent uses when the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it.
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figure --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/loops/scientific-figure .claude/skills/scientific-figure && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .claude/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figureType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figure --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/loops/scientific-figure .agents/skills/scientific-figure && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .agents/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figure --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/loops/scientific-figure .cursor/skills/scientific-figure && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .cursor/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/gaasher/Agent-Loop-Skills.git --path loops/scientific-figure--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figure --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/loops/scientific-figure .gemini/skills/scientific-figure && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .gemini/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figureInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/loops/scientific-figure .github/skills/scientific-figure && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .github/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install gaasher/Agent-Loop-Skills scientific-figure --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/gaasher/Agent-Loop-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/loops/scientific-figure .opencode/skills/scientific-figure && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "scientific-figure" agent skill from https://github.com/gaasher/Agent-Loop-Skills/tree/main/loops/scientific-figure into .opencode/skills/scientific-figure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scientific-figure", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
scientific-figureA skill your agent uses when the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it.
Scientific Figure is an agent skill from gaasher/Agent-Loop-Skills. Use when the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it. A generator drafts and renders a figure that lands a frozen communication goal; an adversarial critic critiques it hard and grades it 1-5 per axis against a fixed rubric (message, aesthetic, clarity, integrity, and a conditional domain-completeness axis), aggregates to 0-100, and decides pass; the generator revises against the critic's findings until the grade clears a threshold or…
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files (for example `examples/run.example.yaml`, `roles/critic.md` and `roles/generator.md`). Compatibility notes: Requires Python 3.9+
It sits in Research & Science, covering Data visualization, Academic paper search and Quizzes and assessments. It works with arXiv and Semantic Scholar. The repository describes itself as: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, code/SQL/prompt optimization, red-teaming) as open-standard Agent Skills… The licence is MIT.
Read from SKILL.md and the folder at commit f1169e6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Python 3.9+
From compatibility in the SKILL.md frontmatter.
Scientific Figure loads about 3.8k tokens when it runs. Until then it costs about 239 tokens; SKILL.md has 1,608 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from gaasher/Agent-Loop-Skills at commit f1169e6, republished under its MIT licence (© gaasher). 1,608 words, ~3,787 tokens.
.claude/skills/scientific-figure/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.The artifact is a scientific figure (the rendered image + the plot.py that produces it). Each
iteration generates → critiques+grades: a generator authors a rendering script and renders the
figure to land the frozen <goals> message; an adversarial critic grades it 0-100 against the fixed
rubrics/rubric.md and decides pass; the generator then revises against the critic's concrete
findings. The loop runs until the grade clears <pass_threshold> or the budget is hit. All work
happens on copies inside a sandbox; the user's data is copied in read-only and never edited.
The cast (all in this folder):
roles/generator.md — drafts/revises plot.py, renders figure.png by running <render_cmd>,
optionally grounds domain content via <lit>; writes generation_notes.md.roles/critic.md — the adversarial grader: re-derives each rubric axis independently, spot-checks the
figure's numbers against the data, optionally lit-checks domain completeness, and emits
schemas/critique.schema.json (the grade + pass + executable findings).rubrics/rubric.md — the fixed grading rubric (the critic never edits it).schemas/critique.schema.json — the one validated output.Spawn-or-degrade. On Claude Code, spawn the generator then the critic as real Agent subagents
(sequential — the critic needs the generator's figure); otherwise adopt each role inline. You are the
orchestrator.
The critic both critiques and grades, which under loop-termination pressure invites inflation and a
generator that games the rubric. roles/critic.md + rubrics/rubric.md counter this: the critic (1)
applies a fixed rubric it never edits, (2) re-derives each axis from the rendered figure + data +
frozen <goals> rather than echoing the generator, (3) recomputes a sample of the figure's numbers
itself instead of trusting "it's fixed", (4) holds a fixed, anchored bar with no credit for effort
or elapsed iterations, and (5) applies hard gates (a figure value that contradicts the data, a
misleading axis, or fabricated data presented as real fails the figure regardless of the average). The
generator optimizes the concrete findings; the critic grades holistically against the frozen goal — so
"address every finding" does not mechanically buy a pass. Because the two are separate agents, the critic
never just rubber-stamps the generator's intent.
Use when scientific data (or a prompt describing it) exists and the user wants a polished figure pushed past a quality bar with adversarial critique and a graded rubric. Default: run the full generate→critique loop below. Escape hatch: if the user only wants one figure + a critique (no iterating), run one generate + critic pass and stop. Not for writing a paper or doing the analysis, and not for retouching an already-final image.
Resolve bindings interactively. If loop.run.yaml exists in the working dir, load it, confirm the
values in one line, and skip to the loop. Otherwise: on Claude Code (the AskUserQuestion tool is
available) infer a likely value for each binding and present it as the recommended option; on other hosts
ask each as a quoted plain-text prompt. Then write loop.run.yaml (format: examples/run.example.yaml)
and confirm every value — including the distilled <goals>, whether a journal spec applies, and the
live/degraded literature tier — before creating any other files.
| binding | meaning | default | how to infer |
|---|---|---|---|
<brief> | the prompt describing the figure to create + the message/claim it must communicate (and, if data exists, what the data represents) | — | the user's request; if pasted as prose, save to <sandbox_root>/brief.md |
<data_paths> | data file(s) the figure visualizes (CSV/TSV/parquet/JSON…); empty → an illustrative/schematic figure (the integrity axis then checks internal consistency, not data fidelity) | — | scan the working dir near the request; may be null |
<goals> | the figure's communication objective(s), 1-3 bullets — frozen; the critic grades against these and the generator may never abandon them | — | distill from <brief> at setup, confirm with the user in one line |
<render_cmd> | command/interpreter that runs the plot script the generator writes (it appends iter<N>/plot.py), in the user's env — the skill ships no plotting deps, the same contract as scientific-writer's <plot_command> | python3 | pyproject.toml/.venv/README; e.g. uv run python or a venv python |
<style> | optional aesthetic/style guide or a named target journal/venue — when a journal is named, its figure spec is fetched at setup (see below) and both roles conform to / grade against it | — | ask the user; check <brief> for a venue |
<pass_threshold> | overall_score (0-100) the critic must reach (and no hard gate) to stop | 85 | a polished, publication-ready figure without demanding perfection |
<budget> | max iterations | 6 | — |
<patience> | stop after this many consecutive no-improvement iterations | 2 | — |
<sandbox_root> | where the plot scripts, figures, critiques, and the ledger live | ./sandbox | — |
The domain axis is not a binding — the critic auto-detects whether the figure makes an external domain claim (a named pathway, gene set, canonical benchmark, taxonomy, mechanism, or a literature- established number) and activates the domain axis itself; no user toggle.
Literature toolchain (optional, S2 + arXiv only). Domain grounding goes through the sibling
literature-search skill — resolve <lit_skill_dir> (it installs as a sibling, e.g.
~/.claude/skills/literature-search/), <lit_py> = python3, and <lit> = <lit_skill_dir>/tools/lit_search.py; append --cache-dir <sandbox_root>/literature/.cache after a
subcommand to reuse the cache. Use only the keyless S2 + arXiv core (<lit> search default
--source s2, snippet, cite, fulltext); do not use --source openalex|both, ask, or
bgpt. Confirm <lit> --help works at setup; if the skill is absent, degrade all retrieval to
WebSearch/WebFetch. Record the tier (presence only) in loop.run.yaml.
Reuse what you've already pulled — don't re-query every iteration. Every retrieval is cached under
--cache-dir <sandbox_root>/literature/.cache, and each role appends the facts it establishes (claim →
number/element → source) to <sandbox_root>/literature/sources.md. Both roles consult that record (and
the cache) first and only fetch papers/snippets not already on hand; a value a prior iteration already
verified is re-checked by re-reading its recorded source, not by re-searching from scratch. The point of
the literature step is correctness, not call volume — once a paper is pulled, work from it.
Journal style sheets (separate path, via web search). When <style> names a journal/venue, fetch its
figure guidelines once at setup via WebSearch/WebFetch → <sandbox_root>/style/journal_spec.md
(column width in mm, minimum font size, fonts, line weights, color mode, panel-label convention, file
requirements). Both roles read this single cached spec — the generator conforms, the critic anchors
its aesthetic/clarity axes to it — so the two never grade against divergent specs. This is distinct from
<lit>: web search finds the journal's style spec; <lit> (S2/arXiv) checks domain content.
Environment. The generator renders figures by running <render_cmd> in the user's own
environment — that code needs third-party deps (matplotlib, pandas, …), so the skill ships none and
never installs them; it shells out to <render_cmd> and reads the rendered figure.png. PNG is rendered
so the critic can view the image (an SVG would be read as XML). The deliverable is figure.png plus its
plot.py — the reproducible source the user re-renders to any vector format. Any helper code the skill
writes stays stdlib-only.
Initialise the sandbox once bindings are confirmed (copy the data in read-only; never edit originals):
<sandbox_root>/
├── loop.run.yaml ← resolved bindings + <goals> + literature_tiers
├── brief.md ← <brief> (if pasted as prose)
├── ledger.tsv ← header only (see Ledger)
├── data/ ← read-only COPY of <data_paths> (omit if no data)
├── style/journal_spec.md ← fetched journal figure spec (omit if no journal named)
├── literature/.cache/ ← lit_search on-disk cache
└── iter1/ ← created by the generator
├── plot.py
├── figure.png
├── generation_notes.md
└── critique.json<N> starts at 1. Unlike loops that grade an existing baseline, the generator runs first every
iteration (there is no input figure to critique) — iteration 1 drafts from scratch, iterations 2+ revise.
Re-grade fresh every iteration: the score comes only from a new critique of the current figure, never
carried over. Surface-only changes won't move it.
Copy this checklist and tick items off:
generator (roles/generator.md) with <brief>, <data_paths>, <goals>,
<style> (+ style/journal_spec.md), <render_cmd>, <lit>, and — on iter 2+ — iter<N-1>/critique.json.
It writes/edits iter<N>/plot.py, runs <render_cmd> iter<N>/plot.py inside the sandbox to render
iter<N>/figure.png, grounds any domain content via <lit>, and writes iter<N>/generation_notes.md.critic (roles/critic.md) over iter<N>/figure.png +
the data + <goals>, applying rubrics/rubric.md: it re-derives each axis 1-5 independently,
spot-checks the figure's numbers against the data, optionally lit-checks domain completeness, computes
overall_score = 100 × Σscore / (5 × n_axes), applies hard gates → pass, and writes
iter<N>/critique.json (validates against schemas/critique.schema.json).ledger.tsv row (see Ledger).critique.pass == true, or N == <budget>, or overall_score flat for
<patience> iterations → stop (see Stops).N = N + 1 and repeat (back to Generate, which now revises against the critique).A critique looks like (abridged; full shape in schemas/critique.schema.json):
{"iteration": 2, "summary": "Needs revision: honest now, but the MAPK panel omits ERK and the y-axis lacks units.",
"axes": {"message": {"score": 4, "justification": "Up-regulation reads clearly."},
"aesthetic": {"score": 3, "justification": "Palette not colorblind-safe (red/green)."},
"clarity": {"score": 4, "justification": "Y-axis missing units."},
"integrity": {"score": 4, "justification": "Bar heights match data/levels.csv."},
"domain": {"score": 3, "justification": "MAPK cascade missing ERK node."}},
"overall_score": 72.0, "pass": false, "gate_failures": [],
"spotchecks": [{"target": "group-B bar = 2.4", "method": "recomputed from data/levels.csv", "result": "confirmed"}],
"findings": [{"urgency": "must_fix", "action_type": "add", "area": "domain:incomplete",
"finding": "MAPK cascade panel omits ERK1/2 downstream of MEK.", "proposed_action": "Add ERK node + MEK→ERK edge.",
"target_artifact": "iter2/plot.py", "evidence": "lit snippet: canonical MAPK = RAF→MEK→ERK"}]}<sandbox_root>/ledger.tsv, tab-separated, never commas in free text:
iter overall_score pass message aesthetic clarity integrity domain top_fix generation_summary
1 52.0 no 3 2 2 4 - label axes + fix palette baseline draft
2 74.0 no 4 3 4 4 3 add missing MAPK nodes (lit) relabeled; colorblind palette; +ERK/MEK
3 88.0 yes 5 4 5 5 4 - rebalanced panels; legend off-dataUse - in the domain column when the domain axis is inactive (n_axes=4). The per-iteration
critique.json and generation_notes.md live in iter<N>/. Report the best-scoring iteration when
stopping on budget/plateau, not necessarily the last. Leave the sandbox untracked.
<sandbox_root> — data is copied in read-only at setup; the
generator's plot.py and <render_cmd> run from the sandbox; no ../ escapes.<data_paths>; with no data, the figure must read as clearly illustrative/schematic, not a fake data
plot. Domain content (genes, nodes, baselines, reported numbers) added from <lit> comes from a real
retrieval that iteration, never invented.<goals> — the generator makes the same message prettier and clearer; it never drops or
distorts the intended message to chase a higher score.<render_cmd> runs in the user's env, helper code
is stdlib-only; literature is the keyless S2 + arXiv core only. Never print or commit API keys
(keys.env stays gitignored).The loop stops on the first of:
critique.pass == true. Report the deliverable (iter<N>/figure.png + plot.py), the
score, and the trajectory.N == <budget>. Report the best-scoring iteration as the deliverable.overall_score flat for <patience> iterations. Report the best iteration + the
standing gate_failures/must_fix blockers.Always end with the deliverable (iter<N>/ path), its overall_score and pass/fail, the per-axis
scores, the score trajectory from ledger.tsv, and — if it did not pass — the standing blockers
(gate_failures + open must_fix) between the figure and the bar.
© gaasher, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files in loops/scientific-figure of gaasher/Agent-Loop-Skills.
Open the folder on GitHubat commit f1169e6
Scientific Figure next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Scientific Figure this skillgaasher/Agent-Loop-Skills | 174 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Literature Review AgentAr9av/PaperOrchestra | 677 | 1 repos | ~5.2k | Automated safety check: Pass | Custom licence | |
| Paper OrchestraAr9av/PaperOrchestra | 677 | 1 repos | ~3.5k | Automated safety check: Pass | Custom licence | |
| Exa SearchAI4Scientist/nano-scientist | 128 | 2 repos | ~1.8k | Automated safety check: Notes | None | |
| Superlearnraiyanyahya/Superlearn | 122 | — | ~6.2k | Automated safety check: Pass | MIT | |
| Local Search Fallbacktaxueseek/argo | 186 | — | ~949 | Automated safety check: Pass | MIT |
Ar9av/PaperOrchestra
Step 3 of the PaperOrchestra pipeline (arXiv:2604.05018). An agent skill from Ar9av/PaperOrchestra.
Ar9av/PaperOrchestra
Orchestrate the full PaperOrchestra (Song et al., 2026, arXiv:2604.05018) five-agent pipeline to turn unstructured research materials (idea, experimental log, LaTeX template, conference guidelines…
AI4Scientist/nano-scientist
AI-powered web search via Exa with content extraction. An agent skill from AI4Scientist/nano-scientist.
raiyanyahya/Superlearn
Build an interactive learning board on any topic. An agent skill from raiyanyahya/Superlearn.
taxueseek/argo
Zero-cost fallback for the argo search skill, wrapping 29 local engines for web, news, academic, code and reference queries when paid API quota should be saved.
neflibata-feng/MyArxiv-Agent
Conduct comprehensive, systematic literature reviews using multiple academic databases (PubMed, arXiv, bioRxiv, Semantic Scholar, etc.).
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants to evolve an ML model/program through population-based search rather than a single sequential refine loop — a generational evolution where parallel…
gaasher/Agent-Loop-Skills
A skill your agent uses when the user has a known, already-observed anomaly in their data — a metric spike or drop, an outlier, an unexpected number — and wants its root cause diagnosed, not guessed.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user has concrete failing cases in code or a guardrail/classifier/filter/prompt/API they own — a red-team failure catalogue OR a CI/CD test-failure report (failing…
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants an iterative, self-checking exploratory analysis of a dataset — surfacing findings that are each verified by re-running the computation, not asserted.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants to generate and literature-vet a pool of novel, testable research hypotheses for a question or domain.
gaasher/Agent-Loop-Skills
A skill your agent uses when the user wants the LLM to do its own ML research: a fully-autonomous loop that hacks the training code, runs it, and keeps changes that lower a single scalar metric (e.g.
Works with
Categories
A skill your agent uses when the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it. Scientific Figure is an agent skill from gaasher/Agent-Loop-Skills. Use when the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it.
Scientific Figure fits situations like: the user has scientific data (or a prompt alluding to scientific data) and wants a publication-quality figure made from it; tasks that involve Data visualization; tasks that involve Academic paper search.
Run `npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a claude-code`. Or copy the skill folder (loops/scientific-figure in gaasher/Agent-Loop-Skills) into .claude/skills/scientific-figure in your project. Claude Code loads it when a task matches its description.
Run `npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a codex`. Or copy the skill folder (loops/scientific-figure in gaasher/Agent-Loop-Skills) into .agents/skills/scientific-figure in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gaasher/Agent-Loop-Skills --skill scientific-figure -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scientific-figure, .gemini/skills/scientific-figure, .github/skills/scientific-figure and .opencode/skills/scientific-figure in your project.
Going by SKILL.md and its folder, Scientific Figure needs the command-line tools its instructions call (uv). Our summary lists: Python 3. Compatibility (from SKILL.md): Requires Python 3.9+.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Scientific Figure is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Scientific Figure: Literature Review Agent (Ar9av/PaperOrchestra, 677 stars), Paper Orchestra (Ar9av/PaperOrchestra, 677 stars), Exa Search (AI4Scientist/nano-scientist, 128 stars) and Superlearn (raiyanyahya/Superlearn, 122 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
gaasher (a GitHub user) maintains it in gaasher/Agent-Loop-Skills, which has 174 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on June 30, 2026.
Source: gaasher/Agent-Loop-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.