Gox公司
Gox是Roblox Studio的AI代理运行时,已公开 主控程序.
它允许AI代理通过以下方式进行高信心的Roblox游戏开发:
- 行动 --原子、安全、可审计的操作
- 工作流 --由动作构建的多步骤编排
- 必需品 --验证、运行审核和策略控制,以实现安全的本地使用
键入的Go客户端包装器可在 pkg/client.
快速开始
go build -o gox ./cmd/gox
./gox使用JSON-RPC 2.0(MCP)通过stdio进行通信。在没有桥接模式的情况下, core.ping 和 project.workspace_stats 立即可用。
工具
MCP协议
| 方法 | 说明 |
|---|---|
initialize | 能力握手 |
tools/list | 列出已注册的工具 |
tools/call | 执行工具 |
资源
| URI | 描述 |
|---|---|
gox://status | 服务器状态 |
gox://runs | 所有跑步记录 |
gox://runs/{runId} | 单次运行记录 |
核心行动
| 工具 | 描述 | 桥接器 |
|---|---|---|
core.ping | 健康检查 | 否 |
project.workspace_stats | 工作区文件统计信息 | 否 |
Roblox桥梁行动
需要 GOX_BRIDGE_ENABLED=true.
| 工具 | 说明 |
|---|---|
roblox.bridge_ping | 网桥连接检查 |
roblox.script_create | 创建脚本 |
roblox.script_update | 更新脚本源 |
roblox.script_delete | 删除脚本 |
roblox.script_get_source | 读取脚本源代码 |
roblox.script_execute | 执行脚本 |
roblox.instance_create | 创建实例 |
roblox.instance_set_property | 设置实例属性 |
roblox.instance_delete | 删除实例 |
roblox.instance_get | 获取实例详细信息 |
roblox.instance_list_children | 列出子实例 |
roblox.instance_find | 按查询查找实例 |
roblox.scene_snapshot | 快照场景子树元数据 |
roblox.scene_plan | 构建确定性突变计划 |
roblox.scene_apply | 交互式应用场景规划 |
roblox.scene_validate | 运行场景质量门 |
roblox.scene_capture | 在支持的情况下捕获场景缩略图 |
工作流工具
| 工具 | 说明 |
|---|---|
workflow.run | 启动多步骤工作流 |
workflow.status | 检查工作流运行状态 |
workflow.cancel | 取消正在运行的工作流 |
workflow.list | 列表工作流运行 |
workflow.logs | 获取工作流运行日志 |
工作流支持通过每一步执行有条件的步骤 when、重试策略和超时配置。
批准和有条件的步骤
策略规则可以将允许规则标记为 requiresApproval那样的话,通过 approved=true 根据请求。
对于动作工具,设置 approved 在MCP请求元数据中。
对于工作流,请使用 approved 争论 workflow.run 并且可选地按步骤 when 条件:
{
"definition": {
"id": "wf.example",
"steps": [
{
"id": "step-1",
"actionId": "core.ping",
"input": {}
},
{
"id": "step-2",
"actionId": "roblox.script_update",
"when": {
"stepId": "step-1",
"path": "ok",
"equals": true
},
"input": {}
}
]
},
"approved": true
}when 规则引用前一步(stepId)并比较整个输出或点路径(path)反对 equals.
配置
所有配置都是通过具有合理默认值的环境变量进行的。
要连接到Roblox Studio,请设置桥接变量:
export GOX_BRIDGE_ENABLED=true
export GOX_BRIDGE_NETWORK=relay-http
export GOX_BRIDGE_AUTH_TOKEN=replace-with-long-random-secret策略默认为 deny-by-default.允许在地方发展过程中采取行动:
export GOX_POLICY_RULES_PATH=policy/packs/local-dev.json如果没有提供策略文件,Gox将保留一个最小的基线分配列表(core.ping, project.workspace_stats)并否认其他一切。
运行历史记录存储在内存中,并通过MCP资源公开(gox://runs, gox://runs/{runId}).
完整的环境变量引用: docs/configuration.md
与AI客户端集成
Gox可以通过stdio与任何兼容MCP的客户端配合使用。首先构建二进制文件以加快启动速度:
go build -o gox ./cmd/gox以下示例启用桥接模式 relay-http调整或移除 env 如果你不需要,就屏蔽它。
Claude Desktop
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"gox": {
"command": "/path/to/gox",
"env": {
"GOX_BRIDGE_ENABLED": "true",
"GOX_BRIDGE_NETWORK": "relay-http",
"GOX_BRIDGE_AUTH_TOKEN": "replace-with-long-random-secret"
}
}
}
}Claude Code
claude mcp add gox /path/to/gox或者使用环境变量:
claude mcp add gox -e GOX_BRIDGE_ENABLED=true -e GOX_BRIDGE_NETWORK=relay-http -e GOX_BRIDGE_AUTH_TOKEN=replace-with-long-random-secret -- /path/to/goxCodex
增添 ~/.codex/config.toml (或 .codex/config.toml 在您的项目中):
[mcp_servers.gox]
command = "/path/to/gox"
[mcp_servers.gox.env]
GOX_BRIDGE_ENABLED = "true"
GOX_BRIDGE_NETWORK = "relay-http"
GOX_BRIDGE_AUTH_TOKEN = "replace-with-long-random-secret"或者通过CLI:
codex mcp add gox -- /path/to/goxCursor
增添 .cursor/mcp.json 在项目根目录中:
{
"mcpServers": {
"gox": {
"command": "/path/to/gox",
"env": {
"GOX_BRIDGE_ENABLED": "true",
"GOX_BRIDGE_NETWORK": "relay-http",
"GOX_BRIDGE_AUTH_TOKEN": "replace-with-long-random-secret"
}
}
}
}VS Code (GitHub Copilot)
增添 .vscode/mcp.json 在您的工作空间中:
{
"servers": {
"gox": {
"type": "stdio",
"command": "/path/to/gox",
"env": {
"GOX_BRIDGE_ENABLED": "true",
"GOX_BRIDGE_NETWORK": "relay-http",
"GOX_BRIDGE_AUTH_TOKEN": "replace-with-long-random-secret"
}
}
}
}Roblox插件
连接到网桥的Roblox Studio插件位于 plugin/roblox:
- 桥接模块:
plugin/roblox/src/bridge - 插件入口点:
plugin/roblox/src/plugin/PluginMain.server.luau - Rojo项目:
plugin/roblox/default.project.json - 内置工件:
plugin/roblox/dist/GoxBridge.rbxmx
测试
go test ./...
go test -race ./...错误格式
当动作输入未通过验证时, tools/call 返回带有机器可读字段的JSON-RPC错误:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "input.scriptType: must be one of the allowed values",
"data": {
"code": "VALIDATION_ERROR",
"category": "client",
"correlation_id": "abc123",
"validation_path": "input.scriptType",
"validation_rule": "enum"
}
}
}