Edu Math Video
wy51ai/edulab
A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a math problem (数学题, geometry, algebra, functions, motion/行程 problems), from a problem screenshot…
Transcribe a video with Sonilo and translate the transcript into editable .srt files — one per target language, plus the detected source language — so the wording can be read and corrected before…
$ npx skills add sonilo-ai/skills --skill proofread -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sonilo-ai/skills proofread --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/sonilo-ai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/proofread .claude/skills/proofread && 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 "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .claude/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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/sonilo-ai/skills/tree/main/proofreadType 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 sonilo-ai/skills --skill proofread -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sonilo-ai/skills proofread --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sonilo-ai/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/proofread .agents/skills/proofread && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .agents/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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 sonilo-ai/skills --skill proofread -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sonilo-ai/skills proofread --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sonilo-ai/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/proofread .cursor/skills/proofread && 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 "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .cursor/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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/sonilo-ai/skills.git --path proofread--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 sonilo-ai/skills --skill proofread -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sonilo-ai/skills proofread --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sonilo-ai/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/proofread .gemini/skills/proofread && 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 "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .gemini/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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 sonilo-ai/skills proofreadInstalls 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 sonilo-ai/skills --skill proofread -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sonilo-ai/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/proofread .github/skills/proofread && 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 "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .github/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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 sonilo-ai/skills --skill proofread -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sonilo-ai/skills proofread --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sonilo-ai/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/proofread .opencode/skills/proofread && 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 "proofread" agent skill from https://github.com/sonilo-ai/skills/tree/main/proofread into .opencode/skills/proofread/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proofread", 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.
proofreadTranscribe a video with Sonilo and translate the transcript into editable .srt files — one per target language, plus the detected source language — so the wording can be read and corrected before…
Proofread is an agent skill from sonilo-ai/skills. Transcribe a video with Sonilo and translate the transcript into editable .srt files — one per target language, plus the detected source language — so the wording can be read and corrected before anything is dubbed. Nothing is spoken and no video is produced; this is the step before dubbing, and the corrected files go back to the dubbing tool as subtitles so the dub speaks exactly the approved lines. Use when the user wants to review, approve or fix the translation before dubbing, wants editable subtitles or a…
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Requires Sonilo through either transport — the MCP server connected, or the sonilo CLI installed and signed in — plus credentials: a sonilo login sign-in, the…
It sits in Media & Creative, covering Transcription, Text to speech and voice and Copy editing and proofreading. It works with Model Context Protocol. The repository describes itself as: Agent skills for Sonilo's licensed music, sound-effects, dubbing, and audio-ducking API. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 33233f7. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWritemcp__sonilo__*From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlpipnpmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.sonilo.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SONILO_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires Sonilo through either transport — the MCP server connected, or the `sonilo` CLI installed and signed in — plus credentials: a `sonilo login` sign-in, the hosted OAuth plugin, or SONILO_API_KEY. See the setup-api-key skill.
From compatibility in the SKILL.md frontmatter.
Proofread loads about 4.3k tokens when it runs. Until then it costs about 191 tokens; SKILL.md has 1,941 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, mcp__sonilo__*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 sonilo-ai/skills at commit 33233f7, republished under its MIT licence (© sonilo-ai). 1,941 words, ~4,317 tokens.
.claude/skills/proofread/SKILL.md (or your agent's skills folder).Transcribe a video and translate the transcript into the target languages,
returning one editable .srt per language plus the source-language
transcript. Nothing is voiced, nothing is re-rendered, no video comes back.
This is the step before auto-dubbing: the user reads and
corrects the translated scripts, and the corrected files then go to dubbing
as subtitles, so the dub speaks exactly the approved wording instead of the
pipeline's own translation.
Setup: See the setup-api-key skill.
⚠️ Cost — read before calling: this is billed per target language — video seconds × the number of target languages, at $0.001/sec with a 10-second billing floor. A transcript-only request (no
languages) counts as one. Self-serve accounts get 2 free-trial runs; after that it bills normally. Confirm the exact language list with the user before calling; do not guess a long list "to be helpful."
Use it when:
languages for the source-language transcript
alone.subtitles. Re-dubbing without a script just pays for the same
translation twice.Do not use it when the user just wants the video dubbed and has no interest
in the wording — that is one dubbing call, and inserting a proofread in front
of it is an extra charge they did not ask for.
Pick one at the start of the session and stay on it. Do not mix the two inside a single job, and do not announce the choice.
proofread and friends) — use them. This is the preferred path: it needs no shell, and it is the only one that survives a very long generation. If a call fails to authenticate — rather than failing on its inputs — this transport is not usable in this session: go to 2 instead of retrying it.sonilo account exits 0 — use the CLI commands below. Same API, same account, same credential file. Probe with sonilo account, not sonilo whoami: whoami exits 0 even when signed out, so it cannot tell the two states apart.api.sonilo.com with curl to work around it; both transports handle uploads, polling and retries that a bare request does not.proofread takes a local file only on the local server. The hosted (OAuth
plugin) server is URL-only: it exposes video_url, languages and
source_language and nothing else — no video_path to read a file from, and
no output_directory, because it has no filesystem. There the .srt URLs come
back on the task and you fetch them yourself. If the user's video is a local
file and you are on the hosted server, use the CLI or an SDK instead of trying
video_path — it is not a parameter there.
Unlike dubbing, this call is quick: a few-minute clip with a handful of
languages typically finishes in well under a minute, so the ordinary timeout is
enough and there is no submit-and-poll dance to plan for.
proofread(
video_path="~/Desktop/product-demo.mp4",
languages=["es", "fr"]
)On the hosted server, pass a URL instead — it is the only input there:
proofread(video_url="https://example.com/product-demo.mp4", languages=["es", "fr"])The transcript alone, with no translation, is the same call with languages
left out:
proofread(video_path="~/Desktop/product-demo.mp4")A hint for the spoken language, for short or noisy audio:
proofread(video_path="~/Desktop/product-demo.mp4", languages=["es"], source_language="en")On the local server the files are saved for you (see Output
Files); output_directory says where.
pip install sonilo)from sonilo import Sonilo
client = Sonilo() # reads SONILO_API_KEY
result = client.proofread.generate(
video="product-demo.mp4",
languages=["es", "fr"],
# Optional hint; omit to have the spoken language detected.
source_language="en",
)
print(result.source_language, result.cue_count)
# Writes scripts/proofread.<language>.srt — including the source language.
for language, path in result.save_all("./scripts").items():
print(language, path)
for language, issues in result.warnings.items():
for issue in issues:
print(language, issue.cue, issue.code, issue.severity)npm install sonilo)import { SoniloClient } from "sonilo";
import type { ProofreadResult } from "sonilo";
const client = new SoniloClient(); // reads SONILO_API_KEY
const result: ProofreadResult = await client.proofread.generate({
video: "./product-demo.mp4",
languages: ["es", "fr"],
sourceLanguage: "en", // optional hint
});
console.log(result.source_language, result.cue_count);
// Presigned .srt URLs — they expire, so fetch them promptly. There are no
// download helpers on this result; use download()/fetch() as elsewhere.
for (const [language, url] of Object.entries(result.subtitles ?? {})) {
console.log(language, url);
}npm install -g sonilo-cli or pip install sonilo-cli)sonilo proofread --video clip.mp4 --languages es,fr --output scripts/clip.srt
# writes scripts/clip.en.srt (the detected source), scripts/clip.es.srt, scripts/clip.fr.srt--output is a filename template, not one destination, exactly as it is on
sonilo dubbing: the language code is spliced in before the extension, and
missing directories are created. It defaults to proofread.srt. After the
files, the command prints the detected source language, the cue count, and one
line per non-blocking warning.
# Transcript only, from a URL, with a hint for the spoken language.
sonilo proofread --video-url https://example.com/clip.mp4 --source-language en
# --timeout is the CLI's own wait (default 600 seconds). If it does expire, the
# task keeps running server-side.
sonilo proofread --video clip.mp4 --languages ja --timeout 300
sonilo tasks wait <task-id>curl -X POST "https://api.sonilo.com/v1/proofread" \
-H "Authorization: Bearer $SONILO_API_KEY" \
-F "video=@product-demo.mp4" \
-F 'languages=["es","fr"]' \
-F "source_language=en"
# -> 202 {"task_id": "...", "status": "processing"}
curl "https://api.sonilo.com/v1/tasks/<task_id>" -H "Authorization: Bearer $SONILO_API_KEY"languages is a JSON array string, the same wire shape as dubbing's.
video_url is accepted instead of an uploaded file and must be https — the
backend fetches the source itself and rejects plain http. Pass one or the
other, never both.
| Tool | Description |
|---|---|
proofread(video_path? | video_url?, languages?, source_language?, output_directory?) | Transcribe a video and translate the transcript into the requested languages; one editable .srt per language plus the source-language transcript. Voices nothing and produces no video. video_path and output_directory exist on the local server only — the hosted server is video_url-only. |
| Parameter | Type | Default | Notes |
|---|---|---|---|
video_path | string | — | Local server only. Absolute path, or relative to SONILO_MCP_BASE_PATH. Max 300s (5 min), max 300 MB, and the video must have an audio track — there is nothing to transcribe without one, so a video lacking one is rejected rather than transcribed. |
video_url | string | — | Must be https (not just http). Exactly one of video_path/video_url. The only input the hosted server accepts. Same 300s / 300 MB / audio-track rules. |
languages | list[str] | — (transcript only) | Target languages to translate the transcript into, e.g. ["es", "fr"]. The same codes as dubbing — see the auto-dubbing skill's languages row for the list and for what pt_br, es_419, pa_in and sd_in mean — so a proofread script can go straight into a dub. Omit it, or pass [], for the source-language transcript alone. An unsupported code is a 422 before anything is charged. Billed per language, so this list is the price. |
source_language | string | — (detected) | A hint telling transcription which language to expect, one of the same codes. It helps on short, noisy or mixed-language audio. Omit it to have the language detected; either way the result reports the language the transcript is actually in, and that detected code keys the source-language file. Free — it is a hint, not an extra language. |
output_directory | string | SONILO_MCP_BASE_PATH | Local server only. Absolute, or relative to the base path. |
{
"task_id": "…",
"status": "succeeded",
"source_language": "en",
"subtitles": {
"en": "https://…/en.srt",
"es": "https://…/es.srt",
"fr": "https://…/fr.srt"
},
"cue_count": 65,
"warnings": {
"fr": [
{"cue": 33, "code": "high_text_speed", "severity": "warning", "characters_per_second": 26.92}
]
},
"duration_seconds": 206.32
}subtitles maps a language code to a downloadable .srt URL, and
always includes the detected source language on top of every requested
target — so a one-language request comes back with two files, and a request
with no languages at all still comes back with one. The URLs are presigned
and expire: save the files rather than handing the user a link.source_language is the language the transcript is in, whatever hint was
sent. It is the key the source-language file appears under.cue_count is the number of subtitle cues in the source script. Every
language has the same count.warnings maps a language to non-blocking issues in its script, and
is empty when there are none. Each issue carries cue (1-based), code,
severity, plus whatever measurement that code brought with it (e.g.
characters_per_second on high_text_speed). A warning never withholds a
file or fails the task — surface it as something the user may want to tighten
while editing, not as an error.The two calls are halves of one workflow. Run them in this order:
Proofread the video into the target languages.
Hand the .srt files to the user to read and correct. That is the whole
point of the call — do not silently pass them straight through. Rewriting
them yourself is a translation the user never approved.
Dub with subtitles, keyed by language, so the dub speaks those lines
verbatim:
dubbing(
video_path="~/Desktop/product-demo.mp4",
languages=["es", "fr"],
subtitles={"es": "./scripts/clip.es.srt", "fr": "./scripts/clip.fr.srt"}
)sonilo dubbing --video clip.mp4 --languages es,fr \
--subtitle es=scripts/clip.es.srt --subtitle fr=scripts/clip.fr.srtDrop the source-language file. Proofread always returns it; dubbing's
subtitles keys must equal its languages exactly, so passing the source
language through is an extra key and a 422. The same goes the other way: every
language being dubbed needs a script, so if the user only corrected two of three
files, ask for the third rather than dropping subtitles — a bare languages
list would silently deliver the pipeline's own translation instead.
See the auto-dubbing skill for the rest of the script rules
(.srt/.vtt only, 1 MiB each, target-language text, and export_srt to get
each language's lines re-timed against the delivered audio).
dubbing there is no server-side default here: omit
languages and you get the transcript alone, charged as one language.source_language when the audio is hard. Short clips, background
noise, or a speaker switching languages are exactly where detection slips, and
a hint costs nothing.failed with
TRANSCRIPTION_EMPTY — a caller-input verdict, not a backend fault. Check the
clip before re-running it.get_account_services (see the account skill) if you are
unsure whether the account's 2 free runs remain before calling.proofread is async: the backend accepts and charges the task, then a worker
runs it. If the call's own wait is interrupted, the error message — or the task
id printed at submission — gives you a task_id. Call get_sfx_task(task_id) —
get_generation_task(task_id) on the hosted server — to check status and
download the finished .srt files; see task-recovery. On
the CLI, sonilo tasks wait <task-id> resumes the wait.
Do not re-run proofread after a timeout. That is a second charge for
scripts you already own.
On the local MCP server, one .srt per language lands in output_directory,
named proofread-<first 8 chars of the task id>.<language>.srt — there is no
prompt to name files after, so the task id is the only stable name. The set
always includes the detected source language. After the files, the tool reports
the detected source_language and cue_count, then one note per warning; a
language whose .srt could not be downloaded is a note carrying the task id,
not a failure.
On the CLI, the files follow the --output template
(--output scripts/clip.srt writes scripts/clip.en.srt,
scripts/clip.es.srt, …), so --output names the template, not one file.
The hosted server and the raw API return the URLs instead; fetch them before they expire.
Common errors: 401 invalid key, 402 insufficient balance / trial exhausted,
413 file too large, 422 invalid parameters (an unsupported language code,
both or neither of video_path/video_url, a non-https video_url), 429
rate limit. An unsupported language code is a 422 before anything is charged.
A video over the 300s cap, over 300 MB, or with no audio track is rejected rather than transcribed. Both MCP servers check the duration before the request is made, and the hosted server also checks for an audio track, so those reach you as a tool error rather than as an HTTP status; the local server leaves the audio-track check to the API.
A failed task carries an error.code of SOURCE_DOWNLOAD_FAILED,
SOURCE_PROCESSING_FAILED, TRANSCRIPTION_EMPTY, TRANSCRIPTION_FAILED,
TRANSLATION_FAILED, PREFLIGHT_BLOCKED, PREFLIGHT_UNAVAILABLE or
TRANSFER_FAILED, and is refunded. TRANSCRIPTION_EMPTY means the audio had
no speech in it — re-running the same clip cannot fix that.
A 503 means proofread is temporarily disabled server-side; it is not a key or
balance problem and no retry loop will fix it. See the account
skill to check trial/usage before a call.
© sonilo-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in proofread of sonilo-ai/skills.
Open the folder on GitHubat commit 33233f7
Proofread 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 |
|---|---|---|---|---|---|---|
| Proofread this skillsonilo-ai/skills | 115 | — | ~4.3k | Automated safety check: Notes | MIT | |
| Edu Math Videowy51ai/edulab | 1.4k | — | ~2.5k | Automated safety check: Notes | Apache-2.0 | |
| Scenario Video Assemblyscenario-labs/skills | 898 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Video Translatorshang-zhu/violin | 1.1k | — | ~1k | Automated safety check: Notes | MIT | |
| ShowtimeFavioVazquez/showtime | 158 | — | ~3k | Automated safety check: Pass | MIT | |
| Video TranslationNoizAI/skills | 526 | — | ~1.3k | Automated safety check: Notes | None |
wy51ai/edulab
A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a math problem (数学题, geometry, algebra, functions, motion/行程 problems), from a problem screenshot…
scenario-labs/skills
A skill your agent uses when generated clips must become a finished video on Scenario via MCP: cutting a shot list together, laying a timeline, concatenating with transitions, overlaying a logo or…
shang-zhu/violin
Dub a video into another language and generate subtitles using the default Together + Cartesia stack.
FavioVazquez/showtime
A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…
NoizAI/skills
Translate and dub videos from one language to another, replacing the original audio with TTS while keeping the video intact.
microsoft/GitHub-Copilot-for-Azure
A skill your agent uses for Azure AI: Search, Speech, OpenAI, Document Intelligence.
sonilo-ai/skills
Generate a sound effect from a text description using Sonilo — a UI chime, a whoosh, an impact, ambience, a stylized cue — when there is no video to match.
sonilo-ai/skills
Score a video with original music using Sonilo — the model watches the cut and matches pacing, motion, and emotion, returning either the audio or a new video with the score muxed in.
sonilo-ai/skills
Check the Sonilo account's available services, rate limits, free-trial allowance, and usage/billing history.
sonilo-ai/skills
Duck a music bed under a voice track using Sonilo — automatically lowers the music wherever the voice speaks and lifts it back in the gaps.
sonilo-ai/skills
Play a local audio file through the system's default speakers using Sonilo's MCP server.
sonilo-ai/skills
Dub a video into one or more other languages using Sonilo, translating and re-voicing the speech into a new video per language.
Works with
Categories
Transcribe a video with Sonilo and translate the transcript into editable .srt files — one per target language, plus the detected source language — so the wording can be read and corrected before…. Proofread is an agent skill from sonilo-ai/skills.srt files — one per target language, plus the detected source language — so the wording can be read and corrected before anything is dubbed.
Proofread fits situations like: the user wants to review; fix the translation before dubbing; wants editable subtitles; A transcript of a video.
Run `npx skills add sonilo-ai/skills --skill proofread -a claude-code`. Or copy the skill folder (proofread in sonilo-ai/skills) into .claude/skills/proofread in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sonilo-ai/skills --skill proofread -a codex`. Or copy the skill folder (proofread in sonilo-ai/skills) into .agents/skills/proofread 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 sonilo-ai/skills --skill proofread -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/proofread, .gemini/skills/proofread, .github/skills/proofread and .opencode/skills/proofread in your project.
Going by SKILL.md and its folder, Proofread needs the command-line tools its instructions call (curl, pip and npm) and credentials named SONILO_API_KEY. Our summary lists: Python 3; Node.js; A credential in SONILO_API_KEY. Its frontmatter pre-approves these tools: Bash, Read, Write, mcp__sonilo__*. Compatibility (from SKILL.md): Requires Sonilo through either transport — the MCP server connected, or the `sonilo` CLI installed and signed in — plus credentials: a `sonilo login` sign-in, the hosted OAuth plugin, or SONILO_API_KEY. See the setup-api-key skill..
SKILL.md names 1 domain. In commands or code: api.sonilo.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Proofread is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k 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 Proofread: Edu Math Video (wy51ai/edulab, 1.4k stars), Scenario Video Assembly (scenario-labs/skills, 898 stars), Video Translator (shang-zhu/violin, 1.1k stars) and Showtime (FavioVazquez/showtime, 158 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sonilo-ai (a GitHub organization) maintains it in sonilo-ai/skills, which has 115 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on September 30, 2026.
Source: sonilo-ai/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.