Content To Video
architectds/modeldock
Turn arbitrary source content (README, article, story, slides, deck, data/report, product description, tutorial text, audio/transcript, or a bare topic) into a finished, high-quality MP4 video.
Scenario and script craft — writes and reworks the scene-by-scene scenario.json: hook, beat structure, per-scene VO, on-screen text, pacing, and the language/aspect pre-flight.
$ npx skills add alecs5am/ralphy --skill scenarist -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install alecs5am/ralphy scenarist --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/alecs5am/ralphy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/scenarist .claude/skills/scenarist && 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 "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .claude/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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/alecs5am/ralphy/tree/main/.agents/skills/scenaristType 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 alecs5am/ralphy --skill scenarist -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install alecs5am/ralphy scenarist --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alecs5am/ralphy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/scenarist .agents/skills/scenarist && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .agents/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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 alecs5am/ralphy --skill scenarist -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install alecs5am/ralphy scenarist --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alecs5am/ralphy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/scenarist .cursor/skills/scenarist && 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 "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .cursor/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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/alecs5am/ralphy.git --path .agents/skills/scenarist--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 alecs5am/ralphy --skill scenarist -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install alecs5am/ralphy scenarist --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alecs5am/ralphy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/scenarist .gemini/skills/scenarist && 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 "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .gemini/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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 alecs5am/ralphy scenaristInstalls 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 alecs5am/ralphy --skill scenarist -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/alecs5am/ralphy.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/scenarist .github/skills/scenarist && 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 "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .github/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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 alecs5am/ralphy --skill scenarist -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install alecs5am/ralphy scenarist --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alecs5am/ralphy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/scenarist .opencode/skills/scenarist && 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 "scenarist" agent skill from https://github.com/alecs5am/ralphy/tree/main/.agents/skills/scenarist into .opencode/skills/scenarist/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "scenarist", 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.
scenaristScenario and script craft — writes and reworks the scene-by-scene scenario.json: hook, beat structure, per-scene VO, on-screen text, pacing, and the language/aspect pre-flight.
Scenarist is an agent skill from alecs5am/ralphy. Scenario and script craft — writes and reworks the scene-by-scene scenario.json: hook, beat structure, per-scene VO, on-screen text, pacing, and the language/aspect pre-flight. Owns scenario feedback loops and the scenario quality gate. USE WHEN the user asks to "write a script", "make a storyboard", "make a video about X" (after intake), or gives scenario feedback: "rework scene 3", "rewrite the hook", "make it shorter / longer", "tighten the VO", "change the ending". TRIGGER (EN): "write a script"…
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/feedback-iteration.md`, `references/hook-formulas.md` and `references/pacing.md`).
It sits in Media & Creative, covering Comics and storyboards and Quality gates. The repository describes itself as: Open-source desktop app for content creation, with an agent runtime and standalone CLI. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 8d139f0. 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 (its code samples are typescript and bash).
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.
Scenarist loads about 3.2k tokens when it runs, and up to ~5.9k if it reads all its reference files. Until then it costs about 157 tokens; SKILL.md has 1,266 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 alecs5am/ralphy at commit 8d139f0, republished under its Apache-2.0 licence (© alecs5am). 1,266 words, ~3,163 tokens.
.claude/skills/scenarist/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Read this when: "write a script", "make a video about X", "make a storyboard", "rework scene 3", "change the hook", "rewrite VO", "make it shorter / longer", scenario feedback.
Pre-flight (every new project): before drafting scenes, confirm with the user:
- Target audience language (EN / RU / KR / other). Drives the entire audio pipeline — Kling
--audiofor EN, ElevenLabs for everything else. Chat language ≠ video language; noski-people-001 wasted 10 min + a memory write on a default-Russian assumption that the user had to override.- Aspect / platform (9:16 TikTok / 16:9 YouTube / 1:1 broadcast realism). Square for caught-on-TV trends, never portrait.
- Hard "no"s — banned words, no-music policy (Kling auto-bakes ambient music unless explicitly banned in the prompt), brand colors, etc.
- Format / template fit — match the brief to a media format / template first (
ralphy template suggest "<brief>" --format <f>; formats inralphy template suggest --help), then load any matching content-niche craft-overlay skill (ugc-*,poster, …) on top as a supplement. A style template enters as a remix target only on an explicit pointer. Full discipline in the intake playbook's "Cold-start format / template match" section +docs/skills-vs-templates.md.- Storyboard lock — produce
STORYBOARD.md(scene table) and get explicit user "go" BEFORE handing to art-director. Skipping the lock cost ~$3-4 across glitter-cream / flipper / appstore (anchors regen'd because the storyboard was "drafty").See
.agents/skills/intake/SKILL.mdfor the full intake protocol that fires before this playbook.
Narrative owner. I write the first-draft scenario.json from brief + references, and iterate on feedback (hook, pacing, VO, scene count, transitions as narrative beats). Model prompts and assets are not my zone — that's the art director. My output is a self-consistent scenario that downstream roles can fan out from.
The scenario the scenarist emits MUST conform to cli/lib/schemas/scene.ts (ScenarioSchema). The scenarist LLM uses Zod response_format to enforce this — never free-prose, never JSON without the schema in the call.
Scene shape:
{
id: "scene-NN", // two-digit zero-padded
role: "hook" | "body" | "cta",
vo_text: string, // empty string is legal for B-roll
target_duration_s: number,
camera: string, // one-line, required
lighting?: string,
gesture?: Gesture, // finite enum from cli/lib/schemas/gestures.ts
broll?: string,
refs: string[], // flat list for v1.0
notes?: string // free-text escape hatch — see below
}notes is reserved for what the schema can't express. Per 02-D-01 the field exists for the 5% of director-intent that the struct misses — e.g. "this scene needs a slightly hesitant pause before the punchline", or a one-off body-language cue that's not in the gesture enum. It is not a dumping ground for prose that should be split into proper fields. Adapters read notes as a final "director intent" paragraph appended to the model-specific prompt body; abuse it and every downstream prompt gets junk.
Gesture vocabulary — per 02-D-06, gesture is a finite enum (12 named gestures: point-camera, nod, head-shake, laugh, shrug, lean-in, hand-product-reveal, eye-roll, facepalm, thumbs-up, palm-open, pause-still). One-off / niche gestures go in notes. Per-model adapters silently omit unknown enum values rather than error — so unknown-future-PR-gesture appearing in an older binary degrades gracefully.
Hook / Body / CTA shape — per 02.08.01, the scenario top-level carries hook: SceneRef, body: SceneRef[], cta: SceneRef pointing at scenes in the scenes{} map. This typed primitive is what ralphy batch --vary <axis> uses to swap one axis cleanly during variation runs.
STOP rule. Don't read
scenario.jsonwithcatand don't append to log files by hand. Every action below is aralphyverb that keeps the gen-log honest. AGENTS invariant #2.
Use these for every project-level inspection / mutation. Don't read scenario.json with cat and don't append to log files by hand — every action below is a ralphy verb that also keeps the gen-log honest.
# Read the current scenario / template / persona context
ralphy project show <id> --scenario # scenario.json
ralphy project show <id> --status # which pipeline steps are done
ralphy template suggest "<utterance>" # remix-shopping ONLY — never on cold start (see skills-vs-templates.md)
ralphy template show <id> -p # inspect a template the user pointed at for remix
ralphy persona show <id> -p # voice + tone + archetype
ralphy ref show <id> # cited reference details
# Quality gate (run before every handoff to art-director)
ralphy project score <id> # virality rubric, pass/fail JSON
ralphy project score <id> --strict # exit 1 on failure (CI-friendly)
# Length / word-budget sanity (re-transcribe an existing VO if scenes drifted)
ralphy project transcribe <id> --audio <vo.mp3> # ElevenLabs Scribe v1 default
# Log EVERY user feedback turn — both directions (see "User-prompt logging" rule below)
ralphy project log-prompt <id> --text "<original brief>" --stage brief
ralphy project log-prompt <id> --text "<rework scene 3>" --stage feedback
ralphy project log-prompt <id> --text "<looks great, ship it>" --stage approval
ralphy project log-prompt <id> --text "<too AI-slop in scene 2>" --stage critique
ralphy project log-prompt <id> --text "<no, kill this whole arc>" --stage rejection
ralphy project log-asset <id> --kind doc --source <path> --purpose brief
ralphy project timeline <id> # who said what, when, in chronological orderuser-prompts.jsonl is the only durable record of user intent across sessions. Sparse logs make the postmortem layer unreliable — noski-people-001 shipped with 1 logged prompt across 18 user-feedback turns and the postmortem had to guess at intent from chat scroll. That is a defect class this playbook now closes.
The rule: every time the user sends a message that changes scenario direction — brief, feedback, approval, critique, or rejection — the scenarist MUST call ralphy project log-prompt <id> --text "<verbatim user words>" --stage <stage> BEFORE drafting the response. Not "may log". Not "log the important ones". Every turn.
Named stages (use one):
--stage | When | Example user utterance |
|---|---|---|
brief | The original ask that created the project, or any later message that reframes the project goal | "make a 15s unboxing for my coffee grinder" |
feedback | User asks for a change to an existing artifact (scenario / scene / hook / VO) | "shorten scene 2", "rewrite the hook punchier", "swap the CTA" |
approval | User signs off on a draft / variant — locks the artifact for the next stage | "looks good, ship it", "approved", "go with v2" |
critique | User flags a problem but doesn't yet say how to fix it (you need to propose options) | "scene 3 feels AI-slop", "the pacing is off", "this doesn't match the ref" |
rejection | User kills an entire direction / asks to start over on a scope chunk | "scrap the whole CTA arc", "no — different aesthetic entirely", "throw out v3" |
When the user message contains multiple stages (e.g. "approve scene 1 BUT rework scene 3"), log it twice — once per stage. The CLI is cheap; the postmortem layer is not.
Out of scope as user-prompt turns (do NOT log these, they are agent-internal):
--no-ref-consent overrides (the CLI logs those itself with stage: "no-ref-consent").Cross-link: the editor and art-director playbooks inherit this same MUST-log rule for feedback on renders and anchors. See editor and art-director.
If the scenario references a creator / TikTok / IG handle and there's no .ralphy/references/<slug>/, handback to researcher — don't invent the reference (ralphy ref pull <url> is a one-liner there).
| File | When to read it |
|---|---|
| scenarist/hook-formulas.md | Writing or rewriting the hook (scene-01) |
| scenarist/pacing.md | Choosing scene count, durations, VO word budget |
| scenarist/feedback-iteration.md | User has scenario.json + a feedback message |
| scenarist/quality-gate.md | Before handoff — ralphy project score <id> gate |
| Sub-task | When | Sub-docs |
|---|---|---|
new-scenario | brief exists, no scenario.json yet | hook-formulas + pacing |
iterate-scenario | scenario.json exists + user feedback | feedback-iteration |
quality-gate | before handoff (auto) | quality-gate |
AGENTS.md — invariants.docs/creative-library/hooks/HOOK_LIBRARY.md — formulas, 5 formats, 4 angles, word-budget, banlist. Before every new scenario.docs/virality-rubric.md — quality criteria + scoreScenario() gate.docs/green-zone.md — text positioning inside the 1080×1920 safe zone..ralphy/workspaces/<ws>/projects/<id>/BRIEF.md — original ask..ralphy/workspaces/<ws>/projects/<id>/TEMPLATE_ORIGIN.md if present — which template's vibe..ralphy/references/<site-or-handle>/ if mentioned — design tokens / blueprints.scenario.json if this is an iterate.TEMPLATE.md, reference-example.md, fragments.md) if scaffolded.ralphy project score <id> — if passed: false, iterate, do not hand off. See scenarist/quality-gate.md.artifacts/refs/, otherwise the scenario must either require a reference (refuse) or use an archetype.reference-example.md literally. The template is a vibe anchor; the scenario is written from scratch.<FILL> placeholder.ralphy project log-prompt <id> --text "<verbatim>" --stage <brief|feedback|approval|critique|rejection>. Not "may log" — every turn that touches scenario direction, before you draft the response. See the "User-prompt logging" section above for stage definitions. Sparse logs are the documented cause of unreliable postmortems (issue 044).scene-NN (two-digit zero-padded).{scene-id}-{type}-{descriptor} (e.g. scene-01-bg-image, scene-03-vo-primary).new-scenario → art-director playbook (prompts + assets for all slots).iterate-scenario with visual changes → art-director target regen of affected slots.iterate-scenario with VO-only changes → art-director with an explicit note "only voiceover slots need regen" (saves $).© alecs5am, Apache-2.0. 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 4 other files (references) in .agents/skills/scenarist of alecs5am/ralphy.
Open the folder on GitHubat commit 8d139f0
Scenarist 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 |
|---|---|---|---|---|---|---|
| Scenarist this skillalecs5am/ralphy | 138 | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Content To Videoarchitectds/modeldock | 117 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Canghe Comicfreestylefly/canghe-skills | 461 | 8 repos | ~3.2k | Automated safety check: Pass | None | |
| Tutti UI Systemtutti-os/tutti | 3.8k | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| 3D Animation Short Generatortl2012tl/comfyUI-llama-TE | 241 | 4 repos | ~3.7k | Automated safety check: Pass | None | |
| Text to PNG Card Casterlijigang/ljg-skills | 7.5k | — | ~1.9k | Automated safety check: Pass | MIT |
architectds/modeldock
Turn arbitrary source content (README, article, story, slides, deck, data/report, product description, tutorial text, audio/transcript, or a bare topic) into a finished, high-quality MP4 video.
freestylefly/canghe-skills
Knowledge comic creator supporting multiple art styles and tones.
tutti-os/tutti
A skill your agent uses when working with @tutti-os/ui-system components, replacing local UI with shared components, querying component ids or metadata, promoting UI into shared base or business…
tl2012tl/comfyUI-llama-TE
Create complete stylized 3D animated shorts from a story idea through an ordered production workflow covering project brief, story outline, character and environment cards, standardized shot…
lijigang/ljg-skills
Turns text, URLs or local files into tall PNG cards through HTML typography, with four modes: long reading card, full-text layout, comic and whiteboard.
jtydhr88/ComfyTV
Convert approved scripts, shot briefs, storyboards, keyframes, character sheets, scene assets, prop sheets, and sound briefs into director-level storyboards and production-ready MiniMax H3 prompts.
alecs5am/ralphy
GSAP animation reference for HyperFrames. An agent skill from alecs5am/ralphy.
alecs5am/ralphy
Deep-research workflow for UGC reference material — turns one or more URLs / handles / trend queries into a single cited research report (report.md + sources.json) that a scenarist or art-director…
alecs5am/ralphy
Composition and render craft — assembles scenario.json plus asset-manifest.json into a HyperFrames HTML composition and renders the mp4.
alecs5am/ralphy
Quality evaluation of rendered UGC mp4s — scene segmentation, audio loudness / dead-air, caption density, and per-scene visual analysis.
alecs5am/ralphy
End-to-end orchestration — the wrapper that drives the whole production contract across roles, plus batch production.
alecs5am/ralphy
Ralphy CLI operations and repair — environment setup, API keys and connectors, ralphy doctor, reading logs, diagnosing a failed generation or render, and the CLI cookbook for verbs other roles call.
Categories
Scenario and script craft — writes and reworks the scene-by-scene scenario.json: hook, beat structure, per-scene VO, on-screen text, pacing, and the language/aspect pre-flight. Scenarist is an agent skill from alecs5am/ralphy.json: hook, beat structure, per-scene VO, on-screen text, pacing, and the language/aspect pre-flight.
Scenarist fits situations like: the user asks to write a script; make a storyboard; make a video about X (after intake); gives scenario feedback: rework scene 3.
Run `npx skills add alecs5am/ralphy --skill scenarist -a claude-code`. Or copy the skill folder (.agents/skills/scenarist in alecs5am/ralphy) into .claude/skills/scenarist in your project. Claude Code loads it when a task matches its description.
Run `npx skills add alecs5am/ralphy --skill scenarist -a codex`. Or copy the skill folder (.agents/skills/scenarist in alecs5am/ralphy) into .agents/skills/scenarist 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 alecs5am/ralphy --skill scenarist -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/scenarist, .gemini/skills/scenarist, .github/skills/scenarist and .opencode/skills/scenarist in your project.
SKILL.md names no scripts, command-line tools or credentials: Scenarist 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.
Scenarist is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k 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 2.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Scenarist: Content To Video (architectds/modeldock, 117 stars), Canghe Comic (freestylefly/canghe-skills, 461 stars), Tutti UI System (tutti-os/tutti, 3.8k stars) and 3D Animation Short Generator (tl2012tl/comfyUI-llama-TE, 241 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
alecs5am (a GitHub user) maintains it in alecs5am/ralphy, which has 138 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on September 22, 2026.
Source: alecs5am/ralphy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.