SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-09-01

5 DeepSeek Harness Plugin na Sulit I-install

Tingnan ang limang DeepSeek Harness plugin para sa VPS: spend caps, tool permissions, injection scanning, durable memory, at maingat na LAN access.

Aling DeepSeek Harness plugins ang sulit i-install

Ang DeepSeek Harness plugins ay third-party code na tumatakbo sa loob ng iyong agent, gamit ang mga privilege ng agent, sa machine na binabayaran mo. May mahigit dalawampung kategorya at higit isang libong entry ang community list. Sa isang rented virtual private server (VPS), lima ang kailangan mo: dsh-budget para sa spend caps, dsh-permission-rules para sa tool gating, dsh-defend para sa injection at secret scanning, dsh-memory para sa mga fact na nananatili lampas sa isang session, at dsh-web-lan-access lamang kapag napagpasyahan mo na kung paano ka mag-a-authenticate.

Ang harness ay dsh, ang open-source agent harness ng DeepSeek na ginawa upang lahat ay plugin. Tinatawag ito ng sarili nitong README na developer preview at nagbababala ng THERE WILL BE COMPATIBILITY-BREAKING CHANGES. Ito ang batayan ng bawat pagpili sa ibaba. I-pin ang anumang ini-install mo, asahang maaaring masira ito kapag nag-upgrade, at panatilihing maliit ang set para mabasa mo talaga ang lahat ng code. Kung hindi pa tumatakbo ang harness, magsimula sa pag-install ng DeepSeek Harness sa isang VPS at bumalik dito. Kung hindi pa malinaw ang mga bahaging hina-hook ng mga plugin na ito—ang agent loop, mga tool nito, at memory nito—unahin muna ang mga pangunahing konsepto, dahil mas madali mong masusuri ang bawat pagpili kapag alam mo na kung ano ang ginagawa ng bawat layer.

Paano nag-i-install ang dsh ng plugin, at kung saan napupunta ang configuration

Binubuo ng dsh ang sarili nito mula sa mga Cordis plugin. Kaya ang tumatakbong instance ay isang tree ng mga plugin, hindi isang programa lamang. Ang profile ay isang pinangalanang composition ng mga plugin na iyon. Ang dalawang template ay web at headless. Ang $DSH_HOME ay nagde-default sa ~/.dsh, at ang profile ay nasa $DSH_HOME/profiles/<name>/. Naglalaman ito ng sarili nitong package.json, dsh.profile manifest, at cordis.patch.yml.

dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budget

May apat na gumaganang source form: bare npm package name, scoped name gaya ng @towzai/dsh-memory, GitHub reference gaya ng github:PerryLink/dsh-budget#main, at local path na may link: o ./. Gamitin ang GitHub form, dahil maaari mong palitan ang #main ng commit at makuha ang parehong code sa susunod na buwan.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

Inilalapat ang mga layer sa nakapirming pagkakasunod-sunod: bawat bundle ayon sa pagkakasunod nito sa profile, kasunod ang cordis.patch.yml ng profile, pagkatapos ang cordis.patch.yml sa home level, at pagkatapos ang anumang --patch overlay. Mahalaga ang pagkakasunod-sunod dahil maaaring i-reconfigure o alisin ng mas huling layer ang na-set up ng naunang layer. Kaya kapag mukhang naka-install ang isang plugin pero walang ginagawa, buksan ang cordis.patch.yml ng profile at suriin ang dalawang bagay: naroon ang insert block nito, at walang mas huling layer na nagdi-disable dito.

Noong 17 August 2026, ang npm package na @deepseek-ai/dsh ay nasa 0.1.0-rc.7, habang dine-declare ng bawat plugin sa ibaba ang compatibility sa 0.1.0-rc.5 hanggang 0.1.0-rc.6. Normal ang agwat na ito sa ecosystem na ito, at karaniwan itong dahilan kung bakit hindi na naglo-load ang isang plugin: mas mabilis magbago ang harness kaysa sa mga plugin sa paligid nito. I-upgrade ang harness nang sinasadya, pagkatapos ay mag-test ng isang plugin bawat pagkakataon.

Basahin muna ang plugin bago ito pagkatiwalaan

