treg shell 模式深度解析:基于 PATH shim 的团队 CLI 透明凭据注入
后端API网关MCP 服务dsh-plugin【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址https://gitcode.com/GitHub_Trending/treg/treg点击查看免费下载导读treg shellShell mode是 treg 项目提供的一种透明 CLI 拦截机制打开一个子 shell 后团队成员可以像本地安装一样直接运行团队注册过的 CLIstripe、gh、neonctl等无需键入任何密钥、也无需手动执行treg run。本文以 docs/context/interface/shell.md 为骨架结合 src/treg/shell.py、src/treg/cli.py 及 tests/test_shell.py 源码级证据完整讲解其 PATH shim 原理、shim 脚本契约、会话生命周期、本地/服务端双路由--server-for、--proxy拦截叠加以及它为什么刻意停留在treg run的薄封装这一安全姿态。读完你将能理解并正确使用treg shell start/stop的全部参数并清楚它与treg command、treg serve这两扇前门之间的关系。核心机制PATH 上的影子 CLI而不是 shell 钩子treg shell的拦截方式有一个关键设计决策它不是 preexec/DEBUG trap 之类的 shell 钩子而是在PATH上放置影子 CLIshim。从源码看src/treg/shell.py 中start_session在$XDG_RUNTIME_DIR或$TMPDIR下创建私有会话目录session_base_dir()优先选择 Linux 的XDG_RUNTIME_DIR、macOS 的TMPDIR两者都是 0700 级且不被全局列举tempfile.mkdtemp(prefixtreg-shell-)创建后还会显式chmod 0o700为每个注册 CLI 在会话目录的bin/下写入一个 shim见下节以该目录排在PATH首位的方式启动$SHELL。这样这个命令是否注册过的判定就交给 shell 自身的名字解析免费完成输入stripe时最先命中我们的 shim从而被路由进 treg而ls、git没有对应 shim正常解析到系统真实二进制。整个过程没有任何 shell 钩子参与。shim 脚本契约shim_script/write_shims每个 shim 的实际内容shim_script生成形如#!/bin/sh # treg shell shim → tool stripe-tool (runs locally) # Generated by treg shell start; do not edit — it vanishes when the shell exits. exec env PATH$TREG_SHELL_REALPATH /path/to/treg run stripe-tool -- $这里有两个精妙之处对应测试 tests/test_shell.py 中test_shim_execs_treg_run_with_clean_path_and_verbatim_args验证的契约干净的$TREG_SHELL_REALPATH防止自递归它是 shim 目录被前置之前捕获的原始 PATH。treg run内部用shutil.which(bin)解析真实二进制时走的是这条干净 PATH因此永远不会解析到 shim 自身同时真实 CLI 得以正常运行。字面量--隔离参数--将 treg 自身的参数解析与用户参数隔离开_run_local随后剥离它最终真实 CLI 收到的正是用户原样输入的内容测试中验证了[run, stripe-tool, --, balance, --live]的精确 argv 透传退出码也原样返回。此外shim 内嵌了一段cobra__complete*旁路当第一个参数以__complete开头时gh及大多数 Go CLI 的 shell 补全调用直接exec真实二进制不经过 tregsrc/treg/shell.py 中shim_script的bypass分支case $1 in __complete*) exec /opt/homebrew/bin/gh $ ;; esac原因是补全属于本地 shell 元数据、不需要凭据若强行路由进 treg会逐键刷爆审计日志并消耗每日额度。测试 tests/test_shell.py 中test_completion_call_bypasses_treg_real_bin_runs通过真实 shell 验证gh __complete sta只命中真实二进制gh repo list才走treg run。哪些 CLI 会被影子化plan_shimsplan_shims(tools, server_for)src/treg/shell.py决定拦截清单保留每个带有cli.bin且cli.enabled为真的工具——cli.enabled是拥有者的本地运行显式 opt-in未启用的工具即使强行treg run也会 403为每个 shim 分配路由local或server见下文--server-for返回排序后的(bin, tool_name, route)条目列表与警告列表若两个工具争抢同一个 bin先到者胜bin 不是普通文件名含路径分隔符、.、..则跳过——shim 是我们要写入的文件绝不允许 bin 名逃出 shim 目录src/treg/shell.py 中os.sep/os.altsep检查。对应测试test_plan_shims_filters_and_sorts覆盖了未启用、无 bin、无 cli 配置、路径逃逸、重复 bin 等全部过滤分支。会话生命周期环境变量、信号与 teardownstart_session会向子 shell 发布四个环境变量src/treg/shell.py 顶部常量变量含义TREG_SHELL标记存在活跃会话阻止嵌套会话cmd_shell_start检测到它会直接拒绝TREG_SHELL_DIR私有会话目录shim 位于dir/binTREG_SHELL_REALPATH干净的原始 PATHshim 转交给treg run用TREG_SHELL_PIDtreg shell start进程 PIDtreg shell stop靠它发信号然后通过_run_subshell运行交互式子 shell退出时拆除会话目录_teardown用shutil.rmtree幂等清理——Phase 1 磁盘上没有任何凭据可擦每次调用treg run都现取 grant 且从不持久化。信号处理是正确性的关键_run_subshell父进程忽略SIGINT/SIGQUIT它们属于交互前台子进程而将SIGTERM/SIGHUP转为停止子进程。这样treg shell stop向TREG_SHELL_PID发信号和用户关闭终端SIGHUP两条路径都能回到 teardown不会留下孤儿 shell。可选的--ttl会启动一个 daemon 计时器N 分钟后自动关闭会话threading.Timer测试test_run_subshell_ttl_closes_the_session验证 1 秒计时器能终止一个要睡 30 秒的 shell。shell 适配方面_shell_argv针对 zsh写$ZDOTDIR/.zshrc与 bash--rcfile分别生成 rc 文件恢复用户原始环境、确保 shim 目录始终排在 PATH 首位并在提示符前加上(treg)标记zsh 的PROMPT、bash 的PS1。命令接线在 src/treg/cli.py 的cmd_shell_start/cmd_shell_stop进入前要求已登录treg login且TREG_SHELL未激活GET /tools拉取工具清单后交给plan_shims若既没有可运行 CLI 也未开--proxy则明确报错并提示注册入口treg upload clis或treg tool update name --local-run on。双路由--server-for与本地/服务端分层默认情况下每个被影子化的 CLI 都在本地运行treg run tool。而treg shell start --server-for stripe,render会把stripe、render路由到treg run --server——密钥完全不落在这台机器上输出流式返回。但仅限server_runnable的工具若请求的工具不支持服务端运行则回退本地并给出警告src/treg/shell.py 中plan_shims的 fallback 分支server_for既可按 bin 匹配也可按工具名匹配测试test_plan_shims_routes_server_for_runnable_tools与test_plan_shims_matches_server_for_by_tool_name分别验证。--ttl则给整个会话设下硬性时间上限。为什么服务端运行可行、而本地模式需要独立设计这取决于凭据注入方式auth_mechanism为env/argv的 CLI 可以由服务端持有密钥并注入见 docs/context/architecture/local-run.md因此server_runnable只对这两种机制成立config_fileCLI 自读~/.config与device机制只能本地运行。--proxy拦截的另一半必须强调treg shell的兄弟门treg commandcmd_with详见 docs/context/architecture/local-proxy.md对单条命令做同样的捕获且不需要子 shell——对多数人来说它才是默认入口。--proxy则用于这样一个会话团队的 CLI经 shim与裸 HTTPS 调用经代理要同时生效。两者的分工shim 捕获成员敲键盘输入的注册 CLIstripe balancetreg shell start --proxy额外捕获Agent 自行发起的 HTTPS 调用——来自一个从没听说过 treg 的脚本比如直接写api.stripe.com请求的程序。它目前是opt-in因为拦截是这套体系里第一个可能破坏 Agent 自身调用的功能证书固定型客户端会拒绝我们的 CA意外比一个显式开关更糟。实现细节cmd_shell_start→_start_local_proxysrc/treg/cli.py生成/加载机器级 CAensure_ca把 allow-list 种子直接复用为 shims 已经拉取过的工具清单——包括所有注册主机、甚至没有 CLI 的工具因此不产生第二次请求测试test_cmd_shell_start_seeds_the_allow_list_from_the_tool_listing验证 hosts 被小写化、排序、无 host 工具被跳过启动代理后交给start_session两样东西extra_env代理 URL 信任包与on_close退出时停止代理extra_env在 treg 自身变量之后应用并跳过PATH/TREG_SHELL*所以任何附加项都无法破坏名字解析或伪造嵌套会话测试test_extra_env_cannot_break_the_shims启动横幅_print_banner会列出被捕获的主机并声明其余流量原样直出——成员绝不能偶然发现自己被拦截测试test_the_banner_names_the_captured_hosts断言横幅中出现完整主机名与Every other address goes straight out--proxy-port可将代理移出默认端口18791--renew-ca强制重新生成 CA。CLI 参数一览src/treg/cli.py 解析器定义参数作用treg shell start启动 treg 子 shell--server-for a,b将指定工具路由到服务端运行密钥不上本机仅对server_runnable工具生效其余回退本地并警告--ttl MINN 分钟后自动关闭会话默认无限制--proxy同时捕获 Agent 自行发起的、发往注册 API 的 HTTPS 调用其余流量直出--proxy-port PORT--proxy监听端口默认 18791--renew-ca启动--proxy前重新生成本机 CAtreg shell stop离开 treg shell等价于exit/Ctrl-D命令同时以treg cli shell start|stop形式提供别名见 docs/context/interface/cli.md。阶段划分为什么没有内存驻留 Agent当前是Phase 1shim 直接调用treg run免费复用了完整的 local-run 链路——grant、deny、runner-proof、OAuth leaf、审计 → 计量/额度见 docs/context/architecture/local-run.md。原计划的Phase 2 内存驻留会话 Agent 被刻意放弃treg run的每次命令级专用用户隔离treg-run系统用户、sudo -u treg-run交接成员的同一 uid 无法读取另一个 uid 进程的/proc/pid/environ使每次调用结束后成员进程内不留任何凭据痕迹——这比一个长期持有 RAM 中凭据的 Agent 姿态更强。因此 shell 模式始终只是treg run之上的一层薄便捷层真正的安全保证存在于 local-run 沙箱隔离 egress 白名单 输出脱敏 deny 规则之中。这一决策在 src/treg/shell.py 模块 docstring 与_teardown注释中反复强调Phase 1 磁盘上没有任何凭据可擦treg run每次调用现取 grant、从不持久化。测试印证客户端契约被逐条锁定tests/test_shell.py 在无真实服务器、无真实厂商 CLI 的情况下用假treg与真实/bin/sh验证了本节全部核心断言shim 在干净 PATH 上以原样 argv 调用treg run tool -- …且退出码透传test_shim_execs_treg_run_with_clean_path_and_verbatim_argsserver 路由 shim 生成treg run --server tooltest_server_route_shim_execs_treg_run_server补全调用直达真实二进制test_completion_call_bypasses_treg_real_bin_runs会话 wiringshim 目录排在 PATH 首位、REALPATH干净无 shim 目录、--ttl分钟转秒、退出后会话目录被拆除test_start_session_wires_path_and_tears_downtreg shell stop在会话外报错、在会话内向控制器发SIGTERMtest_stop_signals_the_controller嵌套会话、未登录、无可运行 CLI 三种启动前置守卫test_cmd_shell_start_*。已知边界--proxy依赖cryptography编译型依赖位于[proxy]extra 而非基础安装缺库时会收到明确的安装提示pip install tools-registry[proxy]或按实际安装方式给出等价命令src/treg/cli.py 的ensure_proxy_dependency。证书固定pinning的客户端会拒绝 treg 的 CA 而单独失败当前没有按主机的永不拦截名单。Node 23 及更早版本的fetch()完全无视代理变量Node 24 才提供NODE_USE_ENV_PROXY这类调用会绕过捕获详见 docs/context/architecture/local-proxy.md。某些厂商 CLI如gh在发起任何网络请求前就自行完成认证因此仍需要treg run路径代理无法拦截。赞分享后端API网关MCP 服务dsh-plugin【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址https://gitcode.com/GitHub_Trending/treg/treg点击查看免费下载相关推荐CubeSandbox 透明出网安全代理 CubeEgress 深度解析L7 域名过滤、凭证注入与访问审计CubeSandbox 透明出网安全代理 CubeEgress 深度解析L7 域名过滤、凭证注入与访问审计 本文围绕 CubeSandbox 在每台宿主机上部Agent 沙箱虚拟化云原生人工智能后端容器运行时终极指南如何利用TabNine AI代码补全识别团队编码风格模式终极指南如何利用TabNine AI代码补全识别团队编码风格模式 TabNine作为一款强大的AI代码补全工具不仅能显著提升开发效率还能通过分析补全数据帮开发工具AI 应用Impeccable Manual Edit Applier 全解析live manual_edit_apply 事件如何安全落盘到真实源码Impeccable Manual Edit Applier 全解析live manual_edit_apply 事件如何安全落盘到真实源码 在 ImpeccAI 技能前端CLIdsh-plugin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Rust 惯用法:将 Option 当作零或一个元素的容器进行迭代(patterns 仓库 Idioms 精讲)

