Find My Phone Studio
Use this skill when the user wants to work on a realistic phone-recovery workflow on macOS. If the current repo contains apps/phone-spotter, use that workspace by default.
Default product shape: an always-available macOS menu bar utility that helps the user jump into the best available Apple or Google action quickly, keeps local clues and pairing state on-device, and exposes a clear Quit path.
Quick Start
- If this repo contains
apps/phone-spotter, use that workspace first.
- Run
bash scripts/run_phone_spotter.sh doctor.
- Run
bash scripts/run_phone_spotter.sh inspect.
- Use
bash scripts/run_phone_spotter.sh generate after changing project.yml.
- Use
bash scripts/run_phone_spotter.sh typecheck for a fast source-level sanity pass before a full build.
- Use
bash scripts/run_phone_spotter.sh test after model, pairing, or UI changes.
- Use
bash scripts/run_phone_spotter.sh run when you need the local menu bar build relaunched.
- When the request is still exploratory, run
python3 scripts/find_my_phone_brief.py --goal "<user request>" to normalize the product brief.
- Default to a menu bar extra with these actions:
Locate Phone
Ring Phone
Call Phone
Open Provider
Open Directions
Copy last known location
Quit
- Be explicit about capability boundaries:
- do not promise a public Find My control API unless the current Apple docs prove one exists
- do not claim "exact" coordinates beyond what Apple's own surface provides
- keep Apple ID credentials in Apple-owned surfaces when possible
- Only scaffold a new app when the bundled
Phone Spotter workspace is missing or clearly not a fit.
Workflow
Choose The Lane
phone-spotter-workspace: use and extend the bundled apps/phone-spotter menu bar app.
menu-bar-app: build a persistent Mac menu bar app that opens supported Apple or Google surfaces, runs approved local helpers, and keeps "find" actions one click away.
shortcut-helper: use Shortcuts or AppleScript glue when the user wants quick local automation and is comfortable with Apple-managed prompts or permissions.
browser-helper: use browser automation only when the user explicitly wants the iCloud web flow and accepts sign-in in their own browser session.
support-only: explain the most reliable user path without building a local app.
Work The Bundled App First
- Read
references/project-map.md before editing the app workspace.
- If the task changes project settings or app metadata, inspect
project.yml and PhoneSpotterApp/Info.plist first.
- Keep
Phone Spotter compact and menu-bar-first.
- Preserve local-first behavior:
- pairing state and clues stay on-device
- provider handoff remains explicit
- no covert tracking or silent background surveillance flows
- Prefer the local runner script before typing
xcodegen or xcodebuild manually.
- If
doctor reports Xcode is not ready, stop and use the command it prints before trying build, test, or run.
- Use
typecheck when you want the fastest local validation of the Swift sources without waiting for a full build.
Build The Brief
Run the brief script first. Useful commands:
python3 scripts/find_my_phone_brief.py --goal "make a Mac menu bar app to find and ring my iPhone"
python3 scripts/find_my_phone_brief.py --goal "call my phone from the menu bar" --surface menu-bar-app --action call
python3 scripts/find_my_phone_brief.py --goal "open the provider flow for my phone" --surface menu-bar-app --action open-provider
The brief should capture:
- device type and likely Apple surface
- primary action:
locate, ring, call, open-provider, directions, or nearby
- requested shell: menu bar app, popover, settings window, or no app shell
- trust boundary for sign-in and automation
- fallback path if the preferred action is not scriptable
Capability Boundaries
- Treat Apple and Google apps, system services, and signed-in browser flows as the source of truth.
- Do not invent a general third-party Find My or Google Find API for arbitrary phone control.
- If the user says "exactly where it is," translate that into:
- current or last known map location when available
- directions handoff
- nearby or precision-style guidance only if Apple's surface explicitly provides it on that device
- If ringing requires interaction in an Apple-owned UI, say so and build the helper around getting there faster.
Menu Bar App Guidance
- Prefer
MenuBarExtra or an accessory app with an NSStatusItem.
- Keep the main surface action-oriented:
- latest device status
- open location
- ring device
- call the phone when a number is stored
- hand off to directions
- open the provider surface
- Prefer a small popover for status and a settings window for account, automation, and fallback options.
- Treat launch-at-login as optional.
- Always include a clear quit path in the UI.
- Show the current integration mode clearly:
- Apple app handoff
- Google web handoff
- Shortcuts helper
- signed-in browser helper
- If you are editing the bundled repo app, preserve its current split:
- status item plus popover
- settings scene
- QR pairing page on the same Wi-Fi
- local clue timeline and summary copy actions
Security And Privacy
- Keep Apple ID and Google credentials out of custom storage unless the user explicitly requests and accepts that risk.
- Prefer opening the Find My app, Google Find web flow, or the user's signed-in browser session instead of asking Codex to handle secrets.
- If automation touches browser state, use a profile the user controls and explain what is persisted.
- Never present stalking or covert-tracking behavior as acceptable. This skill is only for the user's own devices or devices they are authorized to manage.
Implementation Preferences
- Start with the smallest reliable flow that meets the request.
- Prefer:
- the bundled
apps/phone-spotter workspace when it fits
- deep links or app handoff
- Shortcuts or AppleScript glue
- browser automation last
- If browser control is needed, pair this skill with $playwright.
- If the user wants a real macOS app scaffold in the local workspace, create a fresh menu bar target rather than overloading an unrelated existing app.
Required Deliverables
- A short implementation brief with the chosen lane.
- Clear statement of what is and is not directly automatable.
- A concrete Mac surface:
- menu bar app
- shortcut
- browser helper
- support steps
- The fastest user path to:
- see phone location
- ring the phone
- call the phone when allowed
- hand off to directions when possible
Resources
scripts/run_phone_spotter.sh: local doctor, inspect, generate, open, build, test, and run helper for the Phone Spotter workspace.
scripts/find_my_phone_brief.py: normalizes the user's request into an implementation brief.
references/project-map.md: default workspace, main files, and guardrails for the bundled app.
references/apple-supported-paths.md: guidance on supported surfaces, trust boundaries, and phrasing around location precision.
1---2name: find-my-phone-studio3description: Build, run, troubleshoot, or refine a realistic Mac phone-recovery workflow, especially the bundled `apps/phone-spotter` menu bar app. Use when Codex needs a repo-native path for locate, ring, call, pairing, directions, or provider handoff on iPhone or Android without inventing unsupported tracking APIs.4---56# Find My Phone Studio78Use this skill when the user wants to work on a realistic phone-recovery workflow on macOS. If the current repo contains `apps/phone-spotter`, use that workspace by default.910Default product shape: an always-available macOS menu bar utility that helps the user jump into the best available Apple or Google action quickly, keeps local clues and pairing state on-device, and exposes a clear Quit path.1112## Quick Start13141. If this repo contains `apps/phone-spotter`, use that workspace first.152. Run `bash scripts/run_phone_spotter.sh doctor`.163. Run `bash scripts/run_phone_spotter.sh inspect`.174. Use `bash scripts/run_phone_spotter.sh generate` after changing `project.yml`.185. Use `bash scripts/run_phone_spotter.sh typecheck` for a fast source-level sanity pass before a full build.196. Use `bash scripts/run_phone_spotter.sh test` after model, pairing, or UI changes.207. Use `bash scripts/run_phone_spotter.sh run` when you need the local menu bar build relaunched.218. When the request is still exploratory, run `python3 scripts/find_my_phone_brief.py --goal "<user request>"` to normalize the product brief.229. Default to a menu bar extra with these actions:23 - `Locate Phone`24 - `Ring Phone`25 - `Call Phone`26 - `Open Provider`27 - `Open Directions`28 - `Copy last known location`29 - `Quit`3010. Be explicit about capability boundaries:31 - do not promise a public Find My control API unless the current Apple docs prove one exists32 - do not claim "exact" coordinates beyond what Apple's own surface provides33 - keep Apple ID credentials in Apple-owned surfaces when possible3411. Only scaffold a new app when the bundled `Phone Spotter` workspace is missing or clearly not a fit.3536## Workflow3738### Choose The Lane3940- `phone-spotter-workspace`: use and extend the bundled `apps/phone-spotter` menu bar app.41- `menu-bar-app`: build a persistent Mac menu bar app that opens supported Apple or Google surfaces, runs approved local helpers, and keeps "find" actions one click away.42- `shortcut-helper`: use Shortcuts or AppleScript glue when the user wants quick local automation and is comfortable with Apple-managed prompts or permissions.43- `browser-helper`: use browser automation only when the user explicitly wants the iCloud web flow and accepts sign-in in their own browser session.44- `support-only`: explain the most reliable user path without building a local app.4546### Work The Bundled App First4748- Read `references/project-map.md` before editing the app workspace.49- If the task changes project settings or app metadata, inspect `project.yml` and `PhoneSpotterApp/Info.plist` first.50- Keep `Phone Spotter` compact and menu-bar-first.51- Preserve local-first behavior:52 - pairing state and clues stay on-device53 - provider handoff remains explicit54 - no covert tracking or silent background surveillance flows55- Prefer the local runner script before typing `xcodegen` or `xcodebuild` manually.56- If `doctor` reports Xcode is not ready, stop and use the command it prints before trying `build`, `test`, or `run`.57- Use `typecheck` when you want the fastest local validation of the Swift sources without waiting for a full build.5859### Build The Brief6061Run the brief script first. Useful commands:6263```bash64python3 scripts/find_my_phone_brief.py --goal "make a Mac menu bar app to find and ring my iPhone"65python3 scripts/find_my_phone_brief.py --goal "call my phone from the menu bar" --surface menu-bar-app --action call66python3 scripts/find_my_phone_brief.py --goal "open the provider flow for my phone" --surface menu-bar-app --action open-provider67```6869The brief should capture:7071- device type and likely Apple surface72- primary action: `locate`, `ring`, `call`, `open-provider`, `directions`, or `nearby`73- requested shell: menu bar app, popover, settings window, or no app shell74- trust boundary for sign-in and automation75- fallback path if the preferred action is not scriptable7677### Capability Boundaries7879- Treat Apple and Google apps, system services, and signed-in browser flows as the source of truth.80- Do not invent a general third-party Find My or Google Find API for arbitrary phone control.81- If the user says "exactly where it is," translate that into:82 - current or last known map location when available83 - directions handoff84 - nearby or precision-style guidance only if Apple's surface explicitly provides it on that device85- If ringing requires interaction in an Apple-owned UI, say so and build the helper around getting there faster.8687### Menu Bar App Guidance8889- Prefer `MenuBarExtra` or an accessory app with an `NSStatusItem`.90- Keep the main surface action-oriented:91 - latest device status92 - open location93 - ring device94 - call the phone when a number is stored95 - hand off to directions96 - open the provider surface97- Prefer a small popover for status and a settings window for account, automation, and fallback options.98- Treat launch-at-login as optional.99- Always include a clear quit path in the UI.100- Show the current integration mode clearly:101 - Apple app handoff102 - Google web handoff103 - Shortcuts helper104 - signed-in browser helper105- If you are editing the bundled repo app, preserve its current split:106 - status item plus popover107 - settings scene108 - QR pairing page on the same Wi-Fi109 - local clue timeline and summary copy actions110111### Security And Privacy112113- Keep Apple ID and Google credentials out of custom storage unless the user explicitly requests and accepts that risk.114- Prefer opening the Find My app, Google Find web flow, or the user's signed-in browser session instead of asking Codex to handle secrets.115- If automation touches browser state, use a profile the user controls and explain what is persisted.116- Never present stalking or covert-tracking behavior as acceptable. This skill is only for the user's own devices or devices they are authorized to manage.117118### Implementation Preferences119120- Start with the smallest reliable flow that meets the request.121- Prefer:122 - the bundled `apps/phone-spotter` workspace when it fits123 - deep links or app handoff124 - Shortcuts or AppleScript glue125 - browser automation last126- If browser control is needed, pair this skill with [$playwright](/Users/arnav/.codex/skills/playwright/SKILL.md).127- If the user wants a real macOS app scaffold in the local workspace, create a fresh menu bar target rather than overloading an unrelated existing app.128129## Required Deliverables130131- A short implementation brief with the chosen lane.132- Clear statement of what is and is not directly automatable.133- A concrete Mac surface:134 - menu bar app135 - shortcut136 - browser helper137 - support steps138- The fastest user path to:139 - see phone location140 - ring the phone141 - call the phone when allowed142 - hand off to directions when possible143144## Resources145146- `scripts/run_phone_spotter.sh`: local doctor, inspect, generate, open, build, test, and run helper for the Phone Spotter workspace.147- `scripts/find_my_phone_brief.py`: normalizes the user's request into an implementation brief.148- `references/project-map.md`: default workspace, main files, and guardrails for the bundled app.149- `references/apple-supported-paths.md`: guidance on supported surfaces, trust boundaries, and phrasing around location precision.