Hindi naka-sandbox ang isang dsh plugin mula sa harness. Naglo-load ito sa parehong Cordis tree at sa parehong process, gamit ang parehong operating system user, at may access sa parehong model credentials at working tree. Ang pag-install nito ay mas katulad ng pagpapatakbo ng script ng ibang tao gamit ang sudo kaysa sa pagdagdag ng browser extension. Ito rin ang trust question na ibinabangon ng Claude Code plugins, at pareho ang sagot: basahin ang code, o huwag itong i-install.

Suriin ang apat na bagay na ito, sa ganitong pagkakasunod-sunod:

  • Anong extension points ang ginagamit nito. Ibig sabihin ng tools/pre-execute, nakikita nito ang bawat tool call at maaari nitong i-block ang mga ito. Ibig sabihin ng agent/pre-step, nakikita nito ang iyong mga mensahe. Ibig sabihin ng webServer.tapIndex, nire-rewrite nito ang page na sine-serve sa iyong browser. Kaunti lamang ang magagawa ng plugin na wala sa mga extension point na ito; ang plugin na gumagamit ng lahat ng ito ang nagsisilbing security boundary mo.
  • Kung kumokonekta ito sa network. Hanapin sa source ang fetch, http, at anumang hard-coded hostname. Kung may cost meter na nagpapadala ng data sa provider, ipinapadala nito sa ibang lugar ang pattern ng paggamit mo.
  • Kung nagbabasa ito ng credentials. Ang anumang gumagamit sa credentials.* o sa provider key ay dapat may malinaw na dahilan sa README.
  • Ang license at petsa ng huling commit. Ang plugin na walang license at ilang buwan nang walang update, sa ecosystem na lingguhang nagbabago, ay isang liability.

Pagkatapos, mag-install gamit ang commit sa halip na branch, at basahin ang insert block na isinulat ng installer sa cordis.patch.yml. Nakasaad sa block na iyon ang plugin id at ang config na nirehistro nito. Ito ang pinakamaikling tapat na paglalarawan ng idinagdag mo. Kung pinapayagan ng harness, ilayo ang provider keys sa abot ng plugin, alinsunod sa pag-iwas na mailantad ang secrets sa AI agents.

dsh-budget: paano ko pipigilan ang agent na magpatuloy gumastos buong gabi?

Tumatakbo nang unattended ang isang agent sa VPS. Iyan ang dahilan kung bakit mo ito inilalagay doon, at iyan din ang panganib. Sinusukat ng dsh-budget ang mga token at tinatayang cost ayon sa model, session, at araw, at nagpapatupad ito ng mga cap batay sa mga kabuuang iyon.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

Mapagbigay ang mga default nito: 10 USD bawat session, 50 bawat araw, at 500 bawat buwan. Angkop ang mga ito sa team na may pondo. Sa personal na server, sapat na mataas ang mga ito para matapos muna ang runaway loop bago gumana ang cap, kaya ibaba ang mga ito sa unang araw.

Chartdsh-budget default caps and a lower starting point for one small VPS (USD)
The data behind this chart
[
  {
    "label": "Per session",
    "plugin_default_usd": 10,
    "suggested_start_usd": 2
  },
  {
    "label": "Per day",
    "plugin_default_usd": 50,
    "suggested_start_usd": 5
  },
  {
    "label": "Per month",
    "plugin_default_usd": 500,
    "suggested_start_usd": 40
  }
]

Ang iminungkahing halaga ay panimulang punto para sa isang operator sa isang server, hindi isang opisyal na figure. Itaas ito kapag ipinakita ng aktuwal na paggamit sa loob ng isang buwan na kailangan mo iyon. Ang monthly cap na 40 USD kasama ang session cap na 2 ay mabilis at malinaw na magfa-fail, na siyang gusto mo habang inaalam mo pa ang konsumo ng tool.

- id: budget
  config:
    budgets:
      session: 2
      daily: 5
      monthly: 40
    warnRatio: 0.8
    overLimit: block

