AKSK Manager
在 Codex「更多工具」中管理 AK/SK、API Token 和数据库连接配置,让 Codex 通过引用执行本地命令。 没有主密码、Passkey 或自建加密文件库。生产数据仅使用可通过 iCloud 同步的 Apple 钥匙串条目。
当前状态
界面、Swift 核心、Python MCP、安装与打包脚本已实现。
本机签名和真实钥匙串读写、引用执行已验证;双机同步仍待第二台 Mac 独立验收。
详见 验收记录。docs/ui-*.png 为合成数据的界面测试截图,不是实际密钥库。
使用
从 Codex「更多工具 → AKSK Manager」打开界面。录入密钥后,可以在对话中要求:
用“生产账单只读”的 AWS 凭据运行
aws sts get-caller-identity。
Codex 先查找条目 ID,再调用 run_with_secrets。密钥由本地组件注入命令环境,不通过模型可见的工具结果返回。
需要增加或更新密钥时,在界面中录入,不要粘贴到聊天中。回收站中的密钥不能用于启动新任务。
执行中的任务已取得凭据,移入回收站不会撤销正在进行的任务或云厂商上的密钥。
界面可以显式显示明文或复制到系统剪贴板;明文显示 30 秒后自动隐藏。剪贴板由系统管理,不自动清空。 元数据(包括备注)可以供 Codex 查询,请将秘密值填写在凭据字段。
添加时选择「数据库连接」,填写数据库类型、主机,以及可选的端口、数据库名、用户名、密码和 TLS 模式。
支持 PostgreSQL、MySQL、SQL Server、Oracle、MongoDB、Redis 等连接配置的保存;不会自动连接或安装数据库客户端。
连接字段全部保存在钥匙串中,列表和 Codex 查询只返回字段名称;详情默认遮盖,编辑默认保留现有连接配置。
Codex 可通过字段引用注入客户端支持的环境变量,例如 PostgreSQL 的 PGHOST、PGUSER、PGPASSWORD。
实际连接和查询需要本机已有相应客户端及网络访问权限;保存成功不代表连接测试通过。
日常开发
在仓库根目录运行:
./scripts/preview.sh
打开 **http://127.0.0.1:5173/preview.html**。预览直接加载正式 React 界面,保存代码后自动更新,
不需要签名、Python 服务或重新安装插件。首次启动会按锁文件安装前端依赖;后续依赖不变时复用。
端口被占用时明确报错,可用 ./scripts/preview.sh --port 5180 指定其他端口。按 Ctrl+C 停止。
预览包含 AK/SK、API Token、数据库连接三类无效演示凭据,支持搜索、新增、编辑、显示、复制和回收站操作。
顶部可以切换桌面/平板/手机尺寸、浅色/深色主题,以及空列表、组件不可用、编辑冲突状态。
「重置演示数据」恢复初始列表。数据只在当前页面内存中,整页刷新会重置;请勿输入真实密钥。
这里的保存与同步提示属于模拟界面,不会读写真实钥匙串,也不会执行本地命令。
预览宿主与界面测试共用 frontend/preview/host.ts,不编入发布用的单文件 HTML。
效果确认后,一条命令更新本机插件:
./scripts/update.sh
依次安装锁定依赖、运行静态检查及后端/界面测试、构建前端、更新 MCP 契约,
然后检查签名组件、验证真实服务、安装本地插件、验证已安装版本,最后输出 ZIP 和 SHA-256。
任一步失败都会停止后续步骤;不会提交或推送 Git。
首次运行建立签名构建缓存;之后原生源码、构建脚本、团队及签名组件内容未变化时复用组件,
无需每次重新签名。重建后自动进行合成凭据的真实钥匙串测试,并清理测试条目。
依赖缓存与构建指纹存放在忽略的 .build/dev/ 下。
./scripts/update.sh --check # 仅测试与前端构建,不签名、不安装
./scripts/update.sh --native # 强制重建签名组件,例如更新描述文件
预览要求 Node 22.12+、npm/npx、Python 3(仅用于启动脚本)。完整更新另外要求 macOS 14+、Xcode、
有效 Apple 开发签名与 Mac 配置描述文件、uv、Codex CLI。
界面测试优先使用已安装的 Google Chrome;否则安装 Playwright Chromium。
可通过 PLAYWRIGHT_CHANNEL 指定已有的浏览器通道。
首次安装与签名
先在 Apple Developer 账户 接受尚未处理的开发者协议,
并在 Xcode → Settings → Accounts 确认开发团队可用,然后执行 ./scripts/update.sh。
运行时由 uv 按 uv.lock 安装 Python 3.12 和依赖;发布插件不依赖前端开发服务器。
当前个人构建默认团队为 XHD2S8GC8Q。如有意构建另一套独立密钥库,可设置 AKSK_DEVELOPMENT_TEAM;
改变团队或钥匙串访问组会改变可访问的条目集合,不是原密钥库的升级方式。
build-native.sh 通过 Xcode 自动申请正确的 Mac 配置描述文件,并构建 arm64/x86_64 通用组件。
不要使用 iOS 描述文件、临时签名或关闭系统签名校验来代替。
安装脚本从允许的文件列表生成带内容版本标记的独立目录,再使用 Codex 支持的本地 marketplace 流程,排除开发缓存。缺少签名组件时仍可安装诊断界面, 但密钥读写和执行会明确报错,不会退回明文或测试存储。 如果当前聊天尚未加载新 MCP 服务,在 Codex 中新开聊天后验证。
另一台 Mac 与升级
- 登录同一 Apple 账户,在系统设置中开启 iCloud 的“密码与钥匙串”同步。
- 安装同一团队、同一应用标识和访问组签名的组件及插件。
- 开发签名依赖设备登记和配置描述文件的设备范围、有效期。若第二台 Mac 不在范围内,需先登记设备并重新生成描述文件;它不是可任意分发的公证安装包。
- 打开插件并刷新。显示的是本机读到的状态,不能据此认定其他设备已收到。
密钥保存与删除由系统同步,插件不声称知道完整同步进度。不要在两台离线 Mac 上同时编辑同一条目; 系统可能选定其中一份更新,首版没有跨设备冲突历史或合并界面。 本机多聊天并发编辑用文件锁和修订检查避免已知的过期表单覆盖。
升级需保留应用 ID com.boreas.aksk-manager.helper、钥匙串访问组后缀 com.boreas.aksk-manager、
服务名称和签名团队。重新构建后重新运行安装脚本;新开聊天使新服务版本生效。卸载插件不会主动清除钥匙串。
测试与打包
uv run pytest -q
uv run ruff check src tests scripts
cd frontend
npx --yes npm@10 run build
# 使用已安装的 Chrome;或安装 Playwright Chromium 后省略环境变量
PLAYWRIGHT_CHANNEL=chrome npx --yes npm@10 test
cd ..
uv run python scripts/export-contract.py
uv run python scripts/package.py
Swift 逻辑测试将 TESTING 编译到独立可执行文件,只使用合成数据和内存存储。
这不证明生产钥匙串授权或 iCloud 同步。smoke-keychain.py 才会通过正式组件创建、使用并清理一条合成测试凭据。
跨设备验收步骤见 verification.md。
有经过验证的签名组件时输出完整插件包;否则输出明确带 -source 后缀的源码包。
包中不含私钥、开发账户令牌、真实密钥、测试存储或依赖缓存。包含签名 app 时必须保留其内嵌配置描述文件。
访问边界
- iCloud 钥匙串保护存储,插件不读取 Apple 账户密码,不另建秘密缓存。
- 解锁且系统授权可用时,不增加命令白名单或逐次确认;Codex 自身的授权规则仍然适用。
- 子进程能够接触注入的密钥,可能写文件或访问网络;这不是对任意程序的防泄露沙箱。
- 已知秘密原文在输出中被遮盖;编码、切分、变换后的内容不能保证被识别。
- 任务输出只保留在本次 MCP 会话内存,最多保留 64 个任务;每项 stdout/stderr 各最多 512 KiB。
- 默认任务超时 600 秒,可设 0.1–3600 秒;最多同时运行 8 个任务。正常关闭会话会终止本组件仍管理的任务。
- 发布插件的本地组件通讯通过私有 stdin/stdout 管道;没有 HTTP 监听端口、云端代理或后台上传。开发预览只在 127.0.0.1 提供前端文件与模拟宿主。
接口说明见 API 文档,生成的 MCP 契约见 mcp-contract.json。