跳到主内容
智客 ZICQ

技能库 智客分类:Agent 工作流 seeker-connect

Seeker Connect

连接一个web, React Introduct, 或 Kotlin dapp, 连接到Seeker设备的内置钱包 与Seeker Connect. 在将钱包连接,与索拉纳的签名,信件签名,或交易签名添加到博览会或复出本地应用程序上时,使用它上的一个Kotlin应用程序,或在其浏览器中运行的网站,注册"Seeker Connection"钱包标准钱包,设置中继器以进行中继Domain,使用搜索器-连接按钮元件或SeekerConnectButton本地视图,安装@solana-mobile/helf-connect-nact-native或com.solanamobile:helder-connection,或调试SeekerConnectError代码如关联-failed.

5915 安装量

官方网址:skills.sh

技能介绍

先看中文介绍;官方 description 原文单独保留,不改写 SKILL.md。

做什么

将网络、 本地反应或 Kotlin dapp 连接到“ 搜索器” 设备的内置钱包, 并使用“ 搜索器” 连接

何时用

将钱包连接、与索拉纳的签名、信件签名、或交易签名添加到博览会或复出原生应用程序的浏览器手机、其上的一个克特林应用程序,或在其浏览器中运行的网站,注册“Seeker Connection”钱包标准钱包,设置诺斯特中继器

代理如何加载

按 Agent Skills 渐进披露:启动时只加载 name 与 description(约 100 token);任务匹配后才读入整份 SKILL.md 正文;scripts/、references/、assets/ 仅在需要时再读。 本文件正文结构:Seeker Connect、The mental model — read this before writing code、Step 1: install、Step 2: set the relay、Step 3: register once at startup、Step 4: use it like any other wallet。 其中含规范建议的小节:分步指令。

文件分析

文件分析:除 SKILL.md 外,正文引用了 references/react-native.md、references/kotlin.md、references/troubleshooting.md、references/imperative-api.md,属于带资源的技能包,这些文件按需再读。

官方 description(原文)

Connect a web, React Native, or Kotlin dapp to the Seeker device's built-in wallet with Seeker Connect. Use when adding wallet connection, sign-in with Solana, message signing, or transaction signing to an Expo or React Native app on a Seeker phone, a Kotlin app on it, or a website that runs in its browser, registering the "Seeker Connect" Wallet Standard wallet, setting the Nostr relay for relayDomain, using the seeker-connect-button element or the SeekerConnectButton native view, installing @solana-mobile/seeker-connect-react-native or com.solanamobile:seeker-connect, or debugging SeekerConnectError codes like association-failed.

Seeker ConnectThe mental model — read this before writing codeStep 1: installStep 2: set the relayStep 3: register once at startupStep 4: use it like any other walletHandle errors by codeOptional: the branded connect buttonReference materialRelated skillsLinks

来源分类:skills.sh agent-skill

SKILL.md 与 Agent 调用

官方规范 ↗
name
seeker-connect
description
Connect a web, React Native, or Kotlin dapp to the Seeker device's built-in wallet with Seeker Connect. Use when adding wallet connection, sign-in with Solana, message signing, or transaction signing to an Expo or React Native app on a Seeker phone, a Kotlin app on it, or a website that runs in its browser, registering the "Seeker Connect" Wallet Standard wallet, setting the Nostr relay for relayDomain, using the seeker-connect-button element or the SeekerConnectButton native view, installing @solana-mobile/seeker-connect-react-native or com.solanamobile:seeker-connect, or debugging SeekerConnectError codes like association-failed.
  1. 发现技能客户端向 Agent 提供名称与描述目录。
  2. 匹配与调用用户指定或任务匹配后,载入 SKILL.md 指令。
  3. 按需加载按步骤读取参考文档、使用脚本与素材。
指令中引用的文件 · 4
  • references/react-native.md
  • references/kotlin.md
  • references/troubleshooting.md
  • references/imperative-api.md

以下路径提取自原文;文件是否齐全请以来源仓库中的完整目录为准。

