Token导航 LogoToken导航

Agent Skill · 研究检索

trusted-agents(值得信赖的 Agent 商)

trusted-agents 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

trusted-agents 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 56,650。

总安装 447周安装 19GitHub Stars 2下载 157核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:trusted-agents(值得信赖的 Agent 商)
来源仓库:https://github.com/ggonzalez94/trusted-agents
仓库路径:skills/trusted-agents
安装命令:
npx skills add https://github.com/ggonzalez94/trusted-agents --skill trusted-agents
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/ggonzalez94/trusted-agents --skill trusted-agents

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

trusted-agents 用于查找、检索和筛选相关信息。适合在 Codex、Claude、Cursor、Gemini CLI 中根据关键词或任务场景快速定位候选结果。通过 GitHub 安装,需结合原始 README 核验具体用法和权限边界。安装前建议确认维护状态及是否会触发联网、命令执行或文件读写。

注意该技能当前分类为研究检索,功能以实际文档为准。

来源仓库内路径:skills/trusted-agents

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/ggonzalez94/trusted-agents --skill trusted-age…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

trusted-agents 怎么安装?

在终端执行 npx skills add https://github.com/ggonzalez94/trusted-agents --skill trusted-agents。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

trusted-agents 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

trusted-agents 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

trusted-agents 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

trusted-agents 用的人多吗?

公开数据是累计安装 447 次,近一周安装 19 次,下载 157 次,GitHub 2 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

trusted-agents 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
trusted-agents

值得信赖的 Agent 商 · 本页

4472接触敏感数据未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Trusted Agents Protocol

TAP gives your AI agent a verifiable on-chain identity so it can connect, message, and transact with other agents. It combines ERC-8004 on-chain registration with XMTP encrypted messaging and a directional permission system. Think of it as a secure contact list where each contact comes with explicit permissions for what you can ask each other to do.

Agent-First Rules

  • Start with tap schema or tap <command> --describe when you are unsure about flags, defaults, or response shape.
  • Output is TTY-aware: JSON when piped (agents get JSON by default), text when interactive (humans get readable tables). You can force a format with --output json, --output text, or --json/--plain flags.
  • Add --select on list/show commands unless you truly need the full payload.
  • Run --dry-run before every supported mutation. Dry-run previews include a scope field identifying the operation type (e.g. connection/request, transfer/execute, permissions/update, scheduling/respond).
  • Pipe grant JSON with --file - when you are generating the payload dynamically.

Examples:

tap schema contacts list
tap contacts list --select name,status --limit 10
tap connect "<invite-url>" --dry-run
cat grants.json | tap permissions grant WorkerAgent --file - --dry-run

JSON envelope shape: {"status": "ok"|"error", "data":..., "metadata": {"format", "version",...}}. Check status to distinguish success from failure; error responses include "error": {"code", "message"}.

Status Check

Run these to figure out where things stand (piped output is JSON by default, --output json is optional):

which tap                                          → Not found? See Install
tap schema                                         → Inspect runtime contract
tap config show --select agent_id,chain            → Errors? Start at Onboard step 1
tap identity show --select agent_id,chain          → agent_id < 0? Resume Onboard (fund + register)
tap balance                                        → Check funding
tap contacts list --select name,status             → Empty? See Connect

If you're inside OpenClaw Gateway and tap_gateway is available, also check:

tap_gateway status   → Plugin configured? Warnings?

Decision flow:

tap not installed ──→ Install
        │
   config fails ──→ Onboard (init + fund + register)
        │
   agent_id < 0 ──→ Onboard (fund + register)
        │
   [OpenClaw] tap_gateway available? ──→ Configure plugin if needed
        │
   no contacts ──→ Connect
        │
   waiting on async ──→ tap message sync (or tap_gateway sync)
        │
   ready ──→ message, transfer, schedule meetings, manage permissions

Install

Remote install (no clone needed):

curl -fsSL https://raw.githubusercontent.com/ggonzalez94/trusted-agents/main/scripts/install.sh | bash

Stable is the default. To opt into prereleases:

