start	end	text
0	28480	好,然后我们来讲一下这个Codex Lulers体系构建与代码可控性治理。那这个的话其实也是一套这个细节的一个规范啊。这个就更加的这个细利度了。前面那个我们说的这个规范的话,主要还是指的是整个项目的一些大的一些规范啊。比如说目录啊,结构啊,是吧。它就相当于一个代码地图。
28480	32000	那这个Lurus的这个规范的话
32000	33880	它就更加的细了
33880	36300	这个是用来去控制
36300	39820	哪些命令可以在沙箱外去做一个执行
39820	41900	这个就偏执行类的
41900	44940	也就是说比如说我们在这个
44940	47180	跑一些代码的时候
47180	48180	跑一些case的时候
48180	49860	做一些自动化测试的时候
49860	52320	那自动化测试的话
52320	54220	可能涉及到命令就比较多了
54220	55960	有可能会删除文件
55960	57760	有可能需要调用工具
57760	59000	等等的啊
59000	60400	就个人关系的权限都会有
60400	63380	所以Codex专门设计了一套
63380	65520	叫Lulis的一套组件啊
65520	67460	专门就是用来干这个事情的
67460	69620	那这个里面的话啊
69620	71400	很好理解就是什么呢
71400	72640	那在这个里面
72640	75180	你可以建一些这个Lulis啊
75180	78380	比如说我们就直接在这个
78380	79840	这个里面啊
79840	81720	我们就找个项目吧
81720	83060	嗯
83060	89300	看一下啊
89300	92760	这个里面的话
92760	94900	相当于
94900	97040	我们要可以加一个规则
97040	98200	做一个什么呢
98200	99900	就是杀向外运行的话
99900	101460	需要先提示用户确认
101460	104940	也就是说我们可能要执行一个
104940	107980	GHPR的一个命令
107980	109160	然后这个命令的话
109160	110540	可能要去干嘛呢
110540	113520	要去分析一些仓库是吧
113520	115180	获取一些这个信息
115180	116920	所以这个里面的话
116920	119720	当他执行这种命令的时候
119720	123100	我们需要有用户去做一个确认
123100	125020	所以这个里面
125020	126100	事实上
126100	128380	他就是要做一个什么呢
128380	129540	授权的一个管理
129540	132660	那比如说我们现在就是在这个里面去建一下
132660	136800	然后我们在这个里面
136800	138000	比如说这个项目下面
138000	140740	先建文件啊
140740	142160	比如说我就建一个点lulus
142160	145240	然后把下面这一堆翻过来啊
145240	146800	翻过来啊
146800	148300	然后在这个里面的话
148300	151840	我们可以看一下
151840	155440	首先我们进入到洛伊的这个目楼里去
155440	159240	进入到洛伊
168000	170900	好到这个里面然后进入到codex
170900	172300	然后你就直接问他
172300	176100	当前项目有哪些
176100	181100	glueless
181100	186600	你就直接问他有哪些具体的这个规则是吧
186600	199460	然后他会自动的去分析啊
199460	202760	他会去找
202760	206020	所以他优先级的话
206020	209480	他会去扫Lulis的这个目录吧
209480	210780	这里还不行
210780	214520	我们建了这个点Lulis的这个目录文件以外
214520	215020	我看一下
215020	218860	还要建一个.lulus的目录
218860	220520	不然的话加载是有问题的
221540	224980	所以这个里面我们得加一个
224980	228520	还得建个目录
228520	231100	建个文件夹
231100	234900	然后把这个.lulus给它拖进去
234900	239680	然后再重启一下
243280	244340	然后再去问它
244340	265040	然后这个里面
265040	267180	他会去加载这个Lulis
267180	274000	你看他把agency.md的内容
274000	274840	也输出出来了
274840	277240	看一下lulis
277240	279680	嗯
279680	283360	哎他这个这里个规范没有输出来
283360	286040	项目生效的lulis
286040	287480	dd驱动
287480	292560	他他把这个lulis理解成
292560	293920	agents.md了
293920	297080	看一下有没有办法给他调整一下
297080	299140	嗯
299140	303980	这里要去激活一下啊
304000	310100	lulus
310100	315700	看一下这个目录
315700	317840	lulus 下面有一个点
317840	318360	lulus
318360	327440	然后我们
327440	331200	执行一下这个命令看一下
334000	341800	ghprvu
341800	354700	原因是当前仓库的gitremote没有指向github助期
354700	358200	那其实我们可以换一个项目
358200	360700	prodx
364000	370840	我们找到那个项目
370840	373240	用这个开源项目来测试一下
379000	381000	把这个项目导下来啊
381000	394120	git clone
394120	400940	首先我把这个项目拉下来
400940	408100	因为这个里面要用github的项目
408100	410180	我上面那个是gitty的一个项目
411000	413400	所以我首先要把它给它导进来
413400	418680	看这个项目有点大啊
418680	421740	反正这个规则的意思就是
421740	424640	大家在执行一些命令的时候
424640	428740	就是你可以去指定哪一些各个命令
428740	430720	是需要用户授权的
430720	433620	因为我们默认的话
433620	435820	其实有一些命令啊
435820	437120	它需要授权
437120	438660	有些是不需要授权的
438660	440360	那么大家可以去配一下
440360	441740	就是在某些命令下
441740	443400	需要去触发授权
443400	445280	也就是大家可以针对
445280	447280	我们当前执行的一个命令的话
447280	449860	做一些细地图的权限管控
449860	451120	就加一个规则
451120	453880	因为涉及到一些危险动作的时候
453880	456640	就需要用户来确认
456640	458580	确认完之后再去做处理
458580	461020	所以我们在这个点
461020	463680	Codex里面去加这个规则的话
463680	465460	就意味着什么呢
465460	468400	我们可以去做一些权限的一些细节管控
468400	470320	就是做一个这种审批
470320	473120	就相当于大家在这做这个
473120	474840	整个的一个
474840	477540	各种各样的命令管理的时候
477540	479780	你可以下一些细流的一些管控
479780	481000	有一些
481000	483180	这个命令的话
498690	500090	给他加一下
500090	500610	是吧
500610	502530	加一些权限控制
502530	504430	然后这个里面啊
504430	505850	我们可以配置哪些东西呢
505850	507490	比如说啊
507490	509390	它是有一套规范
509390	510870	比如说这个partner
510870	511790	匹配规则
511790	512530	比如说pr
512530	514690	就是你有pr的一些命令
514690	516430	然后这个decision
516430	518230	这个是做一些具体的命
518230	519310	动作的一个执行
519310	520650	比如说允许
520650	521650	或者拒绝
521650	522390	或者怎么样
522390	524230	一个是不提示
524230	526610	直接在沙厢环境下面去执行
526610	527930	然后是提示
527930	530090	就每次命中都要确认请求
530090	533870	然后这个forbidden是直接拒绝了
533870	536130	就这种命令就不允许执行了
536130	539630	比如说RM跟RF这种删除文件的
539630	541490	我们就不管它了
541490	542430	这个完了
542430	545530	然后我们现在去切换到这个
545530	547530	看一下
547530	550870	切换到codex
550870	552470	这个项目里面去
552470	555170	然后在这个项目下面的话
555170	556210	我们建一个
556210	557870	把那个移动过去
557870	559870	刚刚有一个lulus
563270	564870	把这个移到这个下面去
574370	575510	好现在已经移过来
575510	576130	移过来之后
576130	577670	我们再切进去看一下
579070	579970	codex
583210	583870	好这里面
583870	586670	然后我们再去执行刚刚的一个指令
587870	594070	比如说我们来分析一下
594070	599770	当前项目的
599770	603590	Loss有哪些
617870	627910	他默认读的也是这个agents.md
627910	635470	他不能夹载内容
635470	639570	这就这么来就问他
639570	642650	当前项目的
642650	646530	有哪些内容
646530	653810	我看这样来问行不行啊
653810	657530	他会去找这个文件啊
657530	664610	他是有一个匹配规则的
664610	668590	就比如说Codex想在沙箱里面去运行
668590	670250	GHVU开头的命令
670250	671950	但是需要后续的批准
671950	674250	精准匹配啊才可以
674250	677790	所以说不匹配
677790	682490	比如说我们现在来整这个看一下
682490	697710	你看现在是不是需要用户来确认是吧
697710	700950	这个是不是我们那个规则生效了
700950	704010	这里面是不是就需要用户来确认
704010	704910	是吧
704910	706810	来确认一下
706810	722290	你看这个是以执行
722290	725310	然后我们再来执行这个看一下
734010	735690	你看用这种命令
735690	736950	一旦匹配上了
736950	737670	他就要确认
737670	739550	然后不匹配的
739550	740890	我们来也来确认一下
740890	744010	看一下这个是不是就不会授权了
744010	751370	这个还是要确认
751370	753250	这个也是要确认
753250	755090	只是说这里面
755090	758690	就是相当于一些一个逻辑
758690	761430	要做一些处理
761430	766070	但是我们看一下这个上面那个规则
766070	775650	因为他网络访问
775650	776990	所以还是需要授权
776990	779110	其实这个不匹配的话
779110	782030	不匹配的话就必须
782030	783410	然后再分析一下
783410	785150	看一下刚刚那个规则是什么
791430	797930	呃
797930	801370	GHPRVU会匹配
801370	802730	GonRepo不会匹配
802730	805430	因为他不是以精准的GHPRVU
807130	808330	不匹配会怎么样
821430	826310	怎么样
826310	828770	我们就看一下
828770	830570	他这个规则到底是怎么样的
830570	832990	他说是不会命中
832990	834550	点Lulis这个规则
834550	838770	但是我们实际还是看到那个是吧
838770	840490	看一下他这个细节
840490	842950	他说的是不会命中
847750	850590	但是因为还是会涉及到一些网络权限
850590	852550	还是会有一些提示的
852550	855390	你看啊
855390	857590	因为这个命令需要访问GitHub网络
857590	859190	所以在当年黄金下
859190	861350	还是会要求额外授权之行
861350	862430	所以正常来说
862430	865310	按理说他没有匹配就不需要做授权
865310	867370	因为你要访问网络啊
867370	871730	所以这个就还是要做授权的
871730	875610	那我们最近这个依旧需要授权
880590	882450	你看这里面需要确认一下
882450	885510	还是需要收取
885510	889410	也要涉及到访问网络啊
889410	893070	所以这个规则这个里面的逻辑就是
893070	895190	啊我们整个
895190	898570	他不一定就说严格按照这个来啊
898570	900470	他还要根据当前的环境来决定
900470	906090	这个里面到底有没有其他的一些权限需要去申请啊
906090	908870	所以说你写在这里的话
908870	911090	如果说这个里面啊
911090	913770	并不需要额外再去申请其他权限的话
913770	915670	这个命令执行就执行成功了
915670	918430	他不会弹出那个还需要你确认的那个过程
918430	921590	所以具体得看一些场景啊
921590	924250	这个大家回头也可以去试一下
924250	927170	如果他但凡没有涉及到网络访问的话
927170	929870	这个我们其实是OK的啊
929870	933130	所以整个Codex
933130	935170	他的一个处理逻辑的话就是
935170	939770	他会先去加载我们整个Lulis的一个目录
939770	940130	是吧
940130	942230	那加载完之后的话
942230	946770	他会读取到里面的这个点Lulis的一些文件内容
946770	947790	然后的话
947790	950270	这个里面他也分全局的
950270	951630	还有这个项目的
951630	953690	就有用户级别的
953690	954910	整个全局的
954910	956890	也有按照项目来分的
956890	958670	在某个项目下面去点Lulis
958670	961730	这个都是OK的
961730	963890	跟我们前面讲的那个
963890	964484	嗯
979484	980884	就是一个匹配
980884	982884	在这个里面
982884	985184	比如说我们可以匹配pr命令是吧
985184	986684	然后decision
986684	988484	就我们前面讲的不提示
988484	990184	然后提示
990184	992684	然后或者是直接阻止了
993884	994784	那比如说大家
994784	996684	其实你可以在这个里面去改
996684	998184	比如说现在是提示吗
998184	1000684	你直接改成forbidden
1000684	1002984	然后你再去执行看一下
1002984	1003784	比如说在这个里面
1003784	1005384	我们先退出去
1005384	1006884	再执行codex
1006884	1009084	然后再直接执行这个
1009484	1010204	命令
1010204	1011344	看一下他会怎么样
1011344	1016824	你看
1016824	1018344	当前
1018344	1021484	看一下会不会被拒绝啊
1021484	1023084	啊
1023084	1025384	因为这个是网络访问啊
1025384	1026944	这个是另外一个权限申请啊
1026944	1028124	跟刚刚那个还不一样
1028124	1037144	看一下他最终会不会被拒绝啊
1037144	1039044	你看现在已经在加载那个
1039044	1039964	点录了死了
1039964	1043264	看一下他最终会不会被拒绝掉
1043264	1057984	还是有这个结果
1057984	1061444	这个是前面咱们做了授权
1061444	1063304	一次性给他加进去了吗
1063304	1066704	正常来说应该是给他拒绝了
1066704	1069704	我现在已经有一个forbidden了
1069704	1071104	我再退出去啊
1071104	1071704	再看一下
1071704	1082704	看我切换这个premission看一下
1082704	1085704	然后测试review
1085704	1087704	我切换这种模式看一下
1087704	1090704	然后再置信
1090704	1093704	看一下他需不需要确认
1096704	1104764	他说GH因为网络杀箱受限
1104764	1107324	他会按照他这里提升的权限
1107324	1109724	他那个杀箱是没权限的
1109724	1111624	是直接给他锯掉的
1111624	1114864	但是的话他要重新做一个提权
1114864	1117704	所以这里面他最终还是可以的
1117704	1120424	你看他这个只是查询
1120424	1122364	他没有涉及到修改的风险
1122364	1124824	所以这里面默认给他放行的
1124824	1126984	看一下
1126984	1133684	在这里大家去改的话
1133684	1135464	你其实看不到什么效果
1135464	1138524	他其实杀箱给他阻止了
1138524	1139984	但是的话就是
1139984	1143344	我们还是可以有一个提权的过程
1143344	1145564	这个是他设计的
1145564	1146844	就是这个样子
1154824	1162184	你看他这个是网络网络权限啊
1165024	1167184	然后不要告诉我之前
1167184	1169664	告诉Codex
1169664	1175004	他其实内部是已经拒绝
1175004	1176784	但是这里会有个提权的操作
1176784	1179844	所以大家得看距离的一个情况
1179844	1183904	然后我们还可以加一些不同的一些参数是吧
1183904	1185444	然后去做一些匹配啊等等
1185444	1188504	那这个里面的话就是
1188504	1191364	我们基于这个Codex
1191364	1193204	可以去做一些这个
1193204	1195784	评估一条代运行的命令的时候
1195784	1197284	他会把命令
1197284	1198384	他的一个参数
1198384	1200784	做一个比较啊
1200784	1201624	那在内部的话
1201624	1202884	Codex会把命令
1202884	1204724	看作一个参数列表
1204724	1206304	比如说一些这个
1206304	1209424	不同的这个参数是吧
1209424	1210064	比如说这个
1210064	1213484	EKCVP这种参数的方式
1213484	1215684	然后去做一个这个接收
1215684	1219144	就是他会有这么一个机制
1219144	1220584	好
1220584	1222224	然后是sharewrapple
1222224	1223544	与复合的一些命令
1223544	1225524	这个是用来干嘛的呢
1225524	1227464	这个就是我们还可以包装一下
1227464	1229524	就是我们在lulis里面
1229524	1232704	我们可以把整个命令做一个包装
1232704	1234524	什么意思呢
1234524	1236584	就是你现在要执行多个命令是吧
1236584	1239544	那我现在想把这个做给打包
1239544	1241864	比如说提交文件删除
1241864	1243344	整个做一个打包
1243344	1246044	那么在这里面的话
1246044	1246804	就相当于
1246804	1249444	它单次操作的话
1249444	1251424	相当于把整个mini做一个执行
1251424	1253144	就这里面我们可以做一个封装
1253144	1255664	然后Codex的话
1255664	1259644	它什么时候可以去拆分一些脚本
1259644	1261004	比如说
1261004	1262584	这个里面
1262584	1265904	一些纯字面量的一些单词
1265904	1268204	不包含变量展开的这种情况
1268204	1270244	或者是一些
1270244	1273124	只通过安全运算服务的一些
1273124	1273784	这个场景
1273784	1275544	或者是一些
1275544	1276464	这个
1276464	1279524	不同情况的
1279524	1280644	比如说下面这个
1280644	1283304	一些有规则的
1283304	1283604	是吧
1283604	1285544	就都是安全的这种场景
1285544	1287064	这个时候的话
1287064	1288164	他就可以去
1288164	1289644	加一些这个
1289644	1290904	一些
1290904	1293244	做一些安全的一些拆分
1293244	1294804	比如说把这些命令
1294804	1295404	做一个拆分
1295404	1298184	所以他会分别用你的LULUS
1298184	1299524	去评估每一条命令
1299524	1301424	并且以最严格的
1301424	1302624	这个结果为准
1302624	1304944	然后这里面的话
1304944	1307744	即使你允许这个partner
1307744	1309844	然后执行这个
1309844	1311904	你写了这个东西的话
1311904	1313544	那他也不会自动放弃
1313544	1316244	因为这个RM和RF
1316244	1317964	是一个非常危险的一个操作
1317964	1321264	因为这个命令比较危险
1321264	1322484	所以他会单独评估
1322484	1325204	所以你写归你写
1325204	1327484	但是Codex他自己也有一套
1327484	1328764	内置的一套规范
1328764	1332244	所以这种危险命令的话
1332244	1333364	你混在一起的话
1333364	1336544	就违背了他的一个安全指令的一个要求
1336544	1338304	所以大家会发现
1338304	1339824	你不是你写所有命令
1339824	1341564	他都会给你放行的
1341564	1342764	他也要去看情况
1342764	1345304	这个是Codex
1345304	1347744	他可以做一些安全脚本的一个拆分
1347744	1349024	然后的话Codex
1349024	1351284	他什么情况下不会去拆分脚本呢
1351284	1354024	比如说我们已经加了一些重令像的一些东西了
1354024	1355964	加了一些替换的表达式了
1355964	1357904	或者做了一些环境变量的一些复制了
1357904	1359844	或者加了一些通费符了
1359844	1361964	那这个就不会尝试去解析他
1361964	1363924	因为它本身就代表
1363924	1365684	它的执行的一些关键点
1365684	1367384	是一些规范
1367384	1370264	所以它就不会去拆分
1370264	1371784	然后同时的话
1371784	1372984	它就直接把它用过来
1372984	1374384	直接去运行的啊
1374384	1377484	所以它也不是说你写了
1377484	1378784	它就会帮你去拆分
1378784	1380564	那它也要去看情况
1380564	1384324	所以这种处理方式意味着
1384324	1387184	你就是在可以安全拆分的时候
1387184	1388924	Codex会按照单条命令
1388924	1390144	逐项的去评估
1390144	1392064	在不能安全拆分的时候
1392064	1392844	就是按照
1392844	1394884	更加保守的一个方案
1394884	1395644	去做一个贫固
1395644	1398684	然后弄完之后的话
1398684	1400744	我们也可以去做一些测试
1400744	1403304	比如说我们把这个命令
1403304	1405344	加到这里来可以看一下
1407330	1413890	就是你可以去看一下這個規則到底有沒有生效。
1413890	1418690	比如說我們這個規則,我們可以把它加進去。
1418690	1420750	你看这个里面就找到了啊
1420750	1422590	什么
1422590	1424450	Codex
1424450	1425330	Default
1425330	1427150	Check
1427150	1429890	当前的这个用户目标
1429890	1432690	但是我们没有这个规则是吧
1432690	1435830	这个当前用户目标没有建那个规则
1435830	1439350	所以这个里面我们得改一下啊
1439350	1442250	这个就是当前目录的
1442250	1443330	Lulis
1443330	1445330	点Lulis
1445330	1448690	这里我们就指定当前步
1448690	1451650	然后来评估一下它的一些变化
1451650	1453270	来看一下
1469910	1472410	PowerShell可以复制执行的一个命令
1472410	1475670	你看他帮我们把命令做了一个优化
1475670	1479010	来我们退出去执行一下
1479010	1485790	这个里面有一个问题
1485790	1487090	Codex
1502410	1505910	你看这个是他匹配的一个规则是吧
1505910	1508250	匹配的规则就是我们可以看得出来
1508250	1510810	这个里面的话就相当于不被允许啊
1510810	1513070	这就是他要有这个结论
1513070	1514670	他可以分析出来
1514670	1516750	我们去执行这个命令的时候
1516750	1519090	他给的这个决定就是拒绝了啊
1519090	1520970	这就是测试规则文件
1520970	1522450	到底有没有写的有没有问题
1522450	1525070	他默认的话会帮你输出一个
1525070	1527610	JSON格式的这么一个规则出来啊
1527610	1531230	所以这个是我们做测试用的
1531230	1536350	然后包括一些这些规则的一些语言啊
1536350	1536690	是吧
1536690	1537610	比如说
1537610	1539590	大家可以去看一下
1539590	1542110	专门有一套语法啊
1542110	1545270	叫这个Specific的这么一个语法
1545270	1549790	你看这个是专门的有一套规范啊
1549790	1550870	大家可以去看一下
1550870	1554070	怎么来写这个东西
1554070	1554770	是吧
1554770	1556830	大家可以去看一下
1556830	1558990	他是专门有一套规则语法的
1558990	1560610	他是采用了这种方式
1560610	1562210	去写规则的
1562210	1564490	大家可以去参考一下
1564490	1565890	这是它的一个使用说明
1565890	1568890	它的语法看起来有点像Python
1568890	1570890	但是设计目标的话是安全执行
1570890	1572650	所以Lulis的一个引擎
1572650	1574830	可以在不产生副作用的前例下
1574830	1576170	去运行它
1576170	1579110	比如说它不会去触碰文件系统的一些逻辑
1579110	1580630	所以这个里面
1580630	1583830	大家可以去看一下它的一个细节点
1583830	1585690	这个我们可以去
