@shadowob/cloud 1.1.6-dev.311
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +509 -0
- package/dist/agent-browser-CERTMCDL.js +117 -0
- package/dist/agent-browser-CIRZRIY4.js +118 -0
- package/dist/agent-pack-LF3O5TR4.js +1236 -0
- package/dist/agent-pack-RQT27V7R.js +1235 -0
- package/dist/airtable-BG2Q75G2.js +82 -0
- package/dist/airtable-JCQXFM5D.js +83 -0
- package/dist/alipay-MZX2XCDB.js +52 -0
- package/dist/alipay-TZQI34RB.js +51 -0
- package/dist/amap-5RQB3VGC.js +45 -0
- package/dist/amap-KPCLZYYL.js +44 -0
- package/dist/atlassian-LGOEWYC7.js +54 -0
- package/dist/atlassian-TVS2A4IU.js +55 -0
- package/dist/baidu-appbuilder-6UMESXHW.js +41 -0
- package/dist/baidu-appbuilder-QRRL3ETM.js +42 -0
- package/dist/baidu-maps-HEPMVP5D.js +44 -0
- package/dist/baidu-maps-HXC4FBVP.js +45 -0
- package/dist/baidu-netdisk-G5Q6B5NH.js +45 -0
- package/dist/baidu-netdisk-RS2K5W2M.js +44 -0
- package/dist/baidu-smartprogram-EWTK5WKK.js +41 -0
- package/dist/baidu-smartprogram-JHD3XWF6.js +40 -0
- package/dist/browserbase-IUIYVYI7.js +67 -0
- package/dist/browserbase-JFO2PCIA.js +68 -0
- package/dist/canva-3YOFL7JS.js +62 -0
- package/dist/canva-FMYN65SM.js +61 -0
- package/dist/chunk-6P2K6QZR.js +529 -0
- package/dist/chunk-7VMRQ7MG.js +90 -0
- package/dist/chunk-AD3JTIU3.js +17 -0
- package/dist/chunk-BF6CV2Y4.js +64 -0
- package/dist/chunk-CTNUKOQE.js +439 -0
- package/dist/chunk-EEFMJYKB.js +97 -0
- package/dist/chunk-EJKFQ35I.js +739 -0
- package/dist/chunk-HUICDC56.js +62 -0
- package/dist/chunk-JUPAE5IA.js +527 -0
- package/dist/chunk-JY2HTT7Q.js +437 -0
- package/dist/chunk-KEPTCLUO.js +121 -0
- package/dist/chunk-KKK5H7YX.js +3622 -0
- package/dist/chunk-POSVEKIY.js +210 -0
- package/dist/chunk-QET4LT4J.js +5769 -0
- package/dist/chunk-QV4XWO3P.js +30 -0
- package/dist/chunk-R52J3PH2.js +120 -0
- package/dist/chunk-R5U7XKVJ.js +16 -0
- package/dist/chunk-RECNVWMT.js +212 -0
- package/dist/chunk-RTPBU5HF.js +92 -0
- package/dist/chunk-SUZ2ATT6.js +5774 -0
- package/dist/chunk-SVMXSIMG.js +98 -0
- package/dist/chunk-TV3CBM7R.js +28 -0
- package/dist/chunk-V2LU736V.js +3495 -0
- package/dist/chunk-ZUYL3W53.js +741 -0
- package/dist/claude-plugin-577TAQVS.js +1463 -0
- package/dist/claude-plugin-L3MXJJ6J.js +1464 -0
- package/dist/cli.js +7021 -0
- package/dist/cloudflare-HBBABPK6.js +114 -0
- package/dist/cloudflare-RDFPKMM5.js +115 -0
- package/dist/cnb-FLP3QX46.js +44 -0
- package/dist/cnb-YAVVEYFB.js +45 -0
- package/dist/console/index.html +12 -0
- package/dist/console/logo.png +0 -0
- package/dist/console/static/css/5079.f9e0918d.css +1 -0
- package/dist/console/static/css/index.7f91f806.css +1 -0
- package/dist/console/static/font/codicon.5b7d6fac.ttf +0 -0
- package/dist/console/static/js/5079.72a51ca2.js +699 -0
- package/dist/console/static/js/5079.72a51ca2.js.LICENSE.txt +35 -0
- package/dist/console/static/js/7426.f8d483ea.js +1 -0
- package/dist/console/static/js/async/1008.4df521b7.js +1 -0
- package/dist/console/static/js/async/102.1d473ec7.js +1 -0
- package/dist/console/static/js/async/1134.3f9fd9e7.js +1 -0
- package/dist/console/static/js/async/1318.4b8e48e7.js +1 -0
- package/dist/console/static/js/async/1360.5606da88.js +7 -0
- package/dist/console/static/js/async/1546.045f484f.js +1 -0
- package/dist/console/static/js/async/1562.187de2a8.js +1 -0
- package/dist/console/static/js/async/168.456d4813.js +1 -0
- package/dist/console/static/js/async/1750.e6dc2664.js +1 -0
- package/dist/console/static/js/async/1994.3fc86066.js +1 -0
- package/dist/console/static/js/async/2348.613ae3d9.js +1 -0
- package/dist/console/static/js/async/2390.1b890b9d.js +1 -0
- package/dist/console/static/js/async/2414.9d040212.js +1 -0
- package/dist/console/static/js/async/2454.4c1784ab.js +1 -0
- package/dist/console/static/js/async/2498.f5f92030.js +1 -0
- package/dist/console/static/js/async/2924.b823cd1a.js +1 -0
- package/dist/console/static/js/async/3062.63fddea6.js +1 -0
- package/dist/console/static/js/async/3078.dd712008.js +1 -0
- package/dist/console/static/js/async/3198.1f307065.js +1 -0
- package/dist/console/static/js/async/3246.3d5a899f.js +1 -0
- package/dist/console/static/js/async/3286.871676eb.js +1 -0
- package/dist/console/static/js/async/342.10bf3b90.js +1 -0
- package/dist/console/static/js/async/3446.9681a4d7.js +1 -0
- package/dist/console/static/js/async/3698.ccfaabec.js +1 -0
- package/dist/console/static/js/async/3790.2a1106a6.js +1 -0
- package/dist/console/static/js/async/4231.b29784d4.js +1 -0
- package/dist/console/static/js/async/4551.515bd41d.js +1 -0
- package/dist/console/static/js/async/4596.40f6e71b.js +1 -0
- package/dist/console/static/js/async/4600.4aaebe6d.js +1 -0
- package/dist/console/static/js/async/4718.1aae022f.js +1 -0
- package/dist/console/static/js/async/4846.a347c020.js +1 -0
- package/dist/console/static/js/async/4860.83dadf89.js +1 -0
- package/dist/console/static/js/async/500.fcfa37cb.js +1 -0
- package/dist/console/static/js/async/5096.b360203d.js +1 -0
- package/dist/console/static/js/async/5222.043274fe.js +1 -0
- package/dist/console/static/js/async/5362.f498001c.js +1 -0
- package/dist/console/static/js/async/54.c94f0755.js +1 -0
- package/dist/console/static/js/async/5478.50dd9ef0.js +2 -0
- package/dist/console/static/js/async/5478.50dd9ef0.js.LICENSE.txt +3 -0
- package/dist/console/static/js/async/5507.a6a1f793.js +1 -0
- package/dist/console/static/js/async/5638.bc6b102d.js +1 -0
- package/dist/console/static/js/async/5722.e0029049.js +1 -0
- package/dist/console/static/js/async/5942.74635c6b.js +1 -0
- package/dist/console/static/js/async/5994.1c5629c1.js +1 -0
- package/dist/console/static/js/async/6054.6bddf720.js +1 -0
- package/dist/console/static/js/async/6118.45e754e5.js +1 -0
- package/dist/console/static/js/async/6127.adcbcbb6.js +1 -0
- package/dist/console/static/js/async/614.3f434c20.js +1 -0
- package/dist/console/static/js/async/6234.ba3b002d.js +1 -0
- package/dist/console/static/js/async/6310.6546a9ba.js +1 -0
- package/dist/console/static/js/async/6378.9f805419.js +1 -0
- package/dist/console/static/js/async/6380.e4433c49.js +1 -0
- package/dist/console/static/js/async/6418.f23bcfda.js +1 -0
- package/dist/console/static/js/async/6428.77c86114.js +1 -0
- package/dist/console/static/js/async/6443.83318a6c.js +1 -0
- package/dist/console/static/js/async/6508.2b445d62.js +3 -0
- package/dist/console/static/js/async/6542.e82a26c8.js +1 -0
- package/dist/console/static/js/async/6544.62111ecb.js +1 -0
- package/dist/console/static/js/async/6612.a0c9fcf4.js +1 -0
- package/dist/console/static/js/async/6740.695aebf0.js +1 -0
- package/dist/console/static/js/async/6822.dbbb32bc.js +1 -0
- package/dist/console/static/js/async/6824.ad3540ab.js +1 -0
- package/dist/console/static/js/async/6930.585dab94.js +1 -0
- package/dist/console/static/js/async/6982.c81b95e6.js +1 -0
- package/dist/console/static/js/async/7046.ab2378c1.js +1 -0
- package/dist/console/static/js/async/7110.a603277f.js +1 -0
- package/dist/console/static/js/async/7142.4a21366f.js +1 -0
- package/dist/console/static/js/async/7348.15cc6148.js +1373 -0
- package/dist/console/static/js/async/7348.15cc6148.js.LICENSE.txt +14 -0
- package/dist/console/static/js/async/7374.b1ac5c44.js +1 -0
- package/dist/console/static/js/async/742.847f17ca.js +1 -0
- package/dist/console/static/js/async/7446.743954d8.js +1 -0
- package/dist/console/static/js/async/7673.59bbbaac.js +1 -0
- package/dist/console/static/js/async/7684.c5760c8c.js +1 -0
- package/dist/console/static/js/async/7714.c30d0f94.js +1 -0
- package/dist/console/static/js/async/8118.36d5a3bf.js +298 -0
- package/dist/console/static/js/async/8145.4bcf043a.js +1 -0
- package/dist/console/static/js/async/8246.408de938.js +1 -0
- package/dist/console/static/js/async/8390.bdae1f7d.js +1 -0
- package/dist/console/static/js/async/8422.fd94dbe1.js +1 -0
- package/dist/console/static/js/async/8434.94a0e2ae.js +1 -0
- package/dist/console/static/js/async/8518.3158de13.js +1 -0
- package/dist/console/static/js/async/8564.fc2eb841.js +1 -0
- package/dist/console/static/js/async/8678.73af4c9b.js +1 -0
- package/dist/console/static/js/async/8694.79747168.js +1 -0
- package/dist/console/static/js/async/8756.1de37b83.js +1 -0
- package/dist/console/static/js/async/8804.7fe6bdf9.js +3 -0
- package/dist/console/static/js/async/8883.e717ee94.js +1 -0
- package/dist/console/static/js/async/8886.fe6e876c.js +1 -0
- package/dist/console/static/js/async/9030.fc1ae402.js +1 -0
- package/dist/console/static/js/async/9094.5598d084.js +1 -0
- package/dist/console/static/js/async/9218.ee7b84b7.js +1 -0
- package/dist/console/static/js/async/94.9b80bc35.js +1 -0
- package/dist/console/static/js/async/9526.92aba34c.js +1 -0
- package/dist/console/static/js/async/9762.f83bc4f3.js +1 -0
- package/dist/console/static/js/async/984.e11c113a.js +1 -0
- package/dist/console/static/js/async/9846.246653cd.js +1 -0
- package/dist/console/static/js/index.4487e1ff.js +1 -0
- package/dist/console/static/js/lib-react.15d7ca9a.js +2 -0
- package/dist/console/static/js/lib-react.15d7ca9a.js.LICENSE.txt +49 -0
- package/dist/coze-C6PMDPBI.js +49 -0
- package/dist/coze-E6VGRNLV.js +48 -0
- package/dist/dashboard.command-J7XOZNXU.js +8 -0
- package/dist/dashboard.command-RV2NHDKW.js +7 -0
- package/dist/dingtalk-JNRNRN7E.js +77 -0
- package/dist/dingtalk-WZGGIAHJ.js +76 -0
- package/dist/douyin-miniprogram-AIJPPIZH.js +41 -0
- package/dist/douyin-miniprogram-HCYZ5NBW.js +42 -0
- package/dist/figma-2YYNSCDX.js +103 -0
- package/dist/figma-RYOBMENP.js +102 -0
- package/dist/firebase-2IJDDBXX.js +112 -0
- package/dist/firebase-OYSY6HPT.js +111 -0
- package/dist/firecrawl-2T3SBUW7.js +66 -0
- package/dist/firecrawl-IYYXLAZM.js +65 -0
- package/dist/flyai-7FJ4TRAG.js +81 -0
- package/dist/flyai-QS5Q6FJR.js +82 -0
- package/dist/gitagent-MWI75OIX.js +725 -0
- package/dist/gitagent-YBMWY7NZ.js +726 -0
- package/dist/gitee-3N7OFOM7.js +53 -0
- package/dist/gitee-KVNK6KLZ.js +54 -0
- package/dist/github-LUEC2LID.js +143 -0
- package/dist/github-XRO5Z3GC.js +142 -0
- package/dist/google-ads-A3QAJI4D.js +88 -0
- package/dist/google-ads-VPKWTX67.js +89 -0
- package/dist/google-analytics-C4UR5ZR2.js +50 -0
- package/dist/google-analytics-XDYZA2B7.js +49 -0
- package/dist/google-workspace-LL3EWVHH.js +320 -0
- package/dist/google-workspace-YX35SHHX.js +321 -0
- package/dist/huawei-xiaoyi-6BSMGJHR.js +40 -0
- package/dist/huawei-xiaoyi-KPWLTSHB.js +41 -0
- package/dist/hubspot-DIUHGEDI.js +45 -0
- package/dist/hubspot-FTIEMNZO.js +44 -0
- package/dist/huggingface-MJCOXA7E.js +116 -0
- package/dist/huggingface-UUXK2RHK.js +117 -0
- package/dist/index.d.ts +3013 -0
- package/dist/index.js +15649 -0
- package/dist/inference-ai-image-generation-CMI6R5T3.js +106 -0
- package/dist/inference-ai-image-generation-PXV6IG4U.js +107 -0
- package/dist/inference-sh-7AZOLEFI.js +94 -0
- package/dist/inference-sh-ABQOD3YF.js +95 -0
- package/dist/init.command-6E24K4H3.js +9 -0
- package/dist/init.command-O4HG4HKR.js +10 -0
- package/dist/klaviyo-6K5YEFNH.js +45 -0
- package/dist/klaviyo-LDPBWBSS.js +44 -0
- package/dist/kuaidi100-HGFM5VK2.js +42 -0
- package/dist/kuaidi100-UHPFCVXP.js +41 -0
- package/dist/lark-6LNA3LUQ.js +103 -0
- package/dist/lark-URVBZNS4.js +102 -0
- package/dist/linear-7QFSFPOD.js +57 -0
- package/dist/linear-T4ORUP7N.js +56 -0
- package/dist/lovart-PDUXRUHJ.js +99 -0
- package/dist/lovart-QO3SK55T.js +100 -0
- package/dist/meta-ads-SCNFI45S.js +42 -0
- package/dist/meta-ads-V6XPZWX3.js +41 -0
- package/dist/miclaw-5CNTW7VV.js +36 -0
- package/dist/miclaw-TPPPS2WN.js +35 -0
- package/dist/model-provider-AVSFJSZP.js +393 -0
- package/dist/model-provider-KFB76XV5.js +392 -0
- package/dist/notion-FZK76MN2.js +69 -0
- package/dist/notion-WFA7KGZZ.js +70 -0
- package/dist/oceanengine-3JZUS3PP.js +43 -0
- package/dist/oceanengine-5BRIJVJE.js +42 -0
- package/dist/opencli-PFXHGCS2.js +81 -0
- package/dist/opencli-VIGRJTGH.js +80 -0
- package/dist/paypal-33UADIPR.js +54 -0
- package/dist/paypal-Z5JYHIWD.js +55 -0
- package/dist/playwright-MG5WHK47.js +58 -0
- package/dist/playwright-SQAQ3DZG.js +59 -0
- package/dist/plugins-HZBWK3WQ.js +120 -0
- package/dist/plugins-I4GD5SZX.js +121 -0
- package/dist/posthog-MU5MAJOQ.js +79 -0
- package/dist/posthog-RJRRKDWB.js +80 -0
- package/dist/salesforce-34FVIJTG.js +82 -0
- package/dist/salesforce-3QZ6OFVO.js +83 -0
- package/dist/sentry-MCIRMACU.js +111 -0
- package/dist/sentry-PIWW46VA.js +110 -0
- package/dist/seo-suite-4SQ3I67Q.js +54 -0
- package/dist/seo-suite-WJXMA3S4.js +55 -0
- package/dist/serve.command-5FMIPQRY.js +10 -0
- package/dist/serve.command-DNE6GPMK.js +9 -0
- package/dist/shadowob-JELOWHWX.js +1068 -0
- package/dist/shadowob-PRSMI5MW.js +1069 -0
- package/dist/sherlock-2PKY2E2Y.js +66 -0
- package/dist/sherlock-C5ZWPPVT.js +67 -0
- package/dist/shopify-GL3NFVGE.js +94 -0
- package/dist/shopify-R4G3UXM6.js +93 -0
- package/dist/skill-discovery-7INAUP4D.js +77 -0
- package/dist/skill-discovery-YPXXV622.js +78 -0
- package/dist/state-7MCZBTR5.js +17 -0
- package/dist/state-FGOFLFBE.js +18 -0
- package/dist/stripe-C22RR4ZS.js +83 -0
- package/dist/stripe-LJNPQ3CQ.js +82 -0
- package/dist/supabase-IRNQ54FJ.js +98 -0
- package/dist/supabase-N4ONFJNQ.js +97 -0
- package/dist/taobao-aipaas-LRR4GMO3.js +45 -0
- package/dist/taobao-aipaas-RVKORSF4.js +46 -0
- package/dist/tapd-3JPVJ7XH.js +46 -0
- package/dist/tapd-TMQRSMFG.js +47 -0
- package/dist/tencent-ads-IGD33LO7.js +42 -0
- package/dist/tencent-ads-UHC6OPBV.js +43 -0
- package/dist/tencent-docs-C3A4J3CJ.js +47 -0
- package/dist/tencent-docs-O2SC4FHL.js +48 -0
- package/dist/tencent-maps-HMMWMNF4.js +37 -0
- package/dist/tencent-maps-OQOKHVW2.js +36 -0
- package/dist/vercel-KOXDDTHX.js +73 -0
- package/dist/vercel-OLNVDWMG.js +74 -0
- package/dist/webflow-FULU5Q2I.js +114 -0
- package/dist/webflow-OMJKZM54.js +115 -0
- package/dist/wechat-miniprogram-skyline-KYCDMQNW.js +74 -0
- package/dist/wechat-miniprogram-skyline-VR4FVIQL.js +75 -0
- package/dist/wechat-pay-BCMAJ6UW.js +50 -0
- package/dist/wechat-pay-YQQKXVUI.js +51 -0
- package/dist/wonda-NGWIORYN.js +81 -0
- package/dist/wonda-RBABXFNM.js +82 -0
- package/dist/wordpress-woocommerce-RDIUTHYT.js +57 -0
- package/dist/wordpress-woocommerce-RNA5HB3N.js +58 -0
- package/dist/wps-DAEFQHDE.js +47 -0
- package/dist/wps-LUWHMZQQ.js +48 -0
- package/dist/yuque-HCHTJWNI.js +72 -0
- package/dist/yuque-KRH5O74J.js +71 -0
- package/images/RUNNERS.md +270 -0
- package/images/cc-connect-runner/entrypoint.mjs +311 -0
- package/images/claude-runner/Dockerfile +88 -0
- package/images/claude-runner/RUNNER.md +222 -0
- package/images/claude-runner/entrypoint.mjs +2 -0
- package/images/codex-runner/Dockerfile +87 -0
- package/images/codex-runner/RUNNER.md +226 -0
- package/images/codex-runner/entrypoint.mjs +2 -0
- package/images/gemini-runner/Dockerfile +87 -0
- package/images/gemini-runner/RUNNER.md +218 -0
- package/images/gemini-runner/entrypoint.mjs +2 -0
- package/images/hermes-runner/Dockerfile +74 -0
- package/images/hermes-runner/RUNNER.md +243 -0
- package/images/hermes-runner/entrypoint.mjs +283 -0
- package/images/openclaw-runner/Dockerfile +212 -0
- package/images/openclaw-runner/RUNNER.md +170 -0
- package/images/openclaw-runner/entrypoint.mjs +1113 -0
- package/images/openclaw-runner/warm-runtime-deps.mjs +95 -0
- package/images/opencode-runner/Dockerfile +87 -0
- package/images/opencode-runner/RUNNER.md +202 -0
- package/images/opencode-runner/entrypoint.mjs +2 -0
- package/package.json +121 -0
- package/templates/agent-marketplace-buddy.template.json +131 -0
- package/templates/ai-werewolf.template.json +92 -0
- package/templates/bmad-method-buddy.template.json +123 -0
- package/templates/brain-fix.template.json +92 -0
- package/templates/claude-ads-buddy.template.json +123 -0
- package/templates/claude-financial-services-buddy.template.json +111 -0
- package/templates/claude-seo-buddy.template.json +123 -0
- package/templates/code-arena.template.json +92 -0
- package/templates/daily-brief.template.json +92 -0
- package/templates/e-wife.template.json +92 -0
- package/templates/everything-claude-code-buddy.template.json +125 -0
- package/templates/financial-freedom.template.json +92 -0
- package/templates/gitstory.template.json +92 -0
- package/templates/google-workspace-buddy.template.json +88 -0
- package/templates/gsd-buddy.template.json +119 -0
- package/templates/gstack-buddy.template.json +143 -0
- package/templates/gstack.template.json +92 -0
- package/templates/little-match-girl.template.json +114 -0
- package/templates/lovart-buddy.template.json +110 -0
- package/templates/marketingskills-buddy.template.json +102 -0
- package/templates/retire-buddy.template.json +92 -0
- package/templates/scientific-skills-buddy.template.json +119 -0
- package/templates/seomachine-buddy.template.json +113 -0
- package/templates/shadow-server-app-demo.template.json +105 -0
- package/templates/slavingia-skills-buddy.template.json +102 -0
- package/templates/superclaude-buddy.template.json +146 -0
- package/templates/superpowers-buddy.template.json +108 -0
- package/templates/world-pulse.template.json +92 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Gemini Runner Research
|
|
2
|
+
|
|
3
|
+
Research date: 2026-05-14.
|
|
4
|
+
|
|
5
|
+
## Target role
|
|
6
|
+
|
|
7
|
+
`gemini` should run through the ShadowOB `cc-connect` fork, not through OpenClaw
|
|
8
|
+
gateway or ACPX. The runner process should be:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
cc-connect fork -> agent type "gemini" -> gemini CLI
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Shadow transport should come from the cc-connect ShadowOB platform.
|
|
15
|
+
|
|
16
|
+
## Current repository state
|
|
17
|
+
|
|
18
|
+
The Gemini adapter and image now use the cc-connect fork path. The runtime
|
|
19
|
+
package emits `cc-connect-config.toml`, `.gemini/settings.json`, `GEMINI.md`,
|
|
20
|
+
workspace bootstrap files, and ShadowOB skill files through
|
|
21
|
+
`runtime-files.json`.
|
|
22
|
+
|
|
23
|
+
## Native Gemini CLI configuration
|
|
24
|
+
|
|
25
|
+
Gemini CLI uses JSON settings files with explicit precedence:
|
|
26
|
+
|
|
27
|
+
| Concern | Native Gemini CLI surface |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| System defaults | System-wide defaults file. |
|
|
30
|
+
| User settings | `~/.gemini/settings.json`. |
|
|
31
|
+
| Project settings | `.gemini/settings.json` in the project root. |
|
|
32
|
+
| System overrides | `/etc/gemini-cli/settings.json` on Linux, platform equivalents on Windows/macOS. |
|
|
33
|
+
| Context files | `.gemini` project directory and `GEMINI.md` discovery, configurable via context settings. |
|
|
34
|
+
| Models/auth | Gemini model config, `GEMINI_API_KEY`, `GOOGLE_API_KEY`, Google auth options. |
|
|
35
|
+
| MCP | `mcpServers.<SERVER_NAME>` in settings. |
|
|
36
|
+
| Commands | Built-in slash commands and custom commands loaded from `.toml` command files. |
|
|
37
|
+
| Hooks | `hooksConfig` plus hook arrays such as `BeforeTool`, `AfterTool`, `BeforeAgent`, `AfterAgent`, `SessionStart`, `SessionEnd`, `BeforeModel`, and `AfterModel`. |
|
|
38
|
+
| Extensions | Extension install/load policy and extension settings. |
|
|
39
|
+
| Checkpointing | `general.checkpointing.enabled`. |
|
|
40
|
+
| Telemetry/logs | `telemetry.enabled`, `telemetry.target`, `telemetry.logPrompts`, `telemetry.outfile`, and debug env/flags. |
|
|
41
|
+
|
|
42
|
+
The researched Gemini CLI docs do not describe a direct `SKILL.md` skill system
|
|
43
|
+
like Codex, Claude Code, OpenCode, or Hermes. Treat skills as Cloud-authored
|
|
44
|
+
prompts/context, Gemini extensions, or custom commands until a native Gemini
|
|
45
|
+
skill standard exists.
|
|
46
|
+
|
|
47
|
+
## Shadow slash command bridge
|
|
48
|
+
|
|
49
|
+
The runner package always materializes `/etc/shadowob/slash-commands.json` so
|
|
50
|
+
Shadow can load a stable command index. The Gemini runner owns its catalog in
|
|
51
|
+
`apps/cloud/src/runtimes/slash-commands/gemini.ts`; this is intentionally not a
|
|
52
|
+
common runtime artifact.
|
|
53
|
+
|
|
54
|
+
Official Gemini CLI slash commands researched from the reference include
|
|
55
|
+
`/about`, `/agents`, `/auth`, `/bug`, `/chat`, `/clear`, `/commands`,
|
|
56
|
+
`/compress`, `/copy`, `/directory`, `/docs`, `/editor`, `/extensions`,
|
|
57
|
+
`/help`, `/hooks`, `/ide`, `/init`, `/mcp`, `/memory`, `/model`,
|
|
58
|
+
`/permissions`, `/plan`, `/policies`, `/privacy`, `/quit`, `/restore`,
|
|
59
|
+
`/rewind`, `/resume`, `/settings`, `/shells`, `/setup-github`, `/skills`,
|
|
60
|
+
`/stats`, `/terminal-setup`, `/theme`, `/tools`, `/upgrade`, and `/vim`.
|
|
61
|
+
|
|
62
|
+
Current Cloud injection registers only names that do not collide with
|
|
63
|
+
cc-connect's universal bot commands. Examples include `/about`, `/agents`,
|
|
64
|
+
`/auth`, `/bug`, `/chat`, `/clear`, `/copy`, `/directory`, `/docs`, `/editor`,
|
|
65
|
+
`/extensions`, `/hooks`, `/ide`, `/init`, `/mcp`, `/permissions`, `/plan`,
|
|
66
|
+
`/policies`, `/privacy`, `/quit`, `/restore`, `/rewind`, `/resume`,
|
|
67
|
+
`/settings`, `/shells`, `/setup-github`, `/stats`, `/terminal-setup`,
|
|
68
|
+
`/theme`, `/tools`, and `/vim`. Overlapping names such as `/commands`,
|
|
69
|
+
`/compress`, `/help`, `/memory`, `/model`, `/skills`, and `/upgrade` remain
|
|
70
|
+
cc-connect-managed.
|
|
71
|
+
|
|
72
|
+
cc-connect local commands are prompt-backed. Native Gemini TUI passthrough and
|
|
73
|
+
custom TOML command discovery should be implemented inside the cc-connect Gemini
|
|
74
|
+
agent before Cloud treats them as exact CLI control commands.
|
|
75
|
+
|
|
76
|
+
## Schema and type anchors
|
|
77
|
+
|
|
78
|
+
- Settings schema URL:
|
|
79
|
+
`https://raw.githubusercontent.com/google-gemini/gemini-cli/main/schemas/settings.schema.json`.
|
|
80
|
+
- Schema `$id` matches that same raw GitHub URL and uses JSON Schema draft
|
|
81
|
+
2020-12.
|
|
82
|
+
- Type surface: JSON `settings.json`, `.gemini` project files, command TOML
|
|
83
|
+
files, context file settings, and extension config.
|
|
84
|
+
- cc-connect type anchor: `../cc-connect/agent/gemini/gemini.go`.
|
|
85
|
+
- Test rule: generated `.gemini/settings.json` must validate against the schema
|
|
86
|
+
and then survive a Gemini CLI startup smoke test.
|
|
87
|
+
|
|
88
|
+
## Provider and authentication notes
|
|
89
|
+
|
|
90
|
+
- Gemini CLI has three primary auth families: Google login, Gemini API key, and
|
|
91
|
+
Vertex AI. Google login is recommended for AI Pro/Ultra subscription usage but
|
|
92
|
+
requires browser/localhost interaction, so it is not the default Cloud
|
|
93
|
+
bootstrap path.
|
|
94
|
+
- AI Studio API-key mode uses `GEMINI_API_KEY`. Store it as a Kubernetes Secret
|
|
95
|
+
and never bake it into `.gemini/settings.json`.
|
|
96
|
+
- Vertex AI needs `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION`, then one
|
|
97
|
+
of ADC, a service-account JSON key, or `GOOGLE_API_KEY`. The docs require
|
|
98
|
+
unsetting `GOOGLE_API_KEY`/`GEMINI_API_KEY` when using ADC/service-account
|
|
99
|
+
flows.
|
|
100
|
+
- Gemini CLI settings do not expose a generic OpenAI-compatible provider block.
|
|
101
|
+
A Cloud adapter that needs non-Google models must use a different runner or a
|
|
102
|
+
separate gateway integration instead of faking Gemini config keys.
|
|
103
|
+
- Headless smoke tests should assert the selected auth mode and required env
|
|
104
|
+
keys without making a provider call unless the test environment explicitly
|
|
105
|
+
supplies real credentials.
|
|
106
|
+
|
|
107
|
+
## Security, audit, cost, network, and tools
|
|
108
|
+
|
|
109
|
+
- Approval: `general.defaultApprovalMode` supports `default`, `auto_edit`, and
|
|
110
|
+
`plan`; YOLO can only be enabled via CLI flags, so Cloud must not silently
|
|
111
|
+
encode YOLO in settings.
|
|
112
|
+
- Tools: `tools.exclude`, custom tool discovery/call commands, and MCP
|
|
113
|
+
`includeTools`/`excludeTools` define the effective tool surface.
|
|
114
|
+
- MCP: `mcpServers.<name>.trust = true` bypasses confirmations for that server;
|
|
115
|
+
do not emit it unless Cloud policy explicitly trusts the server.
|
|
116
|
+
- Browser/network: browser agent `allowedDomains`, sensitive action
|
|
117
|
+
confirmation, upload blocking, and max actions per task are the main network
|
|
118
|
+
controls found in the schema.
|
|
119
|
+
- Workspace trust: `security.folderTrust.enabled` and
|
|
120
|
+
`GEMINI_CLI_TRUST_THIS_FOLDER` matter for headless containers.
|
|
121
|
+
- Secrets: `security.environmentVariableRedaction.*` and
|
|
122
|
+
`advanced.excludedEnvVars` should be generated when audit policy requires
|
|
123
|
+
env filtering.
|
|
124
|
+
- Cost/audit: `model.maxSessionTurns`, `model.summarizeToolOutput.*.tokenBudget`,
|
|
125
|
+
telemetry `logPrompts`, telemetry target/outfile, and MCP tool count need
|
|
126
|
+
audit coverage.
|
|
127
|
+
- Logs: shell history is under `~/.gemini/tmp/<project_hash>/shell_history`;
|
|
128
|
+
chat/session data is under Gemini's `~/.gemini/tmp/<project_hash>/chats/`.
|
|
129
|
+
|
|
130
|
+
## cc-connect mapping
|
|
131
|
+
|
|
132
|
+
The local fork exposes `core.RegisterAgent("gemini", New)`. Important options
|
|
133
|
+
from `../cc-connect/agent/gemini/gemini.go`:
|
|
134
|
+
|
|
135
|
+
- `work_dir`
|
|
136
|
+
- `model`
|
|
137
|
+
- `mode`: `default`, `auto_edit`, `yolo`, `plan`
|
|
138
|
+
- `cmd`
|
|
139
|
+
- `timeout_mins`
|
|
140
|
+
|
|
141
|
+
The fork drives Gemini CLI with prompt mode and stream JSON output. It also knows
|
|
142
|
+
how to list sessions from Gemini's native chat storage under
|
|
143
|
+
`~/.gemini/tmp/<project_hash>/chats/`.
|
|
144
|
+
|
|
145
|
+
Example generated project shape:
|
|
146
|
+
|
|
147
|
+
```toml
|
|
148
|
+
[[projects]]
|
|
149
|
+
name = "agent-id"
|
|
150
|
+
|
|
151
|
+
[projects.agent]
|
|
152
|
+
type = "gemini"
|
|
153
|
+
|
|
154
|
+
[projects.agent.options]
|
|
155
|
+
work_dir = "/workspace"
|
|
156
|
+
|
|
157
|
+
[[projects.platforms]]
|
|
158
|
+
type = "shadowob"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Capability notes
|
|
162
|
+
|
|
163
|
+
- Models: map Cloud model preferences to Gemini CLI model selection and
|
|
164
|
+
provider environment variables.
|
|
165
|
+
- Skills: no native `SKILL.md` surface was found; use `GEMINI.md`, custom
|
|
166
|
+
commands, and extensions for phase 1.
|
|
167
|
+
- MCP: write `mcpServers` in `.gemini/settings.json`.
|
|
168
|
+
- Cron/routine: no native CLI cron surface found in the researched config docs;
|
|
169
|
+
Cloud should own scheduling for phase 1.
|
|
170
|
+
- Hooks: write `hooksConfig` and `hooks.*` in Gemini settings.
|
|
171
|
+
- Subagents: Gemini settings expose agent override and hook points around agent
|
|
172
|
+
execution, but cc-connect currently drives the main Gemini CLI agent only.
|
|
173
|
+
- Logs: use Gemini telemetry local output when enabled, Gemini native chat
|
|
174
|
+
storage, and cc-connect daemon logs.
|
|
175
|
+
|
|
176
|
+
## Migration implications
|
|
177
|
+
|
|
178
|
+
- OpenClaw, ACPX, and `@shadowob/openclaw-shadowob` are not used by the Gemini
|
|
179
|
+
runner image.
|
|
180
|
+
- The image embeds the cc-connect fork plus `@google/gemini-cli`.
|
|
181
|
+
- Generate `~/.gemini/settings.json`, project `.gemini/settings.json`,
|
|
182
|
+
`GEMINI.md`, custom command files, and MCP/telemetry settings as native
|
|
183
|
+
artifacts.
|
|
184
|
+
- Runtime package smoke tests verify native config/file generation; a Docker
|
|
185
|
+
smoke should still verify Gemini CLI startup and stream JSON through
|
|
186
|
+
cc-connect before publishing an image tag.
|
|
187
|
+
|
|
188
|
+
## Adapter and smoke tests
|
|
189
|
+
|
|
190
|
+
Unit tests:
|
|
191
|
+
|
|
192
|
+
- `.gemini/settings.json` validates against the official schema.
|
|
193
|
+
- Approval mode, MCP trust/include/exclude, browser domain restrictions, upload
|
|
194
|
+
blocking, telemetry, and env redaction map correctly.
|
|
195
|
+
- Skills are not emitted as fake `SKILL.md` Gemini config; they are represented
|
|
196
|
+
as context, command, or extension artifacts.
|
|
197
|
+
- cc-connect TOML contains `type = "gemini"` and no OpenClaw artifacts.
|
|
198
|
+
|
|
199
|
+
Container smoke:
|
|
200
|
+
|
|
201
|
+
- `cc-connect --version` and `gemini --version` work.
|
|
202
|
+
- `.gemini/settings.json`, `GEMINI.md`, command files, and extension files are
|
|
203
|
+
materialized.
|
|
204
|
+
- Schema validation runs inside the container or in the package test before
|
|
205
|
+
image build.
|
|
206
|
+
- Start cc-connect with `type = "gemini"` and inspect session/log paths.
|
|
207
|
+
- Assert headless trust settings are explicit and no provider secret is printed.
|
|
208
|
+
|
|
209
|
+
## Sources
|
|
210
|
+
|
|
211
|
+
- Gemini CLI configuration:
|
|
212
|
+
https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/configuration.md
|
|
213
|
+
- Gemini CLI authentication:
|
|
214
|
+
https://google-gemini.github.io/gemini-cli/docs/get-started/authentication.html
|
|
215
|
+
- Gemini CLI commands:
|
|
216
|
+
https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/commands.md
|
|
217
|
+
- Gemini CLI repository: https://github.com/google-gemini/gemini-cli
|
|
218
|
+
- cc-connect fork source: https://github.com/buggyblues/cc-connect
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1.7
|
|
2
|
+
|
|
3
|
+
# ─── Hermes Runner ────────────────────────────────────────────────────────
|
|
4
|
+
# Native Hermes gateway runner with ShadowOB plugin materialized by Cloud.
|
|
5
|
+
#
|
|
6
|
+
# Build from the repository root:
|
|
7
|
+
# docker build -t ghcr.io/buggyblues/hermes-runner:latest \
|
|
8
|
+
# -f apps/cloud/images/hermes-runner/Dockerfile .
|
|
9
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
FROM nousresearch/hermes-agent:latest AS runner
|
|
12
|
+
|
|
13
|
+
LABEL org.opencontainers.image.source="https://github.com/nicepkg/shadow"
|
|
14
|
+
LABEL org.opencontainers.image.description="Shadow Cloud Hermes Runner"
|
|
15
|
+
|
|
16
|
+
ARG NODE_VERSION=22.21.1
|
|
17
|
+
|
|
18
|
+
USER root
|
|
19
|
+
|
|
20
|
+
WORKDIR /app
|
|
21
|
+
|
|
22
|
+
RUN apt-get update && \
|
|
23
|
+
apt-get install -y --no-install-recommends ca-certificates curl xz-utils && \
|
|
24
|
+
rm -rf /var/lib/apt/lists/* && \
|
|
25
|
+
arch="$(dpkg --print-architecture)" && \
|
|
26
|
+
case "$arch" in \
|
|
27
|
+
amd64) node_arch="x64" ;; \
|
|
28
|
+
arm64) node_arch="arm64" ;; \
|
|
29
|
+
*) echo "Unsupported architecture for Node.js: $arch" >&2; exit 1 ;; \
|
|
30
|
+
esac && \
|
|
31
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
32
|
+
-o /tmp/node.tar.xz && \
|
|
33
|
+
tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \
|
|
34
|
+
rm -f /tmp/node.tar.xz && \
|
|
35
|
+
node --version
|
|
36
|
+
|
|
37
|
+
RUN npm init -y && \
|
|
38
|
+
npm install --no-audit --fund=false @shadowob/cli@latest @shadowob/connector@latest && \
|
|
39
|
+
ln -sf /opt/hermes/.venv/bin/hermes /usr/local/bin/hermes && \
|
|
40
|
+
ln -s /app/node_modules/.bin/shadowob /usr/local/bin/shadowob && \
|
|
41
|
+
ln -s /app/node_modules/.bin/shadowob-connector /usr/local/bin/shadowob-connector
|
|
42
|
+
|
|
43
|
+
RUN existing_user="$(getent passwd 1000 | cut -d: -f1 || true)" && \
|
|
44
|
+
if [ -n "$existing_user" ]; then \
|
|
45
|
+
if command -v groupmod >/dev/null 2>&1; then groupmod -n shadow "$existing_user" 2>/dev/null || true; fi; \
|
|
46
|
+
usermod -l shadow -d /home/shadow -m "$existing_user" 2>/dev/null || true; \
|
|
47
|
+
else \
|
|
48
|
+
groupadd -g 1000 shadow 2>/dev/null || groupadd shadow; \
|
|
49
|
+
useradd -u 1000 -g shadow -m -d /home/shadow -s /usr/sbin/nologin shadow; \
|
|
50
|
+
fi && \
|
|
51
|
+
mkdir -p /home/shadow/.hermes /etc/openclaw /etc/shadowob /var/log/shadowob \
|
|
52
|
+
/workspace /tmp/npm-cache && \
|
|
53
|
+
if [ ! -e /home/openclaw ]; then ln -s /home/shadow /home/openclaw; fi && \
|
|
54
|
+
chown -R 1000:1000 /home/shadow /etc/shadowob /var/log/shadowob \
|
|
55
|
+
/workspace /tmp/npm-cache /app
|
|
56
|
+
|
|
57
|
+
COPY --chown=1000:1000 apps/cloud/images/hermes-runner/entrypoint.mjs /app/entrypoint.mjs
|
|
58
|
+
|
|
59
|
+
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
|
|
60
|
+
CMD curl -f http://localhost:3100/health || exit 1
|
|
61
|
+
|
|
62
|
+
EXPOSE 3100
|
|
63
|
+
|
|
64
|
+
ENV NODE_ENV=production
|
|
65
|
+
ENV HOME=/home/shadow
|
|
66
|
+
ENV SHADOW_RUNNER_HEALTH_PORT=3100
|
|
67
|
+
ENV OPENCLAW_NO_RESPAWN=1
|
|
68
|
+
ENV HERMES_HOME=/home/shadow/.hermes
|
|
69
|
+
ENV npm_config_cache=/tmp/npm-cache
|
|
70
|
+
|
|
71
|
+
USER shadow
|
|
72
|
+
|
|
73
|
+
ENTRYPOINT ["tini", "--"]
|
|
74
|
+
CMD ["node", "/app/entrypoint.mjs"]
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Hermes Runner Research
|
|
2
|
+
|
|
3
|
+
Research date: 2026-05-14.
|
|
4
|
+
|
|
5
|
+
## Target role
|
|
6
|
+
|
|
7
|
+
`hermes` is a new Cloud runner. It should run Hermes Agent's native gateway with
|
|
8
|
+
the bundled ShadowOB Hermes platform plugin, not OpenClaw and not cc-connect:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
hermes gateway -> shadowob Hermes platform plugin
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
This directory now contains the Hermes runner Dockerfile and entrypoint. The
|
|
15
|
+
runtime loader and package generator emit Hermes-native files through
|
|
16
|
+
`runtime-files.json` and keep ShadowOB token material in Kubernetes Secret data.
|
|
17
|
+
|
|
18
|
+
## Native Hermes configuration
|
|
19
|
+
|
|
20
|
+
Hermes stores its runtime state under `~/.hermes/`:
|
|
21
|
+
|
|
22
|
+
| Concern | Native Hermes surface |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| Main config | `~/.hermes/config.yaml`. |
|
|
25
|
+
| Secrets | `~/.hermes/.env`. |
|
|
26
|
+
| Auth | `~/.hermes/auth.json`. |
|
|
27
|
+
| Personality | `~/.hermes/SOUL.md`. |
|
|
28
|
+
| Memory | `~/.hermes/memories/`. |
|
|
29
|
+
| Skills | `~/.hermes/skills/`, managed by Hermes skill tools. |
|
|
30
|
+
| Cron | `~/.hermes/cron/jobs.json` and outputs under `~/.hermes/cron/output/<job_id>/<timestamp>.md`. |
|
|
31
|
+
| Sessions | `~/.hermes/sessions/`. |
|
|
32
|
+
| Logs | `~/.hermes/logs/`, including gateway/error logs with secret redaction. |
|
|
33
|
+
| Plugins | `~/.hermes/plugins/` and `plugins.enabled` in config. |
|
|
34
|
+
|
|
35
|
+
Hermes supports local, Docker, SSH, Modal, Daytona, Vercel Sandbox, and
|
|
36
|
+
Singularity/Apptainer terminal backends. The Cloud runner should start with a
|
|
37
|
+
container-local backend and explicitly decide later whether to expose remote
|
|
38
|
+
backends.
|
|
39
|
+
|
|
40
|
+
## Schema and type anchors
|
|
41
|
+
|
|
42
|
+
- Static JSON Schema URL: none found in the official docs.
|
|
43
|
+
- Runtime schema source: Hermes web dashboard docs say all config fields are
|
|
44
|
+
auto-discovered from `DEFAULT_CONFIG` and exposed through `GET
|
|
45
|
+
/api/config/schema`.
|
|
46
|
+
- Config type: YAML `config.yaml` plus `.env` and profile directories.
|
|
47
|
+
- Plugin type anchor: `packages/connector/hermes-shadowob-plugin/plugin.yaml`
|
|
48
|
+
and its adapter code.
|
|
49
|
+
- Test rule: generated `config.yaml` must parse as YAML, load through Hermes,
|
|
50
|
+
and, when the dashboard/API is enabled, match the runtime schema endpoint.
|
|
51
|
+
|
|
52
|
+
## Provider and authentication notes
|
|
53
|
+
|
|
54
|
+
- Hermes requires at least one inference provider. The interactive
|
|
55
|
+
`hermes model` flow can configure providers, but Cloud should generate
|
|
56
|
+
`~/.hermes/config.yaml` and `~/.hermes/.env` directly from deployment
|
|
57
|
+
provider refs.
|
|
58
|
+
- Official provider paths include Nous Portal OAuth/subscription, Codex ChatGPT
|
|
59
|
+
OAuth, GitHub Copilot OAuth or tokens, Anthropic OAuth/API key/manual token,
|
|
60
|
+
OpenRouter, AI Gateway, z.ai/GLM, Kimi/Moonshot, and other provider-specific
|
|
61
|
+
API keys.
|
|
62
|
+
- API-key providers belong in `~/.hermes/.env`, for example
|
|
63
|
+
`OPENROUTER_API_KEY`, `AI_GATEWAY_API_KEY`, or provider-specific keys. The
|
|
64
|
+
adapter must not place raw model keys in ConfigMaps.
|
|
65
|
+
- Custom provider/base-url routing belongs in Hermes `model.default`,
|
|
66
|
+
`model.provider`, and `model.base_url` fields, plus routing/fallback config
|
|
67
|
+
when enabled.
|
|
68
|
+
- Hermes model auth and ShadowOB platform auth are separate. `SHADOW_TOKEN`
|
|
69
|
+
enables the messaging platform plugin; model provider keys enable inference.
|
|
70
|
+
|
|
71
|
+
## Models, tools, and extensions
|
|
72
|
+
|
|
73
|
+
| Concern | Hermes feature |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| Models | Primary model slots plus auxiliary models for side jobs. Providers include Nous Portal, OpenRouter, OpenAI, Anthropic, Google, and OpenAI-compatible endpoints. |
|
|
76
|
+
| Skills | Built-in and user-created skills with progressive disclosure, skill management, and curator maintenance. |
|
|
77
|
+
| MCP | Hermes MCP feature with server and tool filtering. |
|
|
78
|
+
| Cron/routine | Native cron jobs via `/cron`, `hermes cron`, and the `cronjob` tool; jobs can attach one or more skills. |
|
|
79
|
+
| Hooks | Plugin lifecycle hooks such as session start/end and tool/agent lifecycle callbacks. |
|
|
80
|
+
| Subagents | `delegate_task`, child agents, Kanban multi-agent board, and profile/worktree patterns. |
|
|
81
|
+
| Logs | Native logs in `~/.hermes/logs`; cron outputs are separate durable markdown artifacts. |
|
|
82
|
+
|
|
83
|
+
## Security, audit, cost, network, and tools
|
|
84
|
+
|
|
85
|
+
- User authorization: gateway access is deny-by-default unless allowlists,
|
|
86
|
+
pairing, or explicit allow-all are configured.
|
|
87
|
+
- Command approvals: `approvals.mode` supports `manual`, `smart`, and `off`;
|
|
88
|
+
`off` is equivalent to yolo and should be blocked by Cloud policy unless
|
|
89
|
+
explicitly requested.
|
|
90
|
+
- Hardline blocklist: catastrophic commands are denied even in yolo/off modes.
|
|
91
|
+
- Containers: Docker backend drops capabilities, sets no-new-privileges, caps
|
|
92
|
+
PIDs, and uses tmpfs for temp dirs; Cloud should start here for production
|
|
93
|
+
gateway deployments.
|
|
94
|
+
- Resources: container CPU, memory, disk, and persistence flags belong in
|
|
95
|
+
`terminal.*` config and must be auditable.
|
|
96
|
+
- Secrets: terminal/docker env passthrough is explicit allowlist only; credential
|
|
97
|
+
files are mounted read-only when declared by skills.
|
|
98
|
+
- MCP: Hermes filters MCP environment separately from terminal passthrough; use
|
|
99
|
+
MCP `env` config for MCP secrets.
|
|
100
|
+
- Cost/audit: native cron jobs, tool gateway use, delegate/subagent work,
|
|
101
|
+
auxiliary models, container resources, and logs under `~/.hermes/logs` need
|
|
102
|
+
Cloud audit labels.
|
|
103
|
+
- Network: provider endpoints, tool gateway, MCP remote endpoints, messaging
|
|
104
|
+
platform endpoints, and Docker/remote backend egress should be captured in the
|
|
105
|
+
runner package.
|
|
106
|
+
|
|
107
|
+
## Shadow integration
|
|
108
|
+
|
|
109
|
+
The repository already includes a Hermes ShadowOB platform plugin at
|
|
110
|
+
`packages/connector/hermes-shadowob-plugin`. It currently supports:
|
|
111
|
+
|
|
112
|
+
- channel, direct, and thread inbound messages
|
|
113
|
+
- outbound text and media replies
|
|
114
|
+
- Socket.IO receive with REST polling fallback
|
|
115
|
+
- startup catch-up window
|
|
116
|
+
- typing/activity and heartbeat status
|
|
117
|
+
- dynamic channel and policy discovery through Shadow APIs
|
|
118
|
+
- optional slash command registration through `SHADOW_SLASH_COMMANDS_JSON`
|
|
119
|
+
- the runner package materializes `/etc/shadowob/slash-commands.json` from the
|
|
120
|
+
Hermes-owned catalog in `apps/cloud/src/runtimes/slash-commands/hermes.ts`
|
|
121
|
+
- interactive component metadata forwarding
|
|
122
|
+
- cron/send_message delivery through `SHADOW_HOME_CHANNEL`
|
|
123
|
+
|
|
124
|
+
Hermes publishes both CLI and messaging slash command surfaces. Researched CLI
|
|
125
|
+
commands include session commands such as `/new`, `/clear`, `/history`,
|
|
126
|
+
`/save`, `/retry`, `/undo`, `/compress`, `/rollback`, `/queue`, `/steer`,
|
|
127
|
+
`/goal`, `/resume`, `/sessions`, `/agents`, `/background`, and `/branch`;
|
|
128
|
+
configuration commands such as `/model`, `/codex-runtime`, `/personality`,
|
|
129
|
+
`/verbose`, `/fast`, `/reasoning`, `/skin`, `/statusbar`, `/voice`, `/yolo`,
|
|
130
|
+
`/footer`, and `/busy`; tool commands such as `/tools`, `/toolsets`,
|
|
131
|
+
`/browser`, `/skills`, `/cron`, `/curator`, `/kanban`, `/reload-mcp`,
|
|
132
|
+
`/reload-skills`, and `/plugins`; and info/exit commands such as `/usage`,
|
|
133
|
+
`/platforms`, `/paste`, `/copy`, `/image`, `/debug`, `/profile`, `/gquota`,
|
|
134
|
+
and `/quit`.
|
|
135
|
+
|
|
136
|
+
Current Cloud injection exposes the messaging-safe subset documented by Hermes:
|
|
137
|
+
`/new`, `/reset`, `/status`, `/stop`, `/model`, `/codex-runtime`,
|
|
138
|
+
`/personality`, `/fast`, `/retry`, `/undo`, `/sethome`, `/compress`, `/title`,
|
|
139
|
+
`/resume`, `/usage`, `/insights`, `/reasoning`, `/voice`, `/rollback`,
|
|
140
|
+
`/background`, `/queue`, `/steer`, `/goal`, `/footer`, `/curator`, `/kanban`,
|
|
141
|
+
`/reload-mcp`, `/yolo`, `/commands`, `/approve`, `/deny`, `/update`,
|
|
142
|
+
`/restart`, `/debug`, and `/help`. Hermes documents `/cron` as CLI-only, so it
|
|
143
|
+
is not registered into Shadow until the gateway supports messaging cron safely.
|
|
144
|
+
|
|
145
|
+
Example generated config:
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
plugins:
|
|
149
|
+
enabled:
|
|
150
|
+
- shadowob
|
|
151
|
+
|
|
152
|
+
platforms:
|
|
153
|
+
shadowob:
|
|
154
|
+
enabled: true
|
|
155
|
+
token: "${SHADOW_TOKEN}"
|
|
156
|
+
extra:
|
|
157
|
+
base_url: "${SHADOW_BASE_URL}"
|
|
158
|
+
mention_only: false
|
|
159
|
+
rest_only: false
|
|
160
|
+
catchup_minutes: 0
|
|
161
|
+
download_media: true
|
|
162
|
+
slash_commands: []
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Required environment:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
SHADOW_BASE_URL=<shadow-api-url>
|
|
169
|
+
SHADOW_TOKEN=...
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Capability notes
|
|
173
|
+
|
|
174
|
+
- Models: generate Hermes provider/model config natively in `config.yaml`.
|
|
175
|
+
- Skills: materialize Hermes skills under `~/.hermes/skills` when Cloud owns the
|
|
176
|
+
runner profile.
|
|
177
|
+
- MCP: write Hermes MCP config rather than OpenClaw or Codex MCP formats.
|
|
178
|
+
- Cron/routine: Hermes has the strongest native cron surface among the target
|
|
179
|
+
runners; keep cron jobs in Hermes native storage when the agent runtime is
|
|
180
|
+
Hermes.
|
|
181
|
+
- Hooks: expose plugin hooks through `plugins.enabled` and plugin files, not a
|
|
182
|
+
central OpenClaw hook adapter.
|
|
183
|
+
- Subagents: support Hermes delegation later as native Hermes multi-agent
|
|
184
|
+
features, not as OpenClaw `agents.list`.
|
|
185
|
+
- Logs: collect `~/.hermes/logs` and cron output directories separately.
|
|
186
|
+
|
|
187
|
+
## Migration implications
|
|
188
|
+
|
|
189
|
+
- `hermes` is included in the `AgentRuntime` schema and runtime loader.
|
|
190
|
+
- `hermes-runner` installs Hermes Agent, ShadowOB CLI/connector packages, and
|
|
191
|
+
copies/enables the ShadowOB Hermes plugin.
|
|
192
|
+
- Generate `~/.hermes/config.yaml`, `.env`, `SOUL.md`, skills, MCP config, and
|
|
193
|
+
cron config as native artifacts.
|
|
194
|
+
- Keep this runner out of the cc-connect narrowed binary. Hermes already has a
|
|
195
|
+
native gateway/platform plugin boundary.
|
|
196
|
+
- Runtime package smoke tests verify Hermes config/file generation; an
|
|
197
|
+
end-to-end Docker smoke should still start `hermes gateway`, resolve the Buddy
|
|
198
|
+
id through Shadow, register slash commands, and send a DM response before
|
|
199
|
+
publishing an image tag.
|
|
200
|
+
|
|
201
|
+
## Adapter and smoke tests
|
|
202
|
+
|
|
203
|
+
Unit tests:
|
|
204
|
+
|
|
205
|
+
- `config.yaml` parses and contains expected provider/model, terminal,
|
|
206
|
+
approvals, gateway, plugin, MCP, cron, and skill fields.
|
|
207
|
+
- ShadowOB plugin env/config is generated from Cloud fields without leaking
|
|
208
|
+
`SHADOW_TOKEN` into non-secret config.
|
|
209
|
+
- `approvals.mode: off`, allow-all gateway access, unrestricted env passthrough,
|
|
210
|
+
and persistent containers require explicit Cloud policy opt-in.
|
|
211
|
+
- Cron jobs use sanitized IDs and cannot write outside the Hermes cron store.
|
|
212
|
+
|
|
213
|
+
Container smoke:
|
|
214
|
+
|
|
215
|
+
- `hermes --version` works and plugin dependencies are installed.
|
|
216
|
+
- `hermes gateway` starts with `plugins.enabled: ["shadowob"]`.
|
|
217
|
+
- `~/.hermes/config.yaml`, `.env`, `SOUL.md`, `skills`, `cron`, `sessions`, and
|
|
218
|
+
`logs` directories are created.
|
|
219
|
+
- Dashboard/API schema endpoint is checked when enabled.
|
|
220
|
+
- Logs show plugin startup and deny/allow policy without raw Shadow token.
|
|
221
|
+
|
|
222
|
+
## Sources
|
|
223
|
+
|
|
224
|
+
- Hermes docs index: https://hermes-agent.nousresearch.com/docs/llms.txt
|
|
225
|
+
- Configuration:
|
|
226
|
+
https://hermes-agent.nousresearch.com/docs/user-guide/configuration
|
|
227
|
+
- Security: https://hermes-agent.nousresearch.com/docs/user-guide/security
|
|
228
|
+
- Tool gateway:
|
|
229
|
+
https://hermes-agent.nousresearch.com/docs/user-guide/features/tool-gateway
|
|
230
|
+
- Configuring models:
|
|
231
|
+
https://hermes-agent.nousresearch.com/docs/user-guide/configuring-models
|
|
232
|
+
- AI providers:
|
|
233
|
+
https://hermes-agent.nousresearch.com/docs/integrations/providers
|
|
234
|
+
- Skills:
|
|
235
|
+
https://hermes-agent.nousresearch.com/docs/user-guide/features/skills
|
|
236
|
+
- MCP: https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp
|
|
237
|
+
- Cron: https://hermes-agent.nousresearch.com/docs/user-guide/features/cron
|
|
238
|
+
- Hooks: https://hermes-agent.nousresearch.com/docs/user-guide/features/hooks
|
|
239
|
+
- Delegation:
|
|
240
|
+
https://hermes-agent.nousresearch.com/docs/user-guide/features/delegation
|
|
241
|
+
- Sessions: https://hermes-agent.nousresearch.com/docs/user-guide/sessions
|
|
242
|
+
- Slash commands:
|
|
243
|
+
https://github.com/NousResearch/hermes-agent/blob/main/website/docs/reference/slash-commands.md
|