Sextant is a Chrome extension that adds a "Lines of code" panel to GitHub
repository pages. This policy describes what data the extension collects,
where it goes, and how the companion backend at sextant.octago.nl
handles it. The source code for both the extension and the backend is
published at
github.com/Galacticnaut/sextant.
The extension stores the following items in chrome.storage.local,
which lives only inside your browser profile and is not synced or transmitted
elsewhere by the extension itself:
Use "Clear all" in the Options page to delete these at any time, or uninstall the extension to remove all local storage.
For each GitHub repository page you visit, Sextant may make these requests:
For public GitHub repositories, the extension calls
api.codetabs.com directly from your browser to fetch a
line-of-code count. The only data sent is the repository owner and name
taken from the page URL — no GitHub token, no Sextant identifiers, no other
metadata. Codetabs is a third-party service we don't operate or control;
see codetabs.com for their policy. If
codetabs is unreachable or returns an unexpected response, the extension
falls back to tiers 2 and 3 below. For private or large repositories,
codetabs is never contacted — analysis goes straight to the Sextant
backend.
If codetabs cannot serve the repo (private, too large, etc.), Sextant calls
https://sextant.octago.nl/sloc with:
owner/repo string in the request body.Authorization: Bearer … header.The backend uses the token to:
--depth=1 and a 10 MB per-file
cap to skip binary blobs) into ephemeral storage.The backend does not persist your token. Tokens are held in memory only for the lifetime of a single request, used to authenticate the clone, and discarded. Backend logs record the request path, HTTP status, and duration; they never include tokens or request bodies.
If both codetabs and the backend fail, Sextant calls GitHub's
/repos/<owner>/<repo>/languages endpoint directly
from your browser with your stored token, divides bytes-per-language by an
embedded constants table, and shows the result prefixed with ≈.
This request is from your browser to GitHub; the backend is not involved.
AI features. The Sextant extension can call the Anthropic
API on your behalf to summarise pull requests and answer questions about a
repository. Your Anthropic API key is stored locally in your browser's
chrome.storage and is sent over HTTPS to
sextant.octago.nl in an X-Anthropic-Key request
header when you use AI features. The Sextant backend forwards the request
to api.anthropic.com server-side and returns the response. The
key is never logged, written to disk, or retained beyond the duration of a
single request. This proxy mode was added because Anthropic blocks browser
CORS for organisations with custom data-retention settings — direct calls
from the extension fail with "CORS requests are not allowed for this
Organization."
The "Connect GitHub" button requests the repo and
read:user scopes. repo is required to clone private
repositories; read:user is required to fetch your login name for
display. Sextant performs only read operations and never writes to your repos.
github.com.The backend writes operational logs to Azure Container Apps log analytics. What goes in: HTTP request metadata (path, status code, duration), rate-limiting counters, and error traces. GitHub Marketplace webhook events log a one-way hash of the purchasing account's login (SHA-256, truncated to a 12-hex-character prefix) so the operator can correlate repeat events without retaining the plaintext username. What does not go in: request bodies, access tokens, source code, repository contents, or any plaintext per-user GitHub identifier.
The backend's SLOC cache is keyed by commit SHA and contains only computed line counts per language. It contains no user data. Cache entries are kept indefinitely but may be evicted by the operator at any time. Backend logs are retained for up to 30 days for operational diagnostics.
Operator: Galacticnaut. File issues at github.com/Galacticnaut/sextant/issues.
See also: Terms of Service.