<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[JimmyLiao's memo (memo.jimmyliao.net)]]></title><description><![CDATA[Talks about Solutions, Data+AI in 5 minutes]]></description><link>https://memo.jimmyliao.net</link><image><url>https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg</url><title>JimmyLiao&apos;s memo (memo.jimmyliao.net)</title><link>https://memo.jimmyliao.net</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 05:24:54 GMT</lastBuildDate><atom:link href="https://memo.jimmyliao.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[JimmyLiao.net]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jimmyliao@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jimmyliao@substack.com]]></itunes:email><itunes:name><![CDATA[JimmyLiao(NET)]]></itunes:name></itunes:owner><itunes:author><![CDATA[JimmyLiao(NET)]]></itunes:author><googleplay:owner><![CDATA[jimmyliao@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jimmyliao@substack.com]]></googleplay:email><googleplay:author><![CDATA[JimmyLiao(NET)]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[我如何透過 AI 管理多個信箱 / How I manage several inboxes through AI]]></title><description><![CDATA[PIM &#8212; Personal Information Management is a problem that never really goes away.]]></description><link>https://memo.jimmyliao.net/p/ai-how-i-manage-several-inboxes-through</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/ai-how-i-manage-several-inboxes-through</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 12 Aug 2026 05:31:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wV7v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong><span data-color="#6aa84f" style="color: rgb(106, 168, 79);">Please scroll down for the English version.</span></strong></p></blockquote><p></p><h3><strong><span>&#19968;&#20491;&#20449;&#31665;&#19981;&#22816;&#29992;&#30340;&#26085;&#24120;</span></strong></h3><p><span>&#30456;&#20449;&#22823;&#23478;&#37117;&#26377;&#19981;&#21482;&#19968;&#20491;&#38651;&#23376;&#37109;&#20214;,&#24179;&#24120;&#22823;&#22810;&#26159;&#38283;&#33879; Gmail &#35222;&#31383;&#12289;&#20999;&#25563; Profile &#20358;&#25910;&#20449;,&#19981;&#28982;&#23601;&#26159;&#20511;&#21161; App &#32113;&#25972;&#12290;</span></p><p><span>&#20294;&#22914;&#26524;&#20320;&#25171;&#38283;&#34722;&#24149;&#30340;&#26085;&#24120; 80% &#26159;&#29992; Agent(&#36889;&#27425;&#20197; Agent CLI &#28858;&#20363;),&#23458;&#25142;&#25110;&#21516;&#20107;&#20659;&#20449;&#36942;&#20358;,&#36996;&#35201;&#20877;&#25171;&#38283;&#21478;&#19968;&#20491; App,&#20063;&#22826;&#40635;&#29033;&#20102;&#12290;</span></p><h3><strong><span>&#19981;&#26159;&#24050;&#32147;&#26377;&#24037;&#20855;&#20102;&#21966;?</span></strong></h3><p><span>&#20320;&#19968;&#23450;&#26371;&#35498;:Antigravity CLI (&#21069;&#36523; Gemini-CLI)&#21487;&#20197;&#35037; Google Workspace Extension &#25910;&#20449;, &#25110;&#26159;&#20170;&#24180;&#19977;&#26376;&#25512;&#20986;&#30340; </span><a href="https://github.com/googleworkspace/cli"><span>gws cli</span></a><span>. &#25110;&#26159; Claude &#21487;&#36879;&#36942; MCP &#36899; Google Account&#12290;</span></p><p><span>&#20294;&#26159; &#8212;&#8212; &#22914;&#26524;&#20320;&#24179;&#24120;&#35201;&#27298;&#26597;&#30340;&#19981;&#21482;&#26159;&#21934;&#19968;&#20449;&#31665;, &#25110;&#26159;&#21738;&#19968;&#22825; </span>Claude &#31361;&#28982;&#19981;&#33021;&#29992;&#12289;&#29978;&#33267; Antigravity quota limit &#21448;&#35201;&#31561; 5 &#23567;&#26178;,&#25105;&#20497;&#32085;&#23565;&#19981;&#33021;&#35731; 3rd-party agent &#24433;&#38911;&#21040;&#26085;&#24120;&#36939;&#20316;&#12290;</p><p><span>&#26044;&#26159;&#25105;&#25226;&#33258;&#23478;&#30340;&#26381;&#21209;&#36879;&#36942;&#36889;&#20491;&#24037;&#20855;&#23567;&#23567;&#21319;&#32026;&#20102;&#19968;&#19979;&#25972;&#20491;&#24037;&#20316;&#27969;&#31243; &#8212;&#8212; </span><strong><a href="https://github.com/jimmyliao/gwx"><span>gwx</span></a></strong><span>&#12290;</span></p><p></p><h3><strong><span>gwx &#26159;&#20160;&#40636;: gws &#30340;&#21152;&#24375;&#29256;</span></strong></h3><p><span>&#31561;&#31561;,&#26377;&#36319;&#36942;&#26032;&#25216;&#34899;&#30340;&#26379;&#21451;,&#19968;&#23450;&#32893;&#36942;&#20170;&#24180;&#19977;&#26376;&#26377;&#20491; </span><a href="https://github.com/googleworkspace/cli"><span>gws &#8211; Google Workspace CLI</span></a><span> &#8212;&#8212; &#37027;&#26377;&#20160;&#40636;&#24046;&#21029;?</span></p><p><span>&#21487;&#20197;&#25226; gwx &#35222;&#28858; gws &#30340;&#21152;&#24375;&#29256;:</span></p><ul><li><p><strong><span>&#25903;&#25588;&#22810;&#24115;&#34399;</span></strong></p></li><li><p><strong><span>&#27402;&#38480;&#31649;&#25511; </span></strong><span>(&#21487;&#20197;&#35731; agent &#24171;&#20320;&#30475;&#20449;&#12289;&#25836;&#33609;&#31295;, &#20294;&#26159;&#8230;&#26368;&#32066; review &#24517;&#38920;&#36996;&#26159;&#20320;)</span></p></li><li><p><strong><span>&#26412;&#27231;&#20778;&#20808; </span></strong><span>(&#30446;&#21069;&#38283;&#28304;&#29256;&#26412;)</span></p></li><li><p><strong><span>&#25903;&#25588;&#36960;&#31471;&#26381;&#21209; </span></strong><span>(&#38500;&#20102; Google Workspace &#20043;&#22806;, Microsoft 365 &#20063;&#22312;&#26410;&#20358;&#38928;&#35336;&#30340;&#25903;&#25588;&#21015;&#34920;&#19978;)</span></p></li></ul><p><span>&#37325;&#40670;&#30340;&#37325;&#40670;: </span><strong><span>&#23601;&#26159;&#21487;&#20197;&#30452;&#25509;&#20197;&#12300;&#20154;&#30340;&#35222;&#35282;&#12301;&#36628;&#21161;&#24037;&#20316;&#26085;&#24120;&#12290;</span></strong></p><h3><strong><span>&#23526;&#38555;&#36305;&#36215;&#20358;</span></strong></h3><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#31777;&#21934;&#25910;&#20449;,&#19968;&#27425;&#36328;&#24115;&#34399;&#24409;&#25972;:</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vikd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vikd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 424w, https://substackcdn.com/image/fetch/$s_!vikd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 848w, https://substackcdn.com/image/fetch/$s_!vikd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 1272w, https://substackcdn.com/image/fetch/$s_!vikd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vikd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png" width="1456" height="873" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:627238,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/210854570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vikd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 424w, https://substackcdn.com/image/fetch/$s_!vikd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 848w, https://substackcdn.com/image/fetch/$s_!vikd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 1272w, https://substackcdn.com/image/fetch/$s_!vikd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45d02b7f-5f70-4819-a6b3-35c4b7102818_2880x1726.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#25563;&#20491; agent &#21487;&#20197;&#32380;&#32396;&#20351;&#29992;:</span></strong><span> &#22914;&#26524;&#20320;&#30340; Antigravity &#38989;&#24230;&#29992;&#23436;&#20102;,&#24819;&#25913;&#29992; Claude / Codex / Copilot / &#20854;&#20182; Agent CLI,&#20063;&#27794;&#21839;&#38988;&#12290;</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wV7v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wV7v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 424w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 848w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wV7v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png" width="1456" height="875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:875,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:711675,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/210854570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wV7v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 424w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 848w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!wV7v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64295fe-e9c6-42cb-a61c-ff6c8f905285_2850x1712.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Sonnet 5 &#30495;&#30340;&#24456;&#24859;&#36879;&#36942; Artifact &#20316;&#24409;&#25972;&#22577;&#34920;!</span></p><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#36899;&#20449;&#35041;&#30340;&#38468;&#20214;&#12289;&#36899;&#32080;&#12289;Shared Google Drive &#37117;&#35712;&#24471;&#25026;:</span></strong><span> &#33287;&#23458;&#25142;&#20358;&#24448;&#30340;&#20449;&#20214;&#20839;&#23481;&#35041;,&#26377;&#26178;&#26371;&#26377;&#38468;&#20214;&#12289;&#36899;&#32080;,&#29978;&#33267;&#19968;&#20491; Shared Google Drive&#12290;&#29694;&#22312;&#36879;&#36942; Agent &#21487;&#20197;&#30452;&#25509;&#35712;&#25026;&#36889;&#20123;&#20839;&#23481;,&#20006;&#25552;&#20379;&#27770;&#31574;&#36628;&#21161;&#36039;&#35338;&#12290;&#36889;&#26159;&#19981;&#26159;&#24456;&#26834;&#21602;!</span></p><h3><strong><span>&#35430;&#35430;&#30475;</span></strong></h3><p><span>&#36245;&#24555;&#20358;&#35430;&#35430;&#30475;! </span><strong><span>gwx</span></strong><span> &#8212; </span><a href="https://github.com/jimmyliao/gwx"><span>https://github.com/jimmyliao/gwx</span></a></p><p>&#22914;&#26524;&#26377;&#33288;&#36259;&#20102;&#35299;&#24590;&#40636;&#36628;&#21161;&#20320;/&#20320;&#30340;&#22296;&#38538;&#23566;&#20837;&#36889;&#39006;&#23526;&#29992;&#26381;&#21209;,&#27489;&#36814;&#30452;&#25509;<a href="https://memo.jimmyliao.net/about"><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#32879;&#32097;&#25105;</span></a>&#12290;</p><p></p><div><hr></div><p>English version below &#128071;</p><h3><strong><span>One inbox is never enough</span></strong></h3><p><span>I&#8217;m guessing you have more than one email address too. Most of the time you keep a Gmail window open and switch profiles to check them &#8212; or lean on some app to pull them all together.</span></p><p><span>But when 80% of your screen time is spent inside an agent (an agent CLI, in my case), and a client or a colleague mails you, opening yet another app is just friction.</span></p><h3><strong><span>&#8220;Aren&#8217;t there tools for this already?&#8221;</span></strong></h3><p><span>You&#8217;ll say: Antigravity CLI (formerly Gemini-CLI) can install the Google Workspace extension to read mail, or there&#8217;s the </span><code>gws</code><span> CLI released this March, or Claude can reach Google via MCP.</span></p><p><span>Sure &#8212; but what if the mailbox you need to check isn&#8217;t just one? Or Claude is suddenly down one day, or you hit an Antigravity quota limit and have to wait five hours? I really can&#8217;t let a third-party agent get in the way of my daily work.</span></p><p><span>So I gave my own setup &#8212; my whole workflow &#8212; a small upgrade: </span><strong><span>gwx</span></strong><span>.</span></p><h3><strong><span>What gwx is: gws, leveled up</span></strong></h3><p><span>Hang on &#8212; anyone who follows this space has heard of </span><strong><span>gws (the Google Workspace CLI)</span></strong><span> from this March. So what&#8217;s the difference?</span></p><p><span>Think of gwx as gws, leveled up:</span></p><ul><li><p><strong><span>Multiple accounts</span></strong></p></li><li><p><strong><span>Access governance</span></strong><span> &#8212; an agent can read your mail and draft replies for you, but&#8230; the final review has to be you</span></p></li><li><p><strong><span>Local-first</span></strong><span> (in the current open-source version)</span></p></li><li><p><strong><span>Remote-capable</span></strong><span> (besides Google Workspace, Microsoft 365 is on the planned roadmap)</span></p></li></ul><p><span>The point of points: </span><strong><span>it augments your actual workday from a human&#8217;s point of view.</span></strong></p><h3><strong><span>Seeing it run</span></strong></h3><p><strong><span>Just reading mail &#8212; one sweep across accounts:</span></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T31z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T31z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 424w, https://substackcdn.com/image/fetch/$s_!T31z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 848w, https://substackcdn.com/image/fetch/$s_!T31z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 1272w, https://substackcdn.com/image/fetch/$s_!T31z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T31z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png" width="1456" height="873" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:873,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:627238,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/210854570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T31z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 424w, https://substackcdn.com/image/fetch/$s_!T31z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 848w, https://substackcdn.com/image/fetch/$s_!T31z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 1272w, https://substackcdn.com/image/fetch/$s_!T31z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3a4d0eb-87e9-41f7-9599-b7e0dce27db0_2880x1726.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong><span>Switch agents and keep going:</span></strong><span> ran out of Antigravity quota and want to move to Claude / Codex / Copilot / another agent CLI? No problem.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DOO1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DOO1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 424w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 848w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DOO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png" width="1456" height="875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:875,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:711675,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/210854570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DOO1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 424w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 848w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 1272w, https://substackcdn.com/image/fetch/$s_!DOO1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0aa5a9b4-c3e6-438f-ae8c-a0504f79eb6a_2850x1712.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><span>Sonnet 5 really loves turning things into an Artifact report!</span></p><p><strong><span>It even reads the attachments, links, and Shared Google Drive inside a mail:</span></strong><span> in back-and-forth with clients, an email often carries attachments, links, even a Shared Google Drive. Now the agent can read straight through them and hand back decision-support. Pretty great, right?</span></p><h3><strong><span>Give it a try</span></strong></h3><p><span>Go give it a try! gwx &#8212; </span><a href="https://github.com/jimmyliao/gwx"><span>https://github.com/jimmyliao/gwx</span></a></p><p><span>If you&#8217;re interested in bringing something like this to you or your team, feel free to </span><a href="https://memo.jimmyliao.net/about"><span data-color="#0000ff" style="color: rgb(0, 0, 255);">reach out</span></a><span>.</span></p><p></p><p></p><p> </p><p></p><p> </p>]]></content:encoded></item><item><title><![CDATA[Antigravity CLI 週報：v1.1.5 ～ v1.1.7 最新 Release 解析]]></title><description><![CDATA[Submitted via OpenAB Publisher Workflow]]></description><link>https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-2c8</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-2c8</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sun, 26 Jul 2026 17:26:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Antigravity CLI Digest: v1.1.5 ~ v1.1.7 Latest Release Analysis</h1><p>Antigravity CLI has recently received a series of major updates! From custom Agents now supporting a brand-new Markdown format, dynamically adjustable AI reasoning depth (<code>/effort</code>), to Headless mode and cross-platform bug fixes, here is a breakdown of this week's most notable highlights and details.</p><div><hr></div><h2>&#127775; Highlights</h2><ul><li><p>&#129302; <strong>Custom Agents Support Markdown Format (v1.1.6)</strong>: You can now define Agent roles using <code>agent.md</code> files (with YAML frontmatter and H1 titles), granularly controlling permissions such as <code>subagent</code> and <code>commandExecutionPolicy</code>.</p></li><li><p>&#9881;&#65039; <strong>AI Reasoning Depth Control `/effort` (v1.1.5)</strong>: Added <code>/effort</code> command and <code>--effort</code> CLI flag, allowing users to dynamically switch between fast responses and deep reasoning.</p></li><li><p>&#128203; <strong>Windows CJK Clipboard Fix (v1.1.7)</strong>: Resolved clipboard encoding issues when copying CJK (Chinese, Japanese, Korean) characters on Windows.</p></li><li><p>&#128272; <strong>Enhanced Permission Prompts for Compound Shell Commands (v1.1.7)</strong>: Compound shell commands requiring authorization now display in full, ensuring total auditing safety.</p></li><li><p>&#128269; <strong>Global Code Search `/codesearch` (v1.1.6)</strong>: Search results are now streamed asynchronously in real time, supporting cancellation at any time with <code>Esc</code>.</p></li></ul><div><hr></div><h2>&#128204; Changelog Breakdown</h2><h3>&#128640; v1.1.7 (Bug Fixes &amp; Security Improvements)</h3><ul><li><p><strong>Security &amp; Permissions</strong>: Full command view now displayed during permission prompts for compound shell commands.</p></li><li><p><strong>Plugin Logic</strong>: Fixed an issue where disabled plugins continued executing hooks and interfering with file editing tools.</p></li><li><p><strong>Character Compatibility</strong>: Fixed clipboard text corruption when copying CJK characters on Windows platforms.</p></li><li><p><strong>OAuth Specs</strong>: Relaxed OAuth issuer verification for non-standard MCP providers (e.g., Salesforce, Atlassian) and completed the <code>refresh_token</code> authorization flow.</p></li></ul><h3>&#128640; v1.1.6 (Custom Agents &amp; UX Improvements)</h3><ul><li><p><strong>Markdown Agent</strong>: Introduced standard <code>agent.md</code> format for defining custom agents with <code>commandExecutionPolicy</code> controls.</p></li><li><p><strong>Command History Copying</strong>: Supports numeric parameter <code>/copy &lt;n&gt;</code> to copy the n-th previous AI response.</p></li><li><p><strong>Search Experience</strong>: <code>/codesearch</code> upgraded to asynchronous streaming with real-time counters, cancelable with <code>Esc</code>.</p></li></ul><h3>&#128640; v1.1.5 (Reasoning Mode &amp; Architecture Refactoring)</h3><ul><li><p><strong>Reasoning Effort</strong>: Added <code>/effort</code> command and status bar badge to quickly adjust deep reasoning levels.</p></li><li><p><strong>Background Task Stability</strong>: Background tasks isolated with independent lifecycles so individual task failures do not affect the main conversation.</p></li></ul><div><hr></div><blockquote><p>&#128161; Official CHANGELOG: https://github.com/google-antigravity/antigravity-cli/blob/main/CHANGELOG.md</p></blockquote><p>#Antigravity #AntigravityCLI #AI #Changelog #DevRel #OpenAB</p>]]></content:encoded></item><item><title><![CDATA[Antigravity CLI 週報：v1.1.5 ～ v1.1.7 最新 Release 解析]]></title><description><![CDATA[Submitted via OpenAB Publisher Workflow]]></description><link>https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-2e9</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-2e9</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sun, 26 Jul 2026 16:43:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Antigravity CLI Digest: v1.1.5 ~ v1.1.7 Latest Release Analysis</h1><p>Antigravity CLI has recently received a series of major updates! From custom Agents now supporting a brand-new Markdown format, dynamically adjustable AI reasoning depth (<code>/effort</code>), to Headless mode and cross-platform bug fixes, here is a breakdown of this week's most notable highlights and details.</p><div><hr></div><h2>&#127775; Highlights</h2><ul><li><p>&#129302; <strong>Custom Agents Support Markdown Format (v1.1.6)</strong>: You can now define Agent roles using <code>agent.md</code> files (with YAML frontmatter and H1 titles), granularly controlling permissions such as <code>subagent</code> and <code>commandExecutionPolicy</code>.</p></li><li><p>&#9881;&#65039; <strong>AI Reasoning Depth Control `/effort` (v1.1.5)</strong>: Added <code>/effort</code> command and <code>--effort</code> CLI flag, allowing users to dynamically switch between fast responses and deep reasoning.</p></li><li><p>&#128203; <strong>Windows CJK Clipboard Fix (v1.1.7)</strong>: Resolved clipboard encoding issues when copying CJK (Chinese, Japanese, Korean) characters on Windows.</p></li><li><p>&#128272; <strong>Enhanced Permission Prompts for Compound Shell Commands (v1.1.7)</strong>: Compound shell commands requiring authorization now display in full, ensuring total auditing safety.</p></li><li><p>&#128269; <strong>Global Code Search `/codesearch` (v1.1.6)</strong>: Search results are now streamed asynchronously in real time, supporting cancellation at any time with <code>Esc</code>.</p></li></ul><div><hr></div><h2>&#128204; Changelog Breakdown</h2><h3>&#128640; v1.1.7 (Bug Fixes &amp; Security Improvements)</h3><ul><li><p><strong>Security &amp; Permissions</strong>: Full command view now displayed during permission prompts for compound shell commands.</p></li><li><p><strong>Plugin Logic</strong>: Fixed an issue where disabled plugins continued executing hooks and interfering with file editing tools.</p></li><li><p><strong>Character Compatibility</strong>: Fixed clipboard text corruption when copying CJK characters on Windows platforms.</p></li><li><p><strong>OAuth Specs</strong>: Relaxed OAuth issuer verification for non-standard MCP providers (e.g., Salesforce, Atlassian) and completed the <code>refresh_token</code> authorization flow.</p></li></ul><h3>&#128640; v1.1.6 (Custom Agents &amp; UX Improvements)</h3><ul><li><p><strong>Markdown Agent</strong>: Introduced standard <code>agent.md</code> format for defining custom agents with <code>commandExecutionPolicy</code> controls.</p></li><li><p><strong>Command History Copying</strong>: Supports numeric parameter <code>/copy &lt;n&gt;</code> to copy the n-th previous AI response.</p></li><li><p><strong>Search Experience</strong>: <code>/codesearch</code> upgraded to asynchronous streaming with real-time counters, cancelable with <code>Esc</code>.</p></li></ul><h3>&#128640; v1.1.5 (Reasoning Mode &amp; Architecture Refactoring)</h3><ul><li><p><strong>Reasoning Effort</strong>: Added <code>/effort</code> command and status bar badge to quickly adjust deep reasoning levels.</p></li><li><p><strong>Background Task Stability</strong>: Background tasks isolated with independent lifecycles so individual task failures do not affect the main conversation.</p></li></ul><div><hr></div><blockquote><p>&#128161; Official CHANGELOG: https://github.com/google-antigravity/antigravity-cli/blob/main/CHANGELOG.md</p></blockquote><p>#Antigravity #AntigravityCLI #AI #Changelog #DevRel #OpenAB</p>]]></content:encoded></item><item><title><![CDATA[Antigravity CLI 週報：v1.1.5 ～ v1.1.7 最新 Release 解析]]></title><description><![CDATA[Submitted via OpenAB Publisher Workflow]]></description><link>https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sun, 26 Jul 2026 16:40:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Antigravity CLI Digest: v1.1.5 ~ v1.1.7 Latest Release Analysis</h1><p>Antigravity CLI has recently received a series of major updates! From custom Agents now supporting a brand-new Markdown format, dynamically adjustable AI reasoning depth (<code>/effort</code>), to Headless mode and cross-platform bug fixes, here is a breakdown of this week's most notable highlights and details.</p><div><hr></div><h2>&#127775; Highlights</h2><ul><li><p>&#129302; <strong>Custom Agents Support Markdown Format (v1.1.6)</strong>: You can now define Agent roles using <code>agent.md</code> files (with YAML frontmatter and H1 titles), granularly controlling permissions such as <code>subagent</code> and <code>commandExecutionPolicy</code>.</p></li><li><p>&#9881;&#65039; <strong>AI Reasoning Depth Control `/effort` (v1.1.5)</strong>: Added <code>/effort</code> command and <code>--effort</code> CLI flag, allowing users to dynamically switch between fast responses and deep reasoning.</p></li><li><p>&#128203; <strong>Windows CJK Clipboard Fix (v1.1.7)</strong>: Resolved clipboard encoding issues when copying CJK (Chinese, Japanese, Korean) characters on Windows.</p></li><li><p>&#128272; <strong>Enhanced Permission Prompts for Compound Shell Commands (v1.1.7)</strong>: Compound shell commands requiring authorization now display in full, ensuring total auditing safety.</p></li><li><p>&#128269; <strong>Global Code Search `/codesearch` (v1.1.6)</strong>: Search results are now streamed asynchronously in real time, supporting cancellation at any time with <code>Esc</code>.</p></li></ul><div><hr></div><h2>&#128204; Changelog Breakdown</h2><h3>&#128640; v1.1.7 (Bug Fixes &amp; Security Improvements)</h3><ul><li><p><strong>Security &amp; Permissions</strong>: Full command view now displayed during permission prompts for compound shell commands.</p></li><li><p><strong>Plugin Logic</strong>: Fixed an issue where disabled plugins continued executing hooks and interfering with file editing tools.</p></li><li><p><strong>Character Compatibility</strong>: Fixed clipboard text corruption when copying CJK characters on Windows platforms.</p></li><li><p><strong>OAuth Specs</strong>: Relaxed OAuth issuer verification for non-standard MCP providers (e.g., Salesforce, Atlassian) and completed the <code>refresh_token</code> authorization flow.</p></li></ul><h3>&#128640; v1.1.6 (Custom Agents &amp; UX Improvements)</h3><ul><li><p><strong>Markdown Agent</strong>: Introduced standard <code>agent.md</code> format for defining custom agents with <code>commandExecutionPolicy</code> controls.</p></li><li><p><strong>Command History Copying</strong>: Supports numeric parameter <code>/copy &lt;n&gt;</code> to copy the n-th previous AI response.</p></li><li><p><strong>Search Experience</strong>: <code>/codesearch</code> upgraded to asynchronous streaming with real-time counters, cancelable with <code>Esc</code>.</p></li></ul><h3>&#128640; v1.1.5 (Reasoning Mode &amp; Architecture Refactoring)</h3><ul><li><p><strong>Reasoning Effort</strong>: Added <code>/effort</code> command and status bar badge to quickly adjust deep reasoning levels.</p></li><li><p><strong>Background Task Stability</strong>: Background tasks isolated with independent lifecycles so individual task failures do not affect the main conversation.</p></li></ul><div><hr></div><blockquote><p>&#128161; Official CHANGELOG: https://github.com/google-antigravity/antigravity-cli/blob/main/CHANGELOG.md</p></blockquote><p>#Antigravity #AntigravityCLI #AI #Changelog #DevRel #OpenAB</p>]]></content:encoded></item><item><title><![CDATA[Antigravity CLI 週報：v1.1.5 ～ v1.1.7 最新 Release 解析]]></title><description><![CDATA[Submitted via OpenAB Publisher Workflow]]></description><link>https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-e5e</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/antigravity-cli-v115-v117-release-e5e</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sun, 26 Jul 2026 16:33:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Antigravity CLI &#36913;&#22577;&#65306;v1.1.5 &#65374; v1.1.7 &#26368;&#26032; Release &#35299;&#26512;</h1><h1>Antigravity CLI Digest: v1.1.5 ~ v1.1.7 Latest Release Analysis</h1><p>Antigravity CLI &#36817;&#26399;&#36814;&#20358;&#20102;&#19968;&#31995;&#21015;&#37325;&#30917;&#26356;&#26032;&#65281;&#24478;&#33258;&#35330; Agent &#25903;&#25588;&#20840;&#26032;&#30340; Markdown &#26684;&#24335;&#12289;&#21487;&#21205;&#24907;&#35519;&#25972;&#30340; AI &#24605;&#32771;&#28145;&#24230; (<code>/effort</code>)&#65292;&#21040;&#28961;&#38957;&#27169;&#24335;&#65288;Headless mode&#65289;&#33287;&#36328;&#24179;&#21488;&#20462;&#24489;&#65292;&#20197;&#19979;&#28858;&#24744;&#25972;&#29702;&#26412;&#36913;&#26368;&#20540;&#24471;&#38364;&#27880;&#30340;&#26680;&#24515;&#20142;&#40670;&#33287;&#32048;&#31680;&#12290;</p><p>Antigravity CLI has recently received a series of major updates! From custom Agents now supporting a brand-new Markdown format, dynamically adjustable AI reasoning depth (<code>/effort</code>), to Headless mode and cross-platform bug fixes, here is a breakdown of this week's most notable highlights and details.</p><div><hr></div><h2>&#127775; &#26680;&#24515;&#20142;&#40670;&#36895;&#35261; (Highlights)</h2><ul><li><p>&#129302; <strong>&#33258;&#35330; Agent &#27491;&#24335;&#25903;&#25588; Markdown &#26684;&#24335; (v1.1.6)</strong>&#65306;&#29694;&#22312;&#33021;&#30452;&#25509;&#20351;&#29992; <code>agent.md</code> &#35373;&#23450;&#27284;&#65288;&#25645;&#37197; YAML frontmatter &#33287; H1 &#27161;&#38988;&#65289;&#23450;&#32681; Agent &#35282;&#33394;&#65292;&#20006;&#32048;&#32251;&#35519;&#25511; <code>subagent</code>&#12289;<code>commandExecutionPolicy</code> &#31561;&#27402;&#38480;&#12290;</p></li><li><p>&#129302; <strong>Custom Agents Support Markdown Format (v1.1.6)</strong>: You can now define Agent roles using <code>agent.md</code> files (with YAML frontmatter and H1 titles), granularly controlling permissions such as <code>subagent</code> and <code>commandExecutionPolicy</code>.</p></li></ul><ul><li><p>&#9881;&#65039; <strong>AI &#25512;&#29702;&#28145;&#24230;&#25511;&#21046; `/effort` (v1.1.5)</strong>&#65306;&#26032;&#22686; <code>/effort</code> &#25351;&#20196;&#33287; <code>--effort</code> &#21855;&#21205;&#21443;&#25976;&#65292;&#35731;&#20351;&#29992;&#32773;&#33021;&#22312;&#12300;&#24555;&#36895;&#22238;&#25033;&#12301;&#33287;&#12300;&#28145;&#24230;&#24605;&#32771; (Reasoning Depth)&#12301;&#20043;&#38291;&#21205;&#24907;&#20999;&#25563;&#12290;</p></li><li><p>&#9881;&#65039; <strong>AI Reasoning Depth Control `/effort` (v1.1.5)</strong>: Added <code>/effort</code> command and <code>--effort</code> CLI flag, allowing users to dynamically switch between fast responses and deep reasoning.</p></li></ul><ul><li><p>&#128203; <strong>Windows CJK &#20098;&#30908;&#24505;&#24213;&#20462;&#24489; (v1.1.7)</strong>&#65306;&#35299;&#27770;&#22312; Windows &#31995;&#32113;&#19978;&#35079;&#35069;&#20013;&#26085;&#38867;&#65288;CJK&#65289;&#31561;&#38750; ASCII &#25991;&#23383;&#26178;&#30340;&#21098;&#36028;&#31807;&#20098;&#30908;&#21839;&#38988;&#12290;</p></li><li><p>&#128203; <strong>Windows CJK Clipboard Fix (v1.1.7)</strong>: Resolved clipboard encoding issues when copying CJK (Chinese, Japanese, Korean) characters on Windows.</p></li></ul><ul><li><p>&#128272; <strong>&#35079;&#21512; Shell &#25351;&#20196;&#27402;&#38480;&#25552;&#31034;&#20778;&#21270; (v1.1.7)</strong>&#65306;&#30070;&#35079;&#21512;&#25351;&#20196;&#21253;&#21547;&#38656;&#25480;&#27402;&#30340;&#37096;&#20998;&#26178;&#65292;&#31995;&#32113;&#26371;&#23436;&#25972;&#23637;&#31034;&#25972;&#26781;&#25351;&#20196;&#65292;&#30906;&#20445;&#23529;&#26680;&#23433;&#20840;&#28961;&#27515;&#35282;&#12290;</p></li><li><p>&#128272; <strong>Enhanced Permission Prompts for Compound Shell Commands (v1.1.7)</strong>: Compound shell commands requiring authorization now display in full, ensuring total auditing safety.</p></li></ul><ul><li><p>&#128269; <strong>&#20840;&#22495;&#31243;&#24335;&#30908;&#25628;&#23563; `/codesearch` (v1.1.6)</strong>&#65306;&#25628;&#23563;&#32080;&#26524;&#25913;&#28858;&#21363;&#26178;&#38750;&#21516;&#27493;&#20018;&#27969;&#39023;&#31034;&#65292;&#25903;&#25588;&#25353; <code>Esc</code> &#38568;&#26178;&#25171;&#26039;&#25628;&#23563;&#12290;</p></li><li><p>&#128269; <strong>Global Code Search `/codesearch` (v1.1.6)</strong>: Search results are now streamed asynchronously in real time, supporting cancellation at any time with <code>Esc</code>.</p></li></ul><div><hr></div><h2>&#128204; &#29256;&#26412;&#35443;&#32048;&#23653;&#27511; (Changelog Breakdown)</h2><h3>&#128640; v1.1.7 (&#26368;&#26032;&#20462;&#24489;&#33287;&#23433;&#20840;&#24615;&#20778;&#21270; / Bug Fixes &amp; Security Improvements)</h3><ul><li><p><strong>&#23433;&#20840;&#33287;&#27402;&#38480; / Security &amp; Permissions</strong>&#65306;&#35079;&#21512; Shell &#25351;&#20196;&#27402;&#38480;&#35426;&#21839;&#25913;&#28858;&#23436;&#25972;&#21576;&#29694;&#20840;&#35980;&#12290;</p></li><li><p>Full command view now displayed during permission prompts for compound shell commands.</p></li><li><p><strong>Plugin &#37007;&#36655; / Plugin Logic</strong>&#65306;&#20462;&#24489;&#24050;&#20572;&#29992;&#30340; Plugin &#20173;&#26371;&#22519;&#34892; Hook &#20006;&#24178;&#25854;&#27284;&#26696;&#32232;&#36655;&#24037;&#20855;&#30340;&#32570;&#38519;&#12290;</p></li><li><p>Fixed an issue where disabled plugins continued executing hooks and interfering with file editing tools.</p></li><li><p><strong>&#23383;&#20803;&#30456;&#23481;&#24615; / Character Compatibility</strong>&#65306;&#20462;&#24489; Windows &#24179;&#21488;&#19978;&#35079;&#35069; CJK&#65288;&#20013;&#26085;&#38867;&#65289;&#25991;&#23383;&#26178;&#21098;&#36028;&#31807;&#20986;&#29694;&#20098;&#30908;&#30340;&#29694;&#35937;&#12290;</p></li><li><p>Fixed clipboard text corruption when copying CJK characters on Windows platforms.</p></li><li><p><strong>OAuth &#35215;&#31684; / OAuth Specs</strong>&#65306;&#25918;&#23532;&#23565;&#38750;&#27161;&#28310; MCP &#26381;&#21209;&#21830;&#65288;&#22914; Salesforce, Atlassian&#65289;&#30340; OAuth &#30332;&#34892;&#32773;&#39511;&#35657;&#20006;&#35036;&#40778; <code>refresh_token</code> &#25480;&#27402;&#27969;&#31243;&#12290;</p></li><li><p>Relaxed OAuth issuer verification for non-standard MCP providers (e.g., Salesforce, Atlassian) and completed the <code>refresh_token</code> authorization flow.</p></li></ul><h3>&#128640; v1.1.6 (&#33258;&#35330; Agent &#33287;&#20114;&#21205;&#39636;&#39511; / Custom Agents &amp; UX Improvements)</h3><ul><li><p><strong>Markdown Agent</strong>&#65306;&#38283;&#21855;&#20197; <code>agent.md</code> &#23450;&#32681; Agent &#30340;&#26032;&#27161;&#28310;&#65292;&#25903;&#25588;&#35373;&#23450; <code>commandExecutionPolicy</code> &#31561;&#34892;&#28858;&#12290;</p></li><li><p>Introduced standard <code>agent.md</code> format for defining custom agents with <code>commandExecutionPolicy</code> controls.</p></li><li><p><strong>&#27511;&#21490;&#35079;&#35069; `/copy &lt;n&gt;` / Command History Copying</strong>: &#25903;&#25588;&#24118;&#20837;&#25976;&#23383;&#21443;&#25976;&#65292;&#35079;&#35069;&#20498;&#25976;&#31532; n &#27425;&#30340; AI &#22238;&#25033;&#12290;</p></li><li><p>Supports numeric parameter <code>/copy &lt;n&gt;</code> to copy the n-th previous AI response.</p></li><li><p><strong>&#25628;&#23563;&#39636;&#39511; / Search Experience</strong>: <code>/codesearch</code> &#25913;&#28858;&#38750;&#21516;&#27493;&#20018;&#27969;&#39023;&#31034;&#33287;&#21363;&#26178;&#35336;&#25976;&#65292;&#25353; <code>Esc</code> &#21487;&#38568;&#26178;&#25171;&#26039;&#25628;&#23563;&#12290;</p></li><li><p><code>/codesearch</code> upgraded to asynchronous streaming with real-time counters, cancelable with <code>Esc</code>.</p></li></ul><h3>&#128640; v1.1.5 (&#24605;&#32771;&#27169;&#24335; <code>/effort</code> &#33287;&#32972;&#26223;&#26550;&#27083;&#37325;&#27083; / Reasoning Mode &amp; Architecture Refactoring)</h3><ul><li><p><strong>Reasoning Effort</strong>: &#25552;&#20379; <code>/effort</code> &#33287;&#29376;&#24907;&#27396; Badge&#65292;&#24555;&#36895;&#35519;&#25972;&#28145;&#24230;&#25512;&#29702;&#31561;&#32026;&#12290;</p></li><li><p>Added <code>/effort</code> command and status bar badge to quickly adjust deep reasoning levels.</p></li><li><p><strong>&#32972;&#26223;&#20219;&#21209;&#31337;&#23450;&#24615; / Background Task Stability</strong>: &#32972;&#26223;&#20219;&#21209;&#25505;&#29992;&#29544;&#31435;&#29983;&#21629;&#36913;&#26399;&#31649;&#29702;&#65292;&#21934;&#19968;&#20219;&#21209;&#30064;&#24120;&#19981;&#24433;&#38911;&#20027;&#23565;&#35441;&#12290;</p></li><li><p>Background tasks isolated with independent lifecycles so individual task failures do not affect the main conversation.</p></li></ul><div><hr></div><blockquote><p>&#128161; &#23448;&#26041; CHANGELOG &#21407;&#25991; / Official CHANGELOG: https://github.com/google-antigravity/antigravity-cli/blob/main/CHANGELOG.md</p></blockquote><p>#Antigravity #AntigravityCLI #AI #Changelog #DevRel #OpenAB #Bilingual</p>]]></content:encoded></item><item><title><![CDATA[用 OpenAB 寫了一個 LINE OA Chatbot]]></title><description><![CDATA[Time to use AI to create AI.]]></description><link>https://memo.jimmyliao.net/p/openab-line-oa-chatbot</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/openab-line-oa-chatbot</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sat, 18 Jul 2026 12:57:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#20170;&#22825;&#38506;&#23567;&#23401;, &#36319;&#23478;&#20154;&#32842;&#22825;&#30340;&#31354;&#27284;, &#38918;&#25163;&#25226;&#20043;&#21069;&#24171; Discord bot &#37096;&#32626; OpenAB &#30340;&#32147;&#39511;, &#29992;&#20358;&#20018;&#25509;&#33258;&#24049;&#30340; LINE &#23448;&#26041;&#24115;&#34399; =&gt; &#35722;&#25104;&#19968;&#38587;&#26371;&#33258;&#21205;&#22238;&#31572;&#30340; chatbot.</p><h2>&#36889;&#38587; LINE OA &#25552;&#20379;&#20102;&#20160;&#40636;&#65311;</h2><p>&#21152;&#20837;&#25105;&#30340; LINE &#23448;&#26041;&#24115;&#34399;&#20043;&#24460;, &#30452;&#25509;&#29992;&#21839;&#30340;:</p><ul><li><p>&#12300;&#26377;&#27794;&#26377;&#35611; Agent &#27835;&#29702;&#30340;&#25991;&#31456;?&#12301;</p></li><li><p>&#12300;Antigravity &#21040;&#24213;&#26159;&#20160;&#40636;?&#12301;</p></li><li><p>&#12300;&#37941;&#20154;&#36093;&#23531;&#20102;&#20160;&#40636;?&#12301;</p></li></ul><p>&#24213;&#19979;&#20063;&#38918;&#25163;&#21152;&#19978;&#22294;&#25991;&#36984;&#21934;:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kKpu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kKpu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 424w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 848w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kKpu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png" width="326" height="579.5555555555555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1280,&quot;width&quot;:720,&quot;resizeWidth&quot;:326,&quot;bytes&quot;:416157,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207547572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kKpu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 424w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 848w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 1272w, https://substackcdn.com/image/fetch/$s_!kKpu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1adcb7f4-77bc-423e-a5fe-54a16d786885_720x1280.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>By the way, &#36889;&#26159;&#29992;&#38283;&#28304;&#26694;&#26550; <strong>OpenAB</strong> &#37096;&#32626;&#30340;, &#38500;&#20102;&#24171; AI &#35373;&#23450;&#33457;&#36027;&#19978;&#38480;(spending limit), &#20063;&#21152;&#20102;&#19968;&#20123;&#23433;&#20840;&#35373;&#35336;, &#20043;&#24460;&#25033;&#35442;&#36996;&#26371;&#36879;&#36942;&#36889;&#22871;&#27231;&#21046;&#29609;&#40670;&#26356;&#22909;&#29609;&#30340;&#26481;&#35199;.</p><h2>&#21152;&#20837; LINE &#22909;&#21451;,&#20320;&#26371;&#24471;&#21040;&#20160;&#40636;</h2><ol><li><p><strong>&#25991;&#31456;&#30340; AI &#25628;&#23563;&#24341;&#25806;</strong></p></li><li><p><strong>&#35506;&#31243;&#31532;&#19968;&#25163;&#28040;&#24687;</strong>: &#35506;&#31243;&#38283;&#25918;&#26178;, LINE &#22909;&#21451;&#26368;&#20808;&#25910;&#21040;&#36890;&#30693;</p></li><li><p>&#21512;&#20316;&#20839;&#35347;&#12289;AI &#23566;&#20837;&#35413;&#20272;, &#21487;&#30041;&#35328;, &#25110;&#26159; <a href="https://forms.gle/Md1mNVy7xHmNAmTp7">https://forms.gle/Md1mNVy7xHmNAmTp7</a> </p></li></ol><p></p><h3>&#21152;&#20837; LINE &#22909;&#21451; =&gt; <a href="https://line.me/R/ti/p/@rls8912s">https://line.me/R/ti/p/@rls8912s</a></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LofX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LofX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 424w, https://substackcdn.com/image/fetch/$s_!LofX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 848w, https://substackcdn.com/image/fetch/$s_!LofX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 1272w, https://substackcdn.com/image/fetch/$s_!LofX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LofX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png" width="370" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:370,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:708,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207547572?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LofX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 424w, https://substackcdn.com/image/fetch/$s_!LofX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 848w, https://substackcdn.com/image/fetch/$s_!LofX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 1272w, https://substackcdn.com/image/fetch/$s_!LofX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f65783a-eb55-43f7-a22d-55927aed79b6_370x370.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>PS: &#25509;&#19979;&#20358;&#26368;&#26032;&#30340;&#26381;&#21209;, &#26371;&#36879;&#36942; LINE &#25552;&#21069;&#30332;&#24067;&#33287;&#35430;&#29992;&#27231;&#26371;.</p><div><hr></div><p><strong>&#36889;&#31687;&#25552;&#21040;&#30340; Agent &#27835;&#29702;&#19977;&#37096;&#26354;&#22312;&#36889;&#35041;:</strong></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;06366ec6-b276-492b-a361-57f79e2de9b6&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;&#30070; Agent &#38283;&#22987;&#24444;&#27492;&#20132;&#35527;&#65292;&#35504;&#22312;&#31649; (&#27835;&#29702;)&#65311;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:88881865,&quot;name&quot;:&quot;JimmyLiao(NET)&quot;,&quot;bio&quot;:&quot;https://jimmyliao.net&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-10T13:07:13.268Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!mrzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://memo.jimmyliao.net/p/agent&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206441491,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1575804,&quot;publication_name&quot;:&quot;JimmyLiao's memo (memo.jimmyliao.net)&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Gemini CLI on your terminal...everywhere]]></title><description><![CDATA[make create-alias]]></description><link>https://memo.jimmyliao.net/p/gemini-cli-on-your-terminaleverywhere</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/gemini-cli-on-your-terminaleverywhere</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 15 Jul 2026 14:32:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7ZGi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p></p><p>make create-alias</p><p></p><pre><code>scripts/create_alias.sh
This script will add the following alias to your shell configuration file (/Users/xxx/.zshrc):
  alias gemini='node /Users/xxx/gemini-cli/scripts/start.js'

Do you want to proceed? (y/n) y

Alias added to /Users/xxx/.zshrc.
Please run 'source /Users/xx/.zshrc' or open a new terminal to use the 'gemini' command.

</code></pre><p></p><pre><code>source ~/.zshrc</code></pre><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7ZGi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7ZGi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 424w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 848w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 1272w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7ZGi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png" width="1456" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125581,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7ZGi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 424w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 848w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 1272w, https://substackcdn.com/image/fetch/$s_!7ZGi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16770677-67cc-4079-9ba9-4b2b62f9b356_1494x590.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>npx https://github.com/google-gemini/gemini-cli</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XM_i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XM_i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 424w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 848w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 1272w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XM_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png" width="1456" height="222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:222,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47465,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XM_i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 424w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 848w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 1272w, https://substackcdn.com/image/fetch/$s_!XM_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c22b41a-13fb-4ccf-9f7f-d37d7ba42de7_1598x244.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uOW_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uOW_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 424w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 848w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uOW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png" width="1456" height="1104" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1104,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207620,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uOW_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 424w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 848w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!uOW_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c745656-c096-4884-8985-1f0c387705d6_1644x1246.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!joPH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!joPH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 424w, https://substackcdn.com/image/fetch/$s_!joPH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 848w, https://substackcdn.com/image/fetch/$s_!joPH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 1272w, https://substackcdn.com/image/fetch/$s_!joPH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!joPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png" width="1456" height="445" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:445,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61090,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!joPH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 424w, https://substackcdn.com/image/fetch/$s_!joPH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 848w, https://substackcdn.com/image/fetch/$s_!joPH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 1272w, https://substackcdn.com/image/fetch/$s_!joPH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd7cc77a-bae2-411b-9447-05ab11a018cf_1510x462.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FpCG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FpCG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 424w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 848w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 1272w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FpCG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png" width="1456" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/609bbd38-9a03-445b-b6af-157485debf25_1728x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FpCG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 424w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 848w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 1272w, https://substackcdn.com/image/fetch/$s_!FpCG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F609bbd38-9a03-445b-b6af-157485debf25_1728x954.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C09j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C09j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 424w, https://substackcdn.com/image/fetch/$s_!C09j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 848w, https://substackcdn.com/image/fetch/$s_!C09j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 1272w, https://substackcdn.com/image/fetch/$s_!C09j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C09j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png" width="1106" height="234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:234,&quot;width&quot;:1106,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C09j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 424w, https://substackcdn.com/image/fetch/$s_!C09j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 848w, https://substackcdn.com/image/fetch/$s_!C09j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 1272w, https://substackcdn.com/image/fetch/$s_!C09j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F935ba3fd-925b-4062-9fe7-6c2d8776a47d_1106x234.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ii9y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ii9y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 424w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 848w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ii9y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png" width="1456" height="910" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:910,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170415,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/166823708?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ii9y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 424w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 848w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!Ii9y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cdbc41e-10be-4c78-9964-42f13a60d8f2_1642x1026.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Deploying Gemma3 with Ollama on Google Cloud Run: A Step-by-Step Guide]]></title><description><![CDATA[# Deploying Gemma3 with Ollama on Google Cloud Run: A Step-by-Step Guide]]></description><link>https://memo.jimmyliao.net/p/deploying-gemma3-with-ollama-on-google-3e5</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/deploying-gemma3-with-ollama-on-google-3e5</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 15 Jul 2026 14:31:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong># Deploying Gemma3 with Ollama on Google Cloud Run: A Step-by-Step Guide</strong></p><p><em>*Published: April 30, 2025*</em></p><p><strong>## Introduction</strong></p><p>In the rapidly evolving landscape of AI and machine learning, having access to powerful language models is becoming increasingly important for developers and businesses alike. Google's Gemma3 represents a significant advancement in open-source language models, offering impressive capabilities while being more accessible than many alternatives.</p><p>In this blog post, I'll walk you through the process of deploying Gemma3 using Ollama on Google Cloud Run with GPU acceleration. This setup provides a scalable, cost-effective way to run inference with this powerful model without managing complex infrastructure.</p><p><strong>## Why Gemma3 and Ollama on Cloud Run?</strong></p><p>Before diving into the technical details, let's understand why this combination is particularly compelling:</p><p>1. <strong>**Gemma3**</strong> is Google's latest open-source language model, offering strong performance while being more efficient than many alternatives.</p><p>2. <strong>**Ollama**</strong> provides a streamlined way to run language models locally or in containers, with a simple API.</p><p>3. <strong>**Google Cloud Run**</strong> offers serverless container execution with GPU support, allowing you to pay only for what you use.</p><p>This combination gives you:</p><p>- Cost-effective inference (pay-per-use)</p><p>- Scalable architecture</p><p>- Simple deployment and management</p><p>- GPU acceleration for faster responses</p><p><strong>## Prerequisites</strong></p><p>Before we begin, make sure you have:</p><p>- A Google Cloud Platform account with billing enabled</p><p>- Google Cloud SDK (version 519.0.0) installed</p><p>- Docker installed on your local machine</p><p>- A Hugging Face account with an API token</p><p>- Basic familiarity with command-line tools</p><p><strong>## Project Setup</strong></p><p>I've created a GitHub repository with all the necessary files to streamline this process. The repository includes:</p><p>1. A <strong>**Dockerfile**</strong> that builds on the official Ollama image</p><p>2. A <strong>**Makefile**</strong> to automate the deployment process</p><p>3. Configuration files and documentation</p><p>Let's go through the deployment process step by step.</p><p><strong>## Step 1: Clone the Repository and Configure Environment</strong></p><p>First, clone the repository and set up your environment variables:</p><p>```bash</p><p>git clone https://github.com/yourusername/cloudrun-ollama-gemma3.git</p><p>cd cloudrun-ollama-gemma3</p><p>cp .env.example .env</p><p>```</p><p>Edit the `.env` file to include your specific configuration:</p><p>```</p><p>HUGGINGFACE_TOKEN=your_huggingface_token</p><p>PROJECT_ID=your_gcp_project_id</p><p>REGION=your_preferred_region</p><p>SERVICE_NAME=your_service_name</p><p>REPO_NAME=your_repository_name</p><p>```</p><p><strong>## Step 2: Initialize the Project</strong></p><p>Run the initialization command to set up your environment:</p><p>```bash</p><p>make init</p><p>```</p><p>This command checks for required tools and creates a virtual environment using `uv`.</p><p><strong>## Step 3: Install Dependencies and Configure GCP</strong></p><p>Next, install the necessary dependencies and configure your Google Cloud environment:</p><p>```bash</p><p>make install</p><p>```</p><p>This command:</p><p>- Updates the virtual environment with required packages</p><p>- Ensures Google Cloud SDK version 519.0.0 is installed</p><p>- Configures your GCP project and region</p><p>- Creates an Artifact Registry repository if it doesn't exist</p><p>- Sets up Docker authentication for Artifact Registry</p><p><strong>## Step 4: Build the Docker Image</strong></p><p>Now, build the Docker image using Google Cloud Build:</p><p>```bash</p><p>make cloud-build</p><p>```</p><p>This process might take 10-15 minutes as it builds the container image and pulls the Gemma3 model. The default machine type for the build is `e2-highcpu-32`, but you can specify a different one:</p><p>```bash</p><p>make cloud-build MACHINE_TYPE=e2-highcpu-16</p><p>```</p><p><strong>## Step 5: Deploy to Cloud Run</strong></p><p>Finally, deploy the service to Cloud Run with GPU support:</p><p>```bash</p><p>make cloudrun-deploy</p><p>```</p><p>You can customize the GPU type and timeout settings:</p><p>```bash</p><p>make cloudrun-deploy GPU_TYPE=nvidia-l4 TIMEOUT=180</p><p>```</p><p>The deployment process will create a Cloud Run service with:</p><p>- GPU acceleration (default: nvidia-l4)</p><p>- 8 CPUs and 32GB memory</p><p>- Configured timeout (default: 120 seconds)</p><p>- Private access (no unauthenticated requests)</p><p><strong>## Testing Your Deployment</strong></p><p>Once deployed, you can test your service using curl. Since we've configured the service with `--no-allow-unauthenticated`, you'll need to include an authentication token:</p><p>```bash</p><p><em># Get an ID token for authentication</em></p><p>TOKEN=$(gcloud auth print-identity-token)</p><p><em># Send a request to the service</em></p><p>curl -X POST \</p><p> -H "Authorization: Bearer $TOKEN" \</p><p>-H "Content-Type: application/json" \</p><p> -d '{"model": "gemma3:4b", "prompt": "Write a poem about Gemma3"}' \</p><p>https://YOUR_SERVICE_NAME-HASH.a.run.app/api/generate</p><p>```</p><p>If you've configured your service to allow unauthenticated access, you can use a simpler command:</p><p>```bash</p><p>curl https://YOUR_SERVICE_NAME-HASH.a.run.app/api/generate -d '{</p><p> "model": "gemma3:4b",</p><p> "prompt": "Write a poem about Gemma3"</p><p>}'</p><p>```</p><p><strong>## Understanding the Costs</strong></p><p>One of the advantages of Cloud Run is its pay-per-use pricing model. You'll be charged for:</p><p>1. <strong>**Compute time**</strong>: When your service is processing requests</p><p>2. <strong>**GPU usage**</strong>: For the time the GPU is attached to your service</p><p>3. <strong>**Container storage**</strong>: For storing your container image</p><p>For development and testing purposes, costs are typically manageable. For production workloads, consider setting appropriate concurrency and instance limits.</p><p><strong>## Advanced Configuration</strong></p><p>The Makefile and deployment configuration offer several customization options:</p><p>- <strong>**Machine types**</strong> for Cloud Build: e2-highcpu-32 (default), e2-highcpu-16, e2-standard-8</p><p>- <strong>**GPU types**</strong> for Cloud Run: nvidia-l4 (default), nvidia-t4, nvidia-a100</p><p>- <strong>**Timeout**</strong> settings: Default is 120 seconds, but can be increased for longer inference tasks</p><p>- <strong>**Memory and CPU**</strong> allocation: Configured for optimal performance with Gemma3</p><p><strong>## Conclusion</strong></p><p>Deploying Gemma3 with Ollama on Google Cloud Run provides a powerful, scalable solution for AI inference. The combination of Google's efficient language model, Ollama's streamlined container, and Cloud Run's serverless infrastructure creates a flexible system that can adapt to your needs.</p><p>The automated deployment process using the Makefile simplifies what would otherwise be a complex setup, allowing you to focus on building applications that leverage the power of Gemma3 rather than managing infrastructure.</p><p>Whether you're building a chatbot, content generation tool, or any other application that requires natural language processing, this setup provides a solid foundation to build upon.</p><p><strong>## Next Steps</strong></p><p>Consider exploring:</p><p>- Integration with your existing applications</p><p>- Fine-tuning Gemma3 for your specific use case</p><p>- Setting up monitoring and logging for your deployment</p><p>- Implementing a caching layer to improve performance and reduce costs</p><p>Happy building!</p><p>---</p><p><em>*This blog post is part of our series on deploying AI models to production. For more tutorials and guides, visit our website or follow us on social media.*</em></p>]]></content:encoded></item><item><title><![CDATA[Google Codelabs Has No API — So I Built an AI Librarian For It]]></title><description><![CDATA[Create a small assistant to help find Google Codelabs courses.]]></description><link>https://memo.jimmyliao.net/p/google-codelabs-has-no-api-so-i-built</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/google-codelabs-has-no-api-so-i-built</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 15 Jul 2026 06:16:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1KmS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://codelabs.developers.google.com">Google Codelabs</a> is one of the best hands-on learning resources for Google technology &#8212; over 1000 step-by-step tutorials spanning Cloud, AI, Android, and the Web. There&#8217;s just one problem: <strong>there&#8217;s no official API</strong>. Finding something relevant means scrolling through a keyword search box and hoping.</p><p>So I spent a weekend building <strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Codelabs Leapie</span></strong> &#8212; an AI librarian you can just talk to, that picks the right codelabs out of the entire catalog for you.</p><h2>&#128073; <strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Codelabs Leapie</span><span> </span><a href="https://codelabs.leapdesign.ai/">https://codelabs.leapdesign.ai/</a></strong></h2><p></p><h2>Auto-updates and crawls the latest courses daily</h2><p>The welcome screen turns recent updates into a &#8220;news headlines&#8221; style summary</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1KmS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1KmS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 424w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 848w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 1272w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1KmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png" width="420" height="760" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:760,&quot;width&quot;:420,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:290634,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207119237?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1KmS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 424w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 848w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 1272w, https://substackcdn.com/image/fetch/$s_!1KmS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90d178e5-1e62-430c-a106-bc5f8c30d73c_420x760.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>Example: ask it &#8220;what should I learn after Google I/O?&#8221;</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rEUb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rEUb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 424w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 848w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rEUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png" width="1456" height="1435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1435,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2124148,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207119237?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rEUb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 424w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 848w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!rEUb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb584e7f6-6547-4b88-89f8-b2d30d71c5d4_1500x1478.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Try it out</h2><p>If you&#8217;ve ever wondered what hidden gems are sitting in the Codelabs catalog, go chat with Leapie directly:</p><h2>&#128073; <strong><span>Codelabs Leapie</span> </strong></h2><h2><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">=&gt; </span><a href="https://codelabs.leapdesign.ai/"><span data-color="#0000ff" style="color: rgb(0, 0, 255);">https://codelabs.leapdesign.ai/</span></a></strong></h2><p></p><p>Would love for you to try it out &#8212; and report a bug if you find one.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Leapie: 幫助你找到感興趣的 Codelabs]]></title><description><![CDATA[&#23531;&#20491;&#23567;&#21161;&#25163;&#24171;&#24537;&#25214; Google Codelabs &#35506;&#31243;]]></description><link>https://memo.jimmyliao.net/p/leapie-codelabs</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/leapie-codelabs</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 15 Jul 2026 02:27:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!56yK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Google Codelabs&#65288;`<a href="http://codelabs.developers.google.com">codelabs.developers.google.com</a>`&#65289;&#26159;&#24456;&#26834;&#30340;&#23416;&#32722;&#36039;&#28304;&#65292;&#22823;&#37096;&#20998; Google &#30340;&#25216;&#34899;&#37117;&#21487;&#20197;&#22312;&#19978;&#38754;&#25214;&#21040;&#23565;&#25033;&#30340; lab&#12290;&#20294;&#26159;&#21482;&#33021;&#38752;&#32178;&#31449;&#19978;&#38364;&#37749;&#23383;&#25628;&#23563;&#65292;&#25152;&#20197;&#20570;&#20102;&#19968;&#20491;&#23567;&#23560;&#26696;&#65306;<strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Codelabs Leapie</span></strong>&#65292;&#36879;&#36942;&#23565;&#35441;&#24171;&#20320;&#25361;&#24863;&#33288;&#36259;&#30340;&#20027;&#38988;&#65292;&#30446;&#37636;&#36996;&#26371;&#27599;&#22825;&#33258;&#21205;&#26356;&#26032;&#12290;</p><h2><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">https://codelabs.leapdesign.ai/</span></strong></h2><h2>&#21487;&#20197;&#27599;&#22825;&#33258;&#21205;&#26356;&#26032;&#33287;&#29228;&#21462;&#26368;&#26032;&#35506;&#31243;</h2><p>&#27489;&#36814;&#38913;&#20381;&#29031;&#26356;&#26032;&#26085;&#26399;&#20570;&#25104;&#12300;&#26032;&#32862;&#38957;&#26781;&#12301;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!56yK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!56yK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 424w, https://substackcdn.com/image/fetch/$s_!56yK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 848w, https://substackcdn.com/image/fetch/$s_!56yK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!56yK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!56yK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png" width="1456" height="1427" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1427,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2154246,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207104112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!56yK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 424w, https://substackcdn.com/image/fetch/$s_!56yK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 848w, https://substackcdn.com/image/fetch/$s_!56yK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 1272w, https://substackcdn.com/image/fetch/$s_!56yK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d86cdd-e620-42bf-bbdb-c93487146ffa_1512x1482.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>&#31684;&#20363;&#65306;&#21839;&#23427;&#12300;Google I/O &#20043;&#24460;&#35442;&#23416;&#20160;&#40636;&#12301;</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q5rS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q5rS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 424w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 848w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q5rS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png" width="1456" height="1435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1435,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2124148,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/207104112?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q5rS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 424w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 848w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 1272w, https://substackcdn.com/image/fetch/$s_!q5rS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F394a8ad9-1e11-4ac3-a776-5279416fb4bc_1500x1478.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><h2>Try!</h2><p>&#22914;&#26524;&#20320;&#20063;&#24120;&#24120;&#19981;&#30693;&#36947; Codelabs &#30446;&#37636;&#35041;&#26377;&#20160;&#40636;&#23542;&#34255;&#65292;&#27489;&#36814;&#30452;&#25509;&#21435;&#36319; Leapie &#32842;&#32842;&#65306;</p><h2>=&gt; <a href="https://codelabs.leapdesign.ai/">https://codelabs.leapdesign.ai/</a></h2><p>&#27489;&#36814;&#35430;&#29992;&#36319; report bug if found&#12290;</p>]]></content:encoded></item><item><title><![CDATA[當 Agent 開始彼此交談，誰在管 (治理)？]]></title><description><![CDATA[&#19968;&#20491;&#38364;&#26044; Agent &#27835;&#29702;&#23652;&#30340;&#19977;&#37096;&#26354;&#65292;&#20197;&#19968;&#20491;&#30495;&#30340;&#33021;&#36305;&#30340; reference implementation &#28858;&#20027;&#35282;&#65306;5 &#20491; AI persona &#33258;&#20027;&#31038;&#20132;&#65292;&#20294;&#27599;&#19968;&#27493;&#37117;&#38656;&#36942;&#19968;&#36947; Declarative Safety Gate&#12290;]]></description><link>https://memo.jimmyliao.net/p/agent</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/agent</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Fri, 10 Jul 2026 13:07:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mrzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mrzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mrzh!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mrzh!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif" width="1050" height="683" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:683,&quot;width&quot;:1050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7960107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206441491?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mrzh!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!mrzh!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e702ee-d962-4ef3-ad66-e231229330a6_1050x683.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#128214; &#19977;&#37096;&#26354;</h2><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">[Declarative Safety Gate] &#21069;&#35328;&#65306;&#30070; Agent &#38283;&#22987;&#24444;&#27492;&#20132;&#35527;&#65292;&#35504;&#22312;&#31649;&#65311;</span></strong> &#8212; &#28858;&#20160;&#40636;&#26159;&#29694;&#22312;</p><p>&#24478; &#40845;&#34662;/Moltbook &#30340;&#22833;&#25511;&#35611;&#36215;&#65306;&#30070; delegation &#24478;&#12300;&#20154; &#8594; &#19968;&#20491; agent&#12301;&#35722;&#25104;&#12300;&#20154; &#8594; &#19968;&#25903;&#38538;&#20237; &#8594; agent &#20114;&#25512;&#12301;&#65292;&#32570;&#30340;&#37027;&#19968;&#23652;&#23601;&#26159;&#27835;&#29702;&#12290;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4914aeb6-695e-4e2d-88b7-7355d36e171c&quot;,&quot;caption&quot;:&quot;&#26377;&#20154;&#33995;&#20102;&#19968;&#20491;&#31038;&#32676;&#32178;&#31449;&#65292;&#38263;&#24471;&#20687; Reddit&#65292;&#20294;&#26377;&#19968;&#20491;&#21069;&#25552;&#65306;&#20154;&#39006;&#19981;&#20934;&#30332;&#25991;&#65292;&#21482;&#26377; AI bot &#33021;&#30332;&#12290;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;[Declarative Safety Gate] &#21069;&#35328;&#65306;&#30070; Agent &#38283;&#22987;&#24444;&#27492;&#20132;&#35527;&#65292;&#35504;&#22312;&#31649;&#65311;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:88881865,&quot;name&quot;:&quot;JimmyLiao(NET)&quot;,&quot;bio&quot;:&quot;https://jimmyliao.net&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-10T12:22:00.374Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3ka9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://memo.jimmyliao.net/p/declarative-safety-gate-agent&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206435338,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1575804,&quot;publication_name&quot;:&quot;JimmyLiao's memo (memo.jimmyliao.net)&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p></p><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">[Declarative Safety Gate] Part 1&#65306;The Gate is the Protagonist &#37027;&#36947;&#38296;&#25165;&#26159;&#20027;&#35282;</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);"> &#8212; Harness&#65306;&#38296;&#38263;&#24590;&#27171;</span></p><p>&#25226; policy &#23459;&#21578;&#25104; spec&#12289;&#25499;&#22312; agent loop &#30340; pre-tool-call &#38364;&#31680;&#19978;&#65307;&#29992; The Mixer &#30495;&#23526; turn-log &#36208;&#26597; `DOWNGRADE` &#33287; `ASK_USER`&#65292;&#20006;&#23565;&#40778;&#26032;&#21152;&#22369; MGF &#30340;&#27770;&#31574;&#35422;&#24409;&#12290;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;82f83365-3892-44a0-8dfe-bb40410042c6&quot;,&quot;caption&quot;:&quot;&#21069;&#35328;&#35527;&#30340;&#26159;&#12300;&#28858;&#20160;&#40636;&#26159;&#29694;&#22312;&#12301;&#65306;&#27599;&#19968;&#22871; orchestration framework &#37117;&#25226; agent &#30041;&#22312; loop &#35041;&#36305;&#65292;&#21371;&#25226; &#27835;&#29702;&#23652; &#30041;&#32102;&#21508;&#20301;&#35036;&#12290;&#36889;&#31687;&#25105;&#20497;&#30452;&#25509;&#25226;&#36889;&#27573;&#23526;&#20316;&#20986;&#20358;&#12290;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;[Declarative Safety Gate] Part 1&#65306;The Gate is the Protagonist &#37027;&#36947;&#38296;&#25165;&#26159;&#20027;&#35282;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:88881865,&quot;name&quot;:&quot;JimmyLiao(NET)&quot;,&quot;bio&quot;:&quot;https://jimmyliao.net&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-10T12:45:58.228Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!eEwq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://memo.jimmyliao.net/p/declarative-safety-gate-part-1the&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206437007,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1575804,&quot;publication_name&quot;:&quot;JimmyLiao's memo (memo.jimmyliao.net)&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">[Declarative Safety Gate] Part 2&#65306;&#25226;&#37027;&#36947;&#38296;&#20570;&#21040;&#26371;&#33258;&#25105;&#20462;&#27491;</span></strong>, Loop&#65306;&#24478;&#28154;&#36852;&#22280;&#21040;&#33258;&#25105;&#20462;&#27491;</p><p>&#21152;&#19978; maker&#8800;grader &#30340; verifier &#23376;&#20195;&#29702;&#12289;critique &#23531;&#22238;&#35352;&#25014;&#20006;&#27880;&#20837;&#19979;&#19968;&#36650;&#12289;goal/budget &#36000;&#36012;&#20219;&#32066;&#27490;&#12290;&#30495;&#23526; demo&#65306;&#34987;&#25803;&#19979;&#30340;&#21205;&#20316;&#22914;&#20309;&#22312;&#19979;&#19968;&#36650;&#33258;&#24049;&#35722;&#24471;&#26356;&#24471;&#39636;&#12290;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d87d5d50-c8c5-4709-b524-8bcce9269e55&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;[Declarative Safety Gate] Part 2&#65306;&#25226;&#37027;&#36947;&#38296;&#20570;&#21040;&#26371;&#33258;&#25105;&#20462;&#27491;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:88881865,&quot;name&quot;:&quot;JimmyLiao(NET)&quot;,&quot;bio&quot;:&quot;https://jimmyliao.net&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-10T12:59:20.462Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!3rDj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://memo.jimmyliao.net/p/declarative-safety-gate-part-2&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206439801,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:1575804,&quot;publication_name&quot;:&quot;JimmyLiao's memo (memo.jimmyliao.net)&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h2>&#9654;&#65039; &#30452;&#25509;&#30475; demo and Repo</h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">git clone https://github.com/jimmyliao/agentic-social-kit

cd agentic-social-kit

uv run --with google-antigravity python p0_demo.py     # &#26368;&#23567;&#30340; hook/policy &#27231;&#21046;

uv run --with google-antigravity python p1_demo.py     # &#20841;&#20491; persona &#8594; &#19968;&#20491;&#34987;&#27835;&#29702;&#30340;&#31038;&#20132;&#20107;&#20214;

uv run --with google-antigravity python p4_demo.py --reset   # &#26371;&#33258;&#25105;&#20462;&#27491;&#30340; loop&#65288;Part 2&#65289;</code></pre></div><p></p><div><hr></div><p><strong>Jimmy Liao&#65372;LeapDesign Co-Founder / CTO&#65372;Google Developer Expert</strong></p><p><code>#GoogleAntigravity</code> and <code>AgenticArchitect</code></p>]]></content:encoded></item><item><title><![CDATA[[Declarative Safety Gate] Part 2：把那道閘做到會自我修正]]></title><description><![CDATA[GDE&#12298;Agentic Architect&#12299;&#31995;&#21015;&#19977;&#37096;&#26354;&#30340;**&#26368;&#24460;&#19968;&#31687;**&#12290;&#21069;&#35328;&#35611;&#12300;&#28858;&#20160;&#40636;&#26159;&#29694;&#22312;&#12301;&#65292;Part 1 &#25226;&#37027;&#36947; **Declarative Safety Gate** &#20570;&#20986;&#20358;&#32102;&#20320;&#30475;&#12290;&#36889;&#31687;&#35201;&#22238;&#38957;&#35036;&#19978;&#19968;&#20491;&#25105;&#22312; Part 1 &#32080;&#23614;&#33258;&#24049;&#25307;&#35469;&#30340;&#27934; &#8212;&#8212; &#37027;&#36947;&#38296;&#21482;&#21028;&#19968;&#27425;&#65292;&#19981;&#26371;&#23416;&#12290;&#25105;&#20497;&#35201;&#25226;&#23427;&#21319;&#32026;&#25104;&#19968;&#20491;**&#26371;&#33258;&#25105;&#20462;&#27491;&#30340; loop**&#12290;]]></description><link>https://memo.jimmyliao.net/p/declarative-safety-gate-part-2</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/declarative-safety-gate-part-2</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Fri, 10 Jul 2026 12:59:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3rDj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3rDj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3rDj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 424w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 848w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 1272w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3rDj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png" width="760" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:760,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46258,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206439801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3rDj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 424w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 848w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 1272w, https://substackcdn.com/image/fetch/$s_!3rDj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f0f4744-9dfa-4ccd-a16c-9b04b6ef1393_760x470.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>&#20808;&#25215;&#25509; Part 1 &#12290;</p><p>&#25105;&#22312;&#19978;&#19968;&#31687;&#30333;&#32025;&#40657;&#23383;&#23531;&#20102;&#65306;&#36889;&#36947;&#38296;&#26159;&#19968;&#20491;**&#21934;&#27425;&#21028;&#23450;&#65288;single-pass evaluation&#65289;**&#12290;engine &#25552;&#19968;&#20491;&#21205;&#20316;&#12289;&#38296;&#21028; `APPROVE / DENY / &#8595;DOWNGRADE / ASK_USER`&#65292;&#21028;&#23436;&#23601;&#32080;&#26463;&#12290;**&#27794;&#26377;&#29544;&#31435;&#30340; verifier&#12289;&#27794;&#26377;&#33258;&#25105;&#20462;&#27491;&#12290;** &#23427;&#24456;&#26371;&#25226;&#38364;&#65292;&#20294;&#23427;&#19981;&#26371;&#12300;&#19979;&#19968;&#22238;&#21512;&#20570;&#24471;&#26356;&#22909;&#12301;&#12290;</p><p>&#36889;&#23601;&#26159;&#19968;&#36947;**&#28154; loop**&#12290;</p><p>&#28154;&#22312;&#21738;&#65311;&#28154;&#22312;&#23427;&#27794;&#26377;&#26178;&#38291;&#32173;&#24230;&#12290;&#38296;&#25803;&#25481;&#19968;&#20491;&#22826;&#34909;&#30340;&#21205;&#20316;&#65292;&#19979;&#19968;&#22238;&#21512; engine &#36996;&#26159;&#21487;&#33021;&#20877;&#25552;&#19968;&#27425;&#19968;&#27171;&#34909;&#30340;&#26481;&#35199; &#8212;&#8212; &#22240;&#28858;**&#27794;&#26377;&#20154;&#25226;&#12300;&#21083;&#21083;&#37027;&#31558;&#34987;&#25803;&#20102;&#12301;&#36889;&#20214;&#20107;&#35352;&#19979;&#20358;&#12289;&#39221;&#22238;&#21435;**&#12290;&#38296;&#26159;&#20491;&#30433;&#36012;&#30340;&#28023;&#38364;&#65292;&#20294;&#23427;&#27599;&#22825;&#19978;&#29677;&#37117;&#22833;&#25014;&#65292;&#19981;&#35469;&#24471;&#26152;&#22825;&#34987;&#23427;&#36864;&#20214;&#30340;&#37027;&#20491;&#20154;&#12290;</p><p><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Part 1 &#25105;&#35498;&#37027;&#36947;&#38296;&#26159; </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Harness</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#65306;&#35215;&#21063;&#38283;&#28779;&#30340;&#37027;&#20491;&#38364;&#31680;&#12290;&#36889;&#31687;&#35201;&#25226;&#37857;&#38957;&#36681;&#21040; </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Loop</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#65306;&#37027;&#20491;&#19968;&#22280;&#19968;&#22280;&#36305;&#12289;&#27599;&#19968;&#22280;&#37117;&#25226; spec &#36319; harness &#21507;&#36914;&#21435;&#12289;&#32780;&#19988;</span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#30693;&#36947;&#20160;&#40636;&#26178;&#20505;&#35442;&#20572;</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#30340;&#26178;&#38291;&#25511;&#21046;&#27969;&#12290;</span></p><p>&#25152;&#20197;&#36889;&#31687;&#30340;&#27010;&#35201;&#21482;&#26377;&#19968;&#21477;&#65306;</p><p><span data-color="#ff0000" style="color: rgb(255, 0, 0);">&#28154; loop&#65288;&#38296;&#21028;&#19968;&#27425;&#23601;&#32080;&#26463;&#65289;&#8594; &#26371;&#33258;&#25105;&#20462;&#27491;&#30340; loop&#65288;&#25552;&#26696; &#8594; &#38296; &#8594; &#39511;&#35657; &#8594; &#23531;&#22238;&#35352;&#25014; &#8594; &#19979;&#19968;&#36650;&#35722;&#22909;&#65289;&#12290;</span></p><div><hr></div><h2>&#129513; &#35299;&#27861;&#65306;&#35036;&#19977;&#20214;&#26481;&#35199;&#65292;&#19981;&#21205;&#37027;&#36947;&#38296;</h2><p>&#38296;&#36996;&#26159; Part 1 &#37027;&#36947;&#38296;: &#29031;&#27171;&#27599;&#19968;&#27493;&#21028;&#26039;&#12290;&#20294;&#26159;<strong>&#22312;&#23427;&#22806;&#38754;&#21152;&#20102;&#19977;&#22280;</strong>&#65306;</p><ul><li><p><strong>&#19968;&#20491;&#29544;&#31435;&#30340; verifier sub-agent&#65288;maker &#8800; grader&#65289;</strong> </p><ul><li><p>&#25552;&#26696;&#30340;&#20154;&#65292;&#19981;&#33021;&#26159;&#25171;&#20998;&#30340;&#20154;&#12290;</p></li></ul></li><li><p><strong>critique &#23531;&#22238;&#35352;&#25014;&#12289;&#19979;&#19968;&#22238;&#21512;&#27880;&#20837;</strong></p><ul><li><p>&#35731;&#12300;&#19978;&#19968;&#31558;&#23416;&#21040;&#30340;&#20107;&#12301;&#30495;&#30340;&#24433;&#38911;&#12300;&#36889;&#19968;&#31558;&#30340;&#25552;&#26696;&#12301;&#12290;</p></li></ul></li><li><p><strong>goal-conditioned &#32066;&#27490; &#65291; budget cap</strong></p><ul><li><p>loop &#19981;&#26159;&#36305;&#21040;&#22825;&#33618;&#22320;&#32769;&#65292;&#26159;&#36948;&#27161;&#25110;&#29138;&#23436;&#38928;&#31639;&#23601;&#20572;&#65292;&#32780;&#19988;&#20132;&#20195;&#28858;&#20160;&#40636;&#20572;&#12290;</p></li></ul></li></ul><p>Let's break it down.</p><h3>&#129514; maker &#8800; grader &#26159;&#12300;&#32080;&#27083;&#19978;&#12301;&#20570;&#21040;&#30340;&#65292;&#19981;&#26159;&#22068;&#19978;&#35498;</h3><p>`verifier.py` &#35041;&#26159;&#19968;&#20491; `Verifier` Protocol&#65292;&#37197;&#19968;&#20491; deterministic&#12289;offline &#30340; `RuleBasedVerifier`&#65288;&#36319; engine &#37027;&#37002;&#30340; rule-based fallback &#21516;&#19968;&#20491; pattern&#65289;&#12290;&#23427;&#21520;&#19968;&#20491; `Critique` dataclass&#65306;&#19968;&#20491; `score &#8712; [0,1]`&#65292;&#22806;&#21152;&#19968;&#20491; `advise_lighter` &#30340;&#19979;&#19968;&#27493;&#36681;&#21521;&#35338;&#34399;&#12290;</p><p>score &#21482;&#30475;&#19977;&#38917;&#65306;</p><ul><li><p><strong>advance</strong>: &#36889;&#31558;&#26377;&#27794;&#26377;&#30495;&#30340;&#25226; bond &#24448;&#19978;&#25512;&#65311;</p></li><li><p><strong>appropriate</strong>: &#38296;&#30340;&#21028;&#27770;&#23565;&#19981;&#23565;&#24471;&#19978;&#21205;&#20316;&#30340;&#22739;&#21147;&#65311;</p><ul><li><p>`DENY` / `ASK_USER` &#20195;&#34920; engine **&#34909;&#36942;&#38957;**&#20102;&#65288;inapprop<code>iate</code></p></li><li><p>`DOWNGRADE` &#26159;&#27491;&#30906;&#30340; recovery&#65288;app<code>opriate&#65289;</code></p></li><li><p>&#20094;&#28136;&#30340; `APPROVE` &#20063;&#26159; appropriate&#12290;</p></li></ul></li><li><p><strong>quality</strong>: &#36889;&#23565; (agent) &#21512;&#19981;&#21512;&#24471;&#20358;&#12289;&#24375;&#24230;&#21512;&#19981;&#21512;&#29702;&#12290;</p></li></ul><p>&#37325;&#40670;&#19981;&#22312;&#36889;&#19977;&#20491;&#36600;&#22810;&#32880;&#26126;&#65292;&#37325;&#40670;&#22312;**&#23427;&#24590;&#40636;&#36319; engine &#38548;&#38283;&#30340;**&#65306;</p><blockquote><p><strong>verifier &#21482;&#30475;&#24471;&#21040;&#12300;&#32080;&#26524;&#12301;&#8212;&#8212; &#20107;&#20214;&#12289;&#38296;&#30340;&#21028;&#27770;&#12289;&#20114;&#21205;&#21069;&#24460;&#30340; bond&#12290;</strong></p><p><strong>&#36319; engine &#19981;&#20849;&#29992;&#20219;&#20309; state&#12290;&#25152;&#20197; maker &#8800; grader &#26159;&#32080;&#27083;&#24615;&#30340;&#12290;</strong></p></blockquote><p></p><p>&#19968;&#20491;&#26371;&#33258;&#25105;&#25171;&#20998;&#30340;&#31995;&#32113;&#65292;&#27704;&#36960;&#26377; self-validation bias&#12290;&#25226;&#25171;&#20998;&#30340;&#20154;&#24478;&#25552;&#26696;&#30340;&#20154;&#25163;&#19978;&#25286;&#38283;&#12289;&#35731;&#23427;&#21482;&#33021;&#30475; outcome&#12289;&#30475;&#19981;&#21040; engine &#30340;&#20839;&#37096;&#65292;&#36889;&#20491;&#20559;&#35492;&#25165;&#34987;&#32080;&#27083;&#25803;&#25481;&#12290;&#36889;&#27491;&#26159; loop engineering &#35611;&#30340; <strong>Sub-agents&#65288;&#29544;&#31435;&#39511;&#35657;&#65289;</strong>&#12290;</p><h3>&#128190; critique &#23531;&#22238; &#65291; &#27880;&#20837;&#65306;&#35731; loop&#12300;&#35352;&#24471;&#12301;</h3><p>&#20809;&#25171;&#20998;&#27794;&#29992;&#65292;&#20998;&#25976;&#35201;&#33021;&#24433;&#38911;&#19979;&#19968;&#31558;&#12290;</p><p>`memory_store.py` &#22810;&#20102;&#19968;&#24373; durable &#30340; `critiques` SQLite table&#12290;`record_critique(...)` &#25226;&#27599;&#19968;&#31558; critique &#23384;&#36914;&#21435;&#65307;&#28982;&#24460;&#27599;&#20491; actor**&#19979;&#19968;&#22238;&#21512;&#19968;&#38283;&#38957;**&#65292;`latest_critique(actor)` &#25226;&#23427;&#35712;&#22238;&#20358;&#65292;&#25240;&#36914; `EngineInput` &#30340; `adviseLighter` / `critiqueNote` &#8212;&#8212; &#26044;&#26159;&#19979;&#19968;&#20491;&#25552;&#26696;&#23601;**&#33258;&#25105;&#20462;&#27491;**&#20102;&#12290;</p><p>&#32780;&#19988;&#23427;&#26159; <strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">durable</span></strong> &#30340;&#12290;critique &#36319;&#38364;&#20418;&#19968;&#27171;&#23531;&#36914; SQLite&#65292;re-run &#20043;&#24460;&#37027;&#20491;&#36681;&#21521;&#35338;&#34399;&#36996;&#22312;&#65292;&#23601;&#20687;&#29694;&#23526;&#35041;&#30340;&#38364;&#20418;&#65292;&#20320;&#19981;&#26371;&#22240;&#28858;&#30561;&#20102;&#19968;&#35258;&#23601;&#24536;&#35352;&#26152;&#22825;&#36393;&#21040;&#23565;&#26041;&#30340;&#38647;&#12290;</p><h3>&#9201;&#65039; &#32066;&#27490;&#65306;&#26377;&#30446;&#30340;/&#36000;&#36012;&#30340;&#32080;&#26463;&#65292;&#21253;&#25324;&#36948;&#27161; / &#29138;&#23436; / &#21345;&#20303;</h3><p>`orchestrator.py` &#35041;&#30340; `SelfCorrectingSimulation` &#19981;&#26371;&#28961;&#38480;&#36305;&#12290;&#23427;&#36305;&#21040;&#19979;&#38754;**&#21738;&#20491;&#20808;&#30332;&#29983;**&#23601;&#20572;&#65306;</p><ul><li><p>**goal_reached** &#8212;&#8212; &#20219;&#20309;&#19968;&#23565;&#38364;&#20418;&#29228;&#21040; `walk_buddy`&#12290;</p></li><li><p>**budget_engine_calls** &#8212;&#8212; engine &#21628;&#21483;&#19978;&#38480;&#65288;&#38928;&#35373; 60&#65289;&#12290;</p></li><li><p>**stalled** &#8212;&#8212; &#36899;&#32396; 4 &#22238;&#21512;&#27794;&#26377;&#20219;&#20309; approved &#36914;&#23637;&#12290;</p></li><li><p>**budget_turns** &#8212;&#8212; &#22238;&#21512;&#19978;&#38480;&#65288;&#38928;&#35373; 12&#65289;&#12290;</p></li></ul><p>&#20572;&#30340;&#26178;&#20505;&#21360;&#19968;&#34892; `STOP: &lt;kind&gt; &#8212; &lt;detail&gt;`&#12290;&#19968;&#20491;&#36000;&#36012;&#20219;&#30340; loop&#65292;&#19981;&#21482;&#35201;&#26371;&#36305;&#65292;&#35201;**&#26371;&#20572;&#12289;&#32780;&#19988;&#20132;&#20195;&#28858;&#20160;&#40636;&#20572;**&#12290;&#36889;&#23601;&#26159; harness &#20116;&#32173;&#35041; Resource Management &#22312; loop &#23652;&#30340;&#38263;&#30456;&#12290;</p><div><hr></div><h2>&#128269; Traverse&#65306;&#20358;&#30475; self-correction &#23526;&#38555;&#26696;&#20363;</h2><p>&#30452;&#25509;&#30475; `p4_demo_output.txt` &#35041; **Jordan &#8594; Theo** &#36889;&#26781;&#32218;&#12290;</p><p>&#19990;&#30028;&#35373;&#23450;&#65306;&#22580;&#26223;&#22312; `park`&#12289;&#19979;&#21320;&#12289;`maxIntensity = 4`&#12290;Jordan &#26159;&#20491; energy 8&#12289;playful &#30340;&#34909;&#32068;&#12290;</p><p><strong>Turn 1</strong> &#8212;&#8212; Jordan &#25552;&#20102;&#19968;&#20491;&#22823;&#33213;&#30340; `visit`&#65288;intensity 8&#65289;&#12290;&#38296;&#19968;&#27604; `cap_intensity`&#65306;`8 &gt; 4`&#65292;**DENY**&#65292;&#28982;&#24460;&#33258;&#21205; **DOWNGRADED** &#25104; `leave_a_note`&#65288;intensity 2&#65289;&#36942;&#38364;&#12290;&#25509;&#33879; verifier &#36914;&#22580;&#25171;&#20998;&#65306;</p><blockquote><p>`verifier (grader): score=0.87 advance=True appropriate=True | recovered via downgrade to &#8216;leave_a_note&#8217;; bond advanced (+1)`</p></blockquote><p>critique &#24118;&#33879; `advise_lighter=True` &#23531;&#22238;&#35352;&#25014;&#12290;&#32763;&#35695;&#25104;&#20154;&#35441;&#65306;**&#12300;&#20320;&#21083;&#21083;&#34909;&#36942;&#38957;&#34987;&#38477;&#32026;&#25937;&#22238;&#20358;&#20102;&#65292;&#19979;&#19968;&#27425;&#28331;&#21644;&#40670;&#12290;&#12301;**</p><p><strong>Turn 2</strong> &#8212;&#8212; Jordan &#19968;&#38283;&#38957;&#23601;&#25226;&#36889;&#31558; critique &#27880;&#20837;&#20102;&#12290;&#36664;&#20986;&#35041;&#37027;&#34892; `&lt;- in<code>ected critique` &#23601;&#26159;&#23427;&#65306;</code></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">[APPROVE   ] a_jordan -&gt; a_theo: gentle_intro (intensity 3)

    &lt;- injected critique : recovered via downgrade to &#8216;leave_a_note&#8217;; bond advanced (+1)

    proposal rationale  : prior critique advised a gentler move; start light at the park.

    gate                : APPROVE (social_action)</code></pre></div><p>&#27880;&#24847;&#37027;&#21477; rationale &#8212;&#8212; *&#8221;prior critique advised a gentler move&#8221;*&#12290;Jordan &#36889;&#27425;&#19981;&#25552; `visit` &#20102;&#65292;&#25913;&#25552; `gentle_intro`&#65288;intensity 3&#65289;&#12290;</p><p>&#25226;&#20841;&#22238;&#21512;&#25850;&#19968;&#36215;&#65306;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4KGK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4KGK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 424w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 848w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 1272w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4KGK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png" width="884" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:884,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91789,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206439801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4KGK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 424w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 848w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 1272w, https://substackcdn.com/image/fetch/$s_!4KGK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e1995a6-82e9-4bc2-890d-9c61b0b18e9a_884x524.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>**&#19968;&#20491;&#22238;&#21512;&#20043;&#20839;&#65292;self-correction &#30475;&#24471;&#35211;&#12290;** &#19981;&#26159;&#12300;&#36305;&#20102;&#19968;&#30334;&#27425;&#24179;&#22343;&#19979;&#20358;&#35722;&#22909;&#12301;&#37027;&#31278;&#32113;&#35336;&#24335;&#36914;&#27493;&#65292;&#26159;&#36889;&#19968;&#31558;&#65292;&#20320;&#25351;&#24471;&#20986;&#23427;&#28858;&#20160;&#40636;&#27604;&#19978;&#19968;&#31558;&#22909;&#12290;</p><p>&#26377;&#27794;&#26377;&#21453;&#20363;&#65311;&#26377;&#65292;&#32780;&#19988;&#24456;&#37325;&#35201;&#12290;**Quinn &#8594; Sasha** &#36889;&#26781;&#32218;&#65292;Quinn &#26159;&#23475;&#32670;&#12289;energy 2 &#30340;&#23433;&#38748;&#32068;&#65292;&#23427;**&#24478;&#20358;&#27794;&#34909;&#36942;&#38957;** &#8212;&#8212; &#27599;&#19968;&#22238;&#21512;&#37117;&#25552; `gentle_intro`&#12289;&#27599;&#19968;&#22238;&#21512;&#37117; `APPROVE`&#12290;verifier &#20063;&#19968;&#36335;&#32102;&#23427; `score&#8776;0.88`&#12290;</p><blockquote><p>**loop &#21482;&#22312;&#12300;&#38296;&#26366;&#32147;&#22238;&#25512;&#36942;&#12301;&#30340;&#22320;&#26041;&#25913;&#35722;&#34892;&#28858;&#12290;&#27794;&#34987;&#25803;&#36942;&#30340;&#20154;&#65292;&#19981;&#26371;&#34987;&#28961;&#20107;&#29983;&#38750;&#22320;&#12300;&#20462;&#27491;&#12301;&#12290;** &#33258;&#25105;&#20462;&#27491;&#19981;&#26159;&#19968;&#21488;&#21040;&#34389;&#20098;&#25913;&#30340;&#27231;&#22120;&#65292;&#26159;&#19968;&#20491;&#21482;&#22238;&#25033;&#30495;&#23526;&#25705;&#25830;&#30340;&#22238;&#39243;&#12290;</p></blockquote><p>&#36305;&#21040;&#22823;&#32004; turn 9&#65292;Jordan&#8596;Theo &#29228;&#21040; `walk_buddy`&#65292;goal &#36948;&#25104;&#65292;loop &#20572;&#12290;</p><div><hr></div><h2>&#128202; &#36000;&#36012;&#20219;&#30340; loop</h2><p>loop &#36305;&#23436;&#21360;&#30340;&#26368;&#24460;&#19968;&#34892; =&gt; <strong>&#36889;&#19968;&#22280;&#21040;&#24213;&#33457;&#20102;&#22810;&#23569;&#25104;&#26412;</strong></p><blockquote><p>responsible loop engineering: engine_calls=45 verifier_calls=45 gate_evaluations=49 sim_tokens=8100</p></blockquote><p></p><p>How to read:</p><ul><li><p>`engine_calls=45` / `verifier_calls=45` &#8212;&#8212; &#27599;&#19968;&#27493;&#25552;&#26696;&#37197;&#19968;&#27425;&#29544;&#31435; review&#65292;&#19968;&#27604;&#19968;&#12290;</p></li><li><p>`gate_evaluations=49` &#8212;&#8212; &#27604; 45 &#22810; 4&#65292;&#22240;&#28858;**&#38477;&#32026;&#30340;&#37027;&#24190;&#22238;&#21512;&#38296;&#26371;&#36305;&#20841;&#27425;**&#65288;&#20808;&#21028;&#21407;&#26696; DENY&#12289;&#20877;&#21028;&#38477;&#32026;&#29256;&#65289;&#12290;Turn 1 &#26377; 4 &#31558; downgrade&#65292;&#21083;&#22909;&#22810; 4&#12290;</p></li><li><p>`sim_tokens=8100` &#8212;&#8212; &#25552;&#26696; 120 / &#31558;&#12289;review 60 / &#31558;&#30340; mock &#20272;&#31639;&#32047;&#21152;&#12290;</p></li></ul><p>&#28858;&#20160;&#40636;&#35201;&#30693;&#36947;&#36889;&#27573;:</p><blockquote><p> &#22240;&#28858;&#19968;&#20491;&#26371;&#33258;&#25105;&#20462;&#27491;&#30340; loop&#65292;&#27599;&#22810;&#19968;&#22280; verify &#23601;&#26159;&#22810;&#19968;&#20221;&#25104;&#26412;&#12290;**autonomy &#19981;&#26159;&#20813;&#36027;&#30340;</p></blockquote><div><hr></div><h2>&#129517; Spec / Harness / Loop&#65306;&#19977;&#37096;&#26354;</h2><p>&#21040;&#36889;&#35041;&#65292;&#19977;&#31687;&#21083;&#22909;&#25226;&#20027;&#36600;&#30340;&#19977;&#20491;&#39640;&#24230;&#36208;&#23436;&#19968;&#22280;&#65306;</p><ul><li><p>**&#12296;&#21069;&#35328;&#12297;= Why** : &#28858;&#20160;&#40636;&#38656;&#35201;&#36889;&#36947;&#27835;&#29702;&#23652;&#65288;Moltbook &#37027;&#38754; 150 &#33836;&#20493;&#30340;&#37857;&#23376;&#65289;&#12290;</p></li><li><p>**Part 1 = Harness** : &#35215;&#21063;&#22312;&#21738;&#20491;&#38364;&#31680;&#38283;&#28779;&#65288;pre-tool-call &#30340;&#37027;&#36947;&#38296;&#65289;&#12290;</p></li><li><p>**Part 2 = Loop** : &#37027;&#20491;&#19968;&#22280;&#22280;&#36305;&#12289;&#27599;&#19968;&#36650;&#25226; spec &#65291; harness &#21507;&#36914;&#21435;&#12289;&#32780;&#19988;**&#30693;&#36947;&#20309;&#26178;&#35442; STOP** &#30340;&#26178;&#38291;&#25511;&#21046;&#27969;&#12290;</p></li></ul><blockquote><p>**Spec &#26159;&#35215;&#21063;&#26159;&#20160;&#40636;&#12290;</p><p>Harness &#26159;&#35215;&#21063;&#22312;&#21738;&#38283;&#28779;&#12290;</p><p>Loop &#26159;&#36889;&#19968;&#20999;&#19968;&#22280;&#22280;&#36305;&#12289;&#32780;&#19988;&#30693;&#36947;&#20309;&#26178;&#25910;&#25163;&#12290;**</p></blockquote><div><hr></div><h2>&#9654;&#65039; How-to-Run</h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">cd agentic-social-kit &amp;&amp; uv run --with google-antigravity python p4_demo.py --reset</code></pre></div><p>`--reset` &#26371;&#20808;&#28165;&#25481; persisted memory &#20877;&#36305;&#12290;&#25972;&#20491; loop offline&#12289;deterministic&#65292;&#19981;&#29992; API key&#12289;&#19981;&#29992; live model&#12290;</p><p>&#20808;&#35712;&#36889;&#24190;&#20491;&#27284;&#65306;</p><p>- `verifier.py` &#8212;&#8212; &#29544;&#31435; verifier&#65288;`Verifier` Protocol &#65291; `RuleBasedVerifier` &#65291; `Critique`&#65289;&#12290;</p><p>- `p4_demo.py` &#8212;&#8212; &#25226; engine&#65288;maker&#65289;&#36319; verifier&#65288;grader&#65289;&#25509;&#36215;&#20358;&#36305; loop &#30340;&#20837;&#21475;&#12290;</p><p>- `memory_store.py` / `orchestrator.py` &#8212;&#8212; critique &#23531;&#22238; / &#27880;&#20837;&#12289;`SelfCorrectingSimulation` &#30340;&#32066;&#27490; &#65291; metrics&#12290;</p><p>- &#23384;&#22909;&#30340;&#36664;&#20986;&#65306;`p4_demo_output.txt`&#12290;</p><div><hr></div><h2>&#9989; &#32317;&#32080;</h2><ul><li><p>Part 1 &#30340;&#38296;&#26159;**&#21934;&#27425;&#21028;&#23450;**&#65307;&#36889;&#31687;&#25226;&#23427;&#21319;&#32026;&#25104;**&#26371;&#33258;&#25105;&#20462;&#27491;&#30340; loop**&#65306;&#25552;&#26696; &#8594; &#38296; &#8594; &#39511;&#35657; &#8594; &#23531;&#22238;&#35352;&#25014; &#8594; &#19979;&#19968;&#36650;&#35722;&#22909;&#12290;</p></li><li><p>&#21152;&#20102;&#19968;&#20491; **maker &#8800; grader &#30340;&#29544;&#31435; verifier**&#65306;&#23427;&#21482;&#30475; outcome&#12289;&#36319; engine &#19981;&#20849;&#29992; state&#65292;&#25152;&#20197;&#20559;&#35492;&#26159;&#34987;**&#32080;&#27083;**&#25803;&#25481;&#30340;&#65292;&#19981;&#26159;&#22068;&#19978;&#20445;&#35657;&#30340;&#12290;</p></li><li><p>critique **&#23531;&#22238; SQLite&#12289;&#19979;&#19968;&#22238;&#21512;&#27880;&#20837;**&#65306;Jordan &#34987;&#38477;&#32026;&#25937;&#22238;&#24460;&#65292;&#19979;&#19968;&#22238;&#21512;&#20027;&#21205;&#25552;&#28331;&#21644;&#29256; `gentle_intro` &#19968;&#27425;&#36942;&#38364; &#8212;&#8212; rationale &#30452;&#25509;&#23531;&#33879; *prior critique advised a gentler move*&#12290;</p></li><li><p>loop **&#36000;&#36012;&#20219;&#22320;&#20572;**&#65306;`goal_reached` / `budget` / `stalled` &#25799;&#19968;&#65292;&#20006;&#21360;&#20986; `engine_calls / verifier_calls / gate_evaluations / sim_tokens` &#25226;&#25104;&#26412;&#25892;&#38283;&#12290;</p><p></p></li></ul><div><hr></div><h3>&#128279; &#30456;&#38364;&#36039;&#28304;</h3><ul><li><p>Repo&#65306; <strong><a href="https://github.com/jimmyliao/agentic-social-kit">https://github.com/jimmyliao/agentic-social-kit</a></strong>&#65288;`verifier.py` / `p4_demo.py` / `memory_store.py` / `orchestrator.py` / `social_engine.py`&#65289;</p></li><li><p>&#31684;&#20363;&#36664;&#20986;&#65306;`p4_demo_output.txt`</p></li></ul><div><hr></div><p>*Jimmy Liao&#65372;LeapDesign Co-Founder / CTO&#65372;Google Developer Expert*</p><p>`#GoogleAntigravity` `#AgenticArchitect`</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[[Declarative Safety Gate] Part 1：The Gate is the Protagonist 那道閘才是主角]]></title><description><![CDATA[GDE&#12298;Agentic Architect&#12299;&#31995;&#21015;&#19977;&#37096;&#26354;&#20043;&#19968;&#12290;&#19968;&#20491; pattern&#65306;**Declarative Safety Gate**&#65292;&#33995;&#22312; Google Antigravity Agent SDK&#65288;`google.antigravity`&#65289;&#19978;&#65292;&#29992;&#19968;&#20491;&#36305;&#24471;&#36215;&#20358;&#30340; demo&#12300;**The Mixer**&#12301;&#12290;]]></description><link>https://memo.jimmyliao.net/p/declarative-safety-gate-part-1the</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/declarative-safety-gate-part-1the</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Fri, 10 Jul 2026 12:45:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eEwq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eEwq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eEwq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eEwq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png" width="1280" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167317,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206437007?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eEwq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 424w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 848w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 1272w, https://substackcdn.com/image/fetch/$s_!eEwq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfe90e91-9fe1-42ea-8f85-fa3d9292c05f_1280x800.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>&#21069;&#35328;&#35527;&#30340;&#26159;&#12300;&#28858;&#20160;&#40636;&#26159;&#29694;&#22312;&#12301;&#65306;&#27599;&#19968;&#22871; orchestration framework &#37117;&#25226; agent &#30041;&#22312; loop &#35041;&#36305;&#65292;&#21371;&#25226; <strong>&#27835;&#29702;&#23652;</strong> &#30041;&#32102;&#21508;&#20301;&#35036;&#12290;&#36889;&#31687;&#25105;&#20497;&#30452;&#25509;&#25226;&#36889;&#27573;&#23526;&#20316;&#20986;&#20358;&#12290;</p><p>&#20808;&#35611;&#19968;&#20491;&#22580;&#26223;&#12290;</p><p>The Mixer &#26159;&#19968;&#20491;&#24456;&#26222;&#36890;&#30340;&#31038;&#20132;&#31354;&#38291;&#65292;&#35041;&#38754;&#20116;&#20491;&#26377;&#24615;&#26684;&#30340; agent &#8212;&#8212; Jordan&#12289;Riley&#12289;Quinn&#12289;Sasha&#12289;Theo &#8212;&#8212; &#21508;&#33258;&#26377; traits &#36319; energy&#65292;&#34987;&#25918;&#29983;&#21435; <strong>&#33258;&#34892;&#31038;&#20132;/&#20132;&#38555;</strong>&#12290;Jordan &#22806;&#21521;&#12289;energy 8&#65292;&#24819;&#25214;&#20154;&#20094;&#26479;&#65307;Quinn &#23475;&#32670;&#12289;energy 2&#65292;&#25582;&#20491;&#25163;&#23601;&#22909;&#12290;&#27794;&#20154;&#30447;&#33879;&#65292;&#20182;&#20497;&#27599;&#19968;&#22238;&#21512;&#33258;&#24049;&#30475;&#35504;&#22312;&#38468;&#36817;&#12289;&#33258;&#24049;&#27770;&#23450;&#35201;&#38752;&#36817;&#35504;&#12289;&#33258;&#24049;&#25552;&#19968;&#20491;&#20114;&#21205;&#20986;&#20358;&#12290;</p><p>&#36889;&#23601;&#26159; autonomous agent &#30340;&#31684;&#20363;&#12290;</p><p>&#20294;&#36889;&#20063;&#26159;&#23427;&#30340;&#40635;&#29033;&#12290;</p><p>&#40635;&#29033;&#40670;&#26159;&#20160;&#40636;&#21602;&#65311;&#23601;&#26159;&#19968;&#20491;&#33021;&#20027;&#21205;&#36319;&#21029;&#20154;&#25645;&#35441;&#30340; agent&#65292;&#20491;&#24615;&#21487;&#33021;&#23475;&#32670;&#19981;&#20114;&#21205;&#65292;&#20294;&#21487;&#33021;&#30340;&#26159;<strong>&#22826;&#34909;&#12289;&#22826;&#38971;&#32321;&#65292;&#25110;&#22312;&#19968;&#20491;&#26412;&#35442;&#20808;&#21839;&#20154;&#30340;&#22580;&#21512;&#35041;&#33258;&#24049;&#20570;&#20102;&#27770;&#23450;</strong>&#12290;</p><p>&#12300;&#23427;&#24179;&#24120;&#37117;&#24456;&#20054;&#12301;&#20006;&#19981;&#26159;&#19968;&#20491;&#20126;&#27954;&#29238;&#27597;&#21475;&#21563;&#65292;&#26356;&#19981;&#26159;&#19968;&#20491;&#23433;&#20840;&#38296;&#38272;&#21487;&#20197;&#33258;&#20652;&#30496;&#12290;&#22312;&#19968;&#20491; privacy-sensitive&#12289;human-in-the-loop &#30340;&#29986;&#21697;&#35041;&#65292;&#12300;&#24179;&#24120;&#12301;&#36889;&#20841;&#20491;&#23383; ship &#19981;&#20102;&#20219;&#20309;&#26481;&#35199;&#12290;</p><p>&#25152;&#20197;&#36889;&#20491; Sprint &#30495;&#27491;&#30340;&#21839;&#38988;&#19981;&#26159;&#12300;agent &#33021;&#19981;&#33021; autonomous&#12301;&#12290;&#21839;&#38988;&#26159;&#65306;</p><p><span data-color="#0000ff" style="color: rgb(0, 0, 255);">=&gt; </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#24590;&#40636;&#35731;&#23427; autonomous</span></strong></p><p><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">=&gt; &#21516;&#26178;&#22312;&#23427;&#33021;&#20570;&#20160;&#40636;&#36889;&#20214;&#20107;&#19978;&#65292;&#22285;&#19968;&#36947;&#21448;&#30828;&#12289;&#21448;&#30475;&#24471;&#35211;&#30340;&#37002;&#30028;&#65311;</span></strong></p><div><hr></div><h2>&#128678; &#35299;&#27861;&#65306;&#35215;&#21063;&#12300;&#23459;&#21578;&#12301;&#25104;&#38296;&#36947;/&#38272;&#65292;&#32780;&#19981;&#26159;&#23531;&#27515;&#22312;&#31243;&#24335;</h2><p>&#30452;&#35258;&#21453;&#25033;: &#35215;&#21063;&#22622;&#36914; agent &#30340; reasoning&#65306;&#12300;&#35352;&#24471;&#26377;&#31150;&#35980;&#12289;&#21029;&#22826;&#34909;&#12289;&#22823;&#21205;&#20316;&#20808;&#21839;&#19968;&#19979;&#12290;&#12301;</p><p></p><p>&#20294;&#8230; &#23531;&#22312; prompt &#35041;&#30340; guardrail &#26159;&#19968;&#20491; <strong>&#24314;&#35696;</strong>&#65292;&#21040;&#26178;&#36305;&#36215;&#20358;&#30340;&#26178;&#20505;&#65292;&#27169;&#22411;&#39640;&#33288;&#23601;&#29702;&#20320;&#65307;&#23427;&#22312; runtime &#30475;&#19981;&#35211;&#65307;&#32780;&#19988;&#20320; <strong>&#27794;&#27861; audit</strong>&#12290;</p><p>&#32780;<span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#25105;&#20497;&#38656;&#35201;&#30340;&#26159;&#19968;&#20491; </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">control surface</span></strong>&#65292;&#19977;&#20491;&#24615;&#36074;&#32570;&#19968;&#19981;&#21487;&#65306;</p><ul><li><p><strong>Declarative&#65288;&#23459;&#21578;&#24335;&#65289;</strong>&#8212;&#8212; &#35215;&#21063;&#26159;&#19968;&#20221; spec / data&#65292;&#19981;&#26159;&#32399;&#22312; imperative &#25511;&#21046;&#27969;&#35041;&#12290;&#20320;&#33021;&#35712;&#23427;&#12289;diff &#23427;&#12289;&#25913;&#34892;&#28858;&#32780;&#19981;&#29992;&#37325;&#23531;&#37007;&#36655;&#12290;</p></li><li><p><strong>&#22312; control point &#24375;&#21046;&#22519;&#34892;</strong>&#8212;&#8212; &#23427;&#36305;&#22312;&#12300;agent &#27770;&#23450;&#35201;&#21205;&#12301;&#36319;&#12300;&#21205;&#20316;&#30495;&#30340;&#30332;&#29983;&#12301;<strong>&#20043;&#38291;</strong>&#65292;&#27599;&#19968;&#27425;&#12289;deterministic&#65292;&#19981;&#26159;&#12300;&#30475;&#27169;&#22411;&#35352;&#19981;&#35352;&#24471;&#12301;&#12290;</p></li><li><p><strong>&#30475;&#24471;&#35211;</strong>&#8212;&#8212; &#27599;&#20491;&#27770;&#31574;&#37117;&#21520;&#22238;&#19968;&#20491; observable &#30340; verdict&#65292;&#20154;&#12289;log&#12289;dashboard &#37117;&#33021;&#30475;&#12289;&#33021; reason&#12290;</p></li></ul><p>&#36889;&#36947; control surface &#23601;&#26159; <strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">Declarative Safety Gate</span></strong>&#12290;Antigravity SDK &#21083;&#22909;&#25552;&#20379;&#65306;</p><ul><li><p><span data-color="#0000ff" style="color: rgb(0, 0, 255);">lifecycle </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">hooks</span></strong></p></li><li><p><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#23459;&#21578;&#24335; </span><strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">policies</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#12290;</span></p></li></ul><p>&#25226;&#23427;&#24819;&#25104; <strong>&#28023;&#38364;</strong>&#12290;&#26053;&#23458;&#65288;action&#65289;&#35201;&#36942;&#22659;&#65292;&#28023;&#38364;&#19981;&#31649;&#20320;&#24515;&#35041;&#24819;&#20160;&#40636;&#65292;&#23427;&#21482;&#35469;&#25163;&#19978;&#37027;&#26412;&#35215;&#31456;&#65288;policy&#65289;&#65292;&#36880;&#26781;&#27604;&#23565;&#65292;&#33995;&#31456;&#25918;&#34892;&#25110;&#25876;&#19979;&#12290;&#35215;&#31456;&#26159;&#23531;&#27515;&#30340;&#12289;&#20844;&#38283;&#30340;&#12289;&#21487;&#31293;&#26680;&#30340; &#8212;&#8212; &#37027;&#25165;&#26159;&#23433;&#20840;&#12290;</p><h3>&#10060; vs &#9989;&#65306;&#35215;&#21063;&#34255;&#22312; if-else&#65292;&#36996;&#26159;&#23459;&#21578;&#25104; policy</h3><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># &#10060; imperative&#65306;&#35215;&#21063;&#25955;&#33853;&#22312; engine &#21508;&#34389;&#65292;&#30475;&#19981;&#35211;&#12289;&#38627;&#31293;&#26680;

if event.intensity &gt; ctx.maxIntensity:

    # ...&#26576;&#20491;&#35282;&#33853;&#24708;&#24708;&#25803;&#25481;&#65292;&#27794;&#20154;&#30693;&#36947;&#28858;&#20160;&#40636;

    return None

# &#9989; declarative&#65306;&#34892;&#28858;&#21363; spec&#65288;behavior-as-spec&#65289;

gate.deny_when(

    lambda a: a.get(&#8221;intensity&#8221;, 0) &gt; a.get(&#8221;maxIntensity&#8221;, 10),

    name=&#8221;cap_intensity&#8221;,

)

gate.ask_user_when(

    lambda a: bool(a.get(&#8221;requireConsent&#8221;)) and a.get(&#8221;intensity&#8221;, 0) &gt;= 3,

    name=&#8221;require_consent&#8221;,

)

gate.allow_rest()</code></pre></div><p></p><p>&#36889;&#24190;&#34892;&#23601;&#26159; `safety_gate.py` &#30340;&#20840;&#37096;&#31934;&#31070;&#65306;&#27599;&#26781;&#35215;&#21063;&#26159;&#19968;&#20491; `&#21517;&#23383; + &#36848;&#35422;&#65288;predicate&#65289;`&#65292;predicate &#21482;&#30475;&#36889;&#20491; action &#30340; `args`&#12290;SDK &#20839;&#37096;&#25353; specificity &#20998;&#26742; &#8212;&#8212; **Specific Deny &#65310; Specific Ask &#65310; Specific Allow** &#8212;&#8212; &#25152;&#20197;&#19968;&#26781;&#21629;&#20013;&#30340; DENY &#27704;&#36960;&#36111;&#36942; ASK&#65292;ASK &#27704;&#36960;&#36111;&#36942; ALLOW&#12290;&#27794;&#21629;&#20013;&#20219;&#20309;&#35215;&#21063;&#23601;&#36208; `allow_rest()`&#12290;</p><p>&#37325;&#40670;&#26159; <strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">fail-closed</span></strong>&#65306;&#27794;&#26377;&#26126;&#30906;&#25918;&#34892;&#30340;&#65292;&#38928;&#35373;&#19981;&#26159;&#12300;&#25918;&#23427;&#36942;&#21435;&#12301;&#12290;&#31934;&#31070;&#23601;&#26159;: &#23527;&#21487;&#25803;&#37679;&#20063;&#21029;&#25918;&#37679;&#12290;</p><p>&#32780;&#19988;&#36889;&#36947;&#38296;&#21520;&#30340;&#19981;&#26159;&#20108;&#20803;&#30340; yes/no&#65292;&#26159;&#65306;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HteI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HteI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 424w, https://substackcdn.com/image/fetch/$s_!HteI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 848w, https://substackcdn.com/image/fetch/$s_!HteI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 1272w, https://substackcdn.com/image/fetch/$s_!HteI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HteI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png" width="900" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45015,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206437007?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HteI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 424w, https://substackcdn.com/image/fetch/$s_!HteI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 848w, https://substackcdn.com/image/fetch/$s_!HteI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 1272w, https://substackcdn.com/image/fetch/$s_!HteI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1298d20-21cf-465e-b309-c1a95bfbdea5_900x360.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>`APPROVE` &#25918;&#34892;&#12289;`DENY` &#30828;&#25803;&#12289;`&#8595;DOWNGRADE` &#38477;&#32026;&#37325;&#35430;&#12289;`ASK_USER` &#21319;&#32026;&#32102;&#20154;&#12290;&#19979;&#38754;&#30475;&#23427;&#22312; The Mixer &#35041;&#23526;&#38555;&#38263;&#24590;&#27171;&#12290;</p><div><hr></div><h2>&#128269; Demo &#36208;&#26597;&#65306;&#20320;&#22312; The Mixer &#35041;&#23526;&#38555;&#12300;&#30475;&#21040;&#12301;&#20160;&#40636;</h2><p>The Mixer &#36305;&#36215;&#20358;&#65292;&#19990;&#30028;&#35373;&#23450;&#26159;&#36889;&#27171;&#65288;&#21462;&#33258; `turn-log.json`&#65289;&#65306;&#22580;&#26223;&#22312; `lounge`&#12289;&#20621;&#26202;&#12289;`maxIntensity = 4`&#12290;&#20116;&#20491; agent&#65292;&#27599;&#22238;&#21512;&#27599;&#20491;&#20154;&#25552;&#19968;&#20491;&#21205;&#20316;&#65292;**&#27599;&#19968;&#20491;&#21205;&#20316;&#22312;&#22519;&#34892;&#21069;&#37117;&#20808;&#36942;&#38296;**&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xyRY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xyRY!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xyRY!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif" width="1050" height="683" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:683,&quot;width&quot;:1050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7960107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206437007?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xyRY!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!xyRY!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb3dddcc-941c-42e7-b32c-9e0f2492373d_1050x683.gif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>&#20358;&#30475;&#31532;&#19968;&#22238;&#21512;&#65292;&#26368;&#28418;&#20142;&#30340;&#19968;&#31558; &#8212;&#8212; Jordan &#23565; Theo&#65306;</p><p>Jordan &#20170;&#26202; energy &#20840;&#38283;&#65292;engine &#24171;&#20182;&#25552;&#20102;&#20491;&#39640;&#24375;&#24230;&#21205;&#20316;&#65306;**&#12300;&#36319; Theo &#20094;&#26479;&#12301;(`share_a_drink`, intensity 5)**&#12290;&#21839;&#38988;&#26159;&#36889;&#20491;&#19990;&#30028;&#30340;&#19978;&#38480;&#26159; 4&#12290;&#38296;&#19968;&#27604;&#23565; `cap_intensity` &#35215;&#21063; &#8212;&#8212; `intensity(5) &gt; maxIntensity(4)` &#8212;&#8212; **DENY**&#12290;</p><p>&#20294; engine &#27794;&#26377;&#23601;&#27492;&#25918;&#26820;&#65292;&#20063;&#27794;&#30828;&#38358;&#12290;&#23427;&#36864;&#19968;&#27493;&#65292;&#37325;&#26032;&#25552;&#19968;&#20491;&#20302;&#22739;&#21147;&#29256;&#26412;&#65306;**&#12300;&#22312; lounge &#30041;&#24373;&#21451;&#21892;&#30340;&#32025;&#26781;&#12301;(`leave_a_note`, intensity 2)**&#65292;&#20877;&#36942;&#19968;&#27425;&#38296; &#8212;&#8212; &#36889;&#27425; `APPROVE`&#12290;turn-log &#35041;&#36889;&#31558;&#30340; verdict &#26159;&#65306;</p><blockquote><p>`DOWNGRADED (orig DENY) -&gt; APPROVE`</p><p>`original &#8216;share_a_drink&#8217; (intensity 5) denied: Denied by policy &#8216;cap_intensity&#8217;.; downgraded to &#8216;leave_a_note&#8217;.`</p></blockquote><p>&#36889;&#23601;&#26159; <strong>`&#8595;DOWNGRADE`</strong>&#65306;&#34987;&#25803;&#30340;&#39640;&#24375;&#24230;&#21205;&#20316;&#19981;&#26159;&#30452;&#25509;&#28040;&#22833;&#65292;&#32780;&#26159;**&#33258;&#21205;&#36864;&#21270;&#25104;&#19968;&#20491;&#28331;&#21644;&#12289;&#33021;&#36942;&#30340;&#29256;&#26412;**&#12290;graceful degradation&#65292;&#19981;&#26159; dead stop&#12290;</p><blockquote><p><strong>&#34987;&#25803;&#19979;&#19981;&#31561;&#26044;&#38364;&#20418;&#26039;&#25481;&#12290;</strong></p><p><strong>&#38296;&#25803;&#25481;&#30340;&#26159;&#12300;&#22826;&#34909;&#30340;&#37027;&#20491;&#29256;&#26412;&#12301;&#65292;&#19981;&#26159;&#12300;&#36889;&#20491;&#20154;&#24819;&#20132;&#26379;&#21451;&#12301;&#36889;&#20214;&#20107;&#12290;</strong></p></blockquote><p>&#20877;&#30475; `ASK_USER`&#12290;&#22312; P1 &#30340; Scenario C &#35041;&#65292;Quinn&#65288;&#23475;&#32670;&#12289;energy 2&#65289;&#24819;&#23565; Sasha &#25171;&#25307;&#21628;&#65292;&#19990;&#30028;&#35373;&#23450; `requireConsent=True`&#12290;&#21205;&#20316;&#26412;&#36523;&#28331;&#21644;&#65288;intensity 3&#65289;&#65292;&#20294;&#22240;&#28858; `require_consent` &#35215;&#21063;&#21629;&#20013;&#65288;`requireConsent and intensity<code>&gt;= 3`&#38296;&#19981;&#33258;&#24049;&#27770;&#23450; =&gt; </code> &#23427;&#21319;&#32026;&#25104; `ASK_USER`&#65292;&#25226;&#29699;&#19999;&#22238;&#32102;&#20154;&#65306;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">### Scenario C &#8212; reserved subject, consent required

  EVENT:    type=gentle_intro intensity=3

            action=&#8217;Wave hello at the cafe&#8217;

  DECISION: ASK_USER  | User denied tool &#8216;social_action&#8217; (policy &#8216;require_consent&#8217;).</code></pre></div><h3>&#38364;&#20418;&#24590;&#40636;&#38263;&#20986;&#20358;&#65306;bond ladder</h3><p>The Mixer &#19981;&#21482;&#26159;&#36880;&#22238;&#21512;&#36942;&#38296;&#65292;&#23427; <strong>&#26377;&#35352;&#25014;</strong>&#65288;`memory_store.py`&#65292;SQLite&#65292;&#36328; re-run &#25345;&#20037;&#21270;&#65289;&#12290;&#27599;&#19968;&#23565;&#20154;&#20043;&#38291;&#26377;&#20491; bond &#20998;&#25976;&#65292;&#27839;&#33879;&#19968;&#26781;&#38542;&#26799;&#24448;&#19978;&#29228;&#65306;</p><p><code>stranger &#8594; acquaintance &#8594; friendly &#8594; walk_buddy &#8594; close</code></p><p>&#38364;&#37749;&#35215;&#21063;&#22312; `orchestrator.py`&#65306;<strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#21482;&#26377;&#34987; `APPROVE`&#65288;&#25110;&#38477;&#32026;&#24460; approve&#65289;&#30340;&#20114;&#21205;&#25165;&#21152; bond&#12290;</span></strong>`DENY` &#36319; `ASK_USER` &#19981;&#21152;&#20998;&#12290;&#25152;&#20197;&#36305;&#22235;&#22238;&#21512;&#19979;&#20358;&#65292;&#20320;&#26371;&#22312; turn-log &#30475;&#21040; Riley &#36319; Quinn &#24478; `stranger(2)` &#19968;&#36335;&#29228;&#21040; `acquaintance(3)` &#8212;&#8212; &#38364;&#20418;&#26159;<strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#34987;&#38296;&#36942;&#28670;&#36942;&#30340;&#12289;&#20581;&#24247;&#30340;&#20114;&#21205;</span></strong>&#32047;&#31309;&#20986;&#20358;&#30340;&#65292;&#19981;&#26159;&#20098;&#27085;&#25171;&#40165;&#22534;&#20986;&#20358;&#30340;&#12290;</p><p>&#25972;&#20491; demo &#26368;&#29305;&#21029;&#30340;&#19968;&#40670;&#65306;<strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);">&#38296;&#19981;&#21482;&#26159;&#25876;&#25130;&#22120;&#65292;&#23427;&#26159;&#38364;&#20418;&#21697;&#36074;&#30340; filter</span></strong></p><div><hr></div><h2>&#128161; &#28858;&#20160;&#40636;&#37325;&#35201;&#65306;3 point</h2><h3>&#19968;&#65306;Governance-in-the-Loop &#65310; human-in-the-loop (&#22825;&#30495;)</h3><p>&#22825;&#30495;&#30340; HITL &#26159;&#12300;&#27599;&#20491;&#21205;&#20316;&#37117;&#35731;&#20154;&#25353;&#19968;&#19979;&#12301;&#12290;</p><p>&#32893;&#36215;&#20358;&#23433;&#20840;&#65292;&#20854;&#23526;&#26159;&#28797;&#38627; &#8212;&#8212; &#27794;&#20154;&#25353;&#24471;&#23436;&#12290;</p><p>&#38296; (Gateway): <strong>risk-based</strong>&#65306;&#20302;&#39080;&#38570;&#65288;intensity 2 &#30340;&#32025;&#26781;&#65289;&#33258;&#21205; `APPROVE`&#65292;&#39640;&#39080;&#38570;&#65288;&#21629;&#20013; `require_consent`&#65289;&#25165; `ASK_USER` &#21319;&#32026;&#12290;&#36889;&#27491;&#26159; Gartner &#22312;&#35611;&#30340; <strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);">Governance-in-the-Loop</span></strong>&#65306;&#19981;&#26159;&#12300;&#20154;&#30447;&#27599;&#19968;&#27493;&#12301;&#65292;&#26159;&#12300;&#25919;&#31574;&#27770;&#23450;&#21738;&#19968;&#27493;&#35442;&#39514;&#21205;&#20154;&#12301;&#12290;</p><h3>&#20108;&#65306;consent fatigue &#8212;&#8212; &#20160;&#40636;&#37117;&#21839;&#65292;&#31561;&#26044;&#20160;&#40636;&#37117;&#27794;&#21839;</h3><p>&#36889;&#26159;&#22825;&#30495; HITL &#30340; failure mode&#12290;&#22914;&#26524;&#27599;&#20491;&#21205;&#20316;&#37117;&#36339; consent&#65292;&#20154;&#26371;&#21453;&#23556;&#24615;&#22320;&#19968;&#36335;&#25353;&#12300;yes&#12301;&#12290;<strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);">&#21453;&#23556;&#24615;&#30340; yes &#27604;&#27794;&#26377;&#38296;&#36996;&#21361;&#38570;</span></strong><span data-color="#0000ff" style="color: rgb(0, 0, 255);"> </span>&#8212;&#8212; &#23427;&#32102;&#20320;&#19968;&#31278;&#26377;&#20154;&#22312;&#25226;&#38364;&#30340;&#37679;&#35258;&#65292;&#23526;&#38555;&#19978;&#27794;&#26377;&#12290;</p><p>&#25105;&#20497;&#30340;&#38296;&#21482;&#22312; <strong>&#39640;&#39080;&#38570;</strong> &#37027;&#24190;&#31558; `ASK_USER`&#65292;&#20854;&#20182;&#33258;&#21205; `APPROVE` / `DOWNGRADE`&#12290;&#25226;&#20154;&#30340;&#27880;&#24847;&#21147;&#30041;&#32102;&#30495;&#27491;&#35442;&#20572;&#19979;&#20358;&#30340;&#37027;&#24190;&#27425;&#12290;&#23569;&#21839;&#65292;&#25165;&#21839;&#24471;&#28310;&#12290;</p><h3>&#19977;&#65306;delegation &#65291; audit &#8212;&#8212; `turn-log.json` &#26412;&#36523;&#23601;&#26159;&#31293;&#26680;&#36556;&#36321;</h3><p>&#27599;&#20491; agent &#30340;&#21205;&#20316;&#65292;&#37117;&#35442;&#33021;&#22238;&#28335;&#21040;&#19968;&#20491;&#23450;&#32681;&#20102; scope &#30340;&#20154;&#39006;&#25480;&#27402;&#32773;&#65292;&#32780;&#19988;<strong>&#35201;&#26377;&#19968;&#20221;&#25913;&#19981;&#25481;&#30340;&#35352;&#37636;</strong>&#12290;</p><p>The Mixer &#30340; `turn-log.json` **&#23601;&#26159;**&#37027;&#20221; delegation / audit trail&#65306;&#27599;&#19968;&#31558;&#37117;&#24118; `actor`&#12289;`target`&#12289;`type`&#12289;`intensity`&#12289;`decision`&#12289;`gateMessage`&#12289;&#38364;&#20418;&#21069;&#24460;&#29376;&#24907;&#12290;&#20986;&#20107;&#20102;&#65292;&#20320;&#19981;&#29992;&#21435;&#32763;&#27169;&#22411;&#30340;&#33126;&#34955; &#8212;&#8212; &#25892;&#38283; log&#65292;&#35504;&#22312;&#31532;&#24190;&#22238;&#21512;&#25552;&#20102;&#20160;&#40636;&#12289;&#34987;&#21738;&#26781; policy &#24590;&#40636;&#21028;&#30340;&#65292;&#19968;&#28165;&#20108;&#26970;&#12290;</p><div><hr></div><h2>&#127760; &#35611;&#30340;&#26159;&#12300;&#22283;&#23478;&#26694;&#26550;&#30340;&#35486;&#35328;&#12301;</h2><p>&#26368;&#37325;&#35201;&#30340;&#26159;&#36889;&#40670;:</p><p>&#20570;&#20986;&#20358;&#30340;&#36889;&#22235;&#20491;&#21028;&#27770;/&#26039;&#65292;&#26159;&#25226;&#23427;&#23565;&#25033;&#21040;&#26032;&#21152;&#22369; IMDA &#30340; <strong>Model Governance Framework for Agentic AI&#65288;MGF&#65292;2026 &#24180; 1 &#26376;&#30332;&#24067;&#65289;</strong>&#30340;&#27770;&#31574;&#35422;&#24409;&#65306;</p><div><hr></div><h2>&#129517; Spec / Harness / Loop&#65306;&#21040;&#24213;&#36889;&#31995;&#21015;&#22312;&#35611;&#21738;&#19968;&#27573;</h2><h3>Harness</h3><p>&#36889;&#20491;&#31995;&#21015;&#30340;&#20027;&#36600;&#26159; <strong>Spec / Harness / Loop</strong> &#19977;&#20491;&#39640;&#24230;&#65306;</p><ul><li><p>Spec: &#26159; policy</p></li><li><p>Harness: &#26159;&#27599;&#19968;&#27493;&#36305;&#22312;&#21738;&#20491; guardrail &#35041;</p></li><li><p>Loop: &#36000;&#36012;&#20219;&#30340;&#26178;&#38291;&#25511;&#21046;&#36845;&#20195;</p></li></ul><p>&#36889;&#36947;&#38296;&#65292;&#23660;&#26044; <strong>Harness</strong> &#8212;&#8212; &#32780;&#19988;&#20855;&#39636;&#35498;&#65292;&#26159; Harness &#20116;&#20491;&#32173;&#24230;&#35041;&#30340;**&#19968;&#20491;**&#65306;**Safety Boundary**&#12290;pre-tool-call hook &#26159;&#19968;&#20491; deterministic &#30340; **Guide&#65288;&#21069;&#39243;&#25511;&#21046;&#65289;**&#65292;&#22312;&#21205;&#20316;&#22519;&#34892;&#21069;&#25876;&#25130;&#12290;`DENY` &#26159;&#30828;&#37002;&#30028;&#12289;`DOWNGRADE` &#26159; graceful recovery&#12289;`ASK_USER` &#26159;&#20154;&#39006;&#30340; steering signal&#12290;</p><p><strong>&#25105;&#20497;&#20570;&#22909;&#20102;&#19968;&#20491; harness primitive&#65292;&#19981;&#26159;&#12300;&#19968;&#25972;&#22871; harness&#12301;&#12290;</strong>Resource management&#12289;state persistence&#12289;information-flow control&#12289;task orchestration &#37027;&#24190;&#26684;&#65292;&#36889;&#31687;&#37117;&#27794;&#30896;&#12290;</p><p>Part 2 &#26371;&#25226;&#37857;&#38957;&#36681;&#21040; **Loop**&#65306;&#36889;&#36947;&#38296;&#29694;&#22312;&#26159;**&#21934;&#27425;**&#21028;&#23450;&#65292;&#36942;&#20102;&#23601;&#36942;&#20102;&#12290;&#19979;&#19968;&#31687;&#35201;&#35731;&#23427;**&#26371;&#33258;&#25105;&#20462;&#27491;** &#8212;&#8212; &#21152;&#19968;&#20491; maker &#8800; grader &#30340; verifier sub-agent&#65292;&#25226; critique &#23531;&#22238; memory&#12289;&#19979;&#19968;&#22238;&#21512;&#27880;&#20837;&#65292;&#37197;&#19978; goal-conditioned &#30340;&#32066;&#27490;&#36319; budget cap&#12290;&#37027;&#25165;&#26159;&#25226;&#12300;&#38296;&#12301;&#21319;&#32026;&#25104;&#12300;&#26371;&#23416;&#30340;&#38296;&#12301;&#12290;</p><div><hr></div><h2>&#9654;&#65039; How-to-run&#65306;two commands and w/o API key</h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash"># P0 &#8212;&#8212; &#26368;&#23567;&#30340; hooks/policies &#27231;&#21046;

uv run --with google-antigravity python p0_demo.py

# P1 &#8212;&#8212; &#20841;&#20491;&#24615;&#26684; -&gt; &#19968;&#20491;&#36942;&#38296;&#30340; SocialEvent&#65288;&#21547; 4 &#20491; scenario&#65289;

uv run --with google-antigravity python p1_demo.py
</code></pre></div><p>compiled &#20986;&#20358;&#30340; policy hook &#26159;&#36305;&#22312; mock action &#19978;&#30340;&#65292;&#25152;&#20197;**&#36664;&#20986; deterministic&#12289;&#38626;&#32218;&#21487;&#37325;&#29694;**&#65292;&#19981;&#29992; API key&#12289;&#19981;&#29992; live model&#12290;</p><p>&#20808;&#35712;&#36889;&#24190;&#20491;&#27284;&#65306;</p><ul><li><p>`safety_gate.py` &#8212;&#8212; &#38296;&#26412;&#39636;&#65288;`policy.enforce` &#30340; wrapper&#65289;</p></li><li><p>`social_engine.py` &#8212;&#8212; data model &#65291; `SocialEngine` protocol &#65291; &#21443;&#32771; engine</p></li><li><p>`orchestrator.py` / `memory_store.py` &#8212;&#8212; &#22810; agent &#36852;&#22280; &#65291; &#38364;&#20418;&#25345;&#20037;&#21270;</p></li><li><p>&#23384;&#22909;&#30340;&#36664;&#20986;&#65306;`p0_demo_output.txt`&#12289;`p1_demo_output.txt`&#12289;`docs/turn-log.json`</p></li></ul><div><hr></div><h2>&#9989; &#32317;&#32080;</h2><ul><li><p>&#25226;&#23433;&#20840;&#35215;&#21063;**&#23459;&#21578;&#25104;&#19968;&#36947;&#38296;**&#65288;behavior-as-spec&#65289;&#65292;&#19981;&#35201;&#23531;&#27515;&#22312; if-else &#35041; &#8212;&#8212; &#33021;&#35712;&#12289;&#33021; diff&#12289;&#33021;&#31293;&#26680;&#12289;fail-closed&#12290;</p></li><li><p>&#38296;&#22238;&#25033;**&#22235;&#31278;&#30475;&#24471;&#35211;&#30340;&#21028;&#26039;**&#65306;`APPROVE / DENY / &#8595;DOWNGRADE / ASK_USER`&#65292;&#33995;&#22312; pre-tool-call &#30340; control point &#19978;&#65292;&#27599;&#27425;&#37117;&#21028;&#12290;</p></li><li><p>The Mixer &#35041;&#65306;&#39640;&#24375;&#24230;&#21205;&#20316;&#36942;&#19978;&#38480; &#8594; **DOWNGRADE** &#25104;&#28331;&#21644;&#29256;&#37325;&#35430;&#65307;&#38656;&#35201;&#21516;&#24847;&#30340; &#8594; **ASK_USER** &#21319;&#32026;&#65307;&#21482;&#26377; `APPROVE` &#25165;&#35731; bond ladder &#24448;&#19978;&#29228;&#12290;</p></li><li><p>Governance-in-the-Loop &#65310; &#22825;&#30495; HITL&#12289;&#35299;&#25481; consent fatigue&#12289;`turn-log.json` &#23601;&#26159;&#31293;&#26680;&#36556;&#36321;&#12290;</p></li><li><p>&#25105;&#20497;&#30340;&#21028;&#26039;&#26159;&#26681;&#25818; Singapore MGF &#30340;&#35422;&#24409;</p></li></ul><p>**&#19979;&#19968;&#31687;&#65306;Part 2 &#8212; &#25226;&#36889;&#36947;&#38296;&#20570;&#21040;&#26371;&#33258;&#25105;&#20462;&#27491;&#12290;**</p><div><hr></div><h3>&#128279; &#30456;&#38364;&#36039;&#28304;</h3><ul><li><p>Repo: <a href="http://github.com/jimmyliao/agentic-social-kit">http://github.com/jimmyliao/agentic-social-kit</a>&#65288;`safety_gate.py` / `social_engine.py` / `orchestrator.py` / `memory_store.py`&#65289;</p></li><li><p>Singapore IMDA &#8212; Model Governance Framework for Agentic AI&#65288;PDF&#65289;&#65306;<a href="https://www.imda.gov.sg/-/media/imda/files/about/emerging-tech-and-research/artificial-intelligence/mgf-for-agentic-ai.pdf">https://www.imda.gov.sg/-/media/imda/files/about/emerging-tech-and-research/artificial-intelligence/mgf-for-agentic-ai.pdf</a></p></li><li><p>Gartner &#8212; uniform governance &#19968;&#23450;&#22833;&#25943;&#65306;&lt;<a href="https://www.gartner.com/en/newsroom/press-releases/2026-05-26-gartner-says-applying-uniform-governance-across-ai-agents-will-lead-to-enterprise-ai-agent-failure">https://www.gartner.com/en/newsroom/press-releases/2026-05-26-gartner-says-applying-uniform-governance-across-ai-agents-will-lead-to-enterprise-ai-agent-failure</a>&gt;</p></li><li><p>Governance-in-the-Loop&#65288;ISHIR&#65289;&#65306;&lt;<a href="https://www.ishir.com/blog/329275/human-in-the-loop-is-not-enough-why-governance-in-the-loop-is-becoming-the-new-standard-for-ai-agent-risk-management.htm">https://www.ishir.com/blog/329275/human-in-the-loop-is-not-enough-why-governance-in-the-loop-is-becoming-the-new-standard-for-ai-agent-risk-management.htm</a>&gt;</p></li></ul><div><hr></div><p>*Jimmy Liao&#65372;LeapDesign Co-Founder / CTO&#65372;Google Developer Expert*</p><p>`#GoogleAntigravity #AgenticArchitect`</p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[[Declarative Safety Gate] 前言：當 Agent 開始彼此交談，誰在管？]]></title><description><![CDATA[&#26377;&#20154;&#33995;&#20102;&#19968;&#20491;&#31038;&#32676;&#32178;&#31449;&#65292;&#38263;&#24471;&#20687; Reddit&#65292;&#20294;&#26377;&#19968;&#20491;&#21069;&#25552;&#65306;&#20154;&#39006;&#19981;&#20934;&#30332;&#25991;&#65292;&#21482;&#26377; AI bot &#33021;&#30332;&#12290;]]></description><link>https://memo.jimmyliao.net/p/declarative-safety-gate-agent</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/declarative-safety-gate-agent</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Fri, 10 Jul 2026 12:22:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3ka9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ka9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ka9!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ka9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif" width="1050" height="683" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:683,&quot;width&quot;:1050,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7960107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206435338?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3ka9!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 424w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 848w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 1272w, https://substackcdn.com/image/fetch/$s_!3ka9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd88ff4b6-2ce0-4c59-bf3a-70129e8d3ea1_1050x683.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#26377;&#20154;&#33995;&#20102;&#19968;&#20491;&#31038;&#32676;&#32178;&#31449;&#65292;&#38263;&#24471;&#20687; Reddit&#65292;&#20294;&#26377;&#19968;&#20491;&#21069;&#25552;&#65306;<strong>&#20154;&#39006;&#19981;&#20934;&#30332;&#25991;&#65292;&#21482;&#26377; AI bot &#33021;&#30332;&#12290;</strong></p><p>&#36889;&#20491;&#32178;&#31449;&#21483; <strong>Moltbook</strong>&#65292;&#26159; Matt Schlicht &#29992; vibe coding &#20570;&#20986;&#20358;&#30340;&#65292;&#20182;&#35498;&#33258;&#24049;&#12300;&#19968;&#34892;&#31243;&#24335;&#37117;&#27794;&#23531;&#12301;&#65292;&#20840;&#20132;&#32102; agent&#12290;&#32972;&#24460;&#30340;&#24341;&#25806;&#26159;&#38283;&#28304;&#30340; **OpenClaw**&#65288;&#22914;&#26524;&#20320;&#30475;&#36942;&#26446;&#23439;&#27589;&#32769;&#24107;&#37027;&#25903;&#35299;&#21078;&#12300;&#23567;&#40845;&#34662;&#12301;&#30340;&#24433;&#29255;&#65292;&#35611;&#30340;&#23601;&#26159;&#23427;&#65289;&#12290;</p><p>&#27599;&#20491; bot &#35037;&#19968;&#20491; <strong>skill</strong> &#27284;&#65292;&#37197;&#19968;&#20491; <strong>heartbeat</strong>&#65292;&#27599;&#24190;&#20491;&#23567;&#26178;&#33258;&#21205;&#37266;&#20358; &amp; &#30332;&#25991;&#12290;&#32893;&#36215;&#20358;&#24456;&#37239;&#12290;&#28982;&#24460;&#23427;&#34399;&#31281;&#36305;&#20986; <strong>&#32004; 150 &#33836;&#20491;&#33258;&#20027; agent</strong>&#65292;&#32972;&#24460;&#21482;&#26377; <strong>&#32004; 1.7 &#33836;&#20491;&#30495;&#20154;</strong>&#12290;</p><div><hr></div><h2>&#128161; &#28982;&#24460;&#21602;&#65311;&#23427;&#35722;&#25104;&#19968;&#22580;&#28797;&#38627;</h2><p>&#19981;&#26159;&#12300;&#27794;&#20154;&#29992;&#12301;&#30340;&#37027;&#31278;&#22833;&#25943;&#12290;&#26159;&#12300;&#22826;&#22810;&#20154;&#29992;&#12289;&#20294;&#27794;&#20154;&#31649;&#12301;&#30340;&#37027;&#31278;&#22833;&#25943;&#12290;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OdAI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OdAI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 424w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 848w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 1272w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OdAI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png" width="914" height="332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:914,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70801,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206435338?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OdAI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 424w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 848w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 1272w, https://substackcdn.com/image/fetch/$s_!OdAI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F690c7c8e-05f6-4024-85fc-f54d83f5f936_914x332.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p>Fortune &#25226;&#23427;&#24418;&#23481;&#25104;&#12300;**&#26032;&#22411;&#32178;&#38555;&#32178;&#36335;&#26371;&#22914;&#20309;&#23849;&#22750;&#30340;&#29694;&#22580; demo**&#12301;&#12290;</p></blockquote><p>&#34987; Meta &#22312; 2026-03-10 &#25910;&#36092;&#20102;&#65292;&#20294;&#36889;&#19981;&#26159;&#37325;&#40670;&#12290;&#37325;&#40670;&#26159;&#65306;**&#36889;&#26159;&#19968;&#38754;&#25226;&#21839;&#38988;&#25918;&#22823; 150 &#33836;&#20493;&#30340;&#37857;&#23376;&#12290;**</p><div><hr></div><h2>&#10060; &#30495;&#27491;&#30340;&#21839;&#38988;&#19981;&#26159;&#12300;bot &#26371;&#30332;&#24290;&#25991;&#12301;</h2><p>&#25226; Moltbook &#30070;&#25104;&#31505;&#35441;&#24456;&#23481;&#26131;&#12290;&#20294;&#23427;&#25139;&#21040;&#30340;&#26159;&#19968;&#20214;&#27491;&#22312;&#30332;&#29983;&#12289;&#32780;&#19988;&#26356;&#25509;&#36817;&#20320;&#25105;&#30340;&#20107;&#12290;</p><p>&#25105;&#20497;&#29694;&#22312;&#19981;&#21482;&#26159;&#12300;&#21483;&#19968;&#20491; agent &#21435;&#20570;&#19968;&#20214;&#20107;&#12301;&#12290;&#25105;&#20497;&#38283;&#22987;&#35731; agent <strong>&#24444;&#27492;&#20132;&#35527;</strong>&#12289;&#32068;&#25104;&#38538;&#20237;&#12289;&#20114;&#30456;&#25226;&#24037;&#20316;&#19999;&#20358;&#19999;&#21435;&#8212;&#8212;&#21516;&#26178;&#36996;&#35201;&#36319;&#20154;&#21332;&#20316;&#12290;</p><p>&#37027;&#20491;&#30059;&#38754;&#38263;&#36889;&#27171;&#65306;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M6jh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M6jh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 424w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 848w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 1272w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M6jh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png" width="860" height="320" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:320,&quot;width&quot;:860,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/206435338?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M6jh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 424w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 848w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 1272w, https://substackcdn.com/image/fetch/$s_!M6jh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec9c090-e9dc-41e7-88d0-4df5c7d4ba33_860x320.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>&#30070; delegation &#24478;&#12300;&#20154; &#8594; &#19968;&#20491; agent&#12301;&#35722;&#25104;&#12300;&#20154; &#8594; &#19968;&#25903;&#38538;&#20237; &#8594; agent &#20043;&#38291;&#20114;&#25512;&#12301;&#65292;&#21839;&#38988;&#21482;&#21097;&#19968;&#21477;&#65306;</p><p><strong>&#35504;&#22312;&#31649;&#65311;</strong> &#35504;&#27770;&#23450;&#21738;&#20491;&#21205;&#20316;&#21487;&#20197;&#25918;&#34892;&#12289;&#21738;&#20491;&#35201;&#38477;&#32026;&#12289;&#21738;&#20491;&#19968;&#23450;&#35201;&#20808;&#21839;&#20154;&#65311;</p><p>Moltbook &#32102;&#30340;&#31572;&#26696;&#26159;&#12300;&#27794;&#20154;&#12301;&#12290;&#25152;&#20197;&#23427;&#35722;&#25104; Moltbook&#12290;</p><div><hr></div><h2>&#9889; &#28858;&#20160;&#40636;&#26159;&#29694;&#22312;</h2><p>&#36889;&#19981;&#26159;&#25105;&#19968;&#20491;&#20154;&#30340;&#28966;&#24942;&#65292;&#26159; regulator&#12289;analyst&#12289;&#25919;&#24220;&#21516;&#26178;&#22312;&#25970;&#38272;&#65306;</p><ul><li><p>Gartner &#22577;&#21578;&#65292;&#20225;&#26989;&#23565; agentic AI governance &#30340;&#35426;&#21839;&#37327;&#26292;&#22686; <strong>1,445%</strong>&#12290;</p></li><li><p><strong>EU AI Act &#31532; 14 &#26781;</strong>&#65288;high-risk AI &#30340; human oversight&#65289;&#22312; <strong>2026-08-02</strong> &#20840;&#38754;&#29983;&#25928;</p></li><li><p><strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);">&#26032;&#21152;&#22369; IMDA</span></strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);"> &#30332;&#24067;&#20102; </span><strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);">Model Governance Framework for Agentic AI</span></strong><span data-color="#ff0000" style="color: rgb(255, 0, 0);">&#65292;&#36899; gate &#30340;&#27770;&#31574;&#35422;&#24409;&#37117;&#27161;&#28310;&#21270;&#20102;</span>&#12290;</p></li><li><p>Gartner&#65306;<strong>2027 &#24180;&#65292;40% &#30340;&#20225;&#26989;&#26371;&#22240;&#28858;&#27835;&#29702;&#32570;&#21475;&#65292;&#25226;&#24050;&#32147;&#19978;&#32218;&#30340; agent &#38477;&#32026;&#25110;&#19979;&#26550;</strong></p></li></ul><p>&#25563;&#21477;&#35441;&#35498;&#65306;autonomy &#22823;&#23478;&#37117;&#22312;&#36861;&#65292;&#20294;&#12300;&#24590;&#40636;&#25226;&#20154;&#30041;&#22312; loop &#35041;&#12289;&#25226; agent &#26694;&#22312;&#30028;&#32218;&#20839;&#12301;&#36889;&#20214;&#20107;&#65292;&#27491;&#22312;&#24478;&#21152;&#20998;&#38988;&#35722;&#25104;&#24517;&#32771;&#38988;&#12290;</p><div><hr></div><h2>&#128752;&#65039; &#32570;&#30340;&#37027;&#19968;&#23652;&#65292;&#27794;&#20154;&#24171;&#20320;&#38468;</h2><p>&#20320;&#21487;&#33021;&#26371;&#24819;&#65306;&#37027;&#20123; orchestration framework &#19981;&#23601;&#26159;&#24185;&#36889;&#20491;&#30340;&#21966;&#65311;</p><p>&#25105;&#21435;&#30475;&#20102;&#19968;&#36650;&#8212;&#8212;**LangGraph**&#12289;**Microsoft Agent Framework**&#12289;**CrewAI**&#12289;**Google ADK + A2A**&#12290;&#23427;&#20497;&#37117;&#24456;&#26371;&#32232;&#25490; agent &#30340;&#21332;&#20316;&#65292;&#20294;&#26377;&#19968;&#20491;&#20849;&#36890;&#40670;&#65306;</p><p><strong>&#27794;&#26377;&#19968;&#20491;&#20839;&#24314;&#27835;&#29702;&#23652;</strong> &#32780;&#36889;&#27573;&#20320;&#21482;&#33021;&#33258;&#24049;&#23526;&#20316;&#12290;</p><p>&#36889;&#20491; gate &#35442;&#38263;&#24590;&#27171;&#65311;&#23427;&#25033;&#35442;&#20687;&#28023;&#38364;&#65306;&#19981;&#26159;&#27599;&#20491;&#20154;&#37117;&#25876;&#19979;&#20358;&#30436;&#21839;&#65292;&#32780;&#26159; <strong>&#20302;&#39080;&#38570;&#25918;&#34892;&#12289;&#39640;&#39080;&#38570;&#33289;&#25163;&#21839;&#20154;</strong>&#12290;&#8212;&#8212;APPROVE / DENY / DOWNGRADE / ASK_USER&#12290;&#23427;&#36996;&#25033;&#35442;&#30041;&#19979;&#19968;&#26781; audit trail&#65292;&#35731;&#27599;&#20491;&#21205;&#20316;&#37117;&#33021;&#36861;&#22238;&#21040;&#12300;&#26159;&#21738;&#20491;&#20154;&#12289;&#25480;&#27402;&#20102;&#20160;&#40636;&#31684;&#22285;&#12301;&#12290;</p><div><hr></div><h2>&#9989; &#25105;&#20570;&#20102;&#20160;&#40636;&#65292;&#20197;&#21450;&#36889;&#20491;&#31995;&#21015;&#35201;&#35611;&#20160;&#40636;</h2><p>&#25105;&#25226;&#37027;&#23652;&#32570;&#30340;&#26481;&#35199;&#20570;&#20986;&#20358;&#20102;&#65292;<strong>&#30495;&#30340;&#33021;&#36305;</strong>&#30340; reference implementation &#8594; <strong>The Mixer</strong>&#65306;&#19968;&#36947; declarative &#30340; safety gate&#12290;&#27794;&#26377; API key&#12289;&#27794;&#26377;&#32218;&#19978;&#27169;&#22411;&#65292;offline &#36305;&#20986;&#20358;&#30340;&#32080;&#26524;&#26159; deterministic &#30340;&#12290;</p><p>&#23427;&#19981;&#26159; demo &#29609;&#20855;&#12290;&#19968;&#20491;&#36913;&#26411;&#20570;&#20986;&#20358;&#30340; gate&#65292;&#35611;&#30340;&#21371;&#26159;&#22283;&#23478;&#26694;&#26550;&#27491;&#22312;&#27161;&#28310;&#21270;&#30340;&#21516;&#19968;&#22871;&#35486;&#35328;&#12290;</p><p>&#32780;&#19988;&#25105;&#19981;&#26159;&#26049;&#35264;&#36889;&#20491;&#21839;&#38988;&#8212;&#8212;&#36889;&#20123; agent &#25105;&#22312; production &#36305;&#22909;&#19968;&#38499;&#23376;&#20102;&#65306;&#19968;&#22871;<strong>&#36969;&#29992;&#36305;&#22312;&#35069;&#36896;&#26989;&#65292;&#30740;&#31350;&#22411;&#27231;&#27083;&#30340; RAG</strong>&#12289;&#19968;&#22871; <strong>&#27861;&#24459;&#21028;&#27770;&#27298;&#32034;&#30340; LLM</strong>&#65292;&#20840;&#36305;&#22312; <strong>&#33258;&#24049;&#30340; infra &#19978;</strong>&#12290;&#25152;&#20197;&#36889;&#20491;&#31995;&#21015;&#19981;&#26159;&#25945;&#23416;&#25991;&#65292;&#26159;&#19968;&#31995;&#21015;&#30340; <strong>Day-2 &#31558;&#35352;</strong>&#12290;</p><p>&#25216;&#34899;&#19978;&#65292;&#36889;&#36947;&#38296;&#23601;&#26159; Antigravity Agent SDK &#30340; `pre_tool_call_decide` hook&#8212;&#8212;6/16 BwAI &#25105;&#24118;&#22823;&#23478;&#25163;&#23531;&#36942;&#37027;&#20491;&#12300;&#32080;&#24115;&#21069;&#20572;&#19979;&#20358;&#21839;&#20320; `[y/N]`&#12301;&#12290;&#25105;&#21482;&#26159;&#25226;&#23427;&#24478;&#19968;&#20491; if-else&#65292;&#21319;&#32026;&#25104;&#19968;&#23652;**&#23459;&#21578;&#24335;&#30340; policy &#27835;&#29702;**&#12290;</p><p>&#36889;&#26159;&#19968;&#20491;&#19977;&#31687;&#30340;&#31995;&#21015;&#65306;</p><ul><li><p>**&#12296;&#21069;&#35328;&#12297;**&#65288;&#20320;&#27491;&#22312;&#30475;&#30340;&#36889;&#31687;&#65289;&#8212;&#8212; &#28858;&#20160;&#40636;&#29694;&#22312;&#38750;&#20570;&#19981;&#21487;&#12290;</p></li><li><p>**Part 1** &#8212;&#8212; &#37027;&#36947;&#38296;&#21040;&#24213;&#38263;&#24590;&#27171;&#65306;&#24590;&#40636;&#25226; policy &#23459;&#21578;&#25104; spec&#65292;&#25499;&#22312; agent loop &#30340;&#21738;&#20491;&#38364;&#31680;&#19978;&#12290;</p></li><li><p>**Part 2** &#8212;&#8212; &#25226;&#23427;&#20570;&#21040;&#26371;&#33258;&#25105;&#20462;&#27491;&#65306;&#30070;&#19968;&#20491;&#21205;&#20316;&#34987;&#25803;&#19979;&#20358;&#65292;gate &#24590;&#40636;&#22238;&#38957;&#25226;&#23427;&#38477;&#32026;&#37325;&#25552;&#65292;&#35722;&#25104;&#19968;&#20491;&#26371; iterate &#30340; loop&#12290;</p><p></p></li></ul><p>Moltbook &#29992; 150 &#33836;&#20491; agent &#35657;&#26126;&#20102;&#27794;&#26377; gate &#26371;&#24590;&#27171;&#12290;&#25105;&#24819;&#35657;&#26126;&#30340;&#26159;&#21453;&#36942;&#20358;&#65306;&#21516;&#27171;&#30340;&#21069;&#25552;&#65292;**&#25226;&#32570;&#30340;&#37027;&#23652;&#35036;&#22238;&#21435;**&#65292;&#26371;&#38263;&#20160;&#40636;&#27171;&#23376;&#12290;</p><div><hr></div><h2>&#30456;&#38364;&#36039;&#28304;</h2><ul><li><p>Moltbook &#23433;&#20840;&#20998;&#26512; &#183; Fortune&#65306;&#12300;<a href="https://fortune.com/2026/02/03/moltbook-ai-social-network-security-researchers-agent-internet/">a live demo of how the new internet could fail</a>&#12301; </p></li><li><p>Moltbook &#35299;&#35498; &#183; TIME &#8212; <a href="https://time.com/7364662/moltbook-ai-reddit-agents/">https://time.com/7364662/moltbook-ai-reddit-agents/</a></p></li><li><p>&#26446;&#23439;&#27589; &#183; OpenClaw&#65288;&#23567;&#40845;&#34662;&#65289;&#35299;&#21078; &#8212; <a href="https://www.bilibili.com/video/BV1UqPQzXEmy/">https://www.bilibili.com/video/BV1UqPQzXEmy/</a></p></li><li><p>&#26032;&#21152;&#22369; IMDA &#183; Model Governance Framework for Agentic AI &#8212; <a href="https://www.imda.gov.sg/-/media/imda/files/about/emerging-tech-and-research/artificial-intelligence/mgf-for-agentic-ai.pdf">https://www.imda.gov.sg/-/media/imda/files/about/emerging-tech-and-research/artificial-intelligence/mgf-for-agentic-ai.pdf</a></p></li><li><p>Gartner &#183; uniform governance &#28858;&#20309;&#22833;&#25943; &#8212; <a href="https://www.gartner.com/en/newsroom/press-releases/2026-05-26-gartner-says-applying-uniform-governance-across-ai-agents-will-lead-to-enterprise-ai-agent-failure">https://www.gartner.com/en/newsroom/press-releases/2026-05-26-gartner-says-applying-uniform-governance-across-ai-agents-will-lead-to-enterprise-ai-agent-failure</a></p></li><li><p>Governance-in-the-Loop &#183; ISHIR &#8212; <a href="https://www.ishir.com/blog/329275/human-in-the-loop-is-not-enough-why-governance-in-the-loop-is-becoming-the-new-standard-for-ai-agent-risk-management.htm">https://www.ishir.com/blog/329275/human-in-the-loop-is-not-enough-why-governance-in-the-loop-is-becoming-the-new-standard-for-ai-agent-risk-management.htm</a></p></li></ul><div><hr></div><p>**&#19979;&#19968;&#31687;&#65306;Part 1 &#8212;&#8212; &#37027;&#36947;&#38296;&#38263;&#24590;&#27171;&#12290;** &#25105;&#20497;&#26371;&#25171;&#38283; `safety_gate.py`&#65292;&#30475;&#19968;&#20491; pre-tool-call hook &#24590;&#40636;&#35722;&#25104; agent &#30340;&#12300;&#28023;&#38364;&#12301;&#12290;</p><p>---</p><p>---</p><p>*&#39318;&#30332; 2026-06-25 &#183; &#21407;&#25991;&#33287;&#24460;&#32396;&#31995;&#21015;&#65306;memo.jimmyliao.net &#183; &#24341;&#29992;&#35531;&#35387;&#26126;&#20986;&#34389;&#65288;Cite as: Jimmy Liao, 2026&#65289;*</p><p>*Jimmy Liao&#65372;LeapDesign Co-Founder / CTO&#65372;Google Developer Expert &#183; &#22312;&#33258;&#24049;&#30340; infra &#19978;&#36305;&#20225;&#26989; agent*</p><p>`#GoogleAntigravity` `#AgenticArchitect` `#SovereignAI`</p>]]></content:encoded></item><item><title><![CDATA[2026 丙午火馬年 寫在收假前]]></title><description><![CDATA[&#20063;&#35377;&#20043;&#24460;&#26371;&#23531;&#19968;&#20123;&#29983;&#27963;&#33287;&#38620;&#35527;]]></description><link>https://memo.jimmyliao.net/p/2026</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/2026</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Sat, 21 Feb 2026 17:42:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>&#25972;&#20491;&#36786;&#26310;&#20551;&#26399;, &#21051;&#24847;&#19981;&#30896;&#20160;&#40636; AI Coding, &#40845;&#34662;&#20160;&#40636;&#30340;. &#36523;&#24515;&#38728;&#29554;&#24471;&#24505;&#24213;&#25918;&#39686;, <br><br>&#36889;&#24190;&#24180;&#26368;&#22823;&#30340;&#39636;&#35469;&#26159;, &#33287;&#20854;&#25343;&#20358;&#36319; AI &#19981;&#26039;&#30340;&#23565;&#35441;, &#22894;&#25136;, &#23531;&#25187; (&#36942;&#21435;&#25976;&#21313;&#24180;&#30340;&#36328;&#24180;, &#25105;&#22909;&#20687;&#20063;&#37117;&#36996;&#22312; commit code) , &#27794;&#20160;&#40636;&#19968;&#23450;&#35201;&#25918;&#26820;&#25481;&#33287;&#23478;&#20154;&#20677;&#26377;&#30340;&#30456;&#34389;&#26178;&#38291;, &#23588;&#20854;&#26159;, &#36899;&#32396;&#20551;&#26399;&#35242;&#26379;&#22909;&#21451;&#20063;&#37117;&#21083;&#22909;&#34389;&#26044;&#25918;&#20551;&#27169;&#24335;. &#27794;&#20160;&#40636;&#29702;&#30001;&#26159;&#20320;&#25033;&#35442;&#25918;&#25481;&#36319;&#26379;&#21451;&#22909;&#22909;&#32842;&#19978;&#22825;&#30340;&#38627;&#24471;&#27231;&#26371;.<br></p><p>&#33021;&#22810;&#36319;&#23478;&#20154;&#25265;&#25265;, &#32842;&#32842;&#22825;, &#23601;&#35201;&#19981;&#24597;&#32670;&#30340;&#34920;&#36948;. &#23478;&#23478;&#27704;&#36960;&#26377;&#38627;&#24565;&#30340;&#32147;, &#20063;&#35377;&#32317;&#26159;&#26377;&#38627;&#35299;&#30340; GAP issues, &#21152;&#19978;&#23565;&#26044;&#23475;&#32670;&#20860;&#32317;&#26159;&#31070;&#36938;&#30340; i &#22411;&#20154;, &#27599;&#27425;&#35242;&#21451;&#32858;&#26371;&#30456;&#30070;&#32771;&#39511;&#32784;&#24515;&#21834;, &#20294;&#26159;&#36523;&#28858;&#24050;&#32147;&#26159;&#20013;&#24180;&#22823;&#21460;&#36942;&#20358;&#20154;&#30340;&#32147;&#39511;, &#21487;&#20197;&#36319;&#22823;&#23478;&#35498;, &#23478;&#24237;&#26178;&#20809;&#25165;&#26159;&#26368;&#37325;&#35201;&#30340;. &#21508;&#20301;&#65281;&#38500;&#38750;&#20320;&#26159;&#36996;&#27794;&#26377;&#23567;&#23401;, &#38263;&#36649;&#24180;&#32000;&#36996;&#24180;&#36629;, &#26377;&#39192;&#35029;&#25582;&#38669;&#20320;&#30340;&#20551;&#26399; + &#21482;&#38656;&#35201;&#31649;&#22909;&#33258;&#24049;&#30340;&#24180;&#36629;&#20154;! </p><p>&#24180;&#36629;&#26178;&#38291;&#25104;&#26412;&#20302;, &#23601;&#35201;&#36245;&#24555;&#25226;&#33258;&#24049;&#30340;&#26178;&#38291;&#25104;&#26412;&#25289;&#39640;, &#20302;&#30340;&#20219;&#21209;&#23601;&#36245;&#24555; Delegate &#20986;&#21435;. &#20294;&#26159; &#20294;&#26159; &#33287;&#23478;&#20154;&#30456;&#34389;&#26178;&#38291;&#23601;&#27704;&#36960;&#26159;&#28961;&#20729;, &#28961;&#27861;&#29992;&#37329;&#37666;&#35413;&#37327;&#30340;, </p><p>&#35352;&#24471;, &#26178;&#38291;&#27704;&#36960;&#26159;&#26368;&#23542;&#36020;&#30340;. &#36234;&#26159;&#35201;&#25226;&#25569;&#26178;&#38291;, &#36234;&#35201;&#25026;&#24471;&#26178;&#38291;&#23601;&#35442;&#33457;&#22312;&#37325;&#35201;&#30340;&#20154;&#20107;&#29289;&#19978;.</p><p>&#32780;&#19988;, &#36523;&#28858;&#20154; (human being) &#33287;&#27231;&#22120; (&#20063;&#38920;&#27492;&#26178;&#27492;&#21051;&#36996;&#31281;&#28858; GenAI &#21543;) &#30340;&#24046;&#21029;&#23601;&#26159;, &#20320;&#27704;&#36960;&#26377;&#33258;&#24049;&#25033;&#35442;&#22312;&#20046;&#30340;&#20154;/&#20107;/&#29289;. &#20445;&#25345;&#20154;&#24615;!</p><p><br><br>&#22823;&#23478;&#26032;&#24180;&#24555;&#27138;!</p>]]></content:encoded></item><item><title><![CDATA[[GCP] 如何有系統的管理 GCP Project 與 Billing Account]]></title><description><![CDATA[&#21443;&#21152;&#35377;&#22810;&#22580; GDG &#27963;&#21205;, &#25343;&#20102;&#35377;&#22810;&#27425;&#30340;&#35430;&#29992; Credit &#21371;&#32317;&#26159;&#34987; Trial Billing Account &#28153;&#27794;&#21966;]]></description><link>https://memo.jimmyliao.net/p/gcp-gcp-project-billing-account</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/gcp-gcp-project-billing-account</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Fri, 13 Feb 2026 15:50:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#10024; <strong>&#26356;&#22810;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; [<a href="https://leapdesign.ai/">https://leapdesign.ai/</a>]</p><div><hr></div><ul><li><p>&#127775; &#20998;&#20139;&#32102;&#38656;&#35201;&#30340;&#26379;&#21451;</p></li><li><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p></li></ul><div><hr></div><p></p><p>&#22823;&#23478;&#22909;&#65292;&#21448;&#26159;&#26032;&#30340;&#19968;&#24180;&#65292;&#20063;&#21363;&#23559;&#38283;&#22987; BuildWithAI &#30340;&#27963;&#21205;&#65292;&#22823;&#23478;&#25033;&#35442;&#37117;&#26371;&#36879;&#36942;&#21443;&#21152; Google Developers Group &#33289;&#36774;&#30340; Hands-On (&#21205;&#25163;&#20570;) &#25343;&#21040;&#35430;&#29992; Google Cloud &#30340; Credit (&#40670;&#25976;)&#12290;&#36889;&#31687;&#21487;&#20197;&#24171;&#21161;&#20320;&#26377;&#25928;&#29575;&#30340;&#31649;&#29702;&#25343;&#21040;&#30340; Billing Account&#12290;</p><p>GCP &#30340;&#23560;&#26696;&#33287;&#24115;&#21934;&#24115;&#25142;&#25505;&#19968;&#23565;&#22810;&#38364;&#32879;&#65292;&#38614;&#28982;&#35430;&#29992;&#38989;&#24230;&#28961;&#27861;&#21512;&#20341;&#21040;&#21516;&#19968;&#20491; Billing Account&#65292;&#20294;&#25105;&#20497;&#21487;&#20197;&#36879;&#36942;&#12300;&#37325;&#26032;&#21629;&#21517;&#12301;&#33287;&#12300;&#38728;&#27963;&#20999;&#25563;&#36899;&#32080;&#12301;&#20358;&#20778;&#21270;&#31649;&#29702;&#25928;&#29575;&#12290;</p><p>&#23559;&#38928;&#35373;&#21517;&#31281;&#25913;&#28858;&#20855;&#36776;&#35672;&#24230;&#30340;&#27161;&#31844;&#65288;&#22914;&#65306;<code>Trial_End_202605xx</code>&#65289;&#65292;&#33021;&#35731;&#20320;&#22312;&#22810;&#20491;&#23560;&#26696;&#28204;&#35430;&#26178;&#65292;&#21487;&#20197;&#36984;&#29992;&#21040;&#26368;&#38656;&#35201;&#28040;&#32791;&#25481;&#30340; Billing Account &#65292;&#26368;&#22823;&#21270;&#20320;&#30340;&#20351;&#29992;&#29575;&#12290;</p><h3>&#29694;&#27841;: &#27599;&#27425;&#20812;&#25563;&#20043;&#24460;&#65292;&#37117;&#26371;&#29986;&#29983;&#19968;&#32068; Google Cloud Platform Trial Billing Account (&#25110;&#26159;&#23565;&#25033;&#30340;&#20013;&#25991;&#32763;&#35695;&#21517;&#31281;)</h3><p>&#25110;&#26159;&#20320;&#20063;&#21487;&#20197;&#24478;&#36889;&#20491;&#32178;&#22336; <a href="https://console.cloud.google.com/billing">https://console.cloud.google.com/billing</a> &#30475;&#21040;</p><p>or &#40670;&#36984;&#21491;&#19978;&#35282;&#30340; &#8230;. &gt; Billing account management</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lYYy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lYYy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 424w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 848w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 1272w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lYYy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png" width="346" height="134.55555555555554" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:252,&quot;width&quot;:648,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:39448,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!lYYy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 424w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 848w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 1272w, https://substackcdn.com/image/fetch/$s_!lYYy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67b54ae4-c671-4e90-a66a-d389541ce1fe_648x252.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>&#23601;&#21487;&#20197;&#30475;&#21040;&#20320;&#24115;&#34399;&#24213;&#19979;&#25152;&#26377;&#30340; Billing Accounts</p><h4>&#40670;&#36984;&#20854;&#20013;&#19968;&#20491;</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Q8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Q8m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 424w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 848w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 1272w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Q8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png" width="1088" height="556" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:556,&quot;width&quot;:1088,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157155,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Q8m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 424w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 848w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 1272w, https://substackcdn.com/image/fetch/$s_!-Q8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2671a02-7ccc-406f-b375-4587ce0d115a_1088x556.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4></h4><h4>&#40670;&#36984; Manage billing account</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mqm6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mqm6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 424w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 848w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 1272w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mqm6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png" width="1300" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65068,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mqm6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 424w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 848w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 1272w, https://substackcdn.com/image/fetch/$s_!mqm6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d9e05b4-ef74-4c07-acd2-490a80443969_1300x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4>&#40670; <code>Rename billing account</code></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!axV4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!axV4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 424w, https://substackcdn.com/image/fetch/$s_!axV4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 848w, https://substackcdn.com/image/fetch/$s_!axV4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 1272w, https://substackcdn.com/image/fetch/$s_!axV4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!axV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png" width="1456" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117729,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!axV4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 424w, https://substackcdn.com/image/fetch/$s_!axV4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 848w, https://substackcdn.com/image/fetch/$s_!axV4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 1272w, https://substackcdn.com/image/fetch/$s_!axV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F292dd7ea-5b9c-4c58-80bd-35a41b7d1feb_1926x528.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>&#36889;&#37002;&#21487;&#20197;&#36664;&#20837;&#23481;&#26131;&#31649;&#29702;&#30340;&#21517;&#31281;, &#33289;&#20363;: Credit &#21040;&#26399;&#26178;&#38291;</h4><p>&#20320;&#21487;&#20197;&#24478;&#24038;&#26041;&#36984;&#21934;&#30475;&#21040; <code>Credits</code> &#27298;&#26597;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oLom!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oLom!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 424w, https://substackcdn.com/image/fetch/$s_!oLom!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 848w, https://substackcdn.com/image/fetch/$s_!oLom!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!oLom!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oLom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png" width="208" height="478.82448979591834" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1128,&quot;width&quot;:490,&quot;resizeWidth&quot;:208,&quot;bytes&quot;:88591,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oLom!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 424w, https://substackcdn.com/image/fetch/$s_!oLom!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 848w, https://substackcdn.com/image/fetch/$s_!oLom!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 1272w, https://substackcdn.com/image/fetch/$s_!oLom!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab960b1f-c7fd-4be3-9d07-37a8b076890b_490x1128.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>&#33289;&#20363;&#20358;&#35498;&#65292;&#25105;&#26159;&#21629;&#21517;&#28858; <code>Trial_Exp_yyyymmdd</code></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2GG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2GG4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 424w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 848w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2GG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213898,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2GG4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 424w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 848w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 1272w, https://substackcdn.com/image/fetch/$s_!2GG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F125e3777-f82c-43e0-8967-a524f6ee63ce_1864x1052.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h4>&#36889;&#27171;&#22312; GCP Project &#36984;&#25799; billing account &#26178;, &#23601;&#26371;&#26356;&#26041;&#20415;&#20102;!</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mUtT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mUtT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 424w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 848w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 1272w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mUtT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png" width="970" height="1466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1466,&quot;width&quot;:970,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155163,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mUtT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 424w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 848w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 1272w, https://substackcdn.com/image/fetch/$s_!mUtT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F737886cc-37f6-4439-bd60-ec38ef90d1e9_970x1466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>(Optional) &#26032;&#22686; GCP Project &#20006;&#36899;&#32080;&#21040; Billing account</h4><p>&#25509;&#33879;&#65292;&#20320;&#21487;&#20197;&#26032;&#22686;&#19968;&#20491; GCP project&#65292;&#25628;&#23563; <code>Create Project</code> </p><p>&#25110;&#26159;&#32178;&#22336; <a href="https://console.cloud.google.com/projectcreate">https://console.cloud.google.com/projectcreate</a></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CXmK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CXmK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 424w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 848w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 1272w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CXmK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png" width="656" height="235.12079207920792" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:362,&quot;width&quot;:1010,&quot;resizeWidth&quot;:656,&quot;bytes&quot;:61429,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CXmK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 424w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 848w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 1272w, https://substackcdn.com/image/fetch/$s_!CXmK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F283e38c4-c9b6-4c6e-af01-ff95146823f9_1010x362.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!--zR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!--zR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 424w, https://substackcdn.com/image/fetch/$s_!--zR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 848w, https://substackcdn.com/image/fetch/$s_!--zR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 1272w, https://substackcdn.com/image/fetch/$s_!--zR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!--zR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png" width="1132" height="1168" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1168,&quot;width&quot;:1132,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109803,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!--zR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 424w, https://substackcdn.com/image/fetch/$s_!--zR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 848w, https://substackcdn.com/image/fetch/$s_!--zR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 1272w, https://substackcdn.com/image/fetch/$s_!--zR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81751f8c-7efe-4fb2-8e37-e6babc5e1aa0_1132x1168.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4>&#20043;&#24460;&#30070; Billing account &#30340; Credit &#20351;&#29992;&#23436;&#20043;&#24460;&#65292;&#24819;&#35201;&#20999;&#25563;&#21040;&#20854;&#20182; Billing account</h4><p>&#25628;&#23563; Billing &gt; Manage billing accounts</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!al9s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!al9s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 424w, https://substackcdn.com/image/fetch/$s_!al9s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 848w, https://substackcdn.com/image/fetch/$s_!al9s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 1272w, https://substackcdn.com/image/fetch/$s_!al9s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!al9s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png" width="1456" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75673,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!al9s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 424w, https://substackcdn.com/image/fetch/$s_!al9s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 848w, https://substackcdn.com/image/fetch/$s_!al9s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 1272w, https://substackcdn.com/image/fetch/$s_!al9s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F205ca1c5-1391-4126-aa5e-60ae62de342b_1770x632.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#25214;&#21040;&#35442;&#23560;&#26696;, &#21491;&#26041;&#30340; &#8230; &#40670;&#36984; Change billing &#21363;&#21487;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o2Q1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o2Q1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 424w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 848w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 1272w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o2Q1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png" width="1456" height="583" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:583,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167331,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/187865699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o2Q1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 424w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 848w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 1272w, https://substackcdn.com/image/fetch/$s_!o2Q1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcab980e6-a652-4990-b968-f2ed040ad72c_1992x798.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p>&#10024; <strong>&#26356;&#22810;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; [<a href="https://leapdesign.ai/">https://leapdesign.ai/</a>]</p><div><hr></div><ul><li><p>&#127775; &#20998;&#20139;&#32102;&#38656;&#35201;&#30340;&#26379;&#21451;</p></li><li><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p></li></ul><div><hr></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[[Looplia] AI Code Review + Gemini Proxy]]></title><description><![CDATA[&#29992; Gemini 2.5 Flash + Anthropic API &#30456;&#23481;&#23652;&#65292;&#21033;&#29992; Looplia &#30340; workflow cli &#20570; Code Review]]></description><link>https://memo.jimmyliao.net/p/looplia-ai-code-review-gemini-proxy</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/looplia-ai-code-review-gemini-proxy</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 11 Feb 2026 16:11:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><h2><strong>&#128172; &#35258;&#24471;&#26377;&#24171;&#21161;&#21966;&#65311;</strong></h2><ul><li><p>&#127775; &#20998;&#20139;&#32102;&#38656;&#35201;&#30340;&#26379;&#21451;</p></li><li><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p></li></ul><div><hr></div><p>&#10024; <strong>&#26356;&#22810;&#24555;&#36895;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; [<a href="https://leapdesign.ai/">https://leapdesign.ai/</a>)</p><h2><strong>&#9889; &#24555;&#36895;&#29256;</strong></h2><p>Looplia + Gemini Proxy&#65292;&#28961;&#32299;&#20999;&#25563;</p><p><strong>&#27493;&#39519;</strong>&#65306;</p><pre><code># 1. &#35373;&#23450; Gemini API key

export GEMINI_API_KEY=&#8221;AIzaSy...&#8221;

# 2. &#21855;&#21205; proxy&#65288;Anthropic API &#30456;&#23481;&#23652;&#65289;

npm install -g @vitorcen/gemini-cli-anthropic

gemini-cli-anthropic  # &#30435;&#32893; port 41242

# 3. &#20351;&#29992; Claude API &#26684;&#24335;&#21628;&#21483; Gemini

curl -X POST http://127.0.0.1:41242/v1/messages \

  -H &#8220;x-api-key: dummy&#8221; \

-H &#8220;anthropic-version: 2023-06-01&#8221; \

  -d &#8216;{&#8221;model&#8221;:&#8221;gemini-2.5-flash&#8221;,&#8221;messages&#8221;:[...]}&#8217;</code></pre><div><hr></div><h2><strong>&#128214; &#23436;&#25972;&#29256;</strong></h2><h3>&#21033;&#29992; Looplia &#30340; workflow &#21033;&#29992; AI code review&#65292;<strong>Gemini &#25552;&#20379;&#26356;&#22823;&#30340; context &#33287;&#22810;&#27169;&#24907;&#29702;&#35299;</strong></h3><p></p><p>&#26412;&#25991;&#29992; <strong>gemini-cli-anthropic</strong> &#25552;&#20379; <strong>Anthropic API &#30456;&#23481;&#23652;</strong>&#65292;&#28961;&#32299;&#20351;&#29992; Looplia&#12290;</p><blockquote><p>&#128161; <strong>&#36969;&#21512;&#35504;&#65311;</strong></p><ul><li><p>&#24819;&#20351;&#29992; Gemini 2.5 Flash &#36914;&#34892; code review</p></li><li><p>&#21407;&#26377; Gemini &#29983;&#24907;&#31995;&#30340;&#24819;&#20351;&#29992; Looplia &#30340; workflow cli</p></li></ul></blockquote><div><hr></div><h2><strong>&#128273; Part 1: &#35373;&#23450; Gemini API</strong></h2><h3><strong>&#27493;&#39519; 1&#65306;&#29554;&#21462; Gemini API Key</strong></h3><p>&#36889;&#19981;&#29992;&#22810;&#35498;, &#21040; <a href="https://ai.dev/apikey">https://ai.dev/apikey</a></p><h3><strong>&#27493;&#39519; 2&#65306;&#35373;&#23450;&#29872;&#22659;&#35722;&#25976;</strong></h3><pre><code>export GEMINI_API_KEY=&#8221;AIxx_gxxx&#8221;

# &#27704;&#20037;&#20445;&#23384;

echo &#8216;export GEMINI_API_KEY=&#8221;AIzaSy...&#8221;&#8217; &gt;&gt; ~/.zshrc

source ~/.zshrc</code></pre><h3><strong>&#9989; &#39511;&#35657; API Key</strong></h3><pre><code># &#31777;&#21934;&#28204;&#35430;

curl -X POST &#8220;https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=${GEMINI_API_KEY}&#8221; \

  -H &#8216;Content-Type: application/json&#8217; \

-d &#8216;{&#8221;contents&#8221;:[{&#8221;parts&#8221;:[{&#8221;text&#8221;:&#8221;Hello&#8221;}]}]}&#8217;</code></pre><p></p><div><hr></div><p></p><h2><strong>&#128640; Part 2: &#37096;&#32626; gemini-cli-anthropic Proxy</strong></h2><h3><strong>&#20160;&#40636;&#26159; gemini-cli-anthropic&#65311;</strong></h3><p>[<a href="https://github.com/vitorcen/gemini-cli-anthropic">gemini-cli-anthropic</a>] &#26159;&#19968;&#20491; proxy server&#65292;&#25552;&#20379;&#65306;</p><ul><li><p><strong>Anthropic API &#30456;&#23481;&#23652;</strong>- &#20351;&#29992; Claude API &#26684;&#24335;&#21628;&#21483; Gemini</p></li><li><p><strong>&#28961;&#32299;&#20999;&#25563;</strong> - &#29694;&#26377; Claude &#24037;&#20855;&#28961;&#38656;&#20462;&#25913;&#21363;&#21487;&#20351;&#29992; Gemini</p></li><li><p><strong>&#23436;&#25972;&#25903;&#25588;</strong> - streaming&#12289;tool use&#12289;multimodal &#31561;&#21151;&#33021;</p></li></ul><h3><strong>&#26550;&#27083;&#22294;</strong></h3><pre><code>Client (Claude API format)

    &#8595;

gemini-cli-anthropic proxy (port 41242)

    &#8595; (&#36681;&#25563;&#26684;&#24335;)

Google Gemini API

    &#8595;

Response (Claude API format)</code></pre><p></p><h3><strong>&#27493;&#39519; 1&#65306;&#23433;&#35037; (&#26041;&#24335; A - NPM &#20840;&#22495;&#23433;&#35037;)</strong></h3><pre><code>npm install -g @vitorcen/gemini-cli-anthropic</code></pre><h3><strong>&#27493;&#39519; 2&#65306;&#21855;&#21205; Proxy Server</strong></h3><pre><code>gemini-cli-anthropic

# &#36664;&#20986;&#65306;

# Server listening on port 41242

# Using Gemini API Key: AIzaSy...xxx</code></pre><h3><strong>&#27493;&#39519; 1-2&#65306;&#24478;&#21407;&#22987;&#30908;&#23433;&#35037; (&#26041;&#24335; B)</strong></h3><pre><code># Clone repository with submodules

git clone --recurse-submodules https://github.com/vitorcen/gemini-cli-anthropic.git

cd gemini-cli-anthropic

# &#23433;&#35037;&#30456;&#20381;&#22871;&#20214;

npm install

# &#23433;&#35037; gemini-cli submodule

cd gemini-cli

npm install

cd ..

# &#21855;&#21205; server

npm start</code></pre><p><strong>&#38928;&#26399;&#36664;&#20986;</strong>&#65306;</p><pre><code>&#128640; Gemini CLI Anthropic Proxy Server

&#128225; Listening on: http://127.0.0.1:41242

&#128273; Using Gemini API Key: AIzaSy...xxx

&#9989; Server ready!</code></pre><p></p><h3><strong>&#27493;&#39519; 3&#65306;&#39511;&#35657; Proxy</strong></h3><p>&#28204;&#35430; proxy &#26159;&#21542;&#27491;&#24120;&#36939;&#20316;&#65306;</p><pre><code>curl -X POST http://127.0.0.1:41242/v1/messages \

  -H &#8220;Content-Type: application/json&#8221; \

-H &#8220;x-api-key: dummy&#8221; \

  -H &#8220;anthropic-version: 2023-06-01&#8221; \

-d &#8216;{

    &#8220;model&#8221;: &#8220;gemini-2.5-flash&#8221;,

    &#8220;max_tokens&#8221;: 1024,

    &#8220;messages&#8221;: [{

      &#8220;role&#8221;: &#8220;user&#8221;,

      &#8220;content&#8221;: &#8220;&#20320;&#22909;&#65292;&#35531;&#29992;&#32321;&#39636;&#20013;&#25991;&#22238;&#31572;&#65306;1+1=?&#8221;

    }]

  }&#8217;</code></pre><p></p><p><strong>&#38928;&#26399;&#22238;&#25033;</strong>&#65306;</p><pre><code>{

&#8220;id&#8221;: &#8220;msg_...&#8221;,

&#8220;type&#8221;: &#8220;message&#8221;,

&#8220;role&#8221;: &#8220;assistant&#8221;,

&#8220;content&#8221;: [{

&#8220;type&#8221;: &#8220;text&#8221;,

&#8220;text&#8221;: &#8220;1 + 1 &#31561;&#26044; &#20108;&#12290;&#8221;

  }],

