Agent skill

OpenMAIC Course Editing

by THU-MAIC in THU-MAIC/OpenMAIC

Makes surgical edits to a course that already exists: take stock of its pages, read each target before changing it, and touch only what was asked for.

MITAuto-check passedEducation

Install OpenMAIC Course Editing

skills CLI
$ npx skills add THU-MAIC/OpenMAIC --skill pro-editing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install THU-MAIC/OpenMAIC pro-editing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/THU-MAIC/OpenMAIC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/agent-runtime/pro-editing .claude/skills/pro-editing && rm -rf skills-src

Use ~/.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/

Facts

Skill name
pro-editing
GitHub stars
40k
Token cost
~2.8k tokens
SKILL.md length
1,508 words
Files
2
Skills in repo
25
Repo updated
First seen
Licence
MIT

At a glance

Makes surgical edits to a course that already exists: take stock of its pages, read each target before changing it, and touch only what was asked for.

  • Works in 4 steps: Call list_scenes to take stock of the… → Do not plan a replacement stage. The… → If the request is broad ("make it… → …
  • Fixing or polishing a page in a course that already exists
  • SKILL.md covers Enter the course before…, Read before every change, Choose the smallest operation and Minimum-edit discipline, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

This skill applies when a persisted course already has pages and the request is to revise, polish, restructure or repair them: fix a page, tune a layout, repair a quiz, reword narration, reorder the deck or raise the quality of the whole course. It starts by calling list_scenes to map every page with its order and type, and it does not plan a replacement stage. Broad requests such as make it better are turned into a concrete page-by-page plan before anything is touched.

Every change is preceded by a read of the target page, because the element, question and action IDs it returns are the only valid edit addresses and a stale ID means a failed edit. read_stage has three levels: a compact tree map, a source level with the exact persisted JSON including styles and geometry that any slide write needs, and a text level that lists every text element to prove no leftover copy remains. A course still being generated is read-only until generation finishes, so the agent tells you to wait. An outline-constraints.json file ships alongside.

When your agent uses it

  • Fixing or polishing a page in a course that already exists
  • Repairing a quiz or rewording the narration of existing pages
  • Reordering the deck or raising the quality of a whole course

Example prompts

  • “Fix the cramped layout on page five of the course.”
  • “Reword the narration on the second and third pages so it sounds less formal.”
  • “Make the whole course better, but tell me which pages you plan to touch first.”

Requirements

  • An existing persisted course in the OpenMAIC runtime

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Call list_scenes to take stock of the whole course: every persisted page,
  2. Do not plan a replacement stage. The course has a structure; you are not
  3. If the request is broad ("make it better"), turn it into a concrete plan
  4. If a read says the course is still being generated, it is read-only until

What it can do on your machine

Read from SKILL.md and the folder at commit 32f5923. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    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.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

OpenMAIC Course Editing loads about 2.8k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 1,508 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~82
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from THU-MAIC/OpenMAIC at commit 32f5923, republished under its MIT licence (© THU-MAIC). 1,508 words, ~2,754 tokens.

Download SKILL.mdSave it as .claude/skills/pro-editing/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
pro-editing
description
Professional editing of a course that already exists. Use when the user wants to revise, improve, restructure or polish pages the course already has — fix a page, tune a layout, repair a quiz, reword narration, reorder the deck, or raise the quality of the whole course. Not for building a new course from scratch.
title
专业编辑

Professional course editing

You are editing a persisted course, not generating one. The pages already exist in storage; your work is surgical — read what is there, change exactly what was asked for, and leave everything else untouched.

Enter the course before touching it

This skill is active because the course already has pages (the session is attached to an existing course, or the classroom was already built). Before any edit:

  1. Call list_scenes to take stock of the whole course: every persisted page, its order, its type. This list — not your assumption — is the map you edit by.
  2. Do not plan a replacement stage. The course has a structure; you are not replanning it.
  3. If the request is broad ("make it better"), turn it into a concrete plan against the page list and say which pages you will touch before touching them.
  4. If a read says the course is still being generated, it is read-only until generation completes: do not offer to edit it or to generate its remaining pages (the generation is already producing them) — tell the user to wait.

Read before every change

Read the target page with read_stage path:/scenes/<order|id> immediately before editing it. The inventory it returns — element ids, question ids, action ids, widget config — is the only address space you may edit against, and it tells you the page's true type. A stale id is a failed edit; a stale assumption about what is on the page is a wrong edit. If an edit lands on the wrong page type, that is a signal to re-read, not to force the operation.

read_stage has three levels, and a slide edit uses the deep one. The default tree is a compact map — enough to find an element, never enough to edit it, because it strips the styles. Before any slide write, read the page with detail:"source": it returns the page's exact persisted JSON (all style fields, raw content HTML with inline marks and line breaks, exact geometry, z-order), and it is the root your patch paths address — a field read at /content/canvas/elements/2/left is written back through that same path. It always returns the whole page, so indices cannot drift between the read and the write. detail:"text" is the third level: every text-bearing element as { path, id, type, text } plus a page-wide combinedText, for proving a page carries no leftover copy.

Choose the smallest operation

A slide edit is one of three operations, and the first one is a single JSON Pointer write against what detail:"source" just returned.

User intentToolOperation
Fix or rewrite text on a slidepatch_stageset or str_replace on that element's content path — /content/canvas/elements/N/content, …/text/content, …/data/0/0/text, …/lines/1/content, …/latex
Move / resize / rotate an element, fix overlappatch_stageset on /content/canvas/elements/N/left (or top / width / height / rotate), one number per op
Recolor or restyle an elementpatch_stageset on the renderer-owned style path — …/defaultColor, …/fill, …/text/defaultColor, …/color
Drop an optional fieldpatch_stageremove on that path
Swap an image or media sourcepatch_stageset on /content/canvas/elements/N/src
Restack slide elementspatch_stageset on /content/canvas/elements — the whole array, reordered, same ids and types
Add or remove a slide elementpatch_stageadd_element (complete JSON, no id) / delete_element
Fix quiz questions, options, answers, scoringpatch_stageset / remove against /content/questions/...; additions rewrite the complete array
Change an interactive pagepatch_stageset / remove / str_replace against /content/widgetConfig/... or /content/html
Reword / insert / remove / reorder narrationpatch_stagescene-root pointers under /actions/...; rewrite a complete array for insertion/reorder
Edit a PBL brief, roles, milestones, microtaskspatch_stageset / remove against /content/projectV2/...
Rename / insert / delete / reorder whole pagesedit_deckretitle / insert / delete / reorder
Rewrite one page from scratchgenerate_scene + instructiononly on explicit user intent for a full-page rewrite

Rules of the matrix:

  • One intent → one operation. Do not bundle changes you cannot individually name.
  • Address the leaf. The smallest path that isolates your change is the correct one; writing a whole object back is how a neighbouring style field disappears.
  • A patch_stage op cannot change identity — not the canvas id, not the element id set, not an element's type. Those go through add_element / delete_element, and a type change is a delete plus an add. Content itself is unchecked — it is stored exactly as written, so slide-dsl is the only thing standing between your markup and a broken page.
  • A rejected patch changed nothing. A bad path, an out-of-bounds index, an unknown field, a wrong type or an invalid resulting page fails loud with the page as it was. Re-read and resubmit; never force.
  • add_element takes one complete element JSON without id — the server validates the same structure contract as a patch, assigns the id, and inserts at afterId or index (one or the other).
  • Nothing normalises your values. No colour, font or theme is rewritten toward a house style, so an edit that looks wrong is your value, not the tool's.
  • edit_deck insert creates an empty stub; fill it with generate_scene using that new page's explicit type and brief, or patch an already valid scene.
  • generate_scene with instruction discards the page and regenerates it. That is a rewrite, not an edit: reserve it for the moment the user plainly wants a page rebuilt, never as a shortcut around careful editing.
  • If the session has attached materials or web access, use them to ground the content of your edits — never as an excuse to rebuild pages nobody asked about.
Show full SKILL.md (615 more words)Show less

Minimum-edit discipline

  • Change exactly what was asked for. Do not restyle untouched elements, do not reword narration nobody complained about, do not "improve" adjacent pages while you are on one page.
  • Keep the course's own voice: match its existing terminology, register and visual language. An edit should not be visible as an edit.
  • Prefer fine per-field patch_stage ops over generate_scene whenever the target is narrower than a whole page.
  • For any slide edit that touches geometry, colour, text length or rich-text structure, load slide-craft: it carries the design law the page was drawn under — the text height table, the type scale, contrast pairs, spacing rhythm, and which field on which element type actually reaches the screen.
  • When you need the field itself — its name, its legal values, the path that addresses it, which of two fields the renderer reads — that is slide-dsl.

Look → edit → look, on a budget

For layout-sensitive changes (positioning, density, new elements, alignment), verify with render_scene_preview when it is available: look at the render, edit, look once more. Budget at most two preview rounds per page — each render costs a tool call and the whole run has a hard call cap. Do not preview pages you did not touch, and do not loop past the budget: if two rounds have not converged, stop and tell the user what remains instead of burning the rest of the run on one page.

Narration audio follows text

Setting a speech action's /actions/N/text with patch_stage clears the audio of a reworded line, and inserted lines have none. After any speech wording change, call generate_tts on that page before moving on — its default mode synthesizes only the lines missing audio, which is exactly what you need. Reworded text without regenerated audio ships a silent page.

Close with a consistency pass

Before telling the user the work is done:

  1. list_scenes — confirm the page list matches what you intended: count, order, titles.
  2. Each edit result already carried the fresh inventory of its page; verify against it, and re-read with read_stage only where a result left doubt.
  3. Sweep the pages you touched for cross-page drift your edits could have introduced: the same concept named the same way, uniform units and terminology, a style you introduced applied everywhere it belongs.
  4. Every speech action on a touched page must have an audioId (read_stage shows it); any page missing audio gets generate_tts.

Share the course with human editors

Saves are last-write-wins per page, and a human authoring in the browser at the same time can overwrite you as easily as you can overwrite them. Treat the course as shared ground:

  • Read fresh, then write. The read_stage call immediately before an edit is not a formality — it is how you avoid writing over a change the user made since you last looked.
  • Small, incremental writes. Every tool call persists its change automatically as it lands; a sequence of small writes loses less to a conflict than one sweeping rewrite. Never accumulate a batch "prepared but not written" — write as you go.
  • Yield when the user is editing. If the user says they are changing the same page, or a fresh read shows content you did not write, stop, re-read, and reconcile before writing again. Never overwrite a human's fresher version with your stale snapshot.

Budget

There is no hard tool-call cap, but every extra call is latency the user watches. Spend calls on edits, not ceremony: one list_scenes at entry, one read_stage per page before its edits, the edits themselves, generate_tts where wording changed, a preview round only where layout is genuinely at risk. If the request is large, do the highest-value edits first and tell the user what remains.

© 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

Files

SKILL.md and 1 other file in skills/agent-runtime/pro-editing of THU-MAIC/OpenMAIC.

  • SKILL.md
  • outline-constraints.json

Open the folder on GitHubat commit 32f5923

Compare with similar skills

OpenMAIC Course Editing 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.

OpenMAIC Course Editing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
OpenMAIC Course Editing this skillTHU-MAIC/OpenMAIC40k—~2.8kAutomated safety check: PassMIT
Teaching Resource Research Skillmingchen666/Reviva237—~1kAutomated safety check: PassNone
Codebase to Coursezarazhangrui/codebase-to-course5.7k—~4.4kAutomated safety check: PassNone
AI Engineering Project Tutorrohitg00/ai-engineering-from-scratch66k—~1.6kAutomated safety check: PassMIT
Hung-Yi Lee Teaching Stylevoidful/hung-yi-lee-skill1.3k—~13kAutomated safety check: PassNone
Claude Code Self-Assessment Advisorlhfer/claude-howto-zh-cn2.3k—~1.7kAutomated safety check: PassMIT

Similar skills

  • Find, verify, and curate teaching resources for lesson preparation.

    237 GitHub stars~1k tokensUpdated 17 days ago
    EducationAuto-check passed
  • Codebase to Course

    zarazhangrui/codebase-to-course

    Turns a codebase into an interactive single-page HTML course for non-technical learners, with scroll modules, animated diagrams, quizzes and plain-English code translations.

    5.7k GitHub stars~4.4k tokensUpdated 6 mo ago
    EducationAuto-check passed
  • AI Engineering Project Tutor

    rohitg00/ai-engineering-from-scratch

    Tutors a learner through one stage of a hands-on AI engineering project per session: lesson, prediction, code, grader run and reflection, with hints but never full solutions.

    66k GitHub stars~1.6k tokensUpdated 2 days ago
    EducationAuto-check passed
  • Hung-Yi Lee Teaching Style

    voidful/hung-yi-lee-skill

    Explains machine learning, LLMs, AI agents and speech modeling in a Hung-Yi Lee-inspired teaching style, drawing on a knowledge base built from his lectures and research references.

    1.3k GitHub stars~13k tokensUpdated 1 mo ago
    EducationAuto-check passed
  • Claude Code Self-Assessment Advisor

    lhfer/claude-howto-zh-cn

    Quizzes you on Claude Code in a quick or deep mode, scores your level across 10 topics and recommends what to learn next, in Chinese.

    2.3k GitHub stars~1.7k tokensUpdated 2 mo ago
    EducationAuto-check passed
  • AI Engineering Course Guide

    rohitg00/ai-engineering-from-scratch

    Routes a topic, question or bug to the exact lessons in the AI Engineering from Scratch curriculum and suggests the next command to run.

    66k GitHub stars~1.7k tokensUpdated 2 days ago
    EducationAuto-check passed

More from THU-MAIC/OpenMAIC

All 25 skills in this repo
  • Guides setup, classroom generation and secondary development for OpenMAIC, the multi-agent interactive classroom, one confirmed phase at a time.

    40k GitHub stars~1.7k tokensUpdated yesterday
    Auto-check: notes
  • Designs a Chinese K-12 classroom for one OpenMAIC stage around the core-literacy model, using authentic tasks, performance assessment and observable evidence.

    40k GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • 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.

    40k GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Designs a review-and-practice lesson around an independent first attempt, targeted feedback, supported practice, a fresh independent check and a next step.

    40k GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • 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.

    40k GitHub stars~678 tokensUpdated yesterday
    Auto-check passed
  • Curriculum Planner

    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.

    40k GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about OpenMAIC Course Editing

What does OpenMAIC Course Editing do?

Makes surgical edits to a course that already exists: take stock of its pages, read each target before changing it, and touch only what was asked for. This skill applies when a persisted course already has pages and the request is to revise, polish, restructure or repair them: fix a page, tune a layout, repair a quiz, reword narration, reorder the deck or raise the quality of the whole course. It starts by calling list_scenes to map every page with its order and type, and it does not plan a replacement stage.

When should I use OpenMAIC Course Editing?

OpenMAIC Course Editing fits situations like: fixing or polishing a page in a course that already exists; repairing a quiz or rewording the narration of existing pages; reordering the deck or raising the quality of a whole course.

How do I install OpenMAIC Course Editing in Claude Code?

Run `npx skills add THU-MAIC/OpenMAIC --skill pro-editing -a claude-code`. Or copy the skill folder (skills/agent-runtime/pro-editing in THU-MAIC/OpenMAIC) into .claude/skills/pro-editing in your project. Claude Code loads it when a task matches its description.

How do I install OpenMAIC Course Editing in Codex?

Run `npx skills add THU-MAIC/OpenMAIC --skill pro-editing -a codex`. Or copy the skill folder (skills/agent-runtime/pro-editing in THU-MAIC/OpenMAIC) into .agents/skills/pro-editing in your project. Codex loads it when a task matches its description.

Can I use OpenMAIC Course Editing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add THU-MAIC/OpenMAIC --skill pro-editing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pro-editing, .gemini/skills/pro-editing, .github/skills/pro-editing and .opencode/skills/pro-editing in your project.

What does OpenMAIC Course Editing need to run?

SKILL.md names no scripts, command-line tools or credentials: OpenMAIC Course Editing is instructions for the agent only. Our summary lists: An existing persisted course in the OpenMAIC runtime.

Does OpenMAIC Course Editing access the network?

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.

Is OpenMAIC Course Editing safe to install?

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.

What licence does OpenMAIC Course Editing use?

OpenMAIC Course Editing is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does OpenMAIC Course Editing use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to OpenMAIC Course Editing?

Skills that share tags, products or a category with OpenMAIC Course Editing: Teaching Resource Research Skill (mingchen666/Reviva, 237 stars), Codebase to Course (zarazhangrui/codebase-to-course, 5.7k stars), AI Engineering Project Tutor (rohitg00/ai-engineering-from-scratch, 66k stars) and Hung-Yi Lee Teaching Style (voidful/hung-yi-lee-skill, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains OpenMAIC Course Editing?

THU-MAIC (a GitHub organization) maintains it in THU-MAIC/OpenMAIC, which has 40,120 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 8, 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.