update-safari-extension

Builds, reloads, and verifies the Voyager Safari web extension across temporary and native routes.

19.9k|659|Updated Oct 4, 2025
One-click install
npx skills add https://github.com/Nagi-ovo/gemini-voyager --skill update-safari-extension
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: update-safari-extension
Source: https://github.com/Nagi-ovo/gemini-voyager/tree/main/.agents/skills/update-safari-extension
Command: npx skills add https://github.com/Nagi-ovo/gemini-voyager --skill update-safari-extension

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Updating a Safari web extension during development is error-prone: stale builds, duplicate extension registrations, broken native messaging, and accidental damage to the user's signed app or extension storage. This Skill provides a guarded workflow for building, reloading, and verifying the Voyager Safari extension without disturbing permissions, storage, or installed apps.

Core Features & Use Cases

  • Route selection: Chooses between the temporary-extension route for TypeScript/CSS/UI changes and the containing-app route for Swift, native messaging, signing, or Sparkle changes.
  • Safe build and registration: Runs bun run build:safari, uses fixed derived-data paths to avoid disk bloat, and uses read-only pluginkit/LaunchServices checks before any targeted re-registration.
  • Tiered verification: Requires evidence from build, artifact, loaded-extension, live-behavior, and state-safety checks before claiming success.
  • Use Case: After editing popup CSS, run the build, reload the temporary extension in Safari, refresh the Gemini tab, and confirm the popup shows the change while existing cards and settings remain intact.

Quick Start

Use the update-safari-extension skill to rebuild the Safari extension and verify my latest popup changes in Safari.

Frequently Asked Questions about update-safari-extension

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I reload a Safari web extension after changing TypeScript or CSS?

Run bun run build:safari to rebuild dist_safari, then click Reload under Safari Settings > Developer > Temporary Extensions. Reload the target tab once and reopen the popup to confirm the change is live.

How do I test Safari native messaging changes during development?

Build dist_safari first, then build the Voyager Xcode project in Debug with Apple Development signing and run the containing app from Xcode. Temporary extensions cannot launch the native handler, so native messaging requires the containing-app route.

Why does my Safari extension show a stale build after rebuilding?

First verify the built asset exists in dist_safari, then use Safari's own Reload control, reload the target tab, and reopen the popup. Do not use pluginkit registration or delete extension containers as a routine fix.

Can a temporary Safari extension test iCloud sync or Google Drive authorization?

No. Temporary extensions cannot launch the containing-app native handler, so iCloud sync, Safari Google Drive authorization, and native notifications require the Debug containing-app route even when the calling code is TypeScript.

Why does clicking a native notification open an old window or report Safari Extension Unavailable?

This usually means LaunchServices selected a stale containing-app copy with the same bundle identifier. Inspect the launched process path and pluginkit read-only output, then unregister only the exact stale development app path.