Teaching Resource Research Skill
mingchen666/Reviva
Find, verify, and curate teaching resources for lesson preparation.
Builds a new course page in an existing page's design by duplicating the model page and replacing its words one content slot at a time with patch operations.
$ npx skills add THU-MAIC/OpenMAIC --skill page-clone -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install THU-MAIC/OpenMAIC page-clone --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/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/agent-runtime/page-clone .claude/skills/page-clone && 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 "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .claude/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-cloneType 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 THU-MAIC/OpenMAIC --skill page-clone -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install THU-MAIC/OpenMAIC page-clone --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/agent-runtime/page-clone .agents/skills/page-clone && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .agents/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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 THU-MAIC/OpenMAIC --skill page-clone -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install THU-MAIC/OpenMAIC page-clone --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/agent-runtime/page-clone .cursor/skills/page-clone && 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 "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .cursor/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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/THU-MAIC/OpenMAIC.git --path skills/agent-runtime/page-clone--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 THU-MAIC/OpenMAIC --skill page-clone -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install THU-MAIC/OpenMAIC page-clone --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/agent-runtime/page-clone .gemini/skills/page-clone && 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 "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .gemini/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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 THU-MAIC/OpenMAIC page-cloneInstalls 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 THU-MAIC/OpenMAIC --skill page-clone -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/agent-runtime/page-clone .github/skills/page-clone && 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 "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .github/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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 THU-MAIC/OpenMAIC --skill page-clone -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install THU-MAIC/OpenMAIC page-clone --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/agent-runtime/page-clone .opencode/skills/page-clone && 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 "page-clone" agent skill from https://github.com/THU-MAIC/OpenMAIC/tree/main/skills/agent-runtime/page-clone into .opencode/skills/page-clone/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-clone", 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.
page-cloneBuilds a new course page in an existing page's design by duplicating the model page and replacing its words one content slot at a time with patch operations.
To give a new page the look of one the course already has, the agent copies it with duplicate_scene at the chosen position and a title that names the new page, then rewrites only the words. The skill explains why copy-then-edit is the only clone path: generate_scene re-rolls a page from its outline entry and invents a fresh element tree, which would destroy the design being preserved.
After the copy, the agent reads the page with read_stage at source detail to get the exact JSON that serves as both fidelity source and address space, decides element by element what is content and what is skeleton, and calls patch_stage once per content slot with a set operation on the exact path holding the words. Rules, bands, page numbers, logos and background art stay untouched, geometry and style paths are never patched, and a final read at text detail checks the result. It is not for revising a page you already like, which is pro-editing, or for course-wide layout assignment, which is style-clone.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6a84dbe. 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.
OpenMAIC Page Clone loads about 3.5k tokens when it runs. Until then it costs about 135 tokens; SKILL.md has 1,928 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 THU-MAIC/OpenMAIC at commit 6a84dbe, republished under its MIT licence (© THU-MAIC). 1,928 words, ~3,484 tokens.
.claude/skills/page-clone/SKILL.md (or your agent's skills folder).The design already exists on another page. Your job is to put new content into that design without redrawing it: copy the page, then swap what it says.
Copy-then-edit is the only clone path in this runtime. generate_scene always
re-rolls a page from its outline entry — the model invents a fresh element tree
every time — so calling it on a copied page destroys exactly the design you came
for. Nothing here validates the shape of your result either: the design is
preserved because you copied it, and the judgement about which elements are
content and which are the skeleton is yours.
duplicate_scene({ templateSceneId, targetOrder, title }) — an exact copy
of the model page at the position you want (templateOrder works too, but an
id is safer). The copy carries the full content, no narration actions, and a
new outline entry. Pass a title that names the NEW page; the entry inherits
the model page's brief, and a copy still called 「第 3 章回顾」 misleads both
the learner and the narration step.read_stage, path:/scenes/<order|id>,
detail:"source" — this is your address space
and your fidelity source. It returns the whole page's persisted JSON, including
raw content HTML, inline spans, fonts, colours, fills, shadows, geometry and
z-order, and it is the root your patch paths are written against: a field you
read at /content/canvas/elements/2/content is written back through that same path.
Copy unchanged markup and style fields from this result; do not reconstruct
them from stripped text.patch_stage once per content slot, with op:"set" on the exact
path that holds that slot's words — /content/canvas/elements/3/content for a
paragraph, /content/canvas/elements/5/data/0/0/text for a table cell. One leaf per
call: everything you do not name keeps the value you copied. slide-dsl is the
manual for which field holds the words in each element type. Do not patch
geometry or style paths while cloning — they ARE the design you copied.read_stage detail:"text" after the
edits. It returns every
text-bearing element as { path, id, type, text } plus a page-wide
combinedText, so you read the whole page's words in one call and get the
pointer to fix with them. Search it for source-topic residue; the read reports,
and you decide what is stale, then set, remove, or delete_element it.generate_actions on the copy to give it narration (audio is on by
default). A duplicated page arrives silent.Work one page at a time and re-read before you edit. Every patch_stage result
already carries the page's fresh inventory, so a run of edits on the same page
needs one read_stage call at the start, not one
per call.
For a cloned slide, patch_stage uses set, remove, str_replace,
add_element, and delete_element; for cloning the usual choice is set on
the smallest content leaf. The only question is which path carries the change.
| Need | Call | What really happens |
|---|---|---|
| New words in a text block | set /content/canvas/elements/N/content | Stores your HTML byte for byte — nothing filters it; preserve the source element's <span> marks and inline styles while changing the words |
| New words in a shape's label | set /content/canvas/elements/N/text/content | Only the label's HTML moves; font, colour, vertical alignment, line height, shape fill and path all stay |
| One table cell | set /content/canvas/elements/N/data/0/0/text | One cell's plain text; every other cell, id, colspan, rowspan and per-cell style is untouched |
| One line of code | set /content/canvas/elements/N/lines/1/content | One line's text, with every line id kept — language, filename, font size and box survive |
| A formula | set /content/canvas/elements/N/latex | Replaces the source and re-renders the cached KaTeX html the renderer actually paints |
| A chart label or number | set /content/canvas/elements/N/data/labels/2 | One entry; keep labels, legends and series dimensionally consistent |
| A different image | set /content/canvas/elements/N/src | Points the element at another source. It never creates a picture — get a real src from generate_image first, and keep the original rather than invent a URL |
| Nudge a box | set /content/canvas/elements/N/left (or top / width / height) | One number at a time. On a cloned page this is a repair, not a step |
| Drop an optional field | remove /content/canvas/elements/N/fill | Deletes that key. remove on a path that is not there fails, and so does removing a required field |
| One content slot too many | delete_element (elementId) | Removes the element and any animation bound to it |
| A genuinely new element | add_element (complete element JSON, no id) | Validates every field and rich-text value, assigns the id, inserts at afterId or index |
| Restack overlapping elements | set /content/canvas/elements | The only change with no leaf — write the array whole, reordered, with the same ids and types |
| Rename the page | edit_deck retitle | Title only, in both the deck and the outline entry |
Three properties make this safe to lean on, and all three are worth knowing before you do: only the path you name changes, identity is not patchable (the id set and each id's type must come back identical, which is why adding or removing an element has its own op), and a rejected patch changes nothing — a bad path, an unknown field, unsafe HTML or an invalid result fails loud with the page as it was. Nothing normalises your colours or fonts toward a house style either, which is the property that makes a copied design survive editing at all.
The content rule is simple: source HTML in, source HTML out. Change the text
inside the returned paragraphs and spans; do not flatten the block to plain text
or synthesize fresh styling. For lists, keep one <p> per item with the marker
in the text (slide-craft explains why <ul> does not render its markers here).
When a cloned page needs one more slot, the cheapest honest source is an element
already on it: read its JSON and add_element a copy with the words and box you
want. add_element is full fidelity, so its caller supplies every geometry and
style field — which is why an existing element is a better starting point than a
blank one, and why this is the last resort rather than a step.
This is the normal case, not an error: a layout with three bullet slots and content with seven points is a mismatch you resolve, and no tool will resolve it for you. In order of preference:
edit_deck delete).add_element a copy of the
closest content element, with its box set into the rhythm of the ones around it
(match their left edge and spacing exactly, taken from the source boxes) and
the new words already in it. You are now drawing, and it shows if you are careless.Fewer content slots than the layout has is the easier direction: fill what you
can meaningfully fill and delete_element the rest. Never leave a template's words
standing on the page. A slot you neither replaced nor deleted is a bug — the
old subject leaking into the new one — and a detail:"text" read
with read_stage detail:"text" is the sweep
that catches it before shipping.
Text sized for the model page's words is not sized for yours. Aim for the same order of magnitude as the text you replaced — that length was chosen for that box, and it is the only sizing information you have. When your replacement runs much longer, shorten the wording rather than resizing the box.
Verify with render_scene_preview when it is registered, and spend the calls
where they buy something: the first page you clone from a given model page,
and any later clone whose text is visibly longer than what it replaced. Skip it
otherwise; previews cost calls. If a page overflows, load pro-editing and
converge inside its budget of two preview rounds — shorten text first, and set a
box only when the text is already tight. If two rounds have not converged, move the
content to a roomier layout or name the page to the user. Do not ship a page with
text running off it.
generate_actions on the copy, with a styleDirective when the surrounding
pages have a register worth matching. Narration is written from the page's
persisted content plus its outline entry, and that entry's brief came from the
model page — so the content you just wrote has to be unambiguous on its own, and
the title has to be the new page's title. Then read the result back
with read_stage detail:"source" and check both halves
of the result: every speech action carries an audioId, and every speech line is
about this page's subject rather than the model page's — a narrated wrap-up or
a topic name inherited from the brief is residue exactly as template words on the
slide are. Repair it with patch_stage on that action's /actions/N/text
pointer, then generate_tts the page
so the audio matches the words.
style-clone governs the course-level job: reading an imported deck as a
library of layouts, classifying them, and assigning one to each outline entry.
It calls into this skill for the per-page mechanics.slide-dsl is the field manual for the JSON you are patching — the ten
element types, which field holds the words in each, what values are legal, and
what the renderer really does with the HTML you write. Load it when you are about to patch a
field you have not patched before, or when a patch comes back rejected.pro-editing governs editing a page that is already the page you want.
Load it when a clone comes out wrong, and follow its preview budget.slide-craft is the design law the replacement content has to satisfy —
the height table, the type scale, contrast pairs, how rich text really renders.
Load it when a slot needs more than a like-for-like sentence swap.stage-design still governs the build of the stage as a whole.generate_scene on a copied page. It re-rolls the
element tree from the outline entry and the borrowed design is gone.read_stage detail:"text" returns every
element's words plus one combinedText; read all of it, and fix what it turns
up at the path it hands you. The read reports — it never decides or edits.duplicate_scene, then that page's edits, then its
actions — then the next page. Each write persists as it lands.© THU-MAIC, 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 skills/agent-runtime/page-clone of THU-MAIC/OpenMAIC.
Open the folder on GitHubat commit 6a84dbe
OpenMAIC Page Clone 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 |
|---|---|---|---|---|---|---|
| OpenMAIC Page Clone this skillTHU-MAIC/OpenMAIC | 40k | — | ~3.5k | Automated safety check: Pass | MIT | |
| Teaching Resource Research Skillmingchen666/Reviva | 241 | — | ~1k | Automated safety check: Pass | None | |
| Lecture Slides SummarizerLi-Baichuan-James/summarize-slides-skill | 312 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Canva Classroom Helpercanva-sdks/canva-skills | 117 | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Canvas Reading AnnotationX-isdoingreat/canvas-pilot | 125 | — | ~2.3k | Automated safety check: Pass | AGPL-3.0 | |
| Mira Quizsandeco/mira-animator | 218 | — | ~1.9k | Automated safety check: Pass | Custom licence |
mingchen666/Reviva
Find, verify, and curate teaching resources for lesson preparation.
Li-Baichuan-James/summarize-slides-skill
Condenses a lecture PDF into an exam-focused LaTeX cheat sheet and compiled PDF with page citations, bilingual terms, formulas and only the diagrams that help.
canva-sdks/canva-skills
Turn a lesson plan into a teaching slide deck in Canva. An agent skill from canva-sdks/canva-skills.
X-isdoingreat/canvas-pilot
A skill your agent uses for an approved short academic-reading assignment routed by canvas-execute, including in-place PDF annotation, answer blanks, video worksheets, or short reflection drafts.
sandeco/mira-animator
Slide de QUIZ AO VIVO no Mira: a plateia escaneia um QR-code e responde uma múltipla escolha num Google Forms; o slide lê as respostas via Google Sheets gviz/JSONP.
CraftOS-dev/CraftBot
Microsoft Excel API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.
THU-MAIC/OpenMAIC
Guides setup, classroom generation and secondary development for OpenMAIC, the multi-agent interactive classroom, one confirmed phase at a time.
THU-MAIC/OpenMAIC
Designs a Chinese K-12 classroom for one OpenMAIC stage around the core-literacy model, using authentic tasks, performance assessment and observable evidence.
THU-MAIC/OpenMAIC
Maps the structure of an OpenMAIC stage document so an agent can find the right path, read it and patch quizzes, widgets, actions and project pages without guessing.
THU-MAIC/OpenMAIC
Designs a review-and-practice lesson around an independent first attempt, targeted feedback, supported practice, a fresh independent check and a next step.
THU-MAIC/OpenMAIC
Derives a reusable personal skill for course-making from a representative sample of the user's own past classrooms and chat history, confirmed with them before saving.
THU-MAIC/OpenMAIC
Plans a multi-classroom series such as a seven-day course, clarifies the brief in rounds, gets sign-off on the full lesson list, then builds each stage in a shared folder.
Categories
Builds a new course page in an existing page's design by duplicating the model page and replacing its words one content slot at a time with patch operations. To give a new page the look of one the course already has, the agent copies it with duplicate_scene at the chosen position and a title that names the new page, then rewrites only the words. The skill explains why copy-then-edit is the only clone path: generate_scene re-rolls a page from its outline entry and invents a fresh element tree, which would destroy the design being preserved.
OpenMAIC Page Clone fits situations like: making a new course page that inherits the design of an existing one; reusing a page from an imported deck as the model for new content; replacing a copied page's text without disturbing its layout.
Run `npx skills add THU-MAIC/OpenMAIC --skill page-clone -a claude-code`. Or copy the skill folder (skills/agent-runtime/page-clone in THU-MAIC/OpenMAIC) into .claude/skills/page-clone in your project. Claude Code loads it when a task matches its description.
Run `npx skills add THU-MAIC/OpenMAIC --skill page-clone -a codex`. Or copy the skill folder (skills/agent-runtime/page-clone in THU-MAIC/OpenMAIC) into .agents/skills/page-clone 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 THU-MAIC/OpenMAIC --skill page-clone -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/page-clone, .gemini/skills/page-clone, .github/skills/page-clone and .opencode/skills/page-clone in your project.
SKILL.md names no scripts, command-line tools or credentials: OpenMAIC Page Clone is instructions for the agent only. Our summary lists: A course with at least one existing model page, in the OpenMAIC runtime.
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.
OpenMAIC Page Clone is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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 OpenMAIC Page Clone: Teaching Resource Research Skill (mingchen666/Reviva, 241 stars), Lecture Slides Summarizer (Li-Baichuan-James/summarize-slides-skill, 312 stars), Canva Classroom Helper (canva-sdks/canva-skills, 117 stars) and Canvas Reading Annotation (X-isdoingreat/canvas-pilot, 125 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
THU-MAIC (a GitHub organization) maintains it in THU-MAIC/OpenMAIC, which has 40,213 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 9, 2026.
Source: THU-MAIC/OpenMAIC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.