From 478b550b83190432891995739e2e1acc9b33649d Mon Sep 17 00:00:00 2001 From: Davide Testuggine Date: Thu, 6 Nov 2025 15:37:06 -0800 Subject: [PATCH 1/5] 100% human made --- rfcs/components.png | Bin 0 -> 132491 bytes rfcs/env.png | Bin 0 -> 155657 bytes rfcs/env_tools_rfc.md | 213 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 rfcs/components.png create mode 100644 rfcs/env.png create mode 100644 rfcs/env_tools_rfc.md diff --git a/rfcs/components.png b/rfcs/components.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ce3157e31bf66cc33af10a877c4c07056ef557 GIT binary patch literal 132491 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 literal 0 HcmV?d00001 diff --git a/rfcs/env.png b/rfcs/env.png new file mode 100644 index 0000000000000000000000000000000000000000..391c805a5fb5d6ec5276e85843113279e5c0bd20 GIT binary patch literal 155657 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̽z_FLV8Nab47$%BphB2w> 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

^Zau5YkWJrN+rlBX*s8K*C_8 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


gV~8Mk_``Rxi{1QFDi^=k zcNjrj%6IL{o&vOG&Fg>WvCNxf>2BK|aXh-jm{;&mZ%Q%ZvSIAuf>NVT^5sN1kt}=!dI`Rin{l+Ut)gg#Ae;Rc$ zY0^`QXB`!7Kkj9j@XYb}!INYoTQ0Axo)<>FramL!a=mfSiV|pvoJhRKDnOyrhSdAmi;(6gKKPbNQ+$Hko)D<1|Ho{Z6XVVyLYc-QB=KNedPd zFQ9;MHqnBt#%o>V!_%1_1uqlu#A!bVo1SF*jUagUiXh?Z1)1Hcbw$)P+P{ZcL8Cg^ zQk^wDj9-IY7`iUE5#YA1d|ZRucQw~jVXCBS?@ixx)rwrC z2s?VsuC#&p>;3MsK;OkLu3L$(_R}Dw)fq;qZvqI%Pw!m(9sdy?%=yQrn#6~nv7$OiGa#>3}JwWeKr45LpUt%x0Jr zxf&xoVUtKzpUb-(ETz15Xs}PHP(D2u3exo;ylbLW91F|r{()0q?vY7-ecUDlh~*)e zIN@+|zx`0}*B)?4(8dh$+Cng(U4`WeYu;Yf8k|R46ZJ3s z2ls_6tk-{No?1ytaX`J_?Q%7IL;Zcbdb|XKsSRi@IeTD@Qf$f6h0rrjdy_p!r7JSH zDDFi)jh4siJpuH_xHxwVgVnT2&P%iICKf0-kVJt$yVd0QL|l`@R*~Q!=t{yM8b&yI2t< z{G%rf-f85Kwi1<0|0Rmk_$mW5%WoCI*JTq9`WSRy#Q!O^=wwG?NsYIG9j05y0r{BB|63dpxqVC2A_LT3S<9gkn3+^H-LdT0D&m_YhbrtU=-)$ z6A7@oIBDvVpfbMfZ&=YE8*L%SF~*l3yKmZ)-S&6Iu;c&4Dr`S62swpbx5zgrh3`{v zo=2d1_i{Hr_$Jq#S!!2LYAQBLrfX*!Dl9hNui68~$;Fmw47~$OO;6mc8`R7v`Fsn5 zh8G1d{QH@_eS4zInlP$6s7Gh>yiC!&<(GPjWOt{Z*m2tTuYKGpQ>EbHW)mW_9qGCts)!<)GJyinZ%$-_~h9W=NZ(26u>`)>%U)G zKLeI9Gi|d*@D04`e@7gco71I}1s`FuS*h6}68N#PSug)}sP%)sTdiwj|B1u-m$Xyy z*5fP;M*cNp`2TfZ!1$m)fo9)s5dMx;_+Ov*-%tMY(-l+T6}5bn{?Fya#VT^N{z@2J z$P)bD7YQ6Hea^1t;3MMs6@Q~$ksN}5rGkZjB3*{xaD@9@yU?nu>%{c0 z#NPj0>3?tO$+?Rz(O)f}em?n*@)`^V_X+}cE_VCszmHJNJ39ooe`T+c|L^>l|NbU$ zT|EHwUsS8!d-nhPoIaznK=Z+9#7tG9A3O~O)nl;J&Wqn(*F0vwZCTyVaduxxS)sr zlYj;6We)%~eE<7<^fT`@>hL9EZXaBN|6aZ>=AUWX_&`SK<0tquELLjH8cEd-H&Fi% zb8i_J)z&r+3oDY)|b{S%g+vwz|VfcePB8`Q6O-MR!9QL#8*n?m*Tt|#XJxm+Hg7g!e77gHS2 zW?e`G0J)gI?Z0~HT<5YCtDvK^#)k#h_z!XpB-C)3yJ%C9E5bBp zYT*pjY%8Ng1>H8EPA>-YDzgE;V#p26#2CjcbF(U7HCT+1_+J&$zYAf09x0#j&eb5L zsuTN1%wM1xy?0IY#rN0#IGumdP>VR~1#^-X$}dn%5iAHd^A$U>r2?ZXUNxOF^)(i= zi#=#8#*xIzrZc*po%3tE;4qw#@$vDR8##JAsLs)<2$I!{zu5T(^Z;m*rK&p~F!uXp zLbUj$GR&`30BjHL4Os5_H;hO=__ z(i}mX^NC8eVL5+f>fbyF4g;DJ<-f;CjuKV!t{DN=%4V2wG zpqKgAT_9t0HRS(e+zPX#pP!_OHp44&ww4BsLB7I2A$B05Fy-$dNC=$jZOMtNDgOJZ z`qht*fWs<;p&l>gJp8EUp z0rz*q>ye%}pxs0Ol03%Wk^WO`fblRZ68W3a`#vZaqC@XS%qZaHvi|BL!L0k=t zJV5))-{=Okq*mIf2&~i+fxoa#2u`Cyi#N-rDn_*dzM_Kat(JA$&?oDfDUVp5A^r)V zvgQK6tc4*>*;%&U6QZhL`5rN--F3;Uk4K$>e;HZT_(cext{eP`GE|*Q(^=ya z+W-COpHG%retlO{O+YiUYxILR&_XVkVuq5Lq>EJn=B)HwDHqu*vwP9y_|o;)NR+e& z(B|f5cRjQMXy0lnqmP8!jgOo;!eTf8E;%TriHJ~0%_2tRGpp?e}B%d8>6vG(9 z2+7H0WGNvIL9RZqFp2kf>{(}_Lu@v=UpJn!ZZAlaXMI?!!5k?D=htGdd*{x2WfGX_ zh9H0;2X~9_yTk^7^ZWOdsvQnqmzg3z9Lmh%h6Ak!rEdQ)d~8Ti@GN+h6Ej*4Adaqe zmcy3grLNEUJuK1%KY@0E+PcT>TeCR6_}3ibE>N4lG0;jnsjSKo)V6!7l=7msGAEjp z3h1``Zjl>WpGJC3mTjtii&X7G$D2UgM+`;RpWP`KD{ssjWi_Ev{cJUv_6me)thyCb z1Y9os?4^-l*vx-f=E{ECECgV4xfB6D`D;3IDDi-Tc>&JK?7tVn zi^s1!PhfJKkxDx~wIX`TfkX|p;WfC4(I?pe=W`xX_R4yB@d1McyNTT$ zCemI9x$Vt!7?1-rz;~_PU8N4a#SD@?0WMrVV^sO22EgCZI)Zw3?wt6jH;_8q|HUfI zvUIFOpJ07{WA`E%2}nQ7%;X=*erUW}t$IeqSAWEo4L~oF14nh-z?jb7F z60m_(i`1)H)>LVSP&5`Km44Fr4O9=ph0Z%32A^&NmlezXe5GDWq#^D*aG= z&!$KPx`24ujT7Y2;eo&%*X=h!hbDL zo}+Dca(|Y&O{4Zpucm=#(J4PyzM8!Ah0%-F*?HOEYexuR6OrSnC=sx*)~wDUjE!Qx zzjz9ab^%&mMeB>fv>eUx>+dP303VTBDeegfynL)9`6%!*v5~7kQthW)8wmkVcx&85 z$IXoyUK0U?(>sv%nh`nw`|P^}35c$9srFSe*T;ScQ+17djsA1zp9nDff=Ny!!-!Q&f!4J@ zB@&Ww9X4nBp48Y#YN#{=7hqHklZl?1hk>BUnMnWcj(d?LonLUSy?c~GeNwdvM6=<` z$RPU2Ab<&YA}xK0@EGp!ebO(bFC9x3fc%u#2c&mCE7Yv`K+UO9dD#h0LeD7}7LS|= z>?iLCs=Rj`-*^Gx?cDWH8rorg#2I+k zc(A6r!n^c|Aol@OAE+nO-A#R2>Fgsg{_VQAXSmZSP2gQn!O4)LA%H3H==I?CQ5_|D zOlUso9bpS4)l^yrbq%O~r)zq6?4|%VKEYS!XtCo}fWF_TGHK!)>^M(q93<4Yjd(v& z1YEml@In>$`F$$hZJ*Si!t>f>QgxNUaS>8%XM6NXKmBta*)`zk=22U5zvb>#dDF(7 z18{^oqs4y|rhZU`MU=~7&~kXGRxSs-3mVl0m9_b!8LYK&p~>7;=z^+&J_JxtA+1?G z`fMcV3W!fhI-k&~qu|jCcs%ye=Jjlj3M7$k3#A|gc!{1&XnYu#QeMFYT^P+t6d&G0H^XYNz&! zp-iYEVE%6VEn#}s)_7W$r>#V2%um7O8m$IsWavc*)gHkC1+)VuKy#%gs_LqbaE!GJ zp%;AgAO5L?ayg+33jT_RqG}TsgW7;2>4<`=sp<;ZSXX%qK0(FS4+NEkT+(zSaY=W`dpd?FAat^aMwhl%jDYk*0{;hbmyT?f zo_d_6;;}uU69+8CgCz~3O58h~bVni>K&cETzZxSRpxA(uc7wsa*WG+P1k^*+dO8wDb zGTu=R?r2;D*S_P&;er?DHwyNW)fpN(xpNa=5azlA7$<>Xg?gbX{**^ETP=e>8D)rU zAcE~eYTiUqyl3C8(+Qx0vVGMvr zAKxYw$OXG5YA>QHo*HU^tCZw<3!}84g)ICtt?P<`?+RsV6D!Kc(1=^=c8YwxepCLxKM9w{@xTb<_ZibZ~-k^gS%2@8M; z=qoaX8=}+s7c!Dt<>@x>B4<(0>CjuAx&Z@R^U?uJWy1ONe!&~tUq-yV>+1AFDv_r z32|I$0u>Jr{Izf{dh_R*kB_TEg z4Q@)_%I~K)(N_e{+&qo;HXiMr*p&=AQfMI>J1H@c z9xnBl)MWN^K}?>iU2ytKz?@Mv6Io3I&n+fl0gbP1*dhA>+`1L% zSVNyeLmcBzbEz6FYhM_&_ByWrIQNJcCE|h+3k=Xg0jJAI)@>I%`l*RN8?JsYv(6H> z`?3m@mDH}lw?0q!DR=lW+7&^0h^L<;O+W6qzAIXR}GqR3QLhcx!eTSs53HDBcmj(LK?T;!*nvFX0T$+EtRok)S0C;6Tl z5nwhPM)RzL3~FXh&4F(6jd}0xwp$3osOcbSGy={bI#M?Yc~orUJa4Ax?yPxxbQ5e_{()!*l1}77$H*%GoYdgOuHvnYeYZHSQ zPsY{-RmHWl5eK4gs4#YVS;?B(v{;BZ+04Dj74=1rY}C4HXO6&Gqx=FjRE@qDds3%M zZ=C%#&j|xhB|{+Jbb-5EYWyX2JNOg}`747A3#epGQi9@_hHY*7&-zGAG@$-*XN;A% zZ@7%>O0dK@qpDAZFT@ZtVtxXA2^JrgDqO;WNdI#eL<{t76d^vI*XNw!RDvN2HACA8MP@_jXO_XRE5>w z3YcC#Y;r!$*yVS7Y2w*W(15LbSC>BWx(4Iu;{@|tKZJ`gwDA73!k@Dp8Q*{}wUm3n zNoSON7_s=dw6C7@E^0)gD_(o$kql5khN|xPlcB*5&~%`qjPx8D-E27U`KDZOEWGZ( zZVMvM2`_0qWJCc09lvyHFQYGWZp6}9vH7jw9_8v+BRg=L7?$*7n`t2W@Nn=Q^$QgC z>Nb}j_2aFbayL<0FFkZ7QS*u+`NwmU7`yGxPul#=TKy90-G(hCKTD9*C>cz&VA7ES zMplagk(ybkd?Dp~T_!K~?N1V}{wi;3Qb3mZo1$Kb0+lZc^a>VCk-XHe8 zK)0*S``W9qG&*!}(d?V|2&SJz~I^G!b_bO{eTPXqRpr;4X?bm~ zJ{-t?aTHO>MJ+#|>bVjmT$A%Y0u6T0g4t6_<0M8nU55PWKqdc=-0<(Eg@p^QlMQP7 zZ6MB>%z{pk%#78Q5zJ+Zebf`8Q~5*0oZ6d>=!y%H#!Oq4KTX?k55e5*mJT0ttgNGp z+v;(HM~T+?WK`YNCw7fb*BO5W5b6eciE}<$Y5s!06E>y_6nxiTV{>HqLSuv2Uvq;o=87-C zdUdqrJv}|;s|^&^tG7%`l2Rya*uVgqnl#`7t<TFC?Q zngqG#P&t2fA;r~}{B`(?CBj^0=wq}pwCLw_vQEY><&c}(-kQkD5jJRl4*Y-AjvNYH6u7HPF$L z@Rb=E5Laj>o;iN)NDjBe2uBCqQXwV1&iOE6Kp%t3oNZh6 zc(a|Fj7_sLRiq3Yw}{0`mg09bS4Rr@{tRCF-LVXLho5xM@=+020;ZgFu?x` z1r=gys}2c6tA4f(SE&c&q-As4sIM@cH>KBTT|ab~U_T>N*%Ma9TmGK8I`vqDQC|o|KQZcWPtixW)d)$p?u-ZM6hRv~}ByvuDFfj-G z+MNA>MJ)6tiwMpandLL95a0r&hx#kuDY>JNLDp5l_x%YQ@k;aTZx8YX@R#`!Y^?kDT@Q+b9-hS& z_O_;JaMG=cvFK1wdYhh$ug#dnXWE;aNXBt)?dO++9})1y&+s*8l#O z6@LA7M3$8H-g3ER}S04M` z2gg&OVinqU^i|myPr!mDMT?HfTId8UJ76^9q?zfcziMp?eQSYZBUi=Wf%UX#z}J$= z>n~HruF(e+9k@V2^A!_iJGuqdCrW_>jF2HbB*F6Yt=lSVPw})?jvF?&I!#sdicwgu zT0;mi4`@qfQdty6i?sMT^rZ&!XG%zS0NLh9ra)k9K=&yX&v3tKhkBow7VFyr2%Nwj(&yvI>UG$O&k+vtvfwm#ED>pUBr5ptQORq zLYg)+Q`#_p1SqrXXVIU}un#CmBe?N|?mmB|K%_<)$?KCJSCO@Cb*CZm4V zP@R=D$3)HkS)0imHu7)Uy-rL5{%fEfI58E1;^J2)uMk(cA}*tW;Woi_CAQ&Qnv>tI zN869Xq41_B_VI|OJ65o;j$OMDYR z%NDK_=-phS8G}+(^}Hk`#XT%}x#p2ir=EX|H2OrOGJKLSvQd({29TUCYMxl;2T<&X zog`}=53B)-Ychu#Vi{9tV@-=$Pqv+KV8@bdd3P@g4AQI&2u%Uj*&oQSTuYG#tEZtX zU^-PZ2ViyO9%+SMJ-vsm#d1|HozM8!SF6U2_&UGu^*aHH=C8}5xph&X@R_pVBJSB8 z?Z#in{yXvU>q(&ipe4)WZl^h3mdNKAo)4#m2D~w5wHv!=a0t;@o+NkmrN@q$IO$29 zEtePP8kPPl)BTH0QP5=Qfjk4xE)~#>`+!m54fyHZ&7LJD<-a1MzfbY!JPOCCc=;Bz5wKVB?=R3M?NzCkC*5a1OezVue};n`Y*fxbB;9A z>!d|b*6NeLrOSUgZ1;6APjEa0Fem@V&Umi@ZOYEe@ISY&@{eku|MyeBca}>I1hIIX z@&pzC=k__T6NWurUx1LCyiDN#4KqMN*x*#WYH;Yg0rZxC_zCrYt$G9M4J6RIs~L}f zhMfOTL@ZzTo-=#Q{GUkt_nH2Cn)Tms1or{x`v1Yk0G$XVH(#XiGyJJg{CR$2U@Vkc zy78~j@o&!h_ff%gRshyChs%IS-2VwR02S!~(UHi+dj2n(LqUUGw_@g{7XF_!he<4> z|Msz}+<&XpxQmt@o)jNvd8is;)dMK5nc)oaRfKkkFDg~3A?TIcjzXD@db^g}j>gyy z2gAIhrL3kN4+W4^^0=;rQI}`_6*Px zez{Q*X9MU-9@H45Zt>Ac+-iQ@Zf@X3xSWex7Op!fq9N3$LFMF&#@-cc?w3Q3=GPwLY z4EU1{n5DtLBErb&-IQ(%XOfC&IyDmQC-T3l9sVqmc7aCRlJPfrsKojCYhDPKxQ_$< z(L>F8-~WrMET4dz2VR(Ie5?z%N>Ik1np4i(8sN)T7I%Q1Hu$!!m6>F@bDgBRMt_?S zGR^C6R$1$H_;n=4AU`CvQuk2rsa>jJHNE@p?!3V{e?0Os9dh#l!tD(*IR~sZFI>Xz zI&8J;4(OWQ4^D0WBHTb?g&XkRR00<&vIa-$hpjs^j;D9D^$N#thPb40iH74mjFmn7 z;F299ONlcZu7sh6OZ~?#>4qU)I#BK{D_xTMKDL#mO6B0EJaEC`FNg2 zh>?@rHQb?7M0fUIc6h_UvA!)MjgaQ4cBUb6ZU(jYX@dVM7y=*Td`eu`YDQ!5Q@uPz z`J<9X>C?cmlt{ttLZwSTCTrT*tiOV3e^C1uM(7xz#?*9zsy%&wZxclHjQVR`j(%tH zaR`>-=s9)E*}oLx@(a324hNDJLxGwGMdfP`|EKH&5{V#K#;W>oGYYRX>4Pgk{2kcI zg#Eqp&nI5SNNYw3Q0dG^Y~E+>On;VEy&K6|kV2PSg!=Vi~G_Q_bxC{lZ`TM?&Ai=}+R6XZ}aMMk>*1 z@~L$vPtq9y;*C72?B<_E|N6~a)QfXIpziATQs7FgCniRt=l1@ALJ%NteS-hZ`(I=& zbC2Lee3!yDsJ2wbQBdH|#}qiBxz>fHkXxjMguF_?=_qOkK0f@<4}uqg!A-u~C(cv$9) z64#Z{zg7nCU;+iz>8|os&&*_is)+$A^gq1(bN#d`G+@wmRWZNW@8%hm4_ca!L!271 z3`sf@GXJr|>lIbXz!M)ej15)4gVsj=0!rE{=ts4#!}S=2FAl5!aVX#?ybsfAZ~xS&^zOX$^`ojr{>U0ounm}vX_o&`_wDoAZC`r@M z!Pn^{pFX*bfXNiD)8;6B4|Z>2yifI>wWm#!1bJogL1LR%=0Pzz+tai$v>&ZX4#ffz zh2I36fTYR4bv>QLLRs7#@5?5kK`rDeLeD)Sc(+!n&Gps(={zKf|DimeET5(MRLN+! z*iaD>wrWNoKR#seUFuPm+mV@`*Sv_}599L1se;&C-WbS)+#F>Lr0S!DAg1@}l6B_k z_fP#f346ZrHeXdjMYDECC$ncXpo?@c)@NU#kqO1^}P z9FFTjlK2V=^*x<+#<$CMI&ck=)^Kv^NDmEH$YSW!d`0vAv~T#c_YasCCy3P5;k
4v3OrlT>jFJaQh#fi-e9EZMiZ+K6~=fhS}Eo(l1b6^nLs}}#J%Ta#x0j>1g z6B)#}@{()@o`s}6vj?n35}v3D4g5m|?~4fDkh-sB=B?J=*DRfK>Jd(jbs^YNN6ZSf zrgU2E`PvdYvi_3MhqyKk?!^|ILc7}^RT{1!F~b^FgfQW7qXZ_QCfG+%ztnQYSX z%G}GhWIrYndnwSExAbtr4W>za6H#|Oj#FccJ8WL|cni|4PVR0U zilkGEyuUMkO-;qoc!ZdQ@t5$D)%LFWjDtoGmibkx#|A``-B?l*=ENKg`Q-xHc~MbSP!$$W#?q_~n0Wt%X`qS3@y2Veb%*cA8~Tb=ZWL5# z^jVMCR!&ge&!Mf8%-6|xybRX6Z@Rbsgp!q%^m8JmS*Z*>FuBkH$3yWpv^hFPe=QCx zHVALS6({i%LMZC=X`Ks<8r1-m+c)Hju>0Xwb-2yR35K#^zbtR{aO8WA9ALbNn^g%L zAE%a!tr_2RZjnV@k5btQM(XxlX4IMWrgORBVYcbp7OHnh8?uYzI1i7R&eguFu(v@5CQF`NuK7 z2|j=*`i!d7)mIKjw~8l1*jiO>!ivdq71tIG`SgdqYo|WWZ%otPUi%!f$(SrCEJh^T zoSzdN+_Ej$9K>f_`%pHR-ORue3dsIEDWGA`5Crgqx0)+* zHveNl{#a8ZVVDVi1A+FLU;6pYdkj~{=dXBjbb0TEo1fB9FX@tP zN!9bQ1e$uD%tI*4ufmfO`HIxOS}B`O)mGDZF0yfNhDG#jL2KLE@SS^nwUQ)V=VuD* zh7KGG0!o(D4p5=EKt;I;X2hNudV%5+6_slM=@kJ1Pha1s* zQ7Iu@A^7tJ^&9nvre$YRA9fXtSk^dxz|pvGJSjcz{!R@IU+L8R4kR>g-4Kd%bXUo- z)6nz)!B*O|mDu1%jqmft#^@vE(j@eE>zc2S@Q+@XlBNga;-6iI2|SWw))5zNORoHO z4g7+(`1ywsbE8z1dunATD_d`ovyMMNZb82MXAy&*F{`Wbm!9#BRnrqsOl~2nOTMi2 zyp5SJ0H!22r;PmT5`%&fY5|gF4ysdxn`wQb3cC>-gezhnCnVf37&O;#XLK`i%Y!M2 zt*~(Bo_BG{i0xJM_ViAH#)8$==R3dpwmc=}8Qb^YPMB{m${ z6++2{=P#}UfO+uVu7A7gkx4E6P7s_TaC3+6!jw@j`U%-q^av{CLQvc}Q;je=s@v}{ zZY3^k&;1xk*gAkRicLlaBEQ(^tWdLcb8j{(dYC;6g+JFnGl}Z&ny?!e8n&1nh39px z?loVrKl931J)L&H95Y>S#^>|SCV8DKGfcqv0#h(7=sLXrFS|236+AK^K|!(Clrztx zsL8bA_Atw4kQVY911K%iVyiG1z9~^?vQu)%)CKab?ns=@9+2w9V%ZtDB&n)dfFqd| zFx*-xk^Mk6#_p4)df9G(%Fcd?I>EO%kLCmr6CHteGT=R@wpn=lx%5ZY=(-4r_vGU++{q`3)co#osJkO^ZsF1+&nq;VUA#PqUnpc z6JO|jz6tj*%wzc7t-J7urXPLgG%>k!=J_&aR|f^vd$*xyR{n@f9$L%vEfI7ISD)|YId?iu=Hfi6KJV^*kr@=|qi1$LhdFoCQzryLS4iDz zVl;;w!KFHBAQ#_&PcWO*Zkq;MY*kxTSBP^T(_9`T(e?`2sBz`Z5tZFMOJQ_BIpk2uBks>Kg@qa>2LJ8_5Yu_QVW8`Im^tBcvgg=Q zNxu^rRFc4rKiz6=Q{r>CIpCsm#bf2#URm+J9e6p`RqLVhx2N{|Y2|*Yc2rjHn}Uc( zK7Ds6D84FToO|$#SQpnL1fAAtl9Fz^PO%oq_mw)0ahx=tyJnx6p0ghA+$w(&fFA0R zT-qCFWvEus8WUqvdM`Oc{wi<2Z@Iz z6{bS)9z#`tTC$Ign&#c&b^+G?^s}e2x-bK6ucOCKXtjMn&vJ!q0+aKe)ZT&jCGO-d z$fdK0(Lwxz%2U^*_+)GQ`^o89BbvV5s`NdXnRDNT@@Xk1#CO0SR`u$)%F0Y<0552* z*(*YRwZjQGx~ zqnn?uX?0A}tJJi0grI#pse8cm^lTNOY1(o%Yd2T%6q&JgI<~cYhm9r8dGu_RM0O&_C zu#pnsc0O(Isw4{a6=Oq@wt)A+eK57upl@eSd9|e}-p}oIt7Z}hwsk46Jugk+!=A&8 z?LA``P=5=sm*s$&8Fq(|TN9l}vmWIGI%Yj7R>k#Onoj*h$5>k=?n9|!3|CGY2B!7B zV=pHjT0{Nq90zXETu7Y;>Tg6EIHe}f%<1h`Q5R!tQ`N1JBEP)vPpxbXDA@CUc=u}#ewz)SPQSH! zb(3bkqG9Q^2@^DS7PV7x5*LI=cG}!?R_jgczRTt`xF9Vl%zlZXuvU#^ub58p`P{eq zrm>!(w}%|DyQX{Nxl3-QXR0!K5}B=VZ^f&!gyyN5H451FJ1bhwmknHZZO?L)nfPFch-UbD<$WN@31aGFnSENtT_G@Ce9=98?u-1)M)~bho17O{T_4?+uHK;rcZGy! zodzT8tV@Gxw?8)y;mhRDc{lT4*szWGEQmkl>z}XOixZV^c(hWCT}6W|5$?_8{}|7+ z;J!w0WSFYw$w6~ga`mvWN@zdYg1hHY+)VQRnc!Ig?c?dJ8)~V;!S}s`0&TnjOCfR1 zR&=zmzN6cqzzBXcIeP{3GPH>(!W2>Dw3t`6E5m1SPk=y2Js^4gn?Q*<#>PZ(!)oh6 zYRztp{@~iGSE{egO{j9ugqt`HUVNR8{C0h^;N<}I47^6#1U&*SpZ$9!+;Zd;ic;iUEjcPx4O0qd~8rt2FKh-O1;#x50JIRhEqgVT$NTMdiLBdxhB8_^cx7smKP zYpx}dT&kS+HByB*-2_b2;?jw=*K{$08;2g9>-k0~`Y{&D!Jc+=VWF2+?5N!p>pl|l zS_nu-VKvEnjR*1w#cRrDu9F4^#%|t$joigff=P}m}Fq59sFl&#gwqJ&$E2eLGR){6=9{P;b_jSZ zE?#e2^R&$t*ynzsmZW$)k6gCzX98A=CT`6^&bT`Di`2%hs__Uq+nUoa#!1U2vw$II zYm0xzszj`{wYhp4Y$2*Cwu&uQeKYg-%Cr3siG9S47CENo&-FuUf5divpm{1;L~R)S43~u> zNTGez0<+q=+lZq%sdN%XDCyr@p-G6$SZHNZpS4S=bn3pp#iNqlL*u&6-}{!BZzdk~ zDPmH-KUZi(v$3d`%Bswp=V=cFalb@R;e?%`vL^$M0f z_o6PNMf}f+KQh(PX2){@?^HtR#>!~KE5$}w=@>%$>qVG!(!{j%9T!$N7yCOTk`R~~^od#Zq6K7YkBH+Bw zKU%$zc+oiT1w=osy>z(ob|_qZVk$jb%jy$&w+9@N8R@c!$@FD^@jDY=@M-f3>sL=i zGkYX^L)V)z^n6%^_OnkBNY@{er5R@>LPg_Kl-avbv(8SfoKfaYV)+LRqy%MvG`oKQ!^=SJtK3@@gdrMd#Ib)HSL)^m7X$UIXJIhCZ+$XIY zTK}{d-v?jURy+!QQf^#}LuA6aI+c?6_f?OPz~659?{IY(HY2wz^#{aWMc#NGWG~9@ z4xSOI8qy}1>3p+3VfEY6DQL1 zIoSy@1M1;cPm=ASR3XwUugS%1$@M)#(r+1Gbf(gGfiO|l8F z>fez8v1aVjn?&IWSzWyrgo+^#ggKVJNl=!akm>Yi!&z5)1y}Wo*8;uma*>Z`F!K4w z9pB@HVC=mYW)~b`^ji)Qi{K$kxe`L-E}E&@RcucbJ8ILyLc#S3sx`Q5sz9lr=eV$I zx>)Y0b%tEgLVQ-wG->*~B) zZBQo7W|75MWpRcde$Vx~>e-@sra78s(4S-_znAPNY?B6V5VPyfGcV=iYsc~ww- zG}qq+%g&rC?(gT`UJLaviD)`1PG+#NUUw_sb?eP>Iksqgu}59^L{(iCzIC*O?Uky4 z%>v|5OPfZ1-9G^jS;fJIifb;P+vUn9=LEe`Im!3m%VP9QWxMbJ~|nnCY!r3f6Nyyk*+)g&9eZn#yo zkcQnIq<`&a)8^WtF(j9`1`n}{#tnFLvOo9cruT z^T4Jc(!)5bJ>X57zmq=r zv{f21X;uG2KOCa7KV@!P5R5@>_X>z}Hz%AnKpSHzXt*_ui>mUJ#ZsjtMi&~haYJ#! zC)tiTUr=zEbl?hi_LPrXBy`9=Y;bd?CQ;aL#^9T^f8msjr<8@=veD>s+8n_%J?-If zArS(k=EQAt2lTy02fUm3v0Z3i`yS0bFn>2hW~+i)=dS zILVxa!Yp`<=a|`&5{662H}p*K1^2{P%P3#U-BD8zH&>t=7oRCYjq}_i117G4W4K<` z+ci}6+UoGGc=7KpJGz&ZQKKtC7^q5%1Q$cRh{UEzo~iEJA#4{ztKq`Vrhp&1+@rkTN}%J8})MOevF{~XdVLSY_d)^g*?~~wM%l^(H6qS%*_q> zK6NFwHUAl(x<=mkhHU#|CimN{nkwbJ2nE-H$<=DvT7Ouw@%di!i)|Me17*ql)JNa1_@++N z4jbDuCrLIVV>rv(UYl$VC_#aT?{{u*fsu#(AX~CMMUkda9es4)eVZ^n3Cqy zn1QNAb!uvgmLcTJFkcP>FZDfHSDIpPjIt5U-CG*#8r9nN3hN4?#ng4dnX9jc`MU3a zk87&8j&)_IStX_%D9Nd9i6hKm<>Q~%c{E2ESaa)wW>Q2wjqgsOswnmauH2*Tcv#95 z+G<{iWq?1~Exhf$-sfZu92W@2098rJAQRoX9Ue$5>WP7rX8Cz2vzD6$*;xQ|Ari*_ zahTtLh8@y)&WdANcRs$hR69ldac{RF)Af7)Tqk~%`_-_WXM1U#5z{lT0l{jou|y&{ zsqurz!`(OVedlRAvztMI?4otWX86-iPKY@>W4>wg-Vdh27Bw>%#iD)M#=+n5<``av zrD&8(6h5B6S*Zp=9wu77h&=q+-{4QG6u71Fgf9M)5cd2F+xa9CXzuxqaUlA|AQgG* z;_8TmfX(^KvP~Yv#^wM;C<$IWNh~xg8EM6kczTP3tl+DdBHdjL(;no58padP95#Ng zOT^Ke#<3_i;p$MY%ca5}m!kc9U14N4m%t+-t8@Cab^eF?Jt1a4f3==K0~pf(L-y5 zDHXU&bT;Ily!1ZiTXkvjSLC-;r{aOVu*b6)$iuGHGx(BtpDCd0)^dHSyUq1X zhM1m_s77abTux#DF?0((pOgDIucbyyYKw}6jjjghWcKHjsIhCJ>qJh^F&th*rYCVI zq~>&^;gI@tnm<$XF>N|-B`#koyD8c1M*Mo@79Y0GRE4E2@z?xvN%U2#8ZjUKCq8l6 zLbRY~yq_%g>+QDdziXD}Z5oK8Dgxy-8O9p_vSWZSs8iU#zYqR_IZMBGMRkQsyy%(n(-De)01@;{;of-vW9P=iw=9EPfoZnm- z2G=(5N2Zt0C9-rTDzBeDP2UZez%o8to{jhxTH= z^kac^>kwgo!-nod5!(uR&vrPdoSvi7#$)-M=-n#Nq!&8{zx0rL){L7(i*^3Kb(BU& z4#cEN;x>f3R*d!(N#>xsJzVZIV}-Y|$yI*A!XvkU->GeOLSygL=A}1JOJ6KFMr8&; zd*9{tRS)v8pOWqUeCuemYX07_4Sw?!;JTl`KARb`Nou;fcwmh$b9HX%)29HG%D~PV zmk#H}{-0u*8&EC+_fb=_8oxkT4zUOY|AwsHH`mJ#qRCue(A&bB){9@ih=aA`)g26f z{LvFRXy;=YUeP`Vf)7^>?@Y)BgUC7?)vCgMb$0u=znk4V_mhwH z>8~55RI=}7EnoK^mpshd&{iU8jF5*NMt}ltYfaWhX)_&NTc}VgNL55)K#v}>wB3~% zt_Q)n%Ty!!bLt_z>xa?+WYFisJ`uQK}s441q87`NhKu*lK1|kHKz5*P?@Br4@2WZS6~bkCP@gCm)MO=IffQ8L!YAYy)e7u z4@nqTKJKfjk6gJY7>PhO?M5_sPcB4RXEGlZQaV^>K-bm{CcwWak$4@k1$YvuleiGW zpjpxy{%5TU%M%|`!WsHR4?w~jnk(qZR^0No$>zD+lP_1#q>l6p0pM1%V`%BRx$kZp z<>Sd>r7+#|6cBBwIS(or+EoAB;-u2{Drr<;@KfnSt()PM;(n z+>a)?b5^)<&AcU}R|z*4aArz6YpvRW(;S^(C!8P~F4#^iL-*T=%O6VgafD8Wy$X6Q zEJCey*(@#|@B}>~qpG+culMW>2%K3mjJz_k!~H?UOMq9VIXvvaSot#5m-w?tg<&HJYd>W8sJhA7Tz!O#5U5NLuAe;y znSVXFNB*#V23BvPQw6#$%U_yQC=6{c>rPvS^id9H77fw&ArZJU=!E1V>#(UblM3Wc z`DVD&Wq7-5zK)v$UYF8-1oz=!velv302#JBbjm8+UnI@`>%Q2@gg=P$@J%>81>(V3 zt>oWwEj_*CY2 zD}azNt20(Duot&nv)!Ot19k*@9Go9KY{CoD9zEgO5jq_ygTgv*@8G9SRnvLc)&wk9 zsNvTHnUxU39#Yu9H0ez3WlgsFOf9qm2|v!f?_&^>T2|i>D1Vw7sE^C%4j(}E zW(wUAKvjB7?a^&I7d|fKo*dgKMUUDpS%fRX^lq6y$M{ z&Pkf3!FukUdxNu#laBVWwnIM?K)xzgU_3h3v&;OHT_)~~Dp6j28#eoWGHP?0`#pU8 zffVeWyMw80gsiN0X|<_zzoOLzO;>up1?lRK0I`Y&`=Va@%Iz5q?>^wH6Qb6B;8vnT;_b5=)TzpcL>gZ!2n zszSdinz!%SSC4KaR>j@FSaSEGMJ8B#M`)pH1MuX-K1nKh6!u7+?8^%JCRSh_gISYo zJ_Lk(HyFSZ;KiBLnf*-0lbudU-I{>jX&5V?dIyUd6Wp9pt?uXHFYJlg2c5K8Uu6jx z8Dd6GK9hI}h$kff4kM_1N3rn)aMbcBVda?$Pqoo~EIex4PSDZM^@45IB-}jB*g0wT z@P^w8a}Jk`&Kz`iEfNS{u>graGYa4$>Kjh)-ID;iqbpZ`>ha?_VX1kz_iUQhubaXn zOqN7x1V~s*$>v5|PNp{nNgdghu%AW85Xy2|3ha_0ANnm{E7kBV>_t9;eKBmbO$vHI zxOeYv_6;iG38rkJbsfVedR#lr4hTk2_5SOMg^v}~n~mS^3iD2Q&*ao!;Z;no1}`B{ zmg7veP@jaI%pmXZ$&L7OAZb!RuH=bk|3T`Qr|@92C4Wi%x9=$}R{RD7CW|FZ!9m)D zkE|cck_=we-WBu&yyD}BbgjjlKQ+C?l$`nYqn2GCd!~s1_^MylYmMplj-W?`6{{y3 zxT+2``5`=7ThgEA7y=F&m)qvKy!F7RmiGd)*)^w+yjAW+m!=h*@qC7#;2hCrq-BCW z*u=zkjhpVRxS&S&H&(u??A3z#>D5xZ)TCApAU(U@GnO{23jHJt`ABdt!(=hd{sFCa z)TRzRE`Z)I1XcDqBuA^u^7ONwXk6(s^X?VgADiAAV7E_=T=7Y$>q{1=Ge?W`d%n!s zqNUJ@yB8Zxcy&xmdjxp9_>3k3;*(S0<~(mtKvezv+vz^`Z#1B%&=?ydn@`&Mb+ z?!glu4}s2ZcRhoIO%u6EyZ9bJ5t~^&9bS(br2;_8D)uIwK(Gnh!Xj=%U-^9oP&T7Z*}x_~^0c!^Ib`&_R?;ebcfjMm!m3I1fq$a*12$vX7TBW&*W-OYL2+2j2*?k0YOPn}?$iHZ+d5dyq883qB;5ciiKCuwc( z$!IjrlLwD8I_TKV<7T{Ht1RrvP<3Y0>h~+U5DTi!@#__}wQ^!)h{MgErx+GYWhaPU z*F8mh_uUOIHcE$y8jk_M?EQjj3HQcxXPQ9zU zL8fVKH9Z(L{^YSr?YEh)_E&Ms7#rttP_XWR`xbs{qTb)AKSivQ#?JZ3?+;se5U5yC zA9Mv=_v#Tj{f^@{aig&z{iY5~FM48sfvc$stqj9D?zn`cdm75^hnf#Jli;>E6%ClQ zkzTnj0y-pXZT}j7AJ#jP0h6M;suJYLAkPxgr1bQ~;0C_3}bBNj) zy{6j5AEG^^{6BI~(ti7RAeO;=?K80-H9a>+tb}kOzJ%5Z=@(jVpi3Tqf1W z*bWnwFGVJsJdKTD@Xptg`5Dw0G_m=(T%pE$eMVYRR&mLygN05uVi~m33HR5d zwN@IJJ9N{>xjoePvl}B7Ewmj>LvseVAap`~sZXd(5E(iJ0l)#c`*V#*%GZRP3m-eG zZ=D4~1(XQV^6+{l-QMJtDIk&0_jYw&LQDX&035U!a`4yCwN)73qCU zGNax@n_YyjGo(#Yb(LQwdQw`Va*%AgrO0lDosezN-n4k-&1hRMI)_0^+y}KJDV#Ow(*t*tdSP+fG56|wKoC*y;DS47hRXa9jsVWr{ zjt8>b^fg!fxNf)6pw@XoPMhkQR`tsyHwEbEz7hB}181??M@PD#?Pi!$c)}g~=w)mY z{4rQbV@(w|A8E}_#0wJ0YQdnPL_2z%`Nzwc1b}AzmV%sHknUoH$E>p7u77(_3-vL2 zy)S)Z^Wx~K{dG)s?v={zK7m*zBf__0Jd0GYo_U>6(xrTGi+I7=L&7xHysYbtwSi7s zJ73|A*o(l4zAQjZyN^Z0{f*5?rOU^rPAb3h)5klNJ&Hbkmd{_{%Dclk3sJ;Ar8Z(Y z7m+KTVm#iv#)9h^A1+VC+DkwgXjC2-v3{A(oB!rf`{h!K&Dd7Kp})7om|%M9Y)9l9 zd#L}=*PT2&v!uI8U?7R4-FW5b<+AHFCm0uc;k6Avn+9kq-Vv^Yu1oX!ynE7gT+uaV z*HCF=2_)X-9*j&(qPzkEMP`w#?T7CvrdD=uxF{7a1?)u8`bNArnB2f*R7XCdZz%^6GqbRjRn&DZg@%%|N=Xa#TB4 z3U7R}!kabT$-l$FAVV^WE={`r(yl2acHr8*1I~3*(UIQJ7^RTViHxG!Lgh)Wl23Y% zNm=9fa*)Z%Ho-oGIM%g%BoR4GszRRwb`5cy>B&d9o1;Oskpw#9Lh(qCo2sQ2uMNd? z@Dm=}u8L2`J&`H_^HWwMK%j=OdK7x$q916D=UD}V-tA-7%p zv?Fxn74G!lc$5Pn*VmlU1Q+}pVN&F5n;~nB-WoHsFMr|X zo58f~K-Oprq__>guVQT;{A79Wo@yz7scmp$j5^hG^{xE$o{|CIR~$(Kd>kA1qtVaqV*0%4NqUQ4;A$NOzLz{&akYWU`{uqp1?pSuQG09+b)eLqKN}*eeqE9 zbiwUJi+wG77Tkxj${F+d&L=FA#28bTNem+C80)k=D6Uy%HQvkK94yOVdJ{tG+h%EI zL)!Sr{P0Iq;r?sx0!&sDtwm`2(2<`rRs{`)+XKxGd z{awS>Oldt`Wft_DIVAVbBxV4N5&$8uF;n?FNBAc0`j^&Ml~4X;y)^(`R9@yKP?G$! zNbldjzK9317ZI0@0lheWeFOj{2I*4VXaA3yEd#9OPo3J4C%#xs7yp5Iki|tF`!c&RVN2NWarM6$i&e`su%|U~Bu_4zA6_)6L|$0LMHcZ_ zeS01iq)c3Utkj)t$=CXK(U^FK_?C=3oxHQ}U<{>zxtuXjy}$J0jr_S4fh+>ZK#_|+ zWz_>X_4}Z^l^xyT)SVw6{bDkp{1>iZaAYj)xp~U90?)KqF zg03MSddJLU-wk@T%3vyWlbO!!v`QZ4#j zMux69PUK9aH~uv=sBe{+2L?krdOCUR@B53zLBID3qmH2A8=G!@0LtjUR`g#qonx6h zu`_}TUHeS}g6crLvIZ1_mk3d8X%sZQ&5L3H@PPvY-G9P%|9b<8GhM|_bXbXt$krfy z8$tcrN|NgrB_OW|e&Ci>GWem|^>wK!B2MUnbjuCY0La8&cl^A9gkfKlA*O`q-)an~ zqA#aV{{411^3ABmWW2I?>H7y!0F3$fh`PUujm2pIMvjppOG^LOQ{vJ@*8G0+t1OS( z@=*J`QE_)Wt^n`_zGj<$%{f{MJMkq@Y@zkzh^5u(!4`YQle}LnCO$zBkHx-llB7(6 zndo$2<*;EchWD_EJFvP z!g+g7mD;ZSz^^~9`+@glip}w7-}?6j)$&(Z4ikhR$6`k6o-hJW*41gjkK?VW@*}l7 z8X}RcUFJ@}AuzYeglK=(23~ZuF)V-j<p7X`jmRhg?P~ypN~Py!p$1h;GBC_EOP&W0yfe(fo?}eZ!7m zhh1XqpTgoNQ>OXBXEGq{e%ZeXl@%3;7VAx97V`5>5fr^c$>x@F=hk1Tm;`x&Xk5$+ zN+uiMPn*s)_%|<%5a6;#{xlvg`}jXGvmZPdc&SCy6Wnhf~S#Ld+YiBKI4IqEPTJDJrd8 z(*FMbHxns>bT2*0qBy@tuyCGImSO81t`jG&R->09&~ygjG5LH&+*jNjVhJ7wsKCs> zP%|=XQ|Bm5yud-clctXkSs+oz$yspmxD7^;eDq`|@FSQN?lms}3f&a_DqjCp70_T&QpvV|IL{Ay)Zc9KwawvMr@$gQ94c>X=3%b1=tka*tzW;gzRm*}g&kS|@bsQ(=D z-(&pZJqQi}rzg+Etn|OBd|Miz^3!WJzZy&Zdi~sH#9>#uoXedd}Ru~X*^=HGU^NafHTM3xR z6#2@^HVl7G`9D@K4I7vRYhc^IO~3yf2s2~{2F1tFME^WH{ykb=Ah2+RX)fmr2FaC~ zKp@bf=8=En<4Bjkb`(ajA!BPaOkw_IYmV zKeGYIW$_`Nj&-0-aji-h(OwIi!Nf%!q13dauy zHkL5z<4{R50E3wsVy=`9)F(6hvz`~|j#SeL%=)gZ%M;UO>M^fBt1%exDSV!YBFl4Eq?KQ@`mvMjO2Jbr4T3 z>64Fqk5FCH{)XSkJ?{C8{tT>C_Y`lgsd_1*9OXEbR4*w)PEeoc@ij@Nx8mEmCbEc6 z-d||UCVG{+v^#Q^3cJ&s(20EA_eAW5@;Q1wxJUQ4?}ZN$uK;`ld5sZM zT4aaMv#{PM-1gi&w)ntOP4$Bk9Q!tg_1?$D)_L=Kew@qz^~=v|1jHzx97z|pd0_^> zkL{oOl6623Xd0om@Dup)mmm>mdKKtz&Bn^=I{Z{#;tIYnW+||sjLzue7bV7|_1lDN zKBu%UDo`B`mUaTurP>Mk&%I5JJ{G7=QE6!fHhLL-)gim|{;`eM7b8xN_PTQWnpm%k?UKQga%X)q1(8og z{AM(aITN2`)0!g>_b!vP+H^SRn&3rVwLIOJt`fHQ7=Np>+_^$I8xtGq9&@TgOj1{c zH(E`n@de2@;WSmEHRkb%b5YzL`)FUmYn(JcCe9A@VT@BzvG|+b&SJKLQ-Qmgl2CO_ z@5RWsB`nWNYV_9HY%qdeHX0+0B?iueaYeI2)H0>zo;*oMcnr2j#HFA4HUs{5%yQ&m zM+jHCfH`XXMMwR$kQ)G2$(`^xIpiTYTWwOiX*&LFPZQW%)Hze=Fj|7V!P<1EljvaS z3+CUPoMM*TR+4h-N$8lYPEPisZRc}j3`P7R8(f#JcOMb~iGCwILKDQ6YY-&8Kv(5a z>f6%Ugk@WmU?UkL=h$5#zi33Qr`1j;UxmeIx_d?@Pg4p;8}f(j`ZejQY!Z^iro!P{33|Q;#lR9fO+CCWdnAP83yO${C*;)sWrmM0WZ)aQ+8PB^?rSnV~APC+Y*31eaUw8ORN0Hiy7xkO7UhDri6g> zRZmbPW^=rx3fo(P;|Xf}9Y9wD5F=drtn_j0aRVetl01nXw6qWO*RKzCAG@Af1=LOu zH#|G4u{$EYX8>2Ds}_`XwXKC$4^%z36xq)31*G@Jo-%x&`PQfP+fF<{*z&qz`|ha_ z-_sSdqq@k@NxdJb2_6>|5Y|iuMdt5@93~!4-6>fRBDK=n>Djj=SAfBIKlFTe9@V>z znsSBH+UFY&ih2~+%mveOAJxf~%)Q?6hK_7SYp6ss=3e7sh!mXqB37_0g8WcC$l++* zG~vt1hghs%x8|Q*p=6;SWNzY2(kbHaV>n0}wAd=vX&uX|O0qvWP&E*=$-+gC0{4_}n2AG5cXEl$rho4NF>6>wyJ72@7ZEU78 z`#ljIE=!=sq-OD9*#xr<$X!$1ENe}VVNH%rOTT}CHBrVwUVB?T%6tZ*1;7gLgS zA8+;Nes84s@lw0Gc$(=D=6#A?w;RE7r=|t6!AX)M;<7GfNl6!7XZ9%h;#y*v6+d{W}bF%K3EpJ)T{P*g{Q3|CfpZ z*X8(0LpvX(gPqx)>STeFjirtdPhmGB-j(h6nh4??hNK#Kl3S+BHOdKithqBM@f$OG zj(9uX$*zWqN~Nc^5E0LrDmBD9YQ|1ymh+Q|_gK7TnX>GOWa94O64Sx=o_i&M7RK+S zEtykx+KeJW(n2)X=0#fh0hJN$f!)Em@Fw}fh3oiok`kK7W}-p5Hv0(i&_8uElMxPY zw3epkd(P?XR6x%JDu@S@^nRa)gWftI3(hBC5ehagHS zklb7AM5Kz>tzP@g&}%F!_!-ot8w*^8oFLCQAqQxdt(Cbl_-3Ho1>0-LTqaL>@9)Ms|6*2KVP!+O1K& znRzQqNm4{g50YM1@>WT7w`OD5ArrV5h&nrX!jts1-qRt~G!Y!B^V4e1pBeQlHxv>* z9Ic!X(#E&;y|w7Z`oHHtc#)#Ka;3!DV`Kv5?~E%+dWP<^*!v-{VY9V6fu7|e8GVkZ z#WQGFiVyECCtIs@?@I*@O!dKwRF$uKz4Ysy$XlT8YL60if^wVi-IC!+oj@a(gf^$V zRz~p6PtEu1^?G+0h$7!F<9kw(JmU*Ef%a^y)`^1=#QHKw9o*~xJ-?uaIiFZBaF20Lv zI34tR9SFs{1@4rw>JQ-I3%trnq#UeF$;pW9^cX-yeOP`Zxct^lD%WDjbffYp#aVA% z-^yR2NHVE%bwmztmiwdN?S%xeE7ET3XM_7JSfB}wcCFq$R&HhPa@LGCzTdVJ##$%F z&XkUL`|;x=9VIxKR|(+;=7fMn5oUELTG$1}yLJbPzsncQ!{O~N7_GId@d7$2FO}0_~uP7yIs*ezGZI)>9W>@ za*Nbso5#WQfIE{t*s*?~%70Wy=6=!Y+RK5n?>mw(|Kx1PLFrzj(drQfu_yMe-~{*e zHfO9NK>55Z!L?MXvgRw15Hi|XE3C=U5A7b+lO`|oXso|Ms|Tjza~@_hFu9rC=57A2 zPGtq5%38={4Fsh%FlMGZj=!=LccR& zhVd}VUV)egGbAvk>bQ!@YhW&TRM0<>!JigE$4iVCR9xYIMx8C@o?+-M@m_shx;*>MiZgQu$;S<%GP_mS$3Oc9>`Ii_8CrS6w(TX z2rdH8u69>$%uzQY0S4Sii&Eo1leDn5#24NCi;c7B){+-tI|K3Rd}Zup@> z@VHMpzeQPvDpEh25EZD$*7cr_R5CDs_25M+3^G!jMKKcJ>me=;VyIM&J5@;;VwuFOx&S&1umr^)G(%MXiM(jm7(I<(FJU_?gG zxNF`MOxu>_x?nRubV(_C`hC=+3j2`L9jrC~?-vBO54#L|gmUjyDlZP@-M~*Bo1Ne@ z85PRmafjabSZ?|eYghkRG@uhX`l@RrapVH_+z)dtqXAJ zegTZxL=E=d`|BcNi;w#G#*(wmPAPhge1xf)hecY9f^_*o^nfDE!M4nCyL<#3!Cuz# zo_7qaz7Lwo2xw8}kJWkMheJ+~7+4~($WGV&@Hkmx>A6~5C+hU*EyY-Evo5OO1x!A> z8aO#eK5N7)o7g{ciMZ1vWII$HQ+Qf}+_YKRHE%!uWCW&BK5DIULKYn?`y_ary&EYx zm_Y1G49u^Jm6+8pkdPLeRPts;D(mGTAYS2h{4x8c@h74w_fYOoF8BsNylaO};5|eK ziV~_aZ!;Wi!i&Bcvrzg$_j?35yK>c!Pj!ubGSjeBLXPC7)ZzXnG6_Z2ar}M8YGHu7 zB6q6M@x7(fT2#&IkndsWP09eD!iM|Dcy0`wDEHvQqsctzk!QOt%Q&-ls%;x81hz4a z1XZQONGCC}EgHAs47z`GtdVd^*;??LarAe<1|#LvaE`glcQ2zt8}Ifw1D(gnW%C1- zi&qQ_WiE0H6;DMA%gCQ*ugDjR?9-{fTum0B>>6L5GbpXTs5`P9tioEx-=hOZfY%>c z9UMY!zL7Mog5QaZiwn)P0A{RLej}3PsTVA+=oLCqpq#&Fv|8qxt@6Q&(A6jH!bT>+ zvD>)BU?UEzZOcwChGa09wJoTN5E|NT!vw|el)s73P*q|nCB+Ij09>FW%?Zj%k zqb^R`b5HxgC7nP%$z2g8pweTbj8FZEI!xJN^rWk+`okVn*vwTw;~94aN2ug>G@f|Q=ulb=yCSAUGKM= z*tnF@3p4ov+!bM>`#UADsur$`Jzf|4sx7OfSldq>Yaf8;ow`{gCaXNOIA-kr+e{Y6K*}K$bM3u)Ak7C z&?R`=ymxuuTUSs}u)?j2f4s^pcVk?SQ)qbFc*iQvUav~Ky2RMY@}UhBP?Xue1_^pH z?V2?+TuiD7m%x(u$|i^~Db0Z+``)%nN-|T=2M_Wd{=+WvFKKo?|9|4RC)}VWSSFgel zFosYC`i(g&b^`m(M&J{VhL#BGRKGj*oZ6KccJ7USgN+%3TY?H!pQiNWM-T8x`sjQ< zEb`~A6xlioSPy?RywbHkS|MoiV(5~m_~@X}_I_N~amS!<;kEDKlorh~_&Ff^f%J&N znM0}1uBv?{d*#z9`M1!XYN@%W*7w~9D**G?wQ-Tp(fl~YoiG7=!0`+04dJ_~5Jv-) zw~=<-i2r_Yl}*#;*j2AX8669Z%MwC$DeGymNgq7t9vyAXd6!{@tT<2kZf@R}A9j8+ z{bYXiZA2J{8X(a;_4%OOP8)%4mq(PKZ&ib(detjh8QlBbSY~}=oW!O2_|{fQ-Px1) zRLDZ9j1+7S7Z!S6(;yZNGEwFHMx}Iy!pq;jEEFXeOj39E<5kmPJ#-@P`rxlstH`5+ ze@!^CZjt!#7=`MSU)XcVYQNVmXv;7*G&c-5CzxTW0VmBZsnr;3u~Mk$1L8-H1)I@P z{owvF&!crgwkpwzIQG+L)n2lrSrZO8yu-Kj1#NbzrSHSaovJXd!|2IUH>hx4uCRDr z8^I$Xp1O5fh^keBz?z>A;UhNPb&=}`4_3v71YJ7&DY#RBtg2^!z%+_BkrtwZ$w48% zjRnugp=@M~jf`8v3EmxAI~O@HFAAK+7h=dkbv2XWP6=L}X z@0x>E&nSLH%OlpKYpZU(eUBs8heElGp9T9qT)zH2=0W4sN@)Yz*~#P}_u7Q;QvbV< zL%cH5qv5{Acm;okfmq8y!Ehl4AGGsIdNgt*MSQHY4}K|sK{O3vfEGkhp`Q4h6~Skp z;Nc=Kwn@|XCF-)R)S(753|Oqd3Hygf83?FWb=Jq$q?g%##&GNWLIlW{S7Eu~ndyXr zX#QEi&%S`;cg2~t`NhC(uYcKJ7!iN(%9gu(WLH7cvrU1~)r{r78qcorHs1>db z1qxM}mXtHAp0V{3<5x3N+3I8s2c_H*RS|8Os4_W9=96^i zU`J8;c;K2Xbcdc^-KlgVnXG(I0%C`8?Uw{tq&nMM&pFPfh`!ahRb9H^zAg@BbOKIJ zk=l~6eNd;JU`$=>Tfz(xAqX}KlBdxJtoe!YTPmSQIrY#$uI z_w3U*`DBlB;fI>@B}5$Wf|jx^DwdO^+WPj@Efqz_RyJ;U&=|2Q+76NS82YR%AH6

=gp0WCX?Yk~eKw)RD)NwF zSQepj`LNUMpE1s@y`99`M^F9$aZ2^Pyd-?DKqAFx(zEj|ty_i`7>W`&W*4m3;2pAE^Hu?p#nttc6Ev6EH>9KP|P4TH-3wv(L&woS_>t|bp)Im&fN zIxn*!qh-OKLsw;r)%vevf`=d7Hke{l*rv-m3^kN$c3v~ZDXaZBg_?m!IZ>zEPT$A7 z-rYGHc(miG7J%RN8i9#S*fkm5{w$UHVMJz-D6a2Bp40b$0v2H&KL&NPccAEUSe(KWK zwVdy2ww-2=RNW)kNYaRXPMy?Cr8JzVeN1>7Q$PV(jin0@kLHE5dgepN+MkYp^%nzA zWLqvP78*})Foo?*0D8@0s^il}+Bk)@s$B3x>U#=S{+v6rDXigE-CzrD!AV;$Ssfm7 za9(+=Hqsjm&Hdg zy2FjVG;NoL%li-^C7D(2Kk^6jAegfp;PkA_mA!V*aa$*6?9}gQaT+ADsxQ!88e!ee z`^BRJp)xjn+2N_c#+WX8$@BZM>b{U^Ejhf3~X^b}NXQAc3JEE^#&$&_nT`*UdZ>5dvCdMqWo0|#p zjs24&!Q=s{YSV=9q^8`RRXVu4E>+KO5VsH+JJRTL)h?33&b)X@s*#zN+QV_2`JGeU zEFVX)Z5`Zjru`ZX1e|U=_m6 zw8UQ*GI^8pkyt$yvzq3mm`U=zjd_vnK-sE}doFd8DH;%K_Uy=yJv+HswJd)H#=SiBOLjXKL(n& zJQng0$9?7*oXi&!Gq8ZcUuWJaIDZz=x^>@m@k`cBJd?J%m(BT(SOi>Y*MIQFFL7X; zK%%W;=j>F~JJ?#lOoQ))Y2ArRPC7p-i13Gn*%~dj-f_sez^@k3Dm#Ucfut5S5bD0u z=l7@o^8(gm!0zg8Tz*9!ejUVKA*M}0jQ{JT0IZ5QlLhwtX{|D-{k9LQ1jB70&Le8; zcz!K^5WS}3Q^$*}Wm?QS{hX;hEpgtoQ|BOGgUQy?-nl$21Ei18WQ+dk1r%pehKvmF zNM6)K9-&F=)Gz8K#z_4&z#Vc&2KGicUfJ=;o|5!z0a8Gon=VJ`+%Oj)KX7IyniLtY z`Byo8wOs{W-y(7S?1^uCUXQ)O-HlrPsB|k&hvv!^8Am3FRmXqHRf(Z^c&oJWIg$2S zs4RB{Yi3u~pA0}AE}nHkyC8?6@=%Vv>+KxSv+NI&5d>a<6kQO(sRt~QUr&k05=s)8 zMqCr*&gNERiC1_0D^w3P2sjR7CZ8a z1Uq8wFKTDK2^5IVzOG(OR`4byy@j0v$Y2fEjBqy_PHoN^#Ms2y0XFVq`L$kO6I3*?6bMY_^oIiF89nmvb zh5OxY99X44z_i`gsZJ~JZo z-iz6x1@iK2%g%es%mc-NUYDc}hqc=-5z%SdhK8ET8jw!kOYg&O=%7!aW|+hRHvxz0 zVDor>Yj-NZOCmwMsuy5RnLc?*G)6Jlyc(*CLs#gEg_sraBXe@l$$i06)_-|_ zyi3;i?UquIB{q2AXWN!mf^tP%Mnzn2-DicCi`uIVm?%tyY7N{`ci<;Oc>Hfg8EY7Q z{-Hn?T>R#2lpbp5a`D?dG3ElOWK?MeQV->`JA7z%8KEmR>24es31PE3yY%$miu)hF z$K=T{y&2bg6Sk{>iwGw}5QRwk6O8&8T;IHf&b+yDdAje_F2wHlBEMxZZ3IQ2Nk@(* zbP;xF&REzX;>><;pvq)Jhw2>AL&NbV%Y}G0yEdTBbf7pZZZb+?q0z~r zBw|Ultj2Ezes9EwcICl}M}wK%{vl5Jz{#b7fOC7~*NXjXF_gQ(}{Srtnd-s)Wde&nQ-B}*Qe2K^t*B%CGy literal 0 HcmV?d00001 diff --git a/rfcs/env_tools_rfc.md b/rfcs/env_tools_rfc.md new file mode 100644 index 00000000..44ff7fa8 --- /dev/null +++ b/rfcs/env_tools_rfc.md @@ -0,0 +1,213 @@ +# [Proto RFC] Env & tools spec + +Before this becomes an actual RFC, let me first write here so we can all review in google docs which is frankly easier to work with than Markdowns on github. + +This proposal iterates on top of multiple RFCs (well... almost all of them). If we approve it, we will have to revise them accordingly. In this doc, let's just focus on the idea and then we will figure out how to wordsmith changes into the RFCs on Github as a second step (and let's be real, the one who's gonna do it is Claude lol). + +The whole reason behind this proposal is finding the best way to integrate MCP in a way that provides unique value, but more in general, it's a good opportunity to take another look at everything from first principles. It's not bad to do this: this is why we are in a RFC stage! + +## Our audience + +We provide value to: + +1. Env builders, by giving them more reach to be able to be used in multiple projects that would otherwise require adapters, thus lowering the cost of entry +2. Model builders, by giving them more inventory which is a proven path towards improved model performance. +3. The scientific community, by giving them a path to reproducibility of setups including tools/rewards/evals. +4. Infra engineers, by giving them a clear and stable contract that allows for separation of concerns so they can focus on optimizing the backend + +## Our principles + +Let's start from the very beginning: what are our non-negotiable principles that we strive to stick to? + +1. **Minimize deltas across a project's lifecycle.** One of the barriers to adoption of this tech is the deltas you have: + 1. Across every phase in a project's lifecycle: Training → Evals → Deployment + 2. Human ↔ Agent divergence. + + Deltas hurt every ML project, but RL is particularly susceptible to them. We already know this, so we should provide a holistic solution for it, by design. + +2. **We are hands-on.** We do not stop with providing a spec. We should not refrain from providing quality of life features and ready-made, importable code. These need not be part of the spec proper, but we provide them because we ultimately want to provide value (as per above). They will be optional. + +3. **We are economically opinionated.** We do not refrain from having opinions about how we want our stuff to be used: a fully unopinionated project lacks a spine and delights none. However, it is not our place to pick winners and losers with respect to AI research as we work in a yet-to-be-crystallized space. So, we see differences in opinions in the research community (e.g. codeact vs traditional function calling) as opportunities to validate the flexibility of our system which should seamlessly support both. We should not obsess over this if we feel that a winner is clear and that taking an opinion can provide a ton of value (especially in more established areas like e.g. containers), but in general we should not do this often. + +4. **Our design is LLM-friendly.** We know what LLMs like and don't like. We know what their limitations are (example: limited context window). We always think of these as we validate our designs. When there are tradeoffs between LLM-friendliness and infrastructure-friendliness, we evaluate tradeoffs holistically. + +## Design + +Ultimately, any abstraction is just a Venn diagram drawn over a set of components: naturally, where you draw your Venn diagram is somewhat arbitrary and you may indeed have multiple legit answers. + +So, let us start by littering the floor with all the components without any groupings. I will use examples to ground us concretely at each step. + +### Components + +Ultimately, the components we have are the following: + +1. There's gonna be tasks coming in with questions → these are purely data. +2. These tasks are landing in a stateful world. Note that this is true for both deployment as well as for training (going back to our principle: they need to stay close to each other). +3. These tasks are solved by the agent that interacts with this stateful world via some interface +4. This interface, and the state are made of software, so there's gonna be deps and binaries to take care of +5. Code execution and/or bash access are technically optional but will be there so often, that in practice we are always going to need some form of sandboxing + +To drive this example home, let's look at a real task. + +Let's say I'm giving you a database containing a list of employees and as a single task, I'm giving you an ongoing task to stay alive over the course of months and maintain this database as events happen. This means querying for information, but it can totally also mean mutations. People get hired, people leave, and these mutations need to be performed. + +![Main components](components.png) + + +I call the initial snapshot of the database our **state**. I would like to zoom in on it: + +1. While it is made of data, it's not part of the dataset which normally contains tasks. You can have many different tasks operate on the same database snapshot! +2. While you query and mutate it via tools (e.g. MCP), it's not part of the MCP spec itself which only deals with interfacing to it. +3. This snapshot is relevant while training. You are essentially simulating a real-world scenario. Note that it's critical that we have the ability to reset the db snapshot to its original state, but **crucially!!** the model absolutely cannot do that. This is the function of the `.reset()` method in the Gymnasium API. It's a simulation reset. The `.reset()` method is absolutely not a tool that the model is free to call! For example, if the model decides to drop every record from the DB, our reward system will penalize it and it will learn not to do it in the future. We would then reset the simulation state back to the beginning, and try again. If this were to be exposed to the model, we would have a huge discrepancy with Prod as the model would learn during training that every error is always recoverable and thus it will have no risk aversion. + +This is actually something that existing libraries do not do well, because they often bundle it with data, or directly with tools but unfortunately it does not belong in either place. Furthermore, let's make a note of something: we need a way of switching between Sim mode (Training, Eval) and Deployment Mode (Prod). Let's put a pin on this for now, but keep reading... + +#### FAQs + +**What about stateless worlds?** What about them? They sure exist but they are not all that interesting so the honest answer is that any half-baked library can support them without much issue. Even if you are playing chess or you have a Python interpreter you have a state and we are talking about the most basic environments ever... + +**Isn't this what ARE is built for?** Not exactly. ARE/SIMS is built for a special case of this where the state also advances independently on what the agent is doing (so, there is an event queue with events firing irrespective of what the agent does. Example: in a self-driving environment, other cars will always move if you decide to stand still). Furthermore, SIMS is further optimized for phone apps talking to one another directly (example: someone tells you on Whatsapp that they will send you an email to confirm something and then they do send it a few minutes later. Which means you have some connection between Whatsapp ↔ GMail). Given that we are just staying high level with the idea of a "state" here, this still fits. + +### Proposed abstractions + +I would just define an **"Environment"** as **Interface (through MCP) + State**. + +* **MCP is our interface to/from agents.** Note that this means exposing every action as a tool, including actions that are not what you would normally call tool-based. For example: chess. You normally would not expose moves as a MCP because it's not a "tool", but it is possible to do it, and you get the benefits of MCP. + * A benefit that is perhaps non-obvious (at least, it wasn't to me until Pierre Andrews pointed it out: discovering the action space is not trivial. MCP naturally solves this as it has a way to list_tools which can also be used to discover actions). + * Every query and every mutation performed by the agent will come through MCP calls. + * We reserve special methods – at a minimum `.reset()`, we need to think of what else – that the model won't have access to. We currently expose these using our HTTP client which is a different path from MCP. On the one hand this is fine as there is a clear separation of concerns since these cannot be called by the model, on the other hand I am irked by the lack of symmetry... + +* **We have a State (or Snapshot, or whatever we want to call it)** which gives us a way of instantiating a particular state of the world that is understood as the starting point for the simulation. + * This is definitely true for Training and Evaluation + * Note: even when running in Prod mode, a state may still be useful. For example, it can contain OAuth tokens to let the agent identify on a user's behalf and authenticate. We will need to figure this out. + +In terms of responsibilities, I would add here: +* Sandboxing (code & filesystem) +* Binary distribution and versioning + +So our example becomes this: + +![Proposed abstraction](env.png) + +### People, not just agents + +We need to battletest this idea by trying things out on environments meant for people. + +Assume that we expose the following tools via MCP: +* Screen (which takes care of rendering whatever you are doing inside and exposing it as an image... like an actual PC screen) +* Keyboard +* Mouse + +Then, can we build a Docker that e.g. you can remote desktop to and perform some actions on (e.g. play a videogame) and give the agent exactly the same interface as a person had? + +## Convenience features + +### Traits + +I can see a few convenience tools that we should bundle in optional "packages" that maybe you can import as traits: + +* Human-Computer interfaces (discussed above: screen + keyboard + mouse, but also steering wheel + pedals + dash + mirrors if you are driving a car etc). +* Bash and filesystem access +* Standard data science Python environment (pandas, pytorch, numpy, matplotlib, mypy etc) + +I think having an ergonomical way of bundling these in code and making these importable would be nice, like: + +```python +class CompetitiveCodingEnv(HumanComputerInterfaceable, BashAccess, PythonAccess): + # Example using the above as mixins + ... +``` + +### CodeAct and ToolCall + +If our users write everything based on MCP, we can programmatically switch between tool calling and CodeAct style on the fly. Explanation: + +1. **Tool calling-style.** This style enables a defined action-space (which is actually more in line to the Gymnasium philosophy), where each tool call is an action and the result of the call is shown back to the LLM as an observation. + +2. **CodeAct-style.** In this style, there is no defined action space: LLMs just write code, and tools are exposed as simply Python functions, so with a single action a LLM can write a code block that can do several tool calls, have control flows around them, loops etc. This is better because it doesn't expose every output to the model's context window (which is very limited), using the Python interpreter's working memory instead (which is dirt cheap). One example of why this wins: say your tool call returns 1M results but you are only interested in results that contain a certain string. In tool calling-style, you need to overwhelm the LLM's context window with all 1M results, while in CodeAct you can write a Python block that will call the tool and filter the outputs, pasting to the LLM only after the filter. This is a huge deal because the single most limited resource we have is the model's context window. + +This feature is a very big deal. CodeAct will inevitably win (it's just better for LLMs), but there are a ton of legacy agents based on tool-calling. I think that offering this seamless switching is gonna help a lot of people move over gradually and testing things throughout (also connected to our reproducibility goals). + +### Tool discoverability + +Another consequence of a model's short context window is that you cannot simply dump a super long list of a bajillion tools to it, lest you are left with no workable context window for your task! + +There are several methods to mitigate this, but in practice they all kinda follow the same Data Structures 101 idea: you go from a list to a tree! + +Anthropic proposes two simple approaches: + +1. Make each server a directory, and each tool a file under that directory using descriptive names so the model can explore and figure out which ones to open to read the definition based on their name. This works if O(MCP Servers) is relatively small and if O(Tools) is large (i.e. few big servers) +2. Simply build a new tool, `find_tools` to go search for you. + +Others have done the same thing, in my opinion with a worse (overcomplicated) design. This generally involves building some sort of Gateway abstraction which ultimately does the same two things as above (what else are you gonna do?). + +* Docker MCP Gateway +* AWS AgentCore Gateway +* MCP Router + +I would simply make `find_tools` one of the "quality of life" tools that we offer. We naturally have the directory-like interface as well which is also gonna look quite nice to LLMs. + +``` +coding_environment/ # reading this, the LLM is gonna expect to see compilers and whatnot in here + compiler_mcp_server/ # Jury still out if we should have one or more MCP servers + compile.py + link.py + benchmark.py + browser_mcp_server/ + google_search.py + navigate_to.py + ... +``` + +#### FAQs + +**Couldn't MCP servers extend to support a state and "put us out of business"?** The closest thing that MCP has to a state is its support of sessions and of authorization. While it's true that you could probably implement our state in a MCP server by wrangling sessions, it's not what they were made for. MCP was not made for training! All the stuff that we have been listing still applies even if we decide to implement this behind the scenes using MCP sessions. + +## From environments to worlds + +I don't think the env abstraction alone is enough to realize all the value we can be providing. At a minimum, I believe we need one more wrapper to ship data together with the environment: while it is true that environments can be reused, it's just as true that many environments are meant for specific datasets and thus it is natural for users to bundle them. We know this for a fact, because we also started to see pull requests that wanted to bundle datasets with the environment. + +Now, if we are also looping on tasks, we should take a look at the whole flow. Let's do it in code, it's quite readable anyway: + +```python +for task in tasks: # First loop is over a dataset + obs = env.reset() # New task, clean simulation state + while not task.done: # Second loop allows for followups, long-running sub-tasks "now do this" etc + for role in (user, agent): + if role == "agent": + while True: # inner loop is infinite Agentic loop: thinks, acts, observes until satisfied + # 3 stages conceptually, but in practice you just interleave 1 llm_call to 1 env + thought, action = llm_call(obs) # one llm call does all of them. + + if thought.done: + return thought.final_answer # some put it as an action + + obs = env.step(action) # dump results into prompt, + # ready to be observed by next llm_call +``` + +While Forge can write a loop like the above, something that we can do in OpenEnv is simply provide the methods and abstractions, and let the caller call them however they please. + +We need a good name for this abstraction, let's try "Worlds" for now. + +**World = Data + Environment + Evals + Rewards** + +Now, we can have methods like: + +```python +task = world.next_task() # samples next task from the dataloader/queue (if it's a user) + +# worlds can also do agentic evals where two agents ping-pong against each other +world.run_evals() + +world.rewards() +``` + +## What I am undecided on + +* Should rewards be part of the environment or of the world? +* How do we handle binary deps that are only for the world but not for the env? +* How do we avoid creating dockers of dockers? +* Right now we layer things this way: + * MCP Server + State → Env + * Env + Data + Evals + Rewards → World From 2f09993fbbf70dadfd2d5b58ba1c19d397c1d71b Mon Sep 17 00:00:00 2001 From: Davide Testuggine Date: Sat, 8 Nov 2025 10:41:30 -0800 Subject: [PATCH 2/5] First pass of Claude and my answers --- rfcs/env_tools_rfc.md | 679 +++++++++++++++++++++++++++++++++++------- 1 file changed, 565 insertions(+), 114 deletions(-) diff --git a/rfcs/env_tools_rfc.md b/rfcs/env_tools_rfc.md index 44ff7fa8..91121aad 100644 --- a/rfcs/env_tools_rfc.md +++ b/rfcs/env_tools_rfc.md @@ -1,213 +1,664 @@ -# [Proto RFC] Env & tools spec +# [Proto RFC] Env & Tools Spec - Revised Design -Before this becomes an actual RFC, let me first write here so we can all review in google docs which is frankly easier to work with than Markdowns on github. +**Status**: In Active Design Discussion +**Last Updated**: 2025-01-07 -This proposal iterates on top of multiple RFCs (well... almost all of them). If we approve it, we will have to revise them accordingly. In this doc, let's just focus on the idea and then we will figure out how to wordsmith changes into the RFCs on Github as a second step (and let's be real, the one who's gonna do it is Claude lol). +This proposal iterates on top of multiple RFCs (well... almost all of them). If we approve it, we will have to revise them accordingly. In this doc, let's focus on the idea and then we will figure out how to wordsmith changes into the RFCs on Github as a second step. The whole reason behind this proposal is finding the best way to integrate MCP in a way that provides unique value, but more in general, it's a good opportunity to take another look at everything from first principles. It's not bad to do this: this is why we are in a RFC stage! -## Our audience +## Our Audience We provide value to: -1. Env builders, by giving them more reach to be able to be used in multiple projects that would otherwise require adapters, thus lowering the cost of entry -2. Model builders, by giving them more inventory which is a proven path towards improved model performance. -3. The scientific community, by giving them a path to reproducibility of setups including tools/rewards/evals. -4. Infra engineers, by giving them a clear and stable contract that allows for separation of concerns so they can focus on optimizing the backend +1. **Env builders**, by giving them more reach to be able to be used in multiple projects that would otherwise require adapters, thus lowering the cost of entry +2. **Model builders**, by giving them more inventory which is a proven path towards improved model performance +3. **The scientific community**, by giving them a path to reproducibility of setups including tools/rewards/evals +4. **Infra engineers**, by giving them a clear and stable contract that allows for separation of concerns so they can focus on optimizing the backend -## Our principles +## Our Principles Let's start from the very beginning: what are our non-negotiable principles that we strive to stick to? 1. **Minimize deltas across a project's lifecycle.** One of the barriers to adoption of this tech is the deltas you have: 1. Across every phase in a project's lifecycle: Training → Evals → Deployment - 2. Human ↔ Agent divergence. + 2. Human ↔ Agent divergence Deltas hurt every ML project, but RL is particularly susceptible to them. We already know this, so we should provide a holistic solution for it, by design. 2. **We are hands-on.** We do not stop with providing a spec. We should not refrain from providing quality of life features and ready-made, importable code. These need not be part of the spec proper, but we provide them because we ultimately want to provide value (as per above). They will be optional. -3. **We are economically opinionated.** We do not refrain from having opinions about how we want our stuff to be used: a fully unopinionated project lacks a spine and delights none. However, it is not our place to pick winners and losers with respect to AI research as we work in a yet-to-be-crystallized space. So, we see differences in opinions in the research community (e.g. codeact vs traditional function calling) as opportunities to validate the flexibility of our system which should seamlessly support both. We should not obsess over this if we feel that a winner is clear and that taking an opinion can provide a ton of value (especially in more established areas like e.g. containers), but in general we should not do this often. +3. **We are (economically) opinionated.** We do not refrain from having opinions about how we want our stuff to be used: a fully unopinionated project lacks a spine and delights none. However, it is not our place to pick winners and losers with respect to AI research as we work in a yet-to-be-crystallized space. So, we see differences in opinions in the research community (e.g. codeact vs traditional function calling) as opportunities to validate the flexibility of our system which should seamlessly support both. We should not obsess over this if we feel that a winner is clear and that taking an opinion can provide a ton of value (especially in more established areas like e.g. containers), but in general we should not do this often. 4. **Our design is LLM-friendly.** We know what LLMs like and don't like. We know what their limitations are (example: limited context window). We always think of these as we validate our designs. When there are tradeoffs between LLM-friendliness and infrastructure-friendliness, we evaluate tradeoffs holistically. -## Design +## Components Ultimately, any abstraction is just a Venn diagram drawn over a set of components: naturally, where you draw your Venn diagram is somewhat arbitrary and you may indeed have multiple legit answers. So, let us start by littering the floor with all the components without any groupings. I will use examples to ground us concretely at each step. -### Components +The components we have are the following: -Ultimately, the components we have are the following: +1. There's gonna be **tasks** coming in with questions → these are purely data +2. These tasks are landing in a **stateful world**. Note that this is true for both deployment as well as for training (going back to our principle: they need to stay close to each other) +3. These tasks are solved by the **agent** that interacts with this stateful world via some **interface** +4. This interface, and the state are made of **software**, so there's gonna be deps and binaries to take care of +5. **Code execution** and/or bash access are technically optional but will be there so often, that in practice we are always going to need some form of **sandboxing** -1. There's gonna be tasks coming in with questions → these are purely data. -2. These tasks are landing in a stateful world. Note that this is true for both deployment as well as for training (going back to our principle: they need to stay close to each other). -3. These tasks are solved by the agent that interacts with this stateful world via some interface -4. This interface, and the state are made of software, so there's gonna be deps and binaries to take care of -5. Code execution and/or bash access are technically optional but will be there so often, that in practice we are always going to need some form of sandboxing - -To drive this example home, let's look at a real task. +### Example: Database Maintenance Task Let's say I'm giving you a database containing a list of employees and as a single task, I'm giving you an ongoing task to stay alive over the course of months and maintain this database as events happen. This means querying for information, but it can totally also mean mutations. People get hired, people leave, and these mutations need to be performed. ![Main components](components.png) - I call the initial snapshot of the database our **state**. I would like to zoom in on it: 1. While it is made of data, it's not part of the dataset which normally contains tasks. You can have many different tasks operate on the same database snapshot! -2. While you query and mutate it via tools (e.g. MCP), it's not part of the MCP spec itself which only deals with interfacing to it. +2. While you query and mutate it via tools (e.g. MCP), it's not part of the MCP spec itself which only deals with interfacing to it 3. This snapshot is relevant while training. You are essentially simulating a real-world scenario. Note that it's critical that we have the ability to reset the db snapshot to its original state, but **crucially!!** the model absolutely cannot do that. This is the function of the `.reset()` method in the Gymnasium API. It's a simulation reset. The `.reset()` method is absolutely not a tool that the model is free to call! For example, if the model decides to drop every record from the DB, our reward system will penalize it and it will learn not to do it in the future. We would then reset the simulation state back to the beginning, and try again. If this were to be exposed to the model, we would have a huge discrepancy with Prod as the model would learn during training that every error is always recoverable and thus it will have no risk aversion. -This is actually something that existing libraries do not do well, because they often bundle it with data, or directly with tools but unfortunately it does not belong in either place. Furthermore, let's make a note of something: we need a way of switching between Sim mode (Training, Eval) and Deployment Mode (Prod). Let's put a pin on this for now, but keep reading... +This is actually something that existing libraries do not do well, because they often bundle it with data, or directly with tools but unfortunately it does not belong in either place. -#### FAQs +## The Time Problem: Simulation vs Production -**What about stateless worlds?** What about them? They sure exist but they are not all that interesting so the honest answer is that any half-baked library can support them without much issue. Even if you are playing chess or you have a Python interpreter you have a state and we are talking about the most basic environments ever... +A critical insight that shapes our entire design: -**Isn't this what ARE is built for?** Not exactly. ARE/SIMS is built for a special case of this where the state also advances independently on what the agent is doing (so, there is an event queue with events firing irrespective of what the agent does. Example: in a self-driving environment, other cars will always move if you decide to stand still). Furthermore, SIMS is further optimized for phone apps talking to one another directly (example: someone tells you on Whatsapp that they will send you an email to confirm something and then they do send it a few minutes later. Which means you have some connection between Whatsapp ↔ GMail). Given that we are just staying high level with the idea of a "state" here, this still fits. +**Simulation Time (Training/Eval)**: +- Time only advances when we say so (via `.step()`) +- Agent can "think" for arbitrary real-world time - simulation is paused +- Environment state is frozen until agent acts +- Can reset to initial state infinitely +- CodeAct blocks execute atomically from environment's perspective -### Proposed abstractions +**Real Time (Production)**: +- Time flows continuously +- Events arrive on their own schedule (people get hired *now*, not when agent is ready) +- Agent must react with bounded latency +- Cannot reset (it's the real world). Deleting records is a one-way door. +- No "turns" in the traditional sense - continuous stream of events -I would just define an **"Environment"** as **Interface (through MCP) + State**. +**Key insight**: You can simulate production (via event queues), but you can't "productionize" simulation (can't pause reality). -* **MCP is our interface to/from agents.** Note that this means exposing every action as a tool, including actions that are not what you would normally call tool-based. For example: chess. You normally would not expose moves as a MCP because it's not a "tool", but it is possible to do it, and you get the benefits of MCP. - * A benefit that is perhaps non-obvious (at least, it wasn't to me until Pierre Andrews pointed it out: discovering the action space is not trivial. MCP naturally solves this as it has a way to list_tools which can also be used to discover actions). - * Every query and every mutation performed by the agent will come through MCP calls. - * We reserve special methods – at a minimum `.reset()`, we need to think of what else – that the model won't have access to. We currently expose these using our HTTP client which is a different path from MCP. On the one hand this is fine as there is a clear separation of concerns since these cannot be called by the model, on the other hand I am irked by the lack of symmetry... +This temporal duality drives the need for two distinct interfaces: +- **Simulation control**: Reset, step, reward computation (training/eval only) +- **Agent-environment interaction**: Tool calls (training AND production) -* **We have a State (or Snapshot, or whatever we want to call it)** which gives us a way of instantiating a particular state of the world that is understood as the starting point for the simulation. - * This is definitely true for Training and Evaluation - * Note: even when running in Prod mode, a state may still be useful. For example, it can contain OAuth tokens to let the agent identify on a user's behalf and authenticate. We will need to figure this out. +## Proposed Architecture -In terms of responsibilities, I would add here: -* Sandboxing (code & filesystem) -* Binary distribution and versioning +### Core Abstraction: Environment = MCP Servers + Simulation Layer -So our example becomes this: +We define an **Environment** as having two distinct layers: + +``` +┌─────────────────────────────────────────────────────────┐ +│ SIMULATION LAYER (HTTP - Training/Eval Only) │ +│ ┌───────────────────────────────────────────────────┐ │ +│ │ • .reset() / .step() - orchestration │ │ +│ │ • Event queue (first-class citizen) │ │ +│ │ • Reward computation │ │ +│ │ • Evaluation logic │ │ +│ │ • Data/task loading │ │ +│ │ • State checkpointing (git-based) │ │ +│ └───────────────────────────────────────────────────┘ │ +│ │ +│ PRODUCTION CORE (MCP - Always Present) │ +│ ┌───────────────────────────────────────────────────┐ │ +│ │ • MCP tool servers (search, database, etc.) │ │ +│ │ • State management and access │ │ +│ │ • Sandboxing (Docker) │ │ +│ │ • Binary distribution and versioning │ │ +│ └───────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +**In Training/Eval**: Full stack (both layers) +**In Production**: Simulation layer removed, only MCP servers remain ![Proposed abstraction](env.png) -### People, not just agents +### Two Protocols, Two Purposes -We need to battletest this idea by trying things out on environments meant for people. +**Why two protocols?** They serve fundamentally different principles: -Assume that we expose the following tools via MCP: -* Screen (which takes care of rendering whatever you are doing inside and exposing it as an image... like an actual PC screen) -* Keyboard -* Mouse +1. **HTTP**: Simulation control protocol + - Training loop ↔ Simulator + - Asymmetric (training loop controls simulation) + - Operations: `reset()`, `step()`, `get_state()` + - Disappears in production -Then, can we build a Docker that e.g. you can remote desktop to and perform some actions on (e.g. play a videogame) and give the agent exactly the same interface as a person had? +2. **MCP**: Agent-environment protocol + - Agent ↔ Environment tools + - Symmetric (agent calls tools, environment responds) + - Operations: Tool calls (`search()`, `execute_sql()`, etc.) + - Present in both training AND production -## Convenience features +The boundary between simulation and production is explicit. The MCP interface is identical across the lifecycle (principle #1: minimize deltas). -### Traits +### Event Queue as First-Class Citizen -I can see a few convenience tools that we should bundle in optional "packages" that maybe you can import as traits: +Environments fall into two categories: -* Human-Computer interfaces (discussed above: screen + keyboard + mouse, but also steering wheel + pedals + dash + mirrors if you are driving a car etc). -* Bash and filesystem access -* Standard data science Python environment (pandas, pytorch, numpy, matplotlib, mypy etc) +1. **Static environments**: State only changes when agent acts (chess, coding puzzles) +2. **Dynamic environments**: State changes independently (database with external events, customer service) -I think having an ergonomical way of bundling these in code and making these importable would be nice, like: +We make the event queue a first-class abstraction: +- **Empty queue** = static environment +- **Populated queue** = dynamic environment with external events ```python -class CompetitiveCodingEnv(HumanComputerInterfaceable, BashAccess, PythonAccess): - # Example using the above as mixins - ... +class Environment: + def __init__( + self, + mode: str, # "sim" or "prod" + mcp_servers: List[MCPServerConfig], + event_queue: EventQueue, # Empty for static, populated for dynamic + ... + ): + self.event_queue = event_queue ``` -### CodeAct and ToolCall +## Tool Duality: Simulation vs Production + +### The Challenge + +Tools must behave differently in simulation vs production: -If our users write everything based on MCP, we can programmatically switch between tool calling and CodeAct style on the fly. Explanation: +**Example: Expedia Flight Search** +- **Production**: Call real Expedia API (costs money, real data, rate limits) +- **Simulation**: Return synthetic/mock flight data (free, fast, reproducible) -1. **Tool calling-style.** This style enables a defined action-space (which is actually more in line to the Gymnasium philosophy), where each tool call is an action and the result of the call is shown back to the LLM as an observation. +**Question**: Who is responsible for this duality? -2. **CodeAct-style.** In this style, there is no defined action space: LLMs just write code, and tools are exposed as simply Python functions, so with a single action a LLM can write a code block that can do several tool calls, have control flows around them, loops etc. This is better because it doesn't expose every output to the model's context window (which is very limited), using the Python interpreter's working memory instead (which is dirt cheap). One example of why this wins: say your tool call returns 1M results but you are only interested in results that contain a certain string. In tool calling-style, you need to overwhelm the LLM's context window with all 1M results, while in CodeAct you can write a Python block that will call the tool and filter the outputs, pasting to the LLM only after the filter. This is a huge deal because the single most limited resource we have is the model's context window. +### Ideal End State: Tool Providers Own It -This feature is a very big deal. CodeAct will inevitably win (it's just better for LLMs), but there are a ton of legacy agents based on tool-calling. I think that offering this seamless switching is gonna help a lot of people move over gradually and testing things throughout (also connected to our reproducibility goals). +Ultimately, tool providers (like Expedia) should ship dual-mode MCP servers: + +```python +class ExpediaMCPServer: + def __init__(self): + self.mode = os.getenv("MODE", "prod") + + if self.mode == "sim": + self.client = ExpediaSimClient() # Expedia provides this + elif self.mode == "prod": + self.client = ExpediaAPIClient() # Real API + + @mcp_tool + def search_flights(self, origin: str, destination: str): + # Same interface, different implementation + return self.client.search(origin, destination) +``` -### Tool discoverability +**Benefits**: +- Tool provider owns simulation quality (they know their domain best) +- Single package to maintain +- Realistic test data from source -Another consequence of a model's short context window is that you cannot simply dump a super long list of a bajillion tools to it, lest you are left with no workable context window for your task! +### Pragmatic Path: Three-Phase Strategy -There are several methods to mitigate this, but in practice they all kinda follow the same Data Structures 101 idea: you go from a list to a tree! +**Phase 1 (v0.3-v0.6)**: We own tool simulation +- Environment builders provide tool simulations as fallback +- Easy patterns/utilities for common cases (search, payments, email) +- Build critical mass and prove value -Anthropic proposes two simple approaches: +**Phase 2 (v0.6-v1.0)**: Mixed ownership +- Early adopter tool providers ship dual-mode servers +- Both patterns coexist (fallback + native dual-mode) +- Show ROI: "Your tool is used in 50 environments" -1. Make each server a directory, and each tool a file under that directory using descriptive names so the model can explore and figure out which ones to open to read the definition based on their name. This works if O(MCP Servers) is relatively small and if O(Tools) is large (i.e. few big servers) -2. Simply build a new tool, `find_tools` to go search for you. +**Phase 3 (v1.0+)**: Tool providers own duality +- Standard practice in ecosystem +- We deprecate environment-level simulation +- Clean separation of concerns -Others have done the same thing, in my opinion with a worse (overcomplicated) design. This generally involves building some sort of Gateway abstraction which ultimately does the same two things as above (what else are you gonna do?). +**Critical**: Design the abstraction NOW so migration is seamless. -* Docker MCP Gateway -* AWS AgentCore Gateway -* MCP Router +### Implementation: Tool Registry with Sim/Prod Mapping -I would simply make `find_tools` one of the "quality of life" tools that we offer. We naturally have the directory-like interface as well which is also gonna look quite nice to LLMs. +**Key insight**: Use a registry to explicitly map production tools to their simulation equivalents. Tools not in the registry are assumed to be dual-mode (handle mode internally). +```python +class Environment: + def __init__( + self, + mode: str, # "sim" or "prod" + mcp_servers: List[MCPServerConfig], + + # Tool registry: maps prod tool -> sim tool + # If tool not in registry, assumes it's dual-mode + tool_registry: ToolRegistry | None = None, + + # Simulation config + event_queue: EventQueue | None = None, + data_loader: DataLoader | None = None, + reward_functions: List[RewardFunction] | None = None, + ): + self.mode = mode + self.tool_registry = tool_registry or ToolRegistry() + + # Initialize MCP clients + self.mcp_clients = [ + MCPClient(cfg.url) + for cfg in mcp_servers + ] + + def call_tool(self, tool_name: str, params: dict): + """Call MCP tool, using registry to resolve sim vs prod.""" + + # Check registry for sim/prod mapping + if self.mode == "sim" and self.tool_registry.has_mapping(tool_name): + # Use sim version from registry + sim_tool_name = self.tool_registry.get_sim_tool(tool_name) + mcp_client = self._find_mcp_client_for_tool(sim_tool_name) + return mcp_client.call_tool(sim_tool_name, params) + + else: + # Not in registry: assume dual-mode tool (same in prod and sim) + # Or we're in prod mode: use production tool directly + mcp_client = self._find_mcp_client_for_tool(tool_name) + return mcp_client.call_tool(tool_name, params) ``` -coding_environment/ # reading this, the LLM is gonna expect to see compilers and whatnot in here - compiler_mcp_server/ # Jury still out if we should have one or more MCP servers - compile.py - link.py - benchmark.py - browser_mcp_server/ - google_search.py - navigate_to.py - ... + +**Tool Registry**: + +```python +class ToolRegistry: + """Maps production tools to simulation tools. + + If a tool is not in the registry, it's assumed to be dual-mode + (same tool works in both sim and prod, handles mode internally). + """ + + def __init__(self, mappings: Dict[str, str] | None = None): + """ + Args: + mappings: Dict mapping prod_tool_name -> sim_tool_name + + Example: + registry = ToolRegistry({ + "expedia.search_flights": "expedia_sim.search_flights", + "stripe.charge_card": "stripe_sim.mock_charge", + }) + """ + self.mappings = mappings or {} + + def has_mapping(self, tool_name: str) -> bool: + """Check if tool has explicit sim mapping.""" + return tool_name in self.mappings + + def get_sim_tool(self, prod_tool_name: str) -> str: + """Get simulation tool for a production tool.""" + return self.mappings[prod_tool_name] + + def register(self, prod_tool: str, sim_tool: str): + """Register a prod -> sim mapping.""" + self.mappings[prod_tool] = sim_tool ``` -#### FAQs +**Example usage**: -**Couldn't MCP servers extend to support a state and "put us out of business"?** The closest thing that MCP has to a state is its support of sessions and of authorization. While it's true that you could probably implement our state in a MCP server by wrangling sessions, it's not what they were made for. MCP was not made for training! All the stuff that we have been listing still applies even if we decide to implement this behind the scenes using MCP sessions. +```python +# Phase 1: Explicit sim/prod mappings +tool_registry = ToolRegistry({ + # Expedia doesn't have dual-mode server yet + "expedia.search_flights": "expedia_sim.search_flights", + "expedia.book_flight": "expedia_sim.book_flight", + + # Stripe doesn't have dual-mode server yet + "stripe.charge_card": "stripe_sim.mock_charge", +}) + +env = Environment( + mode="sim", + mcp_servers=[ + MCPServerConfig("expedia", "http://expedia-mcp:8001"), # Prod server + MCPServerConfig("expedia_sim", "http://expedia-sim:8002"), # Sim server + MCPServerConfig("stripe", "http://stripe-mcp:8003"), # Prod server + MCPServerConfig("stripe_sim", "http://stripe-sim:8004"), # Sim server + MCPServerConfig("database", "http://db-mcp:8005"), # Dual-mode! + ], + tool_registry=tool_registry, +) + +# In sim mode: +env.call_tool("expedia.search_flights", {...}) # → Uses expedia_sim.search_flights +env.call_tool("database.execute_sql", {...}) # → Uses database.execute_sql (dual-mode) + +# In prod mode: +env_prod = Environment(mode="prod", ...) +env_prod.call_tool("expedia.search_flights", {...}) # → Uses expedia.search_flights +env_prod.call_tool("database.execute_sql", {...}) # → Uses database.execute_sql +``` -## From environments to worlds +**Phase 2/3: Migration path**: -I don't think the env abstraction alone is enough to realize all the value we can be providing. At a minimum, I believe we need one more wrapper to ship data together with the environment: while it is true that environments can be reused, it's just as true that many environments are meant for specific datasets and thus it is natural for users to bundle them. We know this for a fact, because we also started to see pull requests that wanted to bundle datasets with the environment. +```python +# As Expedia ships dual-mode server, remove from registry +tool_registry = ToolRegistry({ + # Expedia now dual-mode - removed from registry! + # "expedia.search_flights": "expedia_sim.search_flights", # No longer needed + + # Stripe still needs mapping + "stripe.charge_card": "stripe_sim.mock_charge", +}) + +env = Environment( + mode="sim", + mcp_servers=[ + MCPServerConfig("expedia", "http://expedia-mcp:8001"), # Now dual-mode! + MCPServerConfig("stripe", "http://stripe-mcp:8003"), # Prod only + MCPServerConfig("stripe_sim", "http://stripe-sim:8004"), # Sim only + ], + tool_registry=tool_registry, +) + +# Expedia tools work automatically in both modes now +env.call_tool("expedia.search_flights", {...}) # Server handles mode internally +``` -Now, if we are also looping on tasks, we should take a look at the whole flow. Let's do it in code, it's quite readable anyway: +**Utilities we provide**: ```python -for task in tasks: # First loop is over a dataset - obs = env.reset() # New task, clean simulation state - while not task.done: # Second loop allows for followups, long-running sub-tasks "now do this" etc - for role in (user, agent): - if role == "agent": - while True: # inner loop is infinite Agentic loop: thinks, acts, observes until satisfied - # 3 stages conceptually, but in practice you just interleave 1 llm_call to 1 env - thought, action = llm_call(obs) # one llm call does all of them. +from openenv.simulation import ( + mock_response, # Static response + mock_from_dataset, # Sample from dataset + mock_from_function, # Custom function + record_and_replay, # Record prod, replay in sim +) + +# Helper to create sim MCP servers from utilities +from openenv.simulation import create_sim_mcp_server + +# Example: Create sim server for Expedia +expedia_sim_server = create_sim_mcp_server( + name="expedia_sim", + tools={ + "search_flights": mock_from_dataset("flights.json"), + "book_flight": mock_response({"confirmation": "SIM123"}), + } +) +``` + +## State Checkpointing and Transactionality + +### Motivation + +We need the ability to rollback to intermediate states, not just the initial state. Use cases: +- **Tree search**: Explore multiple futures from same state +- **Curriculum learning**: Reset to challenging states +- **Debugging**: "What if I had done X at step 5?" +- **Counterfactual training**: Generate alternative trajectories + +### Design: Git-Based Checkpointing + +Every `.step()` can create a checkpoint (like a git commit): + +```python +# Initial state (checkpoint 0) +env.reset() + +# Step 1 (checkpoint 1) +obs1 = env.step(action1) + +# Step 2 (checkpoint 2) +obs2 = env.step(action2) + +# Rollback to checkpoint 1 +env.reset(checkpoint=1) + +# Try different action from checkpoint 1 +obs = env.step(action_alternative) # Creates checkpoint 3 +``` + +**Implementation**: Use git to track filesystem changes. For managed state (databases), we'll need transaction logs or snapshots. + +### Known Limitations + +**🚨 OPEN QUESTION: Transactionality of External Tools** + +The ability to roll back to arbitrary intermediate states requires that not only the environment be able to roll back, but that tools also have this ability. Quick taxonomy of tools: + +- **Transactional tools**: Database queries, filesystem operations (via git) +- **Idempotent tools**: Search, read-only operations (no rollback needed) +- **Non-transactional tools**: Send email, charge credit card, deploy to prod + +We can roll back for stateless and transactional tools, but many tools are just non-transactional: you can't recall an email after you sent it. + +**Proposed approach**: +Given that many tools are non-transactional, why bother? We use environments in simulation, and a key insight is that **non-transactional tools are the most likely ones to be simulated**. + +So, here's our blueprint: + +- Accept the general limitation and document clearly: some tools just might not allow us to do this. +- In sim mode, tool providers should mock non-transactional operations +- In prod mode, non-transactional tools that modify state should probably not exist in training scenarios +- We provide checkpointing for what we control (filesystem, managed databases) + +**TODO**: Figure out how to annotate tools for transactionality without adding cognitive burden to devs. If we have this, the env shell is always gonna be transactional, so we can easily propagate this signal and let people running training know if they can even do rollbacks. Can even decide at run time: you may have non-transactional tools in the env and never use them during a particular simulation, which can therefore be valid. + +### API (Initial Design) + +```python +class Environment: + def reset(self, checkpoint: int | None = None) -> Observation: + """Reset to checkpoint (default: initial state).""" + if checkpoint is None: + # Reset to initial state + self._restore_initial_snapshot() + else: + # Restore to specific checkpoint (git reset) + self.checkpoint_manager.restore(checkpoint) + + return self._get_initial_observation() + + def step(self, action: Action) -> Observation: + """Execute action, automatically create checkpoint.""" + # Execute action via MCP + result = self._call_mcp_tools(action) + + # Create checkpoint (git commit) + checkpoint_id = self.checkpoint_manager.create() + + # Process events from queue + events = self.event_queue.pop_until(self.current_time + dt) + + # Compute rewards + reward = self._compute_rewards(result, events) + + return Observation(reward=reward, ...) - if thought.done: - return thought.final_answer # some put it as an action + def get_checkpoints(self) -> List[int]: + """Get list of available checkpoints.""" + return self.checkpoint_manager.list() +``` + +**🚨 OPEN QUESTION**: +- Auto-checkpoint every step, or manual control? +- How to handle branching trajectories (linear IDs vs tree structure)? +- Storage efficiency (in-memory vs disk, delta snapshots)? + +## Collapsing World into Environment + +**Previous idea**: `World = Data + Environment + Evals + Rewards` - obs = env.step(action) # dump results into prompt, - # ready to be observed by next llm_call +**Revised approach**: Absorb World into Environment. Everything that belongs to simulation lives in the Environment's simulation layer: + +```python +class Environment: + # Production core (MCP) + mcp_clients: List[MCPClient] + + # Simulation layer (HTTP) - only in sim mode + event_queue: EventQueue + data_loader: DataLoader | None + reward_functions: List[RewardFunction] + eval_functions: List[EvalFunction] + checkpoint_manager: CheckpointManager ``` -While Forge can write a loop like the above, something that we can do in OpenEnv is simply provide the methods and abstractions, and let the caller call them however they please. +**Rationale**: Clear boundary - everything in simulation disappears in production, everything in MCP core remains. + +**🚨 OPEN QUESTION**: This means we are changing the semantics of the Environment class. Previously, it did not contain a pointer to data and evals and now it does. We do retain the Gym API though. + +## MCP as Interface + +**MCP is our interface to/from agents.** Note that this means exposing every action as a tool, including actions that are not what you would normally call tool-based. For example: chess. You normally would not expose moves as MCP because it's not a "tool", but it is possible to do it, and you get the benefits of MCP: + +- **Action discovery**: `list_tools()` tells agents what actions are available +- **Type safety**: JSON Schema for parameters +- **Language independence**: MCP servers can be written in any language + +Every query and every mutation performed by the agent will come through MCP calls. + +### Special Methods: Not Exposed via MCP + +We reserve special methods that the model cannot call: +- `.reset()` - simulation reset (would teach agents that errors are always recoverable) +- `.step()` - advance simulation time / compute rewards +- `.get_state()` - introspect episode metadata + +These are exposed via HTTP (simulation control protocol), not MCP (agent protocol). -We need a good name for this abstraction, let's try "Worlds" for now. +## CodeAct and ToolCall Paradigms -**World = Data + Environment + Evals + Rewards** +If our users write everything based on MCP, we can programmatically switch between tool calling and CodeAct style. This will require a thin proxy layer. -Now, we can have methods like: +**Tool calling-style**: Each tool call is a discrete action +```python +# Agent generates +action1 = ToolCallAction(tool_name="search_web", params={...}) +obs1 = env.step(action1) + +action2 = ToolCallAction(tool_name="read_file", params={...}) +obs2 = env.step(action2) +``` +**CodeAct-style**: Write code that calls multiple tools ```python -task = world.next_task() # samples next task from the dataloader/queue (if it's a user) +# Agent generates Python code +code = """ +results = search_web(query="python patterns") +filtered = [r for r in results if "async" in r] +content = read_file(filtered[0]['url']) +print(content[:100]) +""" + +# One step executes entire code block +obs = env.step(CodeAction(code=code)) +``` + +**Implementation**: We make a `CodeActEnvironment` or something like this where the action space is defined only as `CodeAction` and nothing else. This actual bridges the gap with the Gym API since they normally want you to have a discrete, finite, enumerable action space and now we have this. Both in MCP mode and in CodeAct mode (maybe in a bit of a weaker sense since we do not taxonomize every possible input, but the action types themselves are, and their args are at least typechecked). + +## Human-Agent Parity + +Assume we expose the following tools via MCP: +- `screen()` - Render current state as image +- `keyboard(text)` - Type text +- `mouse(x, y, click=True)` - Mouse interaction -# worlds can also do agentic evals where two agents ping-pong against each other -world.run_evals() +Then we can build a Docker that both: +- Agents can interact with via MCP tools (production interface) +- Humans can remote desktop into (same environment, different interface) -world.rewards() +This validates that agents get the same interface humans would have. + +**🚨 OPEN QUESTION**: Should we actually support VNC/RDP, or just simulate with MCP tools? + +## Tool Discoverability + +Given limited context windows, we can't dump all tools to the agent. We need hierarchical discovery. + +**Approach**: Directory-like structure + `find_tools` utility + +``` +database_environment/ + database_mcp_server/ + execute_sql.py + query_schema.py + backup_db.py + search_mcp_server/ + web_search.py + semantic_search.py ``` -## What I am undecided on +We'll provide a `find_tools(query)` convenience tool that helps agents discover relevant tools. + +More in general, I don't believe we need to solve this particular problem. Being all-in on MCP means that however you decide to solve this problem, we will be naturally compatible! + +## Convenience Features: Traits/Mixins + +Bundle common patterns as importable traits: + +```python +class CompetitiveCodingEnv(HumanComputerInterfaceable, BashAccess, PythonAccess): + # Automatically includes screen/keyboard/mouse + bash + Python interpreter + ... +``` + +**🚨 OPEN QUESTION**: How do traits interact with MCP server deployment? Are they: +- Server-side mixins that pre-configure MCP servers? +- Client-side mixins? +- Configuration/deployment artifacts (docker-compose snippets)? + +[Davide] I was thinking of server-side mixins. Basically, just a convenience feature to Env builders so that they don't have to rebuild the same things over and over. + +## Open Questions + +### High Priority + +1. **Tool transactionality**: How do we handle non-transactional tools in checkpointing? Require it? Document limitations? Provide best-effort? + +2. **Reward placement**: Environment-level (fixed per environment) or task-level (varies per task)? +[Davide] Let's do Environment-level. Env already has a pointer to data anyway, so this distinction is no longer critical to call as it was in the previous design. + +3. **CodeAct proxy design**: Where does ToolCall ↔ CodeAct conversion happen exactly? +[Davide] Every env needs to have specs for Observations and Actions. We can simply make a `CodeActEnv` that can have a constructor like `CodeActEnv.from_env(MySpecialEnv)`. It would go in, read the dataclasses for Actions that the provided env has, and make each action (already MCP) available as a MCP tool to be used _inside_ a CodeAction. + +4. **Checkpointing details**: + - Auto vs manual checkpoint creation? + - Storage strategy (in-memory, disk, hybrid)? + - Branching support (linear vs tree)? + +[Davide] Auto, at least for the env. We should do disk for storage, and we should do tree. So... Basically exactly the git API (may or may not use git behind the scenes). Performance is something we can figure out. We can have git in a sidecar and queue operations while the env runs -- no need for git snapshots to block the env. + +### Medium Priority + +5. **Traits implementation**: How do convenience traits work with MCP deployment? +[Davide] They could exist at the Env level, and all they do is bring pre-made MCP servers. + +6. **MCP mode propagation**: Environment variable vs per-call context? +[Davide] Explain this further? I don't understand the question + +7. **Streaming support**: How does hybrid MCP approach work with streaming tool calls? +[Davide] In Prod mode, we don't care since we get out of the way so we can support. In Sim mode, maybe this is not as critical? + +### Lower Priority + +8. **Human interface**: VNC/RDP or just MCP tool simulation? +[Davide] No need for us to choose. Even if we do not implement VNC/RDP ourselves, someone else can. We are just talking about a convenience feature, not a critical part of our spec. + +9. **Tool provider incentives**: How do we convince Expedias of the world to ship dual-mode servers? +[Davide] This is critical and a hard question. Maybe this is also the wrong question for us at this point because we do not control it. So, let us take a step back and ask a _different_ question that we have more control over. Let's look at the end state. We basically want to have a registry of (prod, sim) mapping available to everyone so that they can reuse the same tools in many different envs. So... Why don't we instead do this by hosting a public registry? We already have a Hub for environments, so it's not hard for us to add another hub for these. Please turn this into a more detailed proposal, leveraging HF hub. + +10. **Docker nesting**: Clean patterns for MCP servers inside environment containers? +[Davide] I think now we do: deps that you need in Prod go inside the Dockerfile of the MCP server while deps that you only need in sim mode (e.g. evals, or other deps that you may need for mocked tools) go into the Env dockerfile. Open question: this assumes that Sim mode deps are a superset of Prod mode which is in fact not true. For example, the sim Expedia does not need `requests` since it mocks everything. One solution is that we first bring every dep from MCP servers so our mapping would have sent us a different Expedia tool in sim mode that would not have brought in requests. But do test it and flesh it out a bit more. + +## What We're NOT Undecided On + +- ✅ Environment = MCP Servers + Simulation Layer +- ✅ Dual protocol (HTTP for sim control, MCP for agent interaction) is correct +- ✅ Tool duality starts with us (Phase 1), migrates to tool providers (Phase 2-3) + - [Davide] Maybe the hub is really the answer here, so we don't make changes +- ✅ Event queue is first-class citizen +- ✅ World abstraction absorbed into Environment +- ✅ Checkpointing via git for filesystem state +- ✅ Time semantics differ between simulation and production + +## Next Steps -* Should rewards be part of the environment or of the world? -* How do we handle binary deps that are only for the world but not for the env? -* How do we avoid creating dockers of dockers? -* Right now we layer things this way: - * MCP Server + State → Env - * Env + Data + Evals + Rewards → World +1. Validate this design with concrete implementations (database env, travel booking env) +2. Build Phase 1 simulation utilities (`mock_response`, `mock_from_dataset`, etc.) +3. Define MCP server contract and best practices for dual-mode servers +4. Resolve open questions through prototyping +5. Update existing RFCs (001-004) to reflect this design From 270b60f37a08a7aa81d2a7cce824fe57075c4a52 Mon Sep 17 00:00:00 2001 From: Davide Testuggine Date: Sat, 8 Nov 2025 11:59:58 -0800 Subject: [PATCH 3/5] Second pass --- rfcs/env_tools_rfc.md | 826 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 669 insertions(+), 157 deletions(-) diff --git a/rfcs/env_tools_rfc.md b/rfcs/env_tools_rfc.md index 91121aad..20482683 100644 --- a/rfcs/env_tools_rfc.md +++ b/rfcs/env_tools_rfc.md @@ -50,7 +50,64 @@ The components we have are the following: Let's say I'm giving you a database containing a list of employees and as a single task, I'm giving you an ongoing task to stay alive over the course of months and maintain this database as events happen. This means querying for information, but it can totally also mean mutations. People get hired, people leave, and these mutations need to be performed. -![Main components](components.png) +```mermaid +--- +config: + flowchart: + htmlLabels: false +--- +%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#e3f2fd','primaryTextColor':'#0d47a1','primaryBorderColor':'#1e88e5','lineColor':'#1e88e5','secondaryColor':'#f1f8e9','tertiaryColor':'#fff3e0'}}}%% + +graph TD + classDef tasks fill:#e3f2fd,stroke:#1e88e5,stroke-width:3px,color:#0d47a1 + classDef agent fill:#f1f8e9,stroke:#7cb342,stroke-width:3px,color:#558b2f + classDef mcp fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#e65100 + classDef state fill:#f3e5f5,stroke:#8e24aa,stroke-width:3px,color:#4a148c + classDef sandbox fill:#eceff1,stroke:#455a64,stroke-width:2px,color:#263238 + + A["`**TASKS Data** + Add employee Alice + Query Engineering dept size`"]:::tasks + B["`**AGENT LLM + Policy** + Decides what tools to call + based on task & observations`"]:::agent + + C["`**MCP SERVERS Interface**`"]:::mcp + C1["`**Database MCP** + - execute_sql + - query_schema + `"]:::mcp + C2["`**Search MCP** + - web_search + - semantic_search + `"]:::mcp + C3["`**File MCP** + - read_file + - write_file + `"]:::mcp + + D["`**STATE Stateful World** + Database: employees table + File system state + Application state + Can reset in training + Cannot reset in production`"]:::state + + E["`**SANDBOXING & DEPENDENCIES** + - Docker containers + - Binary distribution + - Version management`"]:::sandbox + + A -->|Tasks| B + B -->|MCP Tool Calls| C + C --> C1 + C --> C2 + C --> C3 + C1 -->|Mutates/Queries| D + C2 -->|Mutates/Queries| D + C3 -->|Mutates/Queries| D + D -.-> E +``` I call the initial snapshot of the database our **state**. I would like to zoom in on it: @@ -115,7 +172,91 @@ We define an **Environment** as having two distinct layers: **In Training/Eval**: Full stack (both layers) **In Production**: Simulation layer removed, only MCP servers remain -![Proposed abstraction](env.png) +```mermaid +--- +config: + flowchart: + htmlLabels: false +--- +%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#e3f2fd','secondaryColor':'#f1f8e9','tertiaryColor':'#fff3e0'}}}%% + +graph TB + subgraph TRAIN ["TRAINING / EVAL MODE"] + direction TB + TL["`**Training Loop** + Python`"] + + TL -->|"HTTP: reset, step"| ENV + + ENV["`**Environment Container**`"] + + SIM["`**SIMULATION LAYER** + event_queue: EventQueue + data_loader: DataLoader + reward_functions + eval_functions + checkpoint_manager + `"] + + CORE["`**PRODUCTION CORE** + mcp_servers: List[MCPServer] + - Database MCP Docker + - Search MCP Docker + - Custom MCP Docker + tool_registry: ToolRegistry + `"] + + ENV -.contains.-> SIM + ENV -.contains.-> CORE + + CORE -->|"MCP Protocol"| AT1["`**Agent Training**`"] + end + + subgraph PROD ["PRODUCTION MODE"] + direction TB + MCP1["`**Database MCP** + Server Docker + execute_sql + query_schema + `"] + + MCP2["`**Search MCP** + Server Docker + web_search + semantic_search + `"] + + MCP3["`**Custom MCP Servers** + Docker`"] + + MCP1 & MCP2 & MCP3 -->|"MCP Protocol"| AT2["`**Agent Production** + No reset access`"] + end + + KEY["`**KEY INSIGHT:** + MCP interface identical in training and production + Only simulation layer HTTP disappears in prod`"] + + classDef trainBox fill:#e8f5e9,stroke:#388e3c,stroke-width:3px + classDef prodBox fill:#ffebee,stroke:#c62828,stroke-width:3px + classDef blue fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px + classDef green fill:#e8f5e9,stroke:#388e3c,stroke-width:2px + classDef lightgreen fill:#f1f8e9,stroke:#7cb342,stroke-width:2px + classDef orange fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef orangeBox fill:#ffffff,stroke:#f57c00,stroke-width:2px + classDef purple fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px + classDef keyBox fill:#c8e6c9,stroke:#43a047,stroke-width:3px + + class TRAIN trainBox + class PROD prodBox + class TL blue + class ENV green + class SIM lightgreen + class CORE orange + class MCP1,MCP2,MCP3 orangeBox + class AT1,AT2 purple + class KEY keyBox +``` ### Two Protocols, Two Purposes @@ -202,14 +343,14 @@ class ExpediaMCPServer: - Easy patterns/utilities for common cases (search, payments, email) - Build critical mass and prove value -**Phase 2 (v0.6-v1.0)**: Mixed ownership -- Early adopter tool providers ship dual-mode servers -- Both patterns coexist (fallback + native dual-mode) -- Show ROI: "Your tool is used in 50 environments" +**Phase 2 (v0.6-v1.0)**: Mixed ownership via Hugging Face Hub +- Community-contributed tool simulations on HF Hub +- Tool providers start shipping dual-mode servers +- Both patterns coexist (see HF Hub section below) **Phase 3 (v1.0+)**: Tool providers own duality - Standard practice in ecosystem -- We deprecate environment-level simulation +- Deprecate most environment-level simulations - Clean separation of concerns **Critical**: Design the abstraction NOW so migration is seamless. @@ -237,11 +378,14 @@ class Environment: self.mode = mode self.tool_registry = tool_registry or ToolRegistry() - # Initialize MCP clients - self.mcp_clients = [ - MCPClient(cfg.url) + # Initialize and manage MCP servers + self.mcp_servers = [ + MCPServer.from_config(cfg) for cfg in mcp_servers ] + # Start servers (managed lifecycle) + for server in self.mcp_servers: + server.start() def call_tool(self, tool_name: str, params: dict): """Call MCP tool, using registry to resolve sim vs prod.""" @@ -250,14 +394,14 @@ class Environment: if self.mode == "sim" and self.tool_registry.has_mapping(tool_name): # Use sim version from registry sim_tool_name = self.tool_registry.get_sim_tool(tool_name) - mcp_client = self._find_mcp_client_for_tool(sim_tool_name) - return mcp_client.call_tool(sim_tool_name, params) + server = self._find_mcp_server_for_tool(sim_tool_name) + return server.call_tool(sim_tool_name, params) else: # Not in registry: assume dual-mode tool (same in prod and sim) # Or we're in prod mode: use production tool directly - mcp_client = self._find_mcp_client_for_tool(tool_name) - return mcp_client.call_tool(tool_name, params) + server = self._find_mcp_server_for_tool(tool_name) + return server.call_tool(tool_name, params) ``` **Tool Registry**: @@ -294,6 +438,25 @@ class ToolRegistry: def register(self, prod_tool: str, sim_tool: str): """Register a prod -> sim mapping.""" self.mappings[prod_tool] = sim_tool + + @classmethod + def from_hub(cls, hub_id: str) -> "ToolRegistry": + """Load tool registry from Hugging Face Hub. + + Args: + hub_id: HF Hub repository ID (e.g., "openenv/tool-registry-v1") + + Returns: + ToolRegistry with community-contributed mappings + """ + from huggingface_hub import hf_hub_download + import json + + config_path = hf_hub_download(repo_id=hub_id, filename="registry.json") + with open(config_path) as f: + mappings = json.load(f) + + return cls(mappings=mappings) ``` **Example usage**: @@ -321,40 +484,8 @@ env = Environment( tool_registry=tool_registry, ) -# In sim mode: -env.call_tool("expedia.search_flights", {...}) # → Uses expedia_sim.search_flights -env.call_tool("database.execute_sql", {...}) # → Uses database.execute_sql (dual-mode) - -# In prod mode: -env_prod = Environment(mode="prod", ...) -env_prod.call_tool("expedia.search_flights", {...}) # → Uses expedia.search_flights -env_prod.call_tool("database.execute_sql", {...}) # → Uses database.execute_sql -``` - -**Phase 2/3: Migration path**: - -```python -# As Expedia ships dual-mode server, remove from registry -tool_registry = ToolRegistry({ - # Expedia now dual-mode - removed from registry! - # "expedia.search_flights": "expedia_sim.search_flights", # No longer needed - - # Stripe still needs mapping - "stripe.charge_card": "stripe_sim.mock_charge", -}) - -env = Environment( - mode="sim", - mcp_servers=[ - MCPServerConfig("expedia", "http://expedia-mcp:8001"), # Now dual-mode! - MCPServerConfig("stripe", "http://stripe-mcp:8003"), # Prod only - MCPServerConfig("stripe_sim", "http://stripe-sim:8004"), # Sim only - ], - tool_registry=tool_registry, -) - -# Expedia tools work automatically in both modes now -env.call_tool("expedia.search_flights", {...}) # Server handles mode internally +# Or load from HF Hub (Phase 2) +tool_registry = ToolRegistry.from_hub("openenv/tool-registry-v1") ``` **Utilities we provide**: @@ -380,6 +511,165 @@ expedia_sim_server = create_sim_mcp_server( ) ``` +## Hugging Face Hub Integration: Community Tool Registries + +### Motivation + +Getting tool providers like Expedia to ship dual-mode servers requires critical mass. We need a chicken-and-egg solution: a way to share tool simulation mappings across environments before tool providers invest in dual-mode servers. + +**Key insight**: Tool simulators are just MCP servers - they should be published to standard MCP registries (whatever the MCP ecosystem uses). What we need to publish on HF Hub are the **mappings** (tool registries) that tell environments which sim tools to use for which prod tools. + +### Proposed HF Hub Structure + +``` +Hugging Face Hub +├── openenv/environments/ # Existing: Environment packages +│ ├── database-env +│ ├── coding-env +│ └── travel-booking-env +│ +└── openenv/tool-registries/ # NEW: Community registries (mappings) + ├── standard-registry-v1 # Curated mappings for common tools + ├── finance-tools-registry # Domain-specific (fintech) + └── saas-tools-registry # Domain-specific (SaaS APIs) +``` + +**Note**: Tool simulations themselves (expedia-sim, stripe-sim, etc.) are published to standard MCP registries, not our Hub. + +### Tool Simulations (MCP Servers) + +Tool simulations are just MCP servers. They're published to standard MCP registries (whatever the MCP ecosystem provides). For example: + +- `expedia-sim` - Simulated Expedia flight search API +- `stripe-sim` - Simulated Stripe payment API +- `sendgrid-sim` - Simulated email service +- `github-sim` - Simulated GitHub API + +These are discovered and installed via standard MCP tooling, not OpenEnv-specific infrastructure. + +**Usage** (using standard MCP discovery): + +```python +env = Environment( + mode="sim", + mcp_servers=[ + MCPServerConfig("expedia", "https://api.expedia.com"), # Prod + MCPServerConfig("expedia_sim", "mcp://expedia-sim"), # Sim (from MCP registry) + MCPServerConfig("stripe", "https://api.stripe.com"), + MCPServerConfig("stripe_sim", "mcp://stripe-sim"), + ], + tool_registry=ToolRegistry({ + "expedia.search_flights": "expedia_sim.search_flights", + "stripe.charge_card": "stripe_sim.charge_card", + }) +) +``` + +### Tool Registries (Published to HF Hub) + +**This is what we publish to HF Hub**: Registries are JSON files mapping prod tools → sim tools. + +```json +// openenv/standard-registry-v1/registry.json +{ + "expedia.search_flights": "expedia_sim.search_flights", + "expedia.book_flight": "expedia_sim.book_flight", + "stripe.charge_card": "stripe_sim.charge_card", + "stripe.create_customer": "stripe_sim.create_customer", + "sendgrid.send_email": "sendgrid_sim.send_email", + "github.create_pr": "github_sim.create_pr" +} +``` + +**Usage**: + +```python +# Load community registry from HF Hub +registry = ToolRegistry.from_hub("openenv/standard-registry-v1") + +# Use in environment +env = Environment( + mode="sim", + mcp_servers=[ + # Prod and sim servers (from MCP registries) + MCPServerConfig("expedia", prod_url), + MCPServerConfig("expedia_sim", "mcp://expedia-sim"), + MCPServerConfig("stripe", prod_url), + MCPServerConfig("stripe_sim", "mcp://stripe-sim"), + ], + tool_registry=registry, # Loaded from HF Hub +) +``` + +### Contribution Workflow (Registry Focus) + +1. **Environment builder creates/finds sim tools**: + - Build MCP server for tool simulation (e.g., `expedia-sim`) + - Publish to MCP registry using standard MCP tooling + +2. **Contribute mapping to HF Hub registry**: + ```bash + openenv create-registry travel-tools + openenv registry add expedia.search_flights expedia_sim.search_flights + openenv registry add expedia.book_flight expedia_sim.book_flight + openenv push-registry openenv/travel-tools + ``` + +3. **Others discover and reuse registries**: + ```bash + openenv search-registries "travel" + # Results: openenv/travel-tools, openenv/saas-tools + ``` + +4. **Use community registry**: + ```python + registry = ToolRegistry.from_hub("openenv/travel-tools") + env = Environment(mode="sim", tool_registry=registry, ...) + ``` + +### Benefits + +1. **Network effects**: Environment builders share tool mappings, reducing duplicate registry work +2. **Discovery**: Search HF Hub for existing registries before creating your own +3. **Quality**: Community curates and upvotes best registries +4. **Versioning**: Semantic versioning for registries (standard-registry-v1, v2, etc.) +5. **Incentive alignment**: Tool providers see which sim tools are popular → incentive to ship official dual-mode servers +6. **Separation of concerns**: Sim tools live in MCP ecosystem, mappings live on HF Hub + +### Implementation Plan + +**Phase 2a (v0.4)**: +- Add HF Hub integration for tool registries +- CLI commands: `create-registry`, `push-registry`, `search-registries` +- `ToolRegistry.from_hub()` for loading community mappings + +**Phase 2b (v0.5)**: +- Advanced registry features (domain-specific, versioned, composable) +- Usage analytics: track which sim tools are referenced in registries +- Quality scoring and curation for registries + +**Phase 3 (v0.6+)**: +- Tool provider feedback loop: show them registry usage data +- Encourage official dual-mode server adoption +- Namespace claiming for tool providers + +### Future Consideration: Direct Sim Tool Hosting (Under Discussion) + +While tool simulations are MCP servers that should live in MCP registries, there's a case for **also** hosting them on HF Hub: + +**Pros**: +- **Tight integration**: One-stop shop for environments + registries + sim tools +- **Quality control**: Curated sim tools alongside environments +- **Discovery**: Unified search across all OpenEnv resources +- **Bootstrapping**: Helps ecosystem get started before MCP registries mature + +**Cons**: +- **Duplication**: MCP ecosystem already has/will have registries +- **Maintenance burden**: We'd need to host and maintain sim tool infrastructure +- **Fragmentation**: Creates competing discovery mechanisms + +**Open question**: Should we provide convenience features for hosting sim tools on HF Hub, or strictly delegate to MCP ecosystem? + ## State Checkpointing and Transactionality ### Motivation @@ -392,64 +682,108 @@ We need the ability to rollback to intermediate states, not just the initial sta ### Design: Git-Based Checkpointing -Every `.step()` can create a checkpoint (like a git commit): +**Decision**: Automatic checkpointing with git-like API (tree structure, disk storage). + +Every `.step()` automatically creates a checkpoint: ```python # Initial state (checkpoint 0) env.reset() -# Step 1 (checkpoint 1) +# Step 1 (checkpoint 1 - auto-created) obs1 = env.step(action1) -# Step 2 (checkpoint 2) +# Step 2 (checkpoint 2 - auto-created) obs2 = env.step(action2) # Rollback to checkpoint 1 env.reset(checkpoint=1) # Try different action from checkpoint 1 -obs = env.step(action_alternative) # Creates checkpoint 3 +obs = env.step(action_alternative) # Creates checkpoint 3 (branches from 1) ``` -**Implementation**: Use git to track filesystem changes. For managed state (databases), we'll need transaction logs or snapshots. +**Implementation**: +- Use git to track filesystem changes +- For managed state (databases), use transaction logs or snapshots +- Async sidecar for performance (git operations don't block environment) -### Known Limitations +```python +class CheckpointManager: + """Git-based checkpointing with async sidecar for performance.""" + + def __init__(self, state_path: str): + self.repo = git.Repo.init(state_path) + self.checkpoint_queue = Queue() + self.sidecar_thread = Thread(target=self._checkpoint_worker) + self.sidecar_thread.start() + + def create(self) -> str: + """Queue checkpoint creation (non-blocking).""" + checkpoint_id = str(uuid.uuid4()) + self.checkpoint_queue.put(("create", checkpoint_id)) + return checkpoint_id + + def restore(self, checkpoint_id: str): + """Restore to checkpoint (blocking - must wait for queue).""" + self.checkpoint_queue.join() # Wait for pending checkpoints + self.repo.head.reset(checkpoint_id, index=True, working_tree=True) + + def _checkpoint_worker(self): + """Background worker that performs git operations.""" + while True: + op, checkpoint_id = self.checkpoint_queue.get() + if op == "create": + self.repo.index.add_all() + self.repo.index.commit(f"Checkpoint {checkpoint_id}") + self.checkpoint_queue.task_done() +``` -**🚨 OPEN QUESTION: Transactionality of External Tools** +### Known Limitations: Transactionality -The ability to roll back to arbitrary intermediate states requires that not only the environment be able to roll back, but that tools also have this ability. Quick taxonomy of tools: +**Challenge**: The ability to roll back to arbitrary intermediate states requires that tools also support rollback. +**Tool taxonomy**: - **Transactional tools**: Database queries, filesystem operations (via git) - **Idempotent tools**: Search, read-only operations (no rollback needed) - **Non-transactional tools**: Send email, charge credit card, deploy to prod -We can roll back for stateless and transactional tools, but many tools are just non-transactional: you can't recall an email after you sent it. +**Proposed approach**: Non-transactional tools are typically simulated in training anyway. -**Proposed approach**: -Given that many tools are non-transactional, why bother? We use environments in simulation, and a key insight is that **non-transactional tools are the most likely ones to be simulated**. +Blueprint: +- Accept limitation and document clearly +- In sim mode, tool providers mock non-transactional operations +- In prod mode, non-transactional tools shouldn't exist in training scenarios +- We provide checkpointing for what we control (filesystem, managed databases) -So, here's our blueprint: +**Optional: Tool transactionality annotations**: -- Accept the general limitation and document clearly: some tools just might not allow us to do this. -- In sim mode, tool providers should mock non-transactional operations -- In prod mode, non-transactional tools that modify state should probably not exist in training scenarios -- We provide checkpointing for what we control (filesystem, managed databases) +```python +@mcp_tool(transactional=False) +def send_email(to: str, subject: str, body: str): + """Send email (non-transactional, cannot be rolled back).""" + ... -**TODO**: Figure out how to annotate tools for transactionality without adding cognitive burden to devs. If we have this, the env shell is always gonna be transactional, so we can easily propagate this signal and let people running training know if they can even do rollbacks. Can even decide at run time: you may have non-transactional tools in the env and never use them during a particular simulation, which can therefore be valid. +# Environment can query and warn users +if env.has_non_transactional_tools(): + warnings.warn("Environment contains non-transactional tools. " + "Checkpointing may not work as expected.") +``` -### API (Initial Design) +### API ```python class Environment: - def reset(self, checkpoint: int | None = None) -> Observation: - """Reset to checkpoint (default: initial state).""" + def reset(self, checkpoint: str | None = None) -> Observation: + """Reset to checkpoint (default: initial state). + + Args: + checkpoint: Checkpoint ID (git commit hash) or None for initial + """ if checkpoint is None: - # Reset to initial state self._restore_initial_snapshot() else: - # Restore to specific checkpoint (git reset) self.checkpoint_manager.restore(checkpoint) - return self._get_initial_observation() def step(self, action: Action) -> Observation: @@ -457,7 +791,7 @@ class Environment: # Execute action via MCP result = self._call_mcp_tools(action) - # Create checkpoint (git commit) + # Create checkpoint (non-blocking, queued to sidecar) checkpoint_id = self.checkpoint_manager.create() # Process events from queue @@ -466,55 +800,79 @@ class Environment: # Compute rewards reward = self._compute_rewards(result, events) - return Observation(reward=reward, ...) + return Observation(reward=reward, checkpoint=checkpoint_id, ...) - def get_checkpoints(self) -> List[int]: - """Get list of available checkpoints.""" - return self.checkpoint_manager.list() -``` + def get_checkpoints(self) -> List[str]: + """Get list of available checkpoint IDs (git commits).""" + return self.checkpoint_manager.list_commits() -**🚨 OPEN QUESTION**: -- Auto-checkpoint every step, or manual control? -- How to handle branching trajectories (linear IDs vs tree structure)? -- Storage efficiency (in-memory vs disk, delta snapshots)? + def get_checkpoint_tree(self) -> Dict[str, List[str]]: + """Get checkpoint tree (branching structure).""" + return self.checkpoint_manager.get_tree() +``` -## Collapsing World into Environment +## Environment Semantics: Data + Evals Included -**Previous idea**: `World = Data + Environment + Evals + Rewards` +**Change from previous design**: Environment now contains pointers to data and evals. -**Revised approach**: Absorb World into Environment. Everything that belongs to simulation lives in the Environment's simulation layer: +**Rationale**: This is intentional and beneficial because: +1. **Clear simulation boundary**: Everything needed for training lives in Environment +2. **Reuse without fragmentation**: While data/evals can vary per task, having them in Environment doesn't prevent reuse - just instantiate Environment with different data loaders +3. **Simpler lifecycle**: Production deployment just strips simulation layer, including data/evals +4. **Gym API preserved**: Core `reset()`, `step()`, `state()` interface unchanged ```python class Environment: - # Production core (MCP) - mcp_clients: List[MCPClient] + # Production core (MCP) - Environment wraps and manages these servers + mcp_servers: List[MCPServer] - # Simulation layer (HTTP) - only in sim mode + # Simulation layer - only present in sim mode event_queue: EventQueue - data_loader: DataLoader | None - reward_functions: List[RewardFunction] - eval_functions: List[EvalFunction] + data_loader: DataLoader | None # NEW: Data is part of env + reward_functions: List[RewardFunction] # Environment-level rewards + eval_functions: List[EvalFunction] # NEW: Evals are part of env checkpoint_manager: CheckpointManager ``` -**Rationale**: Clear boundary - everything in simulation disappears in production, everything in MCP core remains. +**Usage**: + +```python +# Same environment, different tasks +env_train = DatabaseEnv( + mode="sim", + data_loader=TaskLoader("train_tasks.json"), + reward_functions=[SQLCorrectness(), PerformanceScore()], +) + +env_eval = DatabaseEnv( + mode="sim", + data_loader=TaskLoader("eval_tasks.json"), + reward_functions=[SQLCorrectness(), PerformanceScore()], +) -**🚨 OPEN QUESTION**: This means we are changing the semantics of the Environment class. Previously, it did not contain a pointer to data and evals and now it does. We do retain the Gym API though. +# Production: no data/evals +env_prod = DatabaseEnv(mode="prod") +``` -## MCP as Interface +## MCP as Universal Interface -**MCP is our interface to/from agents.** Note that this means exposing every action as a tool, including actions that are not what you would normally call tool-based. For example: chess. You normally would not expose moves as MCP because it's not a "tool", but it is possible to do it, and you get the benefits of MCP: +**MCP is our interface to/from agents.** This includes exposing every action as a tool, even actions that aren't traditionally "tools": - **Action discovery**: `list_tools()` tells agents what actions are available - **Type safety**: JSON Schema for parameters - **Language independence**: MCP servers can be written in any language -Every query and every mutation performed by the agent will come through MCP calls. +**Examples**: +- Chess: `move_piece` is exposed as MCP tool (not a "tool" conceptually, but uses tool interface) +- Database: `execute_sql` is an MCP tool +- Travel: `search_flights` is an MCP tool + +Every query and every mutation performed by the agent comes through MCP calls. ### Special Methods: Not Exposed via MCP -We reserve special methods that the model cannot call: -- `.reset()` - simulation reset (would teach agents that errors are always recoverable) +We reserve special methods that the model cannot call (simulation control): +- `.reset()` - simulation reset (would teach agents errors are always recoverable) - `.step()` - advance simulation time / compute rewards - `.get_state()` - introspect episode metadata @@ -522,9 +880,12 @@ These are exposed via HTTP (simulation control protocol), not MCP (agent protoco ## CodeAct and ToolCall Paradigms -If our users write everything based on MCP, we can programmatically switch between tool calling and CodeAct style. This will require a thin proxy layer. +**Decision**: Create `CodeActEnv` wrapper that converts any environment to CodeAct mode. + +### Tool Calling Style + +Each tool call is a discrete action: -**Tool calling-style**: Each tool call is a discrete action ```python # Agent generates action1 = ToolCallAction(tool_name="search_web", params={...}) @@ -534,7 +895,10 @@ action2 = ToolCallAction(tool_name="read_file", params={...}) obs2 = env.step(action2) ``` -**CodeAct-style**: Write code that calls multiple tools +### CodeAct Style + +Write code that calls multiple tools: + ```python # Agent generates Python code code = """ @@ -548,7 +912,70 @@ print(content[:100]) obs = env.step(CodeAction(code=code)) ``` -**Implementation**: We make a `CodeActEnvironment` or something like this where the action space is defined only as `CodeAction` and nothing else. This actual bridges the gap with the Gym API since they normally want you to have a discrete, finite, enumerable action space and now we have this. Both in MCP mode and in CodeAct mode (maybe in a bit of a weaker sense since we do not taxonomize every possible input, but the action types themselves are, and their args are at least typechecked). +### Implementation: CodeActEnv Wrapper + +```python +class CodeActEnv: + """Wrapper that converts any Environment to CodeAct mode. + + Takes an existing environment and exposes its MCP tools as + Python functions inside a code execution environment. + """ + + @classmethod + def from_env(cls, env: Environment) -> "CodeActEnv": + """Create CodeAct environment from existing environment. + + Args: + env: Base environment with MCP tools + + Returns: + CodeActEnv where agent writes code to call tools + """ + # Introspect environment's action space (MCP tools) + tools = env.list_tools() # Gets MCP tool definitions + + # Create Python executor with tools pre-imported + executor = PythonExecutor() + for tool in tools: + # Wrap each MCP tool as Python function + executor.register_function( + name=tool.name, + func=lambda **kwargs: env.call_tool(tool.name, kwargs) + ) + + return cls(base_env=env, executor=executor) + + def step(self, action: CodeAction) -> Observation: + """Execute code (calls MCP tools as Python functions).""" + result = self.executor.run(action.code) + return self._make_observation(result) +``` + +**Usage**: + +```python +# Start with any MCP-based environment +database_env = DatabaseEnv(...) + +# Convert to CodeAct +codeact_env = CodeActEnv.from_env(database_env) + +# Agent now writes code instead of tool calls +code = """ +result = execute_sql("SELECT * FROM employees WHERE dept='Engineering'") +count = len(result) +print(f"Found {count} engineers") +""" + +obs = codeact_env.step(CodeAction(code=code)) +``` + +**Benefits**: +- Bridges Gym API (discrete action space = CodeAction type) +- Action types are enumerable and typechecked +- Seamless conversion: any Environment → CodeAct mode +- Tools pre-imported, no import statements needed (security) ## Human-Agent Parity @@ -558,18 +985,18 @@ Assume we expose the following tools via MCP: - `mouse(x, y, click=True)` - Mouse interaction Then we can build a Docker that both: -- Agents can interact with via MCP tools (production interface) +- Agents interact with via MCP tools (production interface) - Humans can remote desktop into (same environment, different interface) This validates that agents get the same interface humans would have. -**🚨 OPEN QUESTION**: Should we actually support VNC/RDP, or just simulate with MCP tools? +**Note**: Supporting actual VNC/RDP is optional - we provide the MCP tools for simulation. If someone wants to add VNC support, our architecture doesn't prevent it. ## Tool Discoverability -Given limited context windows, we can't dump all tools to the agent. We need hierarchical discovery. +Given limited context windows, we can't dump all tools to the agent. Hierarchical discovery is needed. -**Approach**: Directory-like structure + `find_tools` utility +**Our approach**: Directory-like structure + optional `find_tools` utility. ``` database_environment/ @@ -582,83 +1009,168 @@ database_environment/ semantic_search.py ``` -We'll provide a `find_tools(query)` convenience tool that helps agents discover relevant tools. +We can provide a `find_tools(query)` convenience tool that helps agents discover relevant tools. -More in general, I don't believe we need to solve this particular problem. Being all-in on MCP means that however you decide to solve this problem, we will be naturally compatible! +**Key insight**: Being all-in on MCP means we're naturally compatible with however the MCP ecosystem solves discoverability (Gateway patterns, hierarchical servers, semantic search, etc.). We don't need to pick a winner. ## Convenience Features: Traits/Mixins -Bundle common patterns as importable traits: +**Decision**: Server-side mixins that bring pre-made MCP servers. + +Bundle common patterns as importable traits for environment builders: ```python -class CompetitiveCodingEnv(HumanComputerInterfaceable, BashAccess, PythonAccess): - # Automatically includes screen/keyboard/mouse + bash + Python interpreter - ... -``` +from openenv.traits import HumanComputerInterfaceable, BashAccess, PythonAccess -**🚨 OPEN QUESTION**: How do traits interact with MCP server deployment? Are they: -- Server-side mixins that pre-configure MCP servers? -- Client-side mixins? -- Configuration/deployment artifacts (docker-compose snippets)? +class CompetitiveCodingEnv(Environment, HumanComputerInterfaceable, BashAccess, PythonAccess): + """Competitive coding environment with common tools pre-configured. -[Davide] I was thinking of server-side mixins. Basically, just a convenience feature to Env builders so that they don't have to rebuild the same things over and over. + Traits automatically: + - HumanComputerInterfaceable: Adds screen/keyboard/mouse MCP servers + - BashAccess: Adds bash execution MCP server + - PythonAccess: Adds Python interpreter MCP server + """ -## Open Questions + def __init__(self, mode: str): + # Traits inject their MCP servers + mcp_servers = self._get_trait_mcp_servers() -### High Priority + super().__init__( + mode=mode, + mcp_servers=mcp_servers, + ... + ) +``` -1. **Tool transactionality**: How do we handle non-transactional tools in checkpointing? Require it? Document limitations? Provide best-effort? +**Implementation**: -2. **Reward placement**: Environment-level (fixed per environment) or task-level (varies per task)? -[Davide] Let's do Environment-level. Env already has a pointer to data anyway, so this distinction is no longer critical to call as it was in the previous design. +```python +class BashAccess: + """Mixin that adds bash execution capability.""" + + def _get_trait_mcp_servers(self) -> List[MCPServerConfig]: + """Return MCP servers needed for this trait.""" + return [ + MCPServerConfig( + name="bash", + url="http://bash-mcp:8100", # Pre-built server + docker_image="openenv/bash-mcp:latest" + ) + ] +``` -3. **CodeAct proxy design**: Where does ToolCall ↔ CodeAct conversion happen exactly? -[Davide] Every env needs to have specs for Observations and Actions. We can simply make a `CodeActEnv` that can have a constructor like `CodeActEnv.from_env(MySpecialEnv)`. It would go in, read the dataclasses for Actions that the provided env has, and make each action (already MCP) available as a MCP tool to be used _inside_ a CodeAction. +**Benefits**: +- Environment builders don't rebuild common tools +- Standardized implementations (same bash server used everywhere) +- Easy to compose (multiple traits on one environment) +- Traits can be published to HF Hub too -4. **Checkpointing details**: - - Auto vs manual checkpoint creation? - - Storage strategy (in-memory, disk, hybrid)? - - Branching support (linear vs tree)? +## Dependency Management: Prod vs Sim -[Davide] Auto, at least for the env. We should do disk for storage, and we should do tree. So... Basically exactly the git API (may or may not use git behind the scenes). Performance is something we can figure out. We can have git in a sidecar and queue operations while the env runs -- no need for git snapshots to block the env. +**Challenge**: Production and simulation have different dependencies. -### Medium Priority +**Example**: +- **Prod Expedia MCP server**: Needs `requests`, `aiohttp` (to call real API) +- **Sim Expedia MCP server**: Needs `faker`, `datasets` (to generate mock data) +- **Environment in sim mode**: Needs eval dependencies, reward model libraries + +**Solution**: Separate Dockerfiles for each concern. + +``` +travel-booking-env/ +├── prod-mcp-servers/ +│ ├── expedia/ +│ │ ├── Dockerfile # Only prod deps (requests, etc.) +│ │ └── server.py +│ └── stripe/ +│ ├── Dockerfile # Only prod deps +│ └── server.py +│ +├── sim-mcp-servers/ +│ ├── expedia-sim/ +│ │ ├── Dockerfile # Only sim deps (faker, etc.) +│ │ └── server.py +│ └── stripe-sim/ +│ ├── Dockerfile # Only sim deps +│ └── server.py +│ +└── environment/ + ├── Dockerfile # Sim-only deps (evals, rewards) + └── environment.py +``` -5. **Traits implementation**: How do convenience traits work with MCP deployment? -[Davide] They could exist at the Env level, and all they do is bring pre-made MCP servers. +**How it works**: + +1. **Prod mode**: Environment loads only prod MCP servers + ```python + env = Environment( + mode="prod", + mcp_servers=[ + MCPServerConfig("expedia", prod_url), # prod-mcp-servers/expedia + MCPServerConfig("stripe", prod_url), + ] + ) + # Environment Dockerfile not even built (not needed in prod) + ``` + +2. **Sim mode**: Environment loads sim MCP servers via registry + ```python + env = Environment( + mode="sim", + mcp_servers=[ + MCPServerConfig("expedia", prod_url), # For registry lookup + MCPServerConfig("expedia_sim", sim_url), # sim-mcp-servers/expedia-sim + MCPServerConfig("stripe", prod_url), + MCPServerConfig("stripe_sim", sim_url), + ], + tool_registry=ToolRegistry({ + "expedia.*": "expedia_sim.*", # Maps to sim server + "stripe.*": "stripe_sim.*", + }) + ) + # Environment container built with sim deps (evals, rewards) + ``` -6. **MCP mode propagation**: Environment variable vs per-call context? -[Davide] Explain this further? I don't understand the question +**Benefits**: +- Prod containers are lean (no unnecessary deps) +- Sim MCP servers don't need `requests` (won't bring it in) +- Clear separation: prod deps in MCP server Dockerfile, sim deps in env or sim MCP server Dockerfile + +## What We've Decided + +- ✅ **Environment = MCP Servers + Simulation Layer** +- ✅ **Dual protocol** (HTTP for sim control, MCP for agent interaction) is correct +- ✅ **Event queue is first-class** citizen (empty = static, populated = dynamic) +- ✅ **World abstraction absorbed into Environment** (data + evals included) +- ✅ **Checkpointing via git API** (automatic, disk storage, tree structure, async sidecar) +- ✅ **Time semantics differ** between simulation and production +- ✅ **Rewards are environment-level** (env already has pointer to data) +- ✅ **CodeActEnv wrapper pattern** (`CodeActEnv.from_env()` converts any env) +- ✅ **Traits as server-side mixins** (bring pre-made MCP servers) +- ✅ **Tool registry with HF Hub** integration for community simulations +- ✅ **Dependency separation** via separate Dockerfiles (prod MCP, sim MCP, env) -7. **Streaming support**: How does hybrid MCP approach work with streaming tool calls? -[Davide] In Prod mode, we don't care since we get out of the way so we can support. In Sim mode, maybe this is not as critical? +## Open Questions -### Lower Priority +### High Priority + +1. **Tool transactionality annotations**: Should we provide `@mcp_tool(transactional=False)` or just document limitations? How do we warn users at runtime? -8. **Human interface**: VNC/RDP or just MCP tool simulation? -[Davide] No need for us to choose. Even if we do not implement VNC/RDP ourselves, someone else can. We are just talking about a convenience feature, not a critical part of our spec. +### Medium Priority -9. **Tool provider incentives**: How do we convince Expedias of the world to ship dual-mode servers? -[Davide] This is critical and a hard question. Maybe this is also the wrong question for us at this point because we do not control it. So, let us take a step back and ask a _different_ question that we have more control over. Let's look at the end state. We basically want to have a registry of (prod, sim) mapping available to everyone so that they can reuse the same tools in many different envs. So... Why don't we instead do this by hosting a public registry? We already have a Hub for environments, so it's not hard for us to add another hub for these. Please turn this into a more detailed proposal, leveraging HF hub. +2. **HF Hub curation**: Who maintains standard-registry? How do we handle quality/security of community-contributed sims? -10. **Docker nesting**: Clean patterns for MCP servers inside environment containers? -[Davide] I think now we do: deps that you need in Prod go inside the Dockerfile of the MCP server while deps that you only need in sim mode (e.g. evals, or other deps that you may need for mocked tools) go into the Env dockerfile. Open question: this assumes that Sim mode deps are a superset of Prod mode which is in fact not true. For example, the sim Expedia does not need `requests` since it mocks everything. One solution is that we first bring every dep from MCP servers so our mapping would have sent us a different Expedia tool in sim mode that would not have brought in requests. But do test it and flesh it out a bit more. +3. **Streaming in sim mode**: Do we need to support streaming tool calls during training, or is request-response sufficient? -## What We're NOT Undecided On +### Lower Priority -- ✅ Environment = MCP Servers + Simulation Layer -- ✅ Dual protocol (HTTP for sim control, MCP for agent interaction) is correct -- ✅ Tool duality starts with us (Phase 1), migrates to tool providers (Phase 2-3) - - [Davide] Maybe the hub is really the answer here, so we don't make changes -- ✅ Event queue is first-class citizen -- ✅ World abstraction absorbed into Environment -- ✅ Checkpointing via git for filesystem state -- ✅ Time semantics differ between simulation and production +4. **Tool provider migration incentives**: Besides usage metrics on Hub, what else can we offer to get official dual-mode servers? ## Next Steps -1. Validate this design with concrete implementations (database env, travel booking env) -2. Build Phase 1 simulation utilities (`mock_response`, `mock_from_dataset`, etc.) -3. Define MCP server contract and best practices for dual-mode servers -4. Resolve open questions through prototyping -5. Update existing RFCs (001-004) to reflect this design +1. **Prototype HF Hub integration** for tool simulations (v0.4) +2. **Validate docker dependency separation** with real environment (travel booking) +3. **Implement CodeActEnv wrapper** with existing environments +4. **Build reference traits** (BashAccess, PythonAccess, HumanComputerInterfaceable) +5. **Git-based checkpointing** with async sidecar +6. **Update RFCs 001-004** to reflect this unified design From e7d69523998a22732ab66e1594f1b3666df355a8 Mon Sep 17 00:00:00 2001 From: Davide Testuggine Date: Sat, 8 Nov 2025 12:04:43 -0800 Subject: [PATCH 4/5] Remove old diagrams --- rfcs/components.png | Bin 132491 -> 0 bytes rfcs/env.png | Bin 155657 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 rfcs/components.png delete mode 100644 rfcs/env.png diff --git a/rfcs/components.png b/rfcs/components.png deleted file mode 100644 index d1ce3157e31bf66cc33af10a877c4c07056ef557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132491 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 diff --git a/rfcs/env.png b/rfcs/env.png deleted file mode 100644 index 391c805a5fb5d6ec5276e85843113279e5c0bd20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155657 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̽z_FLV8Nab47$%BphB2w> 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

^Zau5YkWJrN+rlBX*s8K*C_8 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


gV~8Mk_``Rxi{1QFDi^=k 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

=gp0WCX?Yk~eKw)RD)NwF zSQepj`LNUMpE1s@y`99`M^F9$aZ2^Pyd-?DKqAFx(zEj|ty_i`7>W`&W*4m3;2pAE^Hu?p#nttc6Ev6EH>9KP|P4TH-3wv(L&woS_>t|bp)Im&fN zIxn*!qh-OKLsw;r)%vevf`=d7Hke{l*rv-m3^kN$c3v~ZDXaZBg_?m!IZ>zEPT$A7 z-rYGHc(miG7J%RN8i9#S*fkm5{w$UHVMJz-D6a2Bp40b$0v2H&KL&NPccAEUSe(KWK zwVdy2ww-2=RNW)kNYaRXPMy?Cr8JzVeN1>7Q$PV(jin0@kLHE5dgepN+MkYp^%nzA zWLqvP78*})Foo?*0D8@0s^il}+Bk)@s$B3x>U#=S{+v6rDXigE-CzrD!AV;$Ssfm7 za9(+=Hqsjm&Hdg zy2FjVG;NoL%li-^C7D(2Kk^6jAegfp;PkA_mA!V*aa$*6?9}gQaT+ADsxQ!88e!ee z`^BRJp)xjn+2N_c#+WX8$@BZM>b{U^Ejhf3~X^b}NXQAc3JEE^#&$&_nT`*UdZ>5dvCdMqWo0|#p zjs24&!Q=s{YSV=9q^8`RRXVu4E>+KO5VsH+JJRTL)h?33&b)X@s*#zN+QV_2`JGeU zEFVX)Z5`Zjru`ZX1e|U=_m6 zw8UQ*GI^8pkyt$yvzq3mm`U=zjd_vnK-sE}doFd8DH;%K_Uy=yJv+HswJd)H#=SiBOLjXKL(n& zJQng0$9?7*oXi&!Gq8ZcUuWJaIDZz=x^>@m@k`cBJd?J%m(BT(SOi>Y*MIQFFL7X; zK%%W;=j>F~JJ?#lOoQ))Y2ArRPC7p-i13Gn*%~dj-f_sez^@k3Dm#Ucfut5S5bD0u z=l7@o^8(gm!0zg8Tz*9!ejUVKA*M}0jQ{JT0IZ5QlLhwtX{|D-{k9LQ1jB70&Le8; zcz!K^5WS}3Q^$*}Wm?QS{hX;hEpgtoQ|BOGgUQy?-nl$21Ei18WQ+dk1r%pehKvmF zNM6)K9-&F=)Gz8K#z_4&z#Vc&2KGicUfJ=;o|5!z0a8Gon=VJ`+%Oj)KX7IyniLtY z`Byo8wOs{W-y(7S?1^uCUXQ)O-HlrPsB|k&hvv!^8Am3FRmXqHRf(Z^c&oJWIg$2S zs4RB{Yi3u~pA0}AE}nHkyC8?6@=%Vv>+KxSv+NI&5d>a<6kQO(sRt~QUr&k05=s)8 zMqCr*&gNERiC1_0D^w3P2sjR7CZ8a z1Uq8wFKTDK2^5IVzOG(OR`4byy@j0v$Y2fEjBqy_PHoN^#Ms2y0XFVq`L$kO6I3*?6bMY_^oIiF89nmvb zh5OxY99X44z_i`gsZJ~JZo z-iz6x1@iK2%g%es%mc-NUYDc}hqc=-5z%SdhK8ET8jw!kOYg&O=%7!aW|+hRHvxz0 zVDor>Yj-NZOCmwMsuy5RnLc?*G)6Jlyc(*CLs#gEg_sraBXe@l$$i06)_-|_ zyi3;i?UquIB{q2AXWN!mf^tP%Mnzn2-DicCi`uIVm?%tyY7N{`ci<;Oc>Hfg8EY7Q z{-Hn?T>R#2lpbp5a`D?dG3ElOWK?MeQV->`JA7z%8KEmR>24es31PE3yY%$miu)hF z$K=T{y&2bg6Sk{>iwGw}5QRwk6O8&8T;IHf&b+yDdAje_F2wHlBEMxZZ3IQ2Nk@(* zbP;xF&REzX;>><;pvq)Jhw2>AL&NbV%Y}G0yEdTBbf7pZZZb+?q0z~r zBw|Ultj2Ezes9EwcICl}M}wK%{vl5Jz{#b7fOC7~*NXjXF_gQ(}{Srtnd-s)Wde&nQ-B}*Qe2K^t*B%CGy From c6a838336be271d7475690d7d179353440643168 Mon Sep 17 00:00:00 2001 From: Davide Testuggine Date: Tue, 18 Nov 2025 15:14:47 -0800 Subject: [PATCH 5/5] Comprehensive RFC revision: MCP-based architecture and modular design This commit consolidates the evolution of the OpenEnv RFC structure, incorporating extensive feedback and iterative refinements: - Refactored RFC 000 with clear project phases and architectural principles - Enhanced RFC 001 with two-interface model (CodeAct + ToolCall) and simulation clarity - Restructured RFC 002 with dual-mode patterns and clearer positioning - Completely revised RFC 003 with MCP primer, progressive disclosure, and clearer interface separation - Removed superseded RFCs (004-007 and FEEDBACK_DECISIONS.md) after porting content - Added comprehensive diagrams (Mermaid) for MCP architecture visualization - Archived previous RFC versions for historical reference - Established MCP as the universal interface for environment interactions The final state represents a clean, cohesive RFC suite focused on the MCP-based architecture with clear separation between CodeAct and ToolCall interfaces. --- rfcs/000-project-phases.md | 34 +- rfcs/001-abstractions.md | 173 ++++- rfcs/002-env-spec.md | 220 +++++- rfcs/003-mcp-support.md | 1026 +++++++++++-------------- rfcs/004-actions-as-tool-calls.md | 479 ------------ rfcs/README.md | 19 +- rfcs/env_tools_rfc.md | 1176 ----------------------------- 7 files changed, 832 insertions(+), 2295 deletions(-) delete mode 100644 rfcs/004-actions-as-tool-calls.md delete mode 100644 rfcs/env_tools_rfc.md diff --git a/rfcs/000-project-phases.md b/rfcs/000-project-phases.md index 1a6b0f71..379b2769 100644 --- a/rfcs/000-project-phases.md +++ b/rfcs/000-project-phases.md @@ -1,10 +1,31 @@ -# RFC: OpenEnv layering +# RFC: Design Principles and Broad Roadmap **Status**: In Review **Created**: 10/17/2025 +**Amended**: November 12, 2025 **Authors**: @Darktex, @pankit-eng, @jspisak, @zkwentz **RFC ID:** 000 +## Amendment History + +**November 12, 2025**: Added design principles, target audience, and updated roadmap to reference RFCs 005-007. + +## Design Principles + +These principles guide every decision in OpenEnv: + +1. **Minimize deltas across lifecycle**: Training → Evals → Production should use identical tool interfaces +2. **Minimize human-agent divergence**: Tools that work for humans should work for agents +3. **Be hands-on**: Provide ready-to-use implementations, not just specs +4. **Design for LLMs**: Optimize for context efficiency, in-distribution behavior, and token costs + +## Target Audience + +- **Environment builders**: Get reach across projects without custom adapters +- **Model builders**: Access massive inventory of environments and tools +- **Researchers**: Reproducible setups with versioned tools, rewards, and evals +- **Infrastructure engineers**: Clear contracts enabling backend optimization + ## Summary Before jumping into the actual concrete proposals, this RFC introduces how we are going to approach this problem space, what problems we want to solve with this project, and how we plan to prioritize and solve them systematically. @@ -27,9 +48,14 @@ We will group development from now till version 1.0 into three phases. In the **first phase** of this project, we will focus **exclusively** on the narrowest definition of environments, without even worrying about rewards nor evals. Instead, the focus in this phase (and in the RFCs you find in this directory) is going to be on: 1. Establishing a convention on what is an environment and where we draw the "environment" box (RFC 001). 2. Landing the basics of _sandboxing_, _versioning_, _binary distribution_, _dependency management_ (RFC 002). -3. Nailing our tools support through MCP (Model Context Protocol) integration for both remote and local tools (RFC 003). -4. Defining a unified action interface for all environment types (RFC 004). -5. Exploring RPC communication patterns beyond HTTP for long-running sessions (particularly for interpreted languages like Python, Bash, Ruby, etc.). Coming in an upcoming RFC. +3. Nailing our tools support through MCP (Model Context Protocol) integration: + - RFC 003: Traditional tool calling (ListToolsAction, CallToolAction) + - RFC 004: CodeAct support (agents write executable code) + - RFC 005: MCP as the universal interface (policy and rationale) +4. Establishing tool registry and distribution patterns via Hugging Face Hub (upcoming RFC). +5. Enabling production performance simulation to minimize training-production delta (RFC 006). +6. Exploring MCP protocol interception for observability (RFC 007). +7. Exploring RPC communication patterns beyond HTTP for long-running sessions (particularly for interpreted languages like Python, Bash, Ruby, etc.). Coming in an upcoming RFC. We will conclude this phase with version 0.3. diff --git a/rfcs/001-abstractions.md b/rfcs/001-abstractions.md index 630d8a49..c2a29020 100644 --- a/rfcs/001-abstractions.md +++ b/rfcs/001-abstractions.md @@ -2,9 +2,14 @@ **Status**: In Review **Created**: 10/20/2025 +**Amended**: November 12, 2025 **Authors**: @Darktex, @pankit-eng, @jspisak, @zkwentz **RFC ID:** 001 +## Amendment History + +**November 12, 2025**: Added two-interface model (MCP for agents, HTTP for operations), simulation layer clarity, event queues, state management, and "The Time Problem" section. + ## Summary This document defines what we call an "Environment", what its responsibilities are, and how we expect our customers to use our environments in their systems. @@ -65,40 +70,150 @@ This is the contract that we are proposing. We feel it strikes a good balance be These are the key abstractions that we expect. Note that in this project we only implement the "Environment" abstraction under our meaning. You can map to other "agents" or "environment" abstractions by writing adapters to and from OpenEnvs. Key assumptions: -1. We separate tasks from environments. While it is a good idea to package up a dataset with an environment and evals, we expect this wrapping to be done *outside* the env box. This allows for the reuse of environments across tasks. +1. The Environment bundles everything needed for agent interaction: tools (MCP servers), sandboxing, code execution, reward computation, tasks/datasets, and evals. This packaging makes environments self-contained and reusable. 2. We hold the state of everything **external** to the agent in the Environment. For example, if your agent defines `a = 4` with an action and wants to read `a` some time in the future, the environment will persist the interpreter state and remember variable assignments. 3. We expect a _thin_ Agent abstraction around your model that holds the state of everything pertaining to your model, such as conversation history, tokenizer etc. +```mermaid +flowchart TB + subgraph outer["OUTER SYSTEM (RL Training Infrastructure)"] + agent["Agent (Thin Wrapper) + + - Model/Policy + - Tokenizer + - Conversation History"] + + env["Environment (Docker Container) + + - MCP Servers + - Sandbox + - Code Execution + - Reward Pipeline + - External State + - Task/Dataset Loader + - Evals (aggregated)"] + + orchestration["RL Orchestration (Training Loop) + + - reset, step, get_state + - Simulation control + - Metrics and monitoring"] + + agent <-->|"MCP + (Tool Calls)"| env + orchestration -->|"HTTP + (Orchestration)"| env + end + + classDef agentBox fill:#e1f5ff,stroke:#333,stroke-width:2px + classDef envBox fill:#fff4e1,stroke:#333,stroke-width:2px + classDef orchBox fill:#f0f0f0,stroke:#333,stroke-width:2px + + class agent agentBox + class env envBox + class orchestration orchBox ``` -┌──────────────────────────────────────────────────────────────────────────┐ -│ OUTER SYSTEM │ -│ │ -│ ┌──────────────────┐ ┌───────────────────────────┐ │ -│ │ Dataset/Task │ │ Agent │ │ -│ │ Loader │───────────────────>│ (thin wrapper) │ │ -│ │ │ Provides task │ │ │ -│ └──────────────────┘ │ • Model/Policy │ │ -│ │ • Tokenizer │ │ -│ ┌──────────────────┐ │ • Conversation History │ │ -│ │ Evals │ └───────┬───────────────────┘ │ -│ │ (data-dependent, │ │ ^ │ -│ │ aggregated) │ │ Action │ │ -│ └──────────────────┘ │ │Observation │ -│ v │ │ -│ ┌─────────────────┴───────────┐│ -│ │ Environment ││ -│ │ ││ -│ │ • Tools (MCP) ││ -│ │ • Sandbox (Docker) ││ -│ │ • Code Execution ││ -│ │ • Reward Pipeline ││ -│ │ • External State ││ -│ │ (e.g., interpreter vars) ││ -│ └─────────────────────────────┘│ -│ │ -└──────────────────────────────────────────────────────────────────────────┘ + +**Key Interfaces:** +- **MCP (Agent ↔ Environment)**: Agent-environment tool interaction (training AND production) +- **HTTP (Orchestration ↔ Environment)**: Simulation control + operations (training AND production) + + +**Critical insight**: The Agent uses **MCP exclusively** to interact with the Environment. The HTTP interface is for orchestration (simulation control in training, operations in production), never for agent actions. + +## Two Interfaces, Two Purposes + +A critical insight shapes OpenEnv's architecture: **environments expose two distinct interfaces** serving fundamentally different purposes. + +**1. MCP (Agent Interface)** +- Agent ↔ Environment tool interaction +- Present in training AND production +- Operations: Tool calls (`search()`, `execute_sql()`, etc.) +- **This is the ONLY interface agents use** (see RFC 005) + +**2. HTTP (Service/Operations Interface)** +- RL Orchestration ↔ Environment control +- Present in training AND production (different purposes) +- Operations: + - Training: `reset()`, `step()`, `get_state()` (simulation control) + - Production: Health checks, metrics, logs (operations) +- **Agents NEVER access this directly** + +**Key principle**: MCP for agent actions, HTTP for orchestration. See RFC 002 for detailed specification of how these interfaces work in practice, including graceful degradation from training to production. + +**Special note**: Simulation control methods (`.reset()`, `.step()`) are **never** exposed as MCP tools. This ensures agents never learn they can reset reality—critical for safe production deployment. + +## The Time Problem: Simulation vs Production + +A critical insight that shapes our entire design: + +**Simulation Time (Training/Eval)**: +- Time only advances when we say so (via `.step()`) +- Agent can "think" for arbitrary real-world time - simulation is paused +- Environment state is frozen until agent acts +- Can reset to initial state infinitely +- Code execution blocks execute atomically from environment's perspective + +**Real Time (Production)**: +- Time flows continuously +- Events arrive on their own schedule (people get hired *now*, not when agent is ready) +- Agent must react with bounded latency +- Cannot reset (it's the real world). Deleting records is a one-way door. +- No "turns" in the traditional sense - continuous stream of events + +**Key insight**: You can simulate production (via event queues), but you can't "productionize" simulation (can't pause reality). + +This temporal duality drives the need for two distinct interfaces: +- **Simulation control** (HTTP): Reset, step, reward computation (training/eval only) +- **Agent-environment interaction** (MCP): Tool calls (training AND production) + +**See RFC 006** for how we simulate production performance characteristics (latency, reliability) during training to minimize the training-production delta. + +## Event Queues: First-Class Abstraction + +Environments fall into two categories: + +1. **Static environments**: State only changes when agent acts (chess, coding puzzles) +2. **Dynamic environments**: State changes independently (database with external events, customer service) + +We make the event queue a **first-class abstraction**: +- **Empty queue** = static environment +- **Populated queue** = dynamic environment with external events + +```python +class Environment: + def __init__( + self, + mode: str, # "sim" or "prod" + mcp_servers: List[MCPServerConfig], + event_queue: EventQueue, # Empty for static, populated for dynamic + .. +. + ): + self.event_queue = event_queue + self.mode = mode ``` +The event queue delivers external events (e.g., "new employee hired", "API request received") that change the environment state independently of agent actions. This enables realistic simulation of production scenarios where the world doesn't wait for the agent. + +## State Management: Why It's Separate + +**State** is a distinct concept from both **tools** and **data**: + +1. **Not part of the dataset**: While datasets contain tasks, the initial state snapshot (e.g., database contents) is separate. You can have many different tasks operate on the same state snapshot! + +2. **Not part of MCP tools**: Tools query and mutate state, but state itself isn't defined by MCP. MCP only deals with the interface to state. + +3. **Simulation-specific reset capability**: During training, we need the ability to reset state to its original snapshot. **Crucially**, the agent absolutely cannot trigger this reset—it's exclusively for the training loop via `.reset()` (HTTP). If the agent could reset state, it would learn that every error is recoverable, creating a huge training-production delta. + +**Example**: Database maintenance environment +- Initial state: SQLite database with employee records +- Agent calls `execute_sql("DELETE FROM employees")` → receives penalty in reward +- Training loop calls `env.reset()` → database restored to initial snapshot +- Agent learns not to delete records (because it can't undo the damage) + +In production, there is no reset. The agent must live with consequences of its actions. + ## Python Interfaces Below are the core Python interfaces that define the contract between agents and environments. @@ -444,7 +559,7 @@ for batch_of_tasks in dataloader: 3. **PyTorch DataLoader compatibility**: `TaskDataset` follows the PyTorch `IterableDataset` interface (implements `__iter__`), making it seamlessly compatible with PyTorch's `DataLoader` for streaming data, multiprocess loading, etc. This is ideal for sequential data access and large datasets. -4. **Flexibility**: Environments can support both traditional tool calling (where each tool call is a separate action) and CodeAct (where an action contains code that may call multiple tools). See RFC 004 for details on unified action interface and RFC 003 for MCP integration. +4. **Flexibility**: Environments can support both traditional tool calling (where each tool call is a separate action) and CodeAct (where an action contains code that may call multiple tools). See RFC 005 for details on unified action interface, RFC 003 for traditional MCP integration, and RFC 004 for CodeAct. 5. **State ownership**: The Environment owns all external state (file system, interpreter state, tool outputs). The Agent owns internal state (conversation history, model hidden states, etc.). diff --git a/rfcs/002-env-spec.md b/rfcs/002-env-spec.md index 54e01184..dedeee90 100644 --- a/rfcs/002-env-spec.md +++ b/rfcs/002-env-spec.md @@ -2,9 +2,14 @@ **Status**: In Review **Created**: 10/14/2025 +**Amended**: November 12, 2025 **Authors**: @Darktex, @pankit-eng, @jspisak, @zkwentz **RFC ID:** 002 +## Amendment History + +**November 12, 2025**: Added tool duality (sim vs prod), Docker Compose patterns, positioning framework (OpenEnv vs systems built on top), and graceful degradation principles. + ## Summary An e2e framework for creating, deploying and using isolated execution environments for agentic RL training, built using Gymnasium style APIs. It provides a clean client-server architecture where environments run as FastAPI servers in Docker containers, and clients interact with them via type-safe HTTP APIs. @@ -52,6 +57,8 @@ Building execution environments for AI agents, code execution, or computational └─────────────────────────────────────────────────────────┘ ``` +**Important**: This diagram shows the **HTTP interface** used by RL orchestration for simulation control (`reset()`, `step()`, `get_state()`). The **MCP interface** for agent-environment tool interaction is separate and runs alongside (see "Graceful Degradation to Production" section below and RFC 005). + ### Core Abstractions(Already available on the master) #### 1. Environment (Server-Side) @@ -149,7 +156,7 @@ In this RFC, we want to align on four decisions that will shape the overall desi These three APIs establish the minimum viable interface for environment interaction and are sufficient for basic RL training workflows. They align with established patterns from Gymnasium and similar frameworks, making them immediately familiar to practitioners. -**Scope**: This RFC focuses exclusively on these baseline APIs. Additional APIs (e.g., `render()`, `seed()`) will be explored in follow-up RFCs. The `actions()` method for action discovery is defined in RFC 004. +**Scope**: This RFC focuses exclusively on these baseline APIs. Additional APIs (e.g., `render()`, `seed()`) will be explored in follow-up RFCs. The `actions()` method for action discovery is defined in RFC 005. #### Decision 2: Environment-Computed Rewards @@ -218,3 +225,214 @@ print(result.observation.stdout) # "Hello, World!\n" print(result.observation.exit_code) # 0 client.close() ``` + +## Tool Duality: Simulation vs Production + +Many tools need different implementations in training vs production while maintaining identical interfaces: + +**Examples**: +- **Search API**: Production calls actual search; training uses mock +- **Email**: Production sends real emails; training logs to file +- **Database**: Production hits real DB; training uses containerized instance + +**Key principle**: The **MCP interface must be identical** to maintain training/production parity (see RFC 005). + +### Three-Phase Ecosystem Evolution + +**Phase 1 (Current)**: Community provides sim-only tools +- Environment builders create MCP servers for their simulated environments +- Production deployment uses different tooling (acceptable for research) +- Example: SQLite MCP for training, Postgres connector for production + +**Phase 2 (6-12 months)**: Tool registry emerges +- Community-maintained mappings: "search_tool (sim) → Algolia (prod)" +- Hugging Face Hub hosts these registries (see future tool registry RFC) +- Still requires manual prod setup, but mapping is documented + +**See future tool registry RFC for detailed specification of tool registry format, HF Hub structure, and community contribution workflows.** + +**Phase 3 (12+ months)**: Tool providers participate +- Major SaaS companies provide official sim/prod server pairs +- One-line deployment: Specify registry entry, get both modes +- Example: `search: algolia/search-mcp` pulls both sim and prod servers +- Tool providers shipping dual-mode servers becomes standard practice + +### Dual-Mode Server Pattern + +Tool providers can ship servers that handle both modes: + +```python +class SendGridMCPServer: + def __init__(self): + self.mode = os.getenv("MODE", "prod") # "sim" or "prod" + + if self.mode == "sim": + self.client = MockEmailClient() # Logs to file + elif self.mode == "prod": + self.client = SendGridAPIClient() # Real API + + @mcp_tool + def send_email(self, to: str, subject: str, body: str): + # Same interface, different implementation + return self.client.send(to, subject, body) +``` + +**Benefits**: +- Single package to maintain +- Tool provider owns simulation quality +- Realistic test data from source + +## Docker Compose: Dual-Mode Deployment + +Production and simulation may have different dependency requirements. We use Docker Compose to manage these cleanly: + +### Simulation Mode + +```yaml +# docker-compose.sim.yml +services: + env: + image: openenv/my-env:v1 + environment: + MODE: sim + ports: + - "8080:8080" + + # Lightweight mocks + mock-db: + image: postgres:15 + environment: + POSTGRES_DB: testdb + + mock-email: + image: openenv/mock-email:v1 +``` + +**Characteristics**: +- Mock services (in-memory database, fake email server) +- Lightweight, fast startup +- No external dependencies +- No API keys required + +### Production Mode + +```yaml +# docker-compose.prod.yml +services: + env: + image: openenv/my-env:v1 # Same image! + environment: + MODE: prod + DB_CONNECTION: ${PROD_DB_URL} + EMAIL_API_KEY: ${SENDGRID_KEY} + ports: + - "8080:8080" +``` + +**Characteristics**: +- Real services (Postgres, SendGrid) +- API keys, credentials +- Network access, higher latency +- Production-grade reliability + +**Key insight**: The environment code is identical—only configuration differs. + +## Graceful Degradation to Production + +When deploying to production, OpenEnv environments **gracefully degrade** into pure MCP servers: + +**Training Mode**: +``` +┌─────────────────────────────────────┐ +│ HTTP Layer (Simulation + Ops) │ +│ - reset(), step(), get_state() │ +│ - Health checks, metrics │ +├─────────────────────────────────────┤ +│ MCP Layer (Agent Tools) │ +│ - search(), execute_sql(), etc. │ +│ - SAME as production │ +└─────────────────────────────────────┘ +``` + +**Production Mode**: +``` +┌─────────────────────────────────────┐ +│ HTTP Layer (Ops Only) │ +│ - Health checks, metrics, logs │ +│ - NO reset/step (not simulation) │ +├─────────────────────────────────────┤ +│ MCP Layer (Agent Tools) │ +│ - search(), execute_sql(), etc. │ +│ - IDENTICAL interface │ +└─────────────────────────────────────┘ +``` + +The agent sees the same MCP interface in both modes. The HTTP layer shifts from simulation control to operational monitoring. + +## Dependency Management: Sim vs Prod + +**Approach**: Use separate Docker Compose files for different modes + +**Training workflow**: +```bash +docker-compose -f docker-compose.sim.yml up +# Fast startup, mock services, no credentials needed +``` + +**Production workflow**: +```bash +export PROD_DB_URL="postgresql://..." +export SENDGRID_KEY="..." +docker-compose -f docker-compose.prod.yml up +# Real services, production credentials +``` + +The environment code remains unchanged. Only the orchestration layer differs. + +## Positioning: OpenEnv vs Systems Built on OpenEnv + +### OpenEnv: The Standard + +**Mission**: Source maximum high-quality environment contributions from community + +**Characteristics**: +- **Flexible**: Supports both traditional tool calling (RFC 003) and CodeAct (RFC 004) paradigms +- **Open**: Anyone can contribute environments +- **Quality-focused**: High bar for useful, production-relevant environments +- **MCP-native**: Universal interface for all environments (see RFC 005) + +**Design philosophy**: Make frontier practices (CodeAct, production-first, progressive disclosure) EASY, not MANDATORY. + +**What we optimize for**: +- ✅ Environments that reflect real-world use cases +- ✅ Environments with clear reward signals +- ✅ Environments that work in both training and production +- ❌ Toy environments with no production analog +- ❌ Environments with made-up APIs that don't match real services + +This isn't about being exclusive—it's about maintaining a quality bar that makes the ecosystem valuable. + +### Systems Built on OpenEnv + +**Mission**: Build best-in-class agent training infrastructure for specific use cases + +**Characteristics**: +- **Opinionated**: May choose CodeAct-only, specific training algorithms, specific toolsets +- **Customized**: Optimized for particular workloads (e.g., reasoning, coding, customer service) +- **Closed or open**: May be internal systems or community projects +- **Add layers**: Build on OpenEnv foundation with additional infrastructure + +**Example**: Internal RL training stack +- 100% CodeAct (no tool-calling mode) +- Custom training infrastructure integration (e.g., TorchForge for async RL) +- Production-first by default (no simulation-only quirks) +- Advanced features (e.g., TimeWalk for tree search, tool-aware checkpointing) +- Uses OpenEnv environments but adds opinionated layers + +**The relationship**: +- **OpenEnv provides the foundation**: Environment standard, MCP interface, community contributions +- **Systems add opinions**: Optimizations, integrations, constraints on top +- **Both benefit**: OpenEnv gets community contributions, systems get ecosystem reach + +**Analogy**: OpenEnv is like Linux (flexible kernel), systems built on it are like Ubuntu or Red Hat (opinionated distributions). + diff --git a/rfcs/003-mcp-support.md b/rfcs/003-mcp-support.md index f8cd6f3c..6b96c08c 100644 --- a/rfcs/003-mcp-support.md +++ b/rfcs/003-mcp-support.md @@ -1,727 +1,550 @@ # RFC: MCP (Model Context Protocol) Support -**Status**: In Review -**Created**: 10/21/2025 -**Authors**: @Darktex, @pankit-eng -**RFC ID:** 003 +**Status**: In Review **Created**: 10/21/2025 **Amended**: November 15, 2025 **Authors**: @Darktex, @pankit-eng **RFC ID:** 003 -## Summary +## Amendment History -This RFC defines how OpenEnv integrates with MCP (Model Context Protocol) to expose external tools to agents. We propose supporting both traditional function-calling paradigms and CodeAct-style execution by implementing an MCP client that exposes remote MCP server tools as Python functions within our execution environments. +**November 12, 2025**: -## Motivation +- Restructured to start with MCP primer showing REST-like API (tools/list, tools/call) +- Added Traditional MCP Interface section with ListToolsAction and CallToolAction +- Mentioned resources and prompts in passing (focused on tools) +- Moved progressive disclosure to FAQ (MCP protocol layer concern) +- Made Docker Compose deployment pattern explicitly optional +- Added FAQ section for common questions +- Removed CodeAct content (moved to RFC 004\) -### Problem Statement +**Note on RFC 007**: MCP Protocol Interception will define how to intercept MCP calls at the protocol layer for observability, monitoring, and metadata injection. This enables features like logging all tool calls, injecting performance metadata (see RFC 006), and A/B testing tool implementations. -Modern AI agents need access to external tools (web search, file operations, database queries, etc.). While MCP provides a standardized protocol for defining and exposing these tools, there are two distinct usage patterns that need support: +## Summary -1. **Traditional Tool Calling**: Agent explicitly calls a tool by name with structured parameters (e.g., `call_tool("search_web", {"query": "python patterns"})`) -2. **CodeAct Paradigm**: Agent writes Python code that directly imports and calls tools as if they were native Python functions (e.g., `from tools import search_web; results = search_web(query="python patterns")`) +This RFC defines how OpenEnv integrates with MCP (Model Context Protocol) to expose external tools to agents using traditional tool calling. We map MCP's REST-like API (tools/list, tools/call) to Gym-style action types, creating a standardized interface for tool discovery and invocation. -MCP's RPC-based, language-agnostic design works naturally for the first pattern but requires additional infrastructure for the second. +To limit the focus on finalizing the API interface, we are intentionally choosing to focus only on local MCP tools via this RFC (and respective changes). This means that any MCP tool shall be packaged inside the OpenEnv sandbox (docker container) for the purpose of this RFC. -### Goals +## Problem Statement -1. **MCP Compatibility**: Support standard MCP servers without modification -2. **Dual Paradigm Support**: Enable both traditional tool calling and CodeAct execution styles -3. **Language Independence**: Leverage MCP's language-agnostic design to support tools written in any language -4. **Deployment Simplicity**: Provide patterns for deploying MCP servers alongside environments -5. **Developer Experience**: Make tools feel native to Python in CodeAct mode +Modern AI agents need access to tools (web search, file operations, database queries, etc.). OpenEnv environments follow the Gym-style specifications with defined action spaces. We need a standardized way to surface tools as part of the environment's interface to policy for RL training and at the same time, use the same tools during inference. -## Background: MCP Architecture +## High Level Approach -### Overview +There are primarily two problems in relation to tools that we want to solve with this proposal. -MCP (Model Context Protocol) is a protocol for exposing tools to AI models. It uses: -- **JSON Schema** for tool definitions and parameter validation -- **RPC-based communication** (typically over stdio, HTTP, or SSE) -- **Language independence** - servers can be written in any language +1. Action Discovery: This entails the mechanism & interface by which RL training code as well as inference discovers the tools available at its disposal. +2. Actions & Tool Calling: This entails the mechanism & interface by which RL training code as well inference calls the tools it discovered as part of Tool discovery. -### Standard MCP Flow +In terms of design principles, we want to approach this with: -``` -┌─────────────┐ ┌─────────────┐ -│ │ 1. list_tools() │ │ -│ MCP Client │─────────────────────────>│ MCP Server │ -│ │ │ │ -│ │<─────────────────────────│ │ -│ │ 2. Tool definitions │ │ -│ │ (JSON Schema) │ │ -│ │ │ │ -│ │ 3. call_tool(name, │ │ -│ │ params) │ │ -│ │─────────────────────────>│ │ -│ │ │ │ -│ │<─────────────────────────│ │ -│ │ 4. Tool result (JSON) │ │ -└─────────────┘ └─────────────┘ -``` +1. **Be as close as possible to MCP protocol** when it comes to tool support in OpenEnv. This reduces the barrier for adoption. +2. **Minimize the difference between training vs inference**. This helps achieve the same or expected level of performance from the agents. +3. **Continue supporting simple gym-style APIs for RL** but augment where needed to support the same env in inference. -### Why MCP Works for Traditional Tool Calling +### Proposed Solution -In RFC 004, we defined `ToolCallAction` with a `tool_name` and `parameters` structure. This maps naturally to MCP: +We propose to **adopt** the MCP interface for **all actions exposed to the Agent** in OpenEnv. Note that this does **not** include what we instead expose to the training/serving infrastructure (the control plane), which we will talk about later. -```python -# RFC 004 style -action = ToolCallAction( - tool_name="search_web", - parameters={"query": "python patterns", "max_results": 5} -) -observation = env.step(action) - -# Maps to MCP call_tool RPC -mcp_client.call_tool( - name="search_web", - arguments={"query": "python patterns", "max_results": 5} -) -``` +While not every action may use what we could call “tools”, the general need to list all possible actions and to execute one overlaps exactly with MCP. So, this RFC proposes to just standardize on the MCP protocol for all actions as providing a consistent interface helps models. -The environment can act as an MCP client, forwarding tool calls to the MCP server and returning results in observations. +There are two ways to perform actions: -### Why MCP Needs Adaptation for CodeAct +1. **Tool-calling** makes a single tool call per agent action (and thus env step) +2. **CodeAct** allows the agent to write code blocks as an action and exposes tools as methods callable within the code block, thus enabling multiple tool call per single action -In CodeAct, agents write Python code that executes directly. **Best Practice**: Tools should be pre-imported in the execution environment, and the model should be informed of available tools via a system prompt. Any import statements written by the model should be ignored. +Our proposal supports both: Env builders will **build once** and will be compatible with either style out of the box. -```python -# Agent generates this code (no imports!) -# Tools are already available: search_web, read_file +Let’s go through some scenarios. -results = search_web(query="python patterns", max_results=5) -config = read_file(path="/workspace/config.json") -print(f"Found {len(results)} results") -``` +#### Scenario 1: Perform actions/call MCP tools (they become the same thing) -**Pros**: -- **Security**: Prevents arbitrary module imports -- **Determinism**: Environment controls exactly what's available -- **Simplicity**: Model doesn't need to guess import syntax or module names -- **Reliability**: Avoids import errors and version conflicts +| Tool call style | CodeAct style | +| :---- | :---- | +| `obs = env.step( ToolCallAction( tool="read_text_file", path="~/file.txt", head=100 ) ) ` | `obs = env.step( CodeAction(""" text = read_text_file('~/file.txt', head=100) return [l for l in text.split("\n") if "needle" in l] """) )` | -This requires: -1. **Pre-import tools**: Inject tool functions into the execution namespace before running agent code -2. **Function call translation**: Converting Python function calls to MCP RPC calls -3. **Type marshaling**: Converting between Python types and JSON for MCP communication -4. **Import filtering**: Strip or ignore import statements from agent-generated code +#### Scenario 2: Discover actions/MCP tools (they become the same thing) -## Design +| Tool call style | CodeAct style | +| :---- | :---- | +| `obs = env.step(ListToolsAction()) # obs contains the list. We provide this action for you, you don't have to code it.` | There is only one action: `CodeAction`, but you can call `list_tools()` as a function inside it. `obs = env.step( CodeAction(""" return [t for t in list_tools() if 'browser' in t] """) ) ` Again, we will do this plumbing for you. | -### Architecture Overview +#### Scenario 3: I already have my own MCP client for inference -#### 3. System Prompt for Tool Availability +A lot of what `env.step()` provides can be performed by an MCP client, assuming you don't care about the other things we do like e.g. reward computation, evals etc (which you probably don't in prod). In this case, we expose an MCP endpoint alongside the existing HTTP API. -When using CodeAct with pre-imported tools, the agent needs to know what's available. We provide this via a system prompt: + **Transport:** -```python -def generate_tool_system_prompt(registry: MCPToolRegistry) -> str: - """Generate a system prompt describing available tools. +* We reuse the same HTTP transport via fastAPI that we are using for the Env to also expose the MCP server (content will follow MCP's JSON-RPC message format). + * NOTE: MCP’s default transport protocols are stdio and streamable HTTP. However, [Custom transport protocols](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#custom-transports) are allowed and still in-spec. +* Future: We plan to support standard Streamable HTTP transport to reduce latency and be more aligned with the spec. - Args: - registry: Tool registry containing available tools +```py +# Environment exposes both interfaces + env = MyEnvironment() + app = create_fastapi_app(env, action_cls, observation_cls) - Returns: - System prompt text describing available tools - """ - prompt_parts = [ - "You are writing Python code that will be executed.", - "The following tools are pre-imported and available for use:", - "" - ] + # Training/Eval: Use step API + POST http://localhost:8000/step + {"action": {...}} - for tool_name in registry.list_tools(): - tool = registry.get_tool(tool_name) - prompt_parts.append(f"- {tool_name}: {tool.__doc__ or 'No description'}") - - prompt_parts.extend([ - "", - "IMPORTANT: Do NOT write import statements. All tools are already available.", - "Simply call the functions directly by name.", - "", - "Example:", - "results = search_web(query='python async', max_results=5)", - "content = read_file(path='/workspace/config.json')", - ]) - - return "\n".join(prompt_parts) -``` + # Production/Inference: Use MCP API + POST http://localhost:8000/mcp + {"jsonrpc": "2.0", "method": "tools/list", "id": 1} + POST http://localhost:8000/mcp + {"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "...", "arguments": {...}}, "id": 2} ``` -┌────────────────────────────────────────────────────────────────┐ -│ Docker Environment │ -│ │ -│ ┌─────────────────────────────────────────────────────────┐ │ -│ │ Agent Code (Python) │ │ -│ │ │ │ -│ │ # Traditional style (RFC 003) │ │ -│ │ action = ToolCallAction( │ │ -│ │ tool_name="search_web", │ │ -│ │ parameters={"query": "..."} │ │ -│ │ ) │ │ -│ │ env.step(action) │ │ -│ │ │ │ -│ │ # CodeAct style (NEW) │ │ -│ │ # Tools pre-imported, no import statements needed │ │ -│ │ results = search_web(query="...") │ │ -│ └────────────────────┬────────────────────────────────────┘ │ -│ │ │ -│ │ Python import/call │ -│ ▼ │ -│ ┌─────────────────────────────────────────────────────────┐ │ -│ │ MCP Client (Python Library) │ │ -│ │ │ │ -│ │ - Tool discovery & caching │ │ -│ │ - Dynamic Python function generation │ │ -│ │ - Type marshaling (Python ↔ JSON) │ │ -│ │ - RPC communication with MCP servers │ │ -│ └────────────────────┬────────────────────────────────────┘ │ -│ │ HTTP/SSE │ -└───────────────────────┼────────────────────────────────────────┘ - │ - ┌───────────────┼───────────────┐ - │ │ │ - ▼ ▼ ▼ -┌──────────────┐ ┌──────────────┐ ┌──────────────┐ -│ MCP Server 1 │ │ MCP Server 2 │ │ MCP Server N │ -│ (Search) │ │ (Files) │ │ (Database) │ -└──────────────┘ └──────────────┘ └──────────────┘ -``` - -### Core Components - -#### 1. MCP Client Library - -We need an MCP client that can run inside our Python execution environments. We have three options: -**Option A: Build our own** - Full control but requires maintenance -**Option B: Use FastMCP** - Popular, well-maintained Python MCP client -**Option C: Use mcp-use** - Alternative Python MCP library -**Recommendation**: Start with **FastMCP** or **mcp-use** as they provide: -- Standard MCP protocol implementation -- Tool discovery and schema parsing -- RPC communication primitives -- Active maintenance and community support + Limitations (to be addressed later): + \- No SSE streaming (single request/response only) + \- No server-initiated messages + \- No session management + \- These will be added when we implement standard Streamable HTTP transport -#### 2. Tool Registry & Namespace Injection +## CodeAct-specific performance improvement for local MCP servers {#codeact-specific-performance-improvement-for-local-mcp-servers} -```python -from typing import Any, Callable, Dict -import inspect +MCP is a client-server architecture that requires JSON-RPC for cross-process communication. This design maps naturally to remote MCP servers and tool calling-style. When we go into CodeAct-style, there’s an extra issue to think about whenever the MCP server is local: **double-marshaling**. -class MCPToolRegistry: - """Registry that exposes MCP tools as Python functions. +If you write a Python function for local execution, e.g. `fibonacci(n)`, and then decorate it with a fastmcp `@mcp.tool` decorator, you can then expose it via MCP to the fastMCP server. This means that this function will now take RPCs and will marshal types from Python → JSON-RPC. If you then want to use CodeAct, you want to pass this MCP tool to a Python interpreter for local execution, thus doing another conversion JSON-RPC → Python\! You did a whole round trip just to come back to square one. - This bridges MCP's RPC-based tool calling to Python's function - call syntax, enabling CodeAct-style tool usage. +Existing implementations of MCP \+ CodeAct from [Anthropic](https://www.anthropic.com/engineering/code-execution-with-mcp) and [CloudFlare](https://blog.cloudflare.com/code-mode/) do not address this, but they likely have more remote MCP servers (while we focus on local MCP servers at this stage). Many of our environments come from gym-style, no-tool envs for RL, which will translate into becoming local MCP servers. With CodeAct becoming mainstream, performance becomes a concern for us. - Tools are injected into the execution namespace before running - agent code, eliminating the need for import statements. - """ +### Proposal: use introspection? - def __init__(self, mcp_clients: list[MCPClient]): - """Initialize registry with one or more MCP clients. +We can build a MCP server similar to FastMCP, but with the ability to register local tool calls, e.g. - Args: - mcp_clients: List of MCP clients connected to different servers - """ - self.mcp_clients = mcp_clients - self._tool_map: Dict[str, tuple[MCPClient, ToolDefinition]] = {} - self._discover_tools() +```py +from mcp.server import Server - def _discover_tools(self) -> None: - """Discover all tools from connected MCP servers.""" - for client in self.mcp_clients: - tools = client.list_tools() - for tool in tools: - self._tool_map[tool.name] = (client, tool) + class LocalMCPServer: + def __init__(self): + self.mcp = Server("myserver") + self._callables = {} # Store underlying functions - def get_tool(self, name: str) -> Callable: - """Get a Python-callable wrapper for an MCP tool. + def tool(self, func): + """Decorator that registers both MCP tool AND stores callable""" + # Store the actual Python function + self._callables[func.__name__] = func - Args: - name: Tool name + # Also register for MCP protocol + @self.mcp.call_tool() + async def mcp_handler(name: str, arguments: dict): + if name == func.__name__: + return func(**arguments) - Returns: - Callable that executes the MCP tool + return func - Example: - # Get a single tool wrapper - search = registry.get_tool("search_web") - results = search(query="python", max_results=5) - """ - if name not in self._tool_map: - raise ValueError(f"Tool '{name}' not found in registry") + def get_callables(self) -> dict[str, Callable]: + """Return dict of {function_name: function}""" + return self._callables.copy() - client, tool_def = self._tool_map[name] + # Define tools + server = LocalMCPServer() - def tool_wrapper(**kwargs: Any) -> Any: - """Generated wrapper function that calls MCP tool.""" - # Validate parameters against JSON schema - self._validate_params(tool_def, kwargs) + @server.tool + def fibonacci(n: int) -> int: + if n <= 1: return n + return fibonacci(n-1) + fibonacci(n-2) - # Call MCP server - result = client.call_tool(name, kwargs) - - # Parse and return result - return result +``` - # Set function metadata for better introspection - tool_wrapper.__name__ = name - tool_wrapper.__doc__ = tool_def.description +Then we can inject these functions into the namespace of the Python interpreter: - # Generate type hints from JSON schema (optional enhancement) - # tool_wrapper.__annotations__ = self._schema_to_annotations(tool_def) +```py +class CodeActEnvironment: + def __init__(self): + self.mcp_server = self._create_mcp_server() - return tool_wrapper + def _get_local_tools_as_callables(self) -> dict[str, Callable]: + """Extract Python callables from local MCP server""" + tools = {} - def list_tools(self) -> list[str]: - """List all available tool names.""" - return list(self._tool_map.keys()) + # Introspect the MCP server to get underlying Python functions + # (assumes local MCP server exposes this - see above) + for tool_name, func in self.mcp_server.get_callables().items(): + tools[tool_name] = func - def get_all_tools(self) -> Dict[str, Callable]: - """Get all tools as a dictionary for namespace injection. + return tools - Returns: - Dictionary mapping tool names to callable wrappers + def execute_code(self, code: str): + """Execute agent's code with tools injected directly""" - Example: - tools = registry.get_all_tools() - # Inject into execution namespace - exec_globals = {**globals(), **tools} - exec(agent_code, exec_globals) - """ - return {name: self.get_tool(name) for name in self.list_tools()} + # Build execution namespace with tools as direct functions + namespace = self._get_local_tools_as_callables() - def _validate_params(self, tool_def: ToolDefinition, params: Dict[str, Any]) -> None: - """Validate parameters against tool's JSON schema.""" - # Use jsonschema library for validation - # This ensures type safety even with dynamic calls - pass + # Agent's code now has direct access! + exec(code, namespace) + return namespace.get('result') # Or however you capture output -def filter_imports(code: str) -> str: - """Remove import statements from agent-generated code. +``` - This prevents models from attempting to import modules, - since all tools are pre-imported into the namespace. - - Args: - code: Python code that may contain import statements +Of course, **remote** MCP servers would go through the standard route – even if they are written in Python, there isn’t much we can do since we need to send data over the wire anyway. This optimization only applies to local servers—remote MCP servers will continue to use the standard protocol since data must be serialized over the network anyway. This approach preserves MCP's benefits for tool discovery and model prompting while eliminating redundant marshaling for local execution. - Returns: - Code with import statements removed +## Design - Example: - code = ''' - from tools import search_web - import os - - result = search_web(query="test") - ''' - - filtered = filter_imports(code) - # filtered = "result = search_web(query='test')" - """ - import re - # Remove 'import ...' and 'from ... import ...' lines - lines = code.split('\n') - filtered_lines = [ - line for line in lines - if not re.match(r'^\s*(import\s+|from\s+.*\s+import\s+)', line) - ] - return '\n'.join(filtered_lines) +### Architecture Overview \- Tool-call mode + +```mermaid +flowchart TB + Inference["Inference Server + (e.g., vLLM)"] + + subgraph icp["Infrastructure Control Plane"] + Reset["Use Case 1: + Reset Environment"] + RunStep["Use Case 2: + Run Agent Step + (Standard Flow)"] + DirectMCP["Use Case 3: + Call Tool Directly + (Alternative Flow)"] + end + + subgraph container["OpenEnv Container"] + ResetEndpoint["reset()"] + + StepEndpoint["step() + + MCP Client + Reward"] + + ParentMCP["Parent MCP Server + (composition)"] + + subgraph children["Child MCP Servers"] + FS["Filesystem"] + Git["Git"] + Browser["Browser"] + end + end + + %% Use Case 1: Reset + Reset -->|"POST /reset"| ResetEndpoint + + %% Use Case 2: Agent Step (Standard) + RunStep -->|"request text"| Inference + Inference -->|"generated text"| RunStep + RunStep -->|"POST /step + (with text)"| StepEndpoint + StepEndpoint -->|"Observation + + Reward"| RunStep + + %% Use Case 3: Direct MCP (Alternative) + DirectMCP -.->|"POST /mcp + (bypass step)"| ParentMCP + + %% MCP Flow inside container + StepEndpoint -->|"JSON-RPC"| ParentMCP + + %% MCP Composition + ParentMCP <-->|"delegates"| FS + ParentMCP <-->|"delegates"| Git + ParentMCP <-->|"delegates"| Browser + + %% Styling + classDef icpBox fill:#d6eaff,stroke:#0066cc,stroke-width:3px + classDef useCaseBox fill:#e3f2fd,stroke:#1976d2,stroke-width:1px + classDef inferenceBox fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef containerBox fill:#fffacd,stroke:#ff9800,stroke-width:3px + classDef endpointBox fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px + classDef childBox fill:#f3e5f5,stroke:#9c27b0,stroke-width:1px + + class Inference inferenceBox + class Reset,RunStep,DirectMCP useCaseBox + class ResetEndpoint,StepEndpoint,ParentMCP endpointBox + class FS,Git,Browser childBox ``` -### Integration with Environment Interface - -#### Traditional Tool Calling (RFC 003 Style) +### Architecture Overview \- CodeAct mode + +```mermaid +flowchart TB + Inference["Inference Server + (e.g., vLLM)"] + + subgraph icp["Infrastructure Control Plane"] + Reset["Use Case 1: + Reset Environment"] + RunStep["Use Case 2: + Run Agent Step + (CodeAct Mode)"] + DirectMCP["Use Case 3: + Call Tool Directly + (Alternative Flow)"] + end + + subgraph container["OpenEnv Container"] + ResetEndpoint["reset()"] + + StepEndpoint["step() + + Code Sandbox + Reward"] + + ParentMCP["Parent MCP Server + (composition)"] + + subgraph local["Local Child Servers + (Direct Python calls)"] + FS["Filesystem + ⚡ Direct callable"] + Git["Git + ⚡ Direct callable"] + Python["Python REPL + ⚡ Direct callable"] + end + + subgraph remote["Remote Child Servers + (JSON-RPC)"] + Slack["Slack API + 🌐 JSON-RPC"] + External["External APIs + 🌐 JSON-RPC"] + end + end + + %% Use Case 1: Reset + Reset -->|"POST /reset"| ResetEndpoint + + %% Use Case 2: Agent Step (CodeAct) + RunStep -->|"request text"| Inference + Inference -->|"generated Python code"| RunStep + RunStep -->|"POST /step + (with code)"| StepEndpoint + StepEndpoint -->|"Observation + + Reward"| RunStep + + %% Use Case 3: Direct MCP (Alternative) + DirectMCP -.->|"POST /mcp + (bypass step)"| ParentMCP + + %% Code execution - local direct calls (NO JSON-RPC) + StepEndpoint -->|"Direct Python call + NO marshaling"| FS + StepEndpoint -->|"Direct Python call + NO marshaling"| Git + StepEndpoint -->|"Direct Python call + NO marshaling"| Python + + %% Code execution - remote JSON-RPC + StepEndpoint -->|"JSON-RPC + from within code"| Slack + StepEndpoint -->|"JSON-RPC + from within code"| External + + %% All servers registered with Parent + FS -->|"registered"| ParentMCP + Git -->|"registered"| ParentMCP + Python -->|"registered"| ParentMCP + Slack -->|"registered"| ParentMCP + External -->|"registered"| ParentMCP + + %% Styling + classDef icpBox fill:#d6eaff,stroke:#0066cc,stroke-width:3px + classDef useCaseBox fill:#e3f2fd,stroke:#1976d2,stroke-width:1px + classDef inferenceBox fill:#fff3e0,stroke:#f57c00,stroke-width:2px + classDef containerBox fill:#fffacd,stroke:#ff9800,stroke-width:3px + classDef endpointBox fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px + classDef localBox fill:#e8f5e9,stroke:#4caf50,stroke-width:2px + classDef remoteBox fill:#e3f2fd,stroke:#2196f3,stroke-width:2px + + class Inference inferenceBox + class Reset,RunStep,DirectMCP useCaseBox + class ResetEndpoint,StepEndpoint,ParentMCP endpointBox + class FS,Git,Python localBox + class Slack,External remoteBox +``` -Environments act as MCP clients: +### Frequently Asked Questions -```python -from core.env_server import Environment, Observation -from mcp_client import MCPClient +### FAQ 001\. How do we handle progressive disclosure with 100+ tools? -class ToolCallingEnvironment(Environment): - """Environment that forwards ToolCallActions to MCP servers.""" +Progressive disclosure (showing a subset of tool schemas to save context) is handled at the **MCP protocol layer**, not by OpenEnv. MCP servers can implement progressive disclosure patterns, and MCP clients can provide `get_tool_schema()` meta-tools for on-demand schema loading. - def __init__(self, mcp_servers: list[str]): - self.mcp_clients = [MCPClient(url) for url in mcp_servers] - self.registry = MCPToolRegistry(self.mcp_clients) +OpenEnv simply consumes MCP's `list_tools()` and `call_tool()` APIs. How the MCP server manages tool schemas internally is outside our scope. - def step(self, action: Action) -> Observation: - if isinstance(action, ToolCallAction): - # Forward to MCP server - tool = self.registry.get_tool(action.tool_name) - result = tool(**action.parameters) - - # Convert result to observation - return self._make_observation(result) - else: - raise ValueError(f"Expected ToolCallAction, got {type(action)}") - - def tools(self) -> list[ToolDefinition]: - """RFC 003 tool discovery API.""" - return [tool_def for _, tool_def in self.registry._tool_map.values()] -``` +**Resources**: -#### CodeAct Style +- [MCP Specification on Resource Discovery](https://spec.modelcontextprotocol.io/) +- Future work (RFC 007\) will explore MCP protocol interception for caching and metadata injection -Python code execution environments pre-import tools into the execution namespace: +### FAQ 002\. Wait, so every action is a “tool” now?\! -```python -from core.env_server import Environment -from core.tools import PyExecutor -from mcp_client import MCPClient, MCPToolRegistry, filter_imports +Yes. So, if e.g. you are playing a game of chess, moving pieces becomes a “tool” of sorts. Ultimately what MCP considers a “tool” is simply a function, so as long as you had a function before, you are just a Python decorator away from migrating to this brand new world. What you get is worth it as models are primed to call MCP servers, so they benefit from this standardization as it’s much more in distribution. We propose a [way](#codeact-specific-performance-improvement-for-local-mcp-servers) to mitigate performance impact of this while on local MCP servers. -class CodeActEnvironment(Environment): - """Environment for CodeAct with MCP tool access.""" +### FAQ 003\. How many servers do you have? - def __init__(self, mcp_servers: list[str]): - self.executor = PyExecutor() +It’s up to env builders to decide how many servers they want to expose – ultimately, it’s a question of how you want to group your tools. - # Initialize MCP clients and registry - mcp_clients = [MCPClient(url) for url in mcp_servers] - self.registry = MCPToolRegistry(mcp_clients) +However, we should expose **a single MCP server** by combining them as appropriate: FastMCP (and most MCP implementations) support [composition](https://gofastmcp.com/servers/composition) for this reason. - # Pre-import all tools into execution namespace - self.tool_namespace = self.registry.get_all_tools() +# Appendix - def step(self, action: CodeAction) -> Observation: - # Filter out any import statements from agent code - filtered_code = filter_imports(action.code) +### MCP Primer: What We Need to Implement - # Execute with tools pre-injected into namespace - result = self.executor.run( - filtered_code, - extra_globals=self.tool_namespace - ) - return self._make_observation(result) +The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open standard that provides a REST-like API for AI agents to interact with external systems. To be MCP-compliant, we need to implement a client that can communicate with MCP servers. - def get_system_prompt(self) -> str: - """Get system prompt describing available tools.""" - return generate_tool_system_prompt(self.registry) -``` +#### Core MCP APIs -### MCP Server Deployment - -#### Deployment Pattern - -MCP servers should be deployed alongside environment containers. We propose a Docker Compose pattern: - -```yaml -# docker-compose.yml -version: '3.8' - -services: - # Main environment container - environment: - build: ./environment - ports: - - "8000:8000" - environment: - - MCP_SERVERS=http://mcp-search:8001,http://mcp-files:8002 - depends_on: - - mcp-search - - mcp-files - networks: - - agent-network - - # MCP server for web search - mcp-search: - image: mcp-search-server:latest - ports: - - "8001:8001" - environment: - - SEARCH_API_KEY=${SEARCH_API_KEY} - networks: - - agent-network - - # MCP server for file operations - mcp-files: - image: mcp-files-server:latest - ports: - - "8002:8002" - volumes: - - workspace:/workspace:ro - networks: - - agent-network - -networks: - agent-network: - driver: bridge - -volumes: - workspace: -``` +MCP servers expose three main capabilities through JSON-RPC: -#### Environment Configuration +##### 1\. Tools (Primary Focus) -Environments specify required MCP servers in their configuration: +Tools are functions that agents can call to perform actions or retrieve information. -```python -# environment_config.py -from dataclasses import dataclass -from typing import List +**Discovery**: `tools/list` -@dataclass -class MCPServerConfig: - """Configuration for an MCP server.""" - name: str - image: str - port: int - env_vars: dict[str, str] = None +```json +{ + "jsonrpc": "2.0", + "method": "tools/list", + "id": 1 +} +``` -@dataclass -class EnvironmentConfig: - """Environment configuration including MCP dependencies.""" - name: str - image: str - mcp_servers: List[MCPServerConfig] - -# Example configuration -CODING_ENV_CONFIG = EnvironmentConfig( - name="coding-env", - image="coding-env:latest", - mcp_servers=[ - MCPServerConfig( - name="search", - image="mcp-search-server:latest", - port=8001, - env_vars={"SEARCH_API_KEY": "${SEARCH_API_KEY}"} - ), - MCPServerConfig( - name="files", - image="mcp-files-server:latest", - port=8002, - ), +**Response**: + +```json +{ + "jsonrpc": "2.0", + "result": { + "tools": [ + { + "name": "search_web", + "description": "Search the web for information", + "inputSchema": { + "type": "object", + "properties": { + "query": { "type": "string" }, + "max_results": { "type": "integer", "default": 5 } + }, + "required": ["query"] + } + } ] -) + }, + "id": 1 +} ``` -#### Build & Deployment Tools - -We provide utilities to generate Docker Compose files from environment configs: - -```python -from pathlib import Path -import yaml - -def generate_compose_file(config: EnvironmentConfig, output_path: Path) -> None: - """Generate docker-compose.yml from environment config.""" - compose = { - "version": "3.8", - "services": {}, - "networks": {"agent-network": {"driver": "bridge"}}, +**Invocation**: `tools/call` + +```json +{ + "jsonrpc": "2.0", + "method": "tools/call", + "params": { + "name": "search_web", + "arguments": { + "query": "python patterns", + "max_results": 5 } - - # Main environment service - mcp_urls = [f"http://{s.name}:{s.port}" for s in config.mcp_servers] - compose["services"]["environment"] = { - "image": config.image, - "ports": ["8000:8000"], - "environment": { - "MCP_SERVERS": ",".join(mcp_urls) - }, - "depends_on": [s.name for s in config.mcp_servers], - "networks": ["agent-network"], - } - - # MCP server services - for server in config.mcp_servers: - compose["services"][server.name] = { - "image": server.image, - "ports": [f"{server.port}:{server.port}"], - "networks": ["agent-network"], - } - if server.env_vars: - compose["services"][server.name]["environment"] = server.env_vars - - # Write compose file - output_path.write_text(yaml.dump(compose)) - -# Usage -generate_compose_file(CODING_ENV_CONFIG, Path("docker-compose.yml")) + }, + "id": 2 +} ``` -## Key Design Decisions - -### Decision 1: MCP Client Implementation +**Full specification**: [MCP Tools API](https://modelcontextprotocol.io/specification/2025-06-18/server/tools) -**Chosen Approach**: Use existing Python MCP client library (FastMCP or mcp-use) rather than building our own. +##### 2\. Resources (Secondary \- mentioned for completeness) -**Rationale**: -- **Faster development**: Leverage existing, tested implementations -- **Standard compliance**: These libraries follow MCP spec changes -- **Community support**: Benefit from community bug fixes and features -- **Focus on value-add**: Spend effort on CodeAct integration, not protocol details +Resources provide read-only data that agents can access (files, database queries, API responses, etc.). -**Trade-offs**: -- External dependency (mitigated by vendoring if needed) -- Less control over implementation details +- `resources/list` \- Discover available resources +- `resources/read` \- Read resource contents -### Decision 2: Pre-Import Tools vs Import Statements +**Full specification**: [MCP Resources API](https://modelcontextprotocol.io/specification/2025-06-18/server/resources) -**Chosen Approach**: Pre-import all tools into the execution namespace and filter out import statements from agent code. +##### 3\. Prompts (Secondary \- mentioned for completeness) -**Rationale**: -- **Security**: Prevents arbitrary module imports that could access system resources -- **Determinism**: Environment has full control over available tools -- **Reliability**: Eliminates import errors and module not found issues -- **Simplicity**: Model doesn't need to know correct import syntax -- **Best Practice**: Aligns with sandboxed code execution principles +Prompts are reusable prompt templates that agents can retrieve and instantiate. -**Trade-offs**: -- Requires filtering/stripping import statements from agent code -- Need clear system prompts to inform model of available tools -- Less "natural" than writing actual imports (but safer and more reliable) +- `prompts/list` \- Discover available prompts +- `prompts/get` \- Retrieve a prompt template -### Decision 3: Docker Compose for MCP Server Orchestration +**Full specification**: [MCP Prompts API](https://modelcontextprotocol.io/specification/2025-06-18/server/prompts) -**Chosen Approach**: Use Docker Compose to deploy MCP servers alongside environment containers. +**Note**: This RFC focuses primarily on **tools** as they are the most common use case for agent-environment interaction. Resources and prompts are mentioned for completeness but will be addressed in future RFCs if needed. -**Rationale**: -- **Declarative**: Clear specification of dependencies -- **Standard tooling**: Docker Compose is widely understood -- **Networking**: Built-in network isolation and service discovery -- **Development experience**: Easy local testing with `docker-compose up` +#### Traditional MCP Interface: Function Calling -**Trade-offs**: -- Additional complexity for simple environments without tools -- May need adaptation for Kubernetes deployments (future RFC) +The most direct way to support MCP is to map the protocol directly to action types. -## Examples +##### ListToolsAction and CallToolAction -### Example 1: Traditional Tool Calling with MCP +We introduce two action types that correspond directly to MCP's API: -```python -from envs.tool_calling_env import ToolCallingEnv, ToolCallAction +```py +@dataclass +class ListToolsAction(Action): + """Request list of available tools from MCP servers.""" + pass # No parameters needed -# Start environment with MCP servers -env = ToolCallingEnv.from_docker_compose("docker-compose.yml") +@dataclass +class CallToolAction(Action): + """Call a specific tool via MCP.""" + tool_name: str + parameters: Dict[str, Any] +``` -# Discover available tools -tools = env.tools() -print(f"Available tools: {[t.name for t in tools]}") -# Output: ['search_web', 'read_file', 'write_file'] +##### How It Works -# Reset environment -obs = env.reset() +```py +# Agent discovers available tools +action = ListToolsAction() +obs = env.step(action) +# obs.tools = [ +# {"name": "search_web", "description": "...", "inputSchema": {...}}, +# {"name": "read_file", "description": "...", "inputSchema": {...}} +# ] -# Agent makes tool call -action = ToolCallAction( +# Agent calls a tool +action = CallToolAction( tool_name="search_web", - parameters={"query": "Python async patterns", "max_results": 5} + parameters={"query": "python patterns", "max_results": 5} ) - -obs = env.step(action) -print(obs.metadata["tool_result"]) -# Output: [{"title": "...", "url": "...", ...}, ...] - -env.close() -``` - -### Example 2: CodeAct with MCP Tools - -```python -from envs.codeact_env import CodeActEnv, CodeAction - -# Start environment (MCP servers started automatically) -env = CodeActEnv.from_docker_compose("docker-compose.yml") - -# Reset environment -obs = env.reset() - -# Get system prompt to inform agent of available tools -system_prompt = env.get_system_prompt() -print(system_prompt) -# Output: -# You are writing Python code that will be executed. -# The following tools are pre-imported and available for use: -# -# - search_web: Search the web for information -# - read_file: Read contents of a file -# ... - -# Agent generates code that uses MCP tools (no imports!) -agent_code = """ -# Tools are already available, just use them directly -results = search_web(query="Python async patterns", max_results=5) -print(f"Found {len(results)} results") - -# Read configuration -config = read_file(path="/workspace/config.json") -print(f"Config: {config}") -""" - -# Execute code (tools available transparently) -action = CodeAction(code=agent_code) obs = env.step(action) - -print(obs.stdout) -# Output: -# Found 5 results -# Config: {...} - -env.close() +# obs.result = {"results": [...]} ``` -### Example 3: Building MCP Server for Custom Tools - -```python -# my_tools_server.py -from fastmcp import FastMCP - -mcp = FastMCP("My Custom Tools") - -@mcp.tool() -def analyze_sentiment(text: str) -> dict: - """Analyze sentiment of text. - - Args: - text: Text to analyze - - Returns: - Dictionary with sentiment scores - """ - # Your implementation - return { - "positive": 0.8, - "negative": 0.1, - "neutral": 0.1 - } - -@mcp.tool() -def summarize_text(text: str, max_length: int = 100) -> str: - """Summarize text to specified length. +##### Environment Implementation - Args: - text: Text to summarize - max_length: Maximum length of summary +```py +from mcp_client import MCPClient - Returns: - Summarized text - """ - # Your implementation - return text[:max_length] + "..." +class MCPEnvironment(Environment): + def __init__(self, mcp_server_urls: list[str]): + self.mcp_clients = [MCPClient(url) for url in mcp_server_urls] -if __name__ == "__main__": - mcp.run() + def step(self, action: Action) -> Observation: + if isinstance(action, ListToolsAction): + # Call tools/list on all MCP servers + all_tools = [] + for client in self.mcp_clients: + tools = client.list_tools() + all_tools.extend(tools) + + return Observation( + done=False, + metadata={"tools": all_tools} + ) + + elif isinstance(action, CallToolAction): + # Find the right MCP server and call tools/call + for client in self.mcp_clients: + if client.has_tool(action.tool_name): + result = client.call_tool( + name=action.tool_name, + arguments=action.parameters + ) + return Observation( + done=False, + metadata={"result": result} + ) + + raise ValueError(f"Tool '{action.tool_name}' not found") ``` -```dockerfile -# Dockerfile for custom MCP server -FROM python:3.10-slim - -WORKDIR /app - -RUN pip install fastmcp +This approach is **immediately MCP-compliant** \- we're just exposing the MCP REST API as Gym-style actions. -COPY my_tools_server.py . - -EXPOSE 8001 - -CMD ["python", "my_tools_server.py"] -``` ## Open Questions 1. **Caching**: Should we cache tool results, and if so, what's the invalidation strategy? @@ -729,6 +552,8 @@ CMD ["python", "my_tools_server.py"] 3. **Error Handling**: Should MCP errors be propagated as exceptions or returned in observations? 4. **Versioning**: How to handle version compatibility between MCP clients and servers? +**Note**: Observability and protocol-level interception for MCP will be addressed in RFC 007 (MCP Protocol Interception), which will define patterns for monitoring, logging, and metadata injection at the MCP protocol layer. + ## References - [Model Context Protocol Specification](https://spec.modelcontextprotocol.io/) @@ -737,4 +562,3 @@ CMD ["python", "my_tools_server.py"] - RFC 000: OpenEnv Project Phases - RFC 001: OpenEnv Basic Abstractions - RFC 002: OpenEnv Framework Spec -- RFC 004: Support multiple tool calls via Action wrapper abstraction diff --git a/rfcs/004-actions-as-tool-calls.md b/rfcs/004-actions-as-tool-calls.md deleted file mode 100644 index c3434f5b..00000000 --- a/rfcs/004-actions-as-tool-calls.md +++ /dev/null @@ -1,479 +0,0 @@ -# RFC: Support multiple tool calls via Action wrapper abstraction - -**Status**: In Review -**Created**: 10/15/2025 -**Authors**: @Darktex, @pankit-eng -**RFC ID**: 004 - -**Note**: This RFC defines the unified action interface that applies to all environment types. RFC 003 describes how MCP tools integrate with this action system to enable tool calling in both traditional and CodeAct paradigms. - -## Summary - -This RFC proposes treating environment actions using a standardized pattern inspired by MCP (Model Context Protocol), where each action represents a discrete, named operation with typed parameters. This approach aligns OpenEnv with modern LLM agent frameworks while maintaining type safety and providing better introspection capabilities for agent training and debugging. - -Instead of arbitrary `Action` subclasses with domain-specific fields, actions follow a tool-call pattern with a `tool_name` and structured `parameters`, making the framework more composable and easier to integrate with tool-using agents. - -**Important**: While inspired by MCP's tool-calling pattern, this abstraction extends beyond external tools and code execution to **any environment action** - including game moves, navigation commands, configuration changes, and domain-specific operations that don't involve tools at all. - -## Motivation - -### Problem Statement - -Current action design in OpenEnv treats actions as dataclasses: - -```python -@dataclass -class CodeAction(Action): - code: str - -@dataclass -class BashAction(Action): - command: str - cwd: Optional[str] = None - -@dataclass -class MoveAction(Action): - direction: str # "up", "down", "left", "right" - -@dataclass -class GameAction(Action): - action_id: int - player_id: str -``` - -This approach has several limitations: - -1. **Lack of Introspection**: No standard way to discover what actions an environment supports -2. **LLM Integration Friction**: Modern LLM agents use tool-calling patterns with JSON schemas, requiring translation layers -3. **Inconsistent Patterns**: Each environment invents its own action structure without standardization -4. **Poor Discoverability**: Agents can't programmatically determine valid actions and their parameters - -### Goals - -1. **Standardize Action Structure**: Define a consistent pattern for representing all environment actions, inspired by MCP's tool-calling design -2. **Enable Action Discovery**: Provide APIs to introspect available actions in any environment -3. **Improve LLM Integration**: Native compatibility with tool-calling patterns used by Claude, GPT-4, and other models -4. **Maintain Type Safety**: Preserve strong typing while adopting the unified action pattern -5. **Universal Applicability**: Support any type of action - tools, code execution, game moves, navigation, configuration, etc. - -### Inspiration: MCP (Model Context Protocol) - -This RFC is heavily inspired by [MCP](https://spec.modelcontextprotocol.io/), which standardized how external tools are exposed to AI agents. MCP introduced: -- Standardized tool definitions with JSON Schema -- Tool discovery via `list_tools()` API -- Tool execution via `call_tool(name, parameters)` RPC -- Language-agnostic design - -We adopt these principles but **generalize beyond tools** to cover all environment actions. For example: -- A chess environment's "move piece" action is not a "tool" in the MCP sense -- A navigation environment's "go_north" action doesn't involve external tool calls -- A configuration environment's "set_parameter" action isn't code execution - -Yet all benefit from the same standardized action pattern. - -## Design - -### Architecture Overview - -``` -┌─────────────────────────────────────────────────────────┐ -│ Agent/RL Code │ -│ │ -│ # Action discovery (works for ANY environment) │ -│ actions = env.actions() │ -│ # -> [ActionDefinition(name="execute_code", ...)] │ -│ # -> [ActionDefinition(name="move_piece", ...)] │ -│ # -> [ActionDefinition(name="set_config", ...)] │ -│ │ -│ # Execute action (unified interface) │ -│ action = ToolCallAction( │ -│ tool_name="execute_code", │ -│ parameters={"code": "print('Hello')"} │ -│ ) │ -│ observation = env.step(action) │ -└─────────────────────────────────────────────────────────┘ - │ HTTP - ▼ -┌─────────────────────────────────────────────────────────┐ -│ Environment (Docker Container) │ -│ │ -│ class PythonCodeActEnv(Environment): │ -│ │ -│ @action("execute_code") │ -│ def execute_code(self, code: str) -> CodeResult: │ -│ return self._executor.run(code) │ -│ │ -│ def step(self, action: ToolCallAction): │ -│ action_fn = self._get_action(action.tool_name) │ -│ result = action_fn(**action.parameters) │ -│ return self._make_observation(result) │ -└─────────────────────────────────────────────────────────┘ -``` - -### Core Abstractions - -#### 1. ToolCallAction - -```python -from typing import Any, Dict -from dataclasses import dataclass, field - -@dataclass(kw_only=True) -class ToolCallAction(Action): - """Action representing a named operation with typed parameters. - - Inspired by MCP's tool-calling pattern, but generalized to represent - ANY environment action - not just tool calls or code execution. - - Examples: - - Tool calls: tool_name="search_web", parameters={"query": "..."} - - Code execution: tool_name="execute_code", parameters={"code": "..."} - - Game moves: tool_name="move_piece", parameters={"from": "e2", "to": "e4"} - - Navigation: tool_name="go_north", parameters={} - - Configuration: tool_name="set_timeout", parameters={"seconds": 30} - - This is the standard action type for all OpenEnv environments. - Environments dispatch based on tool_name to handle different action types. - """ - - tool_name: str - parameters: Dict[str, Any] = field(default_factory=dict) -``` - -#### 2. ToolDefinition - -```python -from typing import Any, Callable, Dict, List -from dataclasses import dataclass - -@dataclass -class ToolParameter: - """Definition of a tool parameter.""" - - name: str - type: str # JSON Schema type: "string", "number", "boolean", "object", "array" - description: str - required: bool = True - default: Any = None - -@dataclass -class ToolDefinition: - """Specification of an action that can be taken in an environment. - - Inspired by MCP's tool definition format and compatible with LLM tool-calling - APIs (Claude, OpenAI, etc.), but represents ANY action type - not just tools. - - This can describe: - - External tool calls (search_web, read_file) - - Code execution (execute_python, run_bash) - - Game actions (move_piece, attack, defend) - - Navigation commands (go_north, turn_left) - - Configuration changes (set_parameter, update_config) - - Any domain-specific action - """ - - name: str - description: str - parameters: List[ToolParameter] - - def to_json_schema(self) -> Dict[str, Any]: - """Convert to JSON Schema format for LLM tool calling.""" - return { - "name": self.name, - "description": self.description, - "input_schema": { - "type": "object", - "properties": { - p.name: { - "type": p.type, - "description": p.description, - } - for p in self.parameters - }, - "required": [p.name for p in self.parameters if p.required], - }, - } -``` - -#### 3. Enhanced Environment Interface - -```python -from typing import List, Optional - -class Environment(ABC): - """Base class for all environment servers.""" - - @abstractmethod - def reset(self) -> Observation: - """Reset the environment and return initial observation.""" - pass - - @abstractmethod - def step(self, action: Action) -> Observation: - """Take a step in the environment.""" - pass - - @property - @abstractmethod - def state(self) -> State: - """Get current environment state.""" - pass - - def actions(self) -> List[ToolDefinition]: - """Return list of available actions in this environment. - - This method enables action discovery for any environment type. - Actions can represent tools, code execution, game moves, navigation, - or any domain-specific operations. - - For backward compatibility, environments can return an empty list, - though implementing this method is strongly encouraged. - """ - return [] - - def tools(self) -> List[ToolDefinition]: - """Alias for actions() for backward compatibility with RFC 003. - - Deprecated: Use actions() instead. - """ - return self.actions() -``` - -### Key Design Decisions - -#### Decision 1: Unified Action Type vs. Per-Tool Action Classes - -**Chosen Approach**: Use a single `ToolCallAction` class with `tool_name` and `parameters` fields rather than creating separate action classes per tool. - -**Rationale**: -- **Simplicity**: Single action type is easier to understand and work with -- **Flexibility**: Adding new actions doesn't require new action classes -- **MCP Compatibility**: Matches the structure used by MCP for tool calling, enabling easy integration -- **Type Safety**: JSON Schema validation can still enforce parameter types -- **Universality**: Works for any action type - tools, game moves, navigation, configuration, etc. -- **Composability**: Multi-action environments work naturally - -**Trade-offs**: -- Advantages: - - Less boilerplate (no action class per tool) - - Natural support for dynamic tool sets -- Disadvantages: - - Action parameters are `Dict[str, Any]` instead of strongly-typed fields (mitigated by JSON Schema validation) - -#### Decision 2: Action Discovery via `actions()` Method - -**Chosen Approach**: Add an `actions()` method to the `Environment` base class that returns `List[ToolDefinition]`. - -**Rationale**: -- **Universal Introspection**: Agents can discover available actions in any environment type -- **LLM Integration**: Action definitions can be passed directly to LLM APIs (they use the same format as tool definitions) -- **Documentation**: Self-documenting environments via decorator pattern -- **MCP Alignment**: Follows MCP's `list_tools()` pattern but generalized to all actions - -**Note**: We keep `ToolDefinition` as the return type name for compatibility with LLM APIs and MCP, even though it represents any action type. - - -## Examples - -### Example 1: Code Execution Environment - -```python -from core.env_server import Environment, Observation, State, ToolCallAction -from core.tools import PyExecutor - -class PythonCodeActEnv(Environment): - """Environment for executing Python code via tool calls.""" - - def __init__(self): - self._executor = PyExecutor() - self._state = CodeState() - - @action("execute_code", "Execute Python code and return stdout, stderr, and exit code") - def execute_code(self, code: str) -> Dict[str, Any]: - """Execute Python code. - - Args: - code: Python code to execute - - Returns: - Dict with stdout, stderr, and exit_code keys - """ - result = self._executor.run(code) - return { - "stdout": result.stdout, - "stderr": result.stderr, - "exit_code": result.exit_code, - } - - def reset(self) -> Observation: - self._state = CodeState(episode_id=str(uuid.uuid4())) - return CodeObservation(stdout="", stderr="", exit_code=0) - - def step(self, action: Action) -> Observation: - if not isinstance(action, ToolCallAction): - raise ValueError(f"Expected ToolCallAction, got {type(action)}") - - # Dispatch to action method - if action.tool_name == "execute_code": - result = self.execute_code(**action.parameters) - reward = 1 if result["exit_code"] == 0 else -1 - self._state.step_count += 1 - return CodeObservation(reward=reward, **result) - else: - raise ValueError(f"Unknown action: {action.tool_name}") - - @property - def state(self) -> State: - return self._state -``` - - -### Example 2: Game Environment (Non-Tool Actions) - -```python -from core.env_server import Environment, Observation, State, ToolCallAction - -class ChessEnv(Environment): - """Chess environment - actions are game moves, not tools.""" - - def __init__(self): - self._board = chess.Board() - self._state = GameState() - - @action("move_piece", "Move a chess piece from one square to another") - def move_piece(self, from_square: str, to_square: str) -> Dict[str, Any]: - """Move a chess piece. - - Args: - from_square: Starting square (e.g., "e2") - to_square: Destination square (e.g., "e4") - - Returns: - Dict with move validity and game state - """ - move = chess.Move.from_uci(f"{from_square}{to_square}") - if move in self._board.legal_moves: - self._board.push(move) - return { - "valid": True, - "game_over": self._board.is_game_over(), - "fen": self._board.fen(), - } - return {"valid": False, "error": "Illegal move"} - - def reset(self) -> Observation: - self._board = chess.Board() - self._state = GameState(episode_id=str(uuid.uuid4())) - return ChessObservation(fen=self._board.fen(), legal_moves=list(self._board.legal_moves)) - - def step(self, action: Action) -> Observation: - if not isinstance(action, ToolCallAction): - raise ValueError(f"Expected ToolCallAction, got {type(action)}") - - # Dispatch to action method - if action.tool_name == "move_piece": - result = self.move_piece(**action.parameters) - reward = 1 if result.get("valid") else -1 - done = result.get("game_over", False) - self._state.step_count += 1 - return ChessObservation( - reward=reward, - done=done, - fen=result.get("fen"), - valid_move=result.get("valid"), - ) - else: - raise ValueError(f"Unknown action: {action.tool_name}") - - @property - def state(self) -> State: - return self._state - - def actions(self) -> List[ToolDefinition]: - """Return available actions (game moves, not tools).""" - return [ - ToolDefinition( - name="move_piece", - description="Move a chess piece from one square to another", - parameters=[ - ToolParameter(name="from_square", type="string", description="Starting square (e.g., 'e2')"), - ToolParameter(name="to_square", type="string", description="Destination square (e.g., 'e4')"), - ], - ) - ] -``` - -### Example 3: Client-Side Usage with LLM - -```python -from anthropic import Anthropic -from envs.coding_env import CodingEnv - -# Initialize environment -env = CodingEnv.from_docker_image("coding-env:latest") - -# Get available actions -actions = env.actions() # Returns List[ToolDefinition] - -# Convert to Claude's tool format (works for any action type!) -claude_tools = [action.to_json_schema() for action in actions] - -# Initialize Claude client -client = Anthropic() - -# Agent loop -observation = env.reset() -messages = [{"role": "user", "content": "Calculate fibonacci(10)"}] - -while not observation.done: - # Get model response with tools - response = client.messages.create( - model="claude-3-5-sonnet-20241022", - messages=messages, - tools=claude_tools, - ) - - # If model wants to take an action - if response.stop_reason == "tool_use": - tool_use = response.content[0] - - # Create action from LLM's tool call - # (works for code execution, game moves, or any action type) - action = ToolCallAction( - tool_name=tool_use.name, - parameters=tool_use.input, - tool_call_id=tool_use.id, - ) - - # Execute in environment - observation = env.step(action) - - # Add action result to messages - messages.append({ - "role": "assistant", - "content": response.content, - }) - messages.append({ - "role": "user", - "content": [{ - "type": "tool_result", # LLM APIs still call it "tool_result" - "tool_use_id": tool_use.id, - "content": str(observation), - }], - }) - print(observation.reward) - else: - break - -env.close() -``` - -## References - -- [Model Context Protocol (MCP) Specification](https://spec.modelcontextprotocol.io/) - Primary inspiration for this RFC -- [Anthropic Tool Use Documentation](https://docs.anthropic.com/claude/docs/tool-use) -- [OpenAI Function Calling](https://platform.openai.com/docs/guides/function-calling) -- RFC 000: OpenEnv Project Phases -- RFC 001: OpenEnv Basic Abstractions -- RFC 002: OpenEnv Framework Spec -- RFC 003: MCP Support diff --git a/rfcs/README.md b/rfcs/README.md index a2af899d..c90de3de 100644 --- a/rfcs/README.md +++ b/rfcs/README.md @@ -79,11 +79,20 @@ Each RFC should include the following sections: ## Current RFCs -- [000-project-phases.md](./000-project-phases.md) - OpenEnv layering -- [001-abstractions.md](./001-abstractions.md) - OpenEnv Basic Abstractions -- [002-env-spec.md](./002-env-spec.md) - OpenEnv Framework Spec for agent execution environments -- [003-mcp-support.md](./003-mcp-support.md) - MCP (Model Context Protocol) Support -- [004-actions-as-tool-calls.md](./004-actions-as-tool-calls.md) - Support multiple tool calls via Action wrapper abstraction +### Core Abstractions & Design +- [000-project-phases.md](./000-project-phases.md) - Design Principles and Broad Roadmap +- [001-abstractions.md](./001-abstractions.md) - Basic Abstractions (Environment, Agent, State) +- [002-env-spec.md](./002-env-spec.md) - Framework Spec for Agent Execution Environments + +### MCP Integration +- [003-mcp-support.md](./003-mcp-support.md) - MCP Support: Traditional Tool Calling +- [004-codeact-with-mcp.md](./004-codeact-with-mcp.md) - CodeAct Support with MCP +- [005-mcp-universal-interface.md](./005-mcp-universal-interface.md) - MCP as THE Universal Interface (Policy) + +### Tool Ecosystem & Performance +- [005-tool-registry.md](./005-tool-registry.md) - Tool Registry & Distribution via Hugging Face Hub (Note: Will be renumbered) +- [006-performance-simulation.md](./006-performance-simulation.md) - Production Performance Simulation +- [007-mcp-interception.md](./007-mcp-interception.md) - MCP Protocol Interception (Draft - Future Work) ## Questions? diff --git a/rfcs/env_tools_rfc.md b/rfcs/env_tools_rfc.md deleted file mode 100644 index 20482683..00000000 --- a/rfcs/env_tools_rfc.md +++ /dev/null @@ -1,1176 +0,0 @@ -# [Proto RFC] Env & Tools Spec - Revised Design - -**Status**: In Active Design Discussion -**Last Updated**: 2025-01-07 - -This proposal iterates on top of multiple RFCs (well... almost all of them). If we approve it, we will have to revise them accordingly. In this doc, let's focus on the idea and then we will figure out how to wordsmith changes into the RFCs on Github as a second step. - -The whole reason behind this proposal is finding the best way to integrate MCP in a way that provides unique value, but more in general, it's a good opportunity to take another look at everything from first principles. It's not bad to do this: this is why we are in a RFC stage! - -## Our Audience - -We provide value to: - -1. **Env builders**, by giving them more reach to be able to be used in multiple projects that would otherwise require adapters, thus lowering the cost of entry -2. **Model builders**, by giving them more inventory which is a proven path towards improved model performance -3. **The scientific community**, by giving them a path to reproducibility of setups including tools/rewards/evals -4. **Infra engineers**, by giving them a clear and stable contract that allows for separation of concerns so they can focus on optimizing the backend - -## Our Principles - -Let's start from the very beginning: what are our non-negotiable principles that we strive to stick to? - -1. **Minimize deltas across a project's lifecycle.** One of the barriers to adoption of this tech is the deltas you have: - 1. Across every phase in a project's lifecycle: Training → Evals → Deployment - 2. Human ↔ Agent divergence - - Deltas hurt every ML project, but RL is particularly susceptible to them. We already know this, so we should provide a holistic solution for it, by design. - -2. **We are hands-on.** We do not stop with providing a spec. We should not refrain from providing quality of life features and ready-made, importable code. These need not be part of the spec proper, but we provide them because we ultimately want to provide value (as per above). They will be optional. - -3. **We are (economically) opinionated.** We do not refrain from having opinions about how we want our stuff to be used: a fully unopinionated project lacks a spine and delights none. However, it is not our place to pick winners and losers with respect to AI research as we work in a yet-to-be-crystallized space. So, we see differences in opinions in the research community (e.g. codeact vs traditional function calling) as opportunities to validate the flexibility of our system which should seamlessly support both. We should not obsess over this if we feel that a winner is clear and that taking an opinion can provide a ton of value (especially in more established areas like e.g. containers), but in general we should not do this often. - -4. **Our design is LLM-friendly.** We know what LLMs like and don't like. We know what their limitations are (example: limited context window). We always think of these as we validate our designs. When there are tradeoffs between LLM-friendliness and infrastructure-friendliness, we evaluate tradeoffs holistically. - -## Components - -Ultimately, any abstraction is just a Venn diagram drawn over a set of components: naturally, where you draw your Venn diagram is somewhat arbitrary and you may indeed have multiple legit answers. - -So, let us start by littering the floor with all the components without any groupings. I will use examples to ground us concretely at each step. - -The components we have are the following: - -1. There's gonna be **tasks** coming in with questions → these are purely data -2. These tasks are landing in a **stateful world**. Note that this is true for both deployment as well as for training (going back to our principle: they need to stay close to each other) -3. These tasks are solved by the **agent** that interacts with this stateful world via some **interface** -4. This interface, and the state are made of **software**, so there's gonna be deps and binaries to take care of -5. **Code execution** and/or bash access are technically optional but will be there so often, that in practice we are always going to need some form of **sandboxing** - -### Example: Database Maintenance Task - -Let's say I'm giving you a database containing a list of employees and as a single task, I'm giving you an ongoing task to stay alive over the course of months and maintain this database as events happen. This means querying for information, but it can totally also mean mutations. People get hired, people leave, and these mutations need to be performed. - -```mermaid ---- -config: - flowchart: - htmlLabels: false ---- -%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#e3f2fd','primaryTextColor':'#0d47a1','primaryBorderColor':'#1e88e5','lineColor':'#1e88e5','secondaryColor':'#f1f8e9','tertiaryColor':'#fff3e0'}}}%% - -graph TD - classDef tasks fill:#e3f2fd,stroke:#1e88e5,stroke-width:3px,color:#0d47a1 - classDef agent fill:#f1f8e9,stroke:#7cb342,stroke-width:3px,color:#558b2f - classDef mcp fill:#fff3e0,stroke:#f57c00,stroke-width:3px,color:#e65100 - classDef state fill:#f3e5f5,stroke:#8e24aa,stroke-width:3px,color:#4a148c - classDef sandbox fill:#eceff1,stroke:#455a64,stroke-width:2px,color:#263238 - - A["`**TASKS Data** - Add employee Alice - Query Engineering dept size`"]:::tasks - B["`**AGENT LLM + Policy** - Decides what tools to call - based on task & observations`"]:::agent - - C["`**MCP SERVERS Interface**`"]:::mcp - C1["`**Database MCP** - - execute_sql - - query_schema - `"]:::mcp - C2["`**Search MCP** - - web_search - - semantic_search - `"]:::mcp - C3["`**File MCP** - - read_file - - write_file - `"]:::mcp - - D["`**STATE Stateful World** - Database: employees table - File system state - Application state - Can reset in training - Cannot reset in production`"]:::state - - E["`**SANDBOXING & DEPENDENCIES** - - Docker containers - - Binary distribution - - Version management`"]:::sandbox - - A -->|Tasks| B - B -->|MCP Tool Calls| C - C --> C1 - C --> C2 - C --> C3 - C1 -->|Mutates/Queries| D - C2 -->|Mutates/Queries| D - C3 -->|Mutates/Queries| D - D -.-> E -``` - -I call the initial snapshot of the database our **state**. I would like to zoom in on it: - -1. While it is made of data, it's not part of the dataset which normally contains tasks. You can have many different tasks operate on the same database snapshot! -2. While you query and mutate it via tools (e.g. MCP), it's not part of the MCP spec itself which only deals with interfacing to it -3. This snapshot is relevant while training. You are essentially simulating a real-world scenario. Note that it's critical that we have the ability to reset the db snapshot to its original state, but **crucially!!** the model absolutely cannot do that. This is the function of the `.reset()` method in the Gymnasium API. It's a simulation reset. The `.reset()` method is absolutely not a tool that the model is free to call! For example, if the model decides to drop every record from the DB, our reward system will penalize it and it will learn not to do it in the future. We would then reset the simulation state back to the beginning, and try again. If this were to be exposed to the model, we would have a huge discrepancy with Prod as the model would learn during training that every error is always recoverable and thus it will have no risk aversion. - -This is actually something that existing libraries do not do well, because they often bundle it with data, or directly with tools but unfortunately it does not belong in either place. - -## The Time Problem: Simulation vs Production - -A critical insight that shapes our entire design: - -**Simulation Time (Training/Eval)**: -- Time only advances when we say so (via `.step()`) -- Agent can "think" for arbitrary real-world time - simulation is paused -- Environment state is frozen until agent acts -- Can reset to initial state infinitely -- CodeAct blocks execute atomically from environment's perspective - -**Real Time (Production)**: -- Time flows continuously -- Events arrive on their own schedule (people get hired *now*, not when agent is ready) -- Agent must react with bounded latency -- Cannot reset (it's the real world). Deleting records is a one-way door. -- No "turns" in the traditional sense - continuous stream of events - -**Key insight**: You can simulate production (via event queues), but you can't "productionize" simulation (can't pause reality). - -This temporal duality drives the need for two distinct interfaces: -- **Simulation control**: Reset, step, reward computation (training/eval only) -- **Agent-environment interaction**: Tool calls (training AND production) - -## Proposed Architecture - -### Core Abstraction: Environment = MCP Servers + Simulation Layer - -We define an **Environment** as having two distinct layers: - -``` -┌─────────────────────────────────────────────────────────┐ -│ SIMULATION LAYER (HTTP - Training/Eval Only) │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ • .reset() / .step() - orchestration │ │ -│ │ • Event queue (first-class citizen) │ │ -│ │ • Reward computation │ │ -│ │ • Evaluation logic │ │ -│ │ • Data/task loading │ │ -│ │ • State checkpointing (git-based) │ │ -│ └───────────────────────────────────────────────────┘ │ -│ │ -│ PRODUCTION CORE (MCP - Always Present) │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ • MCP tool servers (search, database, etc.) │ │ -│ │ • State management and access │ │ -│ │ • Sandboxing (Docker) │ │ -│ │ • Binary distribution and versioning │ │ -│ └───────────────────────────────────────────────────┘ │ -└─────────────────────────────────────────────────────────┘ -``` - -**In Training/Eval**: Full stack (both layers) -**In Production**: Simulation layer removed, only MCP servers remain - -```mermaid ---- -config: - flowchart: - htmlLabels: false ---- -%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#e3f2fd','secondaryColor':'#f1f8e9','tertiaryColor':'#fff3e0'}}}%% - -graph TB - subgraph TRAIN ["TRAINING / EVAL MODE"] - direction TB - TL["`**Training Loop** - Python`"] - - TL -->|"HTTP: reset, step"| ENV - - ENV["`**Environment Container**`"] - - SIM["`**SIMULATION LAYER** - event_queue: EventQueue - data_loader: DataLoader - reward_functions - eval_functions - checkpoint_manager - `"] - - CORE["`**PRODUCTION CORE** - mcp_servers: List[MCPServer] - - Database MCP Docker - - Search MCP Docker - - Custom MCP Docker - tool_registry: ToolRegistry - `"] - - ENV -.contains.-> SIM - ENV -.contains.-> CORE - - CORE -->|"MCP Protocol"| AT1["`**Agent Training**`"] - end - - subgraph PROD ["PRODUCTION MODE"] - direction TB - MCP1["`**Database MCP** - Server Docker - execute_sql - query_schema - `"] - - MCP2["`**Search MCP** - Server Docker - web_search - semantic_search - `"] - - MCP3["`**Custom MCP Servers** - Docker`"] - - MCP1 & MCP2 & MCP3 -->|"MCP Protocol"| AT2["`**Agent Production** - No reset access`"] - end - - KEY["`**KEY INSIGHT:** - MCP interface identical in training and production - Only simulation layer HTTP disappears in prod`"] - - classDef trainBox fill:#e8f5e9,stroke:#388e3c,stroke-width:3px - classDef prodBox fill:#ffebee,stroke:#c62828,stroke-width:3px - classDef blue fill:#e3f2fd,stroke:#1e88e5,stroke-width:2px - classDef green fill:#e8f5e9,stroke:#388e3c,stroke-width:2px - classDef lightgreen fill:#f1f8e9,stroke:#7cb342,stroke-width:2px - classDef orange fill:#fff3e0,stroke:#f57c00,stroke-width:2px - classDef orangeBox fill:#ffffff,stroke:#f57c00,stroke-width:2px - classDef purple fill:#f3e5f5,stroke:#8e24aa,stroke-width:2px - classDef keyBox fill:#c8e6c9,stroke:#43a047,stroke-width:3px - - class TRAIN trainBox - class PROD prodBox - class TL blue - class ENV green - class SIM lightgreen - class CORE orange - class MCP1,MCP2,MCP3 orangeBox - class AT1,AT2 purple - class KEY keyBox -``` - -### Two Protocols, Two Purposes - -**Why two protocols?** They serve fundamentally different principles: - -1. **HTTP**: Simulation control protocol - - Training loop ↔ Simulator - - Asymmetric (training loop controls simulation) - - Operations: `reset()`, `step()`, `get_state()` - - Disappears in production - -2. **MCP**: Agent-environment protocol - - Agent ↔ Environment tools - - Symmetric (agent calls tools, environment responds) - - Operations: Tool calls (`search()`, `execute_sql()`, etc.) - - Present in both training AND production - -The boundary between simulation and production is explicit. The MCP interface is identical across the lifecycle (principle #1: minimize deltas). - -### Event Queue as First-Class Citizen - -Environments fall into two categories: - -1. **Static environments**: State only changes when agent acts (chess, coding puzzles) -2. **Dynamic environments**: State changes independently (database with external events, customer service) - -We make the event queue a first-class abstraction: -- **Empty queue** = static environment -- **Populated queue** = dynamic environment with external events - -```python -class Environment: - def __init__( - self, - mode: str, # "sim" or "prod" - mcp_servers: List[MCPServerConfig], - event_queue: EventQueue, # Empty for static, populated for dynamic - ... - ): - self.event_queue = event_queue -``` - -## Tool Duality: Simulation vs Production - -### The Challenge - -Tools must behave differently in simulation vs production: - -**Example: Expedia Flight Search** -- **Production**: Call real Expedia API (costs money, real data, rate limits) -- **Simulation**: Return synthetic/mock flight data (free, fast, reproducible) - -**Question**: Who is responsible for this duality? - -### Ideal End State: Tool Providers Own It - -Ultimately, tool providers (like Expedia) should ship dual-mode MCP servers: - -```python -class ExpediaMCPServer: - def __init__(self): - self.mode = os.getenv("MODE", "prod") - - if self.mode == "sim": - self.client = ExpediaSimClient() # Expedia provides this - elif self.mode == "prod": - self.client = ExpediaAPIClient() # Real API - - @mcp_tool - def search_flights(self, origin: str, destination: str): - # Same interface, different implementation - return self.client.search(origin, destination) -``` - -**Benefits**: -- Tool provider owns simulation quality (they know their domain best) -- Single package to maintain -- Realistic test data from source - -### Pragmatic Path: Three-Phase Strategy - -**Phase 1 (v0.3-v0.6)**: We own tool simulation -- Environment builders provide tool simulations as fallback -- Easy patterns/utilities for common cases (search, payments, email) -- Build critical mass and prove value - -**Phase 2 (v0.6-v1.0)**: Mixed ownership via Hugging Face Hub -- Community-contributed tool simulations on HF Hub -- Tool providers start shipping dual-mode servers -- Both patterns coexist (see HF Hub section below) - -**Phase 3 (v1.0+)**: Tool providers own duality -- Standard practice in ecosystem -- Deprecate most environment-level simulations -- Clean separation of concerns - -**Critical**: Design the abstraction NOW so migration is seamless. - -### Implementation: Tool Registry with Sim/Prod Mapping - -**Key insight**: Use a registry to explicitly map production tools to their simulation equivalents. Tools not in the registry are assumed to be dual-mode (handle mode internally). - -```python -class Environment: - def __init__( - self, - mode: str, # "sim" or "prod" - mcp_servers: List[MCPServerConfig], - - # Tool registry: maps prod tool -> sim tool - # If tool not in registry, assumes it's dual-mode - tool_registry: ToolRegistry | None = None, - - # Simulation config - event_queue: EventQueue | None = None, - data_loader: DataLoader | None = None, - reward_functions: List[RewardFunction] | None = None, - ): - self.mode = mode - self.tool_registry = tool_registry or ToolRegistry() - - # Initialize and manage MCP servers - self.mcp_servers = [ - MCPServer.from_config(cfg) - for cfg in mcp_servers - ] - # Start servers (managed lifecycle) - for server in self.mcp_servers: - server.start() - - def call_tool(self, tool_name: str, params: dict): - """Call MCP tool, using registry to resolve sim vs prod.""" - - # Check registry for sim/prod mapping - if self.mode == "sim" and self.tool_registry.has_mapping(tool_name): - # Use sim version from registry - sim_tool_name = self.tool_registry.get_sim_tool(tool_name) - server = self._find_mcp_server_for_tool(sim_tool_name) - return server.call_tool(sim_tool_name, params) - - else: - # Not in registry: assume dual-mode tool (same in prod and sim) - # Or we're in prod mode: use production tool directly - server = self._find_mcp_server_for_tool(tool_name) - return server.call_tool(tool_name, params) -``` - -**Tool Registry**: - -```python -class ToolRegistry: - """Maps production tools to simulation tools. - - If a tool is not in the registry, it's assumed to be dual-mode - (same tool works in both sim and prod, handles mode internally). - """ - - def __init__(self, mappings: Dict[str, str] | None = None): - """ - Args: - mappings: Dict mapping prod_tool_name -> sim_tool_name - - Example: - registry = ToolRegistry({ - "expedia.search_flights": "expedia_sim.search_flights", - "stripe.charge_card": "stripe_sim.mock_charge", - }) - """ - self.mappings = mappings or {} - - def has_mapping(self, tool_name: str) -> bool: - """Check if tool has explicit sim mapping.""" - return tool_name in self.mappings - - def get_sim_tool(self, prod_tool_name: str) -> str: - """Get simulation tool for a production tool.""" - return self.mappings[prod_tool_name] - - def register(self, prod_tool: str, sim_tool: str): - """Register a prod -> sim mapping.""" - self.mappings[prod_tool] = sim_tool - - @classmethod - def from_hub(cls, hub_id: str) -> "ToolRegistry": - """Load tool registry from Hugging Face Hub. - - Args: - hub_id: HF Hub repository ID (e.g., "openenv/tool-registry-v1") - - Returns: - ToolRegistry with community-contributed mappings - """ - from huggingface_hub import hf_hub_download - import json - - config_path = hf_hub_download(repo_id=hub_id, filename="registry.json") - with open(config_path) as f: - mappings = json.load(f) - - return cls(mappings=mappings) -``` - -**Example usage**: - -```python -# Phase 1: Explicit sim/prod mappings -tool_registry = ToolRegistry({ - # Expedia doesn't have dual-mode server yet - "expedia.search_flights": "expedia_sim.search_flights", - "expedia.book_flight": "expedia_sim.book_flight", - - # Stripe doesn't have dual-mode server yet - "stripe.charge_card": "stripe_sim.mock_charge", -}) - -env = Environment( - mode="sim", - mcp_servers=[ - MCPServerConfig("expedia", "http://expedia-mcp:8001"), # Prod server - MCPServerConfig("expedia_sim", "http://expedia-sim:8002"), # Sim server - MCPServerConfig("stripe", "http://stripe-mcp:8003"), # Prod server - MCPServerConfig("stripe_sim", "http://stripe-sim:8004"), # Sim server - MCPServerConfig("database", "http://db-mcp:8005"), # Dual-mode! - ], - tool_registry=tool_registry, -) - -# Or load from HF Hub (Phase 2) -tool_registry = ToolRegistry.from_hub("openenv/tool-registry-v1") -``` - -**Utilities we provide**: - -```python -from openenv.simulation import ( - mock_response, # Static response - mock_from_dataset, # Sample from dataset - mock_from_function, # Custom function - record_and_replay, # Record prod, replay in sim -) - -# Helper to create sim MCP servers from utilities -from openenv.simulation import create_sim_mcp_server - -# Example: Create sim server for Expedia -expedia_sim_server = create_sim_mcp_server( - name="expedia_sim", - tools={ - "search_flights": mock_from_dataset("flights.json"), - "book_flight": mock_response({"confirmation": "SIM123"}), - } -) -``` - -## Hugging Face Hub Integration: Community Tool Registries - -### Motivation - -Getting tool providers like Expedia to ship dual-mode servers requires critical mass. We need a chicken-and-egg solution: a way to share tool simulation mappings across environments before tool providers invest in dual-mode servers. - -**Key insight**: Tool simulators are just MCP servers - they should be published to standard MCP registries (whatever the MCP ecosystem uses). What we need to publish on HF Hub are the **mappings** (tool registries) that tell environments which sim tools to use for which prod tools. - -### Proposed HF Hub Structure - -``` -Hugging Face Hub -├── openenv/environments/ # Existing: Environment packages -│ ├── database-env -│ ├── coding-env -│ └── travel-booking-env -│ -└── openenv/tool-registries/ # NEW: Community registries (mappings) - ├── standard-registry-v1 # Curated mappings for common tools - ├── finance-tools-registry # Domain-specific (fintech) - └── saas-tools-registry # Domain-specific (SaaS APIs) -``` - -**Note**: Tool simulations themselves (expedia-sim, stripe-sim, etc.) are published to standard MCP registries, not our Hub. - -### Tool Simulations (MCP Servers) - -Tool simulations are just MCP servers. They're published to standard MCP registries (whatever the MCP ecosystem provides). For example: - -- `expedia-sim` - Simulated Expedia flight search API -- `stripe-sim` - Simulated Stripe payment API -- `sendgrid-sim` - Simulated email service -- `github-sim` - Simulated GitHub API - -These are discovered and installed via standard MCP tooling, not OpenEnv-specific infrastructure. - -**Usage** (using standard MCP discovery): - -```python -env = Environment( - mode="sim", - mcp_servers=[ - MCPServerConfig("expedia", "https://api.expedia.com"), # Prod - MCPServerConfig("expedia_sim", "mcp://expedia-sim"), # Sim (from MCP registry) - MCPServerConfig("stripe", "https://api.stripe.com"), - MCPServerConfig("stripe_sim", "mcp://stripe-sim"), - ], - tool_registry=ToolRegistry({ - "expedia.search_flights": "expedia_sim.search_flights", - "stripe.charge_card": "stripe_sim.charge_card", - }) -) -``` - -### Tool Registries (Published to HF Hub) - -**This is what we publish to HF Hub**: Registries are JSON files mapping prod tools → sim tools. - -```json -// openenv/standard-registry-v1/registry.json -{ - "expedia.search_flights": "expedia_sim.search_flights", - "expedia.book_flight": "expedia_sim.book_flight", - "stripe.charge_card": "stripe_sim.charge_card", - "stripe.create_customer": "stripe_sim.create_customer", - "sendgrid.send_email": "sendgrid_sim.send_email", - "github.create_pr": "github_sim.create_pr" -} -``` - -**Usage**: - -```python -# Load community registry from HF Hub -registry = ToolRegistry.from_hub("openenv/standard-registry-v1") - -# Use in environment -env = Environment( - mode="sim", - mcp_servers=[ - # Prod and sim servers (from MCP registries) - MCPServerConfig("expedia", prod_url), - MCPServerConfig("expedia_sim", "mcp://expedia-sim"), - MCPServerConfig("stripe", prod_url), - MCPServerConfig("stripe_sim", "mcp://stripe-sim"), - ], - tool_registry=registry, # Loaded from HF Hub -) -``` - -### Contribution Workflow (Registry Focus) - -1. **Environment builder creates/finds sim tools**: - - Build MCP server for tool simulation (e.g., `expedia-sim`) - - Publish to MCP registry using standard MCP tooling - -2. **Contribute mapping to HF Hub registry**: - ```bash - openenv create-registry travel-tools - openenv registry add expedia.search_flights expedia_sim.search_flights - openenv registry add expedia.book_flight expedia_sim.book_flight - openenv push-registry openenv/travel-tools - ``` - -3. **Others discover and reuse registries**: - ```bash - openenv search-registries "travel" - # Results: openenv/travel-tools, openenv/saas-tools - ``` - -4. **Use community registry**: - ```python - registry = ToolRegistry.from_hub("openenv/travel-tools") - env = Environment(mode="sim", tool_registry=registry, ...) - ``` - -### Benefits - -1. **Network effects**: Environment builders share tool mappings, reducing duplicate registry work -2. **Discovery**: Search HF Hub for existing registries before creating your own -3. **Quality**: Community curates and upvotes best registries -4. **Versioning**: Semantic versioning for registries (standard-registry-v1, v2, etc.) -5. **Incentive alignment**: Tool providers see which sim tools are popular → incentive to ship official dual-mode servers -6. **Separation of concerns**: Sim tools live in MCP ecosystem, mappings live on HF Hub - -### Implementation Plan - -**Phase 2a (v0.4)**: -- Add HF Hub integration for tool registries -- CLI commands: `create-registry`, `push-registry`, `search-registries` -- `ToolRegistry.from_hub()` for loading community mappings - -**Phase 2b (v0.5)**: -- Advanced registry features (domain-specific, versioned, composable) -- Usage analytics: track which sim tools are referenced in registries -- Quality scoring and curation for registries - -**Phase 3 (v0.6+)**: -- Tool provider feedback loop: show them registry usage data -- Encourage official dual-mode server adoption -- Namespace claiming for tool providers - -### Future Consideration: Direct Sim Tool Hosting (Under Discussion) - -While tool simulations are MCP servers that should live in MCP registries, there's a case for **also** hosting them on HF Hub: - -**Pros**: -- **Tight integration**: One-stop shop for environments + registries + sim tools -- **Quality control**: Curated sim tools alongside environments -- **Discovery**: Unified search across all OpenEnv resources -- **Bootstrapping**: Helps ecosystem get started before MCP registries mature - -**Cons**: -- **Duplication**: MCP ecosystem already has/will have registries -- **Maintenance burden**: We'd need to host and maintain sim tool infrastructure -- **Fragmentation**: Creates competing discovery mechanisms - -**Open question**: Should we provide convenience features for hosting sim tools on HF Hub, or strictly delegate to MCP ecosystem? - -## State Checkpointing and Transactionality - -### Motivation - -We need the ability to rollback to intermediate states, not just the initial state. Use cases: -- **Tree search**: Explore multiple futures from same state -- **Curriculum learning**: Reset to challenging states -- **Debugging**: "What if I had done X at step 5?" -- **Counterfactual training**: Generate alternative trajectories - -### Design: Git-Based Checkpointing - -**Decision**: Automatic checkpointing with git-like API (tree structure, disk storage). - -Every `.step()` automatically creates a checkpoint: - -```python -# Initial state (checkpoint 0) -env.reset() - -# Step 1 (checkpoint 1 - auto-created) -obs1 = env.step(action1) - -# Step 2 (checkpoint 2 - auto-created) -obs2 = env.step(action2) - -# Rollback to checkpoint 1 -env.reset(checkpoint=1) - -# Try different action from checkpoint 1 -obs = env.step(action_alternative) # Creates checkpoint 3 (branches from 1) -``` - -**Implementation**: -- Use git to track filesystem changes -- For managed state (databases), use transaction logs or snapshots -- Async sidecar for performance (git operations don't block environment) - -```python -class CheckpointManager: - """Git-based checkpointing with async sidecar for performance.""" - - def __init__(self, state_path: str): - self.repo = git.Repo.init(state_path) - self.checkpoint_queue = Queue() - self.sidecar_thread = Thread(target=self._checkpoint_worker) - self.sidecar_thread.start() - - def create(self) -> str: - """Queue checkpoint creation (non-blocking).""" - checkpoint_id = str(uuid.uuid4()) - self.checkpoint_queue.put(("create", checkpoint_id)) - return checkpoint_id - - def restore(self, checkpoint_id: str): - """Restore to checkpoint (blocking - must wait for queue).""" - self.checkpoint_queue.join() # Wait for pending checkpoints - self.repo.head.reset(checkpoint_id, index=True, working_tree=True) - - def _checkpoint_worker(self): - """Background worker that performs git operations.""" - while True: - op, checkpoint_id = self.checkpoint_queue.get() - if op == "create": - self.repo.index.add_all() - self.repo.index.commit(f"Checkpoint {checkpoint_id}") - self.checkpoint_queue.task_done() -``` - -### Known Limitations: Transactionality - -**Challenge**: The ability to roll back to arbitrary intermediate states requires that tools also support rollback. - -**Tool taxonomy**: -- **Transactional tools**: Database queries, filesystem operations (via git) -- **Idempotent tools**: Search, read-only operations (no rollback needed) -- **Non-transactional tools**: Send email, charge credit card, deploy to prod - -**Proposed approach**: Non-transactional tools are typically simulated in training anyway. - -Blueprint: -- Accept limitation and document clearly -- In sim mode, tool providers mock non-transactional operations -- In prod mode, non-transactional tools shouldn't exist in training scenarios -- We provide checkpointing for what we control (filesystem, managed databases) - -**Optional: Tool transactionality annotations**: - -```python -@mcp_tool(transactional=False) -def send_email(to: str, subject: str, body: str): - """Send email (non-transactional, cannot be rolled back).""" - ... - -# Environment can query and warn users -if env.has_non_transactional_tools(): - warnings.warn("Environment contains non-transactional tools. " - "Checkpointing may not work as expected.") -``` - -### API - -```python -class Environment: - def reset(self, checkpoint: str | None = None) -> Observation: - """Reset to checkpoint (default: initial state). - - Args: - checkpoint: Checkpoint ID (git commit hash) or None for initial - """ - if checkpoint is None: - self._restore_initial_snapshot() - else: - self.checkpoint_manager.restore(checkpoint) - return self._get_initial_observation() - - def step(self, action: Action) -> Observation: - """Execute action, automatically create checkpoint.""" - # Execute action via MCP - result = self._call_mcp_tools(action) - - # Create checkpoint (non-blocking, queued to sidecar) - checkpoint_id = self.checkpoint_manager.create() - - # Process events from queue - events = self.event_queue.pop_until(self.current_time + dt) - - # Compute rewards - reward = self._compute_rewards(result, events) - - return Observation(reward=reward, checkpoint=checkpoint_id, ...) - - def get_checkpoints(self) -> List[str]: - """Get list of available checkpoint IDs (git commits).""" - return self.checkpoint_manager.list_commits() - - def get_checkpoint_tree(self) -> Dict[str, List[str]]: - """Get checkpoint tree (branching structure).""" - return self.checkpoint_manager.get_tree() -``` - -## Environment Semantics: Data + Evals Included - -**Change from previous design**: Environment now contains pointers to data and evals. - -**Rationale**: This is intentional and beneficial because: -1. **Clear simulation boundary**: Everything needed for training lives in Environment -2. **Reuse without fragmentation**: While data/evals can vary per task, having them in Environment doesn't prevent reuse - just instantiate Environment with different data loaders -3. **Simpler lifecycle**: Production deployment just strips simulation layer, including data/evals -4. **Gym API preserved**: Core `reset()`, `step()`, `state()` interface unchanged - -```python -class Environment: - # Production core (MCP) - Environment wraps and manages these servers - mcp_servers: List[MCPServer] - - # Simulation layer - only present in sim mode - event_queue: EventQueue - data_loader: DataLoader | None # NEW: Data is part of env - reward_functions: List[RewardFunction] # Environment-level rewards - eval_functions: List[EvalFunction] # NEW: Evals are part of env - checkpoint_manager: CheckpointManager -``` - -**Usage**: - -```python -# Same environment, different tasks -env_train = DatabaseEnv( - mode="sim", - data_loader=TaskLoader("train_tasks.json"), - reward_functions=[SQLCorrectness(), PerformanceScore()], -) - -env_eval = DatabaseEnv( - mode="sim", - data_loader=TaskLoader("eval_tasks.json"), - reward_functions=[SQLCorrectness(), PerformanceScore()], -) - -# Production: no data/evals -env_prod = DatabaseEnv(mode="prod") -``` - -## MCP as Universal Interface - -**MCP is our interface to/from agents.** This includes exposing every action as a tool, even actions that aren't traditionally "tools": - -- **Action discovery**: `list_tools()` tells agents what actions are available -- **Type safety**: JSON Schema for parameters -- **Language independence**: MCP servers can be written in any language - -**Examples**: -- Chess: `move_piece` is exposed as MCP tool (not a "tool" conceptually, but uses tool interface) -- Database: `execute_sql` is an MCP tool -- Travel: `search_flights` is an MCP tool - -Every query and every mutation performed by the agent comes through MCP calls. - -### Special Methods: Not Exposed via MCP - -We reserve special methods that the model cannot call (simulation control): -- `.reset()` - simulation reset (would teach agents errors are always recoverable) -- `.step()` - advance simulation time / compute rewards -- `.get_state()` - introspect episode metadata - -These are exposed via HTTP (simulation control protocol), not MCP (agent protocol). - -## CodeAct and ToolCall Paradigms - -**Decision**: Create `CodeActEnv` wrapper that converts any environment to CodeAct mode. - -### Tool Calling Style - -Each tool call is a discrete action: - -```python -# Agent generates -action1 = ToolCallAction(tool_name="search_web", params={...}) -obs1 = env.step(action1) - -action2 = ToolCallAction(tool_name="read_file", params={...}) -obs2 = env.step(action2) -``` - -### CodeAct Style - -Write code that calls multiple tools: - -```python -# Agent generates Python code -code = """ -results = search_web(query="python patterns") -filtered = [r for r in results if "async" in r] -content = read_file(filtered[0]['url']) -print(content[:100]) -""" - -# One step executes entire code block -obs = env.step(CodeAction(code=code)) -``` - -### Implementation: CodeActEnv Wrapper - -```python -class CodeActEnv: - """Wrapper that converts any Environment to CodeAct mode. - - Takes an existing environment and exposes its MCP tools as - Python functions inside a code execution environment. - """ - - @classmethod - def from_env(cls, env: Environment) -> "CodeActEnv": - """Create CodeAct environment from existing environment. - - Args: - env: Base environment with MCP tools - - Returns: - CodeActEnv where agent writes code to call tools - """ - # Introspect environment's action space (MCP tools) - tools = env.list_tools() # Gets MCP tool definitions - - # Create Python executor with tools pre-imported - executor = PythonExecutor() - for tool in tools: - # Wrap each MCP tool as Python function - executor.register_function( - name=tool.name, - func=lambda **kwargs: env.call_tool(tool.name, kwargs) - ) - - return cls(base_env=env, executor=executor) - - def step(self, action: CodeAction) -> Observation: - """Execute code (calls MCP tools as Python functions).""" - result = self.executor.run(action.code) - return self._make_observation(result) -``` - -**Usage**: - -```python -# Start with any MCP-based environment -database_env = DatabaseEnv(...) - -# Convert to CodeAct -codeact_env = CodeActEnv.from_env(database_env) - -# Agent now writes code instead of tool calls -code = """ -result = execute_sql("SELECT * FROM employees WHERE dept='Engineering'") -count = len(result) -print(f"Found {count} engineers") -""" - -obs = codeact_env.step(CodeAction(code=code)) -``` - -**Benefits**: -- Bridges Gym API (discrete action space = CodeAction type) -- Action types are enumerable and typechecked -- Seamless conversion: any Environment → CodeAct mode -- Tools pre-imported, no import statements needed (security) - -## Human-Agent Parity - -Assume we expose the following tools via MCP: -- `screen()` - Render current state as image -- `keyboard(text)` - Type text -- `mouse(x, y, click=True)` - Mouse interaction - -Then we can build a Docker that both: -- Agents interact with via MCP tools (production interface) -- Humans can remote desktop into (same environment, different interface) - -This validates that agents get the same interface humans would have. - -**Note**: Supporting actual VNC/RDP is optional - we provide the MCP tools for simulation. If someone wants to add VNC support, our architecture doesn't prevent it. - -## Tool Discoverability - -Given limited context windows, we can't dump all tools to the agent. Hierarchical discovery is needed. - -**Our approach**: Directory-like structure + optional `find_tools` utility. - -``` -database_environment/ - database_mcp_server/ - execute_sql.py - query_schema.py - backup_db.py - search_mcp_server/ - web_search.py - semantic_search.py -``` - -We can provide a `find_tools(query)` convenience tool that helps agents discover relevant tools. - -**Key insight**: Being all-in on MCP means we're naturally compatible with however the MCP ecosystem solves discoverability (Gateway patterns, hierarchical servers, semantic search, etc.). We don't need to pick a winner. - -## Convenience Features: Traits/Mixins - -**Decision**: Server-side mixins that bring pre-made MCP servers. - -Bundle common patterns as importable traits for environment builders: - -```python -from openenv.traits import HumanComputerInterfaceable, BashAccess, PythonAccess - -class CompetitiveCodingEnv(Environment, HumanComputerInterfaceable, BashAccess, PythonAccess): - """Competitive coding environment with common tools pre-configured. - - Traits automatically: - - HumanComputerInterfaceable: Adds screen/keyboard/mouse MCP servers - - BashAccess: Adds bash execution MCP server - - PythonAccess: Adds Python interpreter MCP server - """ - - def __init__(self, mode: str): - # Traits inject their MCP servers - mcp_servers = self._get_trait_mcp_servers() - - super().__init__( - mode=mode, - mcp_servers=mcp_servers, - ... - ) -``` - -**Implementation**: - -```python -class BashAccess: - """Mixin that adds bash execution capability.""" - - def _get_trait_mcp_servers(self) -> List[MCPServerConfig]: - """Return MCP servers needed for this trait.""" - return [ - MCPServerConfig( - name="bash", - url="http://bash-mcp:8100", # Pre-built server - docker_image="openenv/bash-mcp:latest" - ) - ] -``` - -**Benefits**: -- Environment builders don't rebuild common tools -- Standardized implementations (same bash server used everywhere) -- Easy to compose (multiple traits on one environment) -- Traits can be published to HF Hub too - -## Dependency Management: Prod vs Sim - -**Challenge**: Production and simulation have different dependencies. - -**Example**: -- **Prod Expedia MCP server**: Needs `requests`, `aiohttp` (to call real API) -- **Sim Expedia MCP server**: Needs `faker`, `datasets` (to generate mock data) -- **Environment in sim mode**: Needs eval dependencies, reward model libraries - -**Solution**: Separate Dockerfiles for each concern. - -``` -travel-booking-env/ -├── prod-mcp-servers/ -│ ├── expedia/ -│ │ ├── Dockerfile # Only prod deps (requests, etc.) -│ │ └── server.py -│ └── stripe/ -│ ├── Dockerfile # Only prod deps -│ └── server.py -│ -├── sim-mcp-servers/ -│ ├── expedia-sim/ -│ │ ├── Dockerfile # Only sim deps (faker, etc.) -│ │ └── server.py -│ └── stripe-sim/ -│ ├── Dockerfile # Only sim deps -│ └── server.py -│ -└── environment/ - ├── Dockerfile # Sim-only deps (evals, rewards) - └── environment.py -``` - -**How it works**: - -1. **Prod mode**: Environment loads only prod MCP servers - ```python - env = Environment( - mode="prod", - mcp_servers=[ - MCPServerConfig("expedia", prod_url), # prod-mcp-servers/expedia - MCPServerConfig("stripe", prod_url), - ] - ) - # Environment Dockerfile not even built (not needed in prod) - ``` - -2. **Sim mode**: Environment loads sim MCP servers via registry - ```python - env = Environment( - mode="sim", - mcp_servers=[ - MCPServerConfig("expedia", prod_url), # For registry lookup - MCPServerConfig("expedia_sim", sim_url), # sim-mcp-servers/expedia-sim - MCPServerConfig("stripe", prod_url), - MCPServerConfig("stripe_sim", sim_url), - ], - tool_registry=ToolRegistry({ - "expedia.*": "expedia_sim.*", # Maps to sim server - "stripe.*": "stripe_sim.*", - }) - ) - # Environment container built with sim deps (evals, rewards) - ``` - -**Benefits**: -- Prod containers are lean (no unnecessary deps) -- Sim MCP servers don't need `requests` (won't bring it in) -- Clear separation: prod deps in MCP server Dockerfile, sim deps in env or sim MCP server Dockerfile - -## What We've Decided - -- ✅ **Environment = MCP Servers + Simulation Layer** -- ✅ **Dual protocol** (HTTP for sim control, MCP for agent interaction) is correct -- ✅ **Event queue is first-class** citizen (empty = static, populated = dynamic) -- ✅ **World abstraction absorbed into Environment** (data + evals included) -- ✅ **Checkpointing via git API** (automatic, disk storage, tree structure, async sidecar) -- ✅ **Time semantics differ** between simulation and production -- ✅ **Rewards are environment-level** (env already has pointer to data) -- ✅ **CodeActEnv wrapper pattern** (`CodeActEnv.from_env()` converts any env) -- ✅ **Traits as server-side mixins** (bring pre-made MCP servers) -- ✅ **Tool registry with HF Hub** integration for community simulations -- ✅ **Dependency separation** via separate Dockerfiles (prod MCP, sim MCP, env) - -## Open Questions - -### High Priority - -1. **Tool transactionality annotations**: Should we provide `@mcp_tool(transactional=False)` or just document limitations? How do we warn users at runtime? - -### Medium Priority - -2. **HF Hub curation**: Who maintains standard-registry? How do we handle quality/security of community-contributed sims? - -3. **Streaming in sim mode**: Do we need to support streaming tool calls during training, or is request-response sufficient? - -### Lower Priority - -4. **Tool provider migration incentives**: Besides usage metrics on Hub, what else can we offer to get official dual-mode servers? - -## Next Steps - -1. **Prototype HF Hub integration** for tool simulations (v0.4) -2. **Validate docker dependency separation** with real environment (travel booking) -3. **Implement CodeActEnv wrapper** with existing environments -4. **Build reference traits** (BashAccess, PythonAccess, HumanComputerInterfaceable) -5. **Git-based checkpointing** with async sidecar -6. **Update RFCs 001-004** to reflect this unified design