Manages the student's learning progress. Reads and updates course state, completed modules, solved exercises, and learning metrics. This skill is used automatically when the tutor needs to know or update progress.
Tracks student progress by reading and updating state files in `.tutor/` directory. Automatically used when tutor needs to know current module, completed exercises, or learning metrics.
/plugin marketplace add netsirius/tutor-plugin/plugin install tutor@tutor-pluginsThis skill is limited to using the following tools:
scripts/progress.pyThis skill provides capabilities to manage the student's learning progress.
All learning content is stored as physical files. The student interacts with Claude to navigate, ask questions, and get feedback, but the actual content lives in files.
[project-root]/
├── .tutor/ # Configuration and progress (managed by this skill)
│ ├── config.json # Student preferences
│ ├── progress.json # Module/exercise progress
│ ├── curriculum.json # Study plan
│ └── sessions/ # Session history
│
├── lessons/ # Learning content (created by tutor agent)
│ ├── 01-basics/
│ │ ├── README.md # Module overview
│ │ ├── 01-variables.md # Topic content
│ │ ├── 02-types.md
│ │ ├── common-mistakes.md # Updated as students make mistakes
│ │ ├── faq.md # Updated as students ask questions
│ │ ├── examples/
│ │ │ ├── Cargo.toml
│ │ │ └── examples/
│ │ │ └── ex01_basic.rs
│ │ └── exercises/
│ │ └── ex01_hello/
│ │ ├── README.md
│ │ ├── HINTS.md
│ │ ├── Cargo.toml
│ │ └── src/main.rs
│ └── 02-ownership/
│ └── ...
│
└── projects/ # Mini-projects
└── calculator/
├── README.md
├── REQUIREMENTS.md
└── ...
This skill tracks progress through files, but agents must create the actual content as files. Never present lessons/exercises only in chat.
All state files are saved in .tutor/ in the current project directory:
.tutor/
├── config.json # Course configuration
├── progress.json # Detailed progress
├── curriculum.json # Study plan
└── sessions/ # Session history
└── YYYY-MM-DD.json
{
"learning_language": "en",
"programming_language": "rust",
"student_name": "name",
"level": "beginner",
"started_at": "2026-01-06T10:00:00Z",
"goals": ["Create CLI tools", "Contribute to open source"],
"time_per_session": "1h",
"curriculum_source": "generated",
"preferences": {
"explanation_style": "detailed",
"exercise_difficulty": "adaptive",
"show_hints": true
}
}
Note: The learning_language field determines the language for ALL content presented to the student.
{
"current_module": "02-ownership",
"current_topic": "borrowing",
"modules": {
"01-basics": {
"status": "completed",
"started_at": "2026-01-06",
"completed_at": "2026-01-08",
"score": 92,
"time_spent_minutes": 180,
"exercises": {
"ex01_hello": {"status": "completed", "attempts": 1, "score": 100},
"ex02_variables": {"status": "completed", "attempts": 2, "score": 85}
}
},
"02-ownership": {
"status": "in_progress",
"started_at": "2026-01-09",
"exercises": {
"ex01_ownership": {"status": "completed", "attempts": 3, "score": 75},
"ex02_borrowing": {"status": "in_progress", "attempts": 1}
}
}
},
"statistics": {
"total_time_minutes": 420,
"total_exercises_completed": 15,
"total_exercises_attempted": 18,
"average_score": 85,
"streak_days": 5,
"last_session": "2026-01-10"
}
}
When .tutor/ doesn't exist, create the initial structure:
# Use the utility script
python ${SKILL_ROOT}/scripts/progress.py init --language rust --level beginner
Read the student's current state:
python ${SKILL_ROOT}/scripts/progress.py get
Returns JSON with all progress.
After completing a lesson or exercise:
# Complete exercise
python ${SKILL_ROOT}/scripts/progress.py complete-exercise \
--module "02-ownership" \
--exercise "ex02_borrowing" \
--score 90 \
--attempts 2
# Complete module
python ${SKILL_ROOT}/scripts/progress.py complete-module \
--module "02-ownership" \
--score 88
At the start and end of each study session:
# Start session
python ${SKILL_ROOT}/scripts/progress.py start-session
# End session
python ${SKILL_ROOT}/scripts/progress.py end-session \
--topics-covered "borrowing,slices" \
--exercises-done 3
Determine what to study next:
python ${SKILL_ROOT}/scripts/progress.py recommend
Returns the next topic based on:
Create a progress summary:
python ${SKILL_ROOT}/scripts/progress.py report
Based on cumulative score:
95: Expert
Tutor agents should:
1. User says "continue with the course"
2. Tutor executes: python progress.py get
3. Reads that they're on module 02, topic "borrowing"
4. Checks if lesson files exist: lessons/02-ownership/
- If YES: Guide student to the files ("Open lessons/02-ownership/README.md")
- If NO: CREATE the lesson files first, then guide student
5. Student works through the files, asks questions in chat
6. On exercise completion, executes: python progress.py complete-exercise ...
7. Suggests next topic based on: python progress.py recommend
Tutor: "Let me create the lesson for you..."
[Creates lessons/02-ownership/ with all files]
"I've created the lesson. Open lessons/02-ownership/README.md to begin."
Student: [Reads files, runs examples]
"I don't understand borrowing"
Tutor: "Good question! Let me add a clarification..."
[Updates lessons/02-ownership/01-borrowing.md with FAQ section]
"I've added more explanation to the file. Check the FAQ section."
Student: "/tutor:exercise"
Coach: [Creates lessons/02-ownership/exercises/ex01_move/]
"Exercise ready! Check lessons/02-ownership/exercises/ex01_move/README.md"
Student: [Works on src/main.rs, runs cargo test]
"I'm done!"
Evaluator: [Reads student's code, runs tests]
[Creates REVIEW.md in exercise directory]
"Great job! I've saved feedback to REVIEW.md. Score: 85/100"
[Updates .tutor/progress.json]
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.