在整个组织中部署 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] 告诉我们。

  1. 创建一个包文件夹,放入从你的 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(见卸载)。
  2. 使用 Microsoft 的 Win32 Content Prep Tool 生成 .intunewin 文件:
    IntuneWinAppUtil.exe -c C:\maxiful-package -s Maxiful-x64-setup.exe -o C:\maxiful-intunewin -q
  3. Program:如果你的 Defender 策略会添加上述四个文件夹,安装命令为 Maxiful-x64-setup.exe /S /DEFENDER=managed;如果要扫描它们,则为 Maxiful-x64-setup.exe /S /DEFENDER=off。卸载命令为 uninstall.cmd;安装行为选 User;设备重启行为选 No specific action;返回代码保持默认。
  4. Requirements:64 位,Windows 10 或更高版本。
  5. 检测规则:文件,路径 %LOCALAPPDATA%\Maxiful,文件 Maxiful.exe,方法 File or folder exists。
  6. Assignments:Required 或 Available,分配给用户组。

Intune 要求安装过程不提任何问题。带 /DEFENDER 开关时,Maxiful 的安装不会提问;不带时,Windows 的 Defender 提示是它唯一可能弹出的问题。大范围分配之前,请先阅读首次启动。

Mac:Microsoft Intune 和 Jamf Pro

你的设备管理工具会从用户下载的同一个磁盘映像中,把经过公证的 Maxiful.app 安装到 /Applications。以下是它需要填写的值。

在 MDM 中填写值
Bundle IDai.maxiful.desktop
Team ID467H9AXX55
应用签名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))

  1. 依次选择 Apps、All Apps、Create;平台选 macOS,类型选 macOS app (DMG);选择从你的 Maxiful 账户下载并已核对 SHA-256 的 Maxiful-arm64.dmg。Mac 上需要安装 Intune 的 macOS 管理代理。
  2. App information:添加徽标,这样应用在 Company Portal 中会显示图标。Requirements:Minimum Operating System 选 macOS 13。
  3. Detection rules:Included apps 填 ai.maxiful.desktop 及其版本。Ignore app version 选 No,这样你上传的每个版本都会安装。同时把 AutoUpdate 设为 0(见托管设置):每个版本都由你通过 Intune 安装,Maxiful 自己不再检查更新。
  4. 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 的安装包:

  1. 在一台 Mac 上,把磁盘映像中的 Maxiful.app 拷贝到 /Applications。在 Composer 中,从“访达”把 /Applications/Maxiful.app 拖到 Sources 列表,使它保留在 /Applications 中的位置,然后用这个来源构建安装包。
  2. 把安装包添加到分发点和 Jamf Pro。
  3. 在 Computers、Policies 下新建一个策略。在 General 中设置触发条件和执行频率;在 Packages 负载中添加该安装包,操作选 Install,并选择分发点。
  4. 在 Scope 标签页中选择电脑;也可以让这个策略在 Self Service 中可用。
  5. 每个新版本都用同样的方式构建安装包并通过策略部署,同时把 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%\LanokoNode.js 24.21.0 及其中安装的 OpenClaw 运行时,以及 npm 缓存。该文件夹沿用 Maxiful 以前的名称。
%USERPROFILE%\.openclaw-<name>安装本身:运行时配置、助手及其工作区和记忆、该安装的密钥,以及助手专用的浏览器。
%USERPROFILE%\.stommeMaxiful 为每个安装保存的记录,例如附加组件和所有者做出的决定。
%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/LanokoNode.js 24.21.0 及其中安装的 OpenClaw 运行时、npm 缓存和网关的工作文件夹。该文件夹沿用 Maxiful 的旧名称。
~/.openclaw-<name>安装本身:运行时配置、助手及其工作区和记忆、安装的密钥,以及助手专用的浏览器。
~/.stommeMaxiful 为每个安装保存的记录,例如其附加组件和所有者的决定。
~/.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.orgNode.js,安装时使用。
registry.npmjs.orgOpenClaw 运行时,安装时以及更新附带新版运行时时使用。
cdn.playwright.dev助手的浏览器,安装时使用。

仅在使用某项功能时

主机用途
relay.maxiful.ai中继(WSS):已配对的手机和同事的设备。
relay.lanoko.ai同一中继的旧名称,供 2026 年 10 月 22 日之前配对的安装和手机使用。
ingress.lanoko.ai通过 webhook 投递消息的聊天平台,例如 Teams 和 Google Chat。
teamtailor.maxiful.aiTeamtailor 连接。
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。不是该工作区成员的用户会看到这是由你的组织设置的,需通过邀请加入该工作区;他们自己的工作区和其他任何工作区都无法在这台电脑上打开。
AutoUpdate0 或 10: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 分配。