К основному содержанию
скилл CX Codex

nansen-wallet-keychain-migration — скилл для Claude Code: настройка

Переносит пароль кошелька nansen-cli из небезопасных файлов .env и .credentials в системную связку ключей ОС. Помогает убрать предупреждения об открытом хранении секретов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add nansen-ai/nansen-cli --skill nansen-wallet-keychain-migration -a claude-code
Открыть на GitHub

Что делает nansen-wallet-keychain-migration

Скилл проверяет способ хранения пароля через nansen auth status --pretty и nansen doctor --offline. Он определяет, откуда читается секрет: из переменной окружения NANSEN_WALLET_PASSWORD, старого файла ~/.nansen/.env или автоматически сохранённого файла .credentials. Если пароль уже находится в связке ключей ОС, миграция не требуется.

Процесс переносит секрет с помощью команды nansen wallet secure. После сохранения агент сбрасывает переменную окружения и проверяет расшифровку кошелька через тестовый экспорт без вывода данных в консоль. Когда проверка проходит успешно, старый файл ~/.nansen/.env удаляется с диска.

В Linux-контейнерах без D-Bus или утилиты secret-tool системная связка ключей недоступна, поэтому операция завершится ошибкой. При полной утере пароля восстановить закрытые ключи невозможно: они зашифрованы алгоритмом AES-256-GCM.

Какие задачи решает

  • убрать пароль кошелька из небезопасных файлов .env и .credentials
  • перенести секреты nansen-cli в системную связку ключей
  • проверить корректность расшифровки кошелька после миграции
  • удалить устаревшие файлы конфигурации ~/.nansen/.env

Примеры запросов агенту

  • Помоги перенести пароль кошелька nansen из файла .credentials в связку ключей ОС
  • У меня появилось предупреждение о небезопасном файле с паролем кошелька, перенеси его в keychain
  • Проверь статус защиты кошелька через nansen auth status и настрой безопасное хранение

Как установить nansen-wallet-keychain-migration

1Через Skills CLI (Vercel)

npx skills add nansen-ai/nansen-cli --skill nansen-wallet-keychain-migration -a claude-code

2Вручную: положить файлы

~/.claude/skills/nansen-wallet-keychain-migration/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/nansen-wallet-keychain-migration/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о nansen-wallet-keychain-migration

Как установить nansen-wallet-keychain-migration в Claude Code?

Выполните команду npx skills add nansen-ai/nansen-cli --skill nansen-wallet-keychain-migration -a claude-code. Это добавит скилл в настройки агента.

Зачем переносить пароль кошелька в связку ключей?

Ранние версии nansen-cli сохраняли пароль в открытом виде внутри файлов .credentials или .env. Системное хранилище защищает ключ от чтения сторонними скриптами и случайных утечек в логи.

Можно ли восстановить утерянный пароль от кошелька?

Восстановить его нельзя, потому что закрытые ключи зашифрованы алгоритмом AES-256-GCM. Если пароль нигде не сохранился, придётся создать новый кошелёк командой nansen wallet create.

Исходный текст

SKILL.md · MIT
---
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:*)
---
## Authentication

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).



# Wallet Migration — Old Flow to Secure Keychain

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.

## When to use

- User mentions they stored their password in `~/.nansen/.env`, a `.env` file, or `memory.md`
- User gets the stderr warning: `⚠ Password loaded from insecure .credentials file`
- User asks to "secure my wallet" or "migrate to keychain"
- User created a wallet before the keychain update was released

## Detect current state

`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:

```bash
# 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`:
- `"file"` → password in `.credentials` file, needs migration (Path B)
- `"keychain"` → already secure, no migration needed
- `null` → password not persisted anywhere (Path C or D)
- `"env"` → `NANSEN_WALLET_PASSWORD` is set; check where it is being exported from (a `.env` file → Path A)

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).

## Migration paths

### Path A: Password in `~/.nansen/.env` (old skill pattern)

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:

```bash
source ~/.nansen/.env 2>/dev/null && nansen wallet secure
```

**Step 3 — Verify the password actually decrypts the wallet:**

```bash
# 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:**

```bash
rm -f ~/.nansen/.env
```

### Path B: Password in `.credentials` file (auto-saved fallback)

This happens when `wallet create` couldn't access the OS keychain (containers, CI).

```bash
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):

```bash
if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
```

### Path C: Password only in `NANSEN_WALLET_PASSWORD` env var

```bash
# 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):

```bash
unset NANSEN_WALLET_PASSWORD
if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
```

### Path D: Password lost entirely

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."

```bash
# Create a fresh wallet (human must provide a new password)
NANSEN_WALLET_PASSWORD="<new_password_from_user>" nansen wallet create --name new-wallet
```

## Post-migration verification

After any migration, confirm the password was migrated correctly by proving
the keychain password can actually decrypt the wallet:

```bash
# Unset env var to prove keychain works
unset NANSEN_WALLET_PASSWORD

# This MUST exit 0 — it proves the keychain password decrypts the wallet.
# Output is discarded on purpose: the exit code alone is the signal.
if nansen wallet export default --reveal > /dev/null 2>&1; then echo "decryption OK"; else echo "decryption FAILED"; fi
```

If the export fails, the wrong password was saved to the
keychain. Fix with:

```bash
nansen wallet forget-password
NANSEN_WALLET_PASSWORD="<correct_password>" nansen wallet secure
```

If `stderr` still shows the `.credentials` warning, the keychain migration did
not succeed — check if the OS keychain service is running (`secret-tool` on Linux,
`security` on macOS).

## Forget password (all stores)

If the user wants to remove their persisted password entirely:

```bash
nansen wallet forget-password
```

This clears the password from both OS keychain and `.credentials` file. Future
wallet operations will require `NANSEN_WALLET_PASSWORD` env var or re-running
`nansen wallet secure`.

## Critical rules for agents

- **NEVER generate a password** — always ask the human
- **NEVER store the password** in files, memory, logs, or conversation history
- **NEVER use `--human` flag** — interactive prompts break agents
- If the human authorizes reading `~/.nansen/.env`, read it in the same command
  (`source ~/.nansen/.env && nansen wallet secure`) — do not echo or log the value
- **ALWAYS verify after migration** with `nansen wallet export default --reveal > /dev/null 2>&1` (branch on the exit code; never let the output print) — `wallet show` does NOT prove the password works (it never loads the password)

© nansen-ai · MIT · nansen-ai/nansen-cli

Похожие скиллы

Все скиллы по теме «Безопасность» →
git-guardrails-claude-code Matt Pocock Скилл ставит хук Claude Code, который останавливает опасные Git-команды до их запуска. Нужен, если агент не должен делать push или удалять изменения. 499 069установок ponytail-review DietrichGebert Скилл проверяет изменения глубже обычного diff: читает связанный код, ищет ошибки, риски, проблемы нагрузки и недостающие тесты. Пригодится для ревью PR и коммитов. CX Codex +1 57 000установок ponytail-audit DietrichGebert Проверяет репозиторий и ранжирует ошибки, риски и лишний код. Подойдёт, если нужен разовый разбор без автоматических правок. CX Codex +1 45 400установок security-audit cloudflare Проверяет кодовую базу на уязвимости и ищет нарушения границ доверия. Пригодится перед релизом или для точечного разбора опасных участков кода. CX Codex +1 54 800установок security-and-hardening addyosmani Помогает проектировать защиту и проверять код на уязвимости при работе с вводом, авторизацией, сессиями и внешними сервисами. Подойдёт перед релизом и при создании функций, которые обрабатывают недоверенные данные. CX Codex +1 70 200установок supabase официальный supabase Скилл помогает настраивать базу данных, аутентификацию и RLS в Supabase без скрытых дыр в безопасности. CX Codex GP ChatGPT 8установок

Из того же набора10

nansen-token-research Скилл гоняет команды nansen research token и собирает по одному токену холдеров, потоки, сделки на DEX и PnL. Нужен, когда копаешь конкретный актив, а не рынок целиком. CX Codex +1 435установок nansen-trading Запускает DEX-свопы на Solana и Base, кроссчейн-мосты и лимитные ордера через nansen-cli. Помогает агенту рассчитывать котировки и проводить ончейн-сделки. CX Codex +1 430установок nansen-wallet-profiler Скилл для анализа конкретного криптокошелька: баланс, PnL, метки, транзакции, контрагенты. Пригодится, когда нужно разобрать адрес или сравнить два. CX Codex +1 407установок nansen-general-search Скилл ищет токены и сущности по имени через CLI Nansen и отдаёт адрес, тикер и сеть. Пригодится, когда есть только название монеты. CX Codex +1 406установок nansen-defi-positions Разбирает DeFi-позиции кошелька по протоколам и сетям: активы, долги, награды. Пригодится, когда нужно понять, что реально лежит в кошельке. CX Codex +1 404установок nansen-wallet-deep-dive Скилл прогоняет кошелёк по меткам, балансу, PnL, транзакциям, перп-позициям и контрагентам через CLI Nansen. Пригодится, когда надо понять, кто стоит за адресом. CX Codex +1 383установок nansen-wallet-clustering Скилл для Claude, который через CLI Nansen ищет связанные кошельки: цепочки финансирования, общие подписанты, паттерны депозитов на биржи. CX Codex +1 381установок nansen-wallet-manager Скилл для работы с криптокошельками через nansen CLI: создать, показать, отправить токены, экспортировать. Пригодится, когда агент должен управлять кошельком в терминале. CX Codex +1 366установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой