配置与安全
适合先求“安全可用”,再按需打开进阶能力的用户。
完成本页后,你会知道:
- 配置文件在哪里
- 日常推荐保留哪些默认项
- 审批或 MCP 规则卡住时先看哪里
基础设置(大多数用户)
配置文件位置:
- 默认:
~/.anycode/config.json - 自定义:
-c/--config <PATH>
anycode config预期输出:进入配置向导并保存到配置文件路径。
建议默认值:
- 保持
require_approval: true - 保持
permission_mode: "default" - 只在临时调试时使用
--ignore-approval
临时跳过审批示例:
anycode run --ignore-approval --agent general-purpose "..."预期输出:仅本次任务执行跳过审批提示,不会改写配置文件。
安全字段(进阶)
| 字段 | 默认 | 作用 |
|---|---|---|
require_approval | true | 是否在敏感工具执行前确认 |
permission_mode | "default" | 快捷模式(default / auto / plan / accept_edits / bypass) |
sandbox_mode | false | 路径和工作目录限制 |
mcp_tool_deny_rules | [] | 按规则拒绝 MCP 工具调用 |
always_allow_rules | [] | 匹配后始终放行 |
always_ask_rules | [] | 匹配后始终询问 |
defer_mcp_tools | false | 首轮隐藏 MCP 工具 |
记忆与首轮工具调用
| 字段 | 默认 | 含义 |
|---|---|---|
memory.backend | "file" | file / hybrid / noop |
memory.path | ~/.anycode/memory | 记忆目录 |
memory.auto_save | true | 成功任务后自动保存 |
zai_tool_choice_first_turn | false | z.ai 首轮更偏向 tool 调用 |
System 提示词
可选字段:
system_prompt_override:整体覆盖默认 systemsystem_prompt_append:追加到默认 system 末尾
两者都支持 @路径(相对路径相对配置文件目录)。
模型指令文件(AGENTS.md)
anyCode 会自动发现并加载项目中的 AGENTS.md 文件作为模型指令。这类似于 .cursorrules 或其他项目级指令文件。
搜索位置(按顺序)
- 工作目录:
./AGENTS.md、./.agents.md、./agents.md、./MODEL_INSTRUCTIONS.md .anycode/子目录:./.anycode/AGENTS.md等- 父目录(向上遍历到项目根目录,遇到
.git、Cargo.toml、package.json等停止)
找到的第一个文件会被加载,并以 项目指令(Project Instructions) 区块注入到系统提示词中。
显式文件(环境变量)
若不想走自动发现,可指定单个文件:
export ANYCODE_MODEL_INSTRUCTIONS_FILE=/绝对或相对路径/说明.md相对路径相对进程工作目录解析。该路径仅通过环境变量配置:config.json 中没有 model_instructions_file 一类字段。发现行为请用下文中的 model_instructions JSON 段控制(开关、自定义文件名、向上遍历深度)。
同时设置显式路径与自动发现时
若已设置 ANYCODE_MODEL_INSTRUCTIONS_FILE,且自动发现也找到文件,运行时可能两段都注入,顺序为:
- Model Instructions — 来自环境变量指向的文件。
- Project Instructions — 来自发现规则命中的第一个文件。
配置
{
"model_instructions": {
"enabled": true,
"filename": null,
"max_depth": 10
}
}| 字段 | 默认 | 含义 |
|---|---|---|
enabled | true | 启用/禁用模型指令发现 |
filename | null | 自定义文件名(如果设置,则只搜索该文件) |
max_depth | 10 | 向上遍历父目录的最大深度 |
示例 AGENTS.md
# 项目规范
- 使用 TypeScript 并启用 strict 模式
- 遵循现有代码风格
- 为新功能编写测试
- 文档化公开 API当项目中存在此文件时,其内容会自动包含在所有 agent 交互的系统提示词中。
Skills 远程清单与按 agent 列表(v0.2)
| 字段 | 含义 |
|---|---|
skills.registry_url | 可选 HTTP JSON,启动时合并。格式:{"extra_scan_roots":["/绝对路径/技能根"]},仅已存在的本地目录会加入扫描(自托管站点可把 manifest 与同步目录放一起)。 |
skills.agent_allowlists | agent_type → skill id 列表;对应 agent 的 system 里 Available skills 只列这些 id(其余仍在磁盘,不向模型展示)。 |
skills.expose_on_explore_plan | 为 true 时 explore/plan 也注册 Skill 工具(行为不变)。 |
通道 Bot Token 持久化(写入 ~/.anycode/channels/,不回显日志):
anycode channel telegram-set-token --token "$TELEGRAM_BOT_TOKEN" --chat-id "123456"
anycode channel discord-set-token --token "$DISCORD_BOT_TOKEN" --channel-id "9876543210"MCP 过滤
security.mcp_tool_deny_rules:按规则拒绝security.mcp_tool_deny_patterns:按正则在暴露给模型前剔除
自托管 MCP:用 ANYCODE_MCP_SERVERS 等接入自有 server,并用上表 deny 规则收敛暴露面;explore/plan 默认不合并 MCP,除非在配置/代码中放宽工具面。
MCP OAuth / McpAuth(无图形界面)
anycode 不提供图形化 OAuth 窗口。当 MCP server 需要登录或授权时:
- 动态工具 —
tools/list之后常会注册形如mcp__<server_slug>__authenticate的工具(或在McpAuth里设置mcp_server)。由模型或你手动调用;server 往往在 MCP 子进程 stderr 打印链接或说明。请留意运行anycode的终端;若任务落盘日志,可看~/.anycode/tasks/下对应任务的输出里工具 stderr(若已配置)。 - 在系统浏览器完成授权 — 打开 URL、同意、按提示粘贴 code;再回到 CLI 重试原来的 MCP 调用。
- 环境与命令 — 核对
ANYCODE_MCP_COMMAND/ANYCODE_MCP_SERVERS与目标 server 一致;多 server 时在mcp/McpAuth输入里带mcp_server/server。 - 超时 — 卡住时可能触发
ANYCODE_MCP_READ_TIMEOUT_SECS(单行 JSON-RPC)或ANYCODE_MCP_CALL_TIMEOUT_SECS(整次tools/call)。排障时可临时调大。
若仍失败,请保留工具返回的 JSON 错误原文,并对照该 server 文档里的 OAuth / stdio 交互说明(多数实现假设人类与 MCP 子进程共用同一终端输出)。
LSP(tools-lsp)
需 --features tools-lsp。建议在 config.json 使用 lsp 段(优于仅环境变量):
| 字段 | 作用 |
|---|---|
lsp.enabled | 为 true 且 lsp.command 非空时,用该 shell 命令启动语言服务器。 |
lsp.command | 与 ANYCODE_LSP_COMMAND 同语义(如 "rust-analyzer")。 |
lsp.workspace_root | 可选,写入 initialize 的 rootUri(file://);相对路径相对配置文件所在目录解析。 |
lsp.read_timeout_ms | 单条 JSON-RPC 响应行超时(默认 60000,限制在 1000–600000)。 |
若 lsp.enabled 为 false 或 lsp.command 为空,LSP 工具仍可在设置了 ANYCODE_LSP_COMMAND 时使用该环境变量。
界面语言
快速设置:
export ANYCODE_LANG=zh
# 或
export ANYCODE_LANG=en下一步:在当前 shell 重新执行 anycode 命令,或新开终端后再运行。
解析顺序是 ANYCODE_LANG -> 语言环境变量 -> 系统语言。
环境变量摘要
| 变量 | 作用 |
|---|---|
ANYCODE_IGNORE_APPROVAL | 进程级跳过审批(见 --help) |
ANYCODE_OSC8_LINKS | 终端 OSC 8 可点击链接 |
ANYCODE_ZAI_TOOL_CHOICE_FIRST_TURN | z.ai 首轮强制 tool_calls |
ANYCODE_ZAI_TOOL_CHOICE | 每轮 required / auto(调试用) |
ANYCODE_MCP_COMMAND / ANYCODE_MCP_SERVERS | MCP(需 tools-mcp) |
ANYCODE_MCP_READ_TIMEOUT_SECS | MCP stdio JSON-RPC 单行读超时(1–86400 秒);设置时覆盖默认(长驻会话 120s,ANYCODE_MCP_COMMAND 一次性 60s) |
ANYCODE_MCP_CALL_TIMEOUT_SECS | 可选:单次 MCP tools/call 整段墙钟上限(1–86400 秒;stdio 长驻、rmcp、旧版 SSE、ANYCODE_MCP_COMMAND 一次性);未设置则仅受单行读超时约束 |
ANYCODE_LSP_COMMAND | LSP stdio(未用 lsp 配置时) |
ANYCODE_DAEMON_TOKEN | 守护进程 POST 鉴权 |
审批与通道(速查)
| 场景 | 配置入口 | 说明 |
|---|---|---|
TUI / run / repl | security.require_approval、permission_mode | TTY 下交互审批;--ignore-approval 仅当前进程。 |
| 微信 / Telegram / Discord | 同一 config.json | RuntimeMode::Channel 默认 WorkspaceAssistantAgent(偏读/查/工作流,非完整编码工具集)。桥接进程内工具不走交互式审批 UI(与无头通道对齐),会关闭 require_approval。 |
通道 AskUserQuestion | 未挂 host | JSON 返回 status: unsupported_host(与审批同样无交互);选题仅 TTY / 流式 REPL / 全屏 TUI,除非后续做通道专用 host。 |
| 目标循环 | 同一 SecurityLayer | GoalSpec.max_attempts_cap 可在 allow_infinite_retries: true 时仍限制轮数。 |
| 实验 | anycode enable approval-v2 | 对应 FeatureFlag::ApprovalV2。 |
