Skip to content
Education
Skill

/pro-editing

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

From plugin
openmaic
43k25 skills

Claude Code

$ npx -y skills add thu-maic/openmaic --skill pro-editing --agent claude-code

SKILL.md

pro-editing.SKILL.md
name: pro-editing
title: "专业编辑"
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.

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. Source output paginates after 12,000 characters; follow `nextOffset` until the target field and its exact anchor are available. Do not reconstruct omitted text. **`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.

For `str_replace`, copy the **decoded field value**, not the JSON serialization: actual newlines and literal backslash+n are different characters. Preserve HTML marks, whitespace and quotes exactly in `oldText`; never invent styles from the visible-text view. Supply the field's explicit `path`. The same rule applies to `newText`: preserve the intended code's escaping, not the surrounding JSON's. After an anchor rejection, use the returned diagnostic and re-read source where needed; correct the anchor rather than repeating the same failed patch.

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 intent | Tool | Operation | | ----------------------------------------------- | -------------------------------- | -------------------------------------------------------------------------------- | | Fix or rewrite text on a slide | `patch_stage` | `set` 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 overlap | `patch_stage` | `set` on `/content/canvas/elements/N/left` (or `top` / `width` / `height` / `rotate`), one number per op | | Recolor or restyle an element | `patch_stage` | `set` on the renderer-owned style path — `…/defaultColor`, `…/fill`, `…/text/defaultColor`, `…/color` | | Drop an optional field | `patch_stage` | `remove` on that path | | Swap an image or media source | `patch_stage` | `set` on `/content/canvas/elements/N/src` | | Restack slide elements | `patch_stage` | `set` on `/content/canvas/elements` — the whole array, reordered, same ids and types | | Add or remove a slide element | `patch_stage` | `add_element` (complete JSON, no `id`) / `delete_element` | | Fix quiz questions, options, answers, scoring | `patch_stage` | `set` / `remove` against `/content/questions/...`; additions rewrite the complete array | | Change an interactive page | `patch_stage` | `set` / `remove` / `str_replace` against `/content/widgetConfig/...` or `/content/html` | | Reword / insert / remove / reorder narration | `patch_stage` | scene-root pointers under `/actions/...`; rewrite a complete array for insertion/reorder | | Edit a PBL brief, roles, milestones, microtasks | `patch_stage` | `set` / `remove` against `/content/projectV2/...` | | Rename / insert / delete / reorder whole pages | `edit_deck` | `retitle` / `insert` / `delete` / `reorder` | | Rewrite one page from scratch | `generate_scene` + `instruction` | **only** on explicit user intent for a full-page

Read more
@thu-maic
Ships withopenmaic

Open Multi-Agent Interactive Classroom — Get an immersive, multi-agent learning experience in just one click

Stars on GitHub

Momentum

stars in total
43.2k
Star history of thu-maic/openmaic on GitHub, a chart by star-history.com

Other skills on openmaic.

build-personal-skill

build-personal-skill

Evidence-based creation of a reusable personal course-making Skill from the user's own classroom and chat history. Use when the…

@thu-maic@thu-maicInstall Skill
curriculum-planner

curriculum-planner

Multi-stage series — a request for several classrooms that belong together, like 「7 天学 Python」, a four-week onboarding track, a…

@thu-maic@thu-maicInstall Skill
deep-interactive

deep-interactive

Deep Interactive courses. Plans the course so the learner manipulates something on most pages — simulations, diagrams they…

@thu-maic@thu-maicInstall Skill
deep-research

deep-research

Courses whose content rests on current, external or real-world facts that must be verified against live sources before being…

@thu-maic@thu-maicInstall Skill
fact-check

fact-check

Improve factual reliability while creating or reviewing a course or supplied content. Use when the user asks to fact-check,…

@thu-maic@thu-maicInstall Skill
feynman-learning

feynman-learning

Turn any concept, lesson, slide deck, or source material into a Feynman learning cycle in which learners explain first, expose…

@thu-maic@thu-maicInstall Skill

More skills from other plugins.

lesson-quiz

lesson-quiz

Test a learner on a single Claude Code tutorial lesson (01-10) with 10 questions, scoring answers and flagging weak spots. Use…

@luongnv89@luongnv89Install Skill

Questions about pro-editing.

Which coding agents can use pro-editing?
pro-editing installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.