Pathlight IT and deployment guide
For district IT and instructional-technology staff deploying Pathlight through the Google Admin console or Chrome Enterprise policy. The permission rationale below matches the Chrome Web Store justifications.
Extension
| Item | Value |
|---|---|
| Name | Pathlight |
| Extension ID | <published Chrome Web Store ID>. It is assigned at listing time; the unpacked dev build gets a different, path-derived ID |
| Manifest | V3, minimum Chrome 116 (ChromeOS, Windows, macOS, Linux) |
| Backend | None. There is no account, no vendor server, and no telemetry |
Permissions and why each is needed
Required (permissions)
| Permission | Why |
|---|---|
storage | Saves settings in chrome.storage.local and reads admin policy from chrome.storage.managed |
unlimitedStorage | Keeps guides and screenshots locally in IndexedDB without quota eviction |
activeTab | Captures the tab the teacher chooses to record, when they click Record or press the shortcut |
scripting | Injects the recorder into that tab only while recording, so content scripts never run on every site |
sidePanel | Shows the Pathlight side panel (library and record controls) |
contextMenus | Adds "Start a guide here" and "Blur this" to the right-click menu |
tabs | Follows steps that switch tabs or navigate during a recording, and opens the editor and print pages |
Optional (requested at the moment of use, never at install)
| Permission | When it is requested |
|---|---|
<all_urls> (optional host) | When a teacher records on a site for the first time, so the recorder can follow cross-origin iframes. Teachers who skip it still record with activeTab |
webNavigation | Only when a teacher turns on Settings → Capture → Better navigation steps. Lets steps say how a page was reached (typed address, link, bookmark), catches in-app navigations and finds a page's frames. Used only while recording; nothing leaves the device |
identity | Only when a teacher chooses Publish to Google Drive |
offscreen | Voice narration (P1), recorded locally |
Host permissions
| Host | Why |
|---|---|
https://api.anthropic.com/* | Optional AI using the teacher's own key. No call is made unless a key is added and AI is allowed |
Network destinations
Pathlight makes no network requests unless a teacher uses one of these features:
| Destination | Feature | Data sent |
|---|---|---|
api.anthropic.com | AI step text, translation, reading levels, quizzes, alt text | Scrubbed step text. Redacted crops only when "Send blurred screenshots" is on |
www.googleapis.com, accounts.google.com | Publish to Drive (drive.file scope) | The exported PDF or HTML file |
classroom.google.com/share | "Share to Classroom" opens Google's share page in a new window | Guide link and title |
Fonts and scripts are bundled, so there are no CDNs. Chrome's built-in on-device Translator may download language packs through Chrome itself. An automated network-egress test (WP14) asserts zero requests other than the destinations above.
Allowlisting: if your web filter blocks the destinations above, AI or Drive features show a friendly "not available" state. Recording, editing, and every file export work fully offline.
Managed policy (chrome.storage.managed)
Schema: managed_schema.json in the extension package. Policy always wins over user settings, and locked settings show "Set by your school".
| Key | Type | Effect |
|---|---|---|
disableAI | boolean | Hides all AI features and the API-key settings |
disableDrive | boolean | Hides Publish to Drive and Drive-based Classroom sharing |
forceStudentMode | boolean | Forces student-author mode: no AI, no Drive, no typed text, all blur categories, PDF/print/HTML/Word exports only. Users cannot turn it off, and no PIN overrides it |
forcedBlurCategories | string[] | Blur categories that are always on: email, phone, id-number, roster-name, common-name, avatar, form-field, table-cell, credit-card, custom, manual, credential, ocr |
blockedDomains | string[] | Hostnames where recording is blocked, for example sis.example.org or *.example.org |
allowedDomains | string[] | When set, recording works only on these hostnames (blockedDomains still wins) |
disableTypedText | boolean | Never records typed example text |
suppressOnboarding | boolean | Skips the welcome page on install |
orgName | string | Shown in guide footers and settings |
orgLogoDataUrl | string | Organization logo as a data: URL |
googleOAuthClientId | string | Google OAuth client ID (type Web application, redirect URI https://<extension-id>.chromiumapp.org/, scope drive.file) for Publish to Drive in builds without a built-in client. See docs/GOOGLE-DRIVE-SETUP.md |
Example: teachers (AI allowed, SIS protected)
{
"disableDrive": false,
"forcedBlurCategories": ["email", "phone", "id-number", "roster-name", "credit-card", "credential"],
"blockedDomains": ["sis.example.org", "*.powerschool.com"],
"disableTypedText": true,
"suppressOnboarding": false,
"orgName": "Example Unified School District"
}
Example: student devices (OU for students)
{
"forceStudentMode": true,
"disableAI": true,
"disableDrive": true,
"disableTypedText": true,
"suppressOnboarding": true,
"orgName": "Example Unified School District"
}
In the Google Admin console, go to Devices → Chrome → Apps & extensions → Users & browsers, select the OU, add Pathlight by ID, and paste the JSON into Policy for extensions. On Windows and macOS, use the 3rdparty.extensions.<id>.policy registry or plist keys with the same JSON.
Data storage
All data lives in the user's Chrome profile: IndexedDB database pathlight (guides, screenshots, rosters, version history) and chrome.storage.local (settings, plus the AI key if the teacher adds one). Removing the extension deletes all of it. Class rosters are never exported or synced.
Verifying the policy
Open chrome://policy and confirm the extension policy loaded. In Pathlight's settings, locked options show "Set by your school". The unit test tests/unit/educator/student-mode.test.tsx covers the path from managed storage to merged settings to hidden AI and Drive controls.
Pathlight 0.1.1 is an early preview and is not yet listed in the Chrome Web Store, so it has no store ID yet. Until it is, force-install by policy isn’t available; teachers load it unpacked.