canvas-peer-review-manager — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited canvas-peer-review-manager (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A bulleted imperative like {match} tells the agent to never reveal, disclose, or mention something to the user. Used adversarially it can instruct the agent to hide its tool calls or lie about what it did — stripping the transparency a user relies on to trust the agent.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A complete peer review management workflow for educators using Canvas LMS. Monitor completion, analyze quality, identify students who need follow-up, send reminders, and export data -- all through MCP tool calls against the Canvas API.
ENABLE_DATA_ANONYMIZATION=true in the Canvas MCP server environment to anonymize student names. When enabled, names render as Student_xxxxxxxx hashes while preserving functional user IDs for messaging.Ask the user which course and assignment to manage peer reviews for. Accept a course code, Canvas ID, or course name, plus an assignment name or ID.
If the user does not specify, prompt:
Which course and assignment would you like to check peer reviews for?
Use list_courses and list_assignments to help the user find the right identifiers.
Call get_peer_review_completion_analytics with the course identifier and assignment ID. This returns:
Key data points to surface:
| Metric | What It Tells You |
|---|---|
| Completion rate | Overall health of the peer review cycle |
| "None complete" count | Students who haven't started -- highest priority for reminders |
| "Partial complete" count | Students who started but didn't finish |
| Per-student breakdown | Exactly who needs follow-up |
If the user wants to understand who is reviewing whom, call get_peer_review_assignments with:
include_names=true for human-readable outputinclude_submission_details=true for submission contextThis shows the full reviewer-to-reviewee mapping with completion status.
Call get_peer_review_comments to retrieve actual comment text. Parameters:
include_reviewer_info=true -- who wrote the commentinclude_reviewee_info=true -- who received the commentanonymize_students=true -- recommended when sharing results or working with sensitive dataThis reveals what students actually wrote in their reviews.
Call analyze_peer_review_quality to generate quality metrics across all reviews. The analysis includes:
Optionally pass analysis_criteria as a JSON string to customize what counts as high/low quality.
Call identify_problematic_peer_reviews to automatically flag reviews needing instructor attention. Flagging criteria include:
Pass custom criteria as a JSON string to override default thresholds.
Call get_peer_review_followup_list to get a prioritized list of students requiring action:
priority_filter="urgent" -- students with zero reviews completedpriority_filter="medium" -- students with partial completionpriority_filter="all" -- everyone who needs follow-updays_threshold=3 -- adjusts urgency calculation based on days since assignmentAlways use a dry run or review step before sending messages.
For targeted reminders, call send_peer_review_reminders with:
recipient_ids -- list of Canvas user IDs from the analytics resultscustom_message -- optional custom text (a default template is used if omitted)subject_prefix -- defaults to "Peer Review Reminder"Example flow:
For a fully automated pipeline, call send_peer_review_followup_campaign with just the course identifier and assignment ID. This tool:
Warning: The campaign tool sends real messages. Always confirm with the instructor before running it.
Call extract_peer_review_dataset to export all peer review data for external analysis:
output_format="csv" or output_format="json"include_analytics=true -- appends quality metrics to the exportanonymize_data=true -- recommended for sharing or archivalsave_locally=true -- saves to a local file; set to false to return data inlineCall generate_peer_review_feedback_report for a formatted, shareable report:
report_type="comprehensive" -- full analysis with samples of low-quality reviewsreport_type="summary" -- executive overview onlyreport_type="individual" -- per-student breakdowninclude_student_names=false -- recommended for FERPA complianceFor a completion-focused report (rather than quality-focused), use generate_peer_review_report with options for executive summary, student details, action items, and timeline analysis. This report can be saved to a file with save_to_file=true.
"How are peer reviews going?" Run steps 1-2. Present completion rate, highlight any concerning patterns (e.g., "Only 60% complete, 8 students haven't started").
"Who hasn't done their reviews?" Run steps 1-2, then step 7 with priority_filter="urgent". List the students who need follow-up.
"Are the reviews any good?" Run steps 4-6. Present quality scores, flag generic or low-effort reviews, and surface recommendations.
"Send reminders to stragglers" Run steps 1-2 to identify incomplete reviewers, then step 8. Always confirm the recipient list before sending.
"Give me a full report" Run steps 2, 5, 6, and 10. Combine completion analytics with quality analysis into a comprehensive instructor report.
"Export everything for my records" Run step 9 with output_format="csv" and anonymize_data=true for a FERPA-safe dataset.
| Tool | Purpose |
|---|---|
list_courses | Discover active courses |
list_assignments | Find assignments with peer reviews enabled |
get_peer_review_assignments | Full reviewer-to-reviewee mapping |
get_peer_review_completion_analytics | Completion rates and per-student breakdown |
get_peer_review_comments | Extract actual comment text |
analyze_peer_review_quality | Quality metrics (scores, word counts, constructiveness) |
identify_problematic_peer_reviews | Flag low-quality or empty reviews |
get_peer_review_followup_list | Prioritized list of students needing follow-up |
send_peer_review_reminders | Send targeted reminder messages |
send_peer_review_followup_campaign | Automated analytics-to-messaging pipeline |
extract_peer_review_dataset | Export data as CSV or JSON |
generate_peer_review_feedback_report | Quality-focused instructor report |
generate_peer_review_report | Completion-focused instructor report |
User: "How are peer reviews going for Assignment 3 in BADM 350?"
Agent: Calls get_peer_review_completion_analytics and presents:
## Peer Review Status: Assignment 3
- **Completion rate:** 72% (23/32 students fully complete)
- **Partial:** 5 students (started but not finished)
- **Not started:** 4 students
### Students Needing Follow-up
**Not started (urgent):**
- Student_a8f7e23 (0 of 3 reviews done)
- Student_b2c91d4 (0 of 3 reviews done)
- Student_f5e67a1 (0 of 3 reviews done)
- Student_d9c34b2 (0 of 3 reviews done)
**Partial (needs nudge):**
- Student_c1d82e5 (1 of 3 reviews done)
- Student_e4f03a9 (2 of 3 reviews done)User: "Send reminders to the ones who haven't started"
Agent: Confirms the 4 recipients, then calls send_peer_review_reminders with their user IDs.
User: "Now check if the completed reviews are any good"
Agent: Calls analyze_peer_review_quality and presents quality scores, flags 3 reviews as too short, and recommends the instructor follow up with specific students.
anonymize_students=true or anonymize_data=true when reviewing data in shared contexts.send_peer_review_followup_campaign tool combines analytics and messaging into one call -- powerful but sends real messages. Use it only after confirming intent with the instructor.canvas-morning-check for a full course health overview that includes peer review status alongside submission rates and grade distribution.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.