Kinocut
KyaniteLabs/kinocut
Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…
Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.
$ npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --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/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/cassette-video-edit .claude/skills/cassette-video-edit && 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 "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .claude/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-editType 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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/cassette-video-edit .agents/skills/cassette-video-edit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .agents/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/cassette-video-edit .cursor/skills/cassette-video-edit && 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 "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .cursor/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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/Cassette-Editor/oh-my-cassette.git --path skills/cassette-video-edit--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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/cassette-video-edit .gemini/skills/cassette-video-edit && 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 "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .gemini/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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 Cassette-Editor/oh-my-cassette cassette-video-editInstalls 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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/cassette-video-edit .github/skills/cassette-video-edit && 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 "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .github/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Cassette-Editor/oh-my-cassette cassette-video-edit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Cassette-Editor/oh-my-cassette.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/cassette-video-edit .opencode/skills/cassette-video-edit && 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 "cassette-video-edit" agent skill from https://github.com/Cassette-Editor/oh-my-cassette/tree/main/skills/cassette-video-edit into .opencode/skills/cassette-video-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cassette-video-edit", 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.
cassette-video-editEdit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.
Cassette Video Edit is an agent skill from Cassette-Editor/oh-my-cassette. Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette. Use this skill whenever the user asks to change, preview, or render a media file in the project — even if they never say "Cassette" or name a tool — for example "trim the intro off demo.mp4", "add subtitles to this clip", "make me a 30-second cut with music", "why is there dead air at the start". Drives the local Oh My Cassette stdio MCP tools in Codex or Claude as one…
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/auth.md`, `references/music.md` and `references/previews.md`).
It sits in Media & Creative, covering Transcription, MCP servers and Video production. It works with Model Context Protocol, FFmpeg and Python. The repository describes itself as: 你的随身 AI 剪辑搭档 | Pocket AI co-editor for video montage — AI video editing plugin & MCP server for Claude Code, Codex, Hermes & OpenCode. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 4bebe25. 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.
No scripts in the folder and no shell commands in SKILL.md.
From 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.
Cassette Video Edit loads about 3.4k tokens when it runs, and up to ~5.3k if it reads all its reference files. Until then it costs about 167 tokens; SKILL.md has 1,708 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 Cassette-Editor/oh-my-cassette at commit 4bebe25, republished under its MIT licence (© Cassette-Editor). 1,708 words, ~3,360 tokens.
.claude/skills/cassette-video-edit/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Cassette edits the media; you carry the messages. The cassette MCP server is a local stdio child
process that opens no port and talks directly to the separate Cassette backend. Do not start or
depend on the separate FastAPI web-demo server for this workflow — that is a different adapter.
This is the canonical workflow for every supported MCP host, including Codex, Claude Code, Hermes,
and OpenCode.
Two details live outside this file to keep it short. Read them when they apply:
references/auth.md — any auth_* error, or the user is not signed in on this machine.references/music.md — any Jamendo/BGM request or jamendo_* error.references/previews.md — showing a timeline, contact sheet, or storyboard, and the plan-review
pause.You are a courier between the user and the Cassette agent, not an editor or a brief writer.
cassette_run_job as message VERBATIM. Never rewrite,
optimize, summarize, translate, or expand them. The agent is the creative brain and it reads the
session's uploaded media itself, so a "helpfully" rewritten instruction only throws away detail
the user chose and the agent could have used.cassette_make_prompt. It is a legacy brief builder, kept only so the tool-name set
stays stable.xhigh thinking. Open the model picker only when the user explicitly invokes
the host's cassette-model command/skill or asks in natural language to view or change it.source_path_not_allowed, ask the user to move the file into the project or to
rerun the private setup command with --allowed-root. Do not go hunting for a path that works.session_id and job_id. Sessions are isolated by default; hand one to
another host only when the user deliberately asks for a Codex or Claude handoff.artifacts. Never invent an export path or ask the
MCP runtime to expose another local file.One session is one continuous conversation on one persistent agent thread. The agent remembers every previous turn, so a follow-up like "make that title bigger" needs no context restating.
cassette_ingest_media once per source asset. Omit session_id on the first call so the
runtime generates one, then reuse the returned value everywhere.cassette_list_assets and confirm the intended files are present.cassette_config(session_id). If its source is default, present
the returned choices and save the user's selection (including an accepted default).cassette_run_job with the user's verbatim message and the same
session_id.export=true only on a turn where the user expresses finish or export intent.If the user explicitly asks for background music, cassette_match_exact_bgm takes a concrete
title/artist and jamendo_music_matcher handles a configured mood/genre. Never switch providers
automatically. cassette_match_bgm remains available only when the user explicitly asks for the
legacy Free To Use provider. Read references/music.md before handling music.
User: trim the dead air off the front of demo.mp4 and add a title card
You: cassette_run_job(session_id="s_41k",
message="trim the dead air off the front of demo.mp4 and add a title card")
→ phase="succeeded"
timeline_delta="v6→v9: trimmed 3.2s from head; added title card 0.0–2.5s"
quality.timeline_ctl=<digest>, artifacts=[contact sheet]
"v6→v9: trimmed 3.2s off the head and added a 2.5s title card. Nothing is rendered
yet — want to see the contact sheet, or should I export?"
User: export it
You: cassette_run_job(session_id="s_41k", message="export it", export=true)
→ phase="review_required"
cassette_review_completion(job_id="j_88", decision="export",
reason="user asked to export; trim and title card both landed")
→ phase="exported", artifacts=[…/exports/j_88/demo_cut.mp4]Note what did not happen: no status polling, no rewriting of the user's words, and no rendering until the user asked for it.
Treat the structured phase and next_action fields as authoritative. Do not decide routing,
progress, or completion from keywords in prose.
cassette_run_job is the wait. It returns when the turn is settled, streaming MCP progress
notifications when the host supports them, and answers with a terminal phase. Make exactly one
call per user turn, then return control to the user. Never start a second corrective, retry, or
"finish the plan" call until the user sends another message.
| phase | what it means | what you do |
|---|---|---|
succeeded | edit committed, nothing rendered | relay data.job.timeline_delta + the digest, continue the conversation |
needs_user | the agent asked a question | relay it, then cassette_answer_question(job_id, response) |
review_required | export turn awaiting judgement | evaluate the result, then in the same assistant turn call cassette_review_completion(job_id, decision, reason) — only decision=export renders |
exported | the render finished | present the validated artifacts and their resource links |
failed / cancelled / timed_out | terminal error | report the structured error and its runtime-derived next action |
running / exporting | the call detached (wait=false) or was interrupted | see recovery below |
The envelope itself is thin — ok, phase, next_action, session_id, job_id, artifacts,
data. Everything describing the turn hangs off data.job:
| what you want | where it is |
|---|---|
| what changed this turn | data.job.timeline_delta |
| the agent's plan checkpoints | data.job.plan_progress |
| the text digest of the timeline | data.job.quality.timeline_ctl |
| the contact sheet, when one exists | data.job.quality.contact_sheet_uri |
| measurements of the rendered file | data.job.quality.export_qc (on exported only) |
| resource links and export paths | artifacts[] — top level, not under data |
Reading timeline_delta or quality off the top of the envelope yields nothing at all, which
looks exactly like a turn that produced no preview. The digest is there on every settled turn; the
contact sheet is best-effort and is simply absent when a sheet could not be built from the current
frames, so check before offering to show one.
cassette_timeline answers in its own shape — data.ctl plus data.version, data.clip_count,
and data.duration_sec — not under data.job. Same digest, different path from the run envelope.
cassette_review_completion takes reason as a required argument alongside job_id and
decision (plus an optional summary) — omitting it fails the call with validation_error
before anything renders. Write the judgement you actually made, in one line: it is the record of
why this edit was considered finished, and it is the only place that judgement is captured.
On exported, the runtime has already measured the finished file into quality.export_qc
(duration, fps, resolution, audio span, black_segments, and audio_levels with
mean_dbfs/peak_dbfs). Read those numbers instead of probing the export yourself, and raise them
with the user only when a field contradicts what they asked for.
An explicit user export request is already authorization to export. If that export turn returns
review_required, inspect the attached timeline and resolve the gate in the same assistant turn.
Do not ask the user to confirm export again merely because the Cassette agent's prose says it
cannot render or lacks rendering capability: that prose is precisely why the typed supervisor
review gate exists. Ask only when the timeline reveals a real defect or the requested result is
genuinely ambiguous. Never start a second cassette_run_job to get past this gate.
A thread_busy error means a run is already live on this session's thread, often started from an
open editor tab. Wait and retry rather than starting a second job.
On hosts that support MCP elicitation, the runtime may collect a needs_user answer itself and
return the already-resumed result. Trust the returned phase and do not answer twice.
cassette_job_status re-attaches to a job whose call did not return — the host restarted, the call
was cancelled, or the turn was deliberately started with wait=false. Call it once, act on the
phase it reports, and stop. A settled turn never needs it.
job_id is the durable handle for that recovery: jobs persist private thread and interrupt
metadata on disk, so a paused turn resumes after a supported MCP host restarts.
A long edit does not need managing. Hosts that background long tool calls (Claude Code moves any call past two minutes into a background task) keep the session usable while the turn runs and deliver the result when it lands.
cassette_timeline or the envelope's
timeline_delta, never from memory. Name the version: "v42→v43: trimmed the intro to 4.0s."timeline_delta and plan_progress over re-describing the whole timeline.cassette_run_job. cassette_edit is an opt-in fast lane
for small named changes (trim, retime, text, delete, undo) that stays disabled unless the
operator sets CASSETTE_DIRECT_EDIT=1 — no shipping host config sets it, so assume it is off
and reach for it only once a cassette_edit call has actually succeeded in this session or the
user says they enabled it. When you do use it, read cassette_timeline first and pass
expected_version from that read; a stale_timeline error means re-read and retry.cassette_config(session_id) shows the current choice and the available options; adding
model=… / thinking_level=… changes them. It accepts a product id (openai/gpt-5.6-luna) or a
label ("GPT-5.6 Luna").off, minimal,
low, medium, high, and xhigh. The default is GPT-5.6 Luna with xhigh thinking. The
preference persists for the session and applies from the next turn, the same semantics as
switching model between turns in the web editor. Never ask automatically; change it only when
the user asks, and confirm in one line.instructions carry an UPDATE AVAILABLE: line when a newer Oh My Cassette release
exists. Mention it once per session with both version numbers and offer the command it names. Run
that command only after the user explicitly agrees, and never re-offer in the same session — it
replaces the plugin on disk, so tell the user the new version applies after the host reloads
(/reload-plugins in Claude Code, a new task in Codex). Never fabricate a version or an update
command; if the line is absent, the install is current and the subject does not come up.cassette_cancel_job only when the user asks to stop the edit.session_id and active job_id; the receiving
host should begin with cassette_job_status rather than re-ingesting or starting a duplicate job.© Cassette-Editor, 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 3 other files (references) in skills/cassette-video-edit of Cassette-Editor/oh-my-cassette.
Open the folder on GitHubat commit 4bebe25
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in Cassette-Editor/oh-my-cassette, which our catalogue first saw on October 7, 2026.
Cassette Video Edit 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 |
|---|---|---|---|---|---|---|
| Cassette Video Edit this skillCassette-Editor/oh-my-cassette | 119 | 1 repos | ~3.4k | Automated safety check: Pass | MIT | |
| KinocutKyaniteLabs/kinocut | 198 | — | ~5.7k | Automated safety check: Pass | Apache-2.0 | |
| Kinocut RepurposeKyaniteLabs/kinocut | 198 | — | ~1k | Automated safety check: Pass | Apache-2.0 | |
| OpenStoryline Install HelperFireRedTeam/FireRed-OpenStoryline | 3.5k | — | ~1.5k | Automated safety check: Notes | Apache-2.0 | |
| Blender MCP Videomicky-li-hd/VideoCoCo | 118 | — | ~1.1k | Automated safety check: Pass | None | |
| Env Setupwwwzhouhui/skills_collection | 283 | — | ~3.5k | Automated safety check: Notes | None |
KyaniteLabs/kinocut
Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…
KyaniteLabs/kinocut
Use the current Kinocut tools to turn one local video path into a short platform-ready clip package with manifests, review artifacts, and human approval gates.
FireRedTeam/FireRed-OpenStoryline
Installs, repairs and starts a local source checkout of FireRed-OpenStoryline, from prerequisites and a venv to resources, config and the MCP and web servers.
micky-li-hd/VideoCoCo
A skill your agent uses for Blender MCP or Blender CLI video-generation work, especially when rendering scripted Blender scenes, debugging MCP port 9876, checking why blender is not on PATH…
wwwzhouhui/skills_collection
Checking and provisioning the machine's environment for the video-agent-kit plugin — probing for ffmpeg/ffprobe that actually carry the encoders and filters we render with (libx264/aac/libmp3lame…
sun-guannan/VectCutAPI
Drives CapCut or JianYing through an HTTP and MCP API: create drafts, add video, audio, text, subtitles and effects, preview on the web and batch-produce videos.
Cassette-Editor/oh-my-cassette
Show or change the Cassette editing model and thinking level for the current media session.
Cassette-Editor/oh-my-cassette
Add Hermes gateway media ingestion, background notification, and delivery behavior to the canonical cassette-video-edit MCP workflow.
Works with
Categories
Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette. Cassette Video Edit is an agent skill from Cassette-Editor/oh-my-cassette. Edit, trim, cut, caption, subtitle, reframe, combine, add background music to, or export video, audio, and image files through Cassette.
Cassette Video Edit fits situations like: the user asks to change; render a media file in the project — even if they never say Cassette; name a tool — for example trim the intro off demo.mp4; add subtitles to this clip.
Run `npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a claude-code`. Or copy the skill folder (skills/cassette-video-edit in Cassette-Editor/oh-my-cassette) into .claude/skills/cassette-video-edit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a codex`. Or copy the skill folder (skills/cassette-video-edit in Cassette-Editor/oh-my-cassette) into .agents/skills/cassette-video-edit 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 Cassette-Editor/oh-my-cassette --skill cassette-video-edit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cassette-video-edit, .gemini/skills/cassette-video-edit, .github/skills/cassette-video-edit and .opencode/skills/cassette-video-edit in your project.
SKILL.md names no scripts, command-line tools or credentials: Cassette Video Edit is instructions for the agent only.
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.
Cassette Video Edit is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cassette Video Edit: Kinocut (KyaniteLabs/kinocut, 198 stars), Kinocut Repurpose (KyaniteLabs/kinocut, 198 stars), OpenStoryline Install Helper (FireRedTeam/FireRed-OpenStoryline, 3.5k stars) and Blender MCP Video (micky-li-hd/VideoCoCo, 118 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Cassette-Editor (a GitHub organization) maintains it in Cassette-Editor/oh-my-cassette, which has 119 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 5, 2026.
Source: Cassette-Editor/oh-my-cassette on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.