具体调用语法与可用工具以目标 Agent 客户端为准。 查看调用机制说明 ↗

安装这个技能

Skills CLI ↗

先选择目标 Agent 和安装范围,保留技能包的附属文件,安装后检查客户端能否发现该技能。

该技能引用了附属文件,请从来源获取完整目录;仅复制 SKILL.md 可能缺少依赖。

交给 Agent 安装

复制安装指令给支持 Agent Skills 的代理,确认其中的目标目录与客户端匹配。

把 Agent Skill「seeker-connect」安装到我的项目:SKILL.md 原文与官方 description 见 https://zicq.com/zh/skills/skl-0de348b1565bb59b-Seeker-Connect.html
请存为 .cursor/skills/seeker-connect/SKILL.md 或 .claude/skills/seeker-connect/SKILL.md,frontmatter 的 name 与 description 保持原样,不要改写。
该技能还带 scripts/、references/、assets/ 等文件,请从 https://github.com/solana-mobile/solana-mobile-skills 取完整目录,不要只建一个 SKILL.md。

GitHub 完整包 ↗

终端安装 · Skills CLI

需要 Node.js 与 npx。先查看仓库技能列表,确认实际名称。

npx skills add 'https://github.com/solana-mobile/solana-mobile-skills' --list

npx skills add 'https://github.com/solana-mobile/solana-mobile-skills' --skill 'seeker-connect'

CLI 会交互选择目标 Agent,默认安装到项目;用户级安装使用 -g。先通过查看命令核对仓库内容,再用 npx skills list 检查已安装技能。

