ferpa-deid

De-identifies and re-identifies student submissions and gradebooks for FERPA-safe LLM processing.

4|4|Updated Apr 15, 2026
One-click install
npx skills add https://github.com/chaz-clark/canvas-toolbox --skill ferpa-deid-chaz-clark
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: ferpa-deid
Source: https://github.com/chaz-clark/canvas-toolbox/tree/main/.agents/skills/ferpa-deid
Command: npx skills add https://github.com/chaz-clark/canvas-toolbox --skill ferpa-deid-chaz-clark

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Student names must never reach a cloud LLM, but instructors still need AI help processing submissions and grades. This Skill strips identity from student artifacts into opaque keys before AI processing and maps keyed results back to real students locally afterward. ## Core Features & Use Cases - Course-wide de-id master: Builds a .deid_master.csv with one row per student keyed by user_id, using a stable opaque deid_code = sha256(user_id)[:6], deduplicating multi-section enrollments. - Format-specific de-identification: Adapters handle Word docs, PDFs, Excel files, Jupyter notebooks, Databricks exports, plain text, Canvas submission comments, and gradebook exports. - Key-based re-identification: Maps keys back to user_id via .keymap.json with duplicate-aware handling, never by row position or sort order. - Leak verification: Scans de-identified artifacts against .known_names.txt to catch any name that slipped through the scrub. - Use Case: Before sending a batch of student essays to an LLM for feedback drafting, de-identify the submissions, run the AI analysis on opaque keys, then re-identify the keyed feedback into a named report stored outside the repo. ## Quick Start Ask the agent to rebuild the de-id master and de-identify the submissions in the current grading batch before any AI processing.

Frequently Asked Questions about ferpa-deid

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I de-identify student submissions before sending them to an LLM?▼

De-identification happens automatically through grader_fetch.py, which dispatches to format adapters for docx, pdf, xlsx, Jupyter, Databricks, text, and comments. Each student's identity is replaced with an opaque key derived from their user_id.

How do I re-identify keyed grading results back to student names?▼

Run grader_reidentify.py with the challenge directory to map keys back to user_id via .keymap.json. It is duplicate-aware since one student can have many keys across batches. Never map by row position or sort order, as that misattributes results.

What file formats does FERPA de-identification support?▼

Supported formats include Word documents, PDFs, Excel spreadsheets, Jupyter notebooks, Databricks exports, plain text files, Canvas submission comments, and gradebook exports. Each format has a dedicated adapter script for direct or one-off use.

How do I check if a student name leaked into de-identified files?▼

Run grader_name_leak_check.py against the keyed artifacts. It scans for any name from .known_names.txt that slipped through the scrub, and should be run before handing de-identified material to the LLM if scrub completeness is uncertain.

Can I read the de-id master or keymap files to verify them?▼

No. Name-bearing files like .deid_master.csv, .keymap.json, and .known_names.txt are FERPA Zone-2 and must never be read or displayed. Verify them only with wc -l or ls, never cat, head, or grep.

Where should re-identified output files be saved?▼

Re-identified output is Zone-2 data and must be written outside any cloud-synced or git-tracked path, such as ~/Downloads/. Never write named results back into the course repository.