Ang setting na nagbabago sa kilos ng machine ay overLimit. Ang default nito ay alert, na nagpi-print ng warning at nagpapatuloy sa paggastos, kaya dashboard ang plugin na ito kapag out of the box. Itakda ito sa block at tatanggihan ng harness ang mga kasunod na model call kapag naabot ang isang cap. Ibig sabihin, titigil ang overnight job sa halip na patuloy na maningil hanggang umaga. Ang degrade ang ikatlong mode: pinapalitan nito ang model ng mas murang model mula sa degradation map. Angkop ito kapag kailangang matapos ang job pero hindi kailangan ang pinakamagaling mong model. Naka-default ang warnRatio sa 0.8, kaya makatatanggap ka ng notification kapag umabot sa 80 percent ng cap.

May dalawang limitasyong dapat tandaan. Kinakalkula ang cost mula sa mga presyong ibinibigay mo: walang laman bilang default ang prices, at nagfa-fallback ang defaultPrice sa 1.0 USD bawat milyong input token at 3.0 bawat milyong output token. Ilagay ang aktuwal na mga numero para sa mga model mo; kung hindi, hula lamang ang dashboard na mukhang measurement. Ikalawa, nag-aaggregate ang plugin sa tumatakbong process mula sa session event stream, kaya nagre-reset ang mga total kapag nag-restart ang harness. Nire-reset ng crash loop, o ng supervisor na nagre-restart sa dsh, ang daily cap. Ituring ang dsh-budget bilang guardrail laban sa sarili mong mga job, at magtakda ng spend limit sa provider account bilang aktuwal na ceiling. Ito ang mas malawak na punto sa pagkontrol sa cost ng AI agent sa VPS.

Sa pang-araw-araw na paggamit, gamitin ang /budget para sa overview, /budget models para sa per-model breakdown, at /budget unblock <scope> para alisin ang block kapag napagpasyahan mong magpatuloy.

dsh-permission-rules: aling tool calls ang hindi dapat kailanman patakbuhin?

dsh-permission-rules ang naglalagay ng mga declarative rule sa tools/pre-execute waterfall, kaya sinusuri ang isang rule bago patakbuhin ang tool. Tatlong action ang mayroon. Ipinapadaan ng allow ang call, bina-block ito ng deny at ibinabalik ang dahilan na mababasa ng model, at niruruta ito ng ask sa opisyal na approval seam.

dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"

Nasa .dsh/rules.yaml ang mga rule, na relative sa working directory ng session. May global na fallbackPath at optional na searchUp para umakyat patungo sa filesystem root. Kasama sa matching ang mga glob para sa tool name, key at value ng parameter, path na relative sa workspace, mga agent selector gaya ng main o subagent, at mga network target.

rules:
  - match: { tools: [bash], params: { command: "rm -rf*" } }
    action: deny
    reason: "No recursive deletes"
  - match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
    action: ask
    reason: "Secret files need confirmation"
  - match: { tools: ["mcp__*"] }
    action: ask
    reason: "MCP tools need confirmation"

First match wins ang evaluation, kaya tahimik na kinakansela ng malawak na allow sa itaas ang lahat ng mas partikular na rule sa ilalim nito. Ilagay muna ang mga denial, at ilagay sa huli ang mga permissive rule. Sinasaklaw ng tool-name glob ang mcp__*. Ito ang paraan para i-gate ang mga tool na nagmula sa model context protocol (MCP) server sa halip na sa harness mismo. Mahalaga ito kapag nagpapatakbo ka ng MCP servers sa isang VPS.

May isang behavior na dapat paghandaan: kailangan ng ask ng sumasagot. Sa isang headless profile, maaaring walang nagbabantay, kaya maaaring patigilin ng ask rule ang isang run hanggang may lumitaw na tao. Gamitin ang deny para sa anumang hindi mo kailanman ia-approve. Panatilihin ang ask para sa profile na binabantayan mo. Kung gusto mong gumana ang approvals nang walang nagbabantay, kailangan mo ng aktuwal na answering path. Ito ang paksa ng pag-gate ng mga action ng AI agent gamit ang approvals.

dsh-defend: paano naman ang prompt injection at mga na-leak na secret?

dsh-defend nag-scan sa tatlong punto: mga inbound message sa agent/pre-step, mga tool argument sa tools/pre-execute kasama ang guard para sa destructive delete, at mga resulta ng tool sa tools/post-execute. Mahalaga ang huli dahil dito sinusuri ang content na kinuha mula sa isang web page bago ito gamitin ng model.

dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"

