sc
toa://scribe
GitHub-native editor for static sites.
OVERVIEW
scribe is a GitHub-native editor for Hugo and Astro static sites. It reads and writes files directly via the GitHub Contents API, commits to your main branch, and lets your existing build pipeline handle the rest — simple mode for writers, advanced mode for developers.
FEATURES
Framework-aware
Auto-detects Hugo vs Astro per repo.
GitHub-native
Reads and commits files straight through the GitHub Contents API, on your branch.
Front-matter & menus
Edit categories, tags, the draft toggle and site menus without touching YAML by hand.
Markdown + preview
CodeMirror 6 editor with live preview, shortcodes and image upload.
Least-privilege & audited
Connects through a GitHub App scoped to only the repos you grant it; every action is recorded in an audit log.
WHAT'S NEW
v1.2.2
- Honest connect-GitHub copy: the token is stored **encrypted on the server** (not "never in a database"), and access is limited to the repos you install the GitHub App on — content only, not the rest of your account.
- Audit-log retention (data minimisation): entries older than `AUDIT_RETENTION_DAYS` (default 90) are purged at startup.
v1.2.1
- Repo list is now opt-in: the main view shows ONLY the repos you have selected. Previously an empty selection showed every accessible repo; now it shows none until you pick repos on the select-repos page (which still lists all via ?all).
v1.2.0
- **GitHub auth migrated from an OAuth App (`repo` scope) to a GitHub App** (SEC-2). Access is now limited to the repos the user installs scribe on, with Contents + Metadata permissions only — no blanket access to every repo they own. User access tokens expire and are refreshed server-side via the stored refresh token; the encrypted token store is the single source of truth (replacing the forwarded X-GitHub-Token header).
- BE-1 round-trip regression tests for the named TOML edge cases — a section after the menus block, a `#` inside a quoted value, and unknown menu fields (the parser was already migrated to tomllib/tomlkit; these guard it).
API
tor@toa: ~ /scribe --routes
/api/v1/github/repos
/api/v1/github/repos/{owner}/{repo}/files
/api/v1/github/repos/{owner}/{repo}/file
/api/v1/github/repos/{owner}/{repo}/image