Rust 惯用法:将 Option 当作零或一个元素的容器进行迭代(patterns 仓库 Idioms 精讲)

文档教程 【免费下载链接】patterns A catalogue of Rust design patterns, anti-patterns and idioms 项目地址&#xff1a; https://gitcode.com/gh_mirrors/pa/patterns 点击查看 免费下载 Option<T> 不仅是 Rust 中可选值与错误处理的基础设施&#xff0c;它还实现了…

2026/9/25 3:12:38 阅读更多 →
python-for-android Bootstraps 完全指南:从零创建自定义 Android 构建后端

python-for-android Bootstraps 完全指南:从零创建自定义 Android 构建后端

开发工具构建工具移动开发 【免费下载链接】python-for-android Turn your Python application into an Android APK 项目地址&#xff1a; https://gitcode.com/gh_mirrors/py/python-for-android 点击查看 免费下载 python-for-android&#xff08;简称 p4a&#xff09;的 B…

2026/9/25 3:12:38 阅读更多 →
cuDF 字符串大小写转换指南:深入解析 pylibcudf.strings.case 的 to_lower、to_upper 与 swapcase

cuDF 字符串大小写转换指南:深入解析 pylibcudf.strings.case 的 to_lower、to_upper 与 swapcase

数据分析数据工程机器学习 【免费下载链接】cudf cuDF - GPU DataFrame Library 项目地址&#xff1a; https://gitcode.com/gh_mirrors/cu/cudf 点击查看 免费下载 本指南围绕 pylibcudf 字符串处理模块中的 pylibcudf.strings.case 展开&#xff0c;完整讲解其三个公开 API…

