快速开始
要求 Node.js ≥ 18,无其他外部依赖。三步启动:
# 1. 安装依赖 npm install # 2. 生成配置(务必修改 token!) cp config.example.json config.json # 3. 启动 npm start
启动后可访问:
- Web 控制台:
http://localhost:7800/(填入 token 即可连接) - WS 通道:
ws://localhost:7800/ws?token=<TOKEN> - 健康探针:
http://localhost:7800/health
scripts\windows-quickstart.ps1 -OpenFirewall,脚本自动检查 Node、装依赖、生成随机 token、放行防火墙并启动服务。MCP 接入
FreeX 自带标准 MCP 桥(mcp/freex-mcp.mjs),在 ZCode / Claude Desktop / Cursor 等任何支持 MCP 的客户端中加入以下配置,重启后即可获得 48 个 freex_ 前缀工具:
{
"mcpServers": {
"freex-ai-server": {
"command": "node",
"args": ["<项目绝对路径>/mcp/freex-mcp.mjs"],
"env": {
"FREEX_WS_URL": "ws://127.0.0.1:7800/ws",
"FREEX_TOKEN": "<你的 admin token>"
}
}
}
}线上生产环境改用 TLS 地址 wss://your-domain/ws(见部署指南)。
角色与凭据
token 在服务端 config.json 的 tokens 中配置,可配多个、随时轮换:
| 角色 | 能力 | 适用对象 |
|---|---|---|
admin | 全部 48 个工具:含删文件、装软件、杀进程、部署、审批 | 完全可信的 Agent |
viewer | 只读工具:系统信息、监控、进程列表、目录浏览、读文件、包管理器探测 | 看板 / 告警 / 巡检类 Agent |
security.execMode 切到 allowlist 或 confirm 模式。工具速查(48 个)
所有工具以 freex_ 为前缀,按模块分组:
| 系统 · sys | |
freex_sys_info | 操作系统、CPU、内存、运行时长 |
freex_sys_which | 探测某命令在服务器上是否可用 |
| 命令执行 · exec | |
freex_exec | 执行 shell 命令,stdout/stderr 流式回传;超时上限 30 分钟,受安全策略约束 |
| 文件管理 · fs | |
freex_fs_list | 列出目录的文件与子目录 |
freex_fs_stat | 查看文件/目录属性(类型、大小、修改时间) |
freex_fs_read | 读取文件(>8MB 拒绝;二进制用 base64) |
freex_fs_write | 写入文本或 base64 内容(覆盖/追加) |
freex_fs_mkdir | 创建目录 |
freex_fs_remove | 删除文件或目录(自动快照留档,可回滚) |
| 实时监控 · monitor | |
freex_monitor | 资源快照:CPU/内存/磁盘/网络;level=full 含 Top 进程 |
| 进程管理 · proc | |
freex_proc_list | 进程表(按 CPU 排序前 20) |
freex_proc_kill | 结束进程树 |
| 软件包 · pkg | |
freex_pkg_detect | 探测可用包管理器(apt/dnf/yum/pacman/apk/brew/winget/choco/npm/pip) |
freex_pkg_install | 安装软件包(自动提权,可能耗时 15 分钟) |
freex_pkg_remove | 卸载软件包 |
| 应用部署 · deploy | |
freex_deploy_compose | docker compose:up / down / restart / pull / build / logs |
freex_deploy_service | Windows 服务 / systemd:status / start / stop / restart / enable / disable |
freex_deploy_pm2 | pm2 应用:list / start / stop / restart / delete / logs |
| 告警 · alert | |
freex_alert_add | 添加告警规则(cpu/mem/disk 阈值,webhook 推送,冷却 10 分钟) |
freex_alert_list / freex_alert_remove | 列出 / 删除告警规则 |
freex_alert_test | 发送测试告警,验证 webhook 通道 |
| 定时任务 · cron | |
freex_cron_add | 新建定时任务(标准 5 段 crontab 表达式) |
freex_cron_list / freex_cron_remove | 列出(含最近执行状态)/ 删除任务 |
freex_cron_run | 立即执行一次 |
| 快照回滚 · snapshot | |
freex_snapshot_create | 把文件/目录打包留档 |
freex_snapshot_rollback | 回滚快照(回滚前自动留档当前状态) |
freex_snapshot_list / freex_snapshot_remove | 列出 / 删除快照 |
| 云存储 · storage | |
freex_storage_put | 存入文本或 base64 内容到存储池 |
freex_storage_url | 生成带过期时间的签名分享外链(免登录下载) |
freex_storage_list / freex_storage_delete | 列出 / 删除池内文件 |
| 数据库 · db | |
freex_db_install | 一键安装 MongoDB(绿色装到数据盘、仅绑 127.0.0.1) |
freex_db_status / freex_db_detect | 查看运行状态 / 探测 MongoDB·MySQL·Redis |
freex_db_conn | 生成数据库连接串 |
| 浏览器自动化 · auto | |
freex_auto_install | 安装 Playwright + Chromium(首次约 3~15 分钟) |
freex_auto_browser | 驱动服务器端浏览器:open / goto / screenshot / text / close |
| 桌面 · desktop | |
freex_desktop_screenshot | 截取服务器桌面(需交互会话;服务方式运行返回 DESKTOP_UNAVAILABLE) |
| 账号 · auth | |
freex_auth_adduser | 新建/覆盖控制台账号(scrypt 哈希持久化,admin/viewer) |
freex_auth_passwd | 修改账号密码 |
freex_auth_list / freex_auth_deluser | 列出 / 删除账号 |
| 审批 · approval | |
freex_approval_list | 查看审批队列(pending / approved / rejected) |
freex_approval_approve | 批准并真实执行命令(execute=false 为仅拒绝) |
freex_approval_reject | 拒绝审批单 |
WebSocket 协议
所有消息为 JSON 文本帧,统一信封 {"v":1, ...}。三种交互模式:req/res(请求-响应)、stream(流式过程输出)、push(订阅广播)。
客户端 → 服务端
| type | 说明 |
|---|---|
auth | 鉴权(URL 未带 token 时必须首条发送) |
req | 请求指令:module + action + params |
sub / unsub | 订阅 / 取消订阅推送事件(如 monitor.tick,最短间隔 2s) |
ping | 应用层心跳(协议层 ping/pong 同时存在,双保险) |
服务端 → 客户端
| type | 说明 |
|---|---|
hello | 连接建立后发送(服务端信息 + 鉴权状态) |
res | 请求响应:{ok:true, data, ms} 或 {ok:false, error} |
stream | 流式输出:{ch:"<请求id>", event:"exec.stdout", data:{text}} |
push | 订阅推送:{event:"monitor.tick", data:{…}} |
pong | 心跳应答 |
大文件走 HTTP 通道(token 鉴权不变):GET /api/fs/download?path=&token=、PUT /api/fs/upload?path=&token=(≤200MB)。
错误码
错误统一为 {code, message} 结构化数据,AI 可编程重试或换方案:
AUTH_REQUIRED AUTH_FAILED FORBIDDEN_ROLE
RATE_LIMITED UNKNOWN_ACTION BAD_REQUEST
EXEC_BLOCKED EXEC_TIMEOUT EXEC_OUTPUT_LIMIT
FS_OUT_OF_ROOT FS_TOO_LARGE
PKG_MANAGER_NOT_FOUND DOCKER_NOT_FOUND
DESKTOP_UNAVAILABLE INTERNAL
配置参考
配置文件 config.json 主要项(完整示例见 config.example.json):
| 配置 | 说明 |
|---|---|
port / host | 监听端口/地址,默认 7800 / 0.0.0.0 |
tokens[] | {token, role: admin|viewer, note},可配多个 |
security.execMode | blocklist(默认)/ allowlist / confirm |
security.blocklistPatterns / allowlist | 命令策略规则 |
security.fsRoot | 文件操作根目录约束,null 为整机 |
security.execTimeoutMs | 命令超时(默认强杀进程树) |
security.maxOutputBytes / maxUploadBytes | 输出 / 上传大小上限 |
security.rateLimitPerMin | 每连接每分钟请求上限(默认 120) |
security.ipAllowlist | IP 白名单,空为不限制 |
audit.file / audit.console | 审计日志路径 / 是否同步打印 |
安全模式怎么选
| 模式 | 行为 | 适用 |
|---|---|---|
blocklist | 正则拦截 rm -rf /、mkfs、dd、关机、格式化等破坏性命令,其余放行 | 演示、个人、可信网络(默认) |
allowlist | 仅放行白名单命令,其余一律 EXEC_BLOCKED | 全自主 AI、无人值守 |
confirm | 命中高危特征的命令进审批队列,Web 控制台点「允许」才执行,超时自动拒绝 | 把 admin 交给更自主的 Agent 时的安全阀 |
三种模式都与这些机制叠加生效:fsRoot 路径沙箱、超时杀进程树、限流、IP 白名单、全量审计、删除前自动快照。
部署指南
Linux(systemd)
项目放 /opt/freex_ai_server 后:
sudo cp scripts/freex.service /etc/systemd/system/ sudo systemctl enable --now freex
Windows 服务
安装 nssm 后以管理员运行 scripts\install-windows-service.ps1;或通用方案 pm2 start src/index.js --name freex && pm2 save。
TLS 反代(Caddy,最简)
freex.example.com {
reverse_proxy /ws 127.0.0.1:7800
reverse_proxy 127.0.0.1:7800
}Caddy 自动签发并续期 Let's Encrypt 证书,WebSocket 升级头自动透传。Nginx 需为 /ws 开启 proxy_http_version 1.1 与 Upgrade/Connection 头。客户端改用 wss:// 地址。
SSH 隧道(零端口暴露,推荐先做)
ssh -L 7800:127.0.0.1:7800 user@<服务器IP>
# 之后所有客户端连 ws://127.0.0.1:7800/ws,公网无需开任何端口常见问题
连接失败?
检查 Node ≥ 18、token 是否正确、网络是否可达;公网直连时确认云厂商安全组已放行对应 TCP 端口(Windows 防火墙脚本可自动放行)。
工具返回 AUTH_FAILED?
token 被轮换,向管理员索取新 token。
工具返回 FORBIDDEN_ROLE?
当前 token 是 viewer 只读角色,需要 admin 请联系管理员。
AI 能造成多大破坏?
取决于你给的模式与角色:viewer 无法写操作;blocklist 拦截已知危险命令;allowlist 只放行白名单;confirm 模式高危操作必须人工批准;删除类操作自动快照、可一键回滚;所有操作全程审计。详见安全模式。
更新服务要重启吗?
Web 控制台页面与静态资源按请求即时读取,覆盖即生效;src/ 与 config.json 改动需重启服务。