阅读排版
--- name: seeker-connect description: Connect a web, React Native, or Kotlin dapp to the Seeker device's built-in wallet with Seeker Connect. Use when adding wallet connection, sign-in with Solana, message signing, or transaction signing to an Expo or React Native app on a Seeker phone, a Kotlin app on it, or a website that runs in its browser, registering the "Seeker Connect" Wallet Standard wallet, setting the Nostr relay for relayDomain, using the seeker-connect-button element or the SeekerConnectButton native view, installing @solana-mobile/seeker-connect-react-native or com.solanamobile:seeker-connect, or debugging SeekerConnectError codes like association-failed. --- # Seeker Connect Seeker Connect links a web page open in the browser **on the device** to a Solana Mobile certified device's own wallet — Seeker is the first such device. It is a dapp-only SDK built on top of the official Mobile Wallet Adapter libraries: a UX/DX layer, not a protocol reimplementation. Where generic MWA centers on a "pick a wallet" chooser, Seeker Connect launches the device wallet directly through the MWA spec's Endpoint-specific URI (Android App Link) mechanism, carries the session over a Nostr relay, and ships Seeker-branded progress and error UI — all exposed to the app as an ordinary Wallet Standard wallet named **"Seeker Connect"**. Targets: **Expo / React Native, Kotlin, and web are all available.** For an Expo or React Native app, read the mental model below, then follow [references/react-native.md](references/react-native.md); for a Kotlin app, [references/kotlin.md](references/kotlin.md). The `expo-kit-minimal` and `kotlin-compose-minimal` templates of `npx solana-mobile@latest create` ship each path wired up. Both expose the same client API as the web, with no relay to configure and the branded UI drawn natively. The rest of this file walks the web path. Plain Mobile Wallet Adapter in React Native, without Seeker Connect, is the `solana-mobile-wallet` skill. ## The mental model — read this before writing code - **There is no long-lived connection.** Every wallet interaction (connect, sign message, sign transaction) opens its own short-lived MWA session, runs one request, and tears down. Each interaction launches the wallet app and shows a branded progress overlay — the one exception is a silent connect, which only reads the cache and never opens a session. This is by design — do not build reconnect loops or keep-alive logic around it. - **"Connected" means "holds a cached authorization."** The first `connect()` stores a wallet-issued `authToken` plus accounts and capabilities (localStorage by default). Later operations replay that token silently — no repeated consent prompt. - **Disconnect only forgets the token locally.** It deliberately never calls the wallet's `deauthorize`, because that would launch the wallet app just to disconnect. - **It only completes on the device.** On desktop, connect fails with `association-failed` — typically within seconds, when nothing answers the wallet launch; the association timeout only applies to a wallet that launches but never connects. Register the wallet unconditionally; it simply won't get past association elsewhere. - **The SDK ships no default relay.** Use Solana Mobile's, `relay.solanamobile.com`: it is free, including in production. Using it requires agreeing to Solana Mobile's terms, so tell the developer to accept them — Step 2. ## Step 1: install **New project:** the `react-kit-shadcn` template from the Solana Mobile CLI ships with Seeker Connect already wired up on Solana Mobile's relay. The next steps `create` prints tell the developer to accept the relay terms on the quickstart page: ```bash npx solana-mobile@latest create my-app --template react-kit-shadcn ``` **Existing app:** install the Wallet Standard entry point plus the Wallet Standard helpers the snippets below import from: ```bash npm install @solana-mobile/seeker-connect-wallet-standard @solana/wallet-standard-features @wallet-standard/app @wallet-standard/features ``` Use `0.1.2` or later. Earlier releases sit on Mobile Wallet Adapter 2.x, which can leave a wallet call pending forever when the session drops; `0.1.2` moves to MWA 3.0, which rejects it with `session-closed` instead. The Wallet Standard package pulls in the other Seeker Connect packages (`core`, `ui`, `web`) as dependencies. They are not re-exported, though — so also install any of them the app imports from directly (`@solana-mobile/seeker-connect-ui` for the optional button below, `@solana-mobile/seeker-connect-web` for the imperative path in the references); strict package managers like pnpm refuse imports of undeclared transitive dependencies. | Package | Role | | --- | --- | | `@solana-mobile/seeker-connect-core` | Shared contracts: config, error taxonomy, `SeekerLink` port | | `@solana-mobile/seeker-connect-ui` | Lit elements: progress overlay, error dialog, branded button | | `@solana-mobile/seeker-connect-wallet-standard` | **The entry point** — the Wallet Standard wallet | | `@solana-mobile/seeker-connect-web` | MWA-over-Nostr transport, plus an imperative SDK | ## Step 2: set the relay Seeker Connect carries MWA's extended remote communication protocol over a Nostr relay, named by `relayDomain`. Payloads are end-to-end encrypted between dapp and wallet; the relay carries ciphertext only. **Use `relay.solanamobile.com`.** Solana Mobile runs it for Seeker Connect, and it is free to use, including in production. Pass the bare host; the SDK adds the `wss://` scheme itself. **Tell the developer to accept the relay terms.** Using Solana Mobile's relay requires agreeing to Solana Mobile's terms. Whenever you wire it in, say so, and point the developer at the quickstart page where they accept them: https://docs.solanamobile.com/solana-mobile-stack/seeker-connect-quickstart ## Step 3: register once at startup Call `registerSeekerConnect` before the UI renders, so wallet discovery sees it from the first render. It must run in the browser — the snippet below reads `window`, so under SSR (Next.js and similar) put the call in a client-only module or guard it with `typeof window !== 'undefined'`; in a plain client-rendered app, module scope of the entry file is fine: ```ts import { registerSeekerConnect } from '@solana-mobile/seeker-connect-wallet-standard'; registerSeekerConnect({ identity: { name: 'My Dapp', uri: window.location.origin, icon: '/icon.png', // resolved relative to uri; shown in the wallet's consent UI }, relayDomain: 'relay.solanamobile.com', // requires accepting Solana Mobile's terms — Step 2 }); ``` Configuration: | Option | Required | Notes | | --- | --- | --- | | `associationTimeoutMs` | no | How long a launch may take before `association-failed`. Default 30s | | `chain` | no | Chain requested at authorization. Default `solana:mainnet` | | `firstConnectWalletBaseUri` | no | **Leave unset** unless Solana Mobile publishes a value to paste. Unset, first connects use the generic `solana-wallet:` scheme; set, the page navigates to that host — see [references/troubleshooting.md](references/troubleshooting.md#first-connect-opens-a-generic-wallet-chooser) | | `identity` | yes | `name`, `uri`, optional `icon`. Shown in the wallet's consent UI | | `relayDomain` | yes | Nostr relay that carries the session traffic. Use `relay.solanamobile.com` — Step 2 | `registerSeekerConnect` also accepts `seekerLink`, `authorizationCache`, and `presenter` overrides — see [references/imperative-api.md](references/imperative-api.md). ## Step 4: use it like any other wallet After registration, "Seeker Connect" appears in the Wallet Standard registry, so wallet-adapter, ConnectorKit, `@solana/react-hooks`, or a raw `@wallet-standard/app` listing all pick it up with no further wiring. Existing connect buttons and signing code keep working. Features exposed: `standard:connect`, `standard:disconnect`, `standard:events`, `solana:signMessage`, `solana:signIn`, and — depending on the wallet's reported capabilities after the first connect — `solana:signTransaction` and/or `solana:signAndSendTransaction`. Working with the wallet directly: ```ts import { SeekerConnectWalletName } from '@solana-mobile/seeker-connect-wallet-standard'; import { getWallets } from '@wallet-standard/app'; import { StandardConnect } from '@wallet-standard/features'; const seeker = getWallets() .get() .find((wallet) => wallet.name === SeekerConnectWalletName); const { accounts } = await seeker.features[StandardConnect].connect(); ``` **Restore the session on page load** with a silent connect — it reads the cache and never launches the wallet, resolving with zero accounts when there is nothing cached: ```ts const { accounts } = await seeker.features[StandardConnect].connect({ silent: true }); ``` **Feature-detect the signing routes.** Until the first connect, both transaction features are assumed; after it they are re-derived from the wallet's actual capabilities, announced via a `standard:events` `change` event. Check before calling: ```ts import { SolanaSignAndSendTransaction } from '@solana/wallet-standard-features'; const feature = seeker.features[SolanaSignAndSendTransaction]; if (feature) { const [{ signature }] = await feature.signAndSendTransaction({ account, chain: seeker.chains[0], transaction, }); } ``` `chain` is part of the Wallet Standard input, but this wallet ignores it — the network is the one passed to `registerSeekerConnect`, replayed from the cached authorization on every call. Nothing cross-checks the two, so a per-call `solana:devnet` against a mainnet registration submits on mainnet without complaint. Pass `seeker.chains[0]` so the two can never disagree, and change networks at registration. Transactions cross the feature boundary as raw serialized bytes (`Uint8Array`), legacy and v0 both supported — serialize with whichever client library the app already uses. Sign-in follows the SIWS spec via `solana:signIn`; `domain` defaults to `window.location.host`. When sign-in authenticates a user, the server is the authority, not the client: issue a single-use, short-lived nonce server-side, and verify the returned message and signature — including the expected domain and validity window — on the server before creating a session. The `seeker-genesis-token` skill walks through that server flow step by step. ## Handle errors by code Wallet outcomes reject with a `SeekerConnectError` carrying a `code`: | Code | Meaning | | --- | --- | | `association-failed` | No wallet completed the launch: timeout, relay unreachable or misconfigured, or not on a Seeker | | `authorization-declined` | The user declined authorization. The cached token is wiped; the next connect prompts fresh consent | | `cancelled` | The user dismissed the progress overlay. **A normal outcome — never surface it as an error** | | `request-declined` | The wallet declined to sign or submit | | `session-closed` | The session ended before the interaction completed. After `signAndSendTransaction` the transaction may still have landed, and the error carries no signature — never retry automatically — see [references/troubleshooting.md](references/troubleshooting.md#a-wallet-call-never-settles) | | `wallet-error` | Any other wallet-reported error | Three failures are plain `Error`s instead, and they are misuse rather than wallet outcomes: `signAndSendTransaction` on a wallet that reported no support for it, any signing call before a successful connect, and a sign-in the wallet answered without a result. That distinction decides who shows the error. The branded dialog fires for `SeekerConnectError` and nothing else — every code above except `cancelled`, which is a normal outcome and stays silent. The three plain `Error`s never reach the presenter, so if the app shows nothing they fail invisibly. Branch on the type first, then on `.code`: ```ts import { SeekerConnectError, SeekerConnectErrorCode } from '@solana-mobile/seeker-connect-wallet-standard'; try { await seeker.features[StandardConnect].connect(); } catch (error) { if (error instanceof SeekerConnectError) { if (error.code === SeekerConnectErrorCode.cancelled) { return; // user closed the overlay; nothing to report } // The SDK has shown its dialog. Log, and leave the UI in the disconnected state. console.error(error); return; } // No dialog was shown for this one. Surface it yourself. showToast('Could not connect to the wallet.'); // your app's own error UI console.error(error); } ``` ## Optional: the branded connect button `@solana-mobile/seeker-connect-ui` ships a `` custom element in Shadow DOM (no host CSS needed). The SDK defines its elements on first use; call `defineSeekerConnectElements()` at startup to define them eagerly: ```ts import { defineSeekerConnectElements } from '@solana-mobile/seeker-connect-ui'; defineSeekerConnectElements(); ``` ```html ``` Attributes: `disabled`, `theme="light" | "dark"` (names the host page's theme), and `variant="connect"` (default) or `variant="sign-in"` for the label. Wire `click` to the connect or sign-in call yourself — the button is presentation only. ## Reference material - [references/kotlin.md](references/kotlin.md) — the Kotlin SDK: Gradle setup, the `SeekerConnect` constructor, the client methods, the Compose button and dialogs, and `SeekerConnectException` codes - [references/react-native.md](references/react-native.md) — the React Native package: install, `https` identity requirement, the client methods, and the native button - [references/imperative-api.md](references/imperative-api.md) — the non-Wallet-Standard path via `createNostrSeekerLink().transact`, and the `seekerLink` / `authorizationCache` / `presenter` overrides - [references/troubleshooting.md](references/troubleshooting.md) — association failures, desktop testing, capability-derived features, cache behavior ## Related skills - `seeker-domains` — display `.skr` names instead of raw addresses - `seeker-genesis-token` — verify Seeker device ownership after connecting - `solana-mobile` — the CLI, templates, and toolchain behind `solana-mobile create` - `solana-mobile-wallet` — wallet connection in React Native apps through Mobile Wallet Adapter directly, without Seeker Connect ## Links - MWA web docs: https://docs.solanamobile.com/get-started/web/installation - Seeker Connect docs: https://docs.solanamobile.com/solana-mobile-stack/seeker-connect - Seeker Connect quickstart (relay terms live here): https://docs.solanamobile.com/solana-mobile-stack/seeker-connect-quickstart - Seeker Connect repository: https://github.com/solana-mobile/seeker-connect

