$npx -y skills add sendaifun/solana-new --skill verify-humanity-pohIntegrate Proof of Human (POH) API to distinguish real users from bots in any Solana app. Use when a user says "filter bots", "verify humans", "sybil protection", "airdrop eligibility", "bot detection", "proof of human", "POH", "verify wallet is human", "gate my airdrop", "DAO sy
| 1 | ## Preamble (run first) |
| 2 | |
| 3 | ```bash |
| 4 | _TEL_TIER=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"telemetryTier": *"[^"]*"' | head -1 | sed 's/.*"telemetryTier": *"//;s/"$//' || echo "anonymous") |
| 5 | _TEL_TIER="${_TEL_TIER:-anonymous}" |
| 6 | _TEL_PROMPTED=$([ -f ~/.superstack/.telemetry-prompted ] && echo "yes" || echo "no") |
| 7 | _TEL_START=$(date +%s) |
| 8 | _SESSION_ID="$$-$(date +%s)" |
| 9 | mkdir -p ~/.superstack |
| 10 | echo "TELEMETRY: $_TEL_TIER" |
| 11 | echo "TEL_PROMPTED: $_TEL_PROMPTED" |
| 12 | if [ "$_TEL_TIER" != "off" ]; then |
| 13 | _TEL_EVENT='{"skill":"verify-humanity-poh","phase":"build","event":"started","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}' |
| 14 | echo "$_TEL_EVENT" >> ~/.superstack/telemetry.jsonl 2>/dev/null || true |
| 15 | _CONVEX_URL=$(cat ~/.superstack/config.json 2>/dev/null | grep -o '"convexUrl":"[^"]*"' | head -1 | cut -d'"' -f4 || echo "") |
| 16 | [ -n "$_CONVEX_URL" ] && curl -s -X POST "$_CONVEX_URL/api/mutation" -H "Content-Type: application/json" -d '{"path":"telemetry:track","args":{"skill":"verify-humanity-poh","phase":"build","status":"success","version":"0.2.0","platform":"'$(uname -s)-$(uname -m)'","timestamp":'$(date +%s)000'}}' >/dev/null 2>&1 & |
| 17 | true |
| 18 | fi |
| 19 | ``` |
| 20 | |
| 21 | If `TEL_PROMPTED` is `no`: Before starting the skill workflow, ask the user about telemetry. |
| 22 | Use AskUserQuestion: |
| 23 | |
| 24 | > Help superstack get better! We track which skills get used and how long they take — |
| 25 | > no code, no file paths, no PII. Change anytime in `~/.superstack/config.json`. |
| 26 | |
| 27 | Options: |
| 28 | - A) Sure, help superstack improve (anonymous) |
| 29 | - B) No thanks |
| 30 | |
| 31 | If A: run this bash: |
| 32 | ```bash |
| 33 | echo '{"telemetryTier":"anonymous"}' > ~/.superstack/config.json |
| 34 | _TEL_TIER="anonymous" |
| 35 | touch ~/.superstack/.telemetry-prompted |
| 36 | ``` |
| 37 | |
| 38 | If B: run this bash: |
| 39 | ```bash |
| 40 | echo '{"telemetryTier":"off"}' > ~/.superstack/config.json |
| 41 | _TEL_TIER="off" |
| 42 | touch ~/.superstack/.telemetry-prompted |
| 43 | ``` |
| 44 | |
| 45 | This only happens once. If `TEL_PROMPTED` is `yes`, skip this entirely and proceed to the skill workflow. |
| 46 | |
| 47 | > **Wrong skill?** See [SKILL_ROUTER.md](../../SKILL_ROUTER.md) for all available skills. |
| 48 | |
| 49 | # Verify Wallet Humanity with POH |
| 50 | |
| 51 | ## Overview |
| 52 | |
| 53 | Integrate [Proof of Human](https://proofofhuman.ge) (POH) — a decentralised, AI-powered API that verifies whether a Solana or EVM wallet is controlled by a real person or an automated bot. |
| 54 | |
| 55 | POH runs 120+ detection methods in parallel (on-chain balances, staking, RWA holdings, social graphs, identity APIs, Galxe, Farcaster, ENS, web3.bio) and returns an AI verdict with confidence score. No KYC. No captcha. No central authority. |
| 56 | |
| 57 | **Devnet endpoint:** `https://proofofhuman.ge/devnet/checker` |
| 58 | **Free tier:** 100 scans per wallet, no API key required (use `walletAddress` field instead) |
| 59 | |
| 60 | ## Use Case Decision (Step 0) |
| 61 | |
| 62 | Ask the user what they're building before writing any code: |
| 63 | |
| 64 | - **Airdrop / token distribution** → scan recipient list, filter out `AI` verdicts, optionally set confidence threshold |
| 65 | - **DAO / governance gate** → on-submit check before recording vote |
| 66 | - **NFT allowlist / mint guard** → pre-mint eligibility check |
| 67 | - **API / protocol rate limiting** → per-request human gate using API key |
| 68 | - **General sybil resistance** → batch scan existing wallet list |
| 69 | |
| 70 | If the use case is unclear, ask: "Are you filtering a list of wallets, gating live interactions, or checking individual wallets on demand?" |
| 71 | |
| 72 | ## Workflow |
| 73 | |
| 74 | 1. Check `.superstack/build-context.md` for stack and language context. If missing, ask: TypeScript or Rust? Frontend-only or program-level gating? |
| 75 | |
| 76 | 2. Read [references/poh-api-reference.md](references/poh-api-reference.md) — covers all endpoints, request/response schemas, error codes, and verdict interpretation. |
| 77 | |
| 78 | 3. Read [references/integration-patterns.md](references/integration-patterns.md) — pick the pattern that matches the use case: single-wallet check, bulk CSV scan, async polling, or server-side middleware. |
| 79 | |
| 80 | 4. **Get API access:** |
| 81 | - For testing: use `walletAddress` field (free tier, 100 scans) |
| 82 | - For production: connect wallet at `https://proofofhuman.ge/` → Profile → copy API key |
| 83 | - For devnet/testing: connect wallet at `https://proofofhuman.ge/devnet/` → Profile → copy API key |
| 84 | - Devnet faucet: `POST https://proofofhuman.ge/devnet/profile/faucet` (10 000 POH test tokens) |
| 85 | |
| 86 | 5. **Implement the integration** following the chosen pattern. Key decision points: |
| 87 | - Single address → synchronous response, use `result` directly |
| 88 | - Multiple addresses → async job, poll `GET /checker/job/:jobId` until `status: "done"` |
| 89 | - What to do with `UNCERTAIN` verdict — prompt user to add more signals, or apply a confidence thresho |