Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add solana-mobile/solana-mobile-skills --skill integration-privygit clone --depth 1 https://github.com/solana-mobile/solana-mobile-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/solana-mobile/solana-mobile-skills/integration-privy)<a href="https://agentmods.dev/skills/solana-mobile/solana-mobile-skills/integration-privy"><img src="https://agentmods.dev/badge/skills/solana-mobile/solana-mobile-skills/integration-privy/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/solana-mobile/solana-mobile-skills/integration-privy"><img src="https://agentmods.dev/badge/skills/solana-mobile/solana-mobile-skills/integration-privy.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- Socket pass
- Snyk pass
- NVIDIA SkillSpector warn
SkillSpector: 4 findings, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Privilege Escalation · line 3 Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.Fix: Remove references to credential paths. Use environment variables or secrets managers. For docs, use placeholder paths (e.g., /path/to/config). Never load .env or token files in production code paths.
- medium MCP Rug Pull · line 58 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
- medium MCP Rug Pull · line 72 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
- medium MCP Rug Pull · line 234 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00087 | $0.02568 |
| Opus 5 | $0.00044 | $0.01284 |
| Sonnet 5 | $0.00017 | $0.00514 |
| Haiku 4.5 | $0.00009 | $0.00257 |
Grade A, and why
integration-privy scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 248 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Privy on Solana mobile
Privy owns the user: a durable account identifier and a JWT a backend can verify. Mobile Wallet Adapter owns the keys. Privy signs nothing in this setup — every signature still comes from the wallet app.
Sign-In-With-Solana joins the two. Privy generates a message, MWA signs it, Privy exchanges the signature for a session.
Reach for this when an app needs a stable user record across devices, a server-verifiable
session, or login methods beyond a wallet. An app that only needs a connected address does not
need Privy — use the solana-mobile-wallet skill alone.
Android only, and a development build only. MWA has no iOS support and does not run in Expo Go, which caps the whole integration.
Before you start
| Requirement | Where it comes from |
|---|---|
A working useMobileWallet() |
solana-mobile-wallet skill |
| A development build on Android | solana-mobile skill |
| A Privy app ID and client ID | The Privy dashboard — step 1 |
Step 1: create the Privy app
Do this first. Two of these values are compile-time environment variables, and one dashboard toggle decides whether login works at all.
- Sign in at https://dashboard.privy.io and click New app on the organization overview
- Name it, select Mobile app, create it, and save the App ID
- Under User management > Authentication, in the External wallets card, enable SVM (Solana) wallets
- Under App settings > Clients, set the app identifier to the
expo.android.packagevalue fromapp.json, and save the Client ID
The SVM wallets toggle is the one that is easy to skip and expensive to debug — while it is
off, login rejects every SIWS attempt even though the wallet signed correctly. The app
identifier matters because Privy checks the calling app's package name against the client.
EXPO_PUBLIC_PRIVY_APP_ID=your-privy-app-id
EXPO_PUBLIC_PRIVY_CLIENT_ID=your-privy-client-id
Both are public client-side identifiers, so EXPO_PUBLIC_ is correct. The Privy app secret
never belongs in a mobile app — anything prefixed EXPO_PUBLIC_ is readable in the shipped
bundle. The secret is for server code only.
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 248 lines · 87 tokens per session scan A d343bf328f96
integration-privy is a skill published in the GitHub repository solana-mobile/solana-mobile-skills (6 stars, last pushed today), licensed Apache-2.0. It adds 87 tokens to every session and 2,568 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
amethyst
Build customized Amethyst Nostr clients for Android. Fork, rebrand, customize, and distribute your own version.
bitcoin-infrastructure-bluewallet
BlueWallet: mobile Bitcoin + Lightning wallet (iOS/Android). LND on-device + LndHub backend variants. Multi-wallet support. USE WHEN: mobile wallet integrations, evaluating BlueWallet vs Phoenix / Mutiny.
install-wallet-ui-react-native
Use when setting up Wallet UI in a new or existing Expo application. Guides selection between modern @solana/kit (Recommended) or legacy @solana/web3.js.
setup-react-native-app
Scaffold a React Native (Expo) app with Phantom React Native SDK for mobile wallet integration, including polyfills and deep linking.
setup-solana-react-native-app
Set up a React Native app with @metamask/connect-solana using polyfills and multichain invokeMethod for Solana operations. Use when building Solana support in React Native where wallet-adapter is not available.
setup-evm-react-native-app
Scaffold a React Native app with MetaMask EVM integration including required polyfills, metro.config.js shims, import order constraints, mobile deeplinks, and a full component example.