Maingat ang mga default sa halip na mahigpit: ang detection.injectionAction, detection.jailbreakAction, at detection.secretAction ay lahat ask, samantalang ang detection.secretBlockCritical ay true. Dahil dito, bina-block ang isang kritikal na secret anuman ang ibang setting. Sa isang unattended box, baguhin sa block ang mga action na kailangan mong ipatupad, dahil ang ask na walang mapagtatanungan ay hindi isang decision.

Karapat-dapat purihin ang disenyo ng audit. Itinatala ng mga event na defend/detection ang rule id, family, category, severity, decision, at scan facts, ngunit hindi kailanman ang tumugmang text; type lamang ng secret ang itinatala. Kaya hindi lumilikha ang pag-enable ng audit log ng pangalawang kopya ng credential na pinoprotektahan mo.

Linawin kung ano ang naibibigay nito. Rule-based ang detection, at malinaw na sinasabi ng README na maaaring makalusot ang bagong phrasing at mga multi-step attack. Binabawasan nito ang dami ng mga halatang attack. Hindi nito ginagawang ligtas ang isang agent na direktang gumamit ng untrusted content, kaya panatilihin ang mga permission rule sa ilalim nito.

dsh-memory: ano ang naaalala ng agent bukas?

Dalawang magkaibang plugin ang tinatawag na dsh-memory. Mahalagang malaman ito bago ka mag-type ng install command. Mag-install gamit ang tahasang source para makuha mo ang bersyong nabasa mo.

Ang ilalagay ko sa isang maliit na server ay ang SQLite build. Nagrerehistro ito bilang memory, nag-iimbak ng isang file sa $DSH_HOME/memory/memory.db na pinaghahatian ng lahat ng profile, at naglalantad ng memory_write, memory_search, at memory_forget. Keyword-based ang paghahanap sa nakaimbak na text at mga tag. Walang embedding service, API key, o karagdagang process.

dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"

Kaunti lang ang configuration na kailangan mong baguhin: path para sa database file, promptRecentCount (default na 10) para sa dami ng unpinned memory na ini-inject, at promptMaxChars (default na 2000) para sa rendering budget. Umaasa ito sa node:sqlite, na minamarkahan pa ring experimental ng Node 22 at 24. Kaya kailangang subukan ang Node upgrade sa halip na ipagpalagay na ligtas ito.

Ganito talaga binabago ng memory ang machine: ang mga ini-inject na memory ay isinasama sa system prompt sa bawat turn. Ang budget na 2000 character ay katumbas ng ilang daagdag na input token sa bawat request, nang tuloy-tuloy. Totoong dagdag ito sa bill mo. Kaya dapat mauna sa box ang dsh-budget bago ang dsh-memory. Panatilihing maliit ang promptMaxChars at mag-prune gamit ang memory_forget sa halip na hayaang lumaki ang file.

Ang alternatibong build ay nag-iimbak ng memory sa YAML file at gumagamit ng embedding search na may awtomatikong prompt injection. Ini-install ito gamit ang dsh plugin --profile web add github:towzai/dsh-memory. Kailangan nito ng lokal na ollama instance at embedding model, qwen3-embedding:0.6b bilang default, na maaaring palitan gamit ang DSH_MEMORY_EMBED_MODEL. Mas mahusay ang semantic recall kaysa keyword recall. Nangangahulugan din ito ng ikalawang service at isang set ng model weights na nananatili sa parehong server. Sa maliit na plan, memory ito na nababawas sa gawaing pinaupahan mo sa server. Piliin ito kapag may ekstrang RAM ka. Tinalakay sa lokal na memory para sa mga agent ang pangkalahatang tradeoff sa pagitan ng kalidad ng recall at resident cost.

dsh-web-lan-access: dapat bang makinig ang web UI sa labas ng loopback?

Ang npx @deepseek-ai/dsh web ay naghahatid ng interface sa 127.0.0.1:3080. Ipinapakita lamang ng mga browser ang crypto.randomUUID() kapag secure context, kaya nabibigo ang pag-load ng parehong page gamit ang plain HTTP mula sa ibang machine. Inaayos ito ng dsh-web-lan-access sa pamamagitan ng paggamit sa webServer.tapIndex upang mag-inject ng maliit na polyfill, at binabago nito ang server binding sa 0.0.0.0.