curl -fsSL https://raw.githubusercontent.com/ggonzalez94/trusted-agents/main/scripts/install.sh | bash -s -- --channel beta
curl -fsSL https://raw.githubusercontent.com/ggonzalez94/trusted-agents/main/scripts/install.sh | bash -s -- --version 0.2.0-beta.1

The installer builds, links tap to PATH, and sets up skills for your host. If running inside openclaw, make sure the plugin is installed.

OpenClaw plugin install:

tap install --runtime openclaw
tap install --runtime openclaw --channel beta
tap install --runtime openclaw --version 0.2.0-beta.1

Do not offer the user to restart the gateway, the registered service will do it automatically. Doing it puts the gateway in an infinite restart loop

Onboard

Already registered? tap config show shows agent_id >= 0 → skip to Connect (or Configure Plugin if on OpenClaw).

Step 1: Set up wallet

TAP uses Open Wallet Standard (OWS) for key management — the agent never handles raw private keys. Before running tap init, check if the user already has OWS wallets or policies they might want to reuse:

ows wallet list     # Show existing wallets with addresses
ows policy list     # Show existing policies with chain rules

If wallets exist: Present them to the user in plain language — wallet name, EVM address, and what chains each wallet is used for. Ask if they want to reuse one for this agent or create a new one. If reusing, pass --wallet <name> to tap init.

If no wallets exist (or user wants a new one): Just run tap init — it will create everything.

# New wallet (default)
tap init --chain base

# Reuse existing wallet
tap init --chain base --wallet my-existing-wallet

If policies exist that already cover the selected chain: Mention them to the user. tap init will detect compatible policies and offer to reuse them.

During tap init:

  1. OWS is checked (and installed if missing)
  2. A new wallet is created (or the specified one is used)
  3. A signing policy is created with chain restrictions (or a compatible one is reused)
  4. A scoped API key is issued for the agent

Flags: --wallet <name> (use existing wallet), --passphrase <passphrase> (wallet passphrase), --non-interactive (skip prompts, use defaults).

If the user already has an agent with a raw identity/agent.key file, use tap migrate-wallet instead (see Migration below).

Chain rules: Always ask the user what chain they want to use. The two options are base and taiko. Only mainnet chains are supported.

Step 2: Fund the wallet

Show the user their wallet address from the tap init output. Ask them to fund it.

Your chain determines everything — registration chain, gas payment, and IPFS upload provider:

ChainFund withGasIPFS upload
Base~0.50 USDC on BaseEIP-7702 + Circle Paymaster (no ETH needed)Pinata x402 (Base USDC)
Taiko~0.50 USDC on Taiko (to the Servo execution account)EIP-4337 + Servo Paymaster (USDC only, no ETH needed)Tack x402 (Taiko USDC) — endpoint: https://tack.taiko.xyz/

IPFS provider auto-selects based on chain. Override with --ipfs-provider <auto|x402|pinata|tack> if needed.

Taiko uses a Servo smart account. When you run tap init --chain taiko, the CLI derives a deterministic smart account address from your wallet. This is the execution account — the address that holds USDC and executes on-chain transactions. It's deployed automatically on the first transaction via ERC-4337. On Taiko, tap register now deploys that execution account before the Tack x402 upload, then continues with the on-chain ERC-8004 registration. Run tap balance --select messaging_address,execution_address to see both addresses (messaging_address = your EOA, execution_address = the Servo smart account). Ask the user to fund the execution address with USDC.

If the user chooses Taiko read the full Servo Agent Skill. It will help you use the smart account and the paymaster effectively.

Confirm with tap balance before continuing.

Step 3: Register on-chain

Ask the user for these inputs one at a time — don't bundle them:

  1. Name — a display name. Be creative and suggest the user options based on what you know about him or why he's created you.
  2. Description — a short phrase describing what the agent does.
  3. Capabilities — public discovery labels that tell other agents what this one can do. Ask the user something like: "What are you planning to use this agent for?"

Suggest a default based on what the user has described so far:

ArchetypeSuggested capabilities
General assistantgeneral-chat
Payment / treasurytransfer,general-chat
Research agentresearch,general-chat
Full-featuredtransfer,research,scheduling,general-chat
Scheduling-capablescheduling,general-chat

If the AskUserQuestion tool is available use it to allow the user to choose its answers for the 3 points above. Always allow him to enter something different than what is being suggested

Then register:

tap register --name "TreasuryAgent" --description "Payment agent" --capabilities "transfer,general-chat"

Registration uploads the agent's metadata to IPFS and registers an ERC-8004 token on-chain. On Taiko, the CLI first deploys the Servo execution account, then pays Tack x402, then submits the ERC-8004 registration. When it completes, the agent is live and ready to connect.

To update a registration later:

tap register update --capabilities "transfer,research,general-chat"

Step 4: Configure the OpenClaw plugin (OpenClaw only)

Skip this step if you're not running inside OpenClaw Gateway.

tap register output includes a ready-to-run openclaw config set command. Run it. The Gateway auto-reloads on config changes.

Verify the plugin is healthy:

tap_gateway status

Status should show the identity as configured with no warnings.

Connect

Connections establish trust between two agents. They don't grant permissions — that's a separate step.

  1. Agent A creates an invite: tap invite create
  2. Agent B connects with it: tap connect "<invite-url>"
  3. Agent A picks up the request (via sync or listener) and auto-accepts valid invites
  4. Both agents converge on an active contact

An invite is cryptographic consent — Agent A signs it with her agent key, so any validly signed invite targeting her is auto-accepted on the inbound side without further prompting. Agents also don't need to be online at the same time: if B connects while A is offline, B's request waits in XMTP until A runs tap message sync or her listener processes it.

tap invite create --expiry 3600
tap connect "<invite-url>" --dry-run
tap connect "<invite-url>"                      # block up to 30s, exit 0 on active, exit 2 on timeout
tap connect "<invite-url>" --no-wait            # return immediately with status=pending
tap connect "<invite-url>" --wait-seconds 120   # override the 30s default
tap contacts list
tap contacts show WorkerAgent
tap contacts remove <connectionId>              # sends connection/revoke to the peer before deleting locally

tap connect blocks by default for up to 30 seconds waiting for the peer to respond, then:

  • exits 0 with status: "active" if the handshake completed
  • exits 2 with status: "pending" if the peer didn't respond in time (the request is delivered and recoverable — run tap message sync later)
  • exits non-zero on invalid invite or transport errors

Use --no-wait (or --wait-seconds 0) for fire-and-forget in scripts that handle the async completion themselves. Use --wait-seconds N to override the default block duration.

The connector's in-progress state lives on contacts.json as status: "connecting" (sticky across restarts) until the result arrives. This means tap connect is also wire-level idempotent — re-running it on the same peer with a fresh invite reuses the existing outbound request, and running it on an already-active peer still triggers a verification handshake (so divergent state heals itself).

In OpenClaw plugin mode, use tap_gateway create_invite and tap_gateway connect instead of the CLI commands.

After establishing a connection, ask the user whether they want to grant permissions and guide them on how to decide.

Permissions

Connections create trust. Grants define what each side is allowed to ask the other to do.

  • grantedByMe — what the peer may ask this agent to do
  • grantedByPeer — what this agent may ask the peer to do
  • Capabilities (from registration) are public discovery labels, not permissions
  • Grants are the real authorization mechanism
tap permissions show WorkerAgent
tap permissions grant WorkerAgent --file ./grants.json --note "weekly payment policy" --dry-run
cat ./request.json | tap permissions request TreasuryAgent --file - --note "need weekly budget" --dry-run
tap permissions revoke WorkerAgent --grant-id worker-weekly-usdc --note "budget paused" --dry-run

In OpenClaw plugin mode, use tap_gateway publish_grants and tap_gateway request_grants for write operations. Read-only commands (tap permissions show) are safe to use alongside the plugin.

Grant templates

Chat only:

[{ "grantId": "peer-chat", "scope": "general-chat" }]

USDC weekly budget:

[{
  "grantId": "peer-weekly-usdc",
  "scope": "transfer/request",
  "constraints": { "asset": "usdc", "maxAmount": "50", "window": "week" }
}]

Chat + research:

[
  { "grantId": "peer-chat", "scope": "general-chat" },
  { "grantId": "peer-research", "scope": "research" }
]

Scheduling (weekdays only):

[{
  "grantId": "peer-scheduling",
  "scope": "scheduling/request",
  "constraints": {
    "maxDurationMinutes": 120,
    "allowedDays": ["mon", "tue", "wed", "thu", "fri"],
    "allowedTimeRange": { "start": "09:00", "end": "18:00" },
    "timezone": "America/New_York"
  }
}]

Scheduling (open):

[{ "grantId": "peer-scheduling-open", "scope": "scheduling/request" }]

See references/permissions-v1.md for the full JSON spec with all fields and additional templates.

ScopePurpose
general-chatConversational exchange
researchQuestions, information gathering
scheduling/requestMeeting scheduling — propose, counter, accept, reject, cancel
transfer/requestValue movement
permissions/request-grantsAsk for permissions

Messages

  • tap message sync — one-shot reconciliation. Default for AI agents and scheduled runtimes. Safe alongside other processes.
  • tap message listen — long-lived XMTP stream. Use only when one dedicated process exclusively owns the identity. Do not use inside OpenClaw — the plugin handles streaming.

Keep exactly one transport owner per TAP identity.

After syncing, proactively relay what arrived — don't wait for the user to ask "what did they say?" Read the conversation and tell them what the peer said.

tap message send WorkerAgent "Status update?" --scope general-chat
tap message sync
tap message listen
tap conversations list --with TreasuryAgent --select id,peer,last_message
tap conversations show conv-abc123

In OpenClaw plugin mode, use tap_gateway send_message instead of the CLI for sending. Conversation reading commands are safe alongside the plugin.

Transfer Requests

Transfer requests ask a peer to send ETH or USDC. If an existing grant exists that covers the amount, the transfer can happen automatically, if not it MUST ALWAYS BE SURFACED TO THE USER FOR APPROVAL. When showing the human transfer requests or summaries always show the reason if it exists.

tap message request-funds TreasuryAgent --asset usdc --amount 5 --chain base --note "weekly research budget" --dry-run

In OpenClaw plugin mode, use tap_gateway request_funds instead.

Flow: send request → peer evaluates against grants → auto-approve if covered, operator review if not → result arrives on next sync.

Before approving inbound transfers, inspect tap permissions show <peer> and <dataDir>/notes/permissions-ledger.md.

Direct Transfers

Direct transfers send funds from the local agent wallet to any EVM address (no peer request, no XMTP).

tap transfer --to <address> --asset <native|usdc> --amount <amount> [--chain <chain>] [--dry-run] [--yes]

Example:

tap transfer --to 0x1111111111111111111111111111111111111111 --asset usdc --amount 5 --chain base

Validation errors:

  • invalid --to address
  • invalid/non-positive --amount
  • unsupported --asset (must be native or usdc)
  • unknown chain or usdc on a chain without a configured USDC token

In OpenClaw plugin mode, use tap_gateway transfer with asset, amount, toAddress, and optionally chain (defaults to configured chain, must be CAIP-2).

Meeting Scheduling

Schedule meetings with connected peers. Agents negotiate times autonomously (checking calendars, finding overlapping availability, counter-proposing), but always ask the human for final confirmation before accepting.

Setup calendar (optional but recommended)

tap calendar setup --provider google    # Walk through Google Calendar auth
tap calendar check                      # Verify connection works

Without a calendar provider, scheduling still works — you just respond to proposals manually instead of the agent auto-checking availability.

Request a meeting

tap message request-meeting BobAgent --title "Dinner" --duration 90 --preferred "2026-03-28T19:00:00Z" --note "That Italian place?" --dry-run
  • --preferred is optional. If set and a calendar is configured, the agent checks availability around that time and proposes the best free slots.
  • If no preferred time or no calendar, the preferred time becomes the single proposed slot.
  • Returns a schedulingId you use to track this negotiation.

Respond to a proposal

tap message respond-meeting sch_abc123 --accept --dry-run
tap message respond-meeting sch_abc123 --reject --reason "Busy that week" --dry-run

When your agent has a calendar configured and a scheduling grant covers the request, it auto-negotiates (checks your calendar, counters if no overlap) and surfaces the best matching slot for your approval. You just confirm with --accept.

