环境变量
Anyy 通过两种方式使用环境变量:影响 Anyy 自身的 runtime selection variables,
以及解析 provider、channel、MCP 或 media credentials 的 env: secret references。持久 secret
优先使用 profile-local secret: refs;当周围的 service manager 已负责注入凭据时再使用 env:。
值应该放在哪里
| 值类型 | 推荐位置 |
|---|---|
| 一次性的 profile/home 选择 | --home、--profile 等 CLI flags。 |
| 持久 provider 或 channel credentials | Profile-local secret: refs。 |
| Service-manager 注入的 credentials | env:NAME refs。 |
| MCP stdio server environment | mcp.client.servers.<id>.env。 |
| 非 secret runtime defaults | config.yaml。 |
env: refs 会在 Anyy 需要该值时解析。未设置或空变量会被视为 missing secret。
Home 与 Profile
| 变量 | 使用者 | 含义 |
|---|---|---|
ANYY_HOME | CLI、workspace paths、service scripts、installer | 显式 Anyy home directory。 |
ANYY_DEFAULT_HOME | Profile manager、dashboard tests、profile-aware commands | 默认 base home/profile root override。 |
HOME | Installer fallback | 当 ANYY_HOME 未设置时供 install scripts 使用。 |
NO_COLOR | CLI renderer | 设置后禁用彩色输出。 |
TERM=dumb | CLI renderer | 为 dumb terminals 禁用 terminal styling。 |
多数命令也接受 --home PATH;运行一次性诊断时,它通常比依赖环境变量更清晰。
Provider Credentials
Provider credentials 通常从 config.yaml 引用:
providers:
- id: openai-compatible
api_key_ref: env:OPENAI_API_KEY
示例 config 中常见变量包括:
| 变量 | 典型用途 |
|---|---|
OPENAI_API_KEY | OpenAI-compatible 或 OpenAI Responses provider 示例。 |
ANTHROPIC_API_KEY | Anthropic Messages provider 示例。 |
DEEPSEEK_API_KEY | DeepSeek-compatible 示例。 |
GEMINI_API_KEY | Google Gemini provider 示例。 |
这些名称不是每个 provider 的硬编码要求。任何 api_key_ref: env:NAME 或
credential_ref: env:NAME 都会读取 NAME。
Channel Credentials
Channel setup 可以把 credentials 存为 profile-local secret: refs,这是 long-running services
的推荐方式。Channel doctor 和 live smoke 也会使用环境变量执行 operator-run tests。
Live smoke 总开关:
| 变量 | 含义 |
|---|---|
ANYY_LIVE_CHANNEL_TESTS=1 | 允许 live channel smoke tests 联系外部平台。 |
Channel-specific live-smoke variables:
| Channel | Variables |
|---|---|
| Telegram | ANYY_TELEGRAM_TEST_TOKEN, ANYY_TELEGRAM_TEST_CHAT_ID |
| Slack | ANYY_SLACK_TEST_BOT_TOKEN, ANYY_SLACK_TEST_CHANNEL_ID |
| Discord | ANYY_DISCORD_TEST_BOT_TOKEN, ANYY_DISCORD_TEST_CHANNEL_ID |
| Feishu | ANYY_FEISHU_TEST_RECEIVE_ID plus either ANYY_FEISHU_TEST_TENANT_ACCESS_TOKEN or both ANYY_FEISHU_TEST_APP_ID and ANYY_FEISHU_TEST_APP_SECRET |
| DingTalk | ANYY_DINGTALK_TEST_SESSION_WEBHOOK |
| QQ Bot | ANYY_QQBOT_TEST_APP_ID, ANYY_QQBOT_TEST_CLIENT_SECRET, ANYY_QQBOT_TEST_TARGET_ID |
| Facebook Messenger | ANYY_FACEBOOK_TEST_PAGE_ID, ANYY_FACEBOOK_TEST_PAGE_ACCESS_TOKEN, ANYY_FACEBOOK_TEST_RECIPIENT_ID |
ANYY_EMAIL_TEST_ADDRESS, ANYY_EMAIL_TEST_PASSWORD, ANYY_EMAIL_TEST_IMAP_HOST, ANYY_EMAIL_TEST_SMTP_HOST | |
| IRC | ANYY_IRC_TEST_HOST, ANYY_IRC_TEST_NICK |
| SMS | ANYY_SMS_TEST_ACCOUNT_SID, ANYY_SMS_TEST_AUTH_TOKEN, ANYY_SMS_TEST_FROM_NUMBER, ANYY_SMS_TEST_TO_NUMBER |
| LINE | ANYY_LINE_TEST_CHANNEL_ACCESS_TOKEN, ANYY_LINE_TEST_CHANNEL_SECRET, ANYY_LINE_TEST_TARGET_ID |
ANYY_WHATSAPP_TEST_BRIDGE_URL, ANYY_WHATSAPP_TEST_CHAT_ID |
Live smoke commands 是 operator tests;普通 anyy channels doctor 不会因为这些变量存在
就联系外部平台。
MCP Credentials
MCP server environment 按 server 配置:
mcp:
client:
servers:
github:
transport: stdio
command: npx
env:
GITHUB_TOKEN: secret:mcp/github/token
mcp.client.servers.<id>.env 下的值可以是 literal strings,也可以是 secret:mcp/github/token
和 env:GITHUB_TOKEN 这样的 secret refs。Stdio transport 默认不会继承任意 Anyy
environment;只传 server 需要的变量。
这是有意设计。除非你显式暴露,否则 provider keys、channel tokens 和无关 shell state 不会进入 MCP subprocesses。
Voice 与 Media
Voice 和 media provider credentials 使用同一套 env: 和 secret: ref scheme:
tts:
openai:
api_key_ref: env:OPENAI_API_KEY
media_understanding:
audio:
providers:
transcriber:
credential_ref: secret:media/transcriber/token
配置 credentials 本身不会启用功能。相关的 enabled、provider、model 和 capability 字段仍然
控制 runtime use。
Debugging
Installer 和 operator variables:
| 变量 | 含义 |
|---|---|
ANYY_RELEASE_BASE_URL | 覆盖 scripts/install.sh 使用的 release base URL。 |
ANYY_LATEST_URL | 覆盖返回 latest release version 的 endpoint。 |
ANYY_INSTALL_COMPACT=1 | 要求 installer 使用 compact install behavior。 |
ANYY_QUIET=1 | 支持时减少 installer output。 |
调试规则:
- 优先使用
anyy status --json和anyy doctor --json,不要打印原始 environment。 - 不要把 provider keys、channel tokens、OAuth credentials 或 live-smoke secrets 粘贴到 issue reports。
- 当变量通过
env:NAME使用时,未设置或空值会被视为 missing secret。