skills/controller-signers/SKILL.md
Configure authentication methods for Cartridge Controller including passkeys, social login, and external wallets. Use when implementing user authentication, adding multiple signers for account recovery, customizing signup options, or integrating external wallets like MetaMask or Phantom. Covers WebAuthn passkeys, Google/Discord/Twitter OAuth, wallet connections, and dynamic authentication flows.
npx skillsauth add cartridge-gg/docs controller-signersInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Controller supports multiple authentication methods (signers) for flexibility and security.
| Type | Description | Best For |
|------|-------------|----------|
| webauthn | Passkey (biometric/hardware key) | Primary auth, most secure |
| google | Google OAuth | Easy onboarding |
| discord | Discord OAuth | Gaming communities |
| twitter | Twitter/X OAuth | Social integration |
| argent | Argent wallet (Starknet) | Starknet native users |
| braavos | Braavos wallet (Starknet) | Starknet native users |
| metamask | MetaMask (desktop only) | EVM users |
| phantom-evm | Phantom EVM mode (desktop only) | Multi-chain users |
| rabby | Rabby wallet (desktop only) | Security-focused users |
| walletconnect | WalletConnect (desktop only) | Cross-device |
| password | Email/password | Testing only |
Warning: Password authentication is non-recoverable. If users lose their password, they permanently lose account access. Do not use in production.
const controller = new Controller({
signupOptions: [
"webauthn", // Passkeys
"google", // Google OAuth
"discord", // Discord OAuth
"twitter", // Twitter/X OAuth
"argent", // Argent wallet
"braavos", // Braavos wallet
"metamask", // MetaMask (desktop)
"phantom-evm", // Phantom (desktop)
"rabby", // Rabby (desktop)
"walletconnect",// WalletConnect (desktop)
],
});
Order reflects UI order. With one option, branded buttons appear.
Override auth options per connection:
// Default options
const controller = new Controller({
signupOptions: ["webauthn", "google", "discord"],
});
// Branded Phantom flow
await controller.connect(["phantom-evm"]);
// Branded Google flow
await controller.connect(["google"]);
Single signer config shows branded styling:
// Shows "sign up with Phantom" button with Phantom branding
const controller = new Controller({
signupOptions: ["phantom-evm"],
});
Platform support: iOS (Face ID/Touch ID), Android, Windows Hello, password managers (Bitwarden, 1Password).
Passkeys are backed up via:
Uses Auth0 + Turnkey wallet infrastructure:
Native app limitation: OAuth may not work in webviews. Use passkeys for native apps.
Note: EVM wallets are automatically hidden on mobile browsers.
const success = await controller.externalSwitchChain(
"metamask", // wallet type
chainId // target chain (hex)
);
Braavos does not support chain switching.
const response = await controller.externalWaitForTransaction(
"metamask",
txHash,
30000 // timeout ms
);
if (response.success) {
console.log("Receipt:", response.result);
} else {
console.error("Error:", response.error);
}
Add backup signers via Settings > Signer(s) > Add Signer (Mainnet only).
To remove a signer:
Best practices:
Argent and Braavos wallets auto-sync when user switches accounts in wallet.
Controller registers accountsChanged listener and updates state automatically.
Note: Account synchronization is currently only available for Starknet wallets (Argent and Braavos). Other external wallets maintain existing connection behavior.
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
const authOptions = isMobile
? ["webauthn", "google", "discord", "argent", "braavos"]
: ["webauthn", "google", "discord", "argent", "braavos", "metamask", "walletconnect"];
await controller.connect(authOptions);
data-ai
Integrate Cartridge Controller wallet into Starknet applications. Use when setting up Controller for the first time, installing packages, configuring chains/RPC endpoints, or troubleshooting basic integration issues. Covers installation, Controller instantiation, ControllerConnector vs SessionConnector choice, chain configuration, and package compatibility.
testing
Configure session keys and policies for Cartridge Controller to enable gasless, pre-approved transactions. Use when defining contract interaction policies, setting spending limits, configuring signed message policies, or implementing error handling for session-based transactions. Covers SessionPolicies type, policy definitions, verified sessions, and error display modes.
development
Integrate Cartridge Controller into React applications using starknet-react. Use when building React/Next.js web apps with Controller, setting up StarknetConfig provider, using hooks like useConnect/useAccount, or implementing wallet connection components. Covers ControllerConnector setup, provider configuration, and transaction execution patterns.
development
Integrate Cartridge Controller into native mobile applications (iOS, Android, React Native) and web wrappers (Capacitor). Use when building mobile games or apps that need Controller wallet functionality with local keypair signing. Covers SessionConnector for native auth flows, Controller.c FFI bindings, passkey configuration with Apple App Site Association, and platform-specific setup.