From 732fd1e4d3e05791828192ba180e53feb911b807 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 19 Oct 2025 19:01:23 +0100 Subject: [PATCH 01/12] skills holding page --- docs/agents/skills.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/agents/skills.md diff --git a/docs/agents/skills.md b/docs/agents/skills.md new file mode 100644 index 0000000..8d7d8c6 --- /dev/null +++ b/docs/agents/skills.md @@ -0,0 +1,3 @@ +# Agent Skills + +## Coming Soon \ No newline at end of file From d47a94b6901e5260f04eb84135bd1f90d30197e2 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 26 Oct 2025 14:50:15 +0000 Subject: [PATCH 02/12] updates, including agent skills --- docs/agents/skills.md | 36 +++++++++++++++++++++++++++++++++++- docs/index.md | 11 +++++------ docs/models/check.png | Bin 20316 -> 51416 bytes docs/ref/go_command.md | 21 +++++++++++++++++++++ mkdocs.yml | 1 + 5 files changed, 62 insertions(+), 7 deletions(-) diff --git a/docs/agents/skills.md b/docs/agents/skills.md index 8d7d8c6..4864f31 100644 --- a/docs/agents/skills.md +++ b/docs/agents/skills.md @@ -1,3 +1,37 @@ # Agent Skills -## Coming Soon \ No newline at end of file +**`fast-agent`** supports Agent Skills, and looks for them in either the `.fast-agent/skills` or `.claude/skills` folder. + +When valid SKILL.md files are found: + +- The Agent is given access to an `execute` tool for running shell commands, with the working directory set to the skills folder. +- Skill descriptions from the manifest and path are added to the System Prompt using the `{{agentSkills}}` expansion. A warning is displayed if this is not present in the System Prompt. +- The `/skills` command lists the available skills. + +## Command Line Options + +If using **``fast-agent``** interactively from the command line, the `--skills ` switch can be used to specify the location of SKILL.md files. + +```bash +# Specify a skills folder and a model +fast-agent --skills ~/skill-development/testing/ --model gpt-5-mini.low + +# Give fast-agent access to the shell +fast-agent -x +``` + +## Programmatic Usage + +Skills directories can be defined on a per-agent basis: + +```python +# Define the agent +@fast.agent(instruction=default_instruction,skills=["~/source/skills"]) +async def main(): + # use the --model command line switch or agent arguments to change model + async with fast.run() as agent: + await agent.interactive() +``` + +This allows each individual agent to use a different set of skills if needed. + diff --git a/docs/index.md b/docs/index.md index f72ed97..805738f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -13,17 +13,16 @@ hide: --- - Install [`fast-agent-mcp`](https://pypi.org/project/fast-agent-mcp/) with [`uv`](https://docs.astral.sh/uv/) and get up - and running in minutes + Simple installation and setup with [`uv`](https://docs.astral.sh/uv/) to be up and running in minutes. Out-of-the box examples of Agents, Workflows and MCP Usage. -- :material-battery-charging:{ .lg .middle } __Batteries Included__ +- :material-battery-charging:{ .lg .middle } __Agent Skills__ --- - Out-of-the box examples of sophisticated Agents, Workflows and advanced MCP Usage. + Support for [Agent Skills](https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills) to define context efficient behaviour for your Agents. Read the documentation [here](./agents/skills.md). - :material-connection:{ .lg .middle } __New - Elicitation Quickstart Guide__ @@ -36,14 +35,14 @@ hide: --- - Comprehensive test automation, accelerating delivery and assuring quality + Extensive validated [model support](./models/llm_providers/), validated for Structured Outputs, Tool Calling and Multimodal capabilities - :material-check-all:{ .lg .middle } __MCP Feature Support__ --- - First MCP Host to support Tools, Prompts, Resources, Sampling and Roots + Full MCP feature support including Elication and Sampling and advanced transport diagnostics [:octicons-arrow-right-24: Reference](mcp/index.md) diff --git a/docs/models/check.png b/docs/models/check.png index 6ee4ced79c56027df5808843d0266c1af95a5244..ff39b939464a20ecfeafd3ef49025cf0e82ac8a1 100644 GIT binary patch literal 51416 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 literal 20316 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

