Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use Apple Passwords on macOS when the user asks for Apple/iCloud passwords, OTPs, or autofill from Apple's Passwords app.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 491% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 229% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-20 | ✓→✓ | = Same ✓ | 28% | 0% |
| case-21 | ✓→✓ | = Same ✓ | 80% | 0% |
Use the applePasswords global in the REPL to read or autofill credentials from Apple's Passwords app on macOS.
Before calling getPasswords, getOtps, or autofillLogin, notify the user first with the notification tool. These calls can trigger a macOS Touch ID / Apple Passwords auth prompt and will not return until the user approves or cancels it.
Never ask the user to reveal a password, OTP seed, recovery code, or Touch ID result. Prefer autofillLogin when signing in because it fills the secret without printing it.
js// Check helper availability. console.log(await applePasswords.capabilities()); // First-time auth, only when a call says Apple Passwords is not authenticated. await applePasswords.requestAuth(); // Ask the user for the 6-digit Apple Passwords code only if macOS shows one. await applePasswords.verifyAuth('<pin>'); // Find accounts for a site. No password is returned. console.log(await applePasswords.listLogins('https://example.com')); // -> [{ username, domains }] // Notify the user before this call; it may wait on Touch ID. const passwords = await applePasswords.getPasswords('https://example.com', 'me@example.com'); // -> [{ username, domain, password }] // Notify the user before this call; it may wait on Touch ID. await applePasswords.autofillLogin(page, { url: 'https://example.com', username: 'me@example.com', usernameField: 'e12', passwordField: 'e13', submit: true, }); // -> { status: 'filled', username, domain, passwordFilled: true } // Notify the user before this call; it may wait on Touch ID. console.log(await applePasswords.getOtps('https://example.com')); // -> [{ username, domain, code, source }]
tsdeclare global { const applePasswords: ApplePasswordsApi; } interface ApplePasswordsApi { capabilities(): Promise<Record<string, unknown>>; requestAuth(): Promise<{ status: 'auth-requested'; instruction: string }>; verifyAuth(pin: string): Promise<{ status: 'authenticated' }>; listLogins(url: string): Promise<Array<{ username: string; domains: string[] }>>; getPasswords(url: string, username?: string): Promise<Array<{ username: string; domain: string; password: string }>>; getOtps(url: string): Promise<Array<{ username: string; domain: string; code: string; source?: string }>>; autofillLogin(page: Page, options?: { url?: string; // default: page.url() username?: string; // required if multiple logins match usernameField?: string; // snapshot ref or CSS selector passwordField?: string; // snapshot ref or CSS selector; default: first password input submit?: boolean; // press Enter after filling password }): Promise<{ status: 'filled'; username: string; domain: string; passwordFilled: true }>; }
listLogins(url) first when account choice is unclear.autofillLogin.autofillLogin cannot find fields automatically, take a fresh snapshot() and pass usernameField / passwordField refs.Other measured skills in the registry, with their headline benchmark lift.