<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mehul Bhardwaj</title>
    <description>The latest articles on DEV Community by Mehul Bhardwaj (@mehul_bhardwaj_8a2d2aaecb).</description>
    <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3846065%2F82f75bb2-e3aa-447c-a6c6-bc2bda5f04e0.png</url>
      <title>DEV Community: Mehul Bhardwaj</title>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mehul_bhardwaj_8a2d2aaecb"/>
    <language>en</language>
    <item>
      <title>We Classified 16,635 OpenClaw Skill Complaints. Wrong Output Is the #1 Failure Mode.</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Wed, 06 May 2026 07:58:44 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/we-classified-16635-openclaw-skill-complaints-wrong-output-is-the-1-failure-mode-a0o</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/we-classified-16635-openclaw-skill-complaints-wrong-output-is-the-1-failure-mode-a0o</guid>
      <description>&lt;p&gt;The OpenClaw registry tracks whether skills install. The dominant user complaint is not installation failure. It is a skill that installs cleanly, runs without error, and produces wrong or missing output, with no signal that anything went wrong.&lt;/p&gt;

&lt;p&gt;We classified 16,635 user mentions to find out what actually breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Built the Dataset
&lt;/h2&gt;

&lt;p&gt;Three sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Issues:&lt;/strong&gt; scraped across &lt;code&gt;openclaw/openclaw&lt;/code&gt;, &lt;code&gt;openclaw/skills&lt;/code&gt;, and &lt;code&gt;NVIDIA/NemoClaw&lt;/code&gt; via the GitHub Issues API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hacker News:&lt;/strong&gt; 16,840 raw mentions via the Algolia API, filtered to 54.7% noise (keyword collisions unrelated to the skills ecosystem)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reddit:&lt;/strong&gt; across 12 subreddits where OpenClaw skills discussions appear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each mention was classified into one of 12 categories using Claude Haiku 4.5 with an enum-constrained schema. We validated a 500-item sample against Claude Sonnet 4.6. Exact agreement: 73.8%, κ = 0.71. Zero operational-versus-security confusions in the validation set.&lt;/p&gt;

&lt;p&gt;The methodology, prompt, and validation data are published at &lt;a href="https://vesselofone.com/research/ai-agent-skills-ecosystem" rel="noopener noreferrer"&gt;vesselofone.com/research/ai-agent-skills-ecosystem&lt;/a&gt;. The full dataset is at &lt;a href="https://doi.org/10.5281/zenodo.19691714" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.19691714&lt;/a&gt; under CC BY 4.0. Reproducing the full classification pipeline requires an Anthropic API key and runs in approximately two hours at $10-30 in API cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  What People Actually Complain About
&lt;/h2&gt;

&lt;p&gt;Aggregated across all three sources:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Share of all mentions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operational correctness failures&lt;/td&gt;
&lt;td&gt;20.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Silent failures (wrong output, no error)&lt;/td&gt;
&lt;td&gt;18.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compatibility problems&lt;/td&gt;
&lt;td&gt;9.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Installation issues&lt;/td&gt;
&lt;td&gt;7.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security concerns&lt;/td&gt;
&lt;td&gt;1.4% (GitHub) / 5.1% (Hacker News)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovery friction&lt;/td&gt;
&lt;td&gt;1.7% (GitHub) / 8.3% (Reddit)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The top two categories together (39.1% of all classified mentions) describe the same underlying failure: a skill that appears to work but does not. The agent returns a result. The result is wrong. No error is raised. The user has to notice on their own.&lt;/p&gt;

&lt;p&gt;Installation is 7.3%. It is the failure mode that gets the most tooling attention and causes the fewest complaints.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Find Depends on Where You Look
&lt;/h2&gt;

&lt;p&gt;The three sources surface different problems. This is not sampling noise; it reflects how each platform is used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt; skews toward operational correctness. Developers who encounter wrong output file detailed bug reports: reproduction steps, expected versus actual output, version numbers. 55.5% of GitHub-filed complaints describe correctness failures of this kind. These are the most actionable reports, but they require the user to know the output was wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hacker News&lt;/strong&gt; surfaces security at 5.1% versus 1.4% on GitHub. Security researchers and people following incident reports congregate there. Discussions of supply-chain attacks and OAuth over-scoping appear in HN threads well before they produce GitHub issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reddit&lt;/strong&gt; surfaces discovery friction at 8.3% versus 1.7% on GitHub. Finding the right skill in a catalog of 6,993 is a genuine problem that never produces a bug report. Users who cannot find what they need leave a subreddit comment, not a GitHub issue.&lt;/p&gt;

&lt;p&gt;If you only read GitHub Issues, you miss the security risk distribution and the discovery problem entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the Security Numbers Understate Actual Risk
&lt;/h2&gt;

&lt;p&gt;Security complaints represent 1.4% of GitHub mentions. That figure almost certainly understates actual exposure.&lt;/p&gt;

