Skip to content

Troubleshooting

Start with Doctor whenever Bestie behaves weirdly. Guessing is fun until you spend 40 minutes fighting a missing env var like a raccoon in a server room.

Terminal window
bestie doctor

Check whether the installer linked Bestie into your user-local bin directory:

Terminal window
ls ~/.local/bin/bestie

If it exists, make sure ~/.local/bin is on your PATH.

Run onboarding again:

Terminal window
bestie onboard

If you are setting up offline or the provider is temporarily unavailable:

Terminal window
bestie onboard --skip-provider-test

Doctor can repair safe local permissions:

Terminal window
bestie doctor --fix

--fix does not overwrite config, prompts, or secrets.

The provider endpoint was contacted but did not return before the timeout.

Try:

  • Run the request again.
  • Use a faster model.
  • Increase llm.timeoutMs.
{
"llm": {
"timeoutMs": 120000
}
}

Check:

  • llm.baseUrl
  • local network access
  • DNS
  • VPN/proxy settings
  • provider status

Check:

  • the API key value in .bestie/.env
  • the env var name in llm.apiKeyEnv
  • provider account access

Do not paste API keys into issues, logs, screenshots, or chat.

Confirm the configured model supports OpenAI-compatible chat completions.

bestie telegram says Telegram is not enabled

Section titled “bestie telegram says Telegram is not enabled”

Run setup:

Terminal window
bestie telegram setup

Or check .bestie/config.json:

{
"channels": {
"telegram": {
"enabled": true,
"botTokenEnv": "BESTIE_TELEGRAM_BOT_TOKEN",
"ownerUserId": "123456789"
}
}
}

Check:

  • BESTIE_TELEGRAM_BOT_TOKEN exists in .bestie/.env.
  • ownerUserId matches your Telegram user id.
  • You are messaging the bot from the owner account.
  • bestie telegram is running.

Run:

Terminal window
bestie doctor
bestie doctor --telegram-connect

--telegram-connect performs an explicit network check against Telegram getMe.

That is expected. Telegram MVP is owner-only by default.

Check attachment config:

  • downloadPolicy
  • maxBytes
  • parseMaxBytes
  • allowedMimeTypes
  • visionPolicy
  • transcriptionPolicy

Text, PDF, and DOCX attachments can get bounded text previews. Vision and transcription require explicit opt-in config.

Voice messages download but do not transcribe

Section titled “Voice messages download but do not transcribe”

Run Doctor:

Terminal window
bestie doctor

Check that these exist:

.bestie/tools/whisper-bin/whisper-cli
.bestie/tools/local-whisper-transcribe.sh
.bestie/models/ggml-small.bin

Also make sure ffmpeg is installed and available on PATH.

Use ggml-small.bin or better. ggml-tiny.bin is faster but often too inaccurate for Vietnamese voice chat.

Make sure local whisper args include Vietnamese language selection:

{
"args": ["{modelPath}", "{audioPath}", "-l", "vi"]
}

Check memory status:

Terminal window
bestie memory status
bestie memory list

If memory is paused:

Terminal window
bestie memory resume

If memory.writePolicy is ask, proposed memories may be waiting for approval:

Terminal window
bestie memory pending

Inspect and edit or forget the memory:

Terminal window
bestie memory inspect 1
bestie memory edit 1 "Updated memory text."
bestie memory forget 1

Export first if needed:

Terminal window
bestie memory export
bestie memory clear --yes

Bestie requires local tool classification before read-only MCP calls.

Check server config:

Terminal window
bestie mcp list
bestie mcp show <server-name>

Classify a read-only tool:

Terminal window
bestie mcp classify <server-name> <tool-name> --category read

That is expected for tools outside the default read-only path. Use --ask to force a one-time approval prompt for a read call:

Terminal window
bestie mcp call <server-name> <tool-name> --read --ask --json '{"path":"README.md"}'

Stop and treat it as a bug. Do not share the output publicly. Bestie should redact secret-like values from logs, Doctor reports, and channel summaries.

For local development, Doctor safe fixes can recreate folders and initialize SQLite:

Terminal window
bestie doctor --fix

Avoid deleting .bestie/ unless you intentionally want to remove config, memory, logs, and local state.