在整个组织中部署 Maxiful
这份说明写给要在 Windows 电脑和 Mac 上推广 Maxiful 的 IT 部门:它在两个平台上如何安装,如何用 Intune、Jamf Pro 或静默安装来推送,它会在电脑上放置和启动什么,需要放行哪些网络主机,安全工具如何识别它,哪些设置可以集中设定,以及它如何更新和卸载。
内容已对照 Windows 版和 Mac 版 Maxiful 0.9.60 核实。两者不同的地方,每一节都分别写了 Windows 和 Mac 的部分。
安装方式
在两个平台上,Maxiful 都是由每个人自己设置的桌面应用。首次启动时,它会为这个人设置助手的运行时:开源智能体运行时 OpenClaw,运行在 Maxiful 为这个人安装的一份 Node.js 上。这个运行时的一个后台进程(网关)负责运行助手,每次这个人登录电脑时都会重新启动。
在 Windows 上
按用户安装,无需管理员权限。安装程序 Maxiful-x64-setup.exe 以当前登录 Windows 的用户身份运行,安装到该用户的 %LOCALAPPDATA%\Maxiful。它出现在该用户的已安装应用列表中,因此在一台电脑上使用 Maxiful 的每个人都有自己的一份安装。
Windows 10 或更高版本,64 位。Maxiful 的窗口由 Microsoft Edge WebView2 绘制。如果缺少 WebView2 Runtime,安装程序会从 go.microsoft.com 下载 Microsoft 官方的 WebView2 安装程序并静默运行。
在 Mac 上
一个应用放在 /Applications 中,按用户设置。Mac 版 Maxiful 以磁盘映像 Maxiful-arm64.dmg 提供,其中包含 Maxiful.app,使用 Apple Developer ID 签名并经过 Apple 公证(签名详情见 Mac:Intune 和 Jamf Pro)。无论由用户还是由你的设备管理工具拷贝到 /Applications,它都是这台 Mac 上所有人共用的一个应用;每个打开它的人登录后都会得到自己的一份安装,助手和数据保存在各自的个人文件夹中。
macOS 13 或更高版本,Apple 芯片或 Intel 均可。同一个构建版本适用于两者。
Windows:静默安装
Maxiful-x64-setup.exe /S
| 开关 | 作用 |
|---|---|
/S | 静默:不显示安装程序窗口,安装程序不提任何问题。添加“开始”菜单和桌面快捷方式。 |
/P | 被动:显示进度条,不提任何问题。Maxiful 自身的更新就是这样运行的。 |
/NS | 不添加“开始”菜单和桌面快捷方式。 |
/R | 安装完成后打开 Maxiful(与 /S 或 /P 一起使用)。 |
/DEFENDER=managed | 由你自己的 Defender 策略添加 Maxiful 的工作文件夹(见下文),因此安装时不会就此询问 Windows。 |
/DEFENDER=off | 你希望 Defender 扫描这些文件夹,因此安装时不会请求 Windows 让 Defender 跳过它们。 |
退出代码。0 表示安装完成,其他任何代码都表示未完成。返回 2 可能有多种原因,其中之一是另一个程序占用 Maxiful 的某个文件超过 30 秒,此时不会做任何更改。安装程序在写入前会结束该用户正在运行的 Maxiful。
覆盖已安装的版本。用同样的方式运行更新版本的安装程序,会就地更新,用户的助手和数据都会保留。我们于 2026 年 10 月 26 日在 Windows 测试电脑上实测过,从 0.9.54 更新到已签名的 0.9.58。
Microsoft Defender 的排除文件夹
团队每次启动时,Maxiful 的工作文件夹中都有数千个文件发生变化,因此 Maxiful 会请求 Windows 让 Microsoft Defender 跳过其中四个文件夹。不带 /DEFENDER 开关时,安装程序会在写入文件后发出请求:Windows 会为此显示自己的权限提示,对于没有管理员权限的用户,会要求管理员登录。如果无人响应,Windows 会在大约两分钟后自动关闭提示,安装仍会完成。Maxiful 下次启动时会再请求一次,第二次提示仍无人响应则视为拒绝,之后不再询问。
使用 /DEFENDER=managed 或 /DEFENDER=off(必须一字不差)时,安装、更新和启动都不会询问 Windows,Maxiful 的设置中会显示这台电脑上的 Microsoft Defender 由你的 IT 部门管理。文件夹被扫描时一切照常工作,只是团队启动会慢一些。用户之后仍可以在 Maxiful 的设置中通过让 Defender 跳过 Maxiful 的工作文件夹自行开启排除,届时会按上述方式询问 Windows。
| 请求 Defender 跳过的文件夹 |
|---|
%LOCALAPPDATA%\Lanoko\node-v24.21.0\node_modules\openclaw |
%LOCALAPPDATA%\Lanoko\node-v24.21.0\openclaw-compile-cache |
%USERPROFILE%\.openclaw-*\tmp\plugin-captures |
%USERPROFILE%\.openclaw-*\agents\*\agent |
Windows:Microsoft Intune(Win32 应用)
我们在自己的 Windows 测试电脑上实测了静默安装和覆盖安装更新。以下步骤依据 Microsoft 的 Win32 应用文档编写,尚未在 Intune 租户中实际运行;如果你那边的表现不同,请发邮件到 [email protected] 告诉我们。
- 创建一个包文件夹,放入从你的 Maxiful 账户下载并已核对 SHA-256 的
Maxiful-x64-setup.exe,以及一个uninstall.cmd文件,因为 Intune 不会展开卸载命令中的环境变量:@echo off "%LOCALAPPDATA%\Maxiful\uninstall.exe" /S _?=%LOCALAPPDATA%\Maxiful set rc=%ERRORLEVEL% del /q "%LOCALAPPDATA%\Maxiful\uninstall.exe" rmdir "%LOCALAPPDATA%\Maxiful" exit /b %rc%_?=让卸载程序就地运行,并在脚本继续之前完成;后面两行删除卸载程序本身和空文件夹。如果要同时删除用户的助手和数据,请把第一行改为/S /REMOVEALL _?=%LOCALAPPDATA%\Maxiful(见卸载)。 - 使用 Microsoft 的 Win32 Content Prep Tool 生成 .intunewin 文件:
IntuneWinAppUtil.exe -c C:\maxiful-package -s Maxiful-x64-setup.exe -o C:\maxiful-intunewin -q - Program:如果你的 Defender 策略会添加上述四个文件夹,安装命令为
Maxiful-x64-setup.exe /S /DEFENDER=managed;如果要扫描它们,则为Maxiful-x64-setup.exe /S /DEFENDER=off。卸载命令为uninstall.cmd;安装行为选 User;设备重启行为选 No specific action;返回代码保持默认。 - Requirements:64 位,Windows 10 或更高版本。
- 检测规则:文件,路径
%LOCALAPPDATA%\Maxiful,文件Maxiful.exe,方法 File or folder exists。 - Assignments:Required 或 Available,分配给用户组。
Intune 要求安装过程不提任何问题。带 /DEFENDER 开关时,Maxiful 的安装不会提问;不带时,Windows 的 Defender 提示是它唯一可能弹出的问题。大范围分配之前,请先阅读首次启动。
Mac:Microsoft Intune 和 Jamf Pro
你的设备管理工具会从用户下载的同一个磁盘映像中,把经过公证的 Maxiful.app 安装到 /Applications。以下是它需要填写的值。
| 在 MDM 中填写 | 值 |
|---|---|
| Bundle ID | ai.maxiful.desktop |
| Team ID | 467H9AXX55 |
| 应用签名 | Developer ID Application: Polytrader ltd (467H9AXX55),经过 Apple 公证。 |
| 代码要求 | identifier "ai.maxiful.desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "467H9AXX55" |
| 版本 | /Applications/Maxiful.app/Contents/Info.plist 中的 CFBundleShortVersionString:即 Maxiful 的版本号。 |
| 安装位置 | /Applications/Maxiful.app |
| 托管偏好设置域 | ai.maxiful.desktop,即 Bundle ID。其中的键见托管设置。 |
Microsoft Intune(macOS app (DMG))
- 依次选择 Apps、All Apps、Create;平台选 macOS,类型选 macOS app (DMG);选择从你的 Maxiful 账户下载并已核对 SHA-256 的
Maxiful-arm64.dmg。Mac 上需要安装 Intune 的 macOS 管理代理。 - App information:添加徽标,这样应用在 Company Portal 中会显示图标。Requirements:Minimum Operating System 选 macOS 13。
- Detection rules:Included apps 填
ai.maxiful.desktop及其版本。Ignore app version 选 No,这样你上传的每个版本都会安装。同时把AutoUpdate设为 0(见托管设置):每个版本都由你通过 Intune 安装,Maxiful 自己不再检查更新。 - Assignments:Required(安装到
/Applications)、在 Company Portal 中 Available,或 Uninstall。
Intune 更新或卸载 DMG 应用需要完全磁盘访问权限,在 macOS 13 及更高版本上分配应用时会请求该权限。要推送新版本,把它的磁盘映像上传到同一个应用即可:Required 分配会自动更新,Available 分配则由每个人在 Company Portal 中选择 Reinstall。
Jamf Pro
Jamf Pro 从分发点部署安装包。用 Jamf Composer 制作一个包含 /Applications/Maxiful.app 的安装包:
- 在一台 Mac 上,把磁盘映像中的
Maxiful.app拷贝到/Applications。在 Composer 中,从“访达”把/Applications/Maxiful.app拖到 Sources 列表,使它保留在/Applications中的位置,然后用这个来源构建安装包。 - 把安装包添加到分发点和 Jamf Pro。
- 在 Computers、Policies 下新建一个策略。在 General 中设置触发条件和执行频率;在 Packages 负载中添加该安装包,操作选 Install,并选择分发点。
- 在 Scope 标签页中选择电脑;也可以让这个策略在 Self Service 中可用。
- 每个新版本都用同样的方式构建安装包并通过策略部署,同时把
AutoUpdate设为 0(见托管设置),让 Maxiful 自己不再检查更新。
以上步骤依据 Microsoft 和 Jamf 的文档编写,尚未在 Intune 或 Jamf 租户中实际运行;如果你那边的表现不同,请发邮件到 [email protected] 告诉我们。
网关的登录项
助手的网关作为每个人自己的 LaunchAgent 运行,标签为 ai.openclaw.<name>。在 macOS 13 或更高版本上,使用规则类型为 Label prefix、值为 ai.openclaw. 的 Service Management(托管登录项)负载即可自动批准它。
首次启动:每个人需要做什么
静默安装完成后,或 MDM 把应用拷贝到 /Applications 后,Maxiful 就可以打开了。首次启动时,无论 Windows 还是 Mac,每个人都需要完成以下步骤;IT 无法代为完成。
- 每个人用自己的邮箱地址登录:Maxiful 会发送一封含登录链接的邮件,点击链接即可打开应用。如果工作区所有者已为你们组织的邮箱域名设置了单点登录,用户也可以选择使用工作账户继续,在浏览器中打开你们身份提供商的登录页面(Microsoft Entra ID、Google Workspace、Okta、其他 OpenID Connect 提供商或 SAML 2.0 提供商);开启 Enforce single sign-on 后,邮件中的链接也会转交给你们的身份提供商。
- 新建工作区的人需要输入其 Maxiful 账户中的设置码。设置码只能在第一台使用它的电脑上生效。
- 受邀加入工作区的同事则直接加入;所有者开启 Add people to my workspace when they sign in 后,属于你们已验证域名、通过身份提供商登录的人也会直接加入。同事的每台新设备都要等工作区所有者在“团队”页面的“成员”中批准后才能使用。
之后,设置程序会为这个人安装 Node.js 和运行时,并启动团队。这一步需要访问下文列出的网络主机。
在 Mac 上:macOS 会请求的权限
Maxiful 只在某项功能首次需要时才向 macOS 请求权限,macOS 会显示它自己的询问:
- 通知:Maxiful 第一次需要显示通知时,例如窗口在后台时收到回复。
- 麦克风和语音识别:用户第一次口述消息或与助手对话时。
- 辅助功能、录屏和输入监控:所有者第一次允许助手操作电脑时。
团队在哪里运行,以及常开电脑
团队运行在所有者的电脑上:助手、它们的记忆和对话都保存在所有者在那台电脑上的安装中,同事从各自的设备连接过去。如果办公室希望团队全天候回复,可以把所有者的安装放在一台始终开机的电脑上:
- 一台 Mac,保持所有者的 macOS 账户登录。网关是该账户自己的 LaunchAgent,在账户登录时启动,所以每次重启后都要重新登录该账户,或者开启自动登录(FileVault 开启时 macOS 不提供自动登录)。
- 一台 Windows 电脑,能自动登录所有者的 Windows 账户(Windows 的自动登录)。Maxiful 在账户登录时启动网关;如果要在开机时启动,需要以提升权限安装,而 Maxiful 从不这样做。
账户的 AI 模型同一时间只在一台电脑上回复。如果所有者也在笔记本电脑上使用 Maxiful 并在那里选择了在这里使用 Maxiful,常开电脑上的助手就会停止回复,直到所有者在那台电脑上再次选择它。
如果要自己在那台电脑上安装每个更新,请把 AutoUpdate 设为 0(见托管设置)。Maxiful 的备份是写在同一台电脑上的归档文件,位于所有者个人文件夹的 <name>-shared/backups 下;请用你们自己的备份工具把它们复制到其他地方。
它会在电脑上放置哪些内容
下文中的 <name> 是该安装自己的短名称。
在 Windows 上
| 位置 | 内容 |
|---|---|
%LOCALAPPDATA%\Maxiful | 应用本身:Maxiful.exe、gateway-launcher.exe(在沙盒中启动每条助手命令)和 uninstall.exe。 |
%LOCALAPPDATA%\ai.maxiful.desktop | 应用自身的数据:WebView2 数据、日志(logs\Maxiful.log、logs\installer.log)以及 Defender 询问的记录。 |
%LOCALAPPDATA%\Lanoko | Node.js 24.21.0 及其中安装的 OpenClaw 运行时,以及 npm 缓存。该文件夹沿用 Maxiful 以前的名称。 |
%USERPROFILE%\.openclaw-<name> | 安装本身:运行时配置、助手及其工作区和记忆、该安装的密钥,以及助手专用的浏览器。 |
%USERPROFILE%\.stomme | Maxiful 为每个安装保存的记录,例如附加组件和所有者做出的决定。 |
%USERPROFILE%\.lanoko-sandbox\<name> | 网关沙盒边界的纯文本说明。 |
| 注册表 | HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall\Maxiful(已安装应用条目)和 HKCU\Software\maxiful\Maxiful(安装文件夹)。 |
| 登录时启动 | 网关的计划任务:运行时自己的(OpenClaw Gateway (<name>))或 Maxiful 自己的(ai.openclaw.gateway-<name>);如果 Windows 拒绝创建任务,则改为用户“启动”文件夹中的 OpenClaw Gateway (<name>).vbs。如果由运行时自己的计划任务运行网关,Maxiful 还会添加一个计划任务 Maxiful team keeper (<name>),每两分钟检查一次团队;使用“启动”文件夹脚本时则没有这个任务。它们都在用户登录时以该用户身份启动网关,不会在任何人登录之前启动。运行时会向 Windows 申请一个使用 S4U 登录、在启动时触发的任务,而 Windows 只会为提升权限的安装注册这种任务。Maxiful 从不以提升权限运行这类安装:Windows 会拒绝,运行时随后改用“启动”文件夹脚本,或保留早期版本注册的原有任务,该任务在登录时启动。用 schtasks /query /tn "OpenClaw Gateway (<name>)" /xml 可以查看一台电脑上的任务。 |
Windows 上的进程
| 进程 | 说明 |
|---|---|
Maxiful.exe | 应用本身,已签名(见下文)。其窗口运行在 Microsoft 的 msedgewebview2.exe 中。 |
node.exe | 位于 %LOCALAPPDATA%\Lanoko\node-v24.21.0:OpenClaw 网关及运行时自身的命令。这是 Maxiful 自行构建的 Node.js 24.21.0,包含针对 Windows 沙盒的修复,使用前会对照应用中固定的 SHA-256 进行校验。 |
gateway-launcher.exe | 位于应用文件夹:在各自的沙盒中启动每条助手命令。 |
chrome.exe | 位于 %USERPROFILE%\.openclaw-<name>\browser\chromium\chrome-win64:助手专用的浏览器,是来自 Playwright 下载服务器的 Chrome for Testing 版本,会对照固定的 SHA-256 进行校验。它从不打开用户自己的浏览器。 |
cmd.exe, wscript.exe | 启动网关:gateway.cmd,由网关的计划任务通过安装文件夹中的 gateway.vbs(早期版本的任务)或直接运行,或由用户“启动”文件夹中的 OpenClaw Gateway (<name>).vbs 运行。 |
助手运行的命令(shell、PowerShell、脚本)作为网关的子进程运行,默认在每个助手各自的沙盒中。网关监听 127.0.0.1 上从 18800 起的端口(第一个安装为 18800),Maxiful.exe 监听其他环回端口;在我们的测试电脑上,Maxiful 的任何组件都没有监听其他地址。
Mac 上
| 位置 | 内容 |
|---|---|
/Applications/Maxiful.app | 应用本身,这台 Mac 上所有用户共用一份。 |
~/Library/Application Support/Lanoko | Node.js 24.21.0 及其中安装的 OpenClaw 运行时、npm 缓存和网关的工作文件夹。该文件夹沿用 Maxiful 的旧名称。 |
~/.openclaw-<name> | 安装本身:运行时配置、助手及其工作区和记忆、安装的密钥,以及助手专用的浏览器。 |
~/.stomme | Maxiful 为每个安装保存的记录,例如其附加组件和所有者的决定。 |
~/.lanoko-sandbox/<name> | 网关的 macOS 沙盒配置文件 gateway.sb,网关在其约束下启动。 |
~/Library/LaunchAgents/ai.openclaw.<name>.plist | 网关的 LaunchAgent:在用户登录时以该用户身份启动网关,网关停止后会重新启动。 |
~/Library/Logs/ai.maxiful.desktop/desktop.noindex | 应用日志 Maxiful.log。 |
~/Library/Logs/Lanoko/gateway.noindex | 网关日志。 |
| 钥匙串 | 网关的设备密钥 Maxiful Gateway Device Key,存放在用户的钥匙串中。 |
Mac 上的进程
| 进程 | 说明 |
|---|---|
Maxiful | 应用本身,位于 /Applications/Maxiful.app,已签名并经过公证(见 Mac:Intune 和 Jamf Pro)。 |
node | 位于 ~/Library/Application Support/Lanoko/node-v24.21.0/bin/node:OpenClaw 网关及运行时自身的命令,由 launchd 启动,默认通过 /usr/bin/sandbox-exec 并使用上述配置文件。这是来自 nodejs.org 的官方 macOS 版 Node.js 24.21.0,使用前会对照应用中固定的 SHA-256 进行校验。 |
Google Chrome for Testing | 位于 ~/.openclaw-<name>/browser/chromium:助手专用的浏览器,是来自 Playwright 下载服务器的 Chrome for Testing 版本,会对照固定的 SHA-256 进行校验。它从不打开用户自己的浏览器。 |
助手运行的命令是网关的子进程,默认在每个助手各自的沙盒中。与 Windows 上一样,网关监听 127.0.0.1 上从 18800 起的端口。
需要放行的网络主机
所有连接都由电脑向外发起,使用 HTTPS(中继还会使用 WSS)。我们这边无法主动连接到电脑。
用于安装和日常使用
| 主机 | 用途 |
|---|---|
maxiful.ai | 登录(包括工作账户登录的发起与返回)、账户、更新源、附加组件商店和安装诊断。 |
lanoko.ai | 安装码、安装时的模型访问、欢迎邮件和同事成员资格。 |
proxy.stomme.ai | 所有云端模型调用,以及在“更多工作应用”下连接的应用。 |
stomme-model-proxy.stomme-ai.workers.dev | 模型列表。 |
or-key-worker.stomme-ai.workers.dev | 套餐额度。 |
mc-cdn.lanoko.ai, mc-cdn.stomme.ai, mc-cdn.maxiful.ai | 附加组件索引和附加组件、Maxiful 的 Windows 版 Node.js 构建、本地记忆搜索模型和语音模型。 |
nodejs.org | Node.js,安装时使用。 |
registry.npmjs.org | OpenClaw 运行时,安装时以及更新附带新版运行时时使用。 |
cdn.playwright.dev | 助手的浏览器,安装时使用。 |
仅在使用某项功能时
| 主机 | 用途 |
|---|---|
relay.maxiful.ai | 中继(WSS):已配对的手机和同事的设备。 |
relay.lanoko.ai | 同一中继的旧名称,供 2026 年 10 月 22 日之前配对的安装和手机使用。 |
ingress.lanoko.ai | 通过 webhook 投递消息的聊天平台,例如 Teams 和 Google Chat。 |
teamtailor.maxiful.ai | Teamtailor 连接。 |
openrouter.ai | 记忆搜索,用于无法运行本地搜索索引的电脑。 |
github.com, huggingface.co | 当我们的下载服务器无响应时,本地记忆搜索引擎和模型的备用来源。github.com 还提供 Google Workspace 连接所用的工具。 |
clawhub.ai | 运行时的插件目录。 |
connect.composio.dev, backend.composio.dev | 仅用于我们集成页面上可选的 Composio 卡片。 |
go.microsoft.com | 在 Windows 上,仅在缺少 WebView2 Runtime 时用于获取它。 |
| 已连接的服务 | 用户连接的每项服务(Google、Microsoft 365、Slack 等),使用该服务自己的地址。 |
安全工具如何看待它
Windows 上
签名者。我们发布的每个安装程序都由颁发给 PolyTrader Ltd 的证书签名(证书使用者为 CN=Polytrader LTD),这家公司在 Maxiful AB 之前发布 Maxiful;它安装的 Maxiful.exe 也是如此。用 Get-AuthenticodeSignature 读取文件的签名,并将下载的文件与安装页面上的校验和比对(帮助中有说明)。
未签名的组件。运行时的 node.exe 和助手的 chrome.exe 没有 Authenticode 签名;Maxiful 在使用前会对照固定的 SHA-256 逐一校验。为它们设置允许列表需按路径。
需要加入允许列表的内容:进程 %LOCALAPPDATA%\Maxiful\Maxiful.exe(已签名)和 gateway-launcher.exe、%LOCALAPPDATA%\Lanoko\node-v24.21.0\node.exe,以及 %USERPROFILE%\.openclaw-*\browser\chromium\chrome-win64\chrome.exe;上文的四个 Defender 文件夹;上文的网络主机。
Mac 上
签名者。Maxiful.app 使用团队 467H9AXX55 的 Developer ID 签名并经过 Apple 公证,因此 Gatekeeper 无需额外放行即可打开它;允许列表可以按其代码要求指定它(见 Mac:Intune 和 Jamf Pro)。用 codesign -dvv /Applications/Maxiful.app 读取其签名。
运行时组件。网关的 node 是官方 macOS 版 Node.js,助手的浏览器是 Google 的 Chrome for Testing,均由 Maxiful 下载,并在使用前对照固定的 SHA-256 校验。为它们设置允许列表需按路径。
需要加入允许列表的内容:/Applications/Maxiful.app(团队 467H9AXX55)、~/Library/Application Support/Lanoko/node-v24.21.0/bin/node,以及 ~/.openclaw-*/browser/chromium 下的浏览器;上文的网络主机。
两个平台通用
行为。一个按用户运行的 Node.js 进程在登录时启动,发起出站 HTTPS 调用,为助手运行命令,并在每次启动时复制插件文件,因此会在安装文件夹下写入大量文件。
CrowdStrike。CrowdStrike 为 Falcon for IT 发布了 OpenClaw “Search & Removal”内容包。它会查找正在运行的 OpenClaw 进程、全局 npm 安装、常见路径中的 OpenClaw 二进制文件、服务,以及主文件夹中的状态和配置文件夹。其移除流程会停止服务和进程、卸载 npm 包、删除安装和配置文件夹,并移除服务注册,其中包括计划任务和 launchd plist。Maxiful 的网关是一个正在运行的 OpenClaw 进程,其状态在 Windows 上位于 %USERPROFILE%\.openclaw-<name>,在 Mac 上位于 ~/.openclaw-<name>,因此该内容包可能会找到它。如果在运行 Maxiful 的电脑上执行移除,可能会停止团队,并删除助手的配置和记忆。可以用它的搜索功能了解 Maxiful 在哪些电脑上运行,但不要在组织使用 Maxiful 的电脑上执行移除。
是否加入允许列表由你的安全团队决定。这些进程为助手运行命令,默认在每个助手的沙盒中,并遵循我们安全页面所述的审批机制。
托管设置
Maxiful 从 0.9.60 版起在 Windows 和 Mac 上读取托管设置;更早的版本不会读取。
IT 部门可以集中设置 Maxiful 的部分设置:在 Windows 上使用组策略或 Intune,在 Mac 上使用来自 Jamf、Intune 或其他设备管理工具的配置描述文件。Maxiful 每次用到这些设置时都会读取;对所有者开关的更改会在 Maxiful 下次启动时对助手生效,在此之前设置中会注明这一点。由组织设置的项会在 Maxiful 的设置中显示为由你的组织设置,无法在那里更改;你设置的所有项都会列在访问的顶部。没有策略时,Maxiful 的行为与在不受 IT 部门管理的电脑上相同。
| 名称 | 值 | 作用 |
|---|---|---|
Workspace | 文本 | 这台电脑上的 Maxiful 只打开具有此 ID 的工作区。工作区所有者可以在 Maxiful 设置中“访问”的顶部找到这个 ID,即此工作区的 ID。不是该工作区成员的用户会看到这是由你的组织设置的,需通过邀请加入该工作区;他们自己的工作区和其他任何工作区都无法在这台电脑上打开。 |
AutoUpdate | 0 或 1 | 0:Maxiful 不检查、不下载也不安装更新,设置中会说明由你的组织安装更新,你需要自行推送每个新安装程序(见“更新”)。1:Maxiful 自动更新,与没有策略时相同。 |
OwnerSwitches | 每项 0 或 1 | 下表中所有者的某个开关,按名称指定:0 为关,1 为开,不论所有者如何选择。你未设置的开关仍由所有者决定。移除某个值后,会恢复所有者自己的选择;所有者从未选择过的,则恢复 Maxiful 的默认设置。与设置值一样,这会在 Maxiful 下次启动时对助手生效。 |
所有者的开关
| 名称 | Maxiful 中的开关 | 位置 |
|---|---|---|
terminal | 在这台电脑上打开终端 | 访问(仅限 Mac) |
private-network | 允许助手打开本机和我网络中的页面 | 访问 |
pane-reach | 允许助手的面板运行代码并访问 Maxiful 以外的内容 | 访问 |
claude-code-background | 允许 Claude Code 在后台继续运行耗时较长的命令 | 访问 |
session-reach | 助手可以查看这台电脑上的所有对话(以便从过去的工作中学习) | 访问 |
model-costs | 以美元显示模型费用 | 高级 |
next-prompt | 建议我的下一条消息 | 高级 |
checkin-whole-conversation | 定期汇报时读取整段对话 | 高级 |
voice-notes | 将语音消息转成文字 | 语音和音频 |
除数字外,Maxiful 还会将文本 0、1、true 和 false 识别为 0 或 1。无法识别的值,例如应为 0 或 1 的位置填了其他文本、其他注册表类型(REG_QWORD、REG_EXPAND_SZ、REG_BINARY),或 OwnerSwitches 下无法识别的名称,都不会生效,Maxiful 的设置会在由你的组织设置下列出它。在 Windows 上,这适用于策略项及其子项下的所有值,HKLM 和 HKCU 都一样。
Windows 上
Maxiful 先读取 HKLM\SOFTWARE\Policies\Maxiful,再读取 HKCU\SOFTWARE\Policies\Maxiful;HKLM 下的值优先于 HKCU 下的同名值。Workspace 为 REG_SZ,AutoUpdate 为 REG_DWORD;每个所有者开关都是 OwnerSwitches 子项下的 REG_DWORD,名称见上表。下面这对 ADMX 和 ADML 文件写入的正是这些值:将它们另存为 maxiful.admx 和 en-US\maxiful.adml 放入你的策略定义存储,或作为导入的管理模板导入 Intune。
maxiful.admx
<?xml version="1.0" encoding="utf-8"?>
<policyDefinitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" revision="1.0" schemaVersion="1.0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<policyNamespaces>
<target prefix="maxiful" namespace="Maxiful.Policies" />
</policyNamespaces>
<resources minRequiredRevision="1.0" />
<supportedOn>
<definitions>
<definition name="SUPPORTED_Maxiful" displayName="$(string.SUPPORTED_Maxiful)" />
</definitions>
</supportedOn>
<categories>
<category name="Maxiful" displayName="$(string.Maxiful)" />
<category name="OwnerSwitches" displayName="$(string.OwnerSwitches)">
<parentCategory ref="Maxiful" />
</category>
</categories>
<policies>
<policy name="Workspace" class="Both" displayName="$(string.Workspace)" explainText="$(string.Workspace_Explain)" presentation="$(presentation.Workspace)" key="SOFTWARE\Policies\Maxiful">
<parentCategory ref="Maxiful" />
<supportedOn ref="SUPPORTED_Maxiful" />
<elements>
<text id="Workspace" valueName="Workspace" maxLength="128" required="true" />
</elements>
</policy>
<policy name="AutoUpdate" class="Both" displayName="$(string.AutoUpdate)" explainText="$(string.AutoUpdate_Explain)" key="SOFTWARE\Policies\Maxiful" valueName="AutoUpdate">
<parentCategory ref="Maxiful" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_PrivateNetwork" class="Both" displayName="$(string.OwnerSwitch_PrivateNetwork)" explainText="$(string.OwnerSwitch_PrivateNetwork_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="private-network">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_PaneReach" class="Both" displayName="$(string.OwnerSwitch_PaneReach)" explainText="$(string.OwnerSwitch_PaneReach_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="pane-reach">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_ClaudeCodeBackground" class="Both" displayName="$(string.OwnerSwitch_ClaudeCodeBackground)" explainText="$(string.OwnerSwitch_ClaudeCodeBackground_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="claude-code-background">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_SessionReach" class="Both" displayName="$(string.OwnerSwitch_SessionReach)" explainText="$(string.OwnerSwitch_SessionReach_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="session-reach">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_ModelCosts" class="Both" displayName="$(string.OwnerSwitch_ModelCosts)" explainText="$(string.OwnerSwitch_ModelCosts_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="model-costs">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_NextPrompt" class="Both" displayName="$(string.OwnerSwitch_NextPrompt)" explainText="$(string.OwnerSwitch_NextPrompt_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="next-prompt">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_CheckinWholeConversation" class="Both" displayName="$(string.OwnerSwitch_CheckinWholeConversation)" explainText="$(string.OwnerSwitch_CheckinWholeConversation_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="checkin-whole-conversation">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
<policy name="OwnerSwitch_VoiceNotes" class="Both" displayName="$(string.OwnerSwitch_VoiceNotes)" explainText="$(string.OwnerSwitch_VoiceNotes_Explain)" key="SOFTWARE\Policies\Maxiful\OwnerSwitches" valueName="voice-notes">
<parentCategory ref="OwnerSwitches" />
<supportedOn ref="SUPPORTED_Maxiful" />
<enabledValue><decimal value="1" /></enabledValue>
<disabledValue><decimal value="0" /></disabledValue>
</policy>
</policies>
</policyDefinitions>
en-US\maxiful.adml
<?xml version="1.0" encoding="utf-8"?>
<policyDefinitionResources xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" revision="1.0" schemaVersion="1.0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
<displayName>Maxiful</displayName>
<description>The settings an IT department sets for Maxiful.</description>
<resources>
<stringTable>
<string id="Maxiful">Maxiful</string>
<string id="OwnerSwitches">The owner's switches</string>
<string id="SUPPORTED_Maxiful">Maxiful for Windows</string>
<string id="Workspace">Open only this workspace</string>
<string id="Workspace_Explain">Maxiful on this computer opens only the workspace with this ID. The workspace's owner finds the ID in Maxiful's settings, under Access. A person who is not a member of the workspace is asked to join it by invitation, and no other workspace opens on this computer.</string>
<string id="AutoUpdate">Let Maxiful update itself</string>
<string id="AutoUpdate_Explain">Disabled: Maxiful does not look for, download or install updates, and you install each new version yourself. Enabled or not configured: Maxiful updates itself.</string>
<string id="OwnerSwitch_PrivateNetwork">Let assistants open pages on this computer and my network</string>
<string id="OwnerSwitch_PrivateNetwork_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Access.</string>
<string id="OwnerSwitch_PaneReach">Let assistants' panes run code and reach outside Maxiful</string>
<string id="OwnerSwitch_PaneReach_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Access.</string>
<string id="OwnerSwitch_ClaudeCodeBackground">Let Claude Code keep long commands running in the background</string>
<string id="OwnerSwitch_ClaudeCodeBackground_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Access.</string>
<string id="OwnerSwitch_SessionReach">Assistants can look through all conversations on this computer (so they learn from past work)</string>
<string id="OwnerSwitch_SessionReach_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Access.</string>
<string id="OwnerSwitch_ModelCosts">Show model costs in dollars</string>
<string id="OwnerSwitch_ModelCosts_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Advanced.</string>
<string id="OwnerSwitch_NextPrompt">Suggest my next message</string>
<string id="OwnerSwitch_NextPrompt_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Advanced.</string>
<string id="OwnerSwitch_CheckinWholeConversation">Check-ins read the whole conversation</string>
<string id="OwnerSwitch_CheckinWholeConversation_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Advanced.</string>
<string id="OwnerSwitch_VoiceNotes">Transcribe voice notes</string>
<string id="OwnerSwitch_VoiceNotes_Explain">Enabled: on. Disabled: off. Not configured: the owner decides, in Maxiful's settings under Voice and audio.</string>
</stringTable>
<presentationTable>
<presentation id="Workspace">
<textBox refId="Workspace">
<label>Workspace ID</label>
</textBox>
</presentation>
</presentationTable>
</resources>
</policyDefinitionResources>
Mac 上
Maxiful 读取其自身域 ai.maxiful.desktop 的托管偏好设置,由配置描述文件以强制设置的形式安装(Apple 的托管偏好设置负载 com.apple.ManagedClient.preferences)。只有描述文件设置的值才有效:以其他方式写入的值(例如用 defaults write)不会被读取。Workspace 为字符串,AutoUpdate 为整数(或布尔值),OwnerSwitches 为以上表中的名称为键的字典。这个示例描述文件将电脑限定在一个工作区,由你负责更新,关闭终端和专用网络开关,并显示模型费用;请替换工作区 ID,并将标识符和 UUID 换成你自己的。
maxiful.mobileconfig
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadType</key><string>Configuration</string>
<key>PayloadVersion</key><integer>1</integer>
<key>PayloadIdentifier</key><string>com.example.maxiful</string>
<key>PayloadUUID</key><string>00000000-0000-0000-0000-000000000001</string>
<key>PayloadDisplayName</key><string>Maxiful</string>
<key>PayloadScope</key><string>System</string>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key><string>com.apple.ManagedClient.preferences</string>
<key>PayloadVersion</key><integer>1</integer>
<key>PayloadIdentifier</key><string>com.example.maxiful.settings</string>
<key>PayloadUUID</key><string>00000000-0000-0000-0000-000000000002</string>
<key>PayloadDisplayName</key><string>Maxiful settings</string>
<key>PayloadContent</key>
<dict>
<key>ai.maxiful.desktop</key>
<dict>
<key>Forced</key>
<array>
<dict>
<key>mcx_preference_settings</key>
<dict>
<key>Workspace</key><string>YOUR-WORKSPACE-ID</string>
<key>AutoUpdate</key><integer>0</integer>
<key>OwnerSwitches</key>
<dict>
<key>terminal</key><false/>
<key>private-network</key><false/>
<key>model-costs</key><true/>
</dict>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
</plist>
更新
Maxiful 会在启动时以及每隔六小时到 maxiful.ai 检查新版本。用户可以选择更新并重启或稍后。新版 Maxiful 可能附带更新的 OpenClaw 运行时;这时 Maxiful 会使用 npm 从 registry.npmjs.org 为该用户更新运行时。
如果你想自己安装每个新版本、让 Maxiful 不再检查更新,在 Windows 或 Mac 上将 AutoUpdate 设为 0 即可(见托管设置):Maxiful 随后会说明由你的组织安装更新。
Windows 上
新版本是一个已签名的安装程序,运行前会对照应用内置的密钥进行校验,更新时以被动模式运行安装程序。你也可以像上文那样,用 /S 自行推送每个新安装程序。
Mac 上
新版本是一个已签名的应用归档,使用前会对照应用内置的密钥进行校验;如果用户的账户可以修改这份应用,它会原地替换应用。
用户无法修改的副本。如果 /Applications/Maxiful.app 属于系统(所有者为 root),用户的账户无法修改它,Maxiful 就不会自行更新:不下载任何内容,从不要求输入管理员密码,不提供更新并重启,并在显示更新的位置说明有新版本可用、这台 Mac 的更新由你的组织安装。请用你的 MDM 推送每个新版本:在 Intune 中,将其磁盘映像上传到同一个应用;在 Jamf Pro 中,用 Composer 构建安装包并按上文方式部署。管理员账户可以修改的副本,会像在任何 Mac 上一样为该账户自动更新。
移除 Maxiful
完全移除,由用户本人操作:在 Maxiful 的设置中选择从这台电脑上移除 Maxiful。它会停止后台进程,并移除登录时启动该进程的项(Windows 上是它的计划任务,Mac 上是它的 LaunchAgent),删除此安装的数据和凭据,并移除它安装的 Node.js 运行时,除非这台电脑上还有其他安装在使用。在 Windows 上,Maxiful 退出后会接着启动卸载程序;在 Mac 上,如果用户的账户有权限,它会把应用移到废纸篓。用户自己的文档不受影响。
在 Windows 上
完全移除,静默执行:%LOCALAPPDATA%\Maxiful\uninstall.exe /S /REMOVEALL 会在无人值守的情况下,为该安装所属的用户执行从这台电脑上移除 Maxiful,然后移除应用。此操作无法撤销。移除了哪些内容、哪些未能移除,记录在 %LOCALAPPDATA%\ai.maxiful.desktop\logs 中的 removal-report.json 里。
不带 /REMOVEALL:上文 Intune 方案中运行的 %LOCALAPPDATA%\Maxiful\uninstall.exe /S 会移除应用、快捷方式、团队守护任务,以及 Maxiful 添加的 Defender 排除项(Windows 可能会就此再次弹出提示)。它还会停止助手的后台进程,并移除登录时启动该进程的项,但保留运行时和此安装的数据。installer.log 与应用的其他日志放在一起,会写明是否有内容仍在运行。
在 Mac 上
请先为每位用户执行从这台电脑上移除 Maxiful:如果只移除应用,该用户的后台网关会继续运行,其中保存的所有内容也都还在。然后用你的 MDM 移除 /Applications/Maxiful.app,例如通过 Intune 的 Uninstall 分配。