From moodle-skill
Manage Moodle courses via CLI — create/update/delete activities, sections, quizzes, import GIFT questions, and AI-assisted essay grading. Use /moodle-skill:moodle to interact with any Moodle instance.
How this skill is triggered — by the user, by Claude, or both
Slash command
/moodle-skill:moodleThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage any Moodle course via the `moodle-updater.js` CLI. All destructive operations require a dry-run first, then explicit user confirmation before `--live`.
Manage any Moodle course via the moodle-updater.js CLI. All destructive operations require a dry-run first, then explicit user confirmation before --live.
/moodle-skill:moodle, /moodle-skill:moodle structure.env in your project root with MOODLE_URL, MOODLE_SESSION, and COURSE_IDlogin command$ARGUMENTS — if arguments provided, use as command + args and proceed to Phase 2.$ARGUMENTS is empty, present the Command Reference Table below and ask which command to run.login command: Execute directly — opens a browser for authentication. The browser auto-closes once login is detected. Supports --browser msedge or --browser chrome for SSO.
Read-only commands (structure, list-activities, show-label, show-page, dump-form, dump-grading): Execute directly.
NODE_PATH="${CLAUDE_PLUGIN_DATA}/node_modules" node "${CLAUDE_PLUGIN_ROOT}/scripts/moodle-updater.js" <command> <args...>
All other commands: Execute WITHOUT --live first (dry-run is the default).
After showing the dry-run output, ask the user for confirmation before running with --live.
NODE_PATH="${CLAUDE_PLUGIN_DATA}/node_modules" node "${CLAUDE_PLUGIN_ROOT}/scripts/moodle-updater.js" <command> <args...> --live
| Group | Command | Arguments | Description |
|---|---|---|---|
| Setup | login | [--browser msedge|chrome] | Open browser, login, save cookie to .env (auto-closes) |
| Read | structure | — | Show course structure |
| Read | list-activities | <sectionId> | List activities in a section |
| Read | show-label | <moduleId> | Show label HTML |
| Read | show-page | <moduleId> | Show page HTML |
| Update | update-label | <moduleId> <htmlFile> | Replace label content |
| Update | update-page | <moduleId> <htmlFile> | Replace page content |
| Update | update-summary | <sectionId> <htmlFile> | Replace section summary |
| CRUD | create-url | <sectionNum> <name> <url> | Create URL activity |
| CRUD | create-page | <sectionNum> <name> <htmlFile> | Create text page |
| CRUD | create-resource | <sectionNum> <name> <file> | Upload file resource |
| CRUD | create-assign | <sectionNum> <name> <htmlFile> [--open ts] [--due ts] | Create assignment |
| CRUD | create-forum | <sectionNum> <name> <htmlFile> | Create forum |
| CRUD | create-quiz | <sectionNum> <configJson> | Create quiz (SEB, time limit) |
| Manage | delete-activity | <moduleId> | Delete activity |
| Manage | hide-activity | <moduleId> | Hide activity |
| Manage | indent-activity | <moduleId> | Indent activity |
| Manage | move-activity | <moduleId> <afterModuleId> | Move activity |
| Sections | delete-section | <sectionId> | Delete section |
| Sections | duplicate-section | — | Duplicate last section |
| Sections | move-section | <sectionId> <targetSectionId> | Move section before target |
| Sections | rename-section | <sectionId> <title> | Rename section |
| Quiz | import-gift | <cmid> <giftFile> | Import GIFT questions |
| Quiz | add-questions-to-quiz | <cmid> [categoryName] | Assign questions to quiz |
| Quiz | delete-quiz-questions | <cmid> [categoryName] | Delete questions in category |
| Grading | grade-essay scrape | <cmid> --gift <path> [--slot N] --output <file> | Export student responses as JSON |
| Grading | grade-essay submit | <cmid> --grades <file> [--live] | Submit grades to Moodle |
| Diagnostic | dump-form | <type> <sectionNum> | Inspect form fields |
| Diagnostic | dump-grading | <cmid> [--slot N] | Inspect grading page |
The AI grading workflow is split into scrape → grade → submit:
NODE_PATH="${CLAUDE_PLUGIN_DATA}/node_modules" node "${CLAUDE_PLUGIN_ROOT}/scripts/moodle-updater.js" grade-essay scrape <cmid> --gift <path> --output grading.json
This produces a JSON file with questions (criteria, model answers) and student responses.
Read the JSON file, grade each student response against the criteria, and produce a grades JSON file.
NODE_PATH="${CLAUDE_PLUGIN_DATA}/node_modules" node "${CLAUDE_PLUGIN_ROOT}/scripts/moodle-updater.js" grade-essay submit <cmid> --grades grades-result.json --live
login opens a browser, user logs in, browser auto-closes once login is detected, and cookie is saved to .env. Use --browser msedge or --browser chrome for SSO.MoodleSession cookie expires after inactivity. If a command fails with a session error, run login again.structure as a quick connection test.--live without a dry-run first (except read-only commands).--live without explicit user confirmation./moodle-skill:moodle.login again.npx claudepluginhub rudini/claude-edu-plugins --plugin moodle-skillImports course content from LMS platforms (Canvas, Blackboard, Moodle, D2L) using IMS Common Cartridge or REST API. Maps to idstack manifest with quality flags and Bloom's taxonomy classification.
Generates a structured markdown course with visual diagrams and evidence-based learning features for any topic the user wants to learn from scratch.
Generates researched, module-based learning plans for technical or general topics. Saves plans and quiz progress to ~/.claude/learning/ directories. Resumes existing plans with status.