&#8220;model&#8221;: &#8220;gemini-2.5-flash&#8221;,

&#8220;usage&#8221;: {

&#8220;input_tokens&#8221;: 15,

&#8220;output_tokens&#8221;: 8

  }

}</code></pre><p></p><p>&#9989; &#25104;&#21151;&#65281;Proxy &#27491;&#24120;&#36939;&#20316;&#19988;&#25903;&#25588;&#32321;&#39636;&#20013;&#25991;&#12290;</p><div><hr></div><h2><strong>&#128221; Part 3: &#23526;&#29694; Code Review</strong></h2><h3><strong>Python &#23526;&#20316;&#65288;&#23436;&#25972;&#31684;&#20363;&#65289;</strong></h3><p>&#21109;&#24314; `gemini-review.py`&#65306;</p><pre><code>#!/usr/bin/env python3

import json

import urllib.request

# &#35712;&#21462;&#35201;&#23529;&#26597;&#30340;&#31243;&#24335;&#30908;

with open(&#8217;smart-code-review.sh&#8217;, &#8216;r&#8217;) as f:

    code = f.read()[:1000]  # &#21069; 1000 &#23383;&#20803;

# &#27083;&#24314;&#35531;&#27714;

data = {

&#8220;model&#8221;: &#8220;gemini-2.5-flash&#8221;,

&#8220;max_tokens&#8221;: 4096,

&#8220;messages&#8221;: [{

&#8220;role&#8221;: &#8220;user&#8221;,

&#8220;content&#8221;: f&#8220;&#8221;&#8220;&#35531;&#23529;&#26597;&#20197;&#19979;&#31243;&#24335;&#30908;&#30340;&#21697;&#36074;&#12289;&#23433;&#20840;&#24615;&#21644;&#21487;&#35712;&#24615;&#65292;&#29992;&#32321;&#39636;&#20013;&#25991;&#35443;&#32048;&#22238;&#31572;&#65306;

{code}

&#35531;&#25552;&#20379;&#65306;

1. &#31243;&#24335;&#30908;&#21697;&#36074;&#35413;&#20272;&#65288;1-10&#20998;&#65289;

2. &#23433;&#20840;&#24615;&#21839;&#38988;&#65288;&#22914;&#26377;&#65289;

3. &#21487;&#35712;&#24615;&#25913;&#36914;&#24314;&#35696;

4. &#26368;&#20339;&#23526;&#36368;&#24314;&#35696;

5. &#20778;&#20808;&#32026;&#27161;&#35387;&#65288;P0/P1/P2&#65289;

&#8220;&#8221;&#8220;

    }]

}