相关技能

Agent 工作流

Skill Creator

创造有效技能指南。 当用户想创造出新的技能(或更新现有的技能),以专业知识,工作流程,或工具集成来扩展克洛德的能力时,应该使用这种技能.

Agent 工作流

Clawdhub

使用ClawdHub CLI搜索,安装,更新并发布从taladhub.com的代理技能. 需要获取苍蝇上的新技能时使用,将安装的技能同步到最新版本或特定版本,或者发布 npm-instainddhub CLI 的新/更新的技能文件夹.

Agent 工作流

Agent Team Orchestration

管弦乐团多代理团队,任务设定周期,交接协议,审查工作流程. 使用时间: (1)建立2+特派员队伍,具有不同专业,(2)确定任务路线和生命周期(收录框_ spec_建设_审查_完成),(3)在特派员之间制定交接协议,(4)建立审查和质量关口,(5)管理特派员之间的交流和文物共享.

Agent 工作流

Superpowers

Spec-first,TDD,子代理驱动的软件开发工作流程. 当:(1)构建任何新功能或应用——触发脑暴_计划_子代理执行回路,(2)调试出一个bug或测试失败——触发系统性的根起过程,(3)用户说"让我们构建","帮助我计划","我想添加X",或"这个被打破",(4)完成一个功…