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 user asks to summarize,…
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
$ npx -y skills add thu-maic/openmaic --skill pro-editing --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/pro-editingContext preview
The summary Claude sees to decide when to auto-load this skill.
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
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.
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.
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.
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.
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 rewrite |
Rules of the matrix:
one; writing a whole object back is how a neighbouring style field disappears.
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.
unknown field, a wrong type or an invalid resulting page fails loud with the page as it was. Re-read and
Open Multi-Agent Interactive Classroom — Get an immersive, multi-agent learning experience in just one click
Repo: thu-maic/openmaic
Evidence-based creation of a reusable personal course-making Skill from the user's own classroom and chat history. Use when the user asks to summarize,…
Multi-stage series — a request for several classrooms that belong together, like 「7 天学 Python」, a four-week onboarding track, a semester unit split across…
Deep Interactive courses. Plans the course so the learner manipulates something on most pages — simulations, diagrams they explore, code they run, games, 3D…
Courses whose content rests on current, external or real-world facts that must be verified against live sources before being taught — recent events, market or…
Improve factual reliability while creating or reviewing a course or supplied content. Use when the user asks to fact-check, verify accuracy, reduce…
Turn any concept, lesson, slide deck, or source material into a Feynman learning cycle in which learners explain first, expose the smallest gap, rebuild the…