Bỏ qua để đến nội dung

Cấu hình

Bestie lưu non-secret settings trong .bestie/config.json. Secrets nằm trong .bestie/.env và không được in ra logs.

{
"version": 2,
"agent": {
"name": "Bestie",
"ownerName": "Owner",
"language": "vi",
"timeZone": "Asia/Bangkok",
"toneIntensity": 7
},
"llm": {
"primary": "openai/gpt-4.1",
"authProfile": "openai:api-key",
"profiles": {
"openai:api-key": {
"provider": "openai",
"mode": "api-key",
"baseUrl": "https://api.openai.com/v1",
"apiKeyEnv": "OPENAI_API_KEY"
}
},
"modelCatalog": {
"openai/gpt-4.1": { "profile": "openai:api-key" }
},
"timeoutMs": 60000,
"maxRetries": 1,
"retryDelayMs": 500
},
"memory": {
"provider": "sqlite",
"writePolicy": "ask"
}
}
Terminal window
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GEMINI_API_KEY=...
BESTIE_TELEGRAM_BOT_TOKEN=...
BESTIE_ZALO_BOT_TOKEN=...

Chỉ thêm secret cho feature bạn bật. Không lưu raw API keys trong config.json; config chỉ nên chứa tên biến env như apiKeyEnv.

LLM config hiện dùng profiles và model refs. llm.primary là model đang dùng. llm.authProfile là profile mặc định. Mỗi profile lưu provider, auth mode, optional base URL và tên biến env chứa key:

{
"llm": {
"primary": "openai/gpt-4.1",
"authProfile": "openai:api-key",
"profiles": {
"openai:api-key": {
"provider": "openai",
"mode": "api-key",
"baseUrl": "https://api.openai.com/v1",
"apiKeyEnv": "OPENAI_API_KEY"
},
"ollama:local": {
"provider": "ollama",
"mode": "local",
"baseUrl": "http://localhost:11434/v1"
}
},
"modelCatalog": {
"openai/gpt-4.1": { "profile": "openai:api-key" },
"ollama/llama3.2": { "profile": "ollama:local" }
},
"fallbacks": ["ollama/llama3.2"]
}
}

Ưu tiên dùng CLI để chỉnh cấu trúc này:

Terminal window
bestie llm providers
bestie llm setup --provider openai --set-default
bestie llm models --provider openai
bestie llm test --model openai/gpt-4.1
bestie llm profiles list
bestie llm fallbacks add --model ollama/llama3.2

Các provider setup hiện có gồm Anthropic, ChatGPT/OpenAI, Groq, OpenRouter, custom OpenAI-compatible, custom Anthropic-compatible, Ollama, Gemini và Antigravity. Antigravity OAuth setup có trong CLI nhưng chưa được implement.

Policy Hành vi
allow Lưu memory hợp lệ trực tiếp.
ask Đưa memory vào hàng chờ duyệt. Mặc định.
deny Từ chối memory writes.
{
"workspace": {
"defaultPath": ".bestie/workspace",
"externalPaths": []
}
}

Relative write/edit/exec paths sẽ vào workspace mặc định. Dùng externalPaths cho absolute paths đáng tin bên ngoài project.

Bestie có thể load các skill đã cài từ runtime app directory:

.bestie/skills/<skill-name>/SKILL.md

Mỗi file SKILL.md không rỗng sẽ được trim, load theo thứ tự tên thư mục, rồi inject vào chat system prompt. Loader dừng khi combined skills prompt chạm byte budget, nên hãy giữ skill gọn và tập trung.

Bestie lưu cache update check trong runtime data directory tại update-check.json. Chat và daemon start/restart có thể in update notice nhẹ khi npm có bản mới hơn, dùng cache 24 giờ để session bình thường không bị ồn ào.

bestie status cũng báo current installed version và npm có release mới hơn hay không. Nếu không kết nối được npm, status vẫn in local package version và báo update check failed.

{
"channels": {
"telegram": {
"enabled": true,
"botTokenEnv": "BESTIE_TELEGRAM_BOT_TOKEN",
"ownerUserId": "123456789"
}
}
}
{
"channels": {
"zalo": {
"enabled": true,
"botTokenEnv": "BESTIE_ZALO_BOT_TOKEN",
"ownerUserId": "zalo-owner-1"
}
}
}

Chạy setup bằng bestie channels zalo setup. Chạy adapter local bằng bestie channels zalo hoặc smoke một batch bằng bestie channels zalo --once.

Adapter Zalo đầu tiên là owner-only và text-only. Commands được hỗ trợ gồm /help, /status, /providers, /memory, /memory pending, /memory pause, /memory resume, /approvals, /approve <id>/deny <id>.

{
"mcp": {
"servers": [
{
"name": "local-files",
"enabled": false,
"transport": "stdio",
"command": "node",
"args": ["server.js"],
"tools": [
{ "name": "read_file", "category": "read" }
]
}
]
}
}

Tool MCP nên được classify trước khi gọi.

Các bản Bestie mới tách capability dùng lại ra khỏi channel adapter:

  • voice nên được xem là capability độc lập mà các channel có thể kết nối vào.
  • Telegram là channel adapter, không phải nơi sở hữu behavior voice.
  • Cron scheduling dùng cho agent work định kỳ như reminder, periodic checks và background reviews.

Giữ scheduled job hẹp phạm vi và dùng approval cho external actions trừ khi owner cấu hình rõ một automation path đáng tin cậy.