Last updated: September 1, 2026
As of September 1, 2026, the Chrome Web Store still publishes SkillBridge v1.0.1. That legacy version includes a bundled Puter client used for Gemini translation review and the Claude-powered AI Tutor, and it declares YouTube host access.
The repository's v4.2.0 release is a GitHub source checkpoint, not a Chrome Web Store submission. Chrome Web Store publication remains paused, and the final submission version and dashboard upload will be decided only after the current code-development phase is finished. The unpublished source build keeps the AI Tutor, runs its bundled Puter client in Chrome's isolated content-script world on the trusted course host, removes YouTube host access, adds an on-device tutor option, and adds local-only translation feedback to Tools › Reports:
These statements describe the implemented data-flow contract and automated regression coverage. This checkpoint does not claim an authenticated live Academy post-submit DOM capture or a final signed-in Puter round trip; both remain final CWS gates.
Use the section below that matches the version you installed. SkillBridge does not operate a backend server and does not use analytics, telemetry, advertising, or tracking in either version. Third-party services can still process the content described below when their features are used.
| Service | What v1.0.1 sends | Purpose | Privacy policy |
|---|---|---|---|
| Google Translate API | Visible course-page text selected for translation and the requested language | Produce the initial translation | Google Privacy Policy |
| Puter-backed Gemini | Visible course text, the requested language, and, for quality review, the initial Google translation | Review or improve complex translations | Puter Privacy Policy |
| Puter-backed Claude | The user's Tutor question, any text the user explicitly quotes into it, the requested response language, the course title, and up to 5 page headings | Generate an AI Tutor response | Puter Privacy Policy |
The main Puter SDK file in v1.0.1 is bundled inside the extension package, but that SDK also contains lazy remote
JavaScript and WebAssembly import paths, including an unpkg-hosted polyfill and remote
rustls.js/rustls.wasm assets. v1.0.1 therefore must not be described as a fully
self-contained or no-remote-code package. When an AI feature is used, the client also connects to Puter services,
which route the request to the selected AI model. The v4.0.0 build removes those unused TLS-socket imports from
the packaged SDK and fails the build if executable remote-code patterns remain in the upload artifact.
The bundled Puter client handles its own sign-in and session state. It stores a Puter session token in the course page's local storage and retrieves a Puter User object to resume the AI session. That object can include a username, UUID, email-confirmation status, storage/subscription fields, and a last-activity timestamp. SkillBridge's operator does not receive the token or User object.
v1.0.1 declares https://*.youtube.com/* host access. Its subtitle feature controls an existing
embedded player with iframe postMessage commands. The package also contains an unused
FETCH_URL background proxy; the v1.0.1 subtitle module does not call that proxy, but, if invoked
internally for a YouTube URL, it can make a YouTube request and attach one fixed Cookie header
containing technical CONSENT and SOCS values. The unpublished source build removes both
the host permission and that handler.
chrome.storage.local.
skillbridge-cache).
skillbridge-tutor) so the user can reopen recent conversations.
The local cache and Tutor history are not sent to the SkillBridge operator. A new Tutor request sends the current question and the limited page context described above, not the saved conversation database.
| Permission or site access | v1.0.1 scope |
|---|---|
storage |
Save extension preferences |
activeTab |
Legacy access to the active course tab |
tabs |
Legacy tab/navigation access |
*.skilljar.com |
Run on and translate supported Skilljar course pages |
*.youtube.com |
Legacy YouTube access described above |
translate.googleapis.com |
Send requested course text to Google Translate |
The unpublished source build includes an AI Tutor using Claude — Sonnet 4.6, falling back to Sonnet 4.5 if that
model is unavailable — through the bundled Puter client. The client initializes in Chrome's ISOLATED
content-script world only on the top-level anthropic.skilljar.com and
academy.claude.com pages — Anthropic's own course platforms — and exchanges Tutor requests through
authenticated extension ports. Those two hosts are the entire list, checked in the extension's service worker; no
other page, subdomain, or frame can reach the Tutor transport. On Academy the check also requires a course unit
path, so the learner's account, settings and catalog pages are outside it. On an assessment page the Tutor is
additionally told not to answer questions, and the lesson body — which is where answer choices live — is withheld
from its context entirely. Its SDK object and extension-port payloads are not exposed to the course page's main
JavaScript world. The visible Tutor UI remains in the shared page DOM, however, so course-page scripts may observe
keyboard events and rendered questions or answers. The packaged source build disables the SDK's unused eager
network and host-storage initialization, and no Puter authentication or AI request is made until the user sends a
cloud Tutor message. The first such use opens a free Puter sign-in. Puter's HTTPS sign-in returns its result to
the opener through browser window messaging, so the course page may also observe that authentication event while
sign-in is happening; SkillBridge stores the accepted token only in extension storage. Baseline page translation
never invokes Puter, Claude, or the Tutor model: it uses curated dictionaries, the local cache, Google Translate,
deterministic protected-term restoration, and structure-preserving HTML reconciliation. Translation Refinement is
a separate, optional feature that is off by default and has its own consent: when it is explicitly enabled AND
consented, already-translated paragraphs near what you are reading may additionally be sent to the model you
selected for post-editing, up to a per-page limit. Turning it off, or withdrawing that consent, stops any request
already in flight. Selecting the local or off Tutor engine prevents Tutor messages from going to Puter.
chrome.storage.local) — selected language, dark
mode, auto-translate, onboarding state, and related display settings.
chrome.storage.local) — flashcard review state, bookmarks,
recent lessons, and scroll positions.
chrome.storage.local, sb_notes) — note text, lesson
title and URL, timestamp, and lesson-identity provenance used for Skilljar↔Academy continuity. Notes stay local,
are limited to the newest 200 records, and can be edited or deleted in place.
chrome.storage.local,
sb_term_reports)
— current records contain reportSchemaVersion, capture (selection or
manual), signal (positive or negative),
originalText (null for a manual report), translatedText, selectedText,
correction, lesson url and title, selected lang, and
timestamp ts, plus the backward-compatible wrongText alias. When a lesson has a
verified Skilljar↔Academy match, a record can additionally contain canonical id and
provenance (schemaVersion, matchedBy, platform,
migratedAt); migrated rows can retain legacyUrls. Legacy records are upgraded
additively, so their existing fields are not discarded. The queue stays local, is limited to the newest 200
records, and is never submitted automatically; export creates a client-side JSON download only when the user
requests it.
skillbridge-cache for up to 30 days. This does not depend on the
storage extension permission.
chrome.storage.local) — after a successful cloud Tutor sign-in, the
accepted session token and application identifier are stored in extension storage so the session can resume.
They are not stored in the course site's local storage.
SkillBridge does not send this locally stored state to its operator or to a third-party analytics service. It can be removed through the browser's extension or site-data controls.
On a non-English translated page, selecting text inside one reliably tracked translated block can expose helpful
and needs-work actions. Helpful feedback is saved immediately to sb_term_reports; needs-work feedback
opens Tools › Reports with the original text, current translation and selected text prefilled, where the user may
add a correction before saving. Feedback actions are not offered for English or untranslated text, selections
spanning multiple blocks, or exam answer choices. Saving, listing, deleting and exporting these records does not
contact SkillBridge, GitHub, an analytics service, Puter, Claude or the user's local Tutor server.
| Service | What is sent | Purpose | Privacy policy |
|---|---|---|---|
| Google Translate API |
Course-page text selected for translation and the requested language. For paragraphs that mix text with links,
inline code, or emphasis, the block's markup is sent so the structure survives translation —
that markup includes the link targets (href) and image addresses (src) inside the
block
|
Translate text not already covered by the packaged dictionary or local cache | Google Privacy Policy |
| Puter-backed Claude | The user's Tutor question, any text the user explicitly quotes into it, the requested response language, the course title, up to 8 section headings from the page, and up to 2,000 characters of lesson text — a short opening plus the text near your current position in the lesson | Generate an AI Tutor response (cloud engine only; not used when the Tutor is set to local or off) | Puter Privacy Policy |
| Puter-backed Claude, or the local server you configure | Translated course paragraphs plus their English source, when the optional translation refinement setting is on and separately consented to. Off by default; nothing is sent otherwise. The correction is discarded unless every protected term, number, URL, code span and link survives it unchanged | Post-edit a Google Translate result | Puter Privacy Policy |
| Puter authentication |
Sign-in and session data handled by the bundled client in an ISOLATED content-script world. Puter returns the
sign-in result to the HTTPS opener through browser window messaging, which the course page may be able to
observe during sign-in. SkillBridge validates the result and stores the accepted token and application
identifier in chrome.storage.local, not course-site storage. The packaged source build disables
automatic User/profile lookups, so it does not retrieve a username, user UUID, email status, or other
User-object fields. SkillBridge's operator does not receive the token or application identifier
|
Authenticate and resume the cloud Tutor session | Puter Privacy Policy |
| A local server the user runs (optional) | Same Tutor content as the Claude row, sent only to the user's configured address | Generate an AI Tutor response on-device; see the Local AI Engine section below | Controlled by the user |
The unpublished source build does not transmit course text to YouTube. Auto-subtitles configure an existing embedded player and send it player-control messages; the extension requests no YouTube host permission.
| Permission or site access | Purpose |
|---|---|
storage |
Save preferences, Tutor engine settings, flashcard review state, bookmarks, lesson notes, translation feedback
and manual term reports, recent lessons, scroll positions, and the accepted Puter session token/application
identifier in
chrome.storage.local
|
alarms |
Run periodic translation-cache cleanup |
*.skilljar.com |
Translate supported AI-course pages hosted on Skilljar |
claude.com/resources/tutorials (content-script match) |
Translate Claude tutorial pages |
academy.claude.com/courses (content-script match) |
Translate lesson pages on Anthropic's Claude Academy. Scoped to course routes, so the learner's account, settings and catalog pages are outside the extension's reach. On assessment pages the answer choices are excluded from translation, so their text is never sent anywhere; where the page is already published in one of Academy's own locales, SkillBridge preserves the official copy: for locales whose script makes English residue identifiable (Korean, Japanese, Chinese) only that residue is sent, and where residue cannot be told apart from official copy (Spanish, French) nothing is sent at all |
academy.claude.com/*/courses (content-script match) |
The same course routes under a locale prefix, which is how Academy serves its non-English locales |
translate.googleapis.com |
Send page text to Google Translate when translation is requested |
http://localhost/*, http://127.0.0.1/* (optional) |
Requested only if the user selects the local (on-device) AI Tutor engine, so the extension can reach an OpenAI-compatible server the user runs on their own machine. Not granted at install time; declining leaves the Tutor on its previous engine. |
Separate from the AI Tutor, and separately consented to. The AI Tutor sends what the user types; refinement would
send paragraphs the user is reading, so agreeing to one is not agreeing to the other and the extension does not
treat it as such. Both a mode (Off / Cloud / Local /
Same as AI Tutor) and an explicit consent checkbox must be set before any request is made;
Same as AI Tutor resolves to nothing when the Tutor is off.
When it is on:
Cloud, or the user's own server for Local, where nothing leaves the device.
The unpublished source build lets the user run the AI Tutor against a local OpenAI-compatible server (for example Ollama) instead of the cloud. When that engine is selected:
http://localhost:11434/v1).
Nothing is sent to Puter, Claude, or any other remote service for tutor chat.
localhost directly. It carries no credentials and no cookies.
chrome.storage.local alongside the other
preferences.
chrome.storage.local until Puter resets the session, SkillBridge clears a rejected session, or the
user clears the extension's data.
SkillBridge handles user data only to provide or improve its disclosed, user-facing translation, local study, and Tutor features. It transfers user data only when necessary to provide those features, comply with law, address security, or as part of a merger or asset transfer. SkillBridge does not sell user data, use it for credit decisions, or use or transfer it for personalized advertising. The operator does not allow humans to read handled user data except with the user's affirmative agreement for a specific support purpose, when necessary for security, to comply with law, or after aggregation and anonymization for internal operations.
Requests to Google, Puter, and Claude use HTTPS. A user-selected local Tutor server may use HTTP on
localhost or 127.0.0.1; that loopback traffic stays on the user's device. Locally
retained preferences, lesson activity, notes, translation feedback and manual term reports, cached translations,
and Tutor history use browser-managed storage and are not separately encrypted by SkillBridge, so access to the
user's unlocked browser profile may also permit access to that local data.
Unpacked developer builds contain the same user-invoked Tutor gateway. Sending a cloud Tutor message transmits that request to Claude through Puter; page translation does not invoke Puter or an AI model.
The raw vendored Puter source still contains SDK features that the packaged release build removes, so the repository root or developer ZIP must not be substituted for a scanned submission artifact.
SkillBridge does not operate a user database. Google and, when the cloud Tutor is used, Puter and the selected AI provider may process transmitted text in jurisdictions outside the user's country. Users should review the applicable third-party policies for rights and controls.
SkillBridge does not knowingly collect personal information from children under 13.
TODO: Keep the v1.0.1 legacy disclosure on this page while publication is paused. Remove or archive it only after the replacement version is confirmed live in the Chrome Web Store, then update this policy and the store listing together.
Material changes to this policy will be posted here and reflected in the published extension information.