&lt;p&gt;A successful supply-chain attack is silent by design. Users whose agents were compromised by the ClawHavoc campaign (skills that installed cleanly, ran without errors, and exfiltrated data through the agent's normal output channel) are not in this dataset. They do not know they were compromised. They filed no issues.&lt;/p&gt;

&lt;p&gt;The 1.4% counts users who recognized a security problem and filed a report. It does not count users who were affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Skill Authors and Installers
&lt;/h2&gt;

&lt;p&gt;The dominant failure mode (silent wrong output) has no automatic detection. No error is raised. No alert fires. The skill appears healthy by every operational metric.&lt;/p&gt;

&lt;p&gt;For skill authors: return explicit errors on unexpected input rather than plausible-looking wrong output. A skill that fails loudly is easier to debug than one that succeeds silently with bad results. Write correctness tests against representative data before publishing.&lt;/p&gt;

&lt;p&gt;For installers: test skills with representative inputs before putting them in any workflow that touches real data. Monitor outputs, not just uptime. A skill that returns something is not the same as a skill that returns the right thing.&lt;/p&gt;

&lt;p&gt;Full methodology and dataset: &lt;a href="https://vesselofone.com/research/ai-agent-skills-ecosystem" rel="noopener noreferrer"&gt;vesselofone.com/research/ai-agent-skills-ecosystem&lt;/a&gt;. Dataset at &lt;a href="https://doi.org/10.5281/zenodo.19691714" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.19691714&lt;/a&gt;. Scan scripts at &lt;a href="https://github.com/vesselofone/openclaw-skills" rel="noopener noreferrer"&gt;github.com/vesselofone/openclaw-skills&lt;/a&gt; under MIT + CC BY 4.0.&lt;/p&gt;

&lt;p&gt;A free per-skill auditor covering SKILL.md intent, OAuth scope width, and injection patterns: &lt;a href="https://vesselofone.com/tools/skill-check" rel="noopener noreferrer"&gt;vesselofone.com/tools/skill-check&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://vesselofone.com" rel="noopener noreferrer"&gt;Vessel&lt;/a&gt; is managed OpenClaw hosting on private Linux VMs. Every agent we provision runs the skill auditor at setup. The research and dataset are open source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>70% of OpenClaw Skills Request OAuth Scopes They Don't Need</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Fri, 01 May 2026 17:50:10 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/70-of-openclaw-skills-request-oauth-scopes-they-dont-need-44d</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/70-of-openclaw-skills-request-oauth-scopes-they-dont-need-44d</guid>
      <description>&lt;p&gt;We ran two independent security scans across all 6,993 public skills in &lt;code&gt;openclaw/skills&lt;/code&gt;. The dominant finding in both: skills routinely request OAuth permissions beyond what their stated task requires.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Scans Found
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Snyk ToxicSkills&lt;/strong&gt; (published static analysis):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Share of catalog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OAuth scopes wider than task requires&lt;/td&gt;
&lt;td&gt;70.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Critical severity issues&lt;/td&gt;
&lt;td&gt;13.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Vessel first-party scan&lt;/strong&gt; (full catalog, reproducible, open scripts):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Share of catalog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flagged dangerous&lt;/td&gt;
&lt;td&gt;9.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caution-level risk patterns&lt;/td&gt;
&lt;td&gt;43.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are different scans with different methodologies. They are not additive. Both are reproducible: the Snyk findings are published, and the first-party scan scripts and dataset are open source at &lt;a href="https://github.com/vesselofone/openclaw-skills" rel="noopener noreferrer"&gt;github.com/vesselofone/openclaw-skills&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Over-scoping is the pattern that stands out. A skill that summarizes meeting notes should not hold a write token for your calendar. A skill that reads Slack channels should not have permission to post. In both scans, the majority of audited skills hold permissions beyond what they need for the described job.&lt;/p&gt;

&lt;p&gt;OAuth grants persist after installation. The agent holds the token until you explicitly revoke it. Skills can be updated by their authors without notifying installers. The OAuth scope declared in version 1.0 may not be the same as in version 1.4.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hash Scanning Cannot Detect
&lt;/h2&gt;

&lt;p&gt;Public reports placed the ClawHavoc campaign (malicious skills distributed through ClawHub) at between 341 and 824 skills. ClawHub responded by adding VirusTotal hash scanning. That response addresses one attack vector. It cannot address the primary one.&lt;/p&gt;

&lt;p&gt;The attack surface in an OpenClaw skill is not executable code. It is the &lt;code&gt;SKILL.md&lt;/code&gt; body: natural language that the agent reads and acts on. An adversarially crafted &lt;code&gt;SKILL.md&lt;/code&gt; instructs the agent to exfiltrate data, establish persistence, or escalate access through the conversational interface. There is no binary to hash. ClawHavoc skills installed cleanly, returned clean VirusTotal results, ran without errors, and exfiltrated through the agent's normal output channel.&lt;/p&gt;

&lt;p&gt;Hash scanning catches reused malicious binaries. It cannot detect adversarial natural language in the skill description. That surface remains uncovered.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to Do Before Installing Any Skill
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Read the full &lt;code&gt;SKILL.md&lt;/code&gt;. Check what OAuth scopes it requests. Verify each scope is necessary for the stated task. Not just plausible: actually required.&lt;/li&gt;
&lt;li&gt;Run a static check on the SKILL.md body for injection patterns and scope justification. The free auditor at &lt;a href="https://vesselofone.com/tools/skill-check" rel="noopener noreferrer"&gt;vesselofone.com/tools/skill-check&lt;/a&gt; covers this. Paste a slug or repo URL.&lt;/li&gt;
&lt;li&gt;Test with non-sensitive data before connecting production credentials or real client files.&lt;/li&gt;
&lt;li&gt;Set a review reminder for six months. Skill authors can update SKILL.md without notifying installers.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Four Predictions (2026-2028)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Per-skill runtime correctness monitoring becomes a commercial product. Static analysis catches code risk but cannot evaluate whether a skill produces correct output at runtime. That monitoring layer does not exist yet as a product.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Another named supply-chain incident affects more than 100 skills. ClawHavoc established the playbook. Hash scanning did not close the attack vector. The adversarial NL surface in SKILL.md bodies is still fully open.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enterprise procurement begins requiring security attestations for skills used in business workflows. Legal and financial teams running agents on client data will not accept installability as a quality standard.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Registries add evaluation requirements for marketplace inclusion. Pure installability metrics will not survive the first major enterprise procurement cycle.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Full methodology and dataset: &lt;a href="https://vesselofone.com/research/ai-agent-skills-ecosystem" rel="noopener noreferrer"&gt;vesselofone.com/research/ai-agent-skills-ecosystem&lt;/a&gt;. Dataset at &lt;a href="https://doi.org/10.5281/zenodo.19691714" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.19691714&lt;/a&gt;. Scan scripts at &lt;a href="https://github.com/vesselofone/openclaw-skills" rel="noopener noreferrer"&gt;github.com/vesselofone/openclaw-skills&lt;/a&gt; under MIT + CC BY 4.0.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://vesselofone.com" rel="noopener noreferrer"&gt;Vessel&lt;/a&gt; is managed OpenClaw hosting on private Linux VMs. Every agent we provision runs the skill auditor at setup. The research and dataset are open source.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>clawhub</category>
      <category>agents</category>
      <category>agentskills</category>
    </item>
    <item>
      <title>One apt Command Covers 97% of OpenClaw Skills on Linux. Here's the Full Map.</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Wed, 29 Apr 2026 07:03:08 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/one-apt-command-covers-97-of-openclaw-skills-on-linux-heres-the-full-map-6hh</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/one-apt-command-covers-97-of-openclaw-skills-on-linux-heres-the-full-map-6hh</guid>
      <description>&lt;p&gt;Most OpenClaw community documentation assumes a Mac. Setup guides use Homebrew. Sample skills shell out to &lt;code&gt;pbpaste&lt;/code&gt; and &lt;code&gt;osascript&lt;/code&gt;. The registry does not warn you when a skill declares a macOS-only binary. You install it, it runs, and it returns nothing useful the first time it hits &lt;code&gt;pbpaste&lt;/code&gt; on a server.&lt;/p&gt;

&lt;p&gt;To find out how deep that problem goes, we scanned all 6,993 public skills in &lt;code&gt;openclaw/skills&lt;/code&gt;, parsed each &lt;code&gt;SKILL.md&lt;/code&gt;, and resolved every declared binary dependency against a verified Linux install map. One apt line covers 6,784 of 6,993 skills: 97.0% of the catalog. The remaining 3% splits into pip-installable tools, curl install scripts, and about 10 skills that genuinely cannot run on Linux.&lt;/p&gt;

&lt;h2&gt;
  
  
  The line
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3 python3-pip nodejs npm curl jq git ffmpeg sqlite3 openssl ripgrep
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Homebrew. No &lt;code&gt;uv&lt;/code&gt;. No Docker. No language managers. The Debian/Ubuntu package manager you already have.&lt;/p&gt;

&lt;p&gt;This covers Ubuntu 22.04, Ubuntu 24.04, and Debian 12 (bookworm) completely. On Alpine, Arch, or RHEL, translate the package names. The set is the same.&lt;/p&gt;

&lt;p&gt;82.6% of skills declare zero binary dependencies. They need nothing beyond Python and Node, which the apt line covers. The top declared dependencies across the 1,216 skills that do declare binaries:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Binary&lt;/th&gt;
&lt;th&gt;Skills&lt;/th&gt;
&lt;th&gt;Install&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;python3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;536&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install python3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;curl&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;313&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install curl&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;node&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;178&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install nodejs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;78&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install jq&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;python&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;symlink to &lt;code&gt;python3&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npx&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;ships with &lt;code&gt;nodejs&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;preinstalled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;npm&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install npm&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install git&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ffmpeg&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;code&gt;apt install ffmpeg&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything at the head of this list is preinstalled or one apt away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the apt line
&lt;/h2&gt;

&lt;p&gt;About 3% of the catalog declares a binary the apt line does not cover. That tail breaks into three groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pip-installable tools:&lt;/strong&gt; &lt;code&gt;yt-dlp&lt;/code&gt;, &lt;code&gt;pipx&lt;/code&gt;, &lt;code&gt;uv&lt;/code&gt;, &lt;code&gt;poetry&lt;/code&gt;, &lt;code&gt;ruff&lt;/code&gt;. One &lt;code&gt;pip install&lt;/code&gt; each. Already covered if you included &lt;code&gt;python3-pip&lt;/code&gt; in the apt line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Curl install scripts:&lt;/strong&gt; &lt;code&gt;uv&lt;/code&gt;, &lt;code&gt;bun&lt;/code&gt;, Foundry's &lt;code&gt;cast&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-LsSf&lt;/span&gt; https://astral.sh/uv/install.sh | sh    &lt;span class="c"&gt;# uv + uvx&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://bun.sh/install | bash           &lt;span class="c"&gt;# bun&lt;/span&gt;
curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://foundry.paradigm.xyz | bash        &lt;span class="c"&gt;# cast + Ethereum tooling&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Direct downloads:&lt;/strong&gt; &lt;code&gt;gh&lt;/code&gt; (GitHub CLI) and &lt;code&gt;mcporter&lt;/code&gt;. Standard release tarballs from their respective repos.&lt;/p&gt;

&lt;p&gt;Once you subtract these, the genuine residual is small: about 10 skills that cannot run on Linux regardless of what you install.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you cannot get on Linux
&lt;/h2&gt;

&lt;p&gt;Four skills require macOS desktop applications and have no equivalent in the catalog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Desktop automation (AppleScript/osascript):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Airfoil (2,096 installs): controls AirPlay speakers. Requires the Airfoil macOS app.&lt;/li&gt;
&lt;li&gt;Photoshop Automator (1,123 installs): runs Adobe Photoshop ExtendScript on a Mac.&lt;/li&gt;
&lt;li&gt;Nerve Bridge Skill (591 installs): controls the Trae macOS app via AppleScript.&lt;/li&gt;
&lt;li&gt;wallpaper-auto-switch-pro-executable (249 installs): switches macOS wallpaper via &lt;code&gt;osascript&lt;/code&gt; and &lt;code&gt;launchd&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Six more skills use &lt;code&gt;pbpaste&lt;/code&gt; to read clipboard input. The clipboard mechanism is Mac-specific; the underlying capability is not. Each has a named replacement in the catalog that covers the same task with file input.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mac skill&lt;/th&gt;
&lt;th&gt;Installs&lt;/th&gt;
&lt;th&gt;Linux replacement&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reply-coach&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;280&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy-editing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;File-based text rewrite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;reviewer-rebuttal-coach&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;&lt;code&gt;copy-editing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Swap pbpaste for file input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;collab-offer-polisher&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;253&lt;/td&gt;
&lt;td&gt;&lt;code&gt;medical-email-polisher&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Closest match for polishing business messages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;policy-to-checklist&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;248&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afrexai-qa-test-plan&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Document-to-checklist generator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;claim-risk-auditor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;244&lt;/td&gt;
&lt;td&gt;&lt;code&gt;verify-claims&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Direct claim/fact-check equivalent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rubric-gap-analyzer&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;244&lt;/td&gt;
&lt;td&gt;&lt;code&gt;afrexai-interview-architect&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rubric-based scoring, file input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That is the entire genuine residual. The broader set of 241 skills blocked by the apt line spans capabilities like Ethereum tooling, browser automation, video processing, and calendar sync. Every one of those categories has Linux-native alternatives in the same catalog. The &lt;a href="https://vesselofone.com/skills/openclaw" rel="noopener noreferrer"&gt;live browser at vesselofone.com/skills/openclaw&lt;/a&gt; lets you filter by capability and find them.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One apt line covers 6,784 of 6,993 public OpenClaw skills on Linux (97.0%): &lt;code&gt;sudo apt install python3 python3-pip nodejs npm curl jq git ffmpeg sqlite3 openssl ripgrep&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;82.6% of skills declare zero binary dependencies. They need nothing beyond what the apt line provides.&lt;/li&gt;
&lt;li&gt;The remaining ~3% splits into pip-installable tools, curl install scripts, and 10 Mac-only skills.&lt;/li&gt;
&lt;li&gt;4 skills require macOS desktop apps (Airfoil, Photoshop Automator, Nerve Bridge Skill, wallpaper switcher) and have no Linux equivalent. 6 pbpaste skills have named Linux replacements in the catalog.&lt;/li&gt;
&lt;li&gt;The scan script is open source and reruns against the live catalog in about five minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing is not the same as working
&lt;/h2&gt;

&lt;p&gt;Knowing that 97% of skills resolve their binary dependencies on Linux is useful before you spend time setting up an agent. It does not tell you whether those skills produce correct output, or what security risks they carry. The full research (security scan and classified user complaint data alongside this installability view) is at &lt;a href="https://vesselofone.com/research/ai-agent-skills-ecosystem" rel="noopener noreferrer"&gt;vesselofone.com/research/ai-agent-skills-ecosystem&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Per-skill dataset (CSV, CC BY 4.0): &lt;a href="https://doi.org/10.5281/zenodo.19691714" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.19691714&lt;/a&gt;. Scan scripts (MIT): &lt;a href="https://github.com/vesselofone/openclaw-skills" rel="noopener noreferrer"&gt;github.com/vesselofone/openclaw-skills&lt;/a&gt;. The catalog scan reruns in about five minutes.&lt;/p&gt;

&lt;p&gt;A free per-skill auditor covering SKILL.md intent, OAuth scope width, and shell-command injection patterns: &lt;a href="https://vesselofone.com/tools/skill-check" rel="noopener noreferrer"&gt;vesselofone.com/tools/skill-check&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://vesselofone.com" rel="noopener noreferrer"&gt;Vessel&lt;/a&gt; is managed OpenClaw hosting on private Linux VMs. We run the apt line above at provision time on every agent, so skills work on the first invocation. The scan script and dataset are open source.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Can OpenClaw Read Your Files? Here's What's Actually True.</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Tue, 14 Apr 2026 04:23:44 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/can-openclaw-read-your-files-heres-whats-actually-true-2pkg</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/can-openclaw-read-your-files-heres-whats-actually-true-2pkg</guid>
      <description>&lt;p&gt;A colleague who runs a consulting practice told me he'd read something online suggesting that OpenClaw would read all his data and that client information could end up in the wrong hands. He wanted to know whether he needed to do some kind of data cleanup before running it, and whether his clients' information was safe.&lt;/p&gt;

&lt;p&gt;The answer is no cleanup needed, and yes the data is safe. But the reason matters, because "trust us, it's fine" is not an answer for a professional who carries liability for their clients' information. Here is the actual mechanism.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Vessel is a separate computer
&lt;/h2&gt;

&lt;p&gt;When you run OpenClaw through Vessel, it does not run on your machine. It runs inside a dedicated virtual machine in the cloud. That VM is the Vessel.&lt;/p&gt;

&lt;p&gt;Your laptop and the Vessel are two distinct computers. They do not share a file system, they do not share memory, and there is no network path between them except the one you open when you visit the Vessel dashboard in your browser. Your Documents folder, your client files, your financial records, your desktop: none of these are on the Vessel. They are on your machine. The Vessel has never seen them and has no way to reach them.&lt;/p&gt;

&lt;p&gt;This is not a permissions setting. It is not a policy. It is a physical separation. The agent lives in the cloud. Your files live on your hardware. Those are two different computers.&lt;/p&gt;

&lt;p&gt;So the question "will OpenClaw read my files" has a simple answer when you run it on Vessel: it cannot, because your files are not there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What OpenClaw can access
&lt;/h2&gt;

&lt;p&gt;The Vessel contains OpenClaw and the connections you have explicitly authorized. That is the full inventory of what the agent can see.&lt;/p&gt;

&lt;p&gt;If you connect your Gmail account, it can read and send email from that account. If you connect Slack, it can read and send messages in the channels you permit. If you connect your calendar, it can read your schedule. These connections go through standard authorization flows, the same ones you use when you allow any application to connect to Google or Slack. You approve each one. You define the scope.&lt;/p&gt;

&lt;p&gt;That list is the entire perimeter. Nothing on your laptop is inside it. Nothing you have not explicitly connected is inside it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens if someone hacks the Vessel
&lt;/h2&gt;

&lt;p&gt;This is the second question worth answering directly, because "separate computer" raises an obvious follow-up: what if someone gets into that computer?&lt;/p&gt;

&lt;p&gt;Each Vessel is an isolated virtual machine. The isolation is enforced at the hardware level by the cloud infrastructure it runs on. One VM cannot read the memory of another VM. One VM cannot access the disk of another VM. This is not a software promise, it is how the underlying hardware virtualization works. Google Cloud Platform's hypervisor enforces it at the physical level.&lt;/p&gt;

&lt;p&gt;This matters for two reasons.&lt;/p&gt;

&lt;p&gt;First, if someone compromised your Vessel, they would get a Linux box running OpenClaw, plus whatever services you had connected via OAuth. They would not get your local files, because those are on your machine, not the Vessel. The blast radius is bounded.&lt;/p&gt;

&lt;p&gt;Second, if someone compromised any Vessel, they would not be able to cross into another customer's Vessel. Each one is walled off from every other one at the hardware level. This is structurally different from shared container hosting, where a container escape can put an attacker on the host machine that other containers share. On dedicated VMs, that path does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare: running OpenClaw on your laptop
&lt;/h2&gt;

&lt;p&gt;Running OpenClaw locally is not the data disaster people imagine, but it does create a different risk worth understanding.&lt;/p&gt;

&lt;p&gt;The agent still cannot read arbitrary files it was not given access to. That part is the same. What changes is that your agent is now running on the same machine as everything sensitive you own. Your client contracts, your financial records, your saved credentials: all on the same hardware as the agent process. If something goes wrong with the software, you are dealing with it on the machine that holds everything.&lt;/p&gt;

&lt;p&gt;Running on a dedicated Vessel means those two things never share a machine. Something going wrong on the Vessel stays contained to the Vessel. Your laptop remains what it was before: a separate computer that the agent has no access to.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM API question
&lt;/h2&gt;

&lt;p&gt;One more concern worth addressing: when OpenClaw processes a request, it sends a prompt to the AI model you have configured (Anthropic, OpenAI, or Google Gemini) through their API. That conversation does travel to their servers. This is not hidden and it is not unique to OpenClaw. It is exactly the same data flow as pasting a document into Claude or ChatGPT yourself.&lt;/p&gt;

&lt;p&gt;All three major providers are explicit that paid API traffic is not used for model training.&lt;/p&gt;

&lt;p&gt;Anthropic: "We will not use your chats or coding sessions to train our models, unless you choose to participate in our Development Partner Program." (&lt;a href="https://privacy.claude.com/en/articles/7996885-how-do-you-use-personal-data-in-model-training" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;OpenAI: "Data sent to the OpenAI API is not used to train or improve OpenAI models (unless you explicitly opt in to share data with us)." (&lt;a href="https://openai.com/enterprise-privacy" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Google Gemini: "When you use Paid Services, Google doesn't use your prompts or responses to improve our products." (&lt;a href="https://ai.google.dev/gemini-api/terms" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;One caveat: Google's free Gemini API tier operates under different terms and does use content for product improvement. Vessel uses the paid API tier, so the above applies.&lt;/p&gt;

&lt;p&gt;The practical point in all three cases is the same: the data that travels to the model is only the content you put into the conversation. It is not a background sweep of your files. It is not ambient collection. It is a deliberate API call with the context you chose to include.&lt;/p&gt;

&lt;p&gt;The memory and context that OpenClaw builds over time, the knowledge it accumulates about how you work, stays on the Vessel. On shared hosting, that server belongs to someone else. On a dedicated Vessel, it belongs to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  No cleanup needed, and here is why
&lt;/h2&gt;

&lt;p&gt;My colleague asked whether he needed to sanitize his systems before running an AI agent. The reason the answer is no: the agent is not on his systems. It is on a separate computer in the cloud that has never seen his local files and cannot reach them.&lt;/p&gt;

&lt;p&gt;The question worth asking before you start is not "what is on my machine that the agent might find." It is "what services am I going to connect to this agent, and am I comfortable with it acting on my behalf in those places." That is a much narrower question, and it is entirely in your control.&lt;/p&gt;

&lt;p&gt;Make a short list of the connections you plan to authorize. Gmail, Slack, calendar, whatever is relevant to the work you want it to do. That list is the perimeter. Everything outside it remains exactly where it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structural answer
&lt;/h2&gt;

&lt;p&gt;The privacy guarantee here is not a promise made in a terms of service. It is a consequence of architecture. The Vessel is a separate computer. Your files are on a different machine. Hardware-level VM isolation means no other customer's Vessel can see yours, and yours cannot see theirs.&lt;/p&gt;

&lt;p&gt;For a professional who carries accountability to clients, that distinction matters. "We promise not to look" is a policy. "There is no path from that machine to your files" is a structure.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building &lt;a href="https://vesselofone.com" rel="noopener noreferrer"&gt;Vessel&lt;/a&gt;, dedicated private hosting for OpenClaw agents. Each agent runs on its own isolated server in the cloud. More on how the isolation works: &lt;a href="https://vesselofone.com/platform/security" rel="noopener noreferrer"&gt;vesselofone.com/platform/security&lt;/a&gt; and &lt;a href="https://vesselofone.com/why/isolation" rel="noopener noreferrer"&gt;vesselofone.com/why/isolation&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>security</category>
      <category>openclaw</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>What Self-Hosting OpenClaw Actually Costs (It's Not Just the VPS)</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Sun, 05 Apr 2026 06:30:40 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/what-self-hosting-openclaw-actually-costs-its-not-just-the-vps-353o</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/what-self-hosting-openclaw-actually-costs-its-not-just-the-vps-353o</guid>
      <description>&lt;p&gt;Every deployment guide says self-hosting OpenClaw costs $5-20/mo. I believed that too, until I started tracking where my time actually went.&lt;/p&gt;

&lt;p&gt;The VPS was the cheapest part of the whole operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Everyone Budgets
&lt;/h2&gt;

&lt;p&gt;You find a deployment guide. It walks you through spinning up a VPS, pulling the Docker image, setting up a reverse proxy. At the end, you do the math: maybe $7 on Hetzner, $48 if you want DigitalOcean's SLA. Add a domain, Let's Encrypt, your own API keys. Call it $20-100/mo depending on how fancy you get.&lt;/p&gt;

&lt;p&gt;For reference, here's what a 4 vCPU / 8 GB instance actually costs in 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Monthly&lt;/th&gt;
&lt;th&gt;The catch&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Contabo&lt;/td&gt;
&lt;td&gt;~$5&lt;/td&gt;
&lt;td&gt;Oversold shared vCPUs. Performance varies.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OVH&lt;/td&gt;
&lt;td&gt;~$6.50&lt;/td&gt;
&lt;td&gt;Free daily backups. Honest value.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hetzner&lt;/td&gt;
&lt;td&gt;~$9&lt;/td&gt;
&lt;td&gt;No SLA. US regions get 1 TB transfer, not 20 TB. Price increased Apr 2026.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GCP (1yr commit)&lt;/td&gt;
&lt;td&gt;~$37&lt;/td&gt;
&lt;td&gt;On-demand is $49. Add $3-5 for disk.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vultr&lt;/td&gt;
&lt;td&gt;$40&lt;/td&gt;
&lt;td&gt;Straightforward. No surprises.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;$56&lt;/td&gt;
&lt;td&gt;Best SLA. Best marketplace. Price reflects it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Feels reasonable. You pick a provider, provision the box, get the agent running. Whole thing takes an evening.&lt;/p&gt;

&lt;p&gt;And then the month starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 1: The Patch
&lt;/h2&gt;

&lt;p&gt;OpenClaw ships patches 2-3 times a month. Not feature releases. Security patches. The kind you can't ignore because the last round of CVEs included a pre-auth remote code execution.&lt;/p&gt;

&lt;p&gt;So Tuesday morning, I see the release. Pull the new image. Read the changelog to make sure nothing breaks. Restart the container. Verify the agent comes back and the skills still load.&lt;/p&gt;

&lt;p&gt;45 minutes. Fine. That's the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 2: The Key I Forgot About
&lt;/h2&gt;

&lt;p&gt;Routine API key rotation. I open the docker-compose file and there it is. The OpenAI key, hardcoded directly in the environment block. Not pulled from &lt;code&gt;.env&lt;/code&gt;. Just sitting there in plaintext, committed to a private repo I haven't thought about since setup day.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# How it was (bad)&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;openclaw&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OPENAI_API_KEY=sk-proj-abc123...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# How it should have been&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;openclaw&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;env_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I know better than this. Everyone knows better than this. But setup day was three weeks ago, and setup day me was in a hurry to see the agent respond to a message. Setup day me cut a corner and moved on.&lt;/p&gt;

&lt;p&gt;Rotated the key. Fixed the compose file. Tested everything. 50 minutes, plus the quiet dread of wondering how long that key was sitting there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 3: The Silent Failure
&lt;/h2&gt;

&lt;p&gt;This one cost me three hours and some trust.&lt;/p&gt;

&lt;p&gt;The agent had been silently disconnecting from the gateway every six hours or so. No error in the container logs. No alert. Nothing in the dashboard. From my side, everything looked fine.&lt;/p&gt;

&lt;p&gt;From the user's side, they'd open the chat and get nothing. Just silence. For how long before I noticed? I don't actually know. That's the part that bothered me.&lt;/p&gt;

&lt;p&gt;The fix was a health check I should have written on day one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; http://localhost:18789/health&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;"200"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;docker restart openclaw-agent
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;: Agent restarted"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /var/log/openclaw-health.log
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# crontab: every 5 minutes&lt;/span&gt;
&lt;span class="k"&gt;*&lt;/span&gt;/5 &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; /opt/openclaw/health-check.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three hours of debugging. The silent part was worse than the broken part. An agent that crashes loudly is annoying. An agent that fails quietly erodes confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 4: Sunday Night
&lt;/h2&gt;

&lt;p&gt;11pm on a Sunday. A skill tried to load a large PDF into context. The container hit its memory ceiling. The kernel OOM-killed it. No graceful shutdown, no notification, no restart. Just gone.&lt;/p&gt;

&lt;p&gt;I found out Monday morning when I saw a client message that had gone unanswered for nine hours.&lt;/p&gt;

&lt;p&gt;90 minutes to set up memory limits and alerting. The kind of work that feels urgent at 7am on a Monday, standing in the kitchen, coffee not yet made, reading a notification that should have woken me up at 11pm but didn't because the alerting didn't exist yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding It Up
&lt;/h2&gt;

&lt;p&gt;Here's what the month cost:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Hours&lt;/th&gt;
&lt;th&gt;What happened&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Security patching&lt;/td&gt;
&lt;td&gt;~1 hr&lt;/td&gt;
&lt;td&gt;One patch cycle. Some months it's two.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential rotation&lt;/td&gt;
&lt;td&gt;~1 hr&lt;/td&gt;
&lt;td&gt;Plus the cold sweat of finding a hardcoded key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring + debugging&lt;/td&gt;
&lt;td&gt;~3 hrs&lt;/td&gt;
&lt;td&gt;The silent WebSocket failure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unplanned incident&lt;/td&gt;
&lt;td&gt;~1.5 hrs&lt;/td&gt;
&lt;td&gt;Sunday night OOM kill.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~6.5 hrs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Call it 4-7 hours in a typical month. Some months less. Some months the WebSocket thing happens and it's more.&lt;/p&gt;

&lt;p&gt;Now put a number on your time. If you bill $100/hr (and if you're running an AI agent for professional work, your rate is probably higher), that's $400-700/mo in time. On top of whatever you pay for the VPS.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Infra cost&lt;/th&gt;
&lt;th&gt;+ Time (4 hrs × $100)&lt;/th&gt;
&lt;th&gt;What you actually pay&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hetzner&lt;/td&gt;
&lt;td&gt;~$9&lt;/td&gt;
&lt;td&gt;$400&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$409/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OVH&lt;/td&gt;
&lt;td&gt;~$7&lt;/td&gt;
&lt;td&gt;$400&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$407/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vultr&lt;/td&gt;
&lt;td&gt;~$48&lt;/td&gt;
&lt;td&gt;$400&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$448/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DigitalOcean&lt;/td&gt;
&lt;td&gt;~$56&lt;/td&gt;
&lt;td&gt;$400&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$456/mo&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pick any provider. The VPS is a rounding error. You're paying $400/mo no matter where the box lives.&lt;/p&gt;

&lt;h2&gt;
  
  
  This Isn't Like Self-Hosting Plex
&lt;/h2&gt;

&lt;p&gt;I've self-hosted plenty of things. Nextcloud. Plex. Home Assistant. Gitea. None of them cost me this much time per month.&lt;/p&gt;

&lt;p&gt;AI agents are a different animal. External API keys that expire on different schedules. A patch cadence of 2-3 times a month because the security surface is still being mapped (14 CVEs in four months, and counting). Third-party skills that run arbitrary code inside your agent. 800+ malicious skills found on ClawHub in a single audit.&lt;/p&gt;

&lt;p&gt;And the stakes are different. Plex going down means someone can't watch a movie. Your AI agent going down means a client message goes unanswered for nine hours. The data inside it isn't your media library. It's documents, API keys, conversation history. Potentially client data.&lt;/p&gt;

&lt;p&gt;The operational weight is structurally heavier than most self-hosted software. That's not a temporary problem. That's the nature of what this software does.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Self-Hosting Is Still the Right Call
&lt;/h2&gt;

&lt;p&gt;If you're learning how AI agents work under the hood, self-host. It's the best way to understand what's actually happening. If you need to modify the runtime itself, self-host. If infrastructure is your hobby and your homelab is where you unwind on weekends, self-host and enjoy it. If you already have an ops team managing servers, the marginal cost of one more container is low.&lt;/p&gt;

&lt;p&gt;For all of those cases, Hetzner at ~$9/mo is hard to beat. OVH's free backups are a nice touch. Go for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  When It Isn't
&lt;/h2&gt;

&lt;p&gt;If infrastructure time is a cost, not recreation, the math is hard to argue with.&lt;/p&gt;

&lt;p&gt;The VPS costs $9-56. Your time costs $400. The total is $409-448/mo, and it doesn't matter which provider you pick because your time dwarfs the infrastructure line.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://vesselofone.com" rel="noopener noreferrer"&gt;Vessel&lt;/a&gt; because I didn't want to be the one reading that Monday notification. &lt;a href="https://vesselofone.com/why/isolation" rel="noopener noreferrer"&gt;Dedicated GCP VM&lt;/a&gt;, Cloudflare Tunnel, &lt;a href="https://vesselofone.com/platform/security" rel="noopener noreferrer"&gt;patches and security hardening&lt;/a&gt; applied. Your time costs more than that.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openclaw</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>220,000+ OpenClaw Instances Are Exposed. Here's How to Check Yours.</title>
      <dc:creator>Mehul Bhardwaj</dc:creator>
      <pubDate>Sat, 28 Mar 2026 12:15:18 +0000</pubDate>
      <link>https://dev.to/mehul_bhardwaj_8a2d2aaecb/220000-openclaw-instances-are-exposed-heres-how-to-check-yours-1f7o</link>
      <guid>https://dev.to/mehul_bhardwaj_8a2d2aaecb/220000-openclaw-instances-are-exposed-heres-how-to-check-yours-1f7o</guid>
      <description>&lt;p&gt;Security researchers have been scanning for exposed OpenClaw instances since January 2026. The numbers vary by methodology: Penligent found over 220,000, SecurityScorecard identified 135,000, Censys tracked growth from 1,000 to 21,000+ in a single week. Microsoft's security blog concluded that "for most environments, the appropriate decision may be not to deploy it."&lt;/p&gt;

&lt;p&gt;Most of these instances are running without TLS. Many are still vulnerable to ClawJacked (CVE-2026-25253, CVSS 8.8), which allowed any webpage you visited to silently brute-force the gateway token over localhost with no rate limiting.&lt;/p&gt;

&lt;p&gt;I've been reviewing public configs and deployment guides. Three misconfigs show up in the majority of them, and they're all fixable in minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The exposure surface
&lt;/h2&gt;

&lt;p&gt;OpenClaw's default config binds the gateway to &lt;code&gt;0.0.0.0:18789&lt;/code&gt;. If you install it on a VPS and don't touch the network settings, the gateway is public. There's no warning during setup. The docs mention it, but not where people look.&lt;/p&gt;

&lt;p&gt;What this means in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gateway token brute-force.&lt;/strong&gt; ClawJacked (CVE-2026-25253, CVSS 8.8) allowed any webpage you visited to brute-force the gateway token. No rate limiting. No CORS. Patched in v2026.1.24-1, but the fix requires updating. Persistent services that nobody actively maintains tend to drift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unencrypted traffic.&lt;/strong&gt; Without TLS, everything between the browser and the agent travels in plaintext. API keys, model responses, user data. On a shared network, that's trivial to intercept.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Supply chain.&lt;/strong&gt; ClawHavoc in January 2026: researchers found 824 malicious skills on ClawHub out of roughly 10,700 total. Clawdex, the main community scanner, was catching under 10% of them (Oathe's independent audit confirmed this). If your instance auto-installs recommended skills, you're trusting a supply chain that has already been compromised.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The three configs most people get wrong
&lt;/h2&gt;

&lt;p&gt;I've reviewed hundreds of &lt;code&gt;openclaw.json&lt;/code&gt; files from public repos, Docker Compose setups, and deployment guides. Three misconfigs show up in the majority of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Gateway binding
&lt;/h3&gt;

&lt;p&gt;Default: binds to all interfaces (&lt;code&gt;0.0.0.0:18789&lt;/code&gt;)&lt;br&gt;
What it should be: &lt;code&gt;loopback&lt;/code&gt; (127.0.0.1 only)&lt;/p&gt;

&lt;p&gt;If you're running behind a reverse proxy or tunnel, the gateway should never be reachable directly. The &lt;code&gt;bind&lt;/code&gt; key accepts &lt;code&gt;loopback&lt;/code&gt;, &lt;code&gt;lan&lt;/code&gt;, &lt;code&gt;tailnet&lt;/code&gt;, or &lt;code&gt;custom&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gateway"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"loopback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18789&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The three proxy/tunnel flags
&lt;/h3&gt;

&lt;p&gt;If you're running behind a reverse proxy or Cloudflare Tunnel, you need three flags under &lt;code&gt;gateway.controlUi&lt;/code&gt;. Not at the root level. Not as dot-notation keys. Nested JSON only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gateway"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"controlUi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dangerouslyDisableDeviceAuth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dangerouslyAllowHostHeaderOriginFallback"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"allowInsecureAuth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most guides mention two of these. The third, &lt;code&gt;dangerouslyDisableDeviceAuth&lt;/code&gt;, is the one that causes the &lt;code&gt;disconnected (1000): no reason&lt;/code&gt; error in the browser. It disables CLI-based device pairing, which only works with local machine access. Behind a proxy, there's no local CLI, so the auth loop times out silently.&lt;/p&gt;

&lt;p&gt;The flag names sound dangerous. They're not, if you have a proxy handling auth in front. Without a proxy, don't set them.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. TLS termination
&lt;/h3&gt;

&lt;p&gt;If your reverse proxy handles TLS (it should), the gateway can run without its own certificate. But the connection between proxy and gateway must stay on loopback. If the proxy runs on a different host than the gateway, you need TLS on both hops.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Browser] →HTTPS→ [Proxy (TLS)] →HTTP→ [Gateway (127.0.0.1:18789)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This only works when proxy and gateway share the same host. Most single-VPS setups qualify.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check yours
&lt;/h2&gt;

&lt;p&gt;Run these checks on any instance:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Port exposure check:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# From outside your network&lt;/span&gt;
nmap &lt;span class="nt"&gt;-p&lt;/span&gt; 18789 your-server-ip
&lt;span class="c"&gt;# If it shows "open", your gateway is public&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Config audit:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# On the server&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.openclaw/openclaw.json | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"bind|dangerously|allowInsecure"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Version check:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;span class="c"&gt;# Anything before v2026.1.24-1 is vulnerable to ClawJacked&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also built a free scanner that runs these checks and a few more (skill supply chain, known CVE patterns, config analysis): &lt;a href="https://vesselofone.com/tools/security-check" rel="noopener noreferrer"&gt;https://vesselofone.com/tools/security-check&lt;/a&gt;. It runs against your instance URL and returns a report. No data stored, no signup required.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;gateway.bind&lt;/code&gt; to &lt;code&gt;"loopback"&lt;/code&gt;, not the default (all interfaces)&lt;/li&gt;
&lt;li&gt;Set the three &lt;code&gt;gateway.controlUi&lt;/code&gt; flags if behind a proxy or tunnel&lt;/li&gt;
&lt;li&gt;TLS terminate at the proxy, keep gateway on loopback&lt;/li&gt;
&lt;li&gt;Update to v2026.1.24-1 or later (ClawJacked fix)&lt;/li&gt;
&lt;li&gt;Audit installed skills (ClawHavoc found 824 malicious ones on ClawHub)&lt;/li&gt;
&lt;li&gt;Run a port scan from outside your network to verify nothing is exposed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of these take five minutes. The gap between "it works" and "it's not actively exploitable" is three config lines.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