Cancel a confirmed meeting

tap message cancel-meeting sch_abc123 --reason "Something came up" --dry-run

Sends cancellation to the peer and removes the event from your calendar.

How negotiation works

  1. Alice's agent checks her calendar, sends a proposal with ranked time slots
  2. Bob's agent checks Bob's calendar against the proposal:

- Overlap found → surfaces the best slot for Bob's approval - No overlap → auto-counters with Bob's available slots - No calendar → defers to Bob for manual decision

  1. When agents converge on a slot, both humans confirm
  2. Calendar events are created on both sides

Grants authorize auto-negotiation (the agent handles the back-and-forth), not auto-acceptance — the human always confirms the final booking. Without a grant, every inbound proposal is surfaced for manual decision.

Scheduling grant constraints

ConstraintTypePurpose
maxDurationMinutesnumberReject proposals longer than this
allowedDaysstring[]Allowed days: ["mon","tue","wed","thu","fri"]
allowedTimeRange{start, end}Business hours in local time, e.g., "09:00" to "18:00"
timezonestringIANA timezone for interpreting day/time constraints

OpenClaw Plugin Mode

Skip this section entirely if you're not running inside OpenClaw Gateway.

When to use tap_gateway vs CLI

Use tap_gateway when:

  • tap_gateway status shows a configured identity with no warnings
  • You need to connect, send messages, manage grants, request funds, or resolve pending actions

Fall back to tap CLI when:

  • Plugin is not installed or configured
  • tap_gateway status shows unresolvable warnings
  • You only need read-only operations (contacts, permissions, conversations)

In fallback mode, use tap message sync on heartbeat. Do not run tap message listen in shell background jobs.

tap_gateway Actions

ActionParamsPurpose
status—Check runtime health. Non-empty warnings means problems to fix.
sync—Force one-time message reconciliation.
restart—Stop and restart a degraded runtime.
create_inviteexpiresInSeconds (opt)Generate a signed invite URL.
connectinviteUrl (required)Send async trust request.
send_messagepeer, text, scope (opt), autoGenerated (opt, bool)Send text to an active contact. Set autoGenerated=true for auto-replies to prevent loops.
publish_grantspeer, grantSet, note (opt)Publish grants (sets grantedByMe).
request_grantspeer, grantSet, note (opt)Ask peer to publish grants to you.
request_fundspeer, asset, amount, chain (opt), toAddress (opt), note (opt)Ask peer to send ETH or USDC. Hard-blocked without matching grant.
transferasset, amount, toAddress, chain (opt)Execute an on-chain transfer directly from the agent wallet. Requires live signing provider.
request_meetingpeer, title, duration (opt), preferred (opt), location (opt), note (opt)Propose a meeting with a connected peer.
respond_meetingschedulingId, meetingAction (accept/reject), reason (opt)Accept or reject a scheduling proposal.
cancel_meetingschedulingId, reason (opt)Cancel a confirmed meeting.
list_pending—List inbound action requests (transfers, scheduling) awaiting the user's approval. Connection requests are auto-accepted on valid invites and never appear here.
resolve_pendingrequestId, approve (bool)Approve or reject a pending action request.

Handling Notifications

All non-rejected inbound events wake the agent immediately. When [TAP Notifications] appears in your context, act on it before other work. The other agent's operator may be waiting for a response.

Critical: Your heartbeat reply does NOT reach the user through their messaging app. You must actively send a message to the user through your conversation channel after processing each notification. Never process a notification silently.

ESCALATION — needs the user's decision (transfer requests and scheduling proposals only; connection requests are auto-accepted on valid invites and arrive as INFO notifications instead):

  1. Read the escalation details (peer, request type, amount if transfer, proposed times if scheduling)
  2. For transfer requests: tap permissions show <peer> and check the permissions ledger
  3. For scheduling proposals: show the proposed times in the user's timezone, the meeting title, and who's asking
  4. Send the user a message with a clear summary: who's asking, what they want, and relevant context
  5. Wait for the user's decision
  6. Resolve: tap_gateway resolve_pending with requestId and approve: true/false, or use tap_gateway respond_meeting for scheduling