Basahin muna ang sariling babala nito bago ito i-install. Kapag naka-bind sa 0.0.0.0, maa-access ang agent nang walang authentication ng sinumang nasa parehong local area network (LAN), at sa server na may public IP address, nangangahulugan ito ng buong internet. Nananatiling naka-pin sa loopback ang maikling listahan ng sensitibong method (settings.*, credentials.*, llm.discoverModels), at nagbabalik ang mga ito ng 403 mula sa remote origin, kaya nalilimitahan ang pinsala. Hindi nito lubusang napipigilan ang problema, dahil bukas pa rin ang tool-calling surface sa sinumang makahanap ng port.

Kadalasan, hindi mo talaga kailangan ang plugin na ito. I-forward na lamang ang port gamit ang SSH.

ssh -N -L 3080:127.0.0.1:3080 you@your-server

Pagkatapos, buksan ang http://127.0.0.1:3080 sa iyong local browser. Sa loopback lamang patuloy na nakikinig ang harness, kaya walang nailalantad, at dahil itinuturing ng mga browser ang 127.0.0.1 bilang secure origin, available ang crypto.randomUUID() at hindi kailangan ng polyfill. Isang command lamang ito, walang plugin, at walang bagong attack surface.

I-install lamang ang plugin kapag hindi sapat ang port forwarding, halimbawa kapag kailangang ma-access ng phone na nasa parehong network ang UI. Kung gagawin mo ito, i-bind ito sa likod ng private network interface, magpanatili ng firewall rule na pumapayag lamang sa interface na iyon, at ilista ang mga pangalang gagamitin mo sa ilalim ng trustedHosts sa entry na web-runtime. Para sa tunay na multi-user access, may dsh-passwords, na nagdaragdag ng subuser permissions, hourly token quota at daily time quota para sa bawat subuser, automatic TLS (transport layer security) certificates sa pamamagitan ng Let's Encrypt, at encrypted audit log. Ituring ito bilang isang platform sa halip na plugin: kailangan nito ang ports 80 at 443, sarili nitong installer ang dala nito, at ang dokumentadong quick path ay nagpi-pipe ng shell script mula sa network diretso sa bash. Mas mainam ang npm install -g dsh-passwords na sinusundan ng dsh-passwords install, para nasa disk ang code at mabasa mo muna ito bago patakbuhin.

Paano mag-alis ng plugin nang malinis

Dalawang hakbang ang pag-uninstall, pero madalas nakakaligtaan ang ikalawang hakbang.

dsh plugin --profile web remove dsh-budget
dsh plugin --profile web list

Hindi na dapat ito ipakita ng list. Pagkatapos, buksan ang $DSH_HOME/profiles/web/cordis.patch.yml at tanggalin ang anumang natitirang insert block na naglalaman ng pangalan ng plugin na iyon, dahil ang entry na iyon ang naglo-load dito sa tree. I-restart ang harness para mabuo muli ang tree; mananatiling naka-load ang plugin na na-load na hanggang sa gawin mo ito. Panghuli, tandaan na mas matagal na nananatili ang data kaysa sa code. Nananatili ang $DSH_HOME/memory/memory.db at .dsh/rules.yaml kahit na-uninstall na. Tanggalin mismo ang mga ito kung layunin mong alisin ang data.

Ano ang binasa ko, at kailan

Ang bawat reference dito ay isang commit, hindi isang branch, dahil iba na ang code ng main kapag binasa mo ito. Binasa ko ang lahat ng ito noong 17 August 2026, at nasa 0.1.0-rc.7 ang harness mismo sa npm noong araw na iyon.

Mga eksaktong commit sa likod ng shortlist na ito
  • Listahan ng mga community plugin sa f2918fb, 17 August 2026. Isang beses lang itong iniugnay nang sadya. Directory ito, at ang directory ay hindi rekomendasyon.
  • dsh-budget sa 461d478, 17 August 2026. Apache 2.0. Idinedeklara ang dsh 0.1.0-rc.6, Node 22.19 o 24 pataas.
  • dsh-permission-rules sa b30b4fb, 17 August 2026. Apache 2.0. Idinedeklara ang dsh 0.1.0-rc.5 hanggang 0.1.0-rc.6.
  • dsh-defend sa 7ba3427, 17 August 2026. Apache 2.0. Idinedeklara ang dsh 0.1.0-rc.6.
  • dsh-memory sa def7c6a, 13 August 2026. MIT. SQLite build.
  • dsh-web-lan-access sa e27e909, 16 August 2026. MIT.

