/install liberfi-auth
LiberFi Auth
Authenticate with LiberFi and manage your session.
Pre-flight Checks
See bootstrap.md for CLI installation and connectivity verification.
Login Modes
Mode 1 — Key-based Login (recommended for agents)
Generates a P-256 key pair on first use; on subsequent calls, the existing key is reused. No user interaction required — suitable for automated and agent environments.
lfi login key --role AGENT --name "MyAgent" --json
Flow:
- Loads
~/.liberfi/keys/default.jsonor generates a new key pair. - Signs
Date.now()(Unix ms string) with the local private key (SHA-256 + ECDSA P-256). - Sends
POST /v1/auth/keywith{ publicKeyHex, uncompressedPublicKeyHex, timestampMs, signature }. - Server verifies the signature and upserts the user record.
- If new user: server creates server-owned EVM + SOL TEE wallets.
- Returns a LiberFi JWT; stored in
~/.liberfi/session.json.
Token refresh:
- Proactive: if the JWT expires in \x3C 60 s, the CLI re-signs a new timestamp and calls
POST /v1/auth/key. - Reactive: on any
401response, the CLI attempts one automatic refresh before propagating the error.
Mode 2 — Email OTP Login (for human users)
Two steps: send OTP, then verify.
Step 1 — Send OTP:
lfi login [email protected] --json
Expected output:
{
"ok": true,
"otpId": "uuid-here",
"message": "Verification code sent to [email protected]. It expires in 5 minutes."
}
Step 2 — Verify OTP:
lfi verify \x3CotpId> \x3C6-digit-code> --json
Expected output:
{
"ok": true,
"userId": "...",
"role": "HUMAN",
"evmAddress": "0x...",
"solAddress": "...",
"isNewUser": true,
"message": "Email verified. Authenticated as ..."
}
Notes:
- OTP expires in 5 minutes.
- After verification, the locally generated P-256 key pair is saved as the permanent identity for session auto-refresh.
- Subsequent refreshes work identically to key-based login (no additional email OTPs needed).
Commands
lfi status --json
Shows current authentication state without a network call.
{
"ok": true,
"authenticated": true,
"userId": "...",
"role": "HUMAN",
"evmAddress": "0x...",
"solAddress": "...",
"expiresInSecs": 82340,
"expired": false
}
lfi whoami --json
Fetches the current user's profile from the server (requires valid token).
{
"userId": "...",
"role": "HUMAN",
"displayName": "",
"email": "[email protected]",
"evmAddress": "0x...",
"solAddress": "..."
}
lfi logout --json
Clears ~/.liberfi/session.json. The JWT is not revoked server-side.
Pre-flight: Authentication Bootstrap
Run this sequence at the start of any operation that requires authentication:
# 1. Connectivity
lfi ping --json
# 2. Check session state
lfi status --json
Decision tree based on lfi status output:
authenticated |
expired |
Action |
|---|---|---|
true |
false |
Proceed — session is valid |
true |
true |
Re-authenticate (token expired) |
false |
any | Authenticate (no session) |
Agent environment (automated):
lfi login key --role AGENT --name "AgentName" --json
lfi whoami --json
Human user (interactive):
lfi login [email protected] --json
# → prompt user to enter the 6-digit OTP code
lfi verify \x3CotpId> \x3Cotp> --json
lfi whoami --json
Session Files
| File | Contents |
|---|---|
~/.liberfi/session.json |
JWT, wallet addresses, key material for refresh |
~/.liberfi/keys/default.json |
P-256 key pair (permanent identity) |
~/.liberfi/keys/otp-pending.json |
Temporary key pair during email OTP flow |
These files are created with mode 0600 (owner read/write only).
Never share or transmit these files.
Wallet Assignment
After authentication, the user is assigned two server-owned TEE wallets:
| Wallet | Field | Description |
|---|---|---|
| EVM | evmAddress |
Ethereum-compatible wallet (used for EVM swap operations) |
| Solana | solAddress |
Solana wallet (used for SVM swap operations) |
These wallets are managed by LiberFi's backend. The user's local P-256 private key is never used for on-chain signing.
Website Integration
Users who log in via the LiberFi website (social login) can exchange their identity token for a LiberFi JWT using:
POST /v1/auth/exchange
{ "identityToken": "\x3Cidentity-token>" }
This is handled transparently by the website's auth handler — CLI users do not need to interact with this endpoint.
Error Handling
| Error | Meaning | Recovery |
|---|---|---|
"signature verification failed" |
Invalid key or tampered timestamp | Re-generate key pair with lfi login key |
"timestamp is outside the ±300s window" |
System clock skew | Sync system clock |
"OTP expired or not found" |
OTP TTL elapsed (5 min) | Re-run lfi login \x3Cemail> |
"incorrect OTP code" |
Wrong 6-digit code | Re-enter code or re-run lfi login \x3Cemail> |
"invalid or expired token" on /auth/me |
JWT expired, refresh failed | Re-authenticate |
401 on swap/tx commands |
Session expired | Run lfi status then re-authenticate |
Security Notes
See security-policy.md for global rules.
Skill-specific rules:
- The P-256 private key (
~/.liberfi/keys/default.json) must be kept secret. Never log, display, or transmit its contents. - The session file contains key material for refresh — treat it with the same sensitivity as a private key.
- OTP codes are single-use and expire in 5 minutes — do not store or reuse them.
- LiberFi JWTs expire after 24 hours. Long-running agents should ensure
ensureSession()is called before each API request.
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install liberfi-auth - 安装完成后,直接呼叫该 Skill 的名称或使用
/liberfi-auth触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Liberfi Auth 是什么?
Authenticate with LiberFi: register a new account, log in, manage session state, and verify wallet assignments. Two login modes are supported: 1. Key-based (... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 132 次。
如何安装 Liberfi Auth?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install liberfi-auth」即可一键安装,无需额外配置。
Liberfi Auth 是免费的吗?
是的,Liberfi Auth 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Liberfi Auth 支持哪些平台?
Liberfi Auth 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Liberfi Auth?
由 bombmod(@bombmod)开发并维护,当前版本 v1.0.1。