nansen-agent-guide
Routing guide -- when to use `nansen agent` (AI research) vs direct CLI data commands. Use when deciding how to answer a user's…
Migrate an existing nansen-cli wallet from insecure password storage (env files, .credentials) to the new secure keychain-backed flow.
$ npx -y skills add nansen-ai/nansen-cli --skill nansen-wallet-keychain-migration --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/nansen-wallet-keychain-migrationContext preview
The summary Claude sees to decide when to auto-load this skill.
Migrate an existing nansen-cli wallet from insecure password storage (env files, .credentials) to the new secure keychain-backed flow.
name: nansen-wallet-keychain-migration
description: Migrate an existing nansen-cli wallet from insecure password storage (env files, .credentials) to the new secure keychain-backed flow.
metadata:
openclaw:
requires:
bins:
- nansen
primaryEnv: NANSEN_API_KEY
install:
- kind: node
package: nansen-cli
bins: [nansen]
allowed-tools: Bash(nansen:*)Nansen account API calls accept a selected `nansen:api` browser session or conventional API key with the same permissions. `NANSEN_API_KEY` takes precedence; optional `primaryEnv` preserves configured-key injection. Run `nansen auth status` for offline selection. Cached access expiry alone permits automatic renewal during an authorized task. Stop on anonymous selection, invalid state, blocked/uncertain renewal or actual auth failure; never drop a credential or fall back to anonymous x402 payment. Browser login does not grant wallet signing, privileged service identity or a persistent MCP integration key. Preserve all confirmation, signing, sanctions and geographic checks below. Browser login is available in CLI 2.0.0 within the [macOS arm64 preview scope](https://github.com/nansen-ai/nansen-cli/blob/main/docs/browser-login.md#preview-platform-scope).
Use this skill when a user already has a nansen-cli wallet set up with the **old** password storage method and wants to migrate to the new secure flow.
`wallet show` only displays addresses and does NOT load or check the password. To detect the actual password situation, check the stored password source directly:
# 1. Where is the password stored? Offline, decrypts nothing, prints no secrets nansen auth status --pretty # → x402.password.source: "env" | "keychain" | "file" | null # 2. Full setup check — flags the insecure .credentials file with a fix nansen doctor --offline # 3. Legacy pattern doctor does not cover: password written to ~/.nansen/.env ls -la ~/.nansen/.env 2>/dev/null && echo "FOUND: ~/.nansen/.env (insecure)"
Interpret `x402.password.source`:
Do NOT use `nansen wallet export` to probe the password state — the default is redacted and never loads the password, so it proves nothing (and `--reveal` prints private keys).
The previous wallet skill told agents to write the password to `~/.nansen/.env`.
**Step 1 — Ask the human for their password:**
> "Your wallet password is currently stored in ~/.nansen/.env, which is insecure. > I can migrate it to your OS keychain. Please confirm the password you used when > creating the wallet, or I can read it from ~/.nansen/.env if you authorize it."
**Step 2 — Migrate:**
The `source` and `nansen wallet secure` MUST run in the same shell so the env var is available to the node process:
source ~/.nansen/.env 2>/dev/null && nansen wallet secure
**Step 3 — Verify the password actually decrypts the wallet:**
# Unset env var to prove keychain works, then run a decrypting export with # all output discarded — the exit code alone is the signal, so no key # material can land in a transcript or log unset NANSEN_WALLET_PASSWORD if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
If the export exits 0 (`decryption OK`), the migration worked. If it fails, the wrong password was migrated — run `nansen wallet forget-password` and retry with the correct password.
**Step 4 — Clean up the insecure file:**
rm -f ~/.nansen/.env
This happens when `wallet create` couldn't access the OS keychain (containers, CI).
nansen wallet secure
If the keychain is still unavailable (e.g. containerized Linux without D-Bus), `nansen wallet secure` will explain the situation and suggest alternatives.
After migrating, verify decryption works (output discarded on purpose — branch on the exit code):
if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
# Persist the env var password to keychain nansen wallet secure
Then verify without the env var (exit code is the signal; output is discarded so no keys are disclosed):
unset NANSEN_WALLET_PASSWORD if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
The password cannot be recovered. The wallet's private keys are encrypted with AES-256-GCM and the password is not stored anywhere recoverable.
**Tell the human:**
> "Your wallet password cannot be recovered. If you have funds in this wallet, > they may be inaccessible. You can create a new wallet and transfer any remaining > accessible funds."
# Create a fresh wallet (human must provide a new password) NANSEN_WALLET_PASSWORD="<new_password_from_user>" nansen wallet create --name new-wallet
After any migration, confirm the password was migrated correctly by proving the keychain password can actually decrypt the wallet:
# Unset env va
Built by agents, for agents. Command-line interface for the Nansen API, designed for AI agents to research on-chain data, manage wallets, and trade through nansen trade. Use it for both analytics and execution: nansen research ...
Routing guide -- when to use `nansen agent` (AI research) vs direct CLI data commands. Use when deciding how to answer a user's…
Set up a local webhook server to receive Nansen smart alerts in real-time with HMAC signature verification and public tunneling.…
What tokens are whales dollar-cost averaging into? Jupiter DCA strategies by smart money and target token fundamentals.
What DeFi positions does a wallet hold? Protocol-by-protocol breakdown of assets, debts, and rewards across chains.
Is smart money exiting a token I hold? Net flow direction, seller breakdown by label, and recent SM trades.
What are crypto funds and VCs holding right now? Cross-chain fund portfolios and net accumulation signals.