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
37k24 skills
Install
$ npx -y skills add thu-maic/openmaic --skill pro-editing --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/pro-editing

Context 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

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.

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 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 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

Read more
Ships withopenmaic

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

Get the whole plugin
Stats
36,703
Stars
5,803
Forks
Active
Maintenance
TypeScript
Language
MIT
License
15h ago
Last commit
6mo ago
Created

Repo: thu-maic/openmaic

Other skills on openmaic.