内容
<p align="center">
<img src="assets/icons/s-gw-128.png" alt="s-gw" width="96" height="96">
</p>
<h1 align="center">网关</h1>
<p align="center">
<strong>为编码代理提供本地凭证控制。</strong><br>
在本地批准有界操作。 将原始凭证与模型上下文和工具输出隔离。
</p>
<p align="center">
<a href="https://github.com/sgateway/s-gw/actions/workflows/ci.yml"><img alt="持续集成" src="https://github.com/sgateway/s-gw/actions/workflows/ci.yml/badge.svg"></a>
<a href="https://www.npmjs.com/package/@s-gw/s-gw"><img alt="npm 版本" src="https://img.shields.io/npm/v/%40s-gw%2Fs-gw"></a>
<a href="LICENSE"><img alt="许可证:Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-2ea44f"></a>
<img alt="Node.js 20+" src="https://img.shields.io/badge/Node.js-20%2B-43853d">
<a href="https://s-gw.com"><img alt="官网:s-gw.com" src="https://img.shields.io/badge/website-s--gw.com-22c55e"></a>
<img alt="项目状态:预览" src="https://img.shields.io/badge/status-preview-f59e0b">
</p>
<p align="center">
<a href="https://s-gw.com">演示</a> ·
<a href="#快速开始">快速开始</a> ·
<a href="docs/README.md">文档</a> ·
<a href="SECURITY.md">安全</a> ·
<a href="CONTRIBUTING.md">贡献</a>
</p>
[](https://s-gw.com)
网关是编码代理和凭证之间的本地网关。 代理使用类型化的句柄和作用域操作请求。 您在本地批准请求,网关在受限的本地进程中解析凭证,代理获得净化的输出而不是原始值。
> [!IMPORTANT]
> 网关是一个早期预览版。 存储格式和接口可能会更改,Windows 支持仍处于实验阶段,项目尚未完成独立的安全审计。 暂时不要将其视为终端安全或强化企业机密平台的替代品。
## 功能
| 管理 | 批准 | 执行 | 审计 |
| --- | --- | --- | --- |
| 将机密转换为类型化的本地句柄,供代理安全引用。 | 在授予访问权限之前,审查请求代理、句柄、命令、环境绑定、工作目录和目标。 | 仅在同一台机器上批准的子进程中注入凭证。 | 记录请求、批准、执行、策略和目标证据,而不存储返回的原始机密。 |
## 团队使用原因
- **本地保管:**原始值存储在 macOS 密钥链、Windows 凭证管理器、1Password 或加密的本地账本中。
- **作用域访问:**授予绑定到代理、句柄、命令、环境变量、工作目录、目标、批准模式和可选时间窗口。
- **有用的句柄:**代理可以使用稳定的句柄名称请求实际工作,而不是查看密钥、密码、令牌或 SSH 材料。
- **输出净化:**在输出返回给代理之前扫描,确保检测到的凭证值被句柄替换。
- **代理感知设置:**Codex、Claude Code、Cursor、OpenCode、Gemini CLI、GitHub Copilot、VS Code 等 MCP 客户端获得特定于配置文件的配置。
- **本地操作员界面:**macOS 应用程序、菜单助手、CLI 和 Web 控制台显示批准、凭证库存、策略、使用流程、活动和审计历史。
## 演示
公开演示:[s-gw.com](https://s-gw.com)。 演示突出显示本地控制台、信任循环、批准流程、支持的代理目录和使用地图。

## 工作原理
```mermaid
flowchart LR
A["编码代理"] -->|"句柄 + 操作请求"| G["网关本地网关"]
G --> U["本地批准"]
U --> R["受限运行者"]
K[("密钥链 / 凭证管理器 / 加密存储")] --> R
R -->|"净化输出"| G
G --> A
```
代理永远不需要解锁口令或原始凭证。 批准范围限定为请求的操作,而不是授予对存储的一般访问权限。
## 核心界面
| 界面 | 目的 |
| --- | --- |
| `s-gw` CLI | 设置、凭证注册、批准、策略、代理代码片段、防护模式和诊断。 |
| `s-gw-mcp` | 面向代理的句柄发现和请求创建的标准输入输出 MCP 服务器。 |
| 原生 macOS 应用程序 | 批准队列、凭证库存、策略规则、使用流程、活动和审计审查。 |
| 菜单栏助手 | 快速查看待处理批准和本地守护进程状态。 |
| 本地 Web 控制台 | 可通过浏览器访问的备用 UI,绑定到 `127.0.0.1`。 |
| 防护模式 | 启动代理,替换类似凭证的环境值,替换为网关句柄。 |
## 快速开始
要求:Node.js 20 或更新版本。
```bash
npm install -g @s-gw/s-gw
s-gw setup
s-gw status
```
要从源代码构建,请使用稳定的 Rust 工具链。 构建原生 macOS 界面还需要 Swift 工具链。
```bash
git clone https://github.com/sgateway/s-gw.git
cd s-gw
npm ci
npm run build
npm link
s-gw setup
s-gw status
```
`s-gw setup` 生成本地解锁材料,将其存储在操作系统凭证存储中,初始化加密账本,并启动当前平台上可用的本地 UI 界面。
在不将值放入聊天或进程参数的情况下,从终端添加凭证:
```bash
printf '%s' "$MY_API_TOKEN" | s-gw secret add-keychain \
--name demo-token \
--type api-token \
--value-stdin \
--inject-env API_TOKEN \
--allow-command "$(command -v printenv)"
```
然后检查非机密句柄元数据:
```bash
s-gw secret list
```
[端到端信任循环](docs/quickstart.md) 遍历了一次性请求、本地批准、执行和输出净化,而不触及实际凭证。
## 代理集成
列出已知的代理配置文件并为一个客户端渲染配置:
```bash
s-gw agent list
s-gw agent mcp-snippet codex
s-gw agent mcp-snippet claude-code
s-gw agent mcp-snippet opencode
```
对于 CLI 代理,防护模式可以在代理启动前用网关句柄替换类似凭证的启动环境值:
```bash
s-gw run codex --dry-run -- -v
s-gw run codex -- --ask-for-approval never
```
MCP 注册不会拦截每个提示、文件读取、shell 或环境变量。 请参阅 [代理集成](docs/integrations.md) 和 [代理配置文件矩阵](docs/agents.md),了解支持的路径和当前限制。
## 示例请求流程
1. 代理看到 `s-gw:credential:prod-readonly` 并请求运行 `aws sts get-caller-identity`。
2. 网关创建具有代理名称、命令、句柄、环境绑定、工作目录、目标和策略结果的待批请求。
3. 您批准一次,针对登录会话或拒绝。
4. 网关启动具有注入凭证的批准本地进程到请求的环境变量。
5. 网关在输出返回给代理之前扫描输出。
模型可以在不接收原始访问密钥的情况下完成任务。
## 平台状态
| 平台 | 状态 | 凭证存储 | 用户界面 |
| --- | --- | --- | --- |
| macOS 14+ | 主要开发平台 | 密钥链 | 原生应用程序、菜单助手、本地 Web 控制台 |
| Windows 10/11 | 预览 | 凭证管理器 | PowerShell 客户端、托盘助手、本地 Web 控制台 |
| Linux | 实验性 CLI | 环境提供的解锁材料 | 本地 Web 控制台 |
预览安装程序可从 [GitHub Releases](https://github.com/sgateway/s-gw/releases) 获取。 macOS DMG 是临时签名的并且是未 notarized 的,Windows 包是未签名的预览软件。 使用 `npm run build:installers` 在本地构建相同的工件。
## 安全模型
网关旨在减少编码代理对凭证的意外暴露。 它不保护免受受损的操作系统帐户、恶意批准的可执行文件、屏幕捕获、内核级访问或机密的每个转换派生式的侵害。
在依赖网关进行敏感工作流程之前,请阅读 [威胁模型](docs/threat-model.md)。 通过 [GitHub 私有漏洞报告](SECURITY.md) 而不是公共问题报告疑似漏洞。
## 项目状态
- 公共源代码分发是预览质量的。
- macOS 是主要的开发和测试平台。
- Windows 凭证管理器支持存在但仍需要更广泛的原生 QA。
- Linux 目前依赖于环境提供的解锁材料。
- 桌面预览下载是未签名的,旨在进行评估。
- 仓库已准备好进行开源协作,但安全敏感的更改应附带重点测试和威胁模型更新,以防行为更改。
## 文档
- [文档索引](docs/README.md)
- [快速入门和信任循环演示](docs/quickstart.md)
- [架构](docs/architecture.md)
- [威胁模型](docs/threat-model.md)
- [代理集成](docs/integrations.md)
- [凭证存储和 1Password](docs/keychain.md)
- [部署和打包](docs/deployment.md)
- [第三方资产和许可证](docs/ui/THIRD_PARTY_NOTICES.md)
## 贡献
欢迎提出问题和重点拉取请求。 从 [CONTRIBUTING.md](CONTRIBUTING.md) 开始,对于可能暴露凭证或绕过批准的内容,请使用 [SECURITY.md](SECURITY.md)。
## 许可证
Apache-2.0。 请参阅 [LICENSE](LICENSE) 和 [NOTICE](NOTICE)。 第三方名称和艺术作品仍归其各自所有者所有,并在 [TRADEMARKS.md](TRADEMARKS.md) 和 [第三方通知](docs/ui/THIRD_PARTY_NOTICES.md) 中记录。