+bxi=N)^tqGz!m5C)+EQ`La$ z8A%Uys%fJU_2tc~1rA`F+J%;GR;M7ofON`M(}wNWasOOQ5fG!@n}ap_ zC$MsCd@RJLH8#NAh!aBQbW38GOB@{E_Z9U}4a8H1M{gQ{NTAzZlf(}v=HE<)?kF}; zUT7Jw0X(Mt^)%{?(2{PU6b&>Rfua_!e*rAOPlZ+ALoO2Rt|z_~il?vha#LhlAcwl# zD9QGZX?vjhK?#iq1}7hU89@Uo$2L$oO8cVIojTeOxw_tSL3s(q&3_oF>#xYIGa)f` z_#zRkb^rtejcac469pqSSTnvYt^ki1p|m?PB^FYZCAZMAFMHgIeCy?79>&LSQ!=_H7NKqm5&DHJ#yLV!#N4GXivW3`=B$Q)f2COS z?1a|GkYvy(yx%6qqXq(Em+sy?W@05ZS}pzVYfjG+tA*_3pYvl8y*lXuHjfvS&aDpk zB0ph{J~x(UzTj)T#9G?jrgG_wdCv<{FSHyZk^%Go4CWt{RJKkqpI^|vaz1xOehnPy z4Ja@$3gQ(B3AuIO&=$R^xdMU8lXz;7fXji6)P&Yc83D>Sg;gf7fS_f`qjzV^hPdM2 z3};l@T6E3pS^3zMF;8sx=m_h*vgpTFlDi9lj0o@bKAMdHOm)H2ht4LuyYzjZw4Nc7 zAk|x)j-cQ4W#*4>Lv-?Q8#8{$o{HDA6h6OTq5$A$#Ut-~3zMv4FI$wBKSee^SbxgD z6Qr%_sT~&-hcU*<^Hm&t&!Y|8( z(*pAy6hRxEn#Uuf>6s5}-*dCCD-wTxs&lM{Gva=IfO%-e7QNXfVHgOA;bWr{DWB(B zbU)Hcte44Zf+PC~A-6KC&aKQG=UUf-^ z8&p3cr0Au;t)T!?fjmhG&()-{ciueyaHKhiC0p1g7b1Mlt6C&N^DU;@9QG%4F>b{H zsO&_%COCJt9%u6_AXfccS;f_F0?P}HD8V%;ZRM#ZnQELX$5S-rdhVRuT%8hz-MB8{ zH|97=gde8$0g^ZeX;)DZ0u!-PKl5Pd(!GT4>Ij zySi;sPy58Cb*uIC`j@V$nRKV&XK4xe2g&za*DDvSl=pUEdPMqaOvFQ*!E+l*4}H8I zkEhZNK_D5#;YEQ$fES9P8wOtU#CyU32jbJjH&gIfen0aeQ%z$O7o;#&Kj1Xm{fK&2 zCgC(fQtQD@1_0ZZgg4=vgFtf+$jZ?qwkJVt;Lj_QgTpKqCp#2sW@3M{x1b0J{fH4-)}Ms4 z3GyZ1DA-Vd;-L^Uh5zI6KuhuahkN;ut`S<iaAA( z&(+@@JSwqrjEu}+x)hin4Q+LJlruki=aRXNx2SuV&b!w2-(7FbURrI9Ao~g(X4^2l zv6>l{A12r@^yZI;4V{L`{e3HOxHO^cX8W0sY)f{@)J6eXdFsV&fMpdiX`gf7xa_fwO#eZ_2$*5P?SKz1=P5>onz1U9|)6uYa*Ab-B6$U zRi`p0@s)qaf?k1ynbn2ec3iBJ3AhZrhimS3MUSy;r9OGyD1b$$6QD|400!kx#n*pb zz5N^vxbwek9o~cgTXl;7nXIN@)ZWRZSGYcckxSF7xY;YUd74n~H-hdu_QPFvYbh)d z!j!ONgl7loLw1g(YAFu?Pi)u@Doa-KF4;ttRbG&d+npr%u8?Nks-o+l%O!-uE5pMzasTyJ$dRwI6@u3|D3w|(;XmA zFbKIx01ogwnKn9Q^_)}@sRwYNhrt!=AvP&(EKCcY?c%`~aG+J%X77nz7Mnw*6Uz)q zv^@F8ip<{tCKHM@c1@G6zjmg%KDTBYj?wlq;(YeIG6u*bJMj~qDdbz6987?N0jXPJ z;6~xv9x)#o3g;nhfYEq1VkHmO9e;T%IO230$bA@Wjz~-&>q3$@HZ1cr{vhvf1pU?= zFD|nydvkHwEj*`K-#7DY%A0P(V846vh>#)3zYD?i?fXFoi)+2DhZeLWqK9QTITHyq5$q^j2lvhgG4=A5 zYZi?P=dfq;%r1T1`%v$9nhyf+=ytB(dz5p|8;#i7*TO>b%#$)y<|peVqRD8a?qBGc z8GOQZq91UuAipTbOG&`cpM@gYhTb@b(*zwDUsCI-mmhr)Apf9R+Tj6lP`JR0odosR zA^fL`1_w0duBk@EYf3;!gG)DZVegLGon3=aL;>~VnUV=sKdPH56{M0%c|Mrs|KxOr z>7E*#f4^9yD+-Qmrb-bwyLA5$&OjdSENS3{ToLu0(yR1I^#^xo3)|N0G zPEwA9hxW^4S%R>)7!JyVu`TMKJ{L~>Ii$oo!y>fzn(Y##SkHY0JzTK*`Uu4tv+Lt+ z{+Cu`RXJ=GPB}kkTj^xyWYTd#VC#31GGp$SBtBl8MyMDbbDi4r-hOi=2RF}{%&|Hi z1kn_yxYt%)0;QG;m$AhUykOeWYahN6dUsO!rB_>IQ1bhKR8;ju-1fk!^KL>>bB=Bs zxWE()!qE2y4R-zIPCJN@5N#f0In>CjOCo8{Urv8>nJ@7_b8|#F{D)pwdP#@{SM|a_ z&Sw+LnbAjmjNSZ?8*1clTnwBjP-#2`b@TBCvJcyCPMmT~sc-l+JkY8E2iUKcoZ9kh zF^LUl+~va=wHaiYcbZ^$NA1o%A4`sIc+AsI4W}UNFrzj4VahQO7%2v?X7;ilmP2tm+YCE8{bYa_24X_xn=|Bx?5|WcD>3`vVd+0P7U{ zU3P~0xL#kC zksE(6t*$MQiW}P2G&I!9f1FZwFre2wQ%t-$UjRM<0;p$D*majT@b}AuMSnJ()5faT z@83V5>Dzd;ljKmQ9|e!=)Z!&#{JQ+}IBce`g@^{34XTF8s8@>I`?7Y&|MsGtm7|1G z6+WpO9byZ>Dafpm3dZJ}h7SN#*`7FdA5Jl>7@!E0X4<8Md!VhgCCNe4SW*5nMm(>?s`5$Z>-=UVLWo}=%w-i}2PG<#ojF+NAWGV`OD(L%@D>p%-{50Qt z(O7REb72=#u<+kSdC(_fc=H2dS~AsNrlpA)(zX;4Y$Es$+);pFfz|cLz*OrWb}Q?y zVKd>oM@(ym3AR2^Gk?TbHy34a^IJO#aVc>dG3o7-B^ymtSsyjWq4cJsl5cbUqdHFqe3}_#R&9oz0DxS8o~wRK@A$8$Hkgve0F$2mtwNQLL-1YFlg6syp(- z`3e3>1qEfD6xLf;3Fef)s^jBh(@R&Dqo$yq?YUlTtN!DF@29q#;a*Y;Ey2v(h)nvd z65`^kGRC-oj1>8G{W1EqEF>b5aGXNs71LL@%vU z2^ROGy!dB!b(avWh2*@dmhim5WY#Xu94|21>Bq&ln52NqbneSk>sB{9?}0~FR9=J- zc?=>RtmVrsjmmkDDjeJw)+y2BZ{~XOKi$5Era?M@E@$WJ()js1DJ9xxX9-Q@)AS36 z-sxB{Z+nB}YxBqB+3goMv&Cqe^iw^+n{tvxjP!vp_BRRI3W!+Gwg=zCo-RVM+C;U{PgW*dtTO#0KP8XA5XtwVo_gnxO0h(H#t~Q9OKh6W@ z#r5u7y37T0rEp>?6Us$^A`bz~n0jh$`)@7?DnSGNtf|7sBDgmC<)&GN){jfU4QC2W zKQXbf(c_1GWB?p3Y$U;aIH4_FfEHW5`@~R_WMZmigAMA2E^YZM%k2ZSxRDYp0T-Sf zoBXRw2Ox1Re0I#j7ODl!D&;_Hu1Qo^cSC%9f6aKHQpjQ=N31D_#EJ<(@jt3n_P?ag zncygctD^j7u4`G)6ab*;_}t9XNYu!qvx~`k1-I!VJ=1rEcC7nN8BMjj7W-8DapE_6 zQbojowChlFqA$03hHY85HWDBASJkWd@!KLM2B4cYA1#!&yOdlWp8} zc1r~zcu-2f4i;wK|-6st+Qe8!(`TKM!f~m!(+7m;m?a@L;qx)Px13Mr} zCIS}e0Uz|CfWoo^P)XBcf?(5vV7$Hic+$~8LL(OoUj7vr4&D$L2}%lV`K1lS%T?TH ze?YZEd_hl8@1tAGg5Cnym=zM*eOokLNxNfu8iO%YA#b#`^Knnl+geiiQy9R@e#(A5 z0;Ruz265E?c4-+<2T;;wO8N9SI(~`JiQj-%X73o*#5wG}zuz7NO>ap;)nC(ONjK+1s`lHVk!nM;(PNIBX6SE^N039sL!BVB&5W8$ z2O?0yRz9++D)#7)c4}O9z9YU`GT8V2fkghXbDIBWjywN?;e+DDczHKp9l0CiF2>VL zjcHY_HNuxxZZ*&9PsIB@9|uZMZP~855@w}^OM(R2?voOgq** zCb~|^XhvZmgr+lS|D%2$ld&&p!kA^CJ2O7gL&w-TU5M#^qYL^TEKSqTK>YupsfkG& zCnCs$|Gm50I3d7n7kS_5%e2AD<8VjuXTqk-E3P8Y^Hjg}jP;gTnH7kfM2kj%6Yl`x z98`e^E~F2%IWHREe(3if}VY2 zL8>0OagG~-_Fe*UtnXnP0qTqj+BXRDCHKo?Ixj=k7EK^`w_1s+VKYA8o&hnHG*@7% z0z{IqQq@1HYcn7By<&i{>bUvITxYJp`LjHPcCh*BQf3;cf!E2|^Sgd4-UO{j|2yBv zhE9y#rHU8d{#tfqipYas9?-6-Y03tm+p$eQXD9)V_&OC0PAt?YW}KEy-j@2 z@5c{nL!A-B!r`d;T9=(we4uUjwp>P^2p9!(k@iAqF;>O^)I&BXNp|28brh;1Ef4>z zW$@SBoVxOl>nGqDo_XM5g1(=l(zu%jhy=+feu=mK_|m)b?xuDF*vvlKp3LFiPc`D4 zU_eO+u}U(ge>HvjU0wsOO+StBRS4%Bm+IQadAj^h9vNSNZo+R!o$6{&KUa?^38g9b zi2U9|fEl&FW(Z;2jFXmk$R_*@A$_PX?_GPYGolwB(LvP;AZx#ngY;2TY2)0lClJ$S zkAz~jx0{RFAkI9il$p_2!BssKJ6s6d7q@IG27TU+ud@rIO^_b-7VA{sb>e2{i=5W4 z)FH|!CFb7>PN^62-3tmuTwsX~g-g?<%_}-NhixVc^bSlSoP=gOVf_X$&yPpU>HJt~ zsvJ9%MUkmopX=v+Go{10vD(LHO%PN?+8bL``nv?A*s258iBkg?>Qjk+1-|N_@*M2510Fyh!Nw%p$ zJn80HYa0Z}%nw|#e`}>HI|n6|{SCZ-==TMh&f#vPiJ_DmNYD^pv$wsJmKDS%m(ELf zn*~^M9fMSkphdL~eeZ5Hu0)U|_aCD29P$2EQClD$5m;7YjS4$XA7CuO&7A`yG8itF zTN-C^Jj*keq+3fS!1=Xj`ICK$Sy8MG1N~<}{JuW5pUU+j8W}NV&YUnA+S3EaOzEja zWn-lG*FtLoY&t%>*&ZJYR~BG~RmoQ6O@JORX8a4|%Z2reR-i5i>&SNP=k}u|j4mBB zjnxQX^~S7~19Vr|r+U=;yEZzPYhOUXj8x%Xt4lv3EUYVjh~dj~oTockJ(1$y-19-@X z3pNJyC9VF|>_vfow09fbIXm(UG|&x0Z~X*rl}4?`?kF#Fg%b~K1${AvrPT?JmP@yi zKvfJ+;2O1dX`!i))^xHtr06KARh~8%4G9JBkpI60jQ{@1L5@0LH@OFI6Kiupd0JYD zr%7o!3jri#y3g6=MDuAhpgsWki2kV5;DWJJ>__9SFI*P@LSEw2xVQZEnyUZ2cJPnx z$5o_|)ZmT@WXKu)N=`+l-yZ4q06Da0lKoXJW(XjdJeQn$&R+Rv)r{`{2(g*&l;@ARvZ z{ab=d($x6el3kvO30kH2E?=P&38KiEb29x%#rtyU43O6SORh3pjf!qK-^gaY!@=Pu zzMMlU>-dk5#z(ZOcWzp2?E`8jlh5 zC^}nE|*87)#fJO>ips2Q6EcoBC8n?$CMUS5) zs;$$-lwTrhN%OY%g7ioR$Tw)myKzhH6QEm;tE*Aoj@ji{FLm|~0|%NnybL~hH|g{2 z@u%KVH2yRCSjGzFsM9Sdzkbzyy8Hqc4gv)y^`&S?BZJlc7I-G0RZZ!eP5@}CKc2cE zn=R$eY3`|7(<7oy(DO|vWgE$bvebQJ0;)XwE^E zjW4_}`wqvlti|OtV7;4FUWM%bxyf*f)Q}9r#2^psn;~S}QKQ9iqHWY3?1fi23+S6k z@)@B6)Td_Px%=GEM0tw98(UPz_0m%Dg|NB!NI#NaFe_Mq_HS07j7t5w+ZfeVaQI~6nL5)n0M%` z^_HhG%j_^#jICjuACCo67VFiwn!c;sm)mS0LWi}zuooK|eCoGmw-3EzNezO36a1cI ze4PAnT%6YD8YkD~pnE&jg z%%-a6VNLv8LzZWO7czG@Fpw{9wdAOOf_oZ_^L90t*O~m{i{a^zIr>9^2ehvV0M01# zj)N+Utq{sJxP%}l5rI;sh5)sC7;L70#V%)Al^Yy|i3M=NBO{|Ji^NJI39iW(z%tfT z8$&z7Yi(;cNcat-$|@?~d=!V(T|S5LO^xFO`&~CTANI?lns%Vb@B2RGQOs-PRXXII zYYS)lS}{Pae|shFNr0ETunB$xu)z{mZm>F|<+vK6T$89fuNmv?8blquF4SVK_?Bxb zU;q&afzY^Mz8RV1JB;rtB?bHM=~2IHVcmobczBZXD&GQ$NTPfkFzf8o77ot&jZup= zUHC%`ya$uWnn0z+OaRix*KUs4#=mf8q!%(0cX26B)gJYN*UA18un5h$C&61#K$JiG z7z}MEsz^j?S)9(i9fIwJv-_{tJ(|EM{NdxRBp zZnJY@n4c%SRu_}0xw$B453ZTr188OPOMXVn?<|*UE(q`_iOL3?R_%f}aWZj5P)4@k z3hn0hkB=O%uw6)OCFe6HTD#nWrx4r1GLo<}84>1`@+o!I9IUSV!z$tRqV3QFgIvc`r^l`b@*nqI|B;Vi!g1kkAKOB8;xuhWO}+*RWtA3HzT7sseDlVaIr40nmy+X z0c7}!vk|3c#Ac6L`|T=Oxrl-0VQ$Uj*ClVO0F2*8YT!Rf*xN#dlvPxJ@?16bwxB-1 zB;-!>l1`|on7Ge|g;X0YG@hL4RoA|r34Mc4o3P^i@dXg?ItFv^nV)QC{0F~_&Hd)C z?A!mq?mlvX(v5+^2eG`i`Ts0|{}QmyaDKJ^Hn$JQ%jz%xpVfE(7ZxOBE}p%`vNFTW z{aT#DX9du>E*E5;-aV+K>7ILeX5N+i!Uwi4-fgqyTiNo4#zuyQ)8fVfD??`eReJ@j z^?*b3ch-eCuSw6?wRfJrb~N|47Yhx(zGiNi^d{@eEWACDL6W=`+_-0*$E@A;2`b4D^MW;K%K zaoz4dug(i8F6o|m#cp1P_Y^l<)4L1)>RWH_Pe)9s&OcFDox17p#n0t?xEX$YYPJ7( ze(U%BSHdQ)e(*Tq0Z?D|`Z8&e%$dO5T%Ulg_2LP;KK$;$MYrF7 z*|u{$@1x2O+s%7Zy5T+Z_W8@~ZoTi`S8KDiu)4~sy5oW9t3}1)ORCG?KP+1swc%E* z^|yO>t5;~|0~>ZvnZJL$vh4lyWqbS8zyAxpvqF^T^JTkvz$tRjz~pq`fX&|C>zzL( zLe=6{#n38E5E0uaP z1tzB?e&p!lGL?S&ofSNUdw2Khm%$0!R|#3(KJaMbf5+_Z%r*Of6Y{!KDugDN{5vB# zS24Z#8faWN{$%Lcv^R>AZCGzhb=JOFsI%hw?w`PA2_@U(EU$nzo&eW7*paY20pt8L z;9*FirL%5N>y-Ho+8+ZN74Cmj7}p{M(;i z-t6%9?PpjRfG1rYJ69#k?6l}6XaOp)QO{oJnI4}0-HYjw+ zsDh6$1DUyMmsg0`(*;0hM%w@HUi)rBAn=?qus`NrefUTTY>?9~Cj84#i5W%zQ-AYp Wy7~#G{!HMBcnqGdelF{r5}E*!pRiB> diff --git a/docs/ref/go_command.md b/docs/ref/go_command.md index f6e51cf..2b91ff2 100644 --- a/docs/ref/go_command.md +++ b/docs/ref/go_command.md @@ -33,10 +33,18 @@ fast-agent go [OPTIONS] ### Examples +Note - you may omit `go` when supplying command line options. + ```bash # Basic usage with interactive mode fast-agent go --model=haiku +# Basic usage with interactive mode (go omitted) +fast-agent --model haiku + +# Send commands to different LLMs in Parallel +fast-agent --model kimi,gpt-5-mini.low + # Specifying servers from configuration fast-agent go --servers=fetch,filesystem --model=haiku @@ -46,11 +54,24 @@ fast-agent go --url=http://localhost:8001/mcp,http://api.example.com/sse # Connecting to an authenticated API endpoint fast-agent go --url=https://api.example.com/mcp --auth=YOUR_API_TOKEN +# Run an NPX package directly +fast-agent --npx @modelcontextprotocol/server-everything + # Non-interactive mode with a single message fast-agent go --message="What is the weather today?" --model=haiku # Using a prompt file fast-agent go --prompt-file=my-prompt.txt --model=haiku + +# Specify a system prompt file +fast-agent go -i my_system_prompt.md + +# Specify a skills directory +fast-agent --skills ~/my-skills/ + +# Provider LLM shell access (use at your own risk) +fast-agent -x + ``` ### URL Connection Details diff --git a/mkdocs.yml b/mkdocs.yml index 6d0d34b..a3b86a8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -90,6 +90,7 @@ nav: - agents/running.md - agents/prompting.md - agents/instructions.md + - agents/skills.md - Models: - Model Features: models/index.md - LLM Providers: models/llm_providers.md From 6eaf3b8f123387c81099993bd864f0d33c2dd1e7 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 26 Oct 2025 14:51:01 +0000 Subject: [PATCH 03/12] fix index --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 805738f..9f2fdb7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -35,7 +35,7 @@ hide: --- - Extensive validated [model support](./models/llm_providers/), validated for Structured Outputs, Tool Calling and Multimodal capabilities + Extensive validated [model support](./models/llm_providers/) for Structured Outputs, Tool Calling and Multimodal capabilities - :material-check-all:{ .lg .middle } __MCP Feature Support__ From f6eb648db642433b0df4fd126927b5cd08ca8d97 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Thu, 30 Oct 2025 23:27:14 +0000 Subject: [PATCH 04/12] fast-agent serve command --- docs/mcp/mcp-server.md | 80 ++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 81 insertions(+) create mode 100644 docs/mcp/mcp-server.md diff --git a/docs/mcp/mcp-server.md b/docs/mcp/mcp-server.md new file mode 100644 index 0000000..f18893d --- /dev/null +++ b/docs/mcp/mcp-server.md @@ -0,0 +1,80 @@ +### Running as an MCP Server + +**`fast-agent`** Can deploy any configured agents over MCP, letting external MCP clients connect via STDIO, SSE, or HTTP. + +Additionally, there is a convenient `serve` command enabling rapid, command line deployment of MCP enabled agents in a variety of instancing modes. + +This feature also works with [Agent Skills](../agents/skills.md), enabling powerful adaptable behaviours. + +#### Using the CLI (fast-agent serve) + +```bash +fast-agent serve [OPTIONS] +``` + +Key options: + +- `--transport [http|sse|stdio]` (default http) +- `--port / --host` (for HTTP/SSE) +- `--instance-scope [shared|connection|request] `– choose how agent state is isolated + - `shared` (default) reuses a single agent for all clients + - `connection` (sessions) Create one Agent per MCP session (separate history per client) + - `request` (stateless) - create a new Agent for every tool call and disable MCP Sessions +- `--description` – Customise the MCP tool description (supports {agent} placeholder) + +Standard CLI flags also apply (e.g. --config-path, --model, --servers, --stdio, +--quiet). This allows the **`fast-agent`** to serve any existing MCP Server in "Agent Mode", use custom system prompts and so on. + +Examples: + +```bash +fast-agent serve \ +--url https://huggingface.co/mcp \ +--instance-scope connection \ +--description "Interact with the {agent} workflow" \ +--model haiku +``` + +This starts a Streamable HTTP MCP Server on port 8000, providing access to an Agent connected to the Hugging Face MCP Server using Anthropic Haiku. + + + +```bash +fast-agent serve \ +--npx @modelcontextprotocol/server-everything \ +--instance-scope request \ +--description "Ask me anything!" \ +-i system_prompt.md +--model kimi +``` + +This starts a Streamable HTTP MCP Server on port 8000, providing agent access to the STDIO version of the "Everything Server" with a custom system prompt. + +#### Running an agent + +If you already have an agent module or workflow (e.g. the generated agent.py), you can start it as a server directly: + +```bash +uv run agent.py --server [OPTIONS] +``` + +The embedded CLI parser supports the same server flags as the serve command: + +- `--transport`, `--host`, `--port` +- `--instance-scope [shared|connection|request]` +- `--description` (tool instructions) +- `--quiet`, `--model`, and other agent startup options + +Example: + +```bash +uv run agent.py \ +--server \ +--transport http \ +--port 8723 \ +--instance-scope request +``` + +Both approaches initialise FastAgent with the same config and skill loading pipeline; +choose whichever fits your workflow (one-off CLI invocation vs. packaging an agent as +a reusable script). diff --git a/mkdocs.yml b/mkdocs.yml index a3b86a8..6157984 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -97,6 +97,7 @@ nav: - Internal Models: models/internal_models.md - MCP: - Configuring Servers: mcp/index.md + - Deploying as an MCP Server: mcp/mcp-server.md - Inspecting Servers: mcp/mcp_display.md - Quickstart - Elicitations: mcp/elicitations.md - Quickstart - State Transfer: mcp/state_transfer.md From 0ee4156f425429b06d4c95526094cbbef4f54754 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 9 Nov 2025 22:58:57 +0000 Subject: [PATCH 05/12] HF support! --- docs/models/llm_providers.md | 86 ++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 3 deletions(-) diff --git a/docs/models/llm_providers.md b/docs/models/llm_providers.md index cd78d8e..6278565 100644 --- a/docs/models/llm_providers.md +++ b/docs/models/llm_providers.md @@ -82,6 +82,88 @@ openai: | `gpt-5` | `gpt-5` | `gpt-5-mini` | `gpt-5-mini` | | `gpt-5-nano` | `gpt-5-nano` | | | + + +## Hugging Face + +Use models via [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers/en/index). + +```yaml +huggingface: + api_key: "${HF_TOKEN}" + base_url: "https://router.huggingface.co/v1" # Default + default_provider: # Optional: groq, fireworks-ai, cerebras, etc. +``` + +**Environment Variables:** + +- `HF_TOKEN` - HuggingFace authentication token (required) +- `HF_DEFAULT_PROVIDER` - Default inference provider (optional) + +### Model Syntax + +Use `hf.[:provider]` to specify models. If no provider is specified, the model is auto-routed. + +**Examples:** + +```bash +# Auto-routed +fast-agent --model hf.openai/gpt-oss-120b +fast-agent --model hf.moonshotai/kimi-k2-instruct-0905 + +# Explicit provider +fast-agent --model hf.moonshotai/kimi-k2-instruct-0905:groq +fast-agent --model hf.deepseek-ai/deepseek-v3.1:fireworks-ai +``` + +### Model Aliases + +Aliased models are verified and tested to work with Structured Outputs and Tool Use. Functionality may vary between providers, or be clamped in some situations. + +| Alias | Maps to | +| ------------- | ------------------------------------- | +| `kimi` | `hf.moonshotai/Kimi-K2-Instruct-0905` | +| `gpt-oss` | `hf.openai/gpt-oss-120b` | +| `gpt-oss-20b` | `hf.openai/gpt-oss-20b` | +| `glm` | `hf.zai-org/GLM-4.6` | +| `qwen3` | `hf.Qwen/Qwen3-Next-80B-A3B-Instruct` | +| `deepseek31` | `hf.deepseek-ai/DeepSeek-V3.1` | +| `minimax` | `hf.MiniMaxAI/MiniMax-M2` | + +**Using Aliases:** + +```bash +fast-agent --model kimi +fast-agent --model deepseek31 +fast-agent --model kimi:together # provider can be specified with alias +``` + +### MCP Server Connections + +`HF_TOKEN` is **automatically** applied when connecting to HuggingFace MCP servers. + +**Supported domains:** + +- `hf.co` / `huggingface.co` - Uses `Authorization: Bearer {HF_TOKEN}` +- `*.hf.space` - Uses `X-HF-Authorization: Bearer {HF_TOKEN}` + +**Examples:** + +```yaml +# fastagent.config.yaml +mcp: + servers: + huggingface: + url: "https://huggingface.co/mcp?login" + # HF_TOKEN automatically applied! +``` + +```bash +# Command line - HF_TOKEN automatically applied +fast-agent go --url https://hf.co/mcp +fast-agent go --url https://my-space.hf.space/mcp +``` + ## Azure OpenAI ### ⚠️ Check Model and Feature Availability by Region @@ -179,9 +261,7 @@ groq: | Model Alias | Maps to | | ----------- | -------------------------- | -| `kimi` | `moonshotai/kimi-k2-instruct` | -| `gpt-oss` | `openai/gpt-oss-120b` | -| `gpt-oss-20b` | `openai/gpt-oss-20b` | +| `kimigroq` | `moonshotai/kimi-k2-instruct` | ## DeepSeek From 1574bad36a73e762e13c10d31b5531821a3682fb Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 9 Nov 2025 23:06:33 +0000 Subject: [PATCH 06/12] correct config.yaml --- docs/models/llm_providers.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/models/llm_providers.md b/docs/models/llm_providers.md index 6278565..df8659c 100644 --- a/docs/models/llm_providers.md +++ b/docs/models/llm_providers.md @@ -89,7 +89,7 @@ openai: Use models via [Hugging Face Inference Providers](https://huggingface.co/docs/inference-providers/en/index). ```yaml -huggingface: +hf: api_key: "${HF_TOKEN}" base_url: "https://router.huggingface.co/v1" # Default default_provider: # Optional: groq, fireworks-ai, cerebras, etc. @@ -154,14 +154,14 @@ fast-agent --model kimi:together # provider can be specified with alias mcp: servers: huggingface: - url: "https://huggingface.co/mcp?login" + url: "https://huggingface.co/mcp" # HF_TOKEN automatically applied! ``` ```bash # Command line - HF_TOKEN automatically applied -fast-agent go --url https://hf.co/mcp -fast-agent go --url https://my-space.hf.space/mcp +fast-agent --model kimi --url https://hf.co/mcp +fast-agent --url https://my-space.hf.space/mcp ``` ## Azure OpenAI From 5eeb2595e6ffd20776ddcccb082917b7f60d8288 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Thu, 13 Nov 2025 17:31:13 +0000 Subject: [PATCH 07/12] kimithink! --- docs/models/llm_providers.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/models/llm_providers.md b/docs/models/llm_providers.md index df8659c..7ba22b1 100644 --- a/docs/models/llm_providers.md +++ b/docs/models/llm_providers.md @@ -120,15 +120,16 @@ fast-agent --model hf.deepseek-ai/deepseek-v3.1:fireworks-ai Aliased models are verified and tested to work with Structured Outputs and Tool Use. Functionality may vary between providers, or be clamped in some situations. -| Alias | Maps to | -| ------------- | ------------------------------------- | -| `kimi` | `hf.moonshotai/Kimi-K2-Instruct-0905` | -| `gpt-oss` | `hf.openai/gpt-oss-120b` | -| `gpt-oss-20b` | `hf.openai/gpt-oss-20b` | -| `glm` | `hf.zai-org/GLM-4.6` | -| `qwen3` | `hf.Qwen/Qwen3-Next-80B-A3B-Instruct` | -| `deepseek31` | `hf.deepseek-ai/DeepSeek-V3.1` | -| `minimax` | `hf.MiniMaxAI/MiniMax-M2` | +| Alias | Maps to | +| ------------- | ----------------------------------------- | +| `kimithink` | `hf.moonshotai/Kimi-K2-Thinking:together` | +| `kimi` | `hf.moonshotai/Kimi-K2-Instruct-0905` | +| `gpt-oss` | `hf.openai/gpt-oss-120b` | +| `gpt-oss-20b` | `hf.openai/gpt-oss-20b` | +| `glm` | `hf.zai-org/GLM-4.6` | +| `qwen3` | `hf.Qwen/Qwen3-Next-80B-A3B-Instruct` | +| `deepseek31` | `hf.deepseek-ai/DeepSeek-V3.1` | +| `minimax` | `hf.MiniMaxAI/MiniMax-M2` | **Using Aliases:** From 019db65dd75e3c2184e487e2e2672fe8f4b02ec1 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sat, 15 Nov 2025 11:52:31 +0000 Subject: [PATCH 08/12] acp doc stub --- docs/acp/index.md | 40 ++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 ++ 2 files changed, 42 insertions(+) create mode 100644 docs/acp/index.md diff --git a/docs/acp/index.md b/docs/acp/index.md new file mode 100644 index 0000000..969bfc0 --- /dev/null +++ b/docs/acp/index.md @@ -0,0 +1,40 @@ +# Agent Client Protocol + +**`fast-agent`** has comprehensive support for Zed Industries [Agent Client Protocol](https://zed.dev/acp). Why use **`fast-agent`**? + +- Robust, native LLM Provider infrastructure, with Streaming and Structured outputs. +- Comprehensive MCP and Agent Skills support, including Tool Progress Notifications and Sampling. +- Extend and build custom multi-agent experiences in a few lines of code. +- Each Agent or Workflow appears as a "Mode" and transmits workflow events to the your ACP Client. + +## Getting Started + + +### No Install Quick Start: +To try it out straight away with your Client, set an API Key environment variable and add: + +**Hugging Face** + +export HF_TOKEN=hf_....... + +`uvx fast-agent-mcp@latest serve --transport acp --model ` + +**Open AI** + +export OPENAI_API_KEY=...... + +`uvx fast-agent-mcp@latest serve --transport acp --model ` + +**Anthropic** + +export ANTHROPIC_API_KEY=...... + +`uvx fast-agent-mcp@latest serve --transport acp --model ` + +Tip: Use `uvx fast-agent-mcp check` to help diagnose issues. + +### Installing + + + uvx fast-agent-mcp@latest check + diff --git a/mkdocs.yml b/mkdocs.yml index 6157984..216b4c9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -95,6 +95,8 @@ nav: - Model Features: models/index.md - LLM Providers: models/llm_providers.md - Internal Models: models/internal_models.md + - ACP: + - Using as an Agent: acp/index.md - MCP: - Configuring Servers: mcp/index.md - Deploying as an MCP Server: mcp/mcp-server.md From 4fe78420982e6e8b44f06b0610b9f86fefd4215f Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 16 Nov 2025 19:19:16 +0000 Subject: [PATCH 09/12] acp/sysprompts --- docs/acp/index.md | 13 +++++--- docs/agents/instructions.md | 61 ++++++++++++++++++++++++++++++++----- mkdocs.yml | 2 +- 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/docs/acp/index.md b/docs/acp/index.md index 969bfc0..99a06fc 100644 --- a/docs/acp/index.md +++ b/docs/acp/index.md @@ -1,15 +1,14 @@ # Agent Client Protocol -**`fast-agent`** has comprehensive support for Zed Industries [Agent Client Protocol](https://zed.dev/acp). Why use **`fast-agent`**? +**`fast-agent`** has comprehensive support for Zed Industries [Agent Client Protocol](https://zed.dev/acp). Why use **`fast-agent`**?: - Robust, native LLM Provider infrastructure, with Streaming and Structured outputs. - Comprehensive MCP and Agent Skills support, including Tool Progress Notifications and Sampling. -- Extend and build custom multi-agent experiences in a few lines of code. +- Build custom, multi-agent experiences in a few lines of code. - Each Agent or Workflow appears as a "Mode" and transmits workflow events to the your ACP Client. ## Getting Started - ### No Install Quick Start: To try it out straight away with your Client, set an API Key environment variable and add: @@ -33,8 +32,14 @@ export ANTHROPIC_API_KEY=...... Tip: Use `uvx fast-agent-mcp check` to help diagnose issues. +Note: OAuth keys are stored in your keyring, so `check` may prompt to read the credential store. + ### Installing +`uv tool install -U fast-agent-mcp` + +Documentation in Progress. - uvx fast-agent-mcp@latest check +## Shell and File Access +**`fast-agent`** adds the shell tool, read and write tools from the Client to allow "follow-along" functionality. \ No newline at end of file diff --git a/docs/agents/instructions.md b/docs/agents/instructions.md index 48ba389..d732c72 100644 --- a/docs/agents/instructions.md +++ b/docs/agents/instructions.md @@ -1,8 +1,52 @@ -# Instructions +# System Prompts -Agents can have their System Instructions set in a number of flexible ways to make building useful . +Agents can have their System Instructions set and customised in a number of flexible ways. The default System Prompt caters or Agent Skills, MCP Server Instructions, `AGENTS.md` and Shell access. +## Template Variables +The following variables are available in System Prompt templates: + +| Variable | Description | Notes | +|----------|-------------|-------| +| `{{file:path}}` | Reads and embeds local file contents (errors if file missing) | **Must be a relative path** (resolved relative to `workspaceRoot`) | +| `{{file_silent:path}}` | Reads and embeds local file contents (empty if file missing) | **Must be a relative path** (resolved relative to `workspaceRoot`) | +| `{{url:https://...}}` | Fetches and embeds content from a URL | +| `{{serverInstructions}}` | MCP server instructions with available tools | Warning displayed in `/mcp` if Instructions are present and template variable missing | +| `{{agentSkills}}` | Agent skill manifests with descriptions | | +| `{{workspaceRoot}}` | Current working directory / workspace root | Set by Client in ACP Mode | +| `{{hostPlatform}}` | Host platform information | `Linux-6.6.87.2-microsoft-standard-WSL2` | +| `{{pythonVer}}` | Python version | `3.11.0` | +| `{{env}}` | Formatted environment block with all environment details | | +| `{{currentDate}}` | Current date in long format | | + +**Example `{{env}}` output:** +``` +Environment: +- Workspace root: /home/user/project +- Client: Zed 0.232 +- Host platform: Linux-6.6.87.2-microsoft-standard-WSL2 +``` + +**Note on file templates:** File paths in `{{file:...}}` and `{{file_silent:...}}` must be relative paths. They will be resolved relative to the `workspaceRoot` at runtime. Absolute paths are not allowed and will raise an error. + +**Viewing the System Prompt** The System Prompt can be inspected with the `/system` command from `fast-agent` or the `/status +system` Slash Command in ACP Mode. + +The default System Prompt used with `fast-agent go` or `fast-agent-acp` is: + +```markdown +You are a helpful AI Agent. + +{{serverInstructions}} +{{agentSkills}} +{{file_silent:AGENTS.md}} +{{env}} + +The current date is {{currentDate}}.""" +``` + + +## Using Instructions When defining an Agent, you can load the instruction as either a `String`, `Path` or `AnyUrl`. @@ -18,8 +62,8 @@ You are a helpful AI Agent. ```python title="With current date" @fast.agent(name="example", instruction=""" -You are a helpful AI Agent. -Your reliable knowledge cut-off date is December 2024. +You are a helpful AI Agent. +Your reliable knowledge cut-off date is December 2024. Todays date is {{currentDate}}. """) ``` @@ -29,7 +73,7 @@ Will produce: `You are a helpful AI Agent. Your reliable knowledge cut-off date ```python title="With URL" @fast.agent(name="mcp-expert", instruction=""" -You are have expert knowledge of the +You are have expert knowledge of the MCP (Model Context Protocol) schema. {{url:https://raw.githubusercontent.com/modelcontextprotocol/modelcontextprotocol/refs/heads/main/schema/2025-06-18/schema.ts}} @@ -73,7 +117,8 @@ from pydantic import AnyUrl You can start an agent with instructions from a file using the `fast-agent` commmand: ```bash -fast-agent --instructions=mcp-expert.md +fast-agent --instructions mcp-expert.md +fast-agent -i mcp-expert.md ``` This can be combined with other options to specify model and available servers: @@ -82,7 +127,7 @@ This can be combined with other options to specify model and available servers: fast-agent -i mcp-expert.md --model sonnet --url https://hf.co/mcp ``` -Starts an interactive agent session, with the MCP Schema loaded, attached to Sonnet with the Hugging Face MCP Server. +Starts an interactive agent session, with the MCP Schema loaded, attached to Sonnet with the Hugging Face MCP Server. ![Instructions](instructions.png) @@ -90,4 +135,4 @@ You can even specify multiple models to directly compare their outputs: ![Instructions Parallel](instructions_parallel.png) -Read more about the `fast-agent` command [here](../ref/go_command.md). \ No newline at end of file +Read more about the `fast-agent` command [here](../ref/go_command.md). diff --git a/mkdocs.yml b/mkdocs.yml index 216b4c9..07570eb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -89,7 +89,7 @@ nav: - agents/defining.md - agents/running.md - agents/prompting.md - - agents/instructions.md + - System Prompts: agents/instructions.md - agents/skills.md - Models: - Model Features: models/index.md From ee572b5132c2bab336ea55afa76109de56426c42 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 16 Nov 2025 23:50:59 +0000 Subject: [PATCH 10/12] cloudflaare --- .python-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .python-version diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..2419ad5 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.11.9 From abb803524f6ed40d0abcf2792aad492021d5791e Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Sun, 16 Nov 2025 23:54:56 +0000 Subject: [PATCH 11/12] cloudflare --- .tool-versions | 1 + 1 file changed, 1 insertion(+) create mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..8aa451a --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +python 3.11.9 From 16b37584f9005f6a6b2a6e0f3af137635985fa05 Mon Sep 17 00:00:00 2001 From: evalstate <1936278+evalstate@users.noreply.github.com> Date: Mon, 17 Nov 2025 00:25:43 +0000 Subject: [PATCH 12/12] remove examples from instructions --- docs/agents/instructions.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/agents/instructions.md b/docs/agents/instructions.md index d732c72..cc11577 100644 --- a/docs/agents/instructions.md +++ b/docs/agents/instructions.md @@ -14,8 +14,8 @@ The following variables are available in System Prompt templates: | `{{serverInstructions}}` | MCP server instructions with available tools | Warning displayed in `/mcp` if Instructions are present and template variable missing | | `{{agentSkills}}` | Agent skill manifests with descriptions | | | `{{workspaceRoot}}` | Current working directory / workspace root | Set by Client in ACP Mode | -| `{{hostPlatform}}` | Host platform information | `Linux-6.6.87.2-microsoft-standard-WSL2` | -| `{{pythonVer}}` | Python version | `3.11.0` | +| `{{hostPlatform}}` | Host platform information | | +| `{{pythonVer}}` | Python version | | | `{{env}}` | Formatted environment block with all environment details | | | `{{currentDate}}` | Current date in long format | | @@ -34,7 +34,7 @@ system` Slash Command in ACP Mode. The default System Prompt used with `fast-agent go` or `fast-agent-acp` is: -```markdown +```markdown title="Default System Prompt" You are a helpful AI Agent. {{serverInstructions}}