Публичная поверхность приведена к фактам — по двум независимым прогонам пути клиента с нуля 2026-08-10 (внутренний client-zero и внешний аудит «чужого»); зеркалит правки @usenami/signer-mcp@0.6.0, контракт гейтвея общий.
- 🔴 Дефолтный SIGNER_GATEWAY_URL сменён: https://signer.usenami.io → https://signer-demo.usenami.io:8443. Старый хост 301-редиректит каждый путь на маркетинговый лендинг — все сетевые действия падали из коробки с «Unexpected token '<'». HTML-ответ гейтвея теперь распознаётся и называется своим именем: «the gateway returned HTML, not JSON — check SIGNER_GATEWAY_URL».
- Версия берётся из манифеста, а не константой: 0.4.0 слала User-Agent «@usenami/plugin-signer@0.2.0» (та же болезнь, что чинил signer-mcp#11).
- Доступ назван инвайтным в README (self-serve выдачи токенов нет); из ошибки об отсутствии токена убрана ссылка «Issue tokens at…», ведшая на страницу без выдачи.
- Таблица венью: 7 записей — добавлен hyperliquid_testnet (единственный подписывающий путь Hyperliquid), hyperliquid_main помечен denied (запрет внутри энклава); документирован per-venue status.
- Служебные самокоррекции убраны из notes манифеста (место им здесь): (1) binance: формулировка «limited to testnet» была ложной с 2026-07-27 — mainnet-подписи идут в проде средствами самого оператора, внешние design-партнёры остаются на testnet-политиках; (2) okx: прежняя формулировка подразумевала, что testnet работает, — на деле в хостед-деплое OKX-ключ не провижнён и OKX там не подписывает нигде.
- Адрес сверки PCR0 приведён к одному источнику: usenami.io/signer/attestations.
All notable changes to @usenami/plugin-signer are documented here.
Format follows Keep a Changelog; versioning is SemVer.
-
binanceclaimed "v0 limited to testnet until pilot graduates". That has been false since 2026-07-27, when the signer began signing real orders with real money on Binance mainnet. Anyone reading the manifest to decide whether mainnet was usable got the wrong answer for over a week.The replacement states whose mainnet, because a blanket "mainnet-live" reads as "clients are trading live" and that is not true: it is founder dogfood on our own funds, and external design partners remain on testnet. The note also says USD-M futures only — spot order signing is not implemented, and "spot routes merged" is not the same claim.
-
okxsaid "v0 limited to testnet", which implies testnet works. No OKX key is provisioned in the reference deployment, so it signs nowhere today — mainnet or testnet. Stated plainly instead.
VenueEntry.statusis documented as a statement about the signer's rules, not about any deployment's provisioning, and deliberately gains nounavailablestate. "No key here" differs per operator: encoding it would make the manifest wrong for everyone but one deployment and would drift the moment a key is added — the exact failure this field exists to prevent. Theokxnote is reworded the same way: what the enclave does, plus what Usenami's hosted deployment happens to have, clearly separated.
- Five entries remain after
binanceandokx, and they split in two:asterdex,kucoinandbybitcarry no deployment-state claims — auth scheme and symbol format only, which is what a venue manifest should assert. The twohyperliquid_*entries do carry status, deliberately: that was the point of the previous release, andhyperliquid_mainbeingdeniedis a property of the enclave, not of any one deployment. Every venue listed has a real handler in the enclave — checked againstvenue_for_action, not assumed.
hyperliquid_mainwas listed as an ordinary, usable venue. It is not. The enclave refusessign_hyperliquid_main_order/_cancelbefore it loads or decrypts any key material, and has done so since 2026-06-26. Anyone building against the old manifest produced a call that could only come back as a policy denial. This was a functional bug, not a documentation nit.
status: "live" | "denied"on every venue entry. The correction is data, not prose: a caller that reads a machine-readable manifest and ignores free text is behaving reasonably, and would still have tried.hyperliquid_testnet, statuslive, listed ahead of the denied mainnet entry. Saying only "Hyperliquid is denied" would be its own inaccuracy in the other direction — testnet signs through the same EIP-712 code path, differing only in the phantom-agent source byte.
deniedmeans the signature is refused inside the enclave, not that configuration is missing. Supplying credentials does not change it. The venue notes now say so explicitly.LIST_SIGNER_VENUESnow carries the status in its rendered text, not only indata. The summary is what a human and an LLM actually read; omitting the denial there presented a refused venue as usable — the same bug one layer up.
VenueEntry gained a required status field, so TypeScript consumers that
construct or implement the interface must add it. Consumers that only READ the
manifest are unaffected apart from seeing one more venue and the new field.
Brings the plugin's venue manifest to all six venues the Signer gateway signs for
(was 3), in lockstep with @usenami/signer-mcp v0.2.0. The plugin is unpublished
prior to this, so 0.2.0 is the first npm release.
LIST_SIGNER_VENUESnow reports six venues — adds kucoin (KuCoin Futures, HMAC + v2 encrypted passphrase, symbolXBTUSDTM), bybit (Bybit V5 linear, HMAC, symbolBTCUSDT), and hyperliquid_main (Hyperliquid L1, EIP-712, symbolBTC).PLACE_SIGNER_ORDER/GET_SIGNER_ACCOUNT/CANCEL_SIGNER_ORDERaccept the three new venue ids (validated against the sharedSTATIC_VENUESmanifest).
- Action descriptions + "venue required" / "need a venue" error messages now list all six venues (error messages derive the list from the manifest to avoid drift).
PLUGIN_VERSION0.1.0 → 0.2.0 (surfaces in the gatewayUser-Agent).- README venue table + status line updated for 6 venues.
- Order signing works for all six at the gateway (verify-all-blobs 6/6). The plugin
returns the venue's raw response for account/order calls (no client-side
normalization — unlike signer-mcp's parsers); live
get_accountactivates per venue as the gateway enables each account-read endpoint.
First publish. Thin ElizaOS wrapper around the Usenami Signer gateway, mirroring the same v0 contract as @usenami/signer-mcp.
- Actions:
GET_SIGNER_ATTESTATION— Nitro PCR0 + on-chain registration proof (read-only, no auth).LIST_SIGNER_VENUES— static venue manifest (read-only, no auth).GET_SIGNER_ACCOUNT— equity / free margin / positions via Option-A signed read.PLACE_SIGNER_ORDER— market / limit orders on binance / okx / asterdex.CANCEL_SIGNER_ORDER— cancel by venueorder_id(+symbolfor binance / okx routes).
- Provider:
SIGNER_ATTESTATION_PROVIDER— surfaces the running enclave's PCR0 to the agent every turn, 60-second cached. Soft-fails to a "gateway unreachable" line so the agent stays usable if the signer is down.
- Env contract (same as signer-mcp):
SIGNER_GATEWAY_URL,SIGNER_API_TOKEN,SIGNER_FETCH_TIMEOUT_MS. - Re-exports
callGateway/submitSignedBundle/STATIC_VENUESfor custom agents that want to compose their own actions on top of the shared gateway layer.
- Single account per venue per
SIGNER_API_TOKEN. - No withdrawals / transfers / leverage configuration / multi-venue routing / streaming.
- Static venue manifest — refreshes on package release, not at runtime.