DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-web3

Web3

DeepSeek Harness (DSH) 插件:面向智能体安全的 EVM 钱包,具备加密保险库、签名策略、模型工具、随附技能和 Web 界面。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-web3@0.10.1
README兼容性版本

兼容性与来源证明

Web3 以 dsh-web3 发布,当前版本为 0.10.1。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/11/4

版本

0.10.1stable
2026/10/18
0.10.0stable
2026/10/18
0.9.2stable
2026/10/17
查看其余 25 个版本收起版本
0.9.1stable
2026/10/17
0.9.0stable
2026/10/16
0.8.2stable
2026/10/16
0.8.1stable
2026/10/12
0.8.0stable
2026/10/12
0.7.0stable
2026/10/11
0.6.0stable
2026/8/29
0.5.1stable
2026/8/29
0.5.0stable
2026/8/29
0.4.2stable
2026/8/27
0.4.1stable
2026/8/27
0.4.0stable
2026/8/27
0.3.2stable
2026/8/27
0.3.1stable
2026/8/27
0.3.0stable
2026/8/27
0.2.1stable
2026/8/26
0.2.0stable
2026/8/26
0.1.9stable
2026/8/26
0.1.8stable
2026/8/26
0.1.7stable
2026/8/26
0.1.6stable
2026/8/26
0.1.5stable
2026/8/26
0.1.4stable
2026/8/26
0.1.3stable
2026/8/25
0.1.2stable
2026/8/25
最新版
0.10.1
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
669.5 kB
文件数
53
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 2
周下载
265
安全扫描
✓ v0.10.1 扫描通过
最近提交
2026/10/18
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

README

dsh-web3

English | 中文

An agent-safe EVM wallet for DeepSeek Harness (DSH), packaged as a DSH bundle.

Summary

Let an agent check balances, send tokens, sign permits, and pay x402 invoices without ever holding a private key in the chat. Keys stay encrypted on your machine. Every operation passes a signing policy, hard spending limits, and pre-signing security checks (denylists, sanctions, transaction simulation) before anything is signed, and the risky ones wait for your approval. A Web3 wallet page in DSH Settings handles accounts, backups, PIN, limits, and the denylist.

Table of Contents

  • Use this package
  • Understand the implementation
  • Model Experience
  • Known Limitations
  • Further Exploration

Use this package

Requirements

  • DSH 0.2.x (the bundle declares a @deepseek-ai/dsh-typert-protocol peer range that DSH checks at install and startup)
  • Node.js 20 or newer
  • macOS for the Keychain-backed secret store (other platforms use the DSH credentials store)

Install

dsh plugin --profile web add dsh-web3

Or open the Plugins page in the DSH Web sidebar and install dsh-web3. The bundle's cordis.patch.yml mounts the plugin as the web3 row; with HMR on (the default web profile) it is live immediately, otherwise restart DSH.

Then open Settings → Web3 wallet: create or import a wallet, back up the recovery phrase, and set a PIN.

Configuration

Override the web3 row in your profile's cordis.patch.yml. Every field is optional:

- id: web3
  config:
    vaultPath: ~/.dsh-web3       # vault directory (default ~/.dsh-web3)
    autoLockMs: 900000           # lock after 15 minutes idle (signing re-opens it; a lock you choose stays)
    passphrase:
      mode: auto                 # auto | env | manual
    secretStore: auto            # auto (macOS Keychain on macOS) | keychain | none
    chains:
      rpc:                       # per-chain RPC overrides
        1: https://my-eth-rpc.example
      tokens:                    # extra tokens to show balances for
        8453:
          - address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
            symbol: USDC
    disableTools: false          # true = service only, no wallet_* tools
    disableHttp: false
    unsafeAllowModelSecretReveal: false   # never turn on: secrets would enter the transcript
Environment variableEffect
DSH_WALLET_PASSPHRASEVault passphrase (env mode, or first in the resolution chain)
DSH_WEB3_SECRET_STOREkeychain / none; refines secretStore: auto
DSH_WEB3_DENYLIST_REFRESHoff stops the daily OFAC / ScamSniffer downloads (offline machines)

Settings panel

TabWhat it does
AssetsAccount and network picker, receiving address, balances, recent transactions, setup reminders
AccountsCreate, import (phrase / key / keystore), back up, rename, export keystore, remove
SecurityLock / unlock, PIN, pre-signing checks and feed status, denylist, agent permissions
LimitsSecurity mode (presets, including semi- and fully managed), spending caps (the hard ceiling) with today's usage, the semi-managed automatic budget, transfer whitelist and contacts, policy rules
ActivityTransaction history with explorer links, audit log (entries of one signing request share a requestId)

Anything that weakens protection or exposes keys — loosening a preset or a limit, whitelisting, switching a security check off, removing a denylisted address, revealing a recovery phrase, exporting, removing an account — asks for the PIN. Tightening never asks.

Security modes

PresetSigns on its ownAsks you
agent-semi (recommended, new wallets)everything under the automatic budget, within the security checksabove the automatic budget: not signed; returns needs-human so the agent tells you, and it runs once you raise the budget or switch modes; high-severity findings and unlimited approvals ask; above the hard ceiling: refused
strictnothingeverything
agent-fulleverything under the hard ceiling, within the security checksabove the hard ceiling: refused (raise it in Settings → Web3 → Limits); high-severity findings and unlimited approvals ask
micropayx402 USDC payments ≤ 1 each, ≤ 10 a day, after a merchant's first paymenteverything else
testnetsmall testnet operationsmainnet
powermainnet native transfers ≤ 0.01 each, ≤ 0.05 a daytokens, approvals, permits
lockednothing (refuses everything)—

Hard limits (stablecoin and native caps, transfer whitelist) and critical security findings refuse a request even after you click approve.

The automatic budget (auto in limits.json, by default a tenth of the hard ceiling) applies to agent-semi only and is edited in Settings → Web3 → Limits → Automatic budget: a blank item has no automatic budget (only the hard ceiling applies); 0 never signs that item automatically. Raising or clearing it asks for the PIN.

In the audit log (audit/audit-<date>.jsonl) the decision, approval, hold and signature entries of one signing request share a requestId and record the tool that started it (via), the preset in force (preset) and a hash of what was signed (message hash, EIP-712 digest, transaction nonce / calldata hash / txHash).

Service API (ctx.wallet)

Other plugins can use the same pipeline the tools use:

const prepared = await ctx.wallet.prepareTransfer({ account: 'main', chainId: 8453, to: 'alice', amount: '25', token: 'USDC' });
// prepared.summary, prepared.security.findings, prepared.willRequire
const result = await ctx.wallet.executePrepared(prepared.preparedId, approvalGateway, { toolName: 'my-plugin' });

await ctx.wallet.checkAddress({ address: '0x…', chainId: 1 });   // denylist, sanctions, look-alikes
await ctx.wallet.signTypedData({ account, domain, types, value }, approvalGateway);
await ctx.wallet.authorizeX402({ account, challenge }, approvalGateway);

Understand the implementation

Implementation internals — click to expand

Signing pipeline

prepare  resolve recipient / token / amount → populate (nonce, gas, fees)
         → decode intent → preflight (revert, balance) → policy dry-run
         → security checks → escalate → single-use preparedId (15 min)
execute  per-account lock → refresh nonce / fees → policy → security re-check
         → vault lock + PIN authorization → human approval (when `ask`) → sign
         → journal → broadcast

The model only expresses intent. Recipient labels, token symbols, decimals, and calldata are resolved by the wallet; the prepared plan is exactly what gets signed; retries are safe through single-use ids, idempotency keys, and a journal written before broadcast.

Decisions

  1. Signing policy (policy.json): allow / ask / deny rules. Asset-moving intents (token transfers, approvals, permits) are auto-signed only by rules that list them explicitly and stay within per-token limits; unlimited approvals always ask.
  2. Hard limits (limits.json): transfer whitelist and per-transfer / daily caps; a violation is deny.
  3. Pre-signing security checks (security.json), run in parallel with per-check time budgets:
CheckWhat it catchesNetwork
localAddress poisoning, first-time recipients, tokens sent to token contracts, approvals / permits to plain wallets, unlimited approvals, long-lived permits, chain-less signatureschain RPC
denylistUser denylist + cached OFAC SDN and ScamSniffer lists (refreshed daily)none at decision time
sanctionsChainalysis sanctions oracle (Ethereum, OP, BSC, Polygon, Arbitrum, Avalanche)chain RPC
simulationeth_simulateV1 reconciled with the decoded intent: extra outflows, wrong amounts, hidden approvals, recipients that forward funds onward, funds reaching denylisted addresseschain RPC
goplusGoPlus address reputation and honeypot tokens you would receive — off by default, it sends counterparty and received-token addresses to GoPlusGoPlus API

A finding refuses the request, forces human approval even when a rule would auto-sign, / are shown. Checks only ever tighten a decision. A check that cannot finish reports , whose weight is the user's setting.


Model Experience

Wallet tools

What the model sees

30 wallet_* function tools. The main ones:

