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-skillGuides Frappe LMS customization for courses, batches, lessons, quizzes, assessments, enrollment, progress, certificates, and learning workflows.
Access Canvas LMS (Instructure) to retrieve course data, assignments, grades, submissions, and course materials via the REST API. Useful for checking due dates, viewing grades, and listing courses.
Imports 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.