From workflows
This skill should be used when the user asks to 'revise workshop slides', 'fix presentation', 'update slides', 'change slide', 'fix notes', 'workshop feedback', or needs to modify existing workshop presentation slides or speaker notes.
npx claudepluginhub edwinhu/workflows --plugin workflowsThis skill uses the workspace's default tool permissions.
**Announce:** "I'm using workshop-revise to apply changes to the workshop presentation."
Implements Playwright E2E testing patterns: Page Object Model, test organization, configuration, reporters, artifacts, and CI/CD integration for stable suites.
Guides Next.js 16+ Turbopack for faster dev via incremental bundling, FS caching, and HMR; covers webpack comparison, bundle analysis, and production builds.
Discovers and evaluates Laravel packages via LaraPlugins.io MCP. Searches by keyword/feature, filters by health score, Laravel/PHP compatibility; fetches details, metrics, and version history.
Announce: "I'm using workshop-revise to apply changes to the workshop presentation."
Load ALL Typst conventions before touching any files:
!uv run python3 ${CLAUDE_SKILL_DIR}/../../scripts/load-constraints.py workshop-revise
You MUST have these constraints loaded before any edits. No claiming you "remember" them.
This skill may run in a new session. Load ALL needed context before touching any files.
.planning/SOURCES.md — paper metadata (title, authors, affiliations).planning/OUTLINE.md — section structure and timinguv run python3 ${CLAUDE_SKILL_DIR}/../../scripts/load-constraints.py workshop-reviseslides.typ — current slide contentnotes.typ — current speaker notesIf you edited slides.typ or notes.typ WITHOUT first completing Step 1 (loading SOURCES.md, OUTLINE.md, and constraints), DELETE your edits and restart from Step 1. Edits made without context produce inconsistencies that are harder to fix than to redo.
Determine what needs to change based on user's request:
User request
↓
├─ Content change ("add a slide about X", "remove section Y")
│ → Modify slides.typ AND notes.typ → Step 3 → Step 4
│
├─ Style/formatting fix ("fix bullet spacing", "text too small")
│ → Modify affected file only → Step 4
│
├─ Structure change ("move section 2 before section 1", "split into more parts")
│ → Update OUTLINE.md → Regenerate affected sections → Step 3 → Step 4
│ → For full regeneration: Read `${CLAUDE_SKILL_DIR}/../workshop/SKILL.md` Phase 3
│
└─ Metadata fix ("wrong affiliation", "update venue name")
→ Update SOURCES.md → Fix in both files → Step 4
These apply to EVERY edit, no matter how small:
- (NEVER -- as marker)= section / == subsection / === slide title#table() with inset: 10pt minimumqr: none must remain in config-info=== title must not repeat as first body line#align(center)\u{2019}s after ) or ]calc module#callout[] + 3+ #pause on same slide = overflow risk → splitlength: 2em, requires // Storytelling: comment\$ not $_Case v. Party_; em-dash ---; en-dash for ranges --Shipping a "quick fix" with broken formatting means the presenter discovers it at the podium. That's not a fix — it's a trap you set for them.
| Excuse | Reality | Do Instead |
|---|---|---|
| "It's just one slide, conventions don't matter" | One slide with wrong spacing is visible to the entire audience | Follow conventions on every edit |
| "I'll fix the spacing later" | Later never comes; conventions rot incrementally | Fix it now |
| "The user only asked about content, not formatting" | Shipping broken formatting is anti-helpful to the presenter | Fix content AND maintain formatting |
| "Notes don't need updating for this slide change" | Out-of-sync notes cause confusion at the podium | Update notes to match slide changes |
| "Sub-bullet spacing is cosmetic" | Tight sub-bullets are unreadable when projected | Add blank lines between sub-bullets |
| "Table inset 5pt saves space" | 5pt is illegible at 16:9 projection | Use 10pt minimum |
For content changes or structural changes (NOT simple formatting fixes), dispatch an independent reviewer before verification:
Agent(prompt="""
You are an independent reviewer. Check edited sections against Typst workshop constraints.
Step 1: Run constraint checks (auto-discovers all .py check scripts):
cd [presentation directory] && uv run python3 ${CLAUDE_SKILL_DIR}/../../references/constraints/check-all.py .
Step 2: Load convention text for judgment review:
Run: uv run python3 ${CLAUDE_SKILL_DIR}/../../scripts/load-constraints.py workshop-revise
Step 3: Review the changed sections in slides.typ and notes.typ against loaded conventions.
Report violations:
| # | Severity | Constraint | Location | Issue |
Be thorough. Do NOT soften findings.
""", subagent_type="general-purpose",
allowed_tools=["Read", "Grep", "Glob", "Bash"])
The reviewer MUST NOT have Write or Edit access. Issues go back to main chat for fixing.
Compile both files:
cd [presentation directory] && typst compile slides.typ && typst compile notes.typ
Run PDF widow detection (mandatory after every compile):
DETECT_WIDOWS=$(command ls -d ~/.claude/plugins/cache/tinymist-plugin/tinymist/*/skills/typst-widow-orphan/scripts/detect_widows.py 2>/dev/null | sort -V | tail -1) && uv run python3 "$DETECT_WIDOWS" slides.pdf
Two-leg verification:
Leg 1 — Constraint checks (hard block):
cd [presentation directory] && uv run python3 ${CLAUDE_SKILL_DIR}/../../references/constraints/check-all.py .
Leg 2 — Convention review (judgment): For conventions listed by check-all.py (.md without .py), manually verify against the changed sections.
If compilation fails: Fix and recompile (max 3 attempts).
If convention violations persist after 3 fix-and-recheck cycles: Escalate to user.
qr: none present in config-info-- as marker))'s / ]'s)inset: 10pt minimum#align(center)calc module)length: 2em minimum + // Storytelling: comment (if used)\$)*Label:* before bullets)Report changes to user:
Changes applied:
- [what was changed]
- slides.typ: [compiles ✓/✗]
- notes.typ: [compiles ✓/✗]
- Widow detection: [0 widows / N widows fixed]
- Overflow detection: [clean / N slides fixed]
- Visual-verify: [N diagrams verified / N/A]
- Source fidelity: [verified / N claims flagged]
qr: none or changing the theme import → STOP. Those are load-bearing.-- marker → STOP. Use two-space indent + - .)'s or ]'s → STOP. Use \u{2019}s.cetz.canvas(length: 1cm, ...) or smaller → STOP. Use 2em minimum.cetz.canvas without // Storytelling: comment → STOP. Add it.$100 without escaping → STOP. Use \$100.#callout[] to a slide with 3+ #pause → STOP. Split the slide.For structural changes requiring full regeneration, read and re-enter the workshop skill:
Read ${CLAUDE_SKILL_DIR}/../workshop/SKILL.md Phase 3 for regeneration.