快速开始

要求 Node.js ≥ 18,无其他外部依赖。三步启动:

# 1. 安装依赖
npm install

# 2. 生成配置(务必修改 token!)
cp config.example.json config.json

# 3. 启动
npm start

启动后可访问:

Windows 服务器一键就绪:以管理员身份运行 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
最小权限原则:给不完全信任的 Agent 只发 viewer;确需 admin 又不放心时,把服务端 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_composedocker compose:up / down / restart / pull / build / logs
freex_deploy_serviceWindows 服务 / systemd:status / start / stop / restart / enable / disable
freex_deploy_pm2pm2 应用: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.execModeblocklist(默认)/ allowlist / confirm
security.blocklistPatterns / allowlist命令策略规则
security.fsRoot文件操作根目录约束,null 为整机
security.execTimeoutMs命令超时(默认强杀进程树)
security.maxOutputBytes / maxUploadBytes输出 / 上传大小上限
security.rateLimitPerMin每连接每分钟请求上限(默认 120)
security.ipAllowlistIP 白名单,空为不限制
audit.file / audit.console审计日志路径 / 是否同步打印

安全模式怎么选

模式行为适用
blocklist正则拦截 rm -rf /、mkfs、dd、关机、格式化等破坏性命令,其余放行演示、个人、可信网络(默认)
allowlist仅放行白名单命令,其余一律 EXEC_BLOCKED全自主 AI、无人值守
confirm命中高危特征的命令进审批队列,Web 控制台点「允许」才执行,超时自动拒绝把 admin 交给更自主的 Agent 时的安全阀

三种模式都与这些机制叠加生效:fsRoot 路径沙箱、超时杀进程树、限流、IP 白名单、全量审计、删除前自动快照。

生产清单:修改所有默认 token → 防火墙只放行端口给可信来源 → 反代加 TLS(wss)→ 敏感场景用 allowlist/confirm → 审计日志纳入轮转。

部署指南

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 改动需重启服务。

准备好让 AI 上手了吗?

也可以直接体验在线控制台。

进入 FreeX 控制台 ↗