托管策略¶
托管策略允许管理员为机器上的每个用户配置 T3 Code。它会设置各项设置的默认值和锁定状态,并施加限制,例如最宽泛的权限模式或可运行的提供程序。机器上的 T3 Code 服务器会对每个连接的应用程序强制执行该策略:桌面应用、浏览器或移动应用。
推出策略¶
- 从示例开始,将策略写成 JSON。
- 运行
t3 policy check policy.json。它会输出策略将执行的操作,或其中有什么问题。 - 使用你的设备管理工具,将策略部署到每台机器的受支持位置之一。
- 重启机器上的 T3 Code。服务器仅在启动时读取策略。
- 在机器上运行
t3 policy show,以检查服务器加载的内容。
桌面应用包含 t3 命令;请参阅 t3 命令。
编写策略¶
{
"schemaVersion": 1,
"organization": "Example Corp",
"supportUrl": "https://it.example.com/t3",
"settings": {
"defaultRuntimeMode": { "value": "approval-required", "locked": false },
"enableAgentBrowserAccess": { "value": false, "locked": true }
},
"limits": {
"maxRuntimeMode": "auto-accept-edits",
"clients": ["desktop", "local-browser"],
"telemetry": false
}
}
schemaVersion 和 organization 为必填项。用户会在“设置”中看到组织名称;如果你设置了 supportUrl,他们还会在策略锁定的每个控件旁看到指向它的链接。settings 设置默认值和锁定项,limits 则限制 T3 Code 可以执行的操作。
机器上的每个用户都能读取该策略,因此不要在其中放入凭据。
策略存放位置¶
每台机器使用以下方式之一:
| 操作系统 | 原生策略 | 策略文件 |
|---|---|---|
| macOS | 用于 com.t3tools.t3code 的配置描述文件 |
/Library/Application Support/T3Code/policy.json |
| Windows | 组策略模板,或 Policy JSON 值(两者均位于 HKLM\SOFTWARE\Policies\T3Tools\T3Code 下) |
C:\Program Files\T3Code\policy.json |
| Linux | /etc/t3code/policy.json |
T3 Code 不会合并来源。如果一台机器同时具有原生策略和策略文件,T3 Code 会拒绝启动,直到你移除其中一个。
策略文件。 将 JSON 复制到该操作系统的对应路径。使其及其文件夹仅对管理员可写。
macOS 配置描述文件。 为偏好设置域 com.t3tools.t3code 添加自定义设置负载。负载的键是策略的顶层键(schemaVersion、organization、supportUrl、settings、limits);JSON 对象会变为字典,列表会变为数组。要从已检查的策略文件生成负载,请运行 plutil -convert xml1 -o com.t3tools.t3code.plist policy.json 并上传结果,或运行 t3 policy templates <directory> --policy policy.json 以生成完整的 macos/t3code.mobileconfig。由于 T3 Code 会忽略用户描述文件,请将其作为设备描述文件安装,并且仅为此域部署一个描述文件。描述文件无法保存 null,因此如果某个设置的值必须为 null,请使用策略文件。
Windows 组策略。 运行 t3 policy templates <directory>,将 windows/t3code.admx 和 windows/en-US/t3code.adml 复制到你的 PolicyDefinitions 文件夹或中央存储中,或将其导入 Intune。这些策略出现在“计算机配置 > 管理模板 > T3 Code”下。每当你设置任何其他 T3 Code 策略时,都要设置 组织。锁定项和提供程序字段位于这两个 JSON 策略中,与策略文件所含的对象相同。机器会在下一次组策略刷新时获取更改;运行 gpupdate /target:computer /force 可立即应用,然后重启 T3 Code。将 允许 T3 Connect、允许 webhook 任务、允许导入浏览器 cookie 或 允许使用情况数据 设置为 已禁用 会关闭该功能。将任何其他 T3 Code 策略设置为 已禁用 不会限制任何内容,与 未配置 相同。
Windows 注册表值。 不使用模板,而是通过组策略首选项或 Intune 脚本,将 Policy 值(REG_SZ)设置为以一行 JSON 表示的整个策略。T3 Code 通过 Windows 注册表 API 读取它,因此在用户无法使用 reg.exe 等注册表工具的环境中也能正常工作。请二选一:当该注册表项同时包含 Policy 值和模板的设置时,T3 Code 会拒绝启动。在 PowerShell 中,以管理员身份运行:
$json = (Get-Content -Raw -Encoding UTF8 policy.json) -replace '\r?\n\s*', ''
New-Item -Path HKLM:\SOFTWARE\Policies\T3Tools\T3Code -Force | Out-Null
Set-ItemProperty -Path HKLM:\SOFTWARE\Policies\T3Tools\T3Code -Name Policy -Value $json -Type String
检查服务器加载的内容¶
以运行 T3 Code 的用户身份运行 t3 policy show。它会输出已安装的策略及其指纹,然后说明正在运行的服务器加载的是该策略还是旧策略。服务器仅在启动时读取策略,因此“重启 T3 Code 以应用已安装的策略”表示它仍在强制执行旧策略。在“设置”中,用户可以看到你的组织正在管理该环境,并且每个锁定的控件都会显示 由...管理。
更改或移除策略¶
部署、更改或移除策略后,请重启机器上的 T3 Code 服务器:退出并重新打开桌面应用,或为后台服务运行 t3 service restart。重新连接手机或浏览器不会重新加载策略。
要移除策略,请删除文件、移除描述文件、将组策略设置设为 未配置,或删除注册表值,然后重启服务器。用户会恢复他们之前选择的设置,因为 T3 Code 从不将策略值写入这些设置。
当 T3 Code 拒绝启动¶
T3 Code 宁愿拒绝启动,也不愿带着一份无法完全执行的策略运行。这包括无法读取或解析的策略、不认识的设置、类型错误的值、此版本不支持的键,或者一台同时具有原生策略和策略文件的机器。错误信息会指出策略来自何处以及问题所在。
t3 policy check 会在 JSON 文件中发现同样的问题。对于配置文件或注册表值,请先检查 JSON 再进行转换。对于组策略模板,请检查一份包含相同设置的完整策略文件,然后将其 settings 和 limits.providers.instances 对象粘贴到两个 JSON 策略中。为较新版本编写的策略可能会使用旧版本无法强制执行的键,因此在部署使用这些键的策略之前,请升级 T3 Code。
设置¶
settings 下的每个键都是服务器 settings.json 中某项设置的路径,例如 storageCleanup.logsAfterDays。要查找路径,请在 T3 Code 中更改该设置,然后查看 ~/.t3/userdata 下的 settings.json。
"locked": false设置一个默认值。只要用户没有自行选择值,该默认值就会生效,并且用户可以更改它。"locked": true设置该值。用户和智能体无法在“设置”或项目的设置中更改它,并且“设置”会将该控件显示为由你的组织管理。移除策略后,会恢复用户自己的值。
一些设置需要特别注意:
- 默认值无法添加条目(例如提供程序实例),因为用户将永远无法移除它。请改为锁定该条目,或通过
providers.instances设置提供程序字段。 - 可以为空的设置(例如
defaultModelSelection)是作为整体来管理的。你不能管理其中的单个字段。 defaultRuntimeMode不能比maxRuntimeMode更宽泛。worktreeCleanup(项目也可以设置)会覆盖storageCleanup中的worktree规则。请将它与这些规则一起锁定;T3 Code 会拒绝只锁定这些规则的策略。observability无法被管理。它的 OTLP 端点来自每个用户的环境变量、设置文件和桌面启动输入,策略无法覆盖这些内容。- 请管理
idleCompaction,而不是较旧的compactIdleThreads。Claude 实例自身的空闲压缩选择仍然优先于idleCompaction。 - 提供程序实例的字段会相互覆盖,因此请整体锁定
providerInstances.<id>,或使用providers.instances固定单个字段。T3 Code 会拒绝锁定实例内的单个字段。整体锁定实例只覆盖该实例;要覆盖某个提供程序的每个实例,请使用providers.instances。
限制¶
limits 限制 T3 Code 可以做什么。省略某个键以保持 T3 Code 的正常行为。
{
"schemaVersion": 1,
"organization": "Example Corp",
"limits": {
"maxRuntimeMode": "auto-accept-edits",
"clients": ["desktop"],
"connect": false,
"webhookTasks": false,
"browserCookieImport": false,
"telemetry": false,
"providers": {
"allowedDrivers": ["claudeAgent", "codex"],
"instances": {
"claudeAgent": {
"locked": true,
"environment": [{ "name": "CLAUDE_CODE_USE_BEDROCK", "value": "1" }]
}
}
},
"updates": { "mode": "auto", "feedUrl": "https://updates.example.com/t3code/" }
}
}
权限模式¶
maxRuntimeMode 是任何对话线程可以使用的最高 权限模式:approval-required(受监督)、auto-accept-edits、auto 或 full-access。它涵盖用户启动、智能体启动以及计划任务启动的对话线程。已经高于限制的对话线程在有人降低其模式之前无法继续下一个回合;一旦模式降低,其排队消息才会发送。当用户的默认值高于限制时,新对话线程会以限制值启动。
设置了 maxRuntimeMode 后,每个提供程序的启动设置都由你掌控:二进制路径、启动参数、配置主目录以及为每个提供程序设置的环境变量。这些设置来自 providers.instances 或 T3 Code 的默认值,用户无法更改,因为否则包装脚本、启动标志或 NODE_OPTIONS 之类的变量可能会关闭提供程序的审批。请在 providers.instances 中固定用户需要的变量,例如网关 URL。
启动 T3 Code 本身的环境中的变量仍然会到达提供程序,并且像 claude 这样的默认二进制路径会依据该环境的 PATH 查找。桌面应用会根据用户控制的设置(例如其 shell 配置文件)构建该环境,因此用户可能将自己提供的 claude 放在 PATH 中更靠前的位置。请为你允许的每个提供程序在 providers.instances 中固定一个绝对 binaryPath。
ACP 智能体自己的模式菜单在 maxRuntimeMode 下没有效果,Antigravity 的除外,T3 Code 可以将其模式置于限制值以下。用户仍然可以选择运行哪个 ACP Registry 智能体;将 acpRegistry 从 allowedDrivers 中排除即可禁止这一点。
该限制决定 T3 Code 会向提供程序请求哪些模式。它不是沙箱;请参阅 策略不涵盖的内容。
客户端与 T3 Connect¶
clients 列出服务器可以以何种方式运行:
desktop:作为桌面应用自己的服务器。local-browser:作为仅此机器上的浏览器可以访问的服务器,例如npx t3。remote:可从手机、其他计算机以及 app.t3.codes 通过网络访问。
remote 才是关键的一行。可从网络访问的服务器也接受此机器上的浏览器,而两种本地类型之间的区别仅在于 T3 Code 的启动方式。在装有桌面应用的机器上,请将 desktop 保留在列表中,否则应用无法启动。
如果没有 remote,服务器只会在回环地址上监听,不创建配对链接,并会将之前配对的设备登出。它不会使用除回环地址或 localhost 之外的主机启动。在 T3CODE_LAN 出现之前安装的 后台服务 仍保留私有网络访问权限,因此如果没有 remote,它会拒绝启动。当它的 service.env 未设置 T3CODE_HOST 时,请运行 t3 up --no-lan,或在 service.env 中设置 T3CODE_HOST=127.0.0.1,然后运行 t3 service restart。无论用户之前选择了什么,桌面应用启动时都会关闭网络访问和 Tailscale Serve。这也会关闭 T3 Connect。要保留其他远程访问但仅关闭 T3 Connect,请设置 "connect": false。
启动时,服务器也会关闭每条转发到它的 Tailscale Serve 路由(HTTPS 或 TCP),例如由 t3 pair --tailscale 设置的路由,并让其他路由保持原样。只要此类路由保持开启,或无法读取 Tailscale 的应答,服务器就不会启动;错误信息会指出关闭该路由的命令。目标为名称的路由,例如 localhost 或同一端口上的另一台机器,也会阻止其启动,因为名称可能解析到本服务器;请更改路由或 T3 Code 的端口。如果 Tailscale 已安装但不应答(例如在从未设置过 Tailscale 的 Mac 上),服务器在 Tailscale 被设置或移除之前不会启动。当 Tailscale 未安装、未运行或已注销时,服务器会启动,因为那时没有任何转发;Tailscale 保留的路由会在 Tailscale 再次运行时恢复,因此之后请重启 T3 Code。
其他能力¶
webhookTasks: false:计划任务不能使用 webhook 触发器。现有的 webhook 任务会保留但不会运行,也无法重新开启。用户仍可编辑或删除它们。browserCookieImport: false:用户无法将其他浏览器中的 cookie 导入 T3 Code 的浏览器。telemetry: false:服务器和桌面应用不会发送产品使用数据或中继连接追踪。策略无法重新开启它们。访问服务器的浏览器(例如 app.t3.codes)仍会发送自己的中继追踪。
提供商¶
providers.allowedDrivers 按 ID 列出可以运行的提供商:codex(Codex)、claudeAgent(Claude)、cursor(Cursor)、grok(Grok)、opencode(OpenCode)、antigravity(Antigravity)、fx(fx)、kiro(Kiro)、pi(Pi)、muse(Muse Code)和 acpRegistry(ACP Registry)。t3 policy check 会拒绝此版本无法识别的 ID。其他提供商上的会话会保留,并标记为不可用,用户仍可关闭这些提供商。
providers.instances 为提供商的每个实例设置字段,例如通过 Amazon Bedrock 路由 Claude 的环境变量,或公司网关的 base URL。binaryPath 和 launchArgs 仅适用于具有这些设置的提供商。当 "locked": true 时,用户无法更改您设置的字段。当 "locked": false 时,字段仅填充用户留空的部分。被锁定的 codex 条目,或 maxRuntimeMode 下的任何 codex 条目,也会排除 Connect with ChatGPT,因为该运行时会跳过您的字段。同样,此类 opencode 条目会排除服务器 URL,因此 OpenCode 会启动您设置的二进制文件。
更新¶
mode:auto保持正常的更新流程。off阻止 T3 Code 检查更新,适用于通过设备管理获取 T3 Code 的机器。feedUrl:T3 Code 从您自己的镜像而不是 GitHub 更新:桌面应用、t3 update以及从另一台设备发起的更新。只发布您已批准的版本,布局方式与 GitHub release 相同。该 release 的更新文件(latest.yml、latest-mac.yml、latest-linux.yml、latest-linux-arm64.yml,以及如果您允许 nightly,则还包括对应的nightly版本)及其列出的桌面安装程序,都放在该 URL 的根目录下。该 release 的t3-*归档文件和SHA256SUMS放在v<version>/下。通过npx运行的t3来自 npm,因此请用您的包管理工具固定其版本。allowNightly: false:nightly 频道不可用。
策略不涵盖的内容¶
策略控制 T3 Code 的行为。代理通过每个提供商自己的 CLI 运行,CLI 会读取自己的配置(例如 ~/.claude),用户也可以在 T3 Code 之外运行这些 CLI。要限制这些 CLI,请使用它们自己的托管配置,例如 Claude Code 的托管设置。
在受管理的 Windows 机器上,桌面应用不会运行 WSL 环境。用户在 WSL 内启动的 T3 Code 服务器读取该发行版中的 /etc/t3code/policy.json,而不是 Windows 策略。如果您的用户在 WSL 中运行 T3 Code,请也将策略文件部署到那里。
没有 remote 时,T3 Code 不会暴露服务器,但用户仍可使用其他工具转发其本地端口。
拥有机器管理员权限的用户可以编辑或移除策略。T3 Code 在其自身进程中强制执行策略,这些进程以用户身份运行,因此它可以阻止用户在 T3 Code 中更改托管设置,但无法阻止用户修改或替换 T3 Code 本身。托管策略之前发布的版本也会忽略该策略。要控制哪些构建可以运行,请使用设备管理工具的应用控制功能。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 t3/t3code