开源了一个 AI Agent 认证工具 sig 让 AI Agent 安全访问外部系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
YuanJiwei

开源了一个 AI Agent 认证工具 sig 让 AI Agent 安全访问外部系统

  •  2
     
  •   YuanJiwei Apr 21 980 views

    做 AI Agent 的都知道一个痛点 Agent 需要访问 Jira 、Slack 、Confluence 、内部 API ,但凭证怎么传?粘贴到 shell 历史里?写在 .env 里?直接丢给 Agent 的上下文窗口?每一种都是安全隐患。

    所以做了 sig ,核心思路:在网络层解决认证问题,让凭证永远不暴露给 AI Agent 。

    MITM 代理最安全的方式

    这是 sig 最核心的能力。一条命令启动本地 HTTPS 代理:

    sig proxy start # Proxy: running pid=26676 port=60702 # http_proxy=http://127.0.0.1:60702 # https_proxy=http://127.0.0.1:60702 

    原理很直接:

    1. sig 在 127.0.0.1 启动一个 MITM 代理( ECDSA P-256 CA + 按域名动态签发叶证书)
    2. AI Agent 的 Agent Skill 只需设置 HTTP_PROXY / HTTPS_PROXY,正常发 HTTPS 请求(curl, wget, python scripts)
    3. MITM 代理拦截请求,根据目标域名匹配 provider ,自动注入 Cookie / Authorization / 自定义 Header
    4. AI Agent 从头到尾不知道凭证的存在它发的是代理请求,凭证注入在网络层透明完成
     AI Agent sig proxy (127.0.0.1) Target API │ │ │ │ GET /api/myself │ │ │ (no auth headers) ──→ │ + Cookie: SESSION=xxx │ │ │ + Authorization: Bearer yyy │ │ │ ──────────────────────────→ │ │ │ │ │ ← 200 OK ────────────│ ← 200 OK ────────────────────│ 

    MITM 代理模式下,凭证只存在于代理进程内存中,AI Agent 的进程空间里根本没有凭证。

    适合场景:

    • 长期运行的 Agent 守护进程
    • 多个 Agent 共享同一份凭证(都指向同一个代理)
    • 极致安全要求凭证不能出现在任何进程的环境变量或内存中

    完整功能

    npm install -g @sigcli/cli sig init # 初始化配置 sig login https://jira.example.com # 浏览器 SSO 登录一次 # 方式一:MITM 代理(推荐,最安全) sig proxy start sig proxy trust # 信任 CA 证书 export https_proxy=http://127.0.0.1:60702 curl https://jira.example.com/rest/api/2/myself # 自动注入凭证 # 方式二:环境变量注入 sig run my-jira -- claude "把所有 P1 Bug 整理成摘要" # 方式三:直接请求 sig request https://jira.example.com/rest/api/2/myself 

    其他能力:

    • 浏览器 SSO 支持任何网站、任何登录流程,无头→可视自动切换
    • AES-256-GCM 加密存储 凭证不出现在代码仓库或 shell 历史中
    • 4 种策略 cookie 、oauth2 、api-token 、basic
    • SSH 同步 笔记本登录,sig sync push 到远程机器
    • AI Agent Skills 内置 Slack 、Outlook 、MS Teams 、V2EX 技能
    • TypeScript & Python SDK

    安全模型

    层级 机制 效果
    加密存储 AES-256-GCM 凭证文件即使被读取也无法解密
    进程隔离 sig run 环境变量注入 不出现在 shell 历史或 ps 输出
    输出脱敏 stdout/stderr 自动替换 [REDACTED] AI 上下文窗口看不到真实令牌
    零信任代理 MITM 代理在网络层注入 AI 进程内存中根本没有凭证

    一起来做

    项目刚起步,还有很多可以做的方向:更多浏览器适配器、更多 AI Agent Skills (欢迎给你常用的系统写一个)、OAuth2 PKCE 流程优化、Web UI 管理面板……

    如果你对 AI Agent 基础设施这个方向感兴趣,欢迎来一起维护。一个人走得快,一群人走得远。

    项目完全 MIT 开源,TypeScript 实现。

    GitHub: https://github.com/sigcli/sigcli 网站: https://sigcli.ai

    Issue 、PR 、讨论都欢迎: https://github.com/sigcli/sigcli

    也可以微信交流: eXVhbnNkdQ==( base64 )或者 cHlsb25wZW5n( base64)

    Star 一下也是支持 https://github.com/sigcli/sigcli

    6 replies    2026-04-22 14:37:34 +08:00
    crime1024
        1
    crime1024  
       Apr 21
    有点意思,有 GO 版本的么
    YuanJiwei
        2
    YuanJiwei  
    OP
       Apr 21
    @crime1024 你需要 Goland 的 SDK 还是想要 Golang 版本 CLI 呀,因为这个工具是 CLI ,和编程语言无关的
    gbin
        3
    gbin  
       Apr 21 via iPhone
    @crime1024 感谢关注,这个主要是个人开发者使用,如果你需要 go sdk 可以提个 issue
    gbin
        4
    gbin  
       Apr 21 via iPhone
    感谢 jiwei ,作为这个作品的开发者之一,也谈谈我对 sigcli 的看法。

    过去,人使用浏览器登录系统然后操控系统,浏览器负责管理用户身份和提供用户操作接口。
    未来,所有系统提供 Agent 操作接口,Agent 接管身份管理和系统操控。
    在那个“未来”到来之前,sig 就是这个桥梁,帮 Agent 管理用户身份,打通 Agent 和系统的连接,让 AI 更懂你的系统。

    还是那句话:Sign in your way, AI works on your behalf
    beyondstars
        5
    beyondstars  
       Apr 22
    你相当于把 surge / charles proxy 的 mitm 功能单独拿出来给 ai agent 做了特化。
    gbin
        6
    gbin  
       Apr 22
    @beyondstars 我们做了比这个多一些,我们相当于把浏览器的用户身份管理能力提取出来了,然后 AI Agent 可以通过 Sigcli 代表用户操控任意系统。
    About     Help     Advertise     Blog     API     FAQ     Solana     2512 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 03:54 PVG 11:54 LAX 20:54 JFK 23:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86