The Problem Medical researchers spend hours stitching together literature searches, protocol outlines, data‑analysis pipelines, and manuscript drafts. The manual hand‑off between these stages is error‑prone and repeats the same domain logic across teams.
What This Does The repository bundles 500 + “agent skills” that encode that domain logic as small, runnable Python utilities. Each skill lives under a self‑contained folder (e.g., awesome-med-research-skills/Academic Writing/conference-abstract-writer/) and ships a requirements.txt that pins the needed libraries (PyTorch, Transformers, vector stores, etc.). Core capabilities include:
- Evidence Insight – automated search‑strategy builders, pre‑print surveillance, ontology mapping.
- Protocol Design – study‑type identification, trial‑registry lookup.
- Data Analysis – statistical‑test wrappers, result‑structuring helpers.
- Academic Writing – abstract generators, figure‑legend writers, grant‑aim drafts, consistency checkers.
Running a skill’s scripts/main.py consumes input (often a JSON or plain‑text prompt), calls a small internal pipeline, and returns a ready‑to‑paste text block or a structured artefact.
How It Is Wired Execution always starts at a main.py entry point. For example, awesome-med-research-skills/Academic Writing/conference-abstract-writer/scripts/main.py defines main (line 99) which:
- Parses CLI args →
parse_args(≈335 calls). - Calls
generate(≈17 calls) which invokes a language model (the only model‑for‑inference call in the repo). - Writes the result (
write_text) and may invoke an external command to format the abstract.
The internal call graph shows main reaching 1 083 functions and touching 340 downstream calls, making it a high‑blast‑radius node. Similar patterns appear in figure-legend-writer/scripts/main.py (5 functions, 62 downstream calls, also hits a model).
Common utility modules such as scientific-skills/Other/ppt/framework/converter/* are the most connected Python pieces (e.g., converter/__init__ imports 6 others, instability 1) but they are unrelated to the medical‑skill pipeline; they illustrate where future refactoring could reduce cognitive load.
Every skill that writes files or makes network calls does so through a handful of helper functions (write_text, read_text, make_request, search). The static analysis recorded 186 functions that touch the filesystem, 126 that perform outbound HTTP, and 4 that invoke a model. No circular import cycles were found, easing safe module replacement.
How To Use It
# 1. Clone the repo
git clone https://github.com/moses-y/medical-research-skills
cd medical-research-skills
# 2. Create a venv (optional but recommended)
python -m venv .venv && source .venv/bin/activate
# 3. Install a skill’s dependencies
pip install -r awesome-med-research-skills/Academic\ Writing/conference-abstract-writer/requirements.txt
# 4. Run the skill
python awesome-med-research-skills/Academic\ Writing/conference-abstract-writer/scripts/main.py \
--input prompt.txt --output abstract.txt
Replace the path with any other skill folder (e.g., figure-legend-writer, grant-specific-aims-writer). Each main.py exposes its own CLI flags; the --help flag lists them. No top‑level build system (Makefile, Dockerfile) is present, so the above pip‑based workflow is the only documented path.
Real‑World Use A pharmacology team integrates the grant‑specific‑aims‑writer into their CI pipeline. The pipeline checks out the repo, runs pip install -r …/grant-specific-aims-writer/requirements.txt, feeds the study description to scripts/main.py, and commits the generated Specific Aims section back to the grant draft repository. Because the skill writes a single file and only calls the model once, the impact on the CI run is predictable and easy to audit.
Code Health & Issues
- High – Committed
node_modules(3378 files) – remove, add to.gitignore, reinstall. - Medium – No Dependabot/Renovate – add
.github/dependabot.yml. - Medium – No dependency‑scan step in CI – incorporate
dependency-review-actionorosv-scanner. - Medium – Test coverage low (4 test files vs 568 source files) – prioritize tests for high‑fan‑in modules (e.g.,
converter/*). - Low – Missing job timeouts in
.github/workflows/release.yml. - Low – Missing repo conventions (
.editorconfig, formatter config).
All other hygiene checks (tests present, CI enabled, license, lockfile, no committed secrets) passed.
The Bottom Line The repo delivers a ready‑made toolbox of medically‑focused AI agents, each callable via a small Python CLI and isolated by its own dependency list. It is usable today, but the codebase suffers from poor modular hygiene (large node_modules dump, sparse testing, missing automation for dependency updates). Teams that need fast, repeatable research‑writing or evidence‑gathering steps can adopt the skills immediately, while allocating effort to improve test coverage and clean up the dependency footprint.