Suriing muli ang mga pin na iyon bago ka kumopya ng command. Sa isang developer-preview ecosystem, ang version number na may petsa ang tanging uri na may tunay na kahulugan.

FAQ

Aling DeepSeek Harness plugins ang dapat kong unang i-install sa isang VPS?

I-install muna ang dsh-budget at dsh-permission-rules bago ang iba. Pinipigilan ng budget na may overLimit: block ang unattended run na gumastos buong gabi, habang hinaharangan ng .dsh/rules.yaml file ang tool call na hindi mo kailanman inaprubahan. Idagdag ang dsh-defend kapag may binabasa ang agent mula sa public web, at ang dsh-memory kapag napapansin mong pareho ang context na ipinapaste mo sa bawat session. Laktawan ang themes at status chips. Nagdadagdag ang mga ito ng code na tumatakbo gamit ang privileges ng agent nang hindi binabago ang ginagawa ng machine.

Naka-sandbox ba ang dsh plugins mula sa harness?

Hindi. Nilo-load ang plugin sa kaparehong Cordis tree ng harness, sa parehong process, gamit ang parehong operating system user, parehong model credentials, at parehong working tree. Nakikita at maaaring i-block ng plugin na kumokonekta sa tools/pre-execute ang bawat tool call; nakikita naman ng kumokonekta sa agent/pre-step ang iyong mga mensahe. Kaya basahin ang source, suriin ang license at petsa ng huling commit, at mag-install batay sa commit sa halip na branch para hindi magbago ang code nang hindi mo nalalaman.

Talaga bang ihihinto ng dsh-budget ang agent, o magbibigay lang ito ng babala?

Depende ito sa overLimit. Ang default ay alert, na nagbibigay ng babala sa warnRatio at nagpapatuloy sa paggastos. Tinatanggihan ng block ang mga karagdagang model call kapag naabot ang cap, at inaalis ito ng /budget unblock <scope> kapag pinili mong magpatuloy. Lumilipat ang degrade sa mas murang model mula sa degradation map. May isang limitasyon: ina-aggregate ang totals sa tumatakbong process mula sa session event stream, kaya nire-reset ang mga ito kapag ni-restart ang harness, at maaaring malusutan ng restart loop ang daily cap. Magtakda ng spend limit sa provider account bilang aktuwal na pinakamataas na limitasyon.

Paano ko ganap na aalisin ang isang dsh plugin?

Patakbuhin ang dsh plugin --profile web remove <package-name>, kumpirmahin gamit ang dsh plugin --profile web list, pagkatapos ay buksan ang $DSH_HOME/profiles/web/cordis.patch.yml at tanggalin ang anumang natitirang insert block para sa plugin na iyon, dahil ang entry na iyon ang naglo-load dito. I-restart ang harness para mabuo muli ang plugin tree. Mananatili sa disk ang data na isinulat ng plugin: mananatili ang $DSH_HOME/memory/memory.db at .dsh/rules.yaml hanggang sa ikaw mismo ang mag-delete sa mga ito.

Ligtas bang i-expose sa network ang dsh web UI?

Hindi kung walang karagdagang proteksiyon. Nakikinig ang dsh web sa 127.0.0.1:3080, at binabago ng dsh-web-lan-access ang binding na iyon sa 0.0.0.0. Nakasaad sa sarili nitong README na dahil dito, maa-access ang agent nang walang authentication ng sinumang nasa parehong network; kapag public IP address ito, kasama rito ang internet. Nananatiling naka-pin sa loopback ang ilang method (settings.*, credentials.*, llm.discoverModels) at nagbabalik ang mga ito ng 403 mula sa remote origins, kaya nababawasan ang pinsala ngunit hindi ito tuluyang napipigilan. Gumamit ng SSH port forward, ssh -N -L 3080:127.0.0.1:3080 you@your-server, o ilagay ang port sa likod ng private network interface at firewall rule. Magdagdag ng tunay na authentication bago ito maging reachable mula sa labas.