diff --git a/.claude/skills/steam-frame/SKILL.md b/.claude/skills/steam-frame/SKILL.md
index 0437825..48c9f1c 100644
--- a/.claude/skills/steam-frame/SKILL.md
+++ b/.claude/skills/steam-frame/SKILL.md
@@ -48,3 +48,9 @@ running `--help`: `paste-to-frame.sh`, `serve-bootstrap.sh` and
- `sudo` on the Frame asks for the user's Developer Mode password. Hand those
steps to the user (open Terminal) and keep automation to non-sudo commands.
- The Mac uses BSD userland and zsh (no `timeout`, use `head -n`).
+- **First-party first.** For any new capability, investigate the first-party
+ way before anything else: Valve (SteamOS, Steam, Steam Link), Apple (the Mac
+ and iPhone), and KDE (the Frame's desktop is Plasma). It's usually the best
+ answer. If it isn't, write down why not. If it is, find what Frame Control
+ can do to make it easier to set up (install over SSH, pre-seed settings,
+ pair automatically, tell the user the one setting to turn on).
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index fb1e7fd..f131fe4 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -35,7 +35,9 @@ jobs:
- name: Server tests
run: python -m unittest discover -s tests -v
- name: App syntax
- run: node --check app/main.js && node --check app/build/make-icon.js && node --check app/build/fetch-deps.js && node --check app/preload.js && node --check app/install-link.js
+ run: node --check app/main.js && node --check app/build/make-icon.js && node --check app/build/fetch-deps.js && node --check app/preload.js && node --check app/install-link.js && node --check app/updater.js
+ - name: Updater tests
+ run: node --test app/test/updater.test.js
- name: Website
run: node --test site/test/*.test.mjs && node --check site/public/js/site.js && node --check site/public/js/feedback.js
diff --git a/.gitignore b/.gitignore
index 230bfe5..ba02656 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,7 @@ apk-catalog/data/index-v2*.json*
compat-db/.env.lakebed.server
compat-db/.lakebed/
tests/smoke/results/
+mac/bin/
+
+# Downloaded at build time (frame/kdeconnect/fetch.py, app/build/fetch-deps.js)
+frame/kdeconnect/packages/
diff --git a/README.md b/README.md
index 79021a7..203328d 100644
--- a/README.md
+++ b/README.md
@@ -72,6 +72,9 @@ Drag files onto the window to send them. Drop a game's .zip, folder or .exe to a
**📸 Screenshots**
Browse the shots you take in the headset and save them to your Pictures folder.
+**⌨️ Keyboard and trackpad**
+Type and point in the Frame's apps from your computer or phone, through KDE Connect, which Frame Control brings along and sets up on the Frame. Nothing else to install, anywhere.
+