@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,222 @@
|
|
|
1
|
+
# Claude Code Runner Research
|
|
2
|
+
|
|
3
|
+
Research date: 2026-05-14.
|
|
4
|
+
|
|
5
|
+
## Target role
|
|
6
|
+
|
|
7
|
+
`claude-code` should run through the ShadowOB `cc-connect` fork, not through
|
|
8
|
+
OpenClaw gateway or ACPX. The runner process should be:
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
cc-connect fork -> agent type "claudecode" -> claude CLI
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Shadow messaging, DMs, slash commands, attachments, and typing/progress should
|
|
15
|
+
come from the cc-connect ShadowOB platform.
|
|
16
|
+
|
|
17
|
+
## Current repository state
|
|
18
|
+
|
|
19
|
+
The previous `apps/cloud` adapter declared:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
openclaw gateway -> ACPX plugin -> claude CLI process
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The current adapter and Dockerfile now use the cc-connect fork path. The runner
|
|
26
|
+
package emits `cc-connect-config.toml`, Claude settings, MCP config, and
|
|
27
|
+
ShadowOB skill files through `runtime-files.json`.
|
|
28
|
+
|
|
29
|
+
## Native Claude Code configuration
|
|
30
|
+
|
|
31
|
+
Claude Code has its own hierarchy and should not be flattened into OpenClaw
|
|
32
|
+
agent defaults:
|
|
33
|
+
|
|
34
|
+
| Concern | Native Claude Code surface |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| Settings | `~/.claude/settings.json`, project `.claude/settings.json`, local `.claude/settings.local.json`, managed settings. |
|
|
37
|
+
| Models | `model`, `availableModels`, `modelOverrides`, `effortLevel`, `ANTHROPIC_MODEL`, provider envs. |
|
|
38
|
+
| Permissions | `permissions.allow`, `permissions.ask`, `permissions.deny`, permission modes, managed restrictions. |
|
|
39
|
+
| Memory/context | `CLAUDE.md`, `.claude/CLAUDE.md`, `CLAUDE.local.md`, managed `claudeMd`. |
|
|
40
|
+
| MCP | User/local state in `~/.claude.json`; project MCP servers in `.mcp.json`; managed MCP policy. |
|
|
41
|
+
| Skills and slash commands | `.claude/skills/<name>/SKILL.md`; legacy `.claude/commands/*.md` still works and is treated like skills. |
|
|
42
|
+
| Hooks | `hooks` in settings, plus hooks from skills, subagents, and plugins. |
|
|
43
|
+
| Subagents | `~/.claude/agents/` and `.claude/agents/`; settings can run the main thread as a named subagent. |
|
|
44
|
+
| Logs and telemetry | Claude Code monitoring/usage and OpenTelemetry settings; session retention via `cleanupPeriodDays`, `CLAUDE_CODE_SKIP_PROMPT_HISTORY`, and non-interactive session persistence flags. |
|
|
45
|
+
|
|
46
|
+
## Shadow slash command bridge
|
|
47
|
+
|
|
48
|
+
The runner package always materializes `/etc/shadowob/slash-commands.json` so
|
|
49
|
+
Shadow can load a stable command index. The Claude Code runner owns its catalog
|
|
50
|
+
in `apps/cloud/src/runtimes/slash-commands/claude-code.ts`; this is
|
|
51
|
+
intentionally not a common runtime artifact.
|
|
52
|
+
|
|
53
|
+
Official Claude Code commands researched from the Claude Code command reference
|
|
54
|
+
include `/add-dir`, `/agents`, `/clear`, `/compact`, `/config`, `/cost`,
|
|
55
|
+
`/doctor`, `/hooks`, `/init`, `/login`, `/logout`, `/mcp`, `/memory`,
|
|
56
|
+
`/model`, `/permissions`, `/pr_comments`, `/review`, `/security-review`,
|
|
57
|
+
`/setup-bedrock`, `/setup-vertex`, `/simplify`, `/skills`, `/status`,
|
|
58
|
+
`/statusline`, `/tasks`, `/terminal-setup`, `/theme`, `/tui`, `/ultraplan`,
|
|
59
|
+
`/ultrareview`, `/usage`, `/voice`, and `/web-setup`.
|
|
60
|
+
|
|
61
|
+
Current Cloud injection registers only names that do not collide with
|
|
62
|
+
cc-connect's universal bot commands. For example, `/review`, `/permissions`,
|
|
63
|
+
`/hooks`, `/mcp`, `/login`, `/logout`, `/security-review`, `/setup-bedrock`,
|
|
64
|
+
`/setup-vertex`, and `/terminal-setup` are injected; `/model`, `/status`,
|
|
65
|
+
`/usage`, `/skills`, `/config`, `/doctor`, `/stop`, `/help`, and `/compact`
|
|
66
|
+
remain cc-connect management commands.
|
|
67
|
+
|
|
68
|
+
cc-connect local commands are prompt-backed. True Claude Code TUI passthrough
|
|
69
|
+
requires a cc-connect agent enhancement so colliding command names do not break
|
|
70
|
+
session, provider, and permission management.
|
|
71
|
+
|
|
72
|
+
## Schema and type anchors
|
|
73
|
+
|
|
74
|
+
- Settings schema URL:
|
|
75
|
+
`https://json.schemastore.org/claude-code-settings.json`.
|
|
76
|
+
- Claude Code docs call this the official JSON schema, but warn that it can lag
|
|
77
|
+
the newest CLI settings. Treat docs and CLI behavior as authoritative when the
|
|
78
|
+
schema is behind.
|
|
79
|
+
- Global config `~/.claude.json` is not the same schema as
|
|
80
|
+
`settings.json`; docs say adding those keys to `settings.json` is invalid.
|
|
81
|
+
- MCP project config uses `.mcp.json`; subagents use Markdown files under
|
|
82
|
+
`.claude/agents/` with YAML frontmatter.
|
|
83
|
+
- cc-connect type anchor: `../cc-connect/agent/claudecode/claudecode.go`.
|
|
84
|
+
|
|
85
|
+
## Provider and authentication notes
|
|
86
|
+
|
|
87
|
+
- Headless Cloud runners should prefer API/provider secrets over subscription
|
|
88
|
+
login. `ANTHROPIC_API_KEY` forces API-key usage in non-interactive mode and
|
|
89
|
+
overrides Claude subscription auth when present.
|
|
90
|
+
- Claude subscription login can be useful locally, but a clean Kubernetes
|
|
91
|
+
container should not depend on a browser-backed Claude Pro/Max/Team session.
|
|
92
|
+
- Custom gateway routing is not the same as model selection:
|
|
93
|
+
`ANTHROPIC_BASE_URL` changes the request destination, while `model`,
|
|
94
|
+
`ANTHROPIC_DEFAULT_*_MODEL`, `CLAUDE_CODE_SUBAGENT_MODEL`, or
|
|
95
|
+
`ANTHROPIC_CUSTOM_MODEL_OPTION` determine model IDs.
|
|
96
|
+
- For LLM gateways, enable model discovery with
|
|
97
|
+
`CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1` when the gateway exposes
|
|
98
|
+
`/v1/models`; otherwise emit `ANTHROPIC_CUSTOM_MODEL_OPTION` and companion
|
|
99
|
+
display metadata for the selected Cloud model.
|
|
100
|
+
- Bedrock, Vertex AI, Foundry, and Claude Platform on AWS have provider-specific
|
|
101
|
+
envs and model identifiers. The adapter must keep those as Claude-native env
|
|
102
|
+
or settings values, never as OpenClaw `models.providers`.
|
|
103
|
+
|
|
104
|
+
## Security, audit, cost, network, and tools
|
|
105
|
+
|
|
106
|
+
- Permissions: `permissions.allow`, `permissions.ask`, `permissions.deny`,
|
|
107
|
+
`permissions.defaultMode`, and managed `allowManagedPermissionRulesOnly`.
|
|
108
|
+
Deny rules are evaluated before ask/allow.
|
|
109
|
+
- Bypass control: `disableBypassPermissionsMode = "disable"` should be the
|
|
110
|
+
default for managed Cloud runners unless the deployment explicitly enables
|
|
111
|
+
bypass.
|
|
112
|
+
- Sandbox: `sandbox.enabled`, `failIfUnavailable`, filesystem allow/deny read
|
|
113
|
+
and write lists, and network allow/deny domains.
|
|
114
|
+
- Hooks: `allowManagedHooksOnly`, `allowedHttpHookUrls`, and
|
|
115
|
+
`httpHookAllowedEnvVars` are required when HTTP hooks are generated.
|
|
116
|
+
- MCP: managed allow/deny MCP settings must be represented separately from
|
|
117
|
+
`.mcp.json`.
|
|
118
|
+
- Tool surface: Claude permission rules cover tool names such as `Bash`,
|
|
119
|
+
`Read`, `Edit`, `WebFetch`, MCP tools, and Agent rules.
|
|
120
|
+
- Cost/audit: model, `maxContextTokens`, skill listing budgets, cleanup period,
|
|
121
|
+
and OpenTelemetry env/settings should be generated when Cloud audit is
|
|
122
|
+
enabled.
|
|
123
|
+
- Logs: collect cc-connect daemon logs plus Claude Code monitoring/usage output
|
|
124
|
+
and transcript retention state.
|
|
125
|
+
|
|
126
|
+
## cc-connect mapping
|
|
127
|
+
|
|
128
|
+
The local fork exposes `core.RegisterAgent("claudecode", New)`. Important
|
|
129
|
+
options from `../cc-connect/agent/claudecode/claudecode.go`:
|
|
130
|
+
|
|
131
|
+
- `work_dir`
|
|
132
|
+
- `cli_path`
|
|
133
|
+
- `model`
|
|
134
|
+
- `reasoning_effort`
|
|
135
|
+
- `mode`: `default`, `acceptEdits`, `plan`, `auto`, `bypassPermissions`
|
|
136
|
+
- `allowed_tools` and `disallowed_tools`
|
|
137
|
+
- `max_context_tokens`
|
|
138
|
+
- `router_url` and `router_api_key`
|
|
139
|
+
- `system_prompt`
|
|
140
|
+
- `env`
|
|
141
|
+
- `run_as_user` and `run_as_env`
|
|
142
|
+
|
|
143
|
+
The Cloud runner package should generate a `cc-connect` project like:
|
|
144
|
+
|
|
145
|
+
```toml
|
|
146
|
+
[[projects]]
|
|
147
|
+
name = "agent-id"
|
|
148
|
+
|
|
149
|
+
[projects.agent]
|
|
150
|
+
type = "claudecode"
|
|
151
|
+
|
|
152
|
+
[projects.agent.options]
|
|
153
|
+
work_dir = "/workspace"
|
|
154
|
+
|
|
155
|
+
[[projects.platforms]]
|
|
156
|
+
type = "shadowob"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Provider secrets should be passed through provider refs or environment files,
|
|
160
|
+
not through OpenClaw `models.providers`.
|
|
161
|
+
|
|
162
|
+
## Capability notes
|
|
163
|
+
|
|
164
|
+
- Models: map Cloud model preferences to Claude `model` and optional
|
|
165
|
+
`availableModels`/provider envs.
|
|
166
|
+
- Skills/slash commands: materialize `.claude/skills` and optionally legacy
|
|
167
|
+
`.claude/commands` only for compatibility.
|
|
168
|
+
- MCP: write `.mcp.json` for project-scoped MCP and avoid relying on
|
|
169
|
+
`~/.claude.json` in immutable images.
|
|
170
|
+
- Cron/routine: Claude Code has scheduled prompt support in its automation
|
|
171
|
+
docs, but Cloud phase 1 should treat scheduling as a Cloud/Shadow concern
|
|
172
|
+
unless explicitly mounting a Claude-native schedule store.
|
|
173
|
+
- Hooks: write Claude settings `hooks`, not OpenClaw `hooks`.
|
|
174
|
+
- Subagents: materialize `.claude/agents` and any preloaded skill references.
|
|
175
|
+
- Logs: collect both cc-connect daemon logs and Claude Code native telemetry or
|
|
176
|
+
transcript artifacts when enabled.
|
|
177
|
+
|
|
178
|
+
## Migration implications
|
|
179
|
+
|
|
180
|
+
- OpenClaw and ACPX have been removed from the Claude runner image path.
|
|
181
|
+
- The image builds the cc-connect fork binary and installs the Claude CLI.
|
|
182
|
+
- Generate Claude config files in the workspace/home directory before starting
|
|
183
|
+
cc-connect.
|
|
184
|
+
- Keep `run_as_user` available for OS-user isolation; the fork currently
|
|
185
|
+
supports it for Claude Code.
|
|
186
|
+
|
|
187
|
+
## Adapter and smoke tests
|
|
188
|
+
|
|
189
|
+
Unit tests:
|
|
190
|
+
|
|
191
|
+
- `settings.json` validates against the schema URL when only schema-known fields
|
|
192
|
+
are emitted.
|
|
193
|
+
- Managed-only settings are not written into project settings.
|
|
194
|
+
- Permission deny/ask/allow, sandbox filesystem, sandbox network, HTTP hook URL
|
|
195
|
+
allowlists, MCP restrictions, and `disableBypassPermissionsMode` are mapped.
|
|
196
|
+
- cc-connect TOML contains `type = "claudecode"` and no OpenClaw artifacts.
|
|
197
|
+
- Secret env vars are kept in secret data or per-runtime secret files.
|
|
198
|
+
|
|
199
|
+
Container smoke:
|
|
200
|
+
|
|
201
|
+
- `cc-connect --version` and `claude --version` work.
|
|
202
|
+
- Generated `.claude/settings.json` and `.mcp.json` exist in the expected
|
|
203
|
+
workspace/home paths.
|
|
204
|
+
- Container starts cc-connect with the ShadowOB platform block.
|
|
205
|
+
- A denied read target such as `.env` remains denied in generated config.
|
|
206
|
+
- Logs include cc-connect startup but no raw Shadow token or provider key.
|
|
207
|
+
|
|
208
|
+
## Sources
|
|
209
|
+
|
|
210
|
+
- Settings: https://code.claude.com/docs/en/settings
|
|
211
|
+
- Model configuration: https://code.claude.com/docs/en/model-config
|
|
212
|
+
- Environment variables: https://code.claude.com/docs/en/env-vars
|
|
213
|
+
- Permissions: https://code.claude.com/docs/en/permissions
|
|
214
|
+
- Sandboxing: https://code.claude.com/docs/en/sandboxing
|
|
215
|
+
- Skills and custom commands:
|
|
216
|
+
https://code.claude.com/docs/en/skills
|
|
217
|
+
- Slash commands: https://code.claude.com/docs/en/commands
|
|
218
|
+
- MCP: https://code.claude.com/docs/en/mcp
|
|
219
|
+
- Hooks: https://code.claude.com/docs/en/hooks
|
|
220
|
+
- Subagents: https://code.claude.com/docs/en/sub-agents
|
|
221
|
+
- Monitoring: https://code.claude.com/docs/en/monitoring-usage
|
|
222
|
+
- cc-connect fork source: https://github.com/buggyblues/cc-connect
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1.7
|
|
2
|
+
|
|
3
|
+
# ─── Codex Runner ─────────────────────────────────────────────────────────
|
|
4
|
+
# Native cc-connect runner for OpenAI Codex.
|
|
5
|
+
#
|
|
6
|
+
# Build from the repository root:
|
|
7
|
+
# docker build -t ghcr.io/buggyblues/codex-runner:latest \
|
|
8
|
+
# -f apps/cloud/images/codex-runner/Dockerfile .
|
|
9
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
FROM golang:1.25-bookworm AS cc-builder
|
|
12
|
+
|
|
13
|
+
ARG CC_CONNECT_REF=63b5d59127b3004bc7002f2d51892b1f2a91ea83
|
|
14
|
+
ARG CC_CONNECT_REPO=https://github.com/buggyblues/cc-connect.git
|
|
15
|
+
|
|
16
|
+
WORKDIR /build
|
|
17
|
+
|
|
18
|
+
RUN apt-get update && \
|
|
19
|
+
apt-get install -y --no-install-recommends ca-certificates git && \
|
|
20
|
+
rm -rf /var/lib/apt/lists/*
|
|
21
|
+
|
|
22
|
+
RUN git clone --depth 1 "${CC_CONNECT_REPO}" /tmp/cc-connect && \
|
|
23
|
+
cd /tmp/cc-connect && \
|
|
24
|
+
git fetch --depth 1 origin "${CC_CONNECT_REF}" && \
|
|
25
|
+
git checkout "${CC_CONNECT_REF}" && \
|
|
26
|
+
CGO_ENABLED=0 go build \
|
|
27
|
+
-tags "no_web no_acp no_cursor no_devin no_iflow no_kimi no_qoder no_feishu no_telegram no_discord no_slack no_dingtalk no_wecom no_weixin no_qq no_qqbot no_line no_weibo" \
|
|
28
|
+
-ldflags "-s -w" \
|
|
29
|
+
-o /build/cc-connect ./cmd/cc-connect
|
|
30
|
+
|
|
31
|
+
FROM node:22-bookworm-slim AS node-deps
|
|
32
|
+
|
|
33
|
+
WORKDIR /build
|
|
34
|
+
|
|
35
|
+
RUN npm init -y && \
|
|
36
|
+
npm install --no-audit --fund=false \
|
|
37
|
+
@openai/codex@latest \
|
|
38
|
+
@shadowob/cli@latest \
|
|
39
|
+
@shadowob/connector@latest
|
|
40
|
+
|
|
41
|
+
FROM node:22-bookworm-slim AS runner
|
|
42
|
+
|
|
43
|
+
LABEL org.opencontainers.image.source="https://github.com/nicepkg/shadow"
|
|
44
|
+
LABEL org.opencontainers.image.description="Shadow Cloud Codex Runner (cc-connect + Codex)"
|
|
45
|
+
|
|
46
|
+
RUN apt-get update && \
|
|
47
|
+
apt-get install -y --no-install-recommends ca-certificates curl git tini && \
|
|
48
|
+
rm -rf /var/lib/apt/lists/*
|
|
49
|
+
|
|
50
|
+
RUN userdel -r node 2>/dev/null || true; \
|
|
51
|
+
groupdel node 2>/dev/null || true; \
|
|
52
|
+
groupadd -g 1000 shadow; \
|
|
53
|
+
useradd -u 1000 -g shadow -m -d /home/shadow -s /usr/sbin/nologin shadow
|
|
54
|
+
|
|
55
|
+
WORKDIR /app
|
|
56
|
+
RUN mkdir -p /home/shadow/.cc-connect /home/shadow/.codex /etc/openclaw /etc/shadowob \
|
|
57
|
+
/var/log/shadowob /workspace /tmp/npm-cache && \
|
|
58
|
+
ln -s /home/shadow /home/openclaw && \
|
|
59
|
+
chown -R shadow:shadow /home/shadow /etc/shadowob /var/log/shadowob \
|
|
60
|
+
/workspace /tmp/npm-cache /app
|
|
61
|
+
|
|
62
|
+
COPY --from=node-deps --chown=shadow:shadow /build/node_modules ./node_modules
|
|
63
|
+
COPY --from=node-deps --chown=shadow:shadow /build/package.json ./package.json
|
|
64
|
+
COPY --from=cc-builder /build/cc-connect /usr/local/bin/cc-connect
|
|
65
|
+
|
|
66
|
+
RUN ln -s /app/node_modules/.bin/codex /usr/local/bin/codex && \
|
|
67
|
+
ln -s /app/node_modules/.bin/shadowob /usr/local/bin/shadowob && \
|
|
68
|
+
ln -s /app/node_modules/.bin/shadowob-connector /usr/local/bin/shadowob-connector
|
|
69
|
+
|
|
70
|
+
COPY --chown=shadow:shadow apps/cloud/images/cc-connect-runner/entrypoint.mjs /app/entrypoint.mjs
|
|
71
|
+
|
|
72
|
+
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
|
|
73
|
+
CMD curl -f http://localhost:3100/health || exit 1
|
|
74
|
+
|
|
75
|
+
EXPOSE 3100
|
|
76
|
+
|
|
77
|
+
ENV NODE_ENV=production
|
|
78
|
+
ENV HOME=/home/shadow
|
|
79
|
+
ENV SHADOW_RUNNER_HEALTH_PORT=3100
|
|
80
|
+
ENV OPENCLAW_NO_RESPAWN=1
|
|
81
|
+
ENV SHADOW_RUNNER_NAME=codex-runner
|
|
82
|
+
ENV npm_config_cache=/tmp/npm-cache
|
|
83
|
+
|
|
84
|
+
USER shadow
|
|
85
|
+
|
|
86
|
+
ENTRYPOINT ["tini", "--"]
|
|
87
|
+
CMD ["node", "/app/entrypoint.mjs"]
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Codex Runner Research
|
|
2
|
+
|
|
3
|
+
Research date: 2026-05-14.
|
|
4
|
+
|
|
5
|
+
## Target role
|
|
6
|
+
|
|
7
|
+
`codex` 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 "codex" -> codex CLI
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Shadow messaging should come from the cc-connect ShadowOB platform. Codex should
|
|
15
|
+
use its own config, skills, MCP, hooks, subagents, sessions, and logs.
|
|
16
|
+
|
|
17
|
+
## Current repository state
|
|
18
|
+
|
|
19
|
+
The Codex adapter and image now use the cc-connect fork path. The runtime
|
|
20
|
+
package emits `cc-connect-config.toml`, `$CODEX_HOME/config.toml`, project
|
|
21
|
+
`.codex/config.toml`, workspace bootstrap files, and ShadowOB skill files
|
|
22
|
+
through `runtime-files.json`.
|
|
23
|
+
|
|
24
|
+
## Native Codex configuration
|
|
25
|
+
|
|
26
|
+
Codex reads layered TOML configuration:
|
|
27
|
+
|
|
28
|
+
| Concern | Native Codex surface |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| User config | `$CODEX_HOME/config.toml`, defaulting to `~/.codex/config.toml`. |
|
|
31
|
+
| Project config | `.codex/config.toml` in trusted projects. |
|
|
32
|
+
| System config | `/etc/codex/config.toml` on Unix. |
|
|
33
|
+
| Model | `model`, profiles, `model_provider`, model catalogs. |
|
|
34
|
+
| Reasoning | `model_reasoning_effort`, model-specific settings. |
|
|
35
|
+
| Approvals and sandbox | `approval_policy`, `sandbox_mode`, permission profiles. |
|
|
36
|
+
| MCP | `[mcp_servers.<name>]` with stdio or HTTP settings, enabled/disabled tools, timeouts. |
|
|
37
|
+
| Skills | `.agents/skills` in repo/user/admin/system locations. |
|
|
38
|
+
| Instructions | `AGENTS.md` hierarchy and optional config instructions. |
|
|
39
|
+
| Hooks | Codex hooks config, loaded from trusted config layers. |
|
|
40
|
+
| Subagents | Codex subagent roles in config with agent instruction files. |
|
|
41
|
+
| Slash commands | Built-in CLI slash commands such as `/model`, `/mcp`, `/permissions`, `/agent`, `/review`, and `/status`. |
|
|
42
|
+
| Automation | Codex app automations exist, but they are app-level background jobs rather than a simple CLI runner cron store. |
|
|
43
|
+
| Logs and sessions | `$CODEX_HOME/sessions/YYYY/MM/DD/rollout-*.jsonl`, `history.jsonl`, `auth.json`, local state/cache files. |
|
|
44
|
+
|
|
45
|
+
## Shadow slash command bridge
|
|
46
|
+
|
|
47
|
+
The runner package always materializes `/etc/shadowob/slash-commands.json` so
|
|
48
|
+
Shadow can load a stable command index. The Codex runner owns its catalog in
|
|
49
|
+
`apps/cloud/src/runtimes/slash-commands/codex.ts`; this is intentionally not a
|
|
50
|
+
common runtime artifact.
|
|
51
|
+
|
|
52
|
+
Official Codex CLI commands researched from the Codex docs include
|
|
53
|
+
`/permissions`, `/sandbox-add-read-dir`, `/agent`, `/apps`, `/plugins`,
|
|
54
|
+
`/clear`, `/compact`, `/copy`, `/diff`, `/exit`, `/experimental`, `/feedback`,
|
|
55
|
+
`/init`, `/logout`, `/mcp`, `/mention`, `/model`, `/fast`, `/plan`, `/goal`,
|
|
56
|
+
`/personality`, `/ps`, `/stop`, `/fork`, `/side`, `/resume`, `/new`, `/quit`,
|
|
57
|
+
`/review`, `/status`, `/debug-config`, `/statusline`, `/title`, and `/keymap`.
|
|
58
|
+
|
|
59
|
+
Current Cloud injection registers only names that do not collide with
|
|
60
|
+
cc-connect's own universal control commands:
|
|
61
|
+
|
|
62
|
+
- Injected local Codex catalog: `/permissions`, `/sandbox-add-read-dir`,
|
|
63
|
+
`/agent`, `/apps`, `/plugins`, `/clear`, `/copy`, `/exit`, `/experimental`,
|
|
64
|
+
`/feedback`, `/init`, `/logout`, `/mcp`, `/mention`, `/fast`, `/plan`,
|
|
65
|
+
`/goal`, `/personality`, `/fork`, `/side`, `/resume`, `/review`,
|
|
66
|
+
`/debug-config`, `/statusline`, `/title`, and `/keymap`.
|
|
67
|
+
- Left to cc-connect control flow: `/new`, `/compact`, `/status`, `/diff`,
|
|
68
|
+
`/model`, `/ps`, `/stop`, and overlapping management/help commands.
|
|
69
|
+
|
|
70
|
+
cc-connect local commands are prompt-backed, not full Codex TUI passthrough.
|
|
71
|
+
Adding true native passthrough/discovery belongs in the cc-connect Codex agent,
|
|
72
|
+
where it can distinguish cc-connect management commands from Codex CLI commands.
|
|
73
|
+
|
|
74
|
+
## Schema and type anchors
|
|
75
|
+
|
|
76
|
+
- Generated JSON Schema source:
|
|
77
|
+
`https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/config.schema.json`.
|
|
78
|
+
Codex config is TOML on disk, but this schema is the official repo-generated
|
|
79
|
+
shape for config keys.
|
|
80
|
+
- Official type source: Codex Config Reference key/type table at
|
|
81
|
+
`https://developers.openai.com/codex/config-reference`.
|
|
82
|
+
- Config layers: `$CODEX_HOME/config.toml`, trusted project `.codex/config.toml`,
|
|
83
|
+
and `/etc/codex/config.toml`.
|
|
84
|
+
- Test rule: generated TOML must parse as TOML and must be accepted by the Codex
|
|
85
|
+
CLI in a container smoke test; do not use a handwritten JSON schema as source
|
|
86
|
+
of truth.
|
|
87
|
+
- cc-connect type anchor: `../cc-connect/agent/codex/codex.go`.
|
|
88
|
+
|
|
89
|
+
## Provider and authentication notes
|
|
90
|
+
|
|
91
|
+
- Codex CLI supports first-run authentication with either a ChatGPT account or
|
|
92
|
+
an API key. In Cloud, the reliable headless path is API-key or custom-provider
|
|
93
|
+
auth, not an interactive ChatGPT subscription login.
|
|
94
|
+
- For OpenAI API-key mode, set `OPENAI_API_KEY` through Secret data and use
|
|
95
|
+
`preferred_auth_method = "apikey"` when the runner profile could otherwise
|
|
96
|
+
prefer stored ChatGPT auth.
|
|
97
|
+
- Custom providers belong in `[model_providers.<id>]`. The official config
|
|
98
|
+
reference defines `base_url`, `env_key`, `query_params`, static/env headers,
|
|
99
|
+
command-backed bearer-token auth, `requires_openai_auth`, retry/timeouts, and
|
|
100
|
+
`wire_api`.
|
|
101
|
+
- Current Codex config reference lists `responses` as the supported
|
|
102
|
+
`wire_api`, so custom OpenAI-compatible gateways must support the Responses
|
|
103
|
+
API or be fronted by a gateway that translates correctly.
|
|
104
|
+
- Built-in local providers such as `ollama`/`lmstudio` are provider IDs, but
|
|
105
|
+
remote Cloud runners must not silently point them at localhost unless the
|
|
106
|
+
container actually runs that model service.
|
|
107
|
+
|
|
108
|
+
## Security, audit, cost, network, and tools
|
|
109
|
+
|
|
110
|
+
- Permissions: `approval_policy`, granular approval policy, `sandbox_mode`,
|
|
111
|
+
`default_permissions`, and named `[permissions.<name>]` tables.
|
|
112
|
+
- Filesystem: named permission profiles can grant `read`, `write`, or `none` to
|
|
113
|
+
special roots such as `:project_roots` and explicit paths/globs.
|
|
114
|
+
- Network: `sandbox_workspace_write.network_access`, permission profile network
|
|
115
|
+
tables, web search mode (`cached`, `live`, `disabled`), and MCP remote servers.
|
|
116
|
+
- Secrets: `shell_environment_policy` must default to a restrictive inheritance
|
|
117
|
+
mode and keep KEY/SECRET/TOKEN filtering unless intentionally overridden.
|
|
118
|
+
- Tools: `features.shell_tool`, MCP server tool include/deny config, skills
|
|
119
|
+
config, subagent config, and rules should be emitted as native Codex config.
|
|
120
|
+
- Cost/audit: `model`, `model_reasoning_effort`, `service_tier`, web search
|
|
121
|
+
mode, and tool-output/token-related telemetry must be tracked.
|
|
122
|
+
- Observability: `[otel]` supports logs, metrics, traces, redacted prompts by
|
|
123
|
+
default, and event metadata for API requests, SSE events, tool decisions, and
|
|
124
|
+
tool results.
|
|
125
|
+
|
|
126
|
+
## cc-connect mapping
|
|
127
|
+
|
|
128
|
+
The local fork exposes `core.RegisterAgent("codex", New)`. Important options
|
|
129
|
+
from `../cc-connect/agent/codex/codex.go`:
|
|
130
|
+
|
|
131
|
+
- `work_dir`
|
|
132
|
+
- `model`
|
|
133
|
+
- `reasoning_effort`: `low`, `medium`, `high`, `xhigh`
|
|
134
|
+
- `mode`: `suggest`, `auto-edit`, `full-auto`, `yolo`
|
|
135
|
+
- `backend`: `exec` or `app_server`
|
|
136
|
+
- `app_server_url`
|
|
137
|
+
- `codex_home`
|
|
138
|
+
- `cli_path`
|
|
139
|
+
|
|
140
|
+
The default path drives `codex exec --json`. The app-server backend can be kept
|
|
141
|
+
as an advanced option, but the phase-1 runner should start with the simpler
|
|
142
|
+
`exec` path unless a deployment explicitly requests app-server mode.
|
|
143
|
+
|
|
144
|
+
Example generated project shape:
|
|
145
|
+
|
|
146
|
+
```toml
|
|
147
|
+
[[projects]]
|
|
148
|
+
name = "agent-id"
|
|
149
|
+
|
|
150
|
+
[projects.agent]
|
|
151
|
+
type = "codex"
|
|
152
|
+
|
|
153
|
+
[projects.agent.options]
|
|
154
|
+
work_dir = "/workspace"
|
|
155
|
+
codex_home = "/home/shadow/.codex"
|
|
156
|
+
|
|
157
|
+
[[projects.platforms]]
|
|
158
|
+
type = "shadowob"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Capability notes
|
|
162
|
+
|
|
163
|
+
- Models: map Cloud model preferences to Codex `model`, profile, and optional
|
|
164
|
+
provider config. Avoid writing OpenClaw `agents.defaults.model`.
|
|
165
|
+
- Skills: materialize `.agents/skills` for repo-scoped workflows and
|
|
166
|
+
`$CODEX_HOME/skills` only if the runner owns the whole home directory.
|
|
167
|
+
- MCP: generate `[mcp_servers.*]` TOML tables.
|
|
168
|
+
- Cron/routine: Codex app automations are not the same as CLI-local cron; Cloud
|
|
169
|
+
should own phase-1 schedules unless later integrating the Codex app
|
|
170
|
+
automation APIs.
|
|
171
|
+
- Hooks: write Codex hook config in trusted project or user config.
|
|
172
|
+
- Subagents: generate Codex agent roles and instruction files under `.codex`
|
|
173
|
+
only when `features.multi_agent` or equivalent config is enabled.
|
|
174
|
+
- Logs: preserve Codex rollout JSONL paths and collect cc-connect daemon logs
|
|
175
|
+
separately.
|
|
176
|
+
|
|
177
|
+
## Migration implications
|
|
178
|
+
|
|
179
|
+
- OpenClaw, ACPX, and `@shadowob/openclaw-shadowob` have been removed from the
|
|
180
|
+
Codex runner image path.
|
|
181
|
+
- The image builds the cc-connect fork binary and installs the Codex CLI.
|
|
182
|
+
- Generate `$CODEX_HOME/config.toml`, project `.codex/config.toml`,
|
|
183
|
+
`AGENTS.md`, `.agents/skills`, and MCP config as native artifacts.
|
|
184
|
+
- Keep current redaction patterns for container logs, but do not assume
|
|
185
|
+
`/var/log/openclaw` for the Codex runner.
|
|
186
|
+
|
|
187
|
+
## Adapter and smoke tests
|
|
188
|
+
|
|
189
|
+
Unit tests:
|
|
190
|
+
|
|
191
|
+
- Generated TOML parses and contains expected scalar/table types for
|
|
192
|
+
`approval_policy`, `sandbox_mode`, `default_permissions`, `[permissions.*]`,
|
|
193
|
+
`[mcp_servers.*]`, `[features]`, and `[otel]`.
|
|
194
|
+
- cc-connect TOML contains `type = "codex"` and no OpenClaw artifacts.
|
|
195
|
+
- Permission mapping keeps network disabled by default in workspace-write mode.
|
|
196
|
+
- `shell_environment_policy` excludes secrets unless Cloud explicitly opts in.
|
|
197
|
+
- OTel config never exports raw prompts unless audit policy asks for it.
|
|
198
|
+
|
|
199
|
+
Container smoke:
|
|
200
|
+
|
|
201
|
+
- `cc-connect --version` and `codex --version` work.
|
|
202
|
+
- `$CODEX_HOME/config.toml`, project `.codex/config.toml`, `AGENTS.md`, and
|
|
203
|
+
`.agents/skills` are materialized.
|
|
204
|
+
- Start cc-connect with `type = "codex"` and inspect logs/session paths.
|
|
205
|
+
- Assert no `/etc/openclaw/config.json` exists for this runner.
|
|
206
|
+
- Run a no-network or read-only parse/start mode to confirm config loads before
|
|
207
|
+
any provider call.
|
|
208
|
+
|
|
209
|
+
## Sources
|
|
210
|
+
|
|
211
|
+
- CLI auth/setup: https://developers.openai.com/codex/cli
|
|
212
|
+
- Config basics: https://developers.openai.com/codex/config-basic
|
|
213
|
+
- Advanced config: https://developers.openai.com/codex/config-advanced
|
|
214
|
+
- Config reference: https://developers.openai.com/codex/config-reference
|
|
215
|
+
- Generated config schema:
|
|
216
|
+
https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/config.schema.json
|
|
217
|
+
- Agent approvals and security:
|
|
218
|
+
https://developers.openai.com/codex/agent-approvals-security
|
|
219
|
+
- MCP: https://developers.openai.com/codex/mcp
|
|
220
|
+
- Skills: https://developers.openai.com/codex/skills
|
|
221
|
+
- Hooks: https://developers.openai.com/codex/hooks
|
|
222
|
+
- Subagents: https://developers.openai.com/codex/subagents
|
|
223
|
+
- CLI slash commands: https://developers.openai.com/codex/cli/slash-commands
|
|
224
|
+
- App automations: https://developers.openai.com/codex/app/automations
|
|
225
|
+
- Codex CLI repository: https://github.com/openai/codex
|
|
226
|
+
- cc-connect fork source: https://github.com/buggyblues/cc-connect
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1.7
|
|
2
|
+
|
|
3
|
+
# ─── Gemini Runner ────────────────────────────────────────────────────────
|
|
4
|
+
# Native cc-connect runner for Gemini CLI.
|
|
5
|
+
#
|
|
6
|
+
# Build from the repository root:
|
|
7
|
+
# docker build -t ghcr.io/buggyblues/gemini-runner:latest \
|
|
8
|
+
# -f apps/cloud/images/gemini-runner/Dockerfile .
|
|
9
|
+
# ──────────────────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
FROM golang:1.25-bookworm AS cc-builder
|
|
12
|
+
|
|
13
|
+
ARG CC_CONNECT_REF=63b5d59127b3004bc7002f2d51892b1f2a91ea83
|
|
14
|
+
ARG CC_CONNECT_REPO=https://github.com/buggyblues/cc-connect.git
|
|
15
|
+
|
|
16
|
+
WORKDIR /build
|
|
17
|
+
|
|
18
|
+
RUN apt-get update && \
|
|
19
|
+
apt-get install -y --no-install-recommends ca-certificates git && \
|
|
20
|
+
rm -rf /var/lib/apt/lists/*
|
|
21
|
+
|
|
22
|
+
RUN git clone --depth 1 "${CC_CONNECT_REPO}" /tmp/cc-connect && \
|
|
23
|
+
cd /tmp/cc-connect && \
|
|
24
|
+
git fetch --depth 1 origin "${CC_CONNECT_REF}" && \
|
|
25
|
+
git checkout "${CC_CONNECT_REF}" && \
|
|
26
|
+
CGO_ENABLED=0 go build \
|
|
27
|
+
-tags "no_web no_acp no_cursor no_devin no_iflow no_kimi no_qoder no_feishu no_telegram no_discord no_slack no_dingtalk no_wecom no_weixin no_qq no_qqbot no_line no_weibo" \
|
|
28
|
+
-ldflags "-s -w" \
|
|
29
|
+
-o /build/cc-connect ./cmd/cc-connect
|
|
30
|
+
|
|
31
|
+
FROM node:22-bookworm-slim AS node-deps
|
|
32
|
+
|
|
33
|
+
WORKDIR /build
|
|
34
|
+
|
|
35
|
+
RUN npm init -y && \
|
|
36
|
+
npm install --no-audit --fund=false \
|
|
37
|
+
@google/gemini-cli@latest \
|
|
38
|
+
@shadowob/cli@latest \
|
|
39
|
+
@shadowob/connector@latest
|
|
40
|
+
|
|
41
|
+
FROM node:22-bookworm-slim AS runner
|
|
42
|
+
|
|
43
|
+
LABEL org.opencontainers.image.source="https://github.com/nicepkg/shadow"
|
|
44
|
+
LABEL org.opencontainers.image.description="Shadow Cloud Gemini Runner (cc-connect + Gemini CLI)"
|
|
45
|
+
|
|
46
|
+
RUN apt-get update && \
|
|
47
|
+
apt-get install -y --no-install-recommends ca-certificates curl git tini && \
|
|
48
|
+
rm -rf /var/lib/apt/lists/*
|
|
49
|
+
|
|
50
|
+
RUN userdel -r node 2>/dev/null || true; \
|
|
51
|
+
groupdel node 2>/dev/null || true; \
|
|
52
|
+
groupadd -g 1000 shadow; \
|
|
53
|
+
useradd -u 1000 -g shadow -m -d /home/shadow -s /usr/sbin/nologin shadow
|
|
54
|
+
|
|
55
|
+
WORKDIR /app
|
|
56
|
+
RUN mkdir -p /home/shadow/.cc-connect /home/shadow/.gemini /etc/openclaw /etc/shadowob \
|
|
57
|
+
/var/log/shadowob /workspace /tmp/npm-cache && \
|
|
58
|
+
ln -s /home/shadow /home/openclaw && \
|
|
59
|
+
chown -R shadow:shadow /home/shadow /etc/shadowob /var/log/shadowob \
|
|
60
|
+
/workspace /tmp/npm-cache /app
|
|
61
|
+
|
|
62
|
+
COPY --from=node-deps --chown=shadow:shadow /build/node_modules ./node_modules
|
|
63
|
+
COPY --from=node-deps --chown=shadow:shadow /build/package.json ./package.json
|
|
64
|
+
COPY --from=cc-builder /build/cc-connect /usr/local/bin/cc-connect
|
|
65
|
+
|
|
66
|
+
RUN ln -s /app/node_modules/.bin/gemini /usr/local/bin/gemini && \
|
|
67
|
+
ln -s /app/node_modules/.bin/shadowob /usr/local/bin/shadowob && \
|
|
68
|
+
ln -s /app/node_modules/.bin/shadowob-connector /usr/local/bin/shadowob-connector
|
|
69
|
+
|
|
70
|
+
COPY --chown=shadow:shadow apps/cloud/images/cc-connect-runner/entrypoint.mjs /app/entrypoint.mjs
|
|
71
|
+
|
|
72
|
+
HEALTHCHECK --interval=15s --timeout=5s --start-period=30s --retries=3 \
|
|
73
|
+
CMD curl -f http://localhost:3100/health || exit 1
|
|
74
|
+
|
|
75
|
+
EXPOSE 3100
|
|
76
|
+
|
|
77
|
+
ENV NODE_ENV=production
|
|
78
|
+
ENV HOME=/home/shadow
|
|
79
|
+
ENV SHADOW_RUNNER_HEALTH_PORT=3100
|
|
80
|
+
ENV OPENCLAW_NO_RESPAWN=1
|
|
81
|
+
ENV SHADOW_RUNNER_NAME=gemini-runner
|
|
82
|
+
ENV npm_config_cache=/tmp/npm-cache
|
|
83
|
+
|
|
84
|
+
USER shadow
|
|
85
|
+
|
|
86
|
+
ENTRYPOINT ["tini", "--"]
|
|
87
|
+
CMD ["node", "/app/entrypoint.mjs"]
|