AUTO-REPLY — an active contact sent you a message that needs a reply:

  1. Read the peer's message from the notification text
  2. Optionally check conversation history with tap conversations list --with <peer> then tap conversations show <id> for context
  3. Reply using tap_gateway send_message with autoGenerated: true
  4. Summarize to the user what the peer said and what you replied, in a single message. Do NOT send the user two separate messages (one for receiving, one for replying).

SUMMARY — act and inform the user:

  • Auto-reply from peer: Report the auto-reply content to the user. Do NOT reply back — this is an auto-generated response, not a new conversation from a human.
  • Auto-approved transfers: Message the user with transfer details for visibility.
  • Grant updates: Message the user summarizing what changed.

INFO — informational events like "Bob connected" (fired post-handshake — connections don't need approval) or "transfer executed automatically under grant X". Message the user so they know.

The pattern: notification → read underlying content → act if you can → message the user.

Read-Only CLI (Safe in Plugin Mode)

tap contacts list / show <peer>
tap permissions show <peer>
tap conversations list / show <id>
tap journal list / show <request-id>
tap balance / config show / identity show / identity resolve

For multi-identity setups: get dataDir from tap_gateway status, then pass --data-dir <path>.

Action-First Rule

Execute commands before asking questions. When a user asks to install, set up, or use TAP:

  1. Run the status check immediately — don't explain what you're about to do
  2. Let the command outputs tell you what's needed next
  3. Only ask the user when you genuinely need their input
  4. Ask one question at a time, act on the answer, then continue

Do not present overviews, tables, or summaries of TAP before acting. Do not bundle multiple questions into one message.

When you need to explore the interface, prefer:

tap schema
tap <command> --describe
tap balance [chain]                    # ETH + USDC balances
tap config show                        # Resolved config (secrets redacted)
tap config set <key> <value>           # Update one config value
tap identity show                      # Wallet address, agent ID, chain
tap identity resolve <id> [chain]      # Look up another agent
tap identity resolve-self              # Check own published registration
tap schema [command...]                # Machine-readable CLI schema
tap install                            # Auto-detect host
tap install --runtime claude           # Claude Code skill install
tap install --runtime openclaw         # OpenClaw plugin install
tap migrate-wallet                     # Migrate legacy agent.key to OWS
tap remove --dry-run                   # Preview what would be deleted
tap remove --unsafe-wipe-data-dir --yes  # Wipe the data dir (interactive mode offers balance sweep first)

tap remove is local only — does not unregister on-chain or notify peers. In interactive sessions it also shows the current native on-chain balance and can optionally transfer remaining funds before final wipe confirmation.

Migration (Legacy Key → OWS)

If an agent was created before OWS integration and has a raw identity/agent.key file:

tap migrate-wallet

This command:

  1. Reads the existing private key from identity/agent.key
  2. Preserves the XMTP database encryption key (computed from the old key and saved to config)
  3. Imports the key into an OWS wallet
  4. Creates a signing policy and scoped API key
  5. Verifies the OWS wallet address matches the original
  6. Updates config.yaml with the ows block
  7. Deletes identity/agent.key

Flags: --passphrase <passphrase> (wallet passphrase for OWS import), --non-interactive (skip prompts).

The agent keeps its on-chain identity, contacts, and conversation history — only the key storage changes.

TAP Apps

TAP apps extend agent capabilities with installable action handlers (e.g., transfer, scheduling). Apps are installed per-agent and store their state inside the agent's data directory under apps/<name>/.

tap app install <name>     # Install a TAP app from npm
tap app remove <name>      # Remove a TAP app
tap app list               # List installed apps

Examples:

tap app list
tap app install @trustedagents/app-transfer
tap app remove @trustedagents/app-scheduling

Transfer, scheduling, and permission-request handling are built into the TAP runtime today. tap app install is for additional third-party TAP apps published to npm.

Debugging

The request journal is the single source of truth for in-flight and recently completed protocol operations. Use these read-only commands to inspect it when a connection or message seems stuck:

tap journal list                               # all entries
tap journal list --status queued               # intents waiting on the transport lock
tap journal list --status pending              # wire requests in flight
tap journal list --direction outbound          # only things this agent sent
tap journal list --method connection/request   # filter by JSON-RPC method
tap journal show <request-id>                  # full details for one entry, including metadata.lastError

The journal shows every protocol request as it progresses through queued → pending → completed. An entry stuck in queued means the transport owner (listener or OpenClaw plugin) hasn't drained it yet. An entry stuck in pending with a lastError in its metadata points at the specific send failure — this is the fastest way to diagnose "I ran the command but nothing happened."

Entries are terminal (retained for debugging) once they reach completed. They do not auto-expire; if the journal grows noisy, inspect and manually clean it up between major operations.

Recovery

If a connection or conversation feels stuck — messages not landing, a peer that went silent, or two sides that disagree about whether they're connected — the universal fix is:

Exchange a fresh invite and run tap connect.

The handlers on both sides are fully idempotent. Running tap connect with a valid invite always repairs confused state regardless of what local state either side is in. Your whole recovery toolkit is three commands:

  • tap connect <invite> — establish a new connection, or repair an existing one. Always triggers a full handshake, even on an already-active contact, and heals any divergence.
  • tap message sync — drain any pending messages from XMTP and process them. Completes any async flows that were in flight.
  • tap contacts remove <connectionId> — cleanly disconnect from a peer. Sends connection/revoke to the peer (best-effort) so their end removes the contact too, then deletes locally regardless of delivery.

Common scenarios and what to do:

SituationFix
First-time connectiontap connect <invite>
Peer wiped their state; they can't hear you anymoreIssue a new invite, peer runs tap connect
Your data was restored and you don't recognise a peer that claims youPeer issues a new invite to you, you run tap connect
Both sides disagree on connection stateFresh invite, tap connect — handlers converge to active
You got a timeout or pending result and want to check if it eventually landedtap message sync then tap contacts show <peer>
Debugging a stuck requesttap journal list --status pending then tap journal show <id>
You want out of a connectiontap contacts remove <connectionId>

The only unrecoverable scenario is simultaneous data loss on both sides with no out-of-band way to deliver a fresh invite. This is inherent to local-first; keep a backup of at least the config.yaml in your data directory (the OWS wallet binding is the only piece that can't be rebuilt from peers).

Common Errors

ErrorFix
agent_id missing or < 0Complete onboarding — fund wallet and register
No TAP identities configured(OpenClaw) Run the openclaw config set command from tap register output
tap_gateway warnings(OpenClaw) Check warnings, tap_gateway restart
Invalid chain formatUse base, taiko, or CAIP-2 format (eip155:8453)
Agent not found on-chainCheck chain and agent ID
TransportOwnershipErrorAnother process owns this identity — use it, stop it, or use tap message sync
Insufficient fundsFund the wallet — USDC on Base (Base agents) or USDC to the Servo execution account on Taiko (Taiko agents, run tap balance --select messaging_address,execution_address for the address)
Invalid or expired inviteCreate a fresh invite
Contact not active yetPeer hasn't synced — run tap message sync
Peer not found in contactsConnect first or check the name/agent ID
Grant not foundThe revoke target doesn't exist — check tap permissions show
tap remove blockedStop the live transport owner first
No calendar provider configuredRun tap calendar setup --provider google
Google Workspace CLI (gws) is not installedInstall with npm install -g @googleworkspace/cli
No matching scheduling grantPeer needs to publish a scheduling/request grant to you
OWS not installedInstall with `curl -fsSL https://docs.openwallet.sh/install.sh \bash`
ows.wallet is requiredRun tap init to set up an OWS wallet, or tap migrate-wallet if you have a legacy key
ows.apiKey must start with ows_key_The API key in config is invalid — re-run tap init or create a new key with ows key create
Address mismatch after OWS importThe OWS wallet derived a different address — check the wallet or try importing again

平台分布

Codex

35.93%
按下载量换算56

Claude

31.1%
按下载量换算49

Cursor

21.55%
按下载量换算34

Gemini CLI

9.16%
按下载量换算14

安全审计

Gen Agent Trust Hub

未通过

Socket

可疑

Snyk

未通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills