Markdown Article Formatter
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
Run OmniScientist end to end inside this harness, with no API key.
$ npx skills add Omni-Scientist/OmniScientist --skill omnisci -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Omni-Scientist/OmniScientist omnisci --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/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skill/omnisci .claude/skills/omnisci && 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 "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .claude/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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/Omni-Scientist/OmniScientist/tree/main/skill/omnisciType 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 Omni-Scientist/OmniScientist --skill omnisci -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Omni-Scientist/OmniScientist omnisci --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skill/omnisci .agents/skills/omnisci && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .agents/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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 Omni-Scientist/OmniScientist --skill omnisci -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Omni-Scientist/OmniScientist omnisci --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skill/omnisci .cursor/skills/omnisci && 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 "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .cursor/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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/Omni-Scientist/OmniScientist.git --path skill/omnisci--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 Omni-Scientist/OmniScientist --skill omnisci -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Omni-Scientist/OmniScientist omnisci --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skill/omnisci .gemini/skills/omnisci && 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 "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .gemini/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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 Omni-Scientist/OmniScientist omnisciInstalls 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 Omni-Scientist/OmniScientist --skill omnisci -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .github/skills && cp -r skills-src/skill/omnisci .github/skills/omnisci && 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 "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .github/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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 Omni-Scientist/OmniScientist --skill omnisci -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Omni-Scientist/OmniScientist omnisci --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Omni-Scientist/OmniScientist.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skill/omnisci .opencode/skills/omnisci && 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 "omnisci" agent skill from https://github.com/Omni-Scientist/OmniScientist/tree/main/skill/omnisci into .opencode/skills/omnisci/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnisci", 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.
omnisciRun OmniScientist end to end inside this harness, with no API key.
Omnisci is an agent skill from Omni-Scientist/OmniScientist. Run OmniScientist end to end inside this harness, with no API key. The user gives a domain, some raw data (images, signals, audio, video, 3-D, tables, graphs) and an open research direction; YOU perceive the evidence with your own eyes, form a falsifiable hypothesis, write and run real analysis code, and produce a cited PDF paper. Use when the user types /omnisci or says things like "make a paper from these images", "run OmniScientist on this seismogram", "从这些数据做一篇论文".
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 19 other files (for example `INSTALL.md`, `bin/case_cli.py` and `bin/evidence_cli.py`).
It sits in Documents & Office. The repository describes itself as: An Omni-Modal, Omni-Discipline AI Scientist. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4f3b563. 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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Omnisci loads about 4.5k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 2,472 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 Omni-Scientist/OmniScientist at commit 4f3b563, republished under its MIT licence (© Omni-Scientist). 2,472 words, ~4,468 tokens.
.claude/skills/omnisci/SKILL.md (or your agent's skills folder). This skill also uses 17 other files; get the full folder from GitHub.You do the science yourself. The python here does only what a model must not do by hand: render raw data into something viewable, run analysis code, fetch real references, assemble LaTeX, and enforce the gates. No model API is called at any point. Your own multimodal read is the perceiver.
The CLIs ship inside this skill. Set this once, at the start of the session, and use it in every command:
export OMNISCI=~/.claude/skills/omnisci/bin # or wherever this skill is installed
python3 $OMNISCI/evidence_cli.py --help # confirm before going further--task takes a case directory (absolute paths always work), or a bare name that resolves under
$OMNISCI_CASES or the engine's bundled examples/. Every other path you pass (a script, a figure, a .tex,
a sections.json) is resolved relative to the case directory.
Every command echoes the case it resolved. Check it on your first call. A bare name can land on a bundled
example that already holds someone else's recorded runs, and the gate would then happily ground your paper's
numbers against their ledger. When the case is the user's own folder, pass its absolute path.
A case is a directory holding a series.json. Bundled demos have one. A real user almost never does: they
have a folder of images, recordings or volumes, and a question. Build the case first, from their folder:
python3 $OMNISCI/case_cli.py inspect --dir ~/their_folder # what is in there, what modality, what labels
python3 $OMNISCI/case_cli.py init --dir ~/their_folder \
--role "a histopathologist reading H&E-stained sections" \
--subject "a tissue microscopy field" \
--direction "Find a concrete, testable question these fields can answer, choose the method yourself, and run real code to test it."Before initialising a new case, check whether one already exists nearby: users often point at the data/
subfolder of a case whose series.json sits one level up (list the parent of the folder they named; the CLIs
also search upward, adopting a parent only when its series.json actually lists files under that folder).
inspect never writes; run it first and tell the user what you found. init writes series.json into their
folder and nothing else (use --out to build the case elsewhere and symlink the data instead). Files are
routed to a modality by extension, and each item's label is taken from its containing folder, so
tumour/a.png is labelled tumour; pass --label-from none when the folders mean nothing.
The three fields are yours to write, and --direction is the one that matters: state the data and the goal,
and do not prescribe the method. "Compare mean intensity between the two groups" produces a worse paper
than "find a concrete, testable question this data can answer". Ask the user for the framing if their request
is too thin to write it, then show them the direction you wrote before running.
gate_cli.py record, which banks a script's stdout. This includes setup values: if you write that the green
class covers 458 to 532 nm, that is a claim about the data and your script must print it. Never carry a
number you computed in your head. gate_cli.py check blocks the paper otherwise.lit_cli.py search and only from there.
Prefer hits that carry a DOI, and discard the off-topic ones a broad query drags in.Read the case's series.json first. Field names vary: the open research brief may be called direction,
request or idea_hints, and role / subject / property describe the scientist you are playing. There is
no fixed schema, so read what is actually there.
Then ask what this case unlocks, and read the returned schema rather than copying the shapes below, since arguments differ per tool:
python3 $OMNISCI/evidence_cli.py tools --task <case>look_at_image takes files (an array). look_at_signal, look_at_audio, look_at_video, look_at_3d and
look_at_trajectory each take file, a single path, one call per item. analyze_* tools return numbers
immediately and involve no vision at all; use them freely, they cost nothing.
python3 $OMNISCI/evidence_cli.py run --task <case> --tool look_at_signal --args '{"file": "data/x.npy", "question": "..."}'A look_at_* call returns status: needs_vision with images. Read each PNG yourself, then record what you
saw:
python3 $OMNISCI/evidence_cli.py ingest --task <case> --call <id> --answers '{"1": "what you actually saw"}'The key in --answers is the id inside that call's own pending list, which starts at 1 for every call. It
is not the call id and not a running total.
Ingest immediately after each call rather than batching at the end; a call left pending is indistinguishable
from never having looked. The budget is 12 images, not 12 calls: look_at_image with three files spends
three of them, while one look_at_3d spends one even though the render it returns holds six panels. Every call
prints used=n/12, so watch it. Raise it with --budget on run if the case needs more, and spend it on
items you chose for a reason.
This is the whole point of host mode. A non-image modality is rendered to a PNG by python first, and you read that PNG the same way. Describe what is in the picture, not what you expect; if a render looks blank or degenerate, say so rather than inventing structure.
State one falsifiable question that follows from what you saw and from the case's brief. Choose the method yourself. In an interactive session, tell the user the question before spending their time on it; in a non-interactive run, put it at the top of your final report.
Write a python script under <case>/host/analysis/, print every decisive number as name = value, and save
figures under <case>/host/figures/. The script runs with cwd set to the case directory, so resolve paths
from __file__ if you need to be safe.
Figure shape contract: a single-column figure prints WIDE and SHORT, height about 0.43x its width (think
10:4.3); a figure meant to span both columns doubles the width at the SAME height, never the height. A
sparse chart (a handful of bars or points) gets a smaller height, not a bigger canvas, and two half-empty
plots belong in one multi-panel row rather than two figures. Compile lint reports fig_aspect red on
anything taller than these bands (col 0.58, wide 0.30 of the width).
Check every figure with your own eyes before compiling: no clipped or colliding labels (a colorbar label printed over an axis label is a real failure seen in the wild), and never rainbow colormaps (viridis/plasma/jet); colour by a single-hue sequential ramp or a few discrete colours.
Author figures at their FINAL printed size, not on a giant canvas: a single column prints ~3.4in wide
(figsize about (3.4, 1.5), fonts 8-9pt), a both-columns figure ~7in. A 2000px canvas squeezed into one
column shrinks its text several-fold and lint reports fig_print_size red. Include with
width=\linewidth, and give side-by-side panels a both-columns figure rather than cramming them into one
column.
Then:
python3 -u $OMNISCI/gate_cli.py record --task <case> --script host/analysis/<name>.pyPrint more than you think you need: every constant, window, threshold and count that will appear in the prose.
Output is streamed as the script runs, so progress lines are useful, and it is banked verbatim unless it passes
2 million characters, at which point the middle is dropped and you are warned. There is no default timeout; set
--timeout <seconds> if you want one.
Read your own figures afterwards to confirm they are not broken. Report a null result as a null result; a paper that honestly resolves nothing is acceptable, a paper that dresses a null as a discovery is not.
python3 $OMNISCI/lit_cli.py search --query "<specific terms from your subject>" --n 10 # explore
python3 $OMNISCI/lit_cli.py search --doi 10.1038/s41597-022-01721-8 # pin one you decided on
python3 $OMNISCI/lit_cli.py bib --task <case> --picks picks.jsonA paper needs at least 15 references, and 15 to 25 is the normal range. One search does not get you there:
its recall covers one subtopic, so run several, one per angle. For a typical study that means the dataset or
benchmark you used, the existing methods for the task itself, the metric or statistical machinery you rely on,
and the field each control task belongs to. Concatenate every hit you want into one picks.json. The compile
step counts the references actually printed in the PDF and reports refs_count red below 15; that is a label,
not a compile error, but a thin bibliography makes the related-work discussion visibly weak.
--n is how many hits you get back in total. Free-text recall is not stable: the same query can return a
paper on one call and not the next, so once you have chosen a reference, re-fetch it with --doi and build
picks.json from those. picks.json is a JSON list of hit objects exactly as search printed them, one
array holding every reference you want; each search call prints its own array, so concatenate them yourself
rather than expecting the tool to accumulate.
search does not return bib keys, it returns papers; the keys are minted by bib, so run bib first and cite
the keys it prints. A \cite to any key outside the bib is stripped at assembly, so a hallucinated key
silently loses its citation.
Before drafting any prose, print the contract selected from the case's field or explicit style:
python3 $OMNISCI/paper_cli.py contract --task <case>The case's resolved style is binding. If the user explicitly requests another venue style, first set the top-level
style field in series.json to earth_space, cs_ml, biomed, physics, or chem, then rerun the command.
Use contract --style ... only to preview an alternative; compilation rejects a _style that disagrees with the case.
Treat that JSON as the writing schema, not as optional advice:
_style, _order, and _lead_section exactly into sections.json. Do not rename a canonical section
(for example, do not substitute Analysis for Methods) or omit the concluding section.ordered_paragraph_jobs entry to the recorded facts and real references it needs,
then expand the jobs in order. Emit one substantive paragraph per job and separate adjacent paragraphs with
a blank line (\n\n). Do not print the job labels or the outline itself in the paper.citations to true must cite at least one key from the current verified
references.bib; compilation rejects missing and unknown keys rather than silently producing uncited prior work.words and paragraphs ranges. The Abstract is deliberately one paragraph; a body
section is not. Never collapse several jobs into one long paragraph and never fake compliance with one-sentence
fragments.{"_style": "earth_space",
"_order": ["Introduction", "Data", "Methods", "Results", "Discussion", "Conclusions"],
"_lead_section": "Results",
"_figures": [{"file": "host/figures/f.png", "caption": "..."}],
"_results_table": "\\begin{table}[H]\\centering ... \\end{table}",
"ABSTRACT": "...", "Introduction": "...", "Results": "..."}Figures interleave into _lead_section and are numbered in the order you list them. Write your own
Figure~\ref{fig:fN} inside _lead_section: a reference from any other section does not count, and the
writing-contract gate rejects a listed figure that is not referenced there.
Tables go in _results_table and nowhere else. It is inserted as raw LaTeX after the lead section's first
paragraph. A tabular written into ordinary section prose gets its & and _ escaped and will not compile.
_results_table must contain exactly one complete table environment and no document or section commands.
Your prose is sanitised on the way in: _ % & # are escaped, a bare ^ becomes a literal, em-dashes are
removed, and the writing-contract gate rejects an unpaired $ before the sanitizer could truncate the section.
So write cm$^{-1}$, not cm^-1, and check your math delimiters pair up. Outside supported math and list
environments, keep LaTeX to citations, references, and simple text emphasis.
Hand-writing a large JSON file rarely survives the escaping; generate sections.json with a small python script
and json.dump, then compile:
python3 $OMNISCI/paper_cli.py compile --task <case> --sections host/sections.json --title "<title>"Compilation validates the writing contract before LaTeX assembly. If it reports writing contract failed, rewrite
the named sections from their ordered jobs and compile again. Do not bypass the error by adding empty lines: only
paragraph blocks with substantial prose count.
A successful compile writes, under host/: paper.pdf, paper.tex, paper_overleaf.zip (source, figures and
bib, the deliverable when tectonic is missing and the status comes back tex_only), paper.manifest.json
(hash-bound record of inputs and outputs), one PNG per page under paper_review/, and paper.lint.json. The
JSON it prints ends with a lint object, the engine's acceptance report: printed reference count (floor 15),
result-number density per paragraph (at most 3), table rules, overfull boxes, missing glyphs, figure fonts and
colours, stripper wreckage in the abstract, and more. lint.red lists what failed with a one-line reason each.
Red items are labels, not a gate: the PDF is already on disk. Fix them before handing back when you can; a
refs_count red means going back to lit_cli.py, not rewording. Every compile starts from a clean build
directory and a failed rerun removes the prior PDF, so an old PDF can never masquerade as the new result.
python3 $OMNISCI/gate_cli.py check --task <case> --tex host/paper.texExit 2 means one of these: a perception call was left pending, or a case with perceptual evidence has no
completed perception at all (the rule is exactly one ingested call or more and zero pending; there is no
per-member coverage requirement); the paper cites a key that is not in the verified bibliography, or
references.bib changed after its DOI verification; the analysis ledger has no current successful run (a failed
run never grounds numbers, and editing a script invalidates its old run, so record again); or a number in the
prose is ungrounded. Fix an ungrounded number at the source, by printing it from the analysis and recording
again, rather than by deleting a true sentence.
What counts as a number: every numeric token, including single digits, wavelengths, window bounds, counts,
figure captions, and everything inside _results_table. Four-digit citation years and identifiers with a letter
prefix (R110104) are not results. Ranges written 200--1200 are read as two numbers. Percent and fraction forms
of the same recorded value both ground, within 2 per cent relative tolerance and only a tiny floating-point
epsilon, so a printed 0.091 covers a written 9.1 but cannot cover an unrelated small value. Write a p-value
exactly as your script printed it, 1.96e-08, not re-expressed as 1.96\times10^{-8}.
Inspect the finished PDF before showing it. Read host/paper.manifest.json and look at every image listed
under review_pages with your own eyes (you are the perceiver in this harness) to catch blank pages, clipping,
overlapping content, and broken figures. Then give the user the path, the hypothesis you tested, the decisive
numbers, the references, what the gate said, and which lint items are still red.
It verifies that every numeral in the paper appeared in some recorded run, within tolerance. It does not verify that a number is attached to the right quantity: writing "accuracy was 0.947" when 0.947 was a cosine passes. Passing the gate means nothing was invented, not that the paper is correct. That part is on you.
Present the output as a candidate paper. It is one reader, one sample, one analysis, and the Limitations belong in the paper rather than in your summary of it. Show the user the commands you ran so they can rerun any step.
© Omni-Scientist, 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 17 other files in skill/omnisci of Omni-Scientist/OmniScientist.
Open the folder on GitHubat commit 4f3b563
Omnisci 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 |
|---|---|---|---|---|---|---|
| Omnisci this skillOmni-Scientist/OmniScientist | 166 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Markdown Article FormatterJimLiu/baoyu-skills | 27k | 6 repos | ~3.5k | Automated safety check: Pass | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| Obsidian MarkdownAtmosphere/atmosphere | 3.8k | 20 repos | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXrvdbreemen/OTGW-firmware | 207 | 33 repos | ~4.3k | Automated safety check: Pass | Proprietary | |
| Word Document Reader and WriterHKUDS/DeepTutor | 41k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 |
JimLiu/baoyu-skills
Reformats plain text or Markdown articles with frontmatter, a title, a summary, headings, bold, lists and code blocks, and saves a separate formatted copy.
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Atmosphere/atmosphere
Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax.
rvdbreemen/OTGW-firmware
A skill your agent uses whenever the user wants to create, read, edit, or manipulate Word documents (.docx files).
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
wasp-lang/wasp
Crosspost Wasp blog articles (MDX) to DEV.to and Medium. An agent skill from wasp-lang/wasp.
Omni-Scientist/OmniScientist
Run OmniScientist end to end in the OmniScientist CLI using DeepSeek V4 Flash.
Categories
Run OmniScientist end to end inside this harness, with no API key. Omnisci is an agent skill from Omni-Scientist/OmniScientist. Run OmniScientist end to end inside this harness, with no API key.
Omnisci fits situations like: the user types /omnisci; says things like make a paper from these images; run OmniScientist on this seismogram.
Run `npx skills add Omni-Scientist/OmniScientist --skill omnisci -a claude-code`. Or copy the skill folder (skill/omnisci in Omni-Scientist/OmniScientist) into .claude/skills/omnisci in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Omni-Scientist/OmniScientist --skill omnisci -a codex`. Or copy the skill folder (skill/omnisci in Omni-Scientist/OmniScientist) into .agents/skills/omnisci 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 Omni-Scientist/OmniScientist --skill omnisci -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/omnisci, .gemini/skills/omnisci, .github/skills/omnisci and .opencode/skills/omnisci in your project.
Going by SKILL.md and its folder, Omnisci needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Omnisci is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k 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 Omnisci: Markdown Article Formatter (JimLiu/baoyu-skills, 27k stars), Markitdown (ImCa0/just-laws, 781 stars), Obsidian Markdown (Atmosphere/atmosphere, 3.8k stars) and DOCX (rvdbreemen/OTGW-firmware, 207 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Omni-Scientist (a GitHub organization) maintains it in Omni-Scientist/OmniScientist, which has 166 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 26, 2026.
Source: Omni-Scientist/OmniScientist on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.