隐私设计原则
OpenCode 的隐私设计遵循以下原则:
- 本地优先:所有代码处理在本地完成
- 最小传输:只发送必要的上下文给 LLM
- 无持久化:不存储代码或对话历史在服务端
- 透明可控:用户可以清楚看到和控制数据传输
数据流向
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 本地文件 │ ──► │ OpenCode │ ──► │ LLM API │
│ (你的电脑) │ │ (本地运行) │ │ (Anthropic等)│
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 本地存储 │
│ (对话历史) │
└─────────────┘
关键点:
- 代码文件只发送到 LLM API,不会存储在其他地方
- 对话历史保存在本地
~/.opencode/sessions/ - OpenCode 服务端不存储任何用户数据
权限系统
权限模式
OpenCode 支持三种权限模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
allow | 自动允许,不询问 | 信任的操作 |
ask | 每次执行前询问 | 需要审查的操作 |
deny | 禁止执行 | 危险操作 |
权限类别
{
"permissions": {
"file_read": {
"src/**": "allow",
".env*": "deny",
"**/*.key": "deny"
},
"file_write": {
"src/**": "allow",
"dist/**": "allow",
"node_modules/**": "deny"
},
"commands": {
"npm *": "allow",
"git *": "allow",
"rm -rf *": "deny",
"sudo *": "deny"
},
"network": {
"api.github.com": "allow",
"registry.npmjs.org": "allow",
"*": "ask"
}
}
}
模式匹配
权限规则支持 glob 模式匹配:
*:匹配任意字符(不含路径分隔符)**:匹配任意路径?:匹配单个字符[abc]:匹配括号中的任意字符
敏感文件保护
默认拒绝规则
OpenCode 默认拒绝访问以下文件:
# 内置拒绝规则
.env*
*.key
*.pem
*.p12
*secret*
*credential*
~/.ssh/*
~/.aws/credentials
自定义敏感文件
{
"permissions": {
"file_read": {
"config/database.yml": "deny",
"secrets/**": "deny"
}
}
}
Doom Loop 检测
OpenCode 内置 doom loop 检测机制,防止 AI 陷入无限循环:
{
"safety": {
"doomLoop": {
"enabled": true,
"maxRetries": 3,
"maxDuration": "5m"
}
}
}
当检测到以下情况时,会自动中断:
- 相同操作重复执行超过 3 次
- 单个任务执行时间超过设定值
- AI 反复修改同一段代码
代理配置
HTTP 代理
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080
export NO_PROXY=localhost,127.0.0.1
自定义 CA 证书
对于企业内网自签名证书:
export NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.crt
# 或在配置中指定
{
"network": {
"caCert": "/path/to/ca-bundle.crt"
}
}
审计日志
OpenCode 记录所有敏感操作:
> /audit log
最近操作记录:
2024-01-15 14:30:22 [ALLOW] file_read: src/index.ts
2024-01-15 14:30:25 [ALLOW] file_write: src/utils.ts
2024-01-15 14:30:30 [ASK] command: npm publish
2024-01-15 14:30:35 [DENY] file_read: .env
安全最佳实践
- 最小权限:只授予必要的权限
- 审查操作:对文件写入和命令执行使用
ask模式 - 保护敏感文件:确保 .env、密钥文件被拒绝
- 定期审计:检查操作日志,发现异常
- 更新版本:及时更新 OpenCode 获取安全修复
企业安全合规
数据不出境
对于数据主权要求,可以使用本地模型:
{
"provider": "ollama",
"model": "llama3.1"
}
网络隔离
{
"network": {
"allowedHosts": [
"api.anthropic.com",
"registry.npmjs.org"
],
"blockedHosts": ["*"]
}
}