[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81121":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":12,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":12,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":14,"starSnapshotCount":14,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},81121,"Codex-Remote-Contact","Epic0522\u002FCodex-Remote-Contact","Epic0522","A local macOS contact hub for iMessage, QQ\u002FOneBot, Codex CLI, and remote execution.",null,"JavaScript",38,3,34,0,1,4,1.81,false,"main",true,[],"2026-06-12 02:04:11","\u003Cdiv align=\"center\">\n\n# Codex Remote Contact\n\n### 我不想整 API\n\n**A local macOS contact hub for iMessage, QQ\u002FOneBot, Codex CLI, and remote execution.**  \n**一个面向 iMessage、QQ\u002FOneBot、Codex CLI 与远程执行的 macOS 本地联系中枢。**\n\n![Node.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-20+-339933)\n![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-14%2B-blue)\n![Memory](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Ffree%20memory-3GB%2B-orange)\n![Optional Packages](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Foptional%20packages-supported-purple)\n\n\u003C\u002Fdiv>\n\n---\n\n## Introduction \u002F 介绍\n\nCodex Remote Contact runs on your Mac and connects iMessage, QQ\u002FOneBot, Codex CLI, local automation scripts, proxy node control, and a web console into one local service.\n\nCodex Remote Contact 运行在 macOS 本机，把 iMessage、QQ\u002FOneBot、Codex CLI、本机自动化脚本、代理节点控制和 Web 控制台接到同一个本地服务里。\n\nThe main program is intentionally usable by itself. Optional update packages such as `qq-enhancer` and `unified-memory` can be placed next to it when you need enhanced QQ group-chat behavior or cross-device memory.\n\n主程序可以独立启动。需要更强的 QQ 群聊能力或跨端记忆时，再把 `qq-enhancer`、`unified-memory` 等可选升级包放到旁边即可。\n\n## Highlights \u002F 功能亮点\n\n| Module \u002F 模块 | Description \u002F 说明 |\n| :--- | :--- |\n| iMessage console \u002F iMessage 控制台 | Receive trusted commands such as `\u002F状态`, `\u002F维护`, `\u002F开启QQ`, `\u002F关闭QQ`, `\u002F节点检查`, `\u002F切换节点`, and `\u002F远程执行`.\u003Cbr>接收可信联系人发来的 `\u002F状态`、`\u002F维护`、`\u002F开启QQ`、`\u002F关闭QQ`、`\u002F节点检查`、`\u002F切换节点`、`\u002F远程执行` 等指令。 |\n| iMessage private replies \u002F iMessage 私聊回复 | Generate replies through Codex CLI and keep an independent rolling context.\u003Cbr>调用 Codex CLI 生成回复，并保存独立滚动上下文。 |\n| QQ\u002FOneBot channel \u002F QQ 通道 | Receive QQ group and private messages through LLBot or another OneBot-compatible bridge.\u003Cbr>通过 LLBot 或其他 OneBot 兼容桥接器接收 QQ 群聊和私聊。 |\n| Remote execution \u002F 远程执行模式 | Start a full Codex CLI local task channel from iMessage.\u003Cbr>通过 iMessage 开启完整 Codex CLI 本机任务通道。 |\n| Proxy and system control \u002F 代理与系统控制 | Control Shadowrocket node status\u002Fcheck\u002Fswitching, keep-awake, display sleep, and built-in-display backlight helper scripts.\u003Cbr>支持 Shadowrocket 节点状态、测速、切换确认，以及防休眠、显示器休眠、内置屏背光控制脚本。 |\n| Optional packages \u002F 可选升级包 | Load `qq-enhancer` and `unified-memory` when present; fall back cleanly when absent.\u003Cbr>存在时加载 `qq-enhancer` 与 `unified-memory`；不存在时自动降级。 |\n\n## Quick Navigation \u002F 快速导航\n\n- [Project Structure \u002F 项目结构](#project-structure--项目结构)\n- [Optional Package Layout \u002F 可选升级包结构](#optional-package-layout--可选升级包结构)\n- [Requirements \u002F 安装要求](#requirements--安装要求)\n- [Deployment Guide \u002F 部署教程](#deployment-guide--部署教程)\n- [Common Commands \u002F 常用指令](#common-commands--常用指令)\n- [Environment Variables \u002F 环境变量](#environment-variables--环境变量)\n- [Troubleshooting \u002F 故障排查](#troubleshooting--故障排查)\n- [Notice \u002F 注意事项](#notice--注意事项)\n\n---\n\n## Project Structure \u002F 项目结构\n\n```text\ncodexremotecontact\u002F\n  src\u002Fserver.js                         # Hub main process \u002F Hub 主进程\n  modules\u002F\n    imessage\u002F                           # iMessage notes \u002F iMessage 模块说明\n    qq-llbot\u002F                           # QQ\u002FLLBot notes \u002F QQ\u002FLLBot 模块说明\n    shadowrocket\u002F                       # Shadowrocket scripts \u002F 节点控制脚本\n    system-control\u002F                     # Keep-awake and backlight scripts \u002F 系统控制脚本\n    web-console\u002Fpublic\u002F                 # Web console \u002F 网页控制台\n    mac-client\u002F                         # macOS WebKit client source \u002F macOS 客户端源码\n    macos-launcher\u002F                     # Launcher source \u002F 启动器源码\n  config\u002F\n    settings.example.json               # Example settings \u002F 配置示例\n    local.codexremotecontact.chat-hub.plist.example\n  data\u002F                                 # Empty settings and memory files \u002F 空配置与记忆文件\n  runtime\u002F                              # Runtime logs and generated files \u002F 运行时文件\n  workspaces\u002Fcodex-cli\u002F                 # Codex CLI temporary workspace \u002F 临时工作区\n```\n\n## Optional Package Layout \u002F 可选升级包结构\n\nRecommended layout:\n\n推荐目录结构：\n\n```text\nProjects\u002F\n  codexremotecontact\u002F\n  qq-enhancer\u002F\n  unified-memory\u002F\n```\n\nThe hub tries to load optional packages in this order:\n\n主程序会按以下顺序尝试加载可选升级包：\n\n| Order \u002F 顺序 | Source \u002F 来源 |\n| :--- | :--- |\n| 1 | Environment module paths, such as `CODEX_REMOTE_CONTACT_QQ_ENHANCER_MODULE` and `CODEX_REMOTE_CONTACT_UNIFIED_MEMORY_MODULE`.\u003Cbr>环境变量指定的模块路径。 |\n| 2 | Local development folders under `src\u002F` or `modules\u002F`.\u003Cbr>主程序内部 `src\u002F` 或 `modules\u002F` 下的本地开发目录。 |\n| 3 | Sibling packages such as `..\u002Fqq-enhancer\u002F` and `..\u002Funified-memory\u002F`.\u003Cbr>同级目录中的 `..\u002Fqq-enhancer\u002F` 和 `..\u002Funified-memory\u002F`。 |\n| 4 | Built-in no-op fallbacks.\u003Cbr>内置空实现降级。 |\n\nThis means a clean download of `codexremotecontact` can start without QQ Enhancer or Unified Memory.\n\n这意味着只下载 `codexremotecontact` 也可以启动，不需要强制安装 QQ 增强或统一记忆。\n\n---\n\n## Requirements \u002F 安装要求\n\n| Requirement \u002F 要求 | Notes \u002F 说明 |\n| :--- | :--- |\n| macOS 14 Sonoma or later | Tested on macOS 15.7. macOS 14 is expected to work.\u003Cbr>建议 macOS 14 Sonoma 或更高版本；已在 macOS 15.7 上验证，低一个大版本预计可用。 |\n| Node.js 20+ | Used to run the hub. \u002F 用于运行 Hub。 |\n| 3GB+ free memory | Recommended when Codex CLI, browser views, QQ bridge, and the hub run together.\u003Cbr>建议至少 3GB 可用内存，尤其是同时运行 Codex CLI、网页控制台、QQ 桥接器和 Hub 时。 |\n| OpenAI Codex CLI or Codex.app bundled CLI | Used for reply generation and remote execution. \u002F 用于生成回复和远程执行。 |\n| LLBot Desktop or OneBot-compatible bridge | Required only for QQ. \u002F 仅 QQ 通道需要。 |\n| Messages app signed in | Required only for iMessage. \u002F 仅 iMessage 通道需要。 |\n| Shadowrocket | Required for proxy connects. \u002F 代理连接至OpenAI服务器需要。 |\n\nInstall the basic dependency:\n\n安装基础依赖：\n\n```bash\nbrew install node\n```\n\nOptional dependencies:\n\n可选依赖：\n\n```bash\nbrew install brightness\nxcode-select --install\n```\n\n---\n\n## Deployment Guide \u002F 部署教程\n\n### 1. Place the project \u002F 放置项目\n\nPut the source folder somewhere stable. Avoid Downloads for long-running deployments.\n\n把源码放在长期稳定的位置。准备常驻运行时，不建议放在 Downloads。\n\n```bash\nPROJECT_DIR=\"$HOME\u002Fcodexremotecontact\"\ncd \"$PROJECT_DIR\"\n```\n\nIf macOS quarantines the downloaded zip package:\n\n如果 macOS 隔离了下载的 zip 包：\n\n```bash\nxattr -dr com.apple.quarantine \"$PROJECT_DIR\"\n```\n\n### 2. Configure settings \u002F 配置设置\n\nEdit:\n\n编辑：\n\n```bash\nopen -e \"$PROJECT_DIR\u002Fdata\u002Fsettings.json\"\n```\n\nMinimal example:\n\n最小配置示例：\n\n```json\n{\n  \"version\": 1,\n  \"updatedAt\": null,\n  \"qq\": {\n    \"allowedGroups\": [\"QQ group id\"],\n    \"ownerUserIds\": [\"administrator QQ id\"],\n    \"bannedUserIds\": [],\n    \"enhancer\": {\n      \"enabled\": false\n    },\n    \"proactive\": {\n      \"enabled\": false,\n      \"minIntervalMs\": 180000\n    }\n  },\n  \"imessage\": {\n    \"trustedHandles\": [\"trusted phone number or email\"],\n    \"replyHandle\": \"iMessage account used for replies\"\n  },\n  \"remoteExecution\": {\n    \"model\": \"gpt-5.4\",\n    \"reasoningEffort\": \"medium\",\n    \"skill\": \"\"\n  },\n  \"branding\": {\n    \"assistantName\": \"assistant\",\n    \"ownerLabel\": \"owner\",\n    \"assistantMentions\": [\"@assistant\"]\n  }\n}\n```\n\nPut deployment-specific assistant voice in an external profile file:\n\n可以把自己的助手语气写进外部 profile 文件：\n\n```bash\nexport CODEX_REMOTE_CONTACT_ASSISTANT_PROFILE_PATH=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fassistant-profile.md\"\n```\n\n### 3. Grant macOS permissions \u002F 授予 macOS 权限\n\nGrant permissions to the process that actually runs the hub. For Terminal deployment this is usually `Terminal`, `iTerm`, or `node`; for app deployment it is the compiled client or launcher.\n\n权限需要给到实际运行 Hub 的进程。终端运行时通常是 `Terminal`、`iTerm` 或 `node`；App 运行时则是编译后的客户端或启动器。\n\n| Permission \u002F 权限 | Required for \u002F 用途 |\n| :--- | :--- |\n| Full Disk Access \u002F 完全磁盘访问 | iMessage database and Shadowrocket configuration. \u002F 读取 iMessage 数据库和 Shadowrocket 配置。 |\n| Automation \u002F 自动化 | AppleScript control of Messages, System Events, Shadowrocket, and other apps. \u002F 通过 AppleScript 控制“信息”、System Events、Shadowrocket 等 App。 |\n| Accessibility \u002F 辅助功能 | GUI operations in remote execution mode. \u002F 远程执行模式操作 GUI。 |\n| Screen Recording \u002F 屏幕录制 | Screenshots or screen inspection in remote execution mode. \u002F 远程执行模式截图或看屏幕。 |\n\n### 4. Prepare iMessage \u002F 准备 iMessage\n\nSign in to Messages on the Mac and make sure `replyHandle` can send iMessages to the configured `trustedHandles`.\n\n在 Mac 的“信息”App 登录账号，并确认 `replyHandle` 能向 `trustedHandles` 发送 iMessage。\n\n### 5. Prepare QQ \u002F OneBot \u002F 准备 QQ 与 OneBot\n\nInstall and launch LLBot Desktop or another OneBot-compatible bridge separately. The default API base is:\n\n单独安装并启动 LLBot Desktop 或其他 OneBot 兼容桥接器。默认 API 地址：\n\n```text\nhttp:\u002F\u002F127.0.0.1:3000\n```\n\nOverride if needed:\n\n如需覆盖：\n\n```bash\nexport ONEBOT_API_BASE=\"http:\u002F\u002F127.0.0.1:3000\"\n```\n\n### 6. Start the hub \u002F 启动 Hub\n\nDevelopment mode:\n\n开发模式：\n\n```bash\ncd \"$PROJECT_DIR\"\nnpm start\n```\n\nOpen the web console:\n\n打开 Web 控制台：\n\n```text\nhttp:\u002F\u002Flocalhost:3789\n```\n\nHealth check:\n\n健康检查：\n\n```bash\ncurl http:\u002F\u002Flocalhost:3789\u002Fapi\u002Fstate\n```\n\n### 7. Run with launchd \u002F 使用 launchd 常驻运行\n\n```bash\n\"$PROJECT_DIR\u002Fmodules\u002Finstall-launchd-plist.command\"\n\"$PROJECT_DIR\u002Fmodules\u002Fchat-hub-start.command\"\n```\n\nStop:\n\n停止：\n\n```bash\n\"$PROJECT_DIR\u002Fmodules\u002Fstop-chat-hub.command\"\n```\n\nLogs:\n\n日志：\n\n```text\n$PROJECT_DIR\u002Fruntime\u002Flogs\u002Fchat-hub.log\n$PROJECT_DIR\u002Fruntime\u002Flogs\u002Fchat-hub.err.log\n```\n\n### 8. Optional client and launcher \u002F 可选客户端与启动器\n\nBuild them locally if you want to use the macOS client or launcher.\n\n如果需要 macOS 客户端或启动器，请在本机自行构建。\n\n```bash\n\"$PROJECT_DIR\u002Fmodules\u002Fmac-client\u002Fscript\u002Fbuild_and_run.sh\" --build-only\n\"$PROJECT_DIR\u002Fmodules\u002Fmacos-launcher\u002Fbuild-launcher.command\"\n\"$PROJECT_DIR\u002Fmodules\u002Fstart-all.command\"\n```\n\n`start-all.command` starts the hub and opens the compiled client if available. It does not start LLBot.\n\n`start-all.command` 会启动 Hub 并打开已构建的客户端，但不会自动启动 LLBot。\n\n---\n\n## Optional Packages \u002F 可选升级包\n\n### QQ Enhancer\n\n```text\nProjects\u002F\n  codexremotecontact\u002F\n  qq-enhancer\u002F\n```\n\nEnable in `data\u002Fsettings.json`:\n\n在 `data\u002Fsettings.json` 中启用：\n\n```json\n{\n  \"qq\": {\n    \"enhancer\": {\n      \"enabled\": true\n    },\n    \"proactive\": {\n      \"enabled\": true,\n      \"minIntervalMs\": 180000\n    }\n  }\n}\n```\n\nManual module path:\n\n手动指定模块：\n\n```bash\nexport CODEX_REMOTE_CONTACT_QQ_ENHANCER_MODULE=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fqq-enhancer\u002Fsrc\u002Fqq-enhancer\u002Findex.js\"\n```\n\n### Unified Memory\n\n```text\nProjects\u002F\n  codexremotecontact\u002F\n  unified-memory\u002F\n```\n\nCustom data paths:\n\n自定义数据路径：\n\n```bash\nexport UNIFIED_MEMORY_PATH=\"\u002Fabsolute\u002Fpath\u002Fto\u002Funified-memory.json\"\nexport UNIFIED_MEMORY_SETTINGS_PATH=\"\u002Fabsolute\u002Fpath\u002Fto\u002Fsettings.json\"\n```\n\nManual module path:\n\n手动指定模块：\n\n```bash\nexport CODEX_REMOTE_CONTACT_UNIFIED_MEMORY_MODULE=\"\u002Fabsolute\u002Fpath\u002Fto\u002Funified-memory\u002Fsrc\u002Funified-memory\u002Findex.js\"\n```\n\n---\n\n## Common Commands \u002F 常用指令\n\n```text\n\u002F状态\n\u002F维护\n\u002F开启QQ\n\u002F关闭QQ\n\u002F开启iMessage\n\u002F关闭iMessage\n\u002F清空QQ记忆\n\u002F清除记忆\n\u002F白名单\n\u002F加群 群号\n\u002F删群 群号\n\u002F联网开\n\u002F联网关\n\u002F代理状态\n\u002F代理开\n\u002F代理关\n\u002F当前节点\n\u002F节点列表\n\u002F入口测速 关键词\n\u002F节点检查\n\u002F切换节点 目标\n\u002F关闭背光\n\u002F恢复背光\n\u002F远程执行\n\u002F确认\n\u002F取消\n\u002F帮助\n```\n\n`\u002F切换节点` and `\u002F远程执行` require confirmation with `\u002F确认` or `\u002F取消`.\n\n`\u002F切换节点` 和 `\u002F远程执行` 需要使用 `\u002F确认` 或 `\u002F取消` 二次确认。\n\n---\n\n## Environment Variables \u002F 环境变量\n\n```bash\nONEBOT_API_BASE=http:\u002F\u002F127.0.0.1:3000\nCODEX_CLI_PATH=\u002FApplications\u002FCodex.app\u002FContents\u002FResources\u002Fcodex\n\nCODEX_REMOTE_CONTACT_CODEX_MODEL=gpt-5.4-mini\nCODEX_REMOTE_CONTACT_REASONING_EFFORT=low\n\nCODEX_REMOTE_CONTACT_IMESSAGE_CODEX_MODEL=gpt-5.4\nCODEX_REMOTE_CONTACT_IMESSAGE_REASONING_EFFORT=medium\nCODEX_REMOTE_CONTACT_IMESSAGE_MEMORY_LIMIT=120\n\nCODEX_REMOTE_CONTACT_QQ_MEMORY_LIMIT=10\nCODEX_REMOTE_CONTACT_QQ_GROUP_MEMORY_LIMIT=30\nCODEX_REMOTE_CONTACT_QQ_WEB_LOOKUP=1\nCODEX_REMOTE_CONTACT_QQ_WEB_TIMEOUT_MS=7000\n\nCODEX_REMOTE_CONTACT_REMOTE_EXECUTION_MODEL=gpt-5.4\nCODEX_REMOTE_CONTACT_REMOTE_EXECUTION_REASONING_EFFORT=medium\nCODEX_REMOTE_CONTACT_REMOTE_EXECUTION_MEMORY_LIMIT=160\nCODEX_REMOTE_CONTACT_REMOTE_EXECUTION_IDLE_TTL_MS=900000\nCODEX_REMOTE_CONTACT_REMOTE_EXECUTION_SKILL=\n\nCODEX_REMOTE_CONTACT_SKILL_PATHS=custom-name=\u002Fabsolute\u002Fpath\u002Fto\u002FSKILL.md\nCODEX_REMOTE_CONTACT_ASSISTANT_PROFILE_PATH=\u002Fabsolute\u002Fpath\u002Fto\u002Fassistant-profile.md\nCODEX_REMOTE_CONTACT_QQ_ENHANCER_MODULE=\u002Fabsolute\u002Fpath\u002Fto\u002Fqq-enhancer\u002Fsrc\u002Fqq-enhancer\u002Findex.js\nCODEX_REMOTE_CONTACT_UNIFIED_MEMORY_MODULE=\u002Fabsolute\u002Fpath\u002Fto\u002Funified-memory\u002Fsrc\u002Funified-memory\u002Findex.js\n```\n\n---\n\n## Troubleshooting \u002F 故障排查\n\n| Problem \u002F 问题 | Check \u002F 排查 |\n| :--- | :--- |\n| Port already in use \u002F 端口占用 | `lsof -nP -iTCP:3789 -sTCP:LISTEN` |\n| iMessage cannot be read \u002F 无法读取 iMessage | Grant Full Disk Access and restart the hub.\u003Cbr>授予完全磁盘访问权限并重启 Hub。 |\n| Messages cannot send replies \u002F 无法发送信息回复 | Grant Automation permission for Messages.\u003Cbr>授予“信息”自动化权限。 |\n| QQ does not respond \u002F QQ 不响应 | Check LLBot, `ONEBOT_API_BASE`, allowed groups, QQ switch, and ban list.\u003Cbr>检查 LLBot、`ONEBOT_API_BASE`、白名单群、QQ 总开关和 ban 列表。 |\n| Remote execution GUI operations fail \u002F 远程执行 GUI 操作失败 | Grant Accessibility and Screen Recording to the running process and Codex.\u003Cbr>给运行进程和 Codex 授予辅助功能、屏幕录制权限。 |\n| Shadowrocket commands fail \u002F Shadowrocket 指令失败 | Verify Shadowrocket is installed and grant Full Disk Access to the hub.\u003Cbr>确认已安装 Shadowrocket，并给 Hub 完全磁盘访问权限。 |\n\n---\n\n## Notice \u002F 注意事项\n\nAdd your own configuration through `data\u002Fsettings.json`, environment variables, and external profile files.\n\n部署前应在 `data\u002Fsettings.json`、环境变量和外部 profile 文件中填写自己的配置。\n\nThis is a local automation tool. Before enabling iMessage, QQ, remote execution, proxy control, or GUI control, make sure you understand the related permissions and local security impact.\n\n本项目是本机自动化工具。启用 iMessage、QQ、远程执行、代理控制或 GUI 控制前，请确认你理解对应权限和本机安全影响。\n","Codex Remote Contact 是一个面向 macOS 的本地联系中枢，集成了 iMessage、QQ\u002FOneBot、Codex CLI 与远程执行功能。其核心功能包括通过 iMessage 接收并处理多种命令，如状态查询、节点切换等；利用 Codex CLI 生成私聊回复；通过 OneBot 兼容桥接器接收 QQ 消息；以及支持 Shadowrocket 节点管理和其他系统控制脚本。此外，该项目还支持可选的增强包以提升 QQ 群聊能力和实现跨设备记忆共享。适用于需要在 macOS 上统一管理和自动化处理多个通讯渠道及系统任务的用户。",2,"2026-06-11 04:03:35","CREATED_QUERY"]