ToolPurpose
wallet_status, wallet_list, wallet_balance, wallet_chainsState, accounts, balances, supported chains and token symbols
wallet_transfer → wallet_send_transactionTransfers in human units (amount: "25", token: "USDC"); preview with dryRun, execute by preparedId
wallet_prepare_transaction, wallet_approve_token, wallet_allowanceContract calls and ERC-20 allowances, decoded into an intent
wallet_sign_message, wallet_sign_typed_data, wallet_x402_authorizeEIP-191 / EIP-712 signing and x402 exact payments
wallet_tx_status, wallet_history, wallet_replace_transactionStatus, local history, speed-up / cancel
wallet_security_check, wallet_denylistCheck an address before paying it; denylist an address (removal is panel-only)
wallet_policy_get, wallet_policy_setRead policy and limits; tighten only
wallet_address_book, wallet_create, wallet_import, wallet_remove_account, wallet_export_keystore, wallet_reveal_secret, wallet_pin_status, wallet_pin_verify, wallet_unlock, wallet_lock, wallet_audit_logContacts, account lifecycle, backup guidance, gates, audit

Results carry a status, a next hint, and structured security.findings; failures are { ok: false, code, message, hint } with stable codes. In the DSH chat, each call shows a native tool card such as 25 USDC → 0x7099…79C8 · Base.

Token effect

The tool declarations add about 18,000 characters (roughly 5–6k tokens) to every request while the plugin is loaded. Each call adds its JSON result; previews with a simulation are the largest (typically 1–3k tokens).

KV Cache effect

Declarations are static, so they cache with the rest of the tool list. Installing, removing, or disabling the plugin changes the tool list and invalidates the cached prefix once.

Bundled skill

What the model sees

The dsh-web3-wallet skill appears in the session skill catalog as one line (about 350 characters, Chinese and English trigger words) that routes wallet, transfer, token, signing, x402, and wallet-policy requests to the wallet_* tools ahead of shell scripts or other wallet skills. Loading it adds the full playbook: intent routing, rules, flows, status handling, and how to relay security findings.

Token effect

The catalog line is always present; the skill body (about 11,000 characters) enters the context only when the model loads it.

KV Cache effect

The catalog line is static. A loaded skill body is appended like any tool result.


Known Limitations

  • Same-user boundary. Any program running as your OS user — including an agent with unrestricted shell access — can read the vault passphrase from the login Keychain without a prompt and decrypt the key files. Keep this a hot wallet for small amounts, and do not give agents unrestricted shell access in sessions that use it.
  • Policy, limits, and security checks apply only to signing through this plugin; a stolen key bypasses them.
  • No hardware wallet or smart-account (session key) support yet.
  • Threat intelligence is limited to OFAC, ScamSniffer, the sanctions oracle, and optional GoPlus.
  • Some RPCs (for example Avalanche's public endpoint) do not support eth_simulateV1; on those chains the preview notes that no simulation ran.
  • The code has not had an external security audit.

Report vulnerabilities privately as described in SECURITY.md.

Further Exploration

  • dsh-web3-core — the vault, policy, intent, simulation, and denylist library this plugin builds on.
  • Wallet design — feature map, threat model, and change history (Chinese).
  • Bundled skill — the playbook the model loads.
  • Changelog

License

MIT

critical
high
warn
info
SECURITY_CHECK_UNAVAILABLE
onUnavailable

Secrets

  • Key files are scrypt + AES-256-GCM encrypted, one per account, with the account id bound into the authentication tag.
  • The vault passphrase resolves from DSH_WALLET_PASSPHRASE, then the macOS Keychain, then the DSH credentials store; in auto mode a 32-byte random passphrase is generated on first use. A passphrase found in the plaintext credentials file is moved into the Keychain.
  • The PIN is stored as an scrypt hash keyed by a pepper kept in the Keychain. One entry authorizes sensitive operations for 1, 7 or 30 days (set in Settings → Web3 → Security; default 1 day). Lengthening the period needs the PIN; shortening takes effect at once.
  • Tools never return recovery phrases, private keys, or the PIN; backups happen in the settings panel.

Files (vault directory)

vault.json (accounts, no secrets) · keys/<id>.json (encrypted keys, 0600) · policy.json · limits.json · security.json · denylist.json · denylist-feeds.json · address-book.json · tx-journal.json · spend-state.json · pin.json · audit/audit-<date>.jsonl. policy.json, limits.json, security.json, and denylist.json fail closed: a corrupt file stops the vault from opening instead of silently dropping protection.

Surfaces

  • ctx.wallet — the service (src/service.ts).
  • wallet_* tools registered on ctx.tools (src/tools.ts).
  • Typert Remote namespace web3/* for the settings panel (src/remote.ts, client/client.js).
  • Read-only HTTP routes under /api/dsh-web3/* where an http service exists.
  • The dsh-web3-wallet skill through ctx.skills.registerProvider.