# &#30332;&#36865;&#35531;&#27714;&#21040; proxy

req = urllib.request.Request(

&#8216;http://127.0.0.1:41242/v1/messages&#8217;,

    data=json.dumps(data).encode(&#8217;utf-8&#8217;),

    headers={

&#8216;Content-Type&#8217;: &#8216;application/json&#8217;,

&#8216;x-api-key&#8217;: &#8216;dummy&#8217;,  # proxy &#19981;&#38656;&#35201;&#30495;&#23526; API key

&#8216;anthropic-version&#8217;: &#8216;2023-06-01&#8217;

    }

)

print(&#8221;&#128269; &#38283;&#22987; Code Review...&#8221;)

print(&#8221;&#128225; &#20351;&#29992; Gemini 2.5 Flash via Proxy\n&#8221;)

with urllib.request.urlopen(req) as response:

    result = json.loads(response.read())

# &#39023;&#31034;&#23529;&#26597;&#32080;&#26524;

print(&#8221;=&#8221; * 60)

print(&#8221;&#128203; CODE REVIEW REPORT&#8221;)

print(&#8221;=&#8221; * 60)

print(result[&#8217;content&#8217;][0][&#8217;text&#8217;])

print(&#8221;\n&#8221; + &#8220;=&#8221; * 60)

# &#39023;&#31034;&#20351;&#29992;&#32113;&#35336;

    usage = result[&#8217;usage&#8217;]

print(f&#8220;\n&#128202; Token &#20351;&#29992;&#24773;&#27841;&#65306;&#8221;)

print(f&#8220;   - Input tokens: {usage[&#8217;input_tokens&#8217;]}&#8221;)

print(f&#8220;   - Output tokens: {usage[&#8217;output_tokens&#8217;]}&#8221;)

print(f&#8220;   - Total: {usage[&#8217;input_tokens&#8217;] + usage[&#8217;output_tokens&#8217;]}&#8221;)</code></pre><p></p><h3><strong>Bash &#23526;&#20316;</strong></h3><p>&#21109;&#24314; `review-test.sh`&#65306;</p><pre><code>#!/bin/bash

CODE=$(cat ~/dot-agents-test/smart-code-review.sh | head -30)

curl -X POST http://127.0.0.1:41242/v1/messages \

  -H &#8220;Content-Type: application/json&#8221; \

-H &#8220;x-api-key: dummy&#8221; \

  -H &#8220;anthropic-version: 2023-06-01&#8221; \

-d @- &lt;&lt; JSON | jq -r &#8216;.content[0].text&#8217;

{

  &#8220;model&#8221;: &#8220;gemini-2.5-flash&#8221;,

  &#8220;max_tokens&#8221;: 4096,

  &#8220;messages&#8221;: [{

    &#8220;role&#8221;: &#8220;user&#8221;,

    &#8220;content&#8221;: &#8220;&#35531;&#23529;&#26597;&#20197;&#19979;&#31243;&#24335;&#30908;&#30340;&#21697;&#36074;&#12289;&#23433;&#20840;&#24615;&#21644;&#21487;&#35712;&#24615;&#65292;&#29992;&#32321;&#39636;&#20013;&#25991;&#35443;&#32048;&#22238;&#31572;&#65306;\n\n${CODE}&#8221;

  }]

}

</code></pre><p></p><div><hr></div><h2><strong>&#129514; Part 4: &#23526;&#38555;&#28204;&#35430;&#32080;&#26524;</strong></h2><h3><strong>&#22519;&#34892;&#28204;&#35430;</strong></h3><pre><code>cd ~/dot-agents-test

python3 gemini-proxy-review.py article-1-claude-subscription-code-review.md
</code></pre><p></p><h3><strong>&#28204;&#35430;&#36664;&#20986;&#65288;&#23526;&#28204;&#32080;&#26524;&#65289;</strong></h3><pre><code>&#128269; &#38283;&#22987; Code Review...

&#128225; &#20351;&#29992; Gemini 2.5 Flash via Proxy

============================================================

&#128203; CODE REVIEW REPORT

============================================================

### &#31243;&#24335;&#30908;&#21697;&#36074;&#35413;&#20272; (&#20998;&#25976;&#65306;7/10)

&#36889;&#20221;&#25945;&#23416;&#25991;&#31456;&#30340;&#32080;&#27083;&#28165;&#26224;&#65292;&#20998;&#28858;&#24555;&#36895;&#29256;&#21644;&#23436;&#25972;&#29256;&#65292;&#20415;&#26044;&#19981;&#21516;&#31243;&#24230;&#30340;&#35712;&#32773;

&#24555;&#36895;&#29702;&#35299;&#12290;&#25552;&#20379;&#30340;&#25351;&#20196;&#22810;&#25976;&#26159;&#27491;&#30906;&#19988;&#30452;&#25509;&#30340;&#65292;&#25972;&#39636;&#37007;&#36655;&#27969;&#26274;&#12290;

### &#23433;&#20840;&#24615;&#21839;&#38988;

**P1 - OAuth Token &#30828;&#32232;&#30908;**

- &#21839;&#38988;&#65306;&#30452;&#25509;&#23559; OAuth token &#20197;&#26126;&#25991;&#24418;&#24335;&#23637;&#31034;

- &#39080;&#38570;&#65306;&#21487;&#33021;&#35492;&#23566;&#20351;&#29992;&#32773;&#23559;&#20854;&#30828;&#32232;&#30908;&#21040;&#33139;&#26412;&#25110;&#20844;&#38283;&#30340;&#22320;&#26041;

- &#24314;&#35696;&#65306;&#20351;&#29992;&#20308;&#20301;&#31526; (YOUR_CLAUDE_OAUTH_TOKEN) &#20006;&#35686;&#21578;&#20999;&#21247;&#25552;&#20132;&#21040;&#29256;&#26412;&#25511;&#21046;

**P1 - curl | bash &#33258;&#21205;&#23433;&#35037;&#33139;&#26412;**

- &#21839;&#38988;&#65306;Bun &#30340;&#23433;&#35037;&#25351;&#20196; `curl -fsSL https://bun.sh/install | bash`

- &#39080;&#38570;&#65306;&#30452;&#25509;&#22519;&#34892;&#24478;&#32178;&#36335;&#29554;&#21462;&#30340;&#33139;&#26412;

- &#24314;&#35696;&#65306;&#22686;&#21152;&#23433;&#20840;&#25552;&#31034;&#65292;&#24314;&#35696;&#20351;&#29992;&#32773;&#20808;&#23529;&#26597;&#33139;&#26412;&#20839;&#23481;

**P0 - &#25351;&#20196;&#19981;&#23436;&#25972;**

- &#21839;&#38988;&#65306;Step 1 &#25351;&#20196;&#34987;&#25130;&#26039;&#28858; `claude setup-`

- &#24433;&#38911;&#65306;&#23566;&#33268;&#25351;&#20196;&#28961;&#27861;&#22519;&#34892;

- &#20462;&#27491;&#65306;&#25033;&#28858; `claude setup-token`

### &#21487;&#35712;&#24615;&#25913;&#36914;&#24314;&#35696;

**P2 - &#29872;&#22659;&#35722;&#25976;&#23531;&#20837;**

- &#21839;&#38988;&#65306;&#21482;&#25552;&#21450; `~/.zshrc`&#65292;&#26410;&#32771;&#24942;&#20854;&#20182; shell &#20351;&#29992;&#32773;

- &#24314;&#35696;&#65306;&#25552;&#21450; `~/.bashrc` &#25110;&#26356;&#36890;&#29992;&#30340; `~/.profile`

**P2 - &#31456;&#31680;&#32232;&#25490;&#19968;&#33268;&#24615;**

- &#21839;&#38988;&#65306;&#12300;&#23526;&#20316;&#27493;&#39519;&#12301;&#19981;&#22816;&#23436;&#25972;&#65292;&#33287;&#24555;&#36895;&#29256;&#26377;&#37325;&#35079;

- &#24314;&#35696;&#65306;&#32113;&#19968;&#27493;&#39519;&#35498;&#26126;&#25110;&#25552;&#20379;&#26356;&#28145;&#20837;&#30340;&#35299;&#37323;

### &#26368;&#20339;&#23526;&#36368;&#24314;&#35696;

1. **&#33139;&#26412;&#39791;&#26834;&#24615;** - &#20351;&#29992; `set -euo pipefail`

2. **&#20381;&#36084;&#37782;&#23450;** - &#30906;&#20445; `bun.lockb` &#27284;&#26696;&#25552;&#20132;&#21040; Git

3. **&#29872;&#22659;&#35722;&#25976;&#20906;&#31561;&#24615;** - &#27298;&#26597;&#35722;&#25976;&#26159;&#21542;&#23384;&#22312;&#20877;&#28155;&#21152;

============================================================

&#128202; Token &#20351;&#29992;&#24773;&#27841;&#65306;

   - Input tokens: 923

   - Output tokens: 1702

   - Total: 2625 tokens

&#9201;&#65039; &#22519;&#34892;&#26178;&#38291;&#65306;&#32004; 5-7 &#31186;</code></pre><p></p><div><hr></div><h2><strong>&#128680; &#27880;&#24847;&#20107;&#38917;&#33287;&#38480;&#21046;</strong></h2><h3><strong>1. Proxy &#21487;&#29992;&#24615;</strong></h3><p>&#9888;&#65039; <strong>gemini-cli-anthropic proxy &#24517;&#38920;&#25345;&#32396;&#36939;&#34892;</strong></p><p><strong>&#35299;&#27770;&#26041;&#26696; A - systemd service (Linux)</strong></p><p><strong>or</strong></p><p><strong>&#35299;&#27770;&#26041;&#26696; B - pm2 (Node.js)</strong></p><div><hr></div><h2><strong>&#128172; &#35258;&#24471;&#26377;&#24171;&#21161;&#21966;&#65311;</strong></h2><ul><li><p>&#127775; &#20998;&#20139;&#32102;&#38656;&#35201;&#30340;&#26379;&#21451;</p></li><li><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p></li></ul><div><hr></div><p>&#10024; <strong>&#26356;&#22810;&#24555;&#36895;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; [<a href="https://leapdesign.ai/">https://leapdesign.ai/</a>)</p>]]></content:encoded></item><item><title><![CDATA[[Looplia] 10分鐘設定自動化 Code Review]]></title><description><![CDATA[&#29992; Claude Subscription OAuth &#35469;&#35657; + Looplia &#25972;&#21512;&#65292;10 &#20998;&#37912;&#23436;&#25104; AI &#33258;&#21205;&#21270;&#31243;&#24335;&#30908;&#23529;&#26597;&#35373;&#23450;]]></description><link>https://memo.jimmyliao.net/p/looplia-10-code-review</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/looplia-10-code-review</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Wed, 11 Feb 2026 15:10:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p><p>&#10024; <strong>&#26356;&#22810;&#24555;&#36895;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; &#35531;&#25214;&#30446;&#21069;<a href="https://leapdesign.ai/">&#26381;&#21209;&#20837;&#21475;</a>: </p><div><hr></div><p>&#25105;&#36889;&#37002;&#32972;&#26223;: </p><ol><li><p>&#24050;&#32147;&#26377;&#33258;&#24049;&#32722;&#24931;&#30340;&#24037;&#20316;&#27969;&#31243;, &#21487;&#20197; Agentic CLI (Claude Code +  Gemini-CLI + Codex), &#36028;&#19978; PR link &#20570; Code review, comment, change PR status</p></li><li><p>&#22296;&#38538;&#30340; code review &#27969;&#31243;: &#26377; mono repo, &#20063;&#26377;&#21516;&#26178;&#35201;&#30475;&#22810;&#20491;&#30456;&#38364; repo. &#26356;&#22823;&#22810;&#25976;&#26159; user story based &#26371;&#36328;&#19981;&#21516;&#30340; repo&#8230;&#24456;&#24819;&#25226; code review &#20043;&#21069;&#30340; review convention &#31561;&#31561;&#20808;&#23450;&#32681;&#19979;&#20358;</p></li></ol><p>&#20043;&#21069;&#23601;&#32893;&#35498; <a href="https://indiehack.in/">Spencer</a> &#23531;&#20102;&#19968;&#20491; Skills-first agentic workflow CLI &#30340;&#38283;&#28304;&#23560;&#26696;: <a href="https://github.com/memorysaver/looplia-core">Looplia</a> , &#20808;&#25343;&#20358;&#20570;&#36889;&#31278;&#33258;&#21205;&#21270;&#25033;&#35442;&#26371;&#24456;&#26041;&#20415;. Then&#8230;Go!</p><p></p><h2><strong>&#127919; &#20320;&#26371;&#23416;&#21040;&#20160;&#40636;</strong></h2><ul><li><p>10 &#20998;&#37912;&#20839;&#23436;&#25104; Claude Code Subscription OAuth &#35469;&#35657;</p></li><li><p>&#25972;&#21512; Looplia &#23526;&#29694;&#33258;&#21205;&#21270; code review workflow</p></li><li><p>&#24314;&#31435;&#23436;&#25972;&#30340;&#21697;&#36074;&#12289;&#23433;&#20840;&#24615;&#12289;&#21487;&#35712;&#24615;&#23529;&#26597;&#27969;&#31243;</p></li><li><p>&#29983;&#25104;&#32080;&#27083;&#21270;&#30340; code review &#22577;&#21578;</p></li></ul><div><hr></div><h2><strong>&#9889; &#36895;&#26597;&#29256;: Looplia + </strong>Anthropic Subscription OAuth</h2><pre><code># 1. &#29554;&#21462; OAuth token&#65288;30 &#31186;&#65292;&#26371;&#33258;&#21205;&#25171;&#38283;&#28687;&#35261;&#22120;&#65289;

claude setup-token

# 2. &#35373;&#23450;&#29872;&#22659;&#35722;&#25976;

export CLAUDE_CODE_OAUTH_TOKEN=&#8221;sk-ant-oat01-...&#8221;

echo &#8216;export CLAUDE_CODE_OAUTH_TOKEN=&#8221;...&#8221;&#8217; &gt;&gt; ~/.zshrc

# 3. &#37197;&#32622; Looplia &#20351;&#29992; Claude Haiku 4.5

looplia config provider preset CLAUDE_CODE_SUBSCRIPTION_HAIKU

# 4. &#24314;&#31435;&#20006;&#22519;&#34892; code review workflow

looplia build &#8220;create a code review workflow&#8221;</code></pre><p></p><h2><strong>&#128214; &#23436;&#25972;&#29256;</strong></h2><p>&#26412;&#25991;&#29992; <strong>**Claude Code Subscription**</strong> + <strong>**Looplia**</strong> &#26694;&#26550;&#65292;&#25945;&#24744;&#24555;&#36895;&#24314;&#31435;&#33258;&#21205;&#21270; code review &#27969;&#31243;&#12290;</p><blockquote><p>&#128161; <strong>**&#36969;&#21512;&#35504;&#65311;**</strong></p><ul><li><p>&#24050;&#26377; Claude Max subscription</p></li><li><p>&#24819;&#20351;&#29992;&#26368;&#26032; Claude &#27169;&#22411;</p></li><li><p>&#38656;&#35201;&#25972;&#21512;&#21040;&#38283;&#30332;&#24037;&#20316;&#27969;&#31243;</p></li></ul></blockquote><p>&#8212;</p><h3><strong>&#29872;&#22659;&#28310;&#20633;</strong></h3><p><strong>&#38656;&#27714;</strong>&#65306;</p><ul><li><p>Claude Code CLI 2.1.39+</p></li><li><p>Bun 1.0+ (JavaScript runtime &amp; package manager)</p></li><li><p>Claude subscription</p></li></ul><p></p><p><strong>&#23433;&#35037;&#30906;&#35469;</strong>&#65306;</p><pre><code># &#27298;&#26597; Claude CLI &#29256;&#26412;

claude --version

# &#36664;&#20986;&#65306;2.1.39 (Claude Code)

# &#27298;&#26597; Bun &#29256;&#26412;

bun --version

# &#36664;&#20986;&#65306;1.0.0+</code></pre><p></p><p><strong>&#23433;&#35037; Looplia</strong>&#65306;</p><pre><code># 1. Clone repository

git clone https://github.com/memorysaver/looplia-core.git

cd looplia-core

# 2. &#23433;&#35037;&#20381;&#36084;&#12289;&#24314;&#32622;&#12289;&#24314;&#31435;&#20840;&#22495;&#36899;&#32080;&#65288;&#19968;&#27425;&#23436;&#25104;&#65289;

bun install &amp;&amp; bun run build &amp;&amp; bun link

# 3. &#39511;&#35657;&#23433;&#35037;&#25104;&#21151;

looplia --version

# &#36664;&#20986;&#65306;looplia/1.x.x

# 4. &#21021;&#22987;&#21270; workspace&#65288;&#26371;&#22312; ~/.looplia/ &#24314;&#31435;&#37197;&#32622;&#65289;

looplia init --yes</code></pre><p></p><div><hr></div><h3><strong>&#23526;&#20316;&#27493;&#39519;</strong></h3><h4><strong>Step 1: &#29554;&#21462; OAuth Token</strong></h4><pre><code># Claude CLI &#26371;&#33258;&#21205;&#25171;&#38283;&#28687;&#35261;&#22120;&#23436;&#25104; OAuth &#25480;&#27402;

claude setup-token
</code></pre><p></p><p><strong>&#25104;&#21151;&#30059;&#38754;</strong>&#65306;</p><pre><code>&#10003; Long-lived authentication token created successfully!

Your OAuth token (valid for 1 year):

sk-ant-oat01-_6ejYBCQ2Q_3t4dvivHWdO4S9vlIC_4iHz1W8QsDzS3p_...

Store this token securely. You won&#8217;t be able to see it again.
</code></pre><p></p><div><hr></div><h4><strong>Step 2: &#35373;&#23450;&#29872;&#22659;&#35722;&#25976;</strong></h4><pre><code># &#35373;&#23450;&#29872;&#22659;&#35722;&#25976;

export CLAUDE_CODE_OAUTH_TOKEN=&#8221;sk-ant-oat01-xxxx...&#8221;

# &#27704;&#20037;&#20445;&#23384;&#21040; shell &#37197;&#32622;&#65288;&#37325;&#35201;&#65281;&#65289;

echo &#8216;export CLAUDE_CODE_OAUTH_TOKEN=&#8221;sk-ant-oat01-...&#8221;&#8217; &gt;&gt; ~/.zshrc

source ~/.zshrc

# &#39511;&#35657;&#35373;&#23450;&#25104;&#21151;

echo ${CLAUDE_CODE_OAUTH_TOKEN:0:30}...

# &#36664;&#20986;&#65306;sk-ant-oat01-_6ejYBCQ2Q_3t4dvi...</code></pre><p></p><div><hr></div><h4><strong>Step 3: &#37197;&#32622; Looplia</strong></h4><pre><code># &#19968;&#37749;&#35373;&#23450;&#20351;&#29992; Claude Haiku 4.5&#65288;&#26368;&#30465;&#37666;&#30340;&#36984;&#25799;&#65289;

looplia config provider preset CLAUDE_CODE_SUBSCRIPTION_HAIKU

# &#39511;&#35657;&#37197;&#32622;

looplia config provider show</code></pre><p></p><p><strong>&#38928;&#26399;&#36664;&#20986;</strong>&#65306;</p><pre><code>Model Provider Configuration:

  Status: configured &#10003;

  Preset: CLAUDE_CODE_SUBSCRIPTION_HAIKU

  Provider: Anthropic (direct)

  Auth Source: Claude Code Subscription (OAuth)

  Agent Models:

    Main: claude-haiku-4-5-20251001

    Executor: claude-haiku-4-5-20251001</code></pre><p></p><p><strong>&#37197;&#32622;&#27284;&#26696;&#20301;&#32622; =&gt; </strong><code>~/.looplia/looplia.setting.json</code></p><div><hr></div><h4><strong>Step 4: &#20351;&#29992; Looplia &#22519;&#34892; Code Review</strong></h4><p>&#35373;&#23450;&#23436;&#25104;&#24460;&#65292;&#23601;&#21487;&#20197;&#29992; Looplia &#33258;&#21205;&#24314;&#31435;&#21644;&#22519;&#34892; code review workflow&#65306;</p><h5><strong>&#24314;&#31435; Code Review Workflow</strong></h5><pre><code># Looplia &#26371;&#33258;&#21205;&#24314;&#31435;&#23436;&#25972;&#30340; code review workflow

looplia build &#8220;create a code review workflow that analyzes code quality, security, and readability&#8221;</code></pre><p></p><p><strong>Looplia &#26371;&#33258;&#21205;&#29983;&#25104;</strong>&#65306;</p><ul><li><p>&#31243;&#24335;&#30908;&#21697;&#36074;&#20998;&#26512;&#27493;&#39519;</p></li><li><p>&#23433;&#20840;&#24615;&#23529;&#26597;&#27493;&#39519;</p></li><li><p>&#21487;&#35712;&#24615;&#35413;&#20272;&#27493;&#39519;</p></li><li><p>&#32156;&#21512;&#22577;&#21578;&#29983;&#25104;&#27493;&#39519;</p></li></ul><p><strong>&#29983;&#25104;&#30340; workflow &#27284;&#26696;&#20301;&#32622;</strong>&#65306;</p><pre><code>~/.looplia/workflows/code-review-quality-security-readability-[date].md</code></pre><div><hr></div><h5><strong>&#22519;&#34892; Workflow</strong></h5><pre><code># &#22519;&#34892;&#21083;&#24314;&#31435;&#30340; workflow

looplia run code-review-quality-security-readability \

  --context &#8220;&#35531;&#23529;&#26597;&#23560;&#26696;&#20013;&#30340;&#20027;&#35201;&#31243;&#24335;&#30908;&#27284;&#26696;&#8221;</code></pre><p></p><p><strong>&#22519;&#34892;&#36942;&#31243;</strong>&#65306;</p><ol><li><p>&#128269; &#20998;&#26512;&#31243;&#24335;&#30908;&#32080;&#27083;&#21644;&#21697;&#36074;</p></li><li><p>&#128274; &#25475;&#25551;&#23433;&#20840;&#24615;&#21839;&#38988;</p></li><li><p>&#128214; &#35413;&#20272;&#21487;&#35712;&#24615;</p></li><li><p>&#128202; &#29983;&#25104;&#32156;&#21512;&#22577;&#21578;</p></li></ol><p><strong>&#36664;&#20986;&#27284;&#26696;&#20301;&#32622;</strong>&#65306;</p><pre><code>~/.looplia/sandbox/[session-id]/outputs/

&#9500;&#9472;&#9472; comprehensive_report.md    # &#23436;&#25972;&#23529;&#26597;&#22577;&#21578;

&#9500;&#9472;&#9472; quality_analysis.json      # &#21697;&#36074;&#35413;&#20272;

&#9500;&#9472;&#9472; security_analysis.json     # &#23433;&#20840;&#24615;&#20998;&#26512;

&#9492;&#9472;&#9472; readability_review.json    # &#21487;&#35712;&#24615;&#35413;&#20272;</code></pre><p></p><div><hr></div><h5><strong>&#22577;&#21578;&#31684;&#20363;</strong></h5><p><code>comprehensive_report.md</code> &#21253;&#21547;&#65306;</p><ol><li><p><strong>&#22519;&#34892;&#25688;&#35201;</strong></p></li></ol><ul><li><p>&#25972;&#39636;&#35413;&#20998;&#65288;&#11088;&#11088;&#11088;&#11088;&#65289;</p></li><li><p>&#20027;&#35201;&#30332;&#29694;&#25688;&#35201;</p></li><li><p>&#20778;&#20808;&#25913;&#36914;&#38917;&#30446;</p></li></ul><ol start="2"><li><p><strong>&#31243;&#24335;&#30908;&#21697;&#36074;&#35413;&#20272;</strong></p></li></ol><ul><li><p>&#32080;&#27083;&#20998;&#26512;</p></li><li><p>&#35079;&#38620;&#24230;&#35413;&#20272;</p></li><li><p>&#25913;&#36914;&#24314;&#35696;</p></li></ul><ol start="3"><li><p><strong>&#23433;&#20840;&#24615;&#35413;&#20272;</strong></p></li></ol><ul><li><p>&#30332;&#29694;&#30340;&#28431;&#27934;&#28165;&#21934;&#65288;&#20381;&#20778;&#20808;&#32026;&#65306;P0/P1/P2&#65289;</p></li><li><p>&#20462;&#24489;&#24314;&#35696;</p></li><li><p>&#26368;&#20339;&#23526;&#36368;</p></li></ul><ol start="4"><li><p><strong>&#21487;&#35712;&#24615;&#35413;&#20272;</strong></p></li></ol><ul><li><p>&#21629;&#21517;&#35215;&#31684;&#27298;&#26597;</p></li><li><p>&#31243;&#24335;&#30908;&#39080;&#26684;&#19968;&#33268;&#24615;</p></li><li><p>&#25991;&#20214;&#23436;&#25972;&#24615;</p></li></ul><ol start="5"><li><p><strong>&#34892;&#21205;&#38917;&#30446;</strong></p></li></ol><ul><li><p>&#20778;&#20808;&#38918;&#24207;&#25490;&#21015;&#30340;&#25913;&#36914;&#28165;&#21934;</p></li><li><p>&#27599;&#38917;&#38928;&#20272;&#24037;&#20316;&#37327;</p></li><li><p>&#38928;&#26399;&#25928;&#30410;</p></li></ul><div><hr></div><h5><strong>&#24120;&#35211;&#21839;&#38988; &#10067;</strong></h5><p><strong>Q: Build &#39023;&#31034; &#8220;No result received from analysis&#8221; &#37679;&#35492;&#65311;</strong></p><p>&#36889;&#26159;<strong>**&#24050;&#30693;&#21839;&#38988;**</strong>&#65292;&#19981;&#24433;&#38911;&#20351;&#29992;&#65281;&#38614;&#28982;&#39023;&#31034;&#37679;&#35492;&#65292;&#20294; workflow &#27284;&#26696;&#24050;&#25104;&#21151;&#29983;&#25104;&#12290;</p><p><strong>&#37679;&#35492;&#30059;&#38754;</strong>&#65306;</p><pre><code>&#9484; Workflow Builder &#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;

&#9474; &#10007; Error                                       &#9474;

&#9474; No result received from analysis              &#9474;

&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

&#10007; Build failed: Build cancelled by user</code></pre><p></p><p><strong>&#35299;&#27770;&#26041;&#27861;</strong>&#65306;</p><ol><li><p>&#9000;&#65039; &#25353; `Ctrl+C` &#36339;&#20986;&#37679;&#35492;&#30059;&#38754;</p></li><li><p>&#128193; &#30452;&#25509;&#26597;&#30475;&#29983;&#25104;&#30340; workflow &#27284;&#26696;&#65306;</p></li></ol><pre><code>ls -lht ~/.looplia/workflows/ | head -5</code></pre><ol start="3"><li><p>&#9989; &#20351;&#29992;&#29983;&#25104;&#30340; workflow &#21517;&#31281;&#22519;&#34892; `looplia run`</p></li></ol><p><strong>&#31684;&#20363;</strong>&#65306;</p><pre><code># &#21363;&#20351;&#39023;&#31034;&#37679;&#35492;&#65292;workflow &#20173;&#25104;&#21151;&#29983;&#25104;

# &#27284;&#26696;&#20301;&#32622;&#65306;~/.looplia/workflows/code-review-quality-security-readability-build-2026-02-11-xxxx.md

# &#30452;&#25509;&#22519;&#34892;&#21363;&#21487;

looplia run code-review-quality-security-readability-build-2026-02-11-xxxx</code></pre><div><hr></div><p><strong>Q: &#22914;&#20309;&#23529;&#26597;&#29305;&#23450;&#27284;&#26696;&#65311;</strong></p><pre><code># &#22312; --context &#20013;&#25351;&#23450;&#27284;&#26696;

looplia run code-review-quality-security-readability \

  --context &#8220;&#35531;&#23529;&#26597; src/main.py &#27284;&#26696;&#8221;</code></pre><p></p><p><strong>Q: &#22914;&#20309;&#23458;&#35069;&#21270;&#23529;&#26597;&#37325;&#40670;&#65311;</strong></p><pre><code># &#22312;&#24314;&#31435; workflow &#26178;&#25351;&#23450;&#37325;&#40670;

looplia build &#8220;create a code review workflow focusing on security vulnerabilities and performance issues&#8221;</code></pre><p></p><p><strong>Q: Workflow &#22519;&#34892;&#22833;&#25943;&#24590;&#40636;&#36774;&#65311;</strong></p><p>&#27298;&#26597;&#20197;&#19979;&#38917;&#30446;&#65306;</p><p>1. &#9989; `CLAUDE_CODE_OAUTH_TOKEN` &#29872;&#22659;&#35722;&#25976;&#26159;&#21542;&#35373;&#23450;</p><p>2. &#9989; Looplia provider &#37197;&#32622;&#26159;&#21542;&#27491;&#30906;</p><p>3. &#9989; &#26597;&#30475; `~/.looplia/logs/` &#30340;&#37679;&#35492;&#35338;&#24687;</p><div><hr></div><h2><strong>&#128172; &#35342;&#35542;&#33287;&#35330;&#38321;</strong></h2><p><strong>&#35258;&#24471;&#26377;&#24171;&#21161;&#21966;&#65311;</strong></p><ul><li><p>&#127775; &#20998;&#20139;&#32102;&#38656;&#35201;&#30340;&#26379;&#21451;</p></li><li><p>&#128140; [<a href="https://leapdesign.ai/zh/subscribe/">&#35330;&#38321;&#38651;&#23376;&#22577;</a>](<a href="https://leapdesign.ai/zh/subscribe/">https://leapdesign.ai/zh/subscribe/</a>)&#65292;&#27599;&#36913;&#25910;&#21040;&#26368;&#26032;&#25216;&#34899;&#25991;&#31456;</p></li></ul><p><strong>&#24819;&#30475;&#26356;&#22810;&#23526;&#25136;&#26696;&#20363;&#65311;</strong></p><p>&#19979;&#19968;&#31687;&#25991;&#31456;&#23559;&#20171;&#32057;&#22914;&#20309;&#29992; Gemini Proxy &#31680;&#30465; 70% &#25104;&#26412;&#65292;&#35352;&#24471;&#35330;&#38321;&#19981;&#37679;&#36942;&#65281;</p><div><hr></div><p>&#10024; <strong>&#26356;&#22810;&#24555;&#36895;&#25216;&#34899;&#35299;&#27770;&#26041;&#26696;</strong> &#8594; &#35531;&#25214;&#30446;&#21069;&#26381;&#21209;&#20837;&#21475; <a href="https://leapdesign.ai/">https://leapdesign.ai/</a></p>]]></content:encoded></item><item><title><![CDATA[TranslateGemma：arXiv 論文翻譯工具]]></title><description><![CDATA[&#20351;&#29992; Google TranslateGemma &#27169;&#22411;&#22312; Colab &#20813;&#36027; T4 GPU &#19978;&#32763;&#35695; arXiv &#35542;&#25991;&#65292;&#29986;&#29983;&#38617;&#35486;&#23565;&#29031; HTML&#12290;]]></description><link>https://memo.jimmyliao.net/p/translategemmaarxiv</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/translategemmaarxiv</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Mon, 19 Jan 2026 15:53:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://memo.jimmyliao.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading JimmyLiao's memo (memo.jimmyliao.net)! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><h4><strong>&#20844;&#21578;</strong>: &#38928;&#35336;&#26371;&#25512;&#20986;<a href="https://memo.jimmyliao.net/p/a75">&#35330;&#38321;&#21046;</a>, &#20043;&#24460;&#25033;&#35442;&#26371;&#37096;&#20998;&#36681;&#24448;&#20854;&#20182;&#24179;&#21488;, &#30070;&#28982;&#20320;&#20063;&#21487;&#20197;&#25345;&#32396;&#38364;&#27880;&#36889;&#20491;&#38651;&#23376;&#22577;&#25910;&#21040;&#35330;&#38321;&#28040;&#24687;.</h4><h4><strong>Announcement:</strong> We are planning to launch a subscription model and may partially migrate to other platforms in the future. Please stay tuned to <a href="https://memo.jimmyliao.net/p/a75">this newsletter</a> for updates.</h4></blockquote><h2><strong>&#25216;&#34899;&#23526;&#20316;</strong></h2><h3><strong>&#26550;&#27083;</strong></h3><pre><code><code>&#20351;&#29992;&#32773;

  &#8595;

Colab Notebook

  &#9500;&#9472; &#29872;&#22659;&#20597;&#28204;

  &#9500;&#9472; &#19979;&#36617; arXiv PDF (urllib)

  &#9500;&#9472; &#25552;&#21462;&#25991;&#23383; (PyMuPDF)

  &#9500;&#9472; &#32763;&#35695; (TranslateGemma 4B on T4 GPU)

  &#9500;&#9472; &#24460;&#34389;&#29702; (OpenCC for zh-TW)

  &#9492;&#9472; &#29986;&#29983; HTML

  &#8595;

&#19979;&#36617;&#21040;&#26412;&#22320;</code></code></pre><h3><strong>&#35215;&#26684;</strong></h3><p><strong>**&#27169;&#22411;**</strong></p><p>- TranslateGemma 4B (~8.6GB)</p><p>- &#23560;&#38272;&#37341;&#23565;&#23416;&#34899;&#25991;&#26412;&#35347;&#32244;</p><p>- &#25903;&#25588; 50+ &#31278;&#35486;&#35328;</p><p><strong>**&#30828;&#39636;&#38656;&#27714;**</strong></p><p>- Google Colab &#20813;&#36027; T4 GPU (15GB VRAM)</p><p>- &#25110; macOS 16GB+ VRAM</p><p>- &#25110;&#26412;&#22320; NVIDIA GPU (10GB+ VRAM)</p><p></p><p><strong>**&#25928;&#33021;**</strong></p><p>- &#27599;&#38913;&#32763;&#35695;&#26178;&#38291;&#65306;~3 &#20998;&#37912;</p><p>- &#39318;&#27425;&#27169;&#22411;&#19979;&#36617;&#65306;~5 &#20998;&#37912;&#65288;&#19968;&#27425;&#24615;&#65289;</p><p>- &#25104;&#26412;&#65306;$0</p><div><hr></div><h2><strong>&#21069;&#32622;&#28310;&#20633;</strong></h2><p>1. Google &#24115;&#34399;&#65288;Colab&#65289;</p><p>2. [HuggingFace &#24115;&#34399;](https://huggingface.co/join)</p><p>3. [HF Token](https://huggingface.co/settings/tokens)&#65288;&#35712;&#21462;&#27402;&#38480;&#65289;</p><p>4. [&#25509;&#21463; Gemma &#20351;&#29992;&#26781;&#27454;](https://huggingface.co/google/translategemma-4b-it)</p><div><hr></div><h2><strong>&#20351;&#29992;&#27493;&#39519;</strong></h2><h3><strong>Step 1: &#21855;&#21205; Notebook</strong></h3><p><strong>**[&#128073; &#22312; Google Colab &#38283;&#21855;](<a href="https://colab.research.google.com/github/jimmyliao/trans-gemma/blob/main/arxiv-reader.ipynb">https://colab.research.google.com/github/jimmyliao/trans-gemma/blob/main/arxiv-reader.ipynb</a>)**</strong></p><p>&#21855;&#29992; GPU&#65306;</p><p>1. <strong>**Runtime**</strong> &#8594; <strong>**Change runtime type**</strong></p><p>2. &#36984;&#25799; <strong>**T4 GPU**</strong></p><p>3. <strong>**Save**</strong></p><div><hr></div><h3><strong>Step 2: &#29872;&#22659;&#20597;&#28204;</strong></h3><p>&#22519;&#34892;&#31532;&#19968;&#20491; cell&#65306;</p><pre><code>ENV = detect_environment()</code></pre><p>&#36664;&#20986;&#31684;&#20363;&#65306;</p><pre><code>&#128421;&#65039;  Environment: COLAB

&#128013; Python: 3.10

&#128194; Working dir: /content

&#9989; Environment: COLAB - Ready!</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w-52!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w-52!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 424w, https://substackcdn.com/image/fetch/$s_!w-52!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 848w, https://substackcdn.com/image/fetch/$s_!w-52!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 1272w, https://substackcdn.com/image/fetch/$s_!w-52!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w-52!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png" width="1456" height="388" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185074894?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w-52!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 424w, https://substackcdn.com/image/fetch/$s_!w-52!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 848w, https://substackcdn.com/image/fetch/$s_!w-52!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 1272w, https://substackcdn.com/image/fetch/$s_!w-52!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4036164-237c-4f85-8bfd-50296af8e0e9_2252x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p><p>Notebook &#33258;&#21205;&#36969;&#25033; Colab/GCP/Local &#29872;&#22659;&#12290;</p><div><hr></div><h3><strong>Step 3: &#23433;&#35037;&#30456;&#20381;&#22871;&#20214;</strong></h3><pre><code>!pip install -q huggingface_hub transformers accelerate \

             sentencepiece protobuf pymupdf pillow \

             opencc-python-reimplemented</code></pre><p><strong>**&#38364;&#37749;&#22871;&#20214;&#65306;**</strong> `opencc-python-reimplemented`</p><p>- &#23559;&#31777;&#39636;&#20013;&#25991;&#36664;&#20986;&#36681;&#25563;&#28858;&#32321;&#39636;&#20013;&#25991;&#65288;zh-TW&#65289;</p><p>- &#30906;&#20445;&#21488;&#28771;&#29992;&#35486;&#27491;&#30906;&#65288;&#22522;&#26044; not &#22522;&#20110;&#65289;</p><div><hr></div><h3><strong>Step 4: HuggingFace &#35469;&#35657;</strong></h3><p>&#36664;&#20837; HF token&#65306;</p><pre><code>&#128221; Please enter HuggingFace Token:

   1. Get token: https://huggingface.co/settings/tokens

   2. Accept model: https://huggingface.co/google/translategemma-4b-it

Token: &#9608;</code></pre><p><strong>**&#23433;&#20840;&#25552;&#31034;&#65306;**</strong> &#20351;&#29992; Colab Secrets (&#128273;) &#31649;&#29702; token</p><div><hr></div><h3><strong>Step 5: &#36617;&#20837;&#27169;&#22411;</strong></h3><pre><code>from transformers_backend import TransformersBackend

backend = TransformersBackend()

result = backend.load_model()
</code></pre><p></p><p>&#39318;&#27425;&#22519;&#34892;&#36664;&#20986;&#65306;</p><pre><code>&#128640; Loading TranslateGemma (4B)...

&#9203; Downloading model (~8.6GB)...

Downloading: 100% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 8.6G/8.6G [04:32&lt;00:00]

&#9989; Model loaded!

&#128205; Device: cuda:0

&#128202; Load time: 37.8s

&#128190; Memory: 13.8 GB / 15.0 GB</code></pre><p></p><p>&#24460;&#32396;&#22519;&#34892;&#65306;~30 &#31186;&#65288;&#24555;&#21462;&#65289;</p><div><hr></div><h3><strong>Step 6: &#35373;&#23450;&#32763;&#35695;&#20219;&#21209;</strong></h3><pre><code># arXiv ID

ARXIV_ID = &#8220;2403.08295&#8221;

# &#38913;&#38754;&#31684;&#22285;

SECTIONS = {

&#8220;abstract&#8221;: (1, 3),  # &#31532; 1-3 &#38913;

}

# &#35486;&#35328;&#35373;&#23450;

SOURCE_LANG = &#8220;en&#8221;

TARGET_LANG = &#8220;zh-TW&#8221;  # &#32321;&#39636;&#20013;&#25991;&#65288;&#21488;&#28771;&#65289;

# &#29986;&#29983; HTML

SAVE_HTML = True</code></pre><p></p><p><strong>**&#25903;&#25588;&#35486;&#35328;&#65306;**</strong> `zh-TW`, `zh-CN`, `ja`, `ko`, `fr`, `de`, `es`, `pt`, `ru` &#31561; 50+ &#31278;</p><p><strong>**&#23458;&#35069;&#21270;&#31684;&#20363;&#65306;**</strong></p><p>&#32763;&#35695; Abstract&#65306;</p><pre><code>SECTIONS = {&#8221;intro&#8221;: (2, 5)}</code></pre><p></p><p>&#32763;&#35695;&#20840;&#25991;&#65306;</p><pre><code>SECTIONS = {&#8221;full&#8221;: (1, 20)}</code></pre><p></p><p>&#32763;&#35695;&#25104;&#26085;&#25991;&#65306;</p><pre><code>TARGET_LANG = &#8220;ja&#8221;</code></pre><p></p><div><hr></div><h3><strong>Step 7: &#22519;&#34892;&#32763;&#35695;</strong></h3><pre><code># &#19979;&#36617; PDF

pdf_path, total_pages = download_arxiv(ARXIV_ID)

# &#32763;&#35695;

with tqdm(total=3, desc=&#8221;&#128214; Translating&#8221;) as pbar:

for page_num in range(1, 4):

        text = extract_text(pdf_path, page_num)

        result = backend.translate(text,

                                  source_lang=SOURCE_LANG,

                                  target_lang=TARGET_LANG)

        results.append(result)

        pbar.update(1)</code></pre><p></p><p>&#23526;&#28204;&#36664;&#20986;&#65306;</p><pre><code>&#128229; Downloading arXiv:2403.08295

&#9989; Downloaded: 2403.08295.pdf (17 pages)

&#128640; Translation Started

&#128202; Pages: 3

&#9201;&#65039;  Est. time: ~9 minutes

&#128214; Translating: 33% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9612;    | 1/3 [02:48&lt;05:36, 168.05s]

&#9989; Page 1: 168.05s

&#128214; Translating: 67% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 2/3 [05:51&lt;02:43, 163.25s]

&#9989; Page 2: 163.25s

&#128214; Translating: 100% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 3/3 [08:37&lt;00:00, 166.29s]

&#9989; Page 3: 166.29s

&#9989; Translation Complete!

&#128202; Total: 8 min 37 sec

&#9889; Avg: 2.8 min/page</code></pre><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cPCe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cPCe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 424w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 848w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 1272w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cPCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png" width="1456" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d235dea7-0ce5-4607-a043-b26575737e09_2252x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291818,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185074894?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cPCe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 424w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 848w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 1272w, https://substackcdn.com/image/fetch/$s_!cPCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd235dea7-0ce5-4607-a043-b26575737e09_2252x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div><hr></div><h3><strong>Step 8: &#26597;&#30475;&#32080;&#26524;</strong></h3><p>Notebook &#36664;&#20986;&#65306;</p><pre><code>================================================================================

&#128196; Page 1 - ABSTRACT

================================================================================

&#128221; Original:

--------------------------------------------------------------------------------

This work introduces Gemma, a family of lightweight, state-of-the-art open

models built from the research and technology used to create Gemini models.

&#127760; Translation:

--------------------------------------------------------------------------------

&#35542;&#25991;&#25688;&#35201;&#65306;

Gemma &#26159;&#19968;&#31995;&#21015;&#22522;&#26044; Gemini &#30340;&#36629;&#37327;&#32026;&#12289;&#20808;&#36914;&#30340;&#38283;&#28304;&#27169;&#22411;&#12290;&#36889;&#20123;&#27169;&#22411;&#22312;&#35486;&#35328;&#29702;&#35299;&#12289;

&#25512;&#29702;&#21644;&#23433;&#20840;&#24615;&#31561;&#26041;&#38754;&#30340;&#34920;&#29694;&#20778;&#30064;&#12290;</code></pre><p></p><div><hr></div><h3><strong>Step 9: &#19979;&#36617;&#38617;&#35486; HTML</strong></h3><pre><code>filename = f&#8220;arxiv_{ARXIV_ID}_{SOURCE_LANG}-{TARGET_LANG}.html&#8221;

from google.colab import files

files.download(filename)</code></pre><p></p><p>&#36664;&#20986;&#65306;</p><pre><code>&#128190; HTML saved: arxiv_2403.08295_en-zh-TW.html

&#128202; Size: 143.2 KB

&#128196; Pages: 3</code></pre><p></p><div><hr></div><h2><strong>HTML &#21151;&#33021;</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jmht!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jmht!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 424w, https://substackcdn.com/image/fetch/$s_!jmht!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 848w, https://substackcdn.com/image/fetch/$s_!jmht!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 1272w, https://substackcdn.com/image/fetch/$s_!jmht!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jmht!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png" width="1456" height="166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:166,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184099,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185074894?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jmht!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 424w, https://substackcdn.com/image/fetch/$s_!jmht!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 848w, https://substackcdn.com/image/fetch/$s_!jmht!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 1272w, https://substackcdn.com/image/fetch/$s_!jmht!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F390b1fab-6a28-4a8b-934c-eb2f814a5fd9_2814x320.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A7Yl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A7Yl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 424w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 848w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A7Yl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png" width="1456" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:417976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185074894?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A7Yl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 424w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 848w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!A7Yl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6dd86cef-7c21-45f3-aa98-9e5ac80da64b_2814x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p><strong>**&#20171;&#38754;&#32068;&#25104;&#65306;**</strong></p><p>- Header&#65306;arXiv ID&#12289;&#35486;&#35328;&#23565;&#12289;&#29986;&#29983;&#26085;&#26399;</p><p>- Navigation&#65306;&#19978;&#19968;&#38913;/&#19979;&#19968;&#38913;&#25353;&#37397;</p><p>- &#25552;&#31034;&#21015;&#65306;&#37749;&#30436;&#25805;&#20316;&#35498;&#26126;&#65288;&#8592; &#8594; &#37749;&#65289;</p><p>- &#31456;&#31680;&#27161;&#38988;&#65306;&#38913;&#30908;&#12289;&#32763;&#35695;&#26178;&#38291;</p><p>- &#38617;&#27396;&#20296;&#23616;&#65306;&#21407;&#25991;&#65288;&#24038;&#65289;&#12289;&#32763;&#35695;&#65288;&#21491;&#65289;</p><p><strong>**&#21151;&#33021;&#65306;**</strong></p><p>- &#21407;&#25991;&#33287;&#32763;&#35695;&#20006;&#25490;&#23565;&#29031;</p><p>- &#37749;&#30436;&#23566;&#33322;&#65288;&#8592; &#8594; &#26041;&#21521;&#37749;&#65289;</p><p>- &#38913;&#38754;&#35336;&#25976;&#22120;&#65288;1/3&#65289;</p><p>- &#39023;&#31034;&#27599;&#38913;&#32763;&#35695;&#26178;&#38291;</p><p>- &#38626;&#32218;&#21487;&#29992;</p><p>- &#38911;&#25033;&#24335;&#35373;&#35336;</p><div><hr></div><h2><strong>&#32763;&#35695;&#21697;&#36074;&#35413;&#20272;</strong></h2><p>&#28204;&#35430;&#35542;&#25991;&#65306;Gemma Technical Report (arXiv:2403.08295)</p><h3><strong>&#28204;&#35430;&#31684;&#20363;</strong></h3><p><strong>**&#21407;&#25991;&#65306;**</strong></p><pre><code>The Gemma model architecture is based on the transformer decoder (Vaswani et al., 2017).

Models are trained on a context length of 8192 tokens. We also utilize several improvements

proposed after the original transformer paper.

Multi-Query Attention (Shazeer, 2019). Notably, the 7B model uses multi-head attention

while the 2B checkpoints use multi-query attention (with num_kv_heads = 1).</code></pre><p></p><p><strong>**TranslateGemma &#36664;&#20986;&#65306;**</strong></p><pre><code>Gemma &#27169;&#22411;&#26550;&#27083;&#22522;&#26044; Transformer &#35299;&#30908;&#22120;&#65288;Vaswani &#31561;&#20154;&#65292;2017&#65289;&#12290;&#27169;&#22411;&#26159;&#22312; 8192 &#20491;

token &#30340;&#19978;&#19979;&#25991;&#38263;&#24230;&#19978;&#35347;&#32244;&#30340;&#12290;&#25105;&#20497;&#36996;&#20351;&#29992;&#20102;&#21407;&#22987; Transformer &#35542;&#25991;&#20043;&#24460;&#25552;&#20986;&#30340;&#24190;&#38917;&#25913;&#36914;&#12290;

&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#65288;Shazeer&#65292;2019&#65289;&#12290;&#20540;&#24471;&#27880;&#24847;&#30340;&#26159;&#65292;7B &#27169;&#22411;&#20351;&#29992;&#22810;&#38957;&#27880;&#24847;&#21147;&#65292;&#32780; 2B &#27298;&#26597;&#40670;

&#20351;&#29992;&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#65288;num_kv_heads = 1&#65289;&#12290;</code></pre><p></p><h3><strong>GPU &#20351;&#29992;</strong></h3><pre><code>&#128202; GPU &#35352;&#25014;&#39636;&#65306;

   Total: 15.0 GB

   Model: ~8.6 GB

   Working: ~1.2 GB

   Available: ~5.2 GB

&#128202; &#20351;&#29992;&#29575;&#65306;

   &#32763;&#35695;&#20013;&#65306;95-100%

   &#38290;&#32622;&#65306;0%</code></pre><p></p><div><hr></div><h2><strong>&#36914;&#38542;&#20351;&#29992;</strong></h2><p>&#20808;&#32763;&#35695;&#37325;&#40670;&#31456;&#31680;&#65306;</p><pre><code>SECTIONS = {

&#8220;abstract&#8221;: (1, 1),      # &#24555;&#36895;&#28687;&#35261;

&#8220;intro&#8221;: (2, 4),         # &#32972;&#26223;&#21205;&#27231;

&#8220;conclusion&#8221;: (15, 16),  # &#32080;&#35542;

}
</code></pre><p>&#30906;&#35469;&#30456;&#38364;&#24460;&#20877;&#32763;&#35695;&#20840;&#25991;&#65306;</p><pre><code>SECTIONS = {

&#8220;method&#8221;: (5, 10),

&#8220;results&#8221;: (11, 14),

}</code></pre><p></p><div><hr></div><h3><strong>&#22810;&#35486;&#35328;&#32763;&#35695;</strong></h3><pre><code>for lang in [&#8221;zh-TW&#8221;, &#8220;ja&#8221;]:

TARGET_LANG = lang

# &#22519;&#34892;&#32763;&#35695;</code></pre><p></p><p>&#29986;&#29983; 3 &#20491;&#29256;&#26412;&#23565;&#29031;&#65306;</p><p>- &#21407;&#22987;&#33521;&#25991;</p><p>- &#32321;&#39636;&#20013;&#25991;</p><p>- &#26085;&#25991;</p><div><hr></div><p></p><p><strong>**GitHub:**</strong> [<a href="https://github.com/jimmyliao/trans-gemma">github.com/jimmyliao/trans-gemma</a>]</p>]]></content:encoded></item><item><title><![CDATA[Free Academic Paper Translation with TranslateGemma]]></title><description><![CDATA[Part 1: Getting Started with Google Colab's Free T4 GPU]]></description><link>https://memo.jimmyliao.net/p/free-academic-paper-translation-with</link><guid isPermaLink="false">https://memo.jimmyliao.net/p/free-academic-paper-translation-with</guid><dc:creator><![CDATA[JimmyLiao(NET)]]></dc:creator><pubDate>Mon, 19 Jan 2026 15:31:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7wBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d33965-c32e-4013-8776-a5fdea2b0985_1080x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><blockquote><h4><strong>&#20844;&#21578;</strong>: &#38928;&#35336;&#26371;&#25512;&#20986;<a href="https://memo.jimmyliao.net/p/a75">&#35330;&#38321;&#21046;</a>, &#20043;&#24460;&#25033;&#35442;&#26371;&#37096;&#20998;&#36681;&#24448;&#20854;&#20182;&#24179;&#21488;, &#30070;&#28982;&#20320;&#20063;&#21487;&#20197;&#25345;&#32396;&#38364;&#27880;&#36889;&#20491;&#38651;&#23376;&#22577;&#25910;&#21040;&#35330;&#38321;&#28040;&#24687;.</h4><h4><strong>Announcement:</strong> We are planning to launch a subscription model and may partially migrate to other platforms in the future. Please stay tuned to <a href="https://memo.jimmyliao.net/p/a75">this newsletter</a> for updates.</h4></blockquote><p></p><h2><strong>The Problem: You&#8217;re Wasting Hours on Research Papers</strong></h2><p>Here&#8217;s a situation you might recognize:</p><p>You open an arXiv paper. It&#8217;s groundbreaking work in your field. You <strong>**need**</strong> to understand it. But after 20 minutes staring at the abstract, you&#8217;ve only grasped about 60% of what&#8217;s happening.</p><p>So you start the copy-paste dance:</p><p>1. Highlight a paragraph &#128203;</p><p>2. Open DeepL in another tab</p><p>3. Paste and translate</p><p>4. Copy translation back to your notes</p><p>5. Lose all formatting &#128555;</p><p>6. Repeat 47 more times...</p><p>Three hours later, you&#8217;re exhausted, your notes are a mess, and you&#8217;re not even sure you understood the methodology correctly.</p><p><strong>What if I told you there&#8217;s a better way?</strong></p><p>In this post, I&#8217;ll show you how to translate entire arXiv papers into beautiful <strong>bilingual HTML</strong> &#8212; original and translation side-by-side &#8212; using Google&#8217;s <strong>TranslateGemma</strong> model on <strong>free Colab GPU</strong>.</p><p>Set it up once, translate forever. Let&#8217;s dive in.</p><div><hr></div><h2><strong>&#127919; What Makes This Different?</strong></h2><p>Before we jump into the tutorial, let&#8217;s understand why this approach beats traditional tools:</p><h3><strong>TranslateGemma is Like a Specialized Translator for Academics</strong></h3><p>Think of general translation APIs (DeepL, Google Translate) as <strong>**generalist interpreters**</strong>. They&#8217;re great at casual conversations but sometimes stumble on domain-specific jargon.</p><p><strong>TranslateGemma</strong> is like hiring a <strong>PhD student who speaks both languages</strong> &#8212; it understands:</p><p>- Technical terminology in context</p><p>- Academic writing conventions</p><p>- The difference between &#8220;model&#8221; (ML model) vs &#8220;model&#8221; (fashion model)</p><p>- How to preserve mathematical notation</p><h3><strong>The Bilingual HTML is Like Having Training Wheels</strong></h3><p>Instead of reading pure translation, you get:</p><pre><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;

&#9474; Original (English)              &#9474; Translation (Your Language)     &#9474;

&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;

&#9474; This work introduces Gemma...   &#9474; &#26412;&#30740;&#31350;&#20171;&#32057;&#20102; Gemma...             &#9474;

&#9474; ...                             &#9474; ...                             &#9474;

&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9524;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

         &#8593; Navigate with &#8592; &#8594; keys &#8593;</code></pre><p></p><p>This means:</p><p>- &#9989; <strong>Learn English</strong> while reading in your language</p><p>- &#9989; <strong>Check translations</strong> when something feels off</p><p>- &#9989; <strong>Build vocabulary</strong> by seeing terms in context</p><div><hr></div><h2><strong>&#129504; How This Actually Works (For the Curious)</strong></h2><p>Let me pull back the curtain on the technical implementation.</p><h3><strong>Architecture Overview</strong></h3><pre><code><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;

&#9474;   User       &#9474;

&#9474;  (Browser)   &#9474;

&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

       &#9474; 1. Click Colab link

       &#9660;

&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;

&#9474;   Colab Notebook                 &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; Environment Detection    &#9474;   &#9474;

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 2. Auto-config    &#9474;

&#9474;              &#9660;                    &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; Download arXiv PDF       &#9474;   &#9474;

&#9474;   &#9474; (via urllib)             &#9474;   &#9474;

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 3. Extract text   &#9474;

&#9474;              &#9660;                    &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; PyMuPDF (page-by-page)   &#9474;   &#9474;

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 4. Send to model  &#9474;

&#9474;              &#9660;                    &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; TranslateGemma 4B        &#9474;&#9668;&#9472;&#9472;&#9532;&#9472; HuggingFace Hub

&#9474;   &#9474; (on T4 GPU)              &#9474;   &#9474;   (model download)

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 5. Post-process   &#9474;

&#9474;              &#9660;                    &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; OpenCC (if zh-TW)        &#9474;   &#9474;

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 6. Generate HTML  &#9474;

&#9474;              &#9660;                    &#9474;

&#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;   &#9474;

&#9474;   &#9474; Bilingual HTML           &#9474;   &#9474;

&#9474;   &#9474; (side-by-side layout)    &#9474;   &#9474;

&#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;   &#9474;

&#9474;              &#9474; 7. Download       &#9474;

&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

               &#9660;

       &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;

       &#9474;  User&#8217;s PC    &#9474;

       &#9474;  (HTML file)  &#9474;

       &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;</code></code></pre><div><hr></div><h2><strong>&#128640; Let&#8217;s Build This: 10-Minute Setup</strong></h2><p>Instead of drowning you in theory, let&#8217;s get your first paper translated. We&#8217;ll explain what&#8217;s happening as we go.</p><h3><strong>Prerequisites (5 minutes setup, one-time)</strong></h3><p>You&#8217;ll need:</p><p>1. <strong>**Google Account**</strong> (for Colab)</p><p>2. <strong>**HuggingFace Account**</strong> ([sign up free](https://huggingface.co/join))</p><p>3. <strong>**HF Token**</strong> with read access ([create here](https://huggingface.co/settings/tokens))</p><p>4. <strong>**Accept Gemma Terms**</strong> ([click here](https://huggingface.co/google/translategemma-4b-it))</p><div><hr></div><h3><strong>Step 1: Open Notebook &amp; Enable GPU (1 minute)</strong></h3><p><strong>**[&#128073; <a href="https://colab.research.google.com/github/jimmyliao/trans-gemma/blob/main/arxiv-reader.ipynb">Click here</a> to open in Google Colab]**</strong></p><p>Then:</p><p>1. <strong>**Runtime**</strong> menu &#8594; <strong>**Change runtime type**</strong></p><p>2. Select <strong>**T4 GPU**</strong> from dropdown</p><p>3. Click <strong>**Save**</strong></p><p><strong>**Why T4?**</strong> It&#8217;s the free tier GPU that&#8217;s perfect for this task &#8212; enough memory for the 4B model, but not overkill.</p><div><hr></div><h3><strong>Step 2: Run Environment Detection (30 seconds)</strong></h3><p>Execute the first code cell (click &#9654;&#65039; or press Shift+Enter):</p><pre><code># This auto-detects whether you&#8217;re on Colab, GCP, or local Jupyter

ENV = detect_environment()
</code></pre><p><strong>**Output:**</strong></p><pre><code>

========================================================================

&#128269; Environment Detection

========================================================================

&#128421;&#65039;  Environment: COLAB

&#128013; Python: 3.10

&#128194; Working dir: /content

========================================================================

&#9989; Environment: COLAB - Ready!

========================================================================</code></pre><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L1xt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L1xt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 424w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 848w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 1272w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L1xt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png" width="1456" height="388" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185071208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L1xt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 424w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 848w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 1272w, https://substackcdn.com/image/fetch/$s_!L1xt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F199401bb-1cff-4299-ac7b-54521dbf2342_2252x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>*The notebook automatically detects your runtime environment*</em></p><p><strong>**What&#8217;s happening here?**</strong></p><p>The notebook adapts to your environment automatically. Same notebook works on:</p><p>- Google Colab (most users)</p><p>- GCP Custom Runtime (advanced)</p><p>- Local Jupyter (if you have GPU)</p><p>No need to modify code &#8212; it just works&#8482;.</p><div><hr></div><h3><strong>Step 3: Install Dependencies (2 minutes)</strong></h3><p>Next cell installs packages based on your environment:</p><pre><code># Colab gets lightweight dependencies

!pip install -q huggingface_hub transformers accelerate \

             sentencepiece protobuf pymupdf pillow \

             opencc-python-reimplemented</code></pre><p></p><p><strong>**Key package:**</strong> `opencc-python-reimplemented`</p><p>This ensures if you&#8217;re translating to <strong>**Traditional Chinese**</strong> (Taiwan/Hong Kong), you get &#22522;<strong>**&#26044;**</strong> not &#22522;<strong>**&#20110;**</strong>. Small details matter in academic writing.</p><p>Just click &#9654;&#65039; and wait for installation to complete.</p><div><hr></div><h3><strong>Step 4: Authenticate with HuggingFace (1 minute)</strong></h3><p>The notebook will prompt for your HF token:</p><pre><code>&#128221; Please enter HuggingFace Token:

   &#128161; Tip: Use Colab Secrets (&#128273; icon) for better security

   1. Get token: https://huggingface.co/settings/tokens

   2. Accept model: https://huggingface.co/google/translategemma-4b-it

Token: &#9608;</code></pre><p></p><p>Paste your token and press Enter. Done.</p><p><strong>**Security tip:**</strong> Use Colab&#8217;s built-in secrets manager (&#128273; sidebar icon) instead of pasting tokens directly if you&#8217;re sharing notebooks.</p><div><hr></div><h3><strong>Step 5: Load the Model (First run: 5 min, After: 30 sec)</strong></h3><p>This is where the magic happens:</p><pre><code>from transformers_backend import TransformersBackend

backend = TransformersBackend()

result = backend.load_model()
</code></pre><p></p><p><strong>**First run output:**</strong></p><pre><code>&#128640; Loading TranslateGemma (4B)...

   &#9203; Downloading model (~8.6GB) on first run...

Downloading: 100% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 8.6G/8.6G [04:32&lt;00:00, 31.5MB/s]

&#9989; Model loaded!

&#128205; Device: cuda:0

&#128202; Load time: 37.8s

&#128190; Memory: 13.8 GB used / 15.0 GB total

&#127881; Ready to translate!</code></pre><p></p><p><strong>**What just happened?**</strong></p><p>- Downloaded TranslateGemma 4B (8.6GB) to Colab&#8217;s disk</p><p>- Loaded model into GPU memory</p><p>- Cached for future runs (next time: 30 seconds!)</p><p>Grab a coffee &#9749; on first run. It&#8217;s worth the wait.</p><div><hr></div><p></p><p><strong>### Step 6: Configure Your Translation (30 seconds)</strong></p><p>Now the fun part &#8212; telling it <strong>**what**</strong> to translate:</p><pre><code># Which paper?

ARXIV_ID = "2403.08295"  # Gemma paper (or any arXiv ID)

# Which pages?

SECTIONS = {

"abstract": (1, 3),  # Pages 1-3

}

# What languages?

SOURCE_LANG = "en"

TARGET_LANG = "zh-TW"  # Traditional Chinese (Taiwan)

# Generate beautiful HTML?

SAVE_HTML = True
</code></pre><p><strong>**Customization examples:**</strong></p><p>Translate intro section only:</p><pre><code>SECTIONS = {

"intro": (2, 5),

}</code></pre><p></p><p>Translate to Japanese:</p><pre><code>TARGET_LANG = "ja"</code></pre><p></p><p>Translate everything:</p><pre><code>SECTIONS = {

"full": (1, 20),  # All pages

}

</code></pre><p></p><p><strong>**Supported languages:**</strong> 50+ including `zh-TW`, `zh-CN`, `ja`, `ko`, `fr`, `de`, `es`, `pt`, `ru`, etc.</p><div><hr></div><h3><strong>Step 7: Hit Translate! (3 min per page)</strong></h3><p>Execute the translation cell:</p><pre><code># Download PDF from arXiv

pdf_path, total_pages = download_arxiv(ARXIV_ID)

# Translate page by page with progress bar

with tqdm(total=3, desc=&#8221;&#128214; Translating&#8221;) as pbar:

for page_num in range(1, 4):

        text = extract_text(pdf_path, page_num)

        result = backend.translate(text,

                                  source_lang=SOURCE_LANG,

                                  target_lang=TARGET_LANG)

        results.append(result)

        pbar.update(1)</code></pre><p></p><p><strong>**Real output from my test:**</strong></p><pre><code>&#128229; Downloading arXiv:2403.08295

&#9989; Downloaded: 2403.08295.pdf (17 pages)

========================================================================

&#128640; Translation Started

========================================================================

&#128202; Pages: 3

&#9201;&#65039;  Est. time: ~9 minutes

&#128214; Translating: 33% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9612;         | 1/3 [02:48&lt;05:36, 168.05s/page]

&#9989; Page 1: 168.05s

&#128214; Translating: 67% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608; | 2/3 [05:51&lt;02:43, 163.25s/page]

&#9989; Page 2: 163.25s

&#128214; Translating: 100% |&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;&#9608;| 3/3 [08:37&lt;00:00, 166.29s/page]

&#9989; Page 3: 166.29s

========================================================================

&#9989; Translation Complete!

========================================================================

&#128202; Pages: 3

&#9201;&#65039;  Total: 8 min 37 sec

&#9889; Avg: 2.8 min/page

========================================================================</code></pre><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rLCD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rLCD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 424w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 848w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 1272w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rLCD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png" width="1456" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291818,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185071208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rLCD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 424w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 848w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 1272w, https://substackcdn.com/image/fetch/$s_!rLCD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06754baf-c96c-46a5-a5af-cb8e5b7fda44_2252x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>*Live translation progress with tqdm showing real-time status per page*</em></p><p><strong>**What&#8217;s happening under the hood?**</strong></p><p>For each page, the backend:</p><p>1. Sends text to TranslateGemma with a <strong>**simple, direct prompt**</strong>:</p><pre><code>Translate the following text from en to Traditional Chinese (Taiwan, &#32321;&#39636;&#20013;&#25991;).

Only output the translation, do not include explanations:

[Original text here]

Translation:</code></pre><p></p><p>2. Model generates translation using GPU acceleration</p><p>3. Extracts clean translation from output</p><p>4. Applies OpenCC post-processing (for zh-TW)</p><p><strong>**Pro tip:**</strong> Pages with heavy math/tables take similar time &#8212; the model handles them well.</p><div><hr></div><h3><strong>Step 8: View Results in Notebook</strong></h3><p>Immediately after translation, you&#8217;ll see:</p><pre><code>========================================================================

&#128196; Page 1 - ABSTRACT

========================================================================

&#128221; Original:

------------------------------------------------------------------------

This work introduces Gemma, a family of lightweight, state-of-the-art open

models built from the research and technology used to create Gemini models.

Gemma models demonstrate strong performance across academic benchmarks for

language understanding, reasoning, and safety.

&#127760; Translation:

------------------------------------------------------------------------

&#35542;&#25991;&#25688;&#35201;&#65306;

Gemma &#26159;&#19968;&#31995;&#21015;&#22522;&#26044; Gemini &#30340;&#36629;&#37327;&#32026;&#12289;&#20808;&#36914;&#30340;&#38283;&#28304;&#27169;&#22411;&#12290;&#36889;&#20123;&#27169;&#22411;&#22312;&#35486;&#35328;&#29702;&#35299;&#12289;

&#25512;&#29702;&#21644;&#23433;&#20840;&#24615;&#31561;&#26041;&#38754;&#30340;&#34920;&#29694;&#20778;&#30064;&#65292;&#20006;&#22312; 18 &#38917;&#25991;&#23383;&#20219;&#21209;&#20013;&#65292;&#22312;&#21516;&#31561;&#35215;&#27169;&#30340;&#38283;&#28304;&#27169;&#22411;

&#20013;&#34920;&#29694;&#26356;&#20339;&#12290;</code></pre><p></p><p><strong>**Notice the quality:**</strong></p><p>- &#8220;lightweight&#8221; &#8594; &#8220;&#36629;&#37327;&#32026;&#8221; &#9989; (not &#8220;&#36629;&#8221; or &#8220;&#20809;&#8221;)</p><p>- &#8220;state-of-the-art&#8221; &#8594; &#8220;&#20808;&#36914;&#8221; &#9989; (contextually appropriate)</p><p>- &#8220;benchmarks&#8221; &#8594; &#8220;&#22522;&#28310;&#28204;&#35430;&#8221; &#9989; (technical term)</p><p>- Traditional Chinese: &#22522;<strong>**&#26044;**</strong> &#9989; (not &#22522;<strong>**&#20110;**</strong>)</p><p>This is <strong>**way better**</strong> than copy-pasting into Google Translate.</p><div><hr></div><h3><strong>Step 9: Download Interactive HTML (10 seconds)</strong></h3><p>The final cell generates a self-contained HTML file:</p><pre><code># Generate bilingual HTML

filename = f&#8220;arxiv_{ARXIV_ID}_{SOURCE_LANG}-{TARGET_LANG}.html&#8221;

# Auto-download in Colab

from google.colab import files

files.download(filename)</code></pre><p></p><p><strong>**Output:**</strong></p><pre><code>&#128190; HTML saved: arxiv_2403.08295_en-zh-TW.html

&#128194; Full path: /content/arxiv_2403.08295_en-zh-TW.html

&#128202; Size: 143.2 KB

&#128196; Pages: 3

&#128229; To view the full HTML:

   1. Download: Right-click &#8216;arxiv_2403.08295_en-zh-TW.html&#8217; in Files panel &#8594; Download

   2. Or use auto-download (Colab native only)</code></pre><p></p><p><strong>**Open the HTML in your browser:**</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nc0C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nc0C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 424w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 848w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 1272w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nc0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png" width="1456" height="166" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:166,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184099,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185071208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nc0C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 424w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 848w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 1272w, https://substackcdn.com/image/fetch/$s_!Nc0C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406183ac-e0c4-4663-957e-2f36900e9d84_2814x320.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p><em>*Clean header with title, language pair, date, and keyboard-friendly navigation*</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-QsP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-QsP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 424w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 848w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-QsP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png" width="1456" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:417976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://memo.jimmyliao.net/i/185071208?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-QsP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 424w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 848w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!-QsP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3887d5e1-7356-4891-98ea-0c4f5a626715_2814x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><em>*Original English (left) and Traditional Chinese translation (right) in perfect sync*</em></p><p><strong>**What you&#8217;re seeing:**</strong></p><p>- <strong>**Header:**</strong> arXiv:2403.08295 Bilingual Translation</p><p>- <strong>**Metadata:**</strong> en &#8594; zh-TW | 2026-01-19 14:22</p><p>- <strong>**Navigation:**</strong> &#9668; Prev | Page 1 (1/3) | Next &#9654;</p><p>- <strong>**Hint bar:**</strong> &#128161; Use &#8592; &#8594; keys (yellow background for visibility)</p><p>- <strong>**Section header:**</strong> &#128196; ABSTRACT - Page 1 &#9201;&#65039; 179.74s (shows translation time)</p><p>- <strong>**Dual columns:**</strong> Gray background for original, white for translation</p><p><strong>**Features:**</strong></p><p>- &#9989; Side-by-side original + translation (never lose context)</p><p>- &#9989; Keyboard navigation (&#8592; &#8594; arrow keys for fast reading)</p><p>- &#9989; Page counter with progress (&#8221;Page 1 (1/3)&#8221;)</p><p>- &#9989; Translation time per page (&#9201;&#65039; 179.74s shown in purple header)</p><p>- &#9989; Works offline (no internet needed after download)</p><p>- &#9989; Mobile responsive (columns stack vertically on small screens)</p><p>- &#9989; Clean typography (monospace for original, sans-serif for translation)</p><p><strong>**This is your forever-reference**</strong> for that paper. Share it, annotate it, or keep it for later.</p><div><hr></div><h2><strong>&#128300; Translation Quality: Let&#8217;s Be Honest</strong></h2><p>I tested this on the <strong>**Gemma Technical Report**</strong> (arXiv:2403.08295), a genuinely complex paper with:</p><p>- Model architecture details</p><p>- Training methodology</p><p>- Benchmark results (tables)</p><p>- Mathematical notation</p><p>- Lots of jargon (&#8221;multi-query attention&#8221;, &#8220;RoPE embeddings&#8221;, &#8220;supervised fine-tuning&#8221;)</p><p><strong>### Sample: Original Text</strong></p><pre><code>The Gemma model architecture is based on the transformer decoder (Vaswani et al., 2017).

The core parameters of the architecture are summarized in Table 1. Models are trained on

a context length of 8192 tokens. We also utilize several improvements proposed after the

original transformer paper, and list them below:

Multi-Query Attention (Shazeer, 2019). Notably, the 7B model uses multi-head attention

while the 2B checkpoints use multi-query attention (with num_kv_heads = 1), based on

ablations that showed that multi-query attention works well at small scales.</code></pre><p></p><p></p><h3><strong>TranslateGemma Output</strong></h3><pre><code>Gemma &#27169;&#22411;&#26550;&#27083;&#22522;&#26044; Transformer &#35299;&#30908;&#22120;&#65288;Vaswani &#31561;&#20154;&#65292;2017&#65289;&#12290;&#26550;&#27083;&#30340;&#26680;&#24515;&#21443;&#25976;

&#32317;&#32080;&#26044;&#34920; 1 &#20013;&#12290;&#27169;&#22411;&#26159;&#22312; 8192 &#20491; token &#30340;&#19978;&#19979;&#25991;&#38263;&#24230;&#19978;&#35347;&#32244;&#30340;&#12290;&#25105;&#20497;&#36996;&#20351;&#29992;&#20102;&#21407;&#22987;

Transformer &#35542;&#25991;&#20043;&#24460;&#25552;&#20986;&#30340;&#24190;&#38917;&#25913;&#36914;&#65292;&#20006;&#22312;&#19979;&#38754;&#21015;&#20986;&#65306;

&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#65288;Shazeer&#65292;2019&#65289;&#12290;&#20540;&#24471;&#27880;&#24847;&#30340;&#26159;&#65292;7B &#27169;&#22411;&#20351;&#29992;&#22810;&#38957;&#27880;&#24847;&#21147;&#65292;&#32780; 2B &#27298;&#26597;

&#40670;&#20351;&#29992;&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#65288;num_kv_heads = 1&#65289;&#65292;&#36889;&#26159;&#22522;&#26044;&#28040;&#34701;&#30740;&#31350;&#39023;&#31034;&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#22312;&#23567;&#35215;&#27169;

&#19979;&#25928;&#26524;&#33391;&#22909;&#12290;</code></pre><p></p><p></p><h3><strong>My Assessment</strong></h3><p>| Aspect | Rating | Notes |</p><p>|--------|--------|-------|</p><p>| <strong>**Technical Accuracy**</strong> | &#11088;&#11088;&#11088;&#11088;&#11088; | &#8220;multi-query attention&#8221; &#8594; &#8220;&#22810;&#26597;&#35426;&#27880;&#24847;&#21147;&#8221; is spot-on |</p><p>| <strong>**Terminology Consistency**</strong> | &#11088;&#11088;&#11088;&#11088;&#11088; | Same term translated same way throughout |</p><p>| <strong>**Grammar &amp; Flow**</strong> | &#11088;&#11088;&#11088;&#11088;&#11088; | Reads naturally in target language |</p><p>| <strong>**Format Preservation**</strong> | &#11088;&#11088;&#11088;&#11088;&#11088; | Keeps paragraphs, citations, structure intact |</p><p>| <strong>**Context Understanding**</strong> | &#11088;&#11088;&#11088;&#11088; | Gets that &#8220;ablations&#8221; means ablation studies (not medical) |</p><p><strong>**Where it shines:**</strong></p><p>- &#9989; Technical jargon (transformers, attention mechanisms, tokens)</p><p>- &#9989; Citations format preserved: (Vaswani et al., 2017)</p><p>- &#9989; Numbers and variables unchanged: 8192, 7B, num_kv_heads</p><p>- &#9989; Academic tone maintained</p><p><strong>**Minor quirks:**</strong></p><p>- &#9888;&#65039; Sometimes literal translation where paraphrase would be smoother</p><p>- &#9888;&#65039; Very occasional wrong word choice (maybe 1-2 per page)</p><p><strong>**Compared to:**</strong></p><p>- <strong>**DeepL:**</strong> Better for general text, but struggles with ML terminology</p><p>- <strong>**Google Translate:**</strong> Faster, but often mistranslates domain terms</p><p>- <strong>**GPT-4/Claude API:**</strong> Similar quality, but costs $0.01-0.02 per page</p><p>- <strong>**Human translator:**</strong> Obviously better, but  and slow</p><p>For <strong>**free academic translation**</strong>, this is <strong>**unbeatable**</strong>.</p><div><hr></div><h2><strong>&#9889; Performance &amp; Cost: The Real Numbers</strong></h2><p>Let me share actual benchmarks from my testing:</p><h3><strong>My Setup</strong></h3><p>- <strong>**Platform:**</strong> Google Colab Free Tier</p><p>- <strong>**GPU:**</strong> Tesla T4 (15GB VRAM)</p><p>- <strong>**Model:**</strong> TranslateGemma 4B (~8.6GB)</p><p>- <strong>**Test paper:**</strong> Gemma Report (arXiv:2403.08295)</p><h3><strong>Timing Breakdown</strong></h3><p>| Operation | First Run | Subsequent Runs |</p><p>|-----------|-----------|-----------------|</p><p>| Model download | ~5 min (one-time) | - |</p><p>| Model loading | 37.8 sec | 30 sec (cached) |</p><p>| Translation | 165-170 sec/page | Same |</p><p>| HTML generation | &lt;1 sec | &lt;1 sec |</p><p><strong>**Total for 3 pages:**</strong></p><p>- First ever run: ~15 minutes (including model download)</p><p>- After model cached: ~9 minutes (just translation time)</p><h3><strong>GPU Usage</strong></h3><pre><code>&#128202; GPU Memory:

   Total: 15.0 GB

   Model: ~8.6 GB

   Working: ~1.2 GB

   Available: ~5.2 GB

&#128202; Utilization:

   During translation: 95-100%

   Idle: 0%</code></pre><p></p><p>The T4 is fully utilized during translation &#8212; that&#8217;s why it&#8217;s relatively fast.</p><h3><strong>Cost Comparison (10-page paper)</strong></h3><p>| Method | Time | Cost | Quality |</p><p>|--------|------|------|---------|</p><p>| <strong>**TranslateGemma + Colab**</strong> | ~30 min | <strong>**$0.00**</strong> | &#11088;&#11088;&#11088;&#11088;&#11088; |</p><p>| <strong>**Claude 3.5 API**</strong> | ~2 min | $0.10 | &#11088;&#11088;&#11088;&#11088; |</p><p>| <strong>**DeepL Pro API**</strong> | ~1 min | $0.20 | &#11088;&#11088;&#11088;&#11088; |</p><p>| <strong>**Google Translate**</strong> | Instant | $0.00 | &#11088;&#11088;&#11088; |</p><p>| <strong>**Human translator**</strong> | 2-3 days | $50-200 | &#11088;&#11088;&#11088;&#11088;&#11088; |</p><p><strong>**My take:**</strong> If you&#8217;re reading 5-10 papers per week, the <strong>**time investment**</strong> of TranslateGemma pays off in <strong>**quality + zero cost**</strong>. For one-off urgent translations, APIs are faster.</p><div><hr></div><h2><strong>&#128736;&#65039; Power User Tips</strong></h2><p>Once you&#8217;ve got the basics down, here are some pro moves:</p><h3><strong>Tip 1: Batch Translate Strategically</strong></h3><p>Don&#8217;t translate entire papers blindly. Use this approach:</p><pre><code>SECTIONS = {

&#8220;abstract&#8221;: (1, 1),      # Quick scan: worth deep reading?

&#8220;intro&#8221;: (2, 4),         # Context and motivation

&#8220;conclusion&#8221;: (15, 16),  # Main takeaways

}</code></pre><p></p><p>Read these first (10 min translation). If it&#8217;s relevant, come back for:</p><pre><code>SECTIONS = {

&#8220;method&#8221;: (5, 10),

&#8220;results&#8221;: (11, 14),

}</code></pre><p></p><p><strong>**Why?**</strong> You&#8217;ll save time on papers that aren&#8217;t relevant to your work.</p><div><hr></div><h3><strong>Tip 2: Translate to Multiple Languages</strong></h3><p>Learning Japanese and Chinese? Do this:</p><pre><code>for lang in [&#8221;zh-TW&#8221;, &#8220;ja&#8221;]:

TARGET_LANG = lang

# Run translation

# Generate HTML</code></pre><p></p><p>Now you have <strong>**3 versions**</strong> to compare:</p><p>- Original English</p><p>- Traditional Chinese</p><p>- Japanese</p><p>Great for building technical vocabulary across languages.</p><div><hr></div><h3><strong>Tip 3: Fix the &#8220;Pages 2-3 Didn&#8217;t Translate&#8221; Bug</strong></h3><p>If you&#8217;re using an older version, pages with lots of charts/tables might fail to translate (they just return the original text).</p><p><strong>**We fixed this recently!**</strong> Update to latest:</p><pre><code>cd trans-gemma &amp;&amp; git pull</code></pre><p></p><p><strong>**What we changed:**</strong></p><p>- Switched from complex chat template to <strong>**simple direct prompt**</strong></p><p>- More robust extraction logic</p><p>- Better handling of mixed-content pages (text + figures)</p><div><hr></div><h3><strong>Tip 4: Run Locally If You Have GPU</strong></h3><p>Don&#8217;t want to depend on Colab quotas? Run locally:</p><pre><code>git clone https://github.com/jimmyliao/trans-gemma.git

cd trans-gemma

pip install -e &#8220;.[examples]&#8221;

# Open notebook

jupyter notebook arxiv-reader.ipynb</code></pre><p></p><p>The notebook <strong>**auto-detects**</strong> your environment (Colab vs Local) and adapts. Just works.</p><p><strong>**Requirements:**</strong></p><p>- Python 3.10+</p><p>- NVIDIA GPU with 10GB+ VRAM (or use CPU, but very slow)</p><p>- ~15GB disk space for model</p><div><hr></div><h3><strong>Tip 5: Customize the HTML Output</strong></h3><p>The generated HTML uses <strong>**vanilla JavaScript**</strong> and can be easily customized. Open the notebook cell that generates HTML and modify:</p><p><strong>**Change color scheme:**</strong></p><pre><code>.header {

background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);

}
</code></pre><p></p><p><strong>**Add dark mode:**</strong></p><pre><code>@media (prefers-color-scheme: dark) {

body { background: #1a1a1a; color: #e0e0e0; }

}</code></pre><p></p><p><strong>**Adjust layout ratio:**</strong></p><pre><code>.columns {

grid-template-columns: 45% 55%; /* Favor translation side */

}
</code></pre><div><hr></div><h2><strong>&#129300; Common Questions</strong></h2><h3><strong>Q: &#8220;Colab says GPU unavailable?&#8221;</strong></h3><p><strong>**A:**</strong> Free tier has daily quotas (typically refreshes every 12-24 hours). Try:</p><p>1. <strong>**Wait a few hours**</strong> and retry</p><p>2. <strong>**Try off-peak times**</strong> (evenings/weekends in US timezones)</p><p>3. <strong>**Switch Google accounts**</strong> if you have multiple</p><p>4. <strong>**Upgrade to Colab Pro**</strong> ($10/month) for guaranteed GPU</p><div><hr></div><h3><strong>Q: &#8220;Model download stuck at 45%?&#8221;</strong></h3><p><strong>**A:**</strong> Network hiccups happen. Try:</p><p>1. <strong>**Restart runtime:**</strong> Runtime &#8594; Restart runtime</p><p>2. <strong>**Clear outputs:**</strong> Edit &#8594; Clear all outputs</p><p>3. <strong>**Re-run from Step 5:**</strong> Model downloads resume where they left off</p><p>If still stuck after 15 minutes, it&#8217;s likely a HuggingFace server issue. Wait 30 min and retry.</p><div><hr></div><h3><strong>Q: &#8220;Translation has simplified + traditional Chinese mixed?&#8221;</strong></h3><p><strong>**A:**</strong> This <strong>**should be fixed**</strong> in latest version. We added `opencc-python-reimplemented` to backend.</p><p>If still happening:</p><pre><code>cd trans-gemma &amp;&amp; git pull</code></pre><p></p><p>Then restart notebook.</p><div><hr></div><h3><strong>Q: &#8220;Can I translate non-arXiv PDFs?&#8221;</strong></h3><p><strong>**A:**</strong> The current notebook is optimized for arXiv URLs. For local PDFs, modify:</p><pre><code># Instead of:

pdf_path, total = download_arxiv(ARXIV_ID)

# Use:

pdf_path = &#8220;/content/your_paper.pdf&#8221;

total = len(fitz.open(pdf_path))</code></pre><p>Then run translation cells as normal.</p><div><hr></div><h3><strong>Q: &#8220;Is this safe for commercial use?&#8221;</strong></h3><p><strong>**A:**</strong> Tricky question:</p><p>- <strong>**Code (MIT license):**</strong> Yes, use commercially</p><p>- <strong>**Gemma model:**</strong> Read [Terms of Use](https://ai.google.dev/gemma/terms)</p><p>- <strong>**Colab:**</strong> Free tier meant for learning/research</p><p><strong>**My advice:**</strong> Use for research/learning. If you&#8217;re making money from translations, consider:</p><p>- Running on your own GPU</p><p>- Using Colab Pro (legitimized commercial use)</p><p>- Checking Gemma&#8217;s commercial terms carefully</p><div><hr></div><h3><strong>Key Technical Decisions</strong></h3><p><strong>**1. Simple Prompt Over Chat Template**</strong></p><p>Initially, we used HuggingFace&#8217;s `apply_chat_template()`:</p><pre><code># Old approach (failed on pages with tables/math)

messages = [{

&#8220;role&#8221;: &#8220;user&#8221;,

&#8220;content&#8221;: [{&#8221;type&#8221;: &#8220;text&#8221;, &#8220;text&#8221;: text, ...}]

}]

inputs = tokenizer.apply_chat_template(messages, ...)</code></pre><p></p><p><strong>**Problem:**</strong> Pages with heavy formatting confused the template, and extraction logic failed.</p><p><strong>**Fix:**</strong> Switched to dead-simple prompt:</p><pre><code># New approach (rock solid)

prompt = f&#8220;&#8221;&#8220;Translate the following text from {source_lang} to Traditional Chinese (Taiwan, &#32321;&#39636;&#20013;&#25991;). Only output the translation, do not include explanations:

{text}

Translation:&#8221;&#8220;&#8221;

inputs = tokenizer(prompt, return_tensors=&#8221;pt&#8221;)</code></pre><p></p><p><strong>**Result:**</strong> 100% success rate across all page types.</p><div><hr></div><p></p><p><strong>**2. OpenCC Post-Processing**</strong></p><p>TranslateGemma 4B tends to output <strong>**Simplified Chinese**</strong> by default, even when asked for Traditional.</p><p>Solution: <strong>**Always post-process**</strong> for zh-TW:</p><pre><code>if target_lang == &#8220;zh-TW&#8221;:

from opencc import OpenCC

    cc = OpenCC(&#8217;s2twp&#8217;)  # Simplified &#8594; Traditional (Taiwan phrases)

    translation = cc.convert(translation)</code></pre><p></p><p>This ensures:</p><p>- &#22522;&#20110; &#8594; &#22522;&#26044;</p><p>- &#36731;&#37327;&#32423; &#8594; &#36629;&#37327;&#32026;</p><p>- &#36825;&#20123; &#8594; &#36889;&#20123;</p><p>Taiwan readers notice these details!</p><div><hr></div><p><strong>**3. Dynamic Environment Detection**</strong></p><p>Same notebook runs on Colab, GCP, or local Jupyter:</p><pre><code>def detect_environment():

try:

import google.colab

return &#8216;colab&#8217;

except ImportError:

pass

if os.path.exists(&#8217;/opt/conda/envs/py310&#8217;):

return &#8216;gcp&#8217;

return &#8216;local&#8217;</code></pre><p></p><p></p><p>Then:</p><pre><code>if ENV == &#8216;colab&#8217;:

# Lightweight installs

elif ENV == &#8216;gcp&#8217;:

# Custom runtime configs

else:

# Local includes PyTorch</code></pre><p></p><p><strong>**Why?**</strong> Colab has PyTorch pre-installed; local doesn&#8217;t. One notebook, zero friction.</p><div><hr></div><p><strong>**4. Progressive HTML Generation**</strong></p><p>Instead of loading entire paper at once, the HTML uses:</p><pre><code>// Page navigation with keyboard shortcuts

let currentPage = 0;

function showPage(n) {

document.querySelectorAll(&#8217;.page&#8217;).forEach(p =&gt; p.style.display = &#8216;none&#8217;);

document.getElementById(`page-${n}`).style.display = &#8216;block&#8217;;

currentPage = n;

}

document.addEventListener(&#8217;keydown&#8217;, e =&gt; {

if (e.key === &#8216;ArrowLeft&#8217;) showPage(currentPage - 1);

if (e.key === &#8216;ArrowRight&#8217;) showPage(currentPage + 1);

});</code></pre><p></p><p><strong>**Benefit:**</strong> Even 50-page papers load instantly in browser.</p><div><hr></div><h2><strong>&#127919; Who This Is (and Isn&#8217;t) For</strong></h2><h3><strong>&#9989; Perfect For:</strong></h3><p><strong>**Graduate Students**</strong></p><p>- Reading 5-10 papers per week</p><p>- Budget: $0</p><p>- Time: Can wait 3 min/page for quality translations</p><p>- Bonus: Learn English terminology via side-by-side reading</p><p><strong>**Non-native English Researchers**</strong></p><p>- Deep-reading important papers</p><p>- Want to <strong>**understand**</strong>, not just skim</p><p>- Appreciate bilingual layout for learning</p><p><strong>**AI/ML Engineers Keeping Current**</strong></p><p>- Track latest arXiv preprints</p><p>- Translate abstract + intro first, decide if worth full read</p><p>- Free tier is plenty for 2-3 papers daily</p><div><hr></div><h3><strong>&#10060; Not Ideal For:</strong></h3><p><strong>**Urgent Deadlines**</strong></p><p>- If you need a paper translated in 5 minutes, use Claude/GPT-4 API</p><p>- They&#8217;re faster (~10 sec/page), just costs $0.01-0.02 per page</p><p><strong>**Large-Scale Translation**</strong></p><p>- Translating 100 papers &#8594; you&#8217;ll hit Colab quotas</p><p>- Consider running on your own GPU or cloud instance</p><p><strong>**Commercial Translation Services**</strong></p><p>- Check Gemma Terms of Use carefully</p><p>- May need different licensing</p><div><hr></div><h2><strong>&#128302; What&#8217;s Next for This Project</strong></h2><p>I&#8217;m actively developing this, and here&#8217;s what&#8217;s coming:</p><h3><strong>Short-term (Next Month)</strong></h3><p>- &#128284; <strong>**Auto-language detection**</strong> from paper metadata</p><p>- &#128284; <strong>**DOCX/Markdown output**</strong> formats (not just HTML)</p><p>- &#128284; <strong>**Batch mode:**</strong> Translate multiple papers in one go</p><p>- &#128284; <strong>**Dark mode**</strong> for HTML output</p><p><strong>### Medium-term (Next Quarter)</strong></p><p>- &#128284; <strong>**Gemma 2/3 support**</strong> when released</p><p>- &#128284; <strong>**Terminology glossary**</strong> extraction (build your own vocab list)</p><p>- &#128284; <strong>**Figure/table captions**</strong> translation</p><p>- &#128284; <strong>**API mode**</strong> for programmatic access</p><p><strong>### Long-term (This Year)</strong></p><p>- &#128284; <strong>**Web UI**</strong> (no notebook required)</p><p>- &#128284; <strong>**Mobile app**</strong> for reading on-the-go</p><p>- &#128284; <strong>**Community translations**</strong> (share &amp; reuse)</p><p>Want to contribute? <strong>**Pull requests welcome!**</strong> &#8594; [GitHub](https://github.com/jimmyliao/trans-gemma)</p><p>---</p><h2><strong>&#128640; Your Turn: Translate Your First Paper</strong></h2><p>Alright, you&#8217;ve read 3000+ words about this. Time to actually try it.</p><p><strong>### 5-Minute Challenge:</strong></p><p>1. <strong>**Pick a paper:**</strong> Go to [arXiv.org](https://arxiv.org), find something interesting</p><p>2. <strong>**Copy the ID:**</strong> It looks like `2403.08295` (from URL)</p><p>3. <strong>**Click this badge:**</strong> [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/jimmyliao/trans-gemma/blob/main/arxiv-reader.ipynb)</p><p>4. <strong>**Enable T4 GPU:**</strong> Runtime &#8594; Change runtime type &#8594; T4 GPU</p><p>5. <strong>**Run all cells:**</strong> Runtime &#8594; Run all (or Ctrl+F9)</p><p>6. <strong>**Wait ~10 minutes**</strong> (first run includes model download)</p><p>7. <strong>**Download the HTML**</strong> and open in browser</p><p><strong>**Boom.**</strong> You just translated an academic paper for free.</p><div><hr></div><h2><strong>&#128172; Let&#8217;s Make This Better Together</strong></h2><p><strong>**If this helped you:**</strong></p><p>- &#11088; <strong>**Star the repo:**</strong> [<a href="https://github.com/jimmyliao/trans-gemma">github.com/jimmyliao/trans-gemma</a>]</p><p>- &#128027; <strong>**Report bugs:**</strong> [<a href="https://github.com/jimmyliao/trans-gemma/issues">Open an issue</a>]</p><p>- &#128161; <strong>**Share ideas:**</strong> [<a href="https://github.com/jimmyliao/trans-gemma/discussions">Start a discussion</a>]</p><p>Open source makes projects like this possible. Thank you! &#128588;</p><div><hr></div><p><strong>**P.S.**</strong> If you made it this far, you&#8217;re either genuinely interested or an excellent skimmer. Either way, I appreciate you reading. Now go translate something! &#128218;&#10024;</p><p></p><p></p>]]></content:encoded></item></channel></rss>