2026/9/25 3:12:38 阅读更多 →

最新新闻

新疆价钱合理的石墨水泥基改性聚氨酯复合防火保温板厂家避坑挑选指南

新疆价钱合理的石墨水泥基改性聚氨酯复合防火保温板厂家避坑挑选指南

在新疆做外墙保温、墙体保温工程&#xff0c;挑选石墨水泥基改性聚氨酯复合防火保温板厂家&#xff0c;最怕遇到价格虚高、质量不稳、交付延期、检测不合格这些问题&#xff0c;不少施工方都踩过小厂家的坑&#xff1a;要么报价看着低&#xff0c;实际拿到的产品偷工减料厚度不…

2026/9/25 3:52:02 阅读更多 →
天达快修规模怎么样,成立多久了

天达快修规模怎么样,成立多久了

把握民生运维发展方向&#xff0c;践行本土服务行业使命 民生运维领域的发展需求与行业价值民生设备运维服务&#xff0c;是和城市居民日常生活、中小商户日常经营绑定在一起的基础服务领域&#xff0c;承载着保障城市生活正常运转的核心作用。伴随居民生活水平提升&#xff0c…

2026/9/25 3:52:02 阅读更多 →
PaddleNLP 大规模中文语料预训练数据处理实战:以 WuDaoCorpus2.0 Base 200GB 为例

PaddleNLP 大规模中文语料预训练数据处理实战:以 WuDaoCorpus2.0 Base 200GB 为例

人工智能大模型预训练微调LoRARLHF强化学习分布式训练 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 导读 本文基于 PaddleNLP 仓…

2026/9/25 3:52:02 阅读更多 →
EasyWeChat 6.x 微信支付模块实战指南:初始化、API 调用、签名验证与回调处理

EasyWeChat 6.x 微信支付模块实战指南:初始化、API 调用、签名验证与回调处理

后端即时通讯 【免费下载链接】easywechat &#x1f4e6; 一个 PHP 微信 SDK 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ea/easywechat 点击查看 免费下载 本篇指南聚焦 EasyWeChat 6.x 的微信支付&#xff08;Pay&#xff09;模块&#xff0c;覆盖从商户资质初始…

2026/9/25 3:52:02 阅读更多 →
Humanizer 的 LetterCasing 枚举详解:Title、AllCaps、LowerCase 与 Sentence 四种字符串大小写转换

Humanizer 的 LetterCasing 枚举详解:Title、AllCaps、LowerCase 与 Sentence 四种字符串大小写转换

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址&#xff1a; https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 导读 …

2026/9/25 3:52:02 阅读更多 →
基于STM32的实验室消防预警系统:原理图、仿真与代码全开源

基于STM32的实验室消防预警系统:原理图、仿真与代码全开源

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 3:51:02 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事&#xff1a;AI元人文到底是什么&#xff1f;说白了&#xff0c;就是“用元视角重新审视人与AI的关系”&#xff0c;也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”&#xff0c;在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介&#xff1a;基于Python与卷积神经网络的车牌识别项目&#xff0c;面向计算机视觉初学者及智能交通开发者&#xff0c;目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件&#xff0c;包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是&#xff1a;几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班&#xff0c;服务器登录界面只有黑底白字&#xff0c;编辑器只有vi/vim&#xff0c;你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事&#xff1a;用Flutter给OpenHarmony做一款游戏集合类的App&#xff0c;说白了就是把若干小游戏塞进一个壳里&#xff0c;用统一入口分发。这个方向本身不算新鲜&#xff0c;真正让我花了不少心思的&#xff0c;是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档&#xff0c;最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事&#xff1a;今天在表后面多加了两个空白行&#xff0c;明天给客户交稿前发现整个章节的编号全部错位&#xff0c;光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年&#xff0c;说实话&#xff0c;第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年&#xff0c;流量惨淡、功能臃肿、代码自己都懒得看第二遍之后&#xff0c;我才慢慢琢磨明白一个道理&#xff1a;第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →