tinyhumansai/openhuman · error

Recovery phrase is required.

Error message

Recovery phrase is required.

What it means

Argument-loop error from `openhuman memory namespaces` (alias `ns`). This subcommand takes NO arguments at all besides `-v/--verbose` and `-h/--help` — it simply lists namespaces. Any other token aborts.

Source

Thrown at app/src/features/wallet/setupLocalWalletFromMnemonic.ts:22

  deriveWalletAccountsFromMnemonic,
  type WalletSetupSource,
} from '../../utils/cryptoKeys';
import { openhumanEncryptSecret } from '../../utils/tauriCommands/auth';

export async function persistLocalWalletFromMnemonic(args: {
  mnemonic: string;
  source: WalletSetupSource;
  setEncryptionKey: (value: string | null) => Promise<void>;
  /**
   * Set to `true` only when the user has explicitly confirmed wallet replacement
   * through the double-confirmation dialog. Defaults to `false`.
   */
  force?: boolean;
}): Promise<void> {
  const { mnemonic, source, setEncryptionKey, force } = args;
  const words = mnemonic.trim().split(/\s+/).filter(Boolean);
  if (words.length === 0) {
    throw new Error('Recovery phrase is required.');
  }
  const normalizedMnemonic = words.join(' ');
  const aesKey = deriveAesKeyFromMnemonic(normalizedMnemonic);
  const encryptedMnemonic = (await openhumanEncryptSecret(normalizedMnemonic)).result?.trim();
  if (!encryptedMnemonic) {
    throw new Error('Failed to secure recovery phrase. Please try again.');
  }

  await setEncryptionKey(aesKey);
  await setupLocalWallet({
    consentGranted: true,
    source,
    mnemonicWordCount: words.length,
    encryptedMnemonic,
    accounts: deriveWalletAccountsFromMnemonic(normalizedMnemonic),
    force,
  });
}

View on GitHub (pinned to a221052e0d)

Solutions

  1. Run it bare: `openhuman memory namespaces` (optionally with -v)
  2. Filter client-side: `openhuman memory namespaces | grep '^docs'`
  3. Remove flags your wrapper unconditionally appends

Example fix

# before
openhuman memory namespaces --all
# after
openhuman memory namespaces
Defensive patterns

Strategy: validation

Validate before calling

# bash: namespaces takes no real arguments
for a in "$@"; do case "$a" in -v|--verbose|-h|--help) ;; *) echo "unexpected arg: $a" >&2; exit 2;; esac; done
openhuman memory namespaces "$@"

Try / catch

if ! out=$(openhuman memory namespaces "$@" 2>&1); then
  case "$out" in *"unknown namespaces arg"*) echo 'usage: openhuman memory namespaces [-v]' >&2; exit 2;; esac
  printf '%s\n' "$out" >&2; exit 1
fi

Prevention

When it happens

Trigger: `openhuman memory namespaces --all`; `openhuman memory ns default`; `openhuman memory namespaces -q foo`.

Common situations: Trying to filter or inspect one namespace positionally; piping flags from a generic wrapper that appends extras to every subcommand.

Related errors


AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16). Data as JSON: /api/errors/3b7a400a4c5233d3. Report an issue: GitHub.