<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>andreasglashauser.com</title>
    <link>https://andreasglashauser.com/</link>
    <description>Blog posts from andreasglashauser.com</description>
    <lastBuildDate>Sun, 19 Apr 2026 00:00:00 +0000</lastBuildDate>
    <language>en</language>
    <item>
      <title>Nick Bostrom’s Superintelligence</title>
      <link>https://andreasglashauser.com/blog/nick-bostrom-superintelligence.html</link>
      <guid>https://andreasglashauser.com/blog/nick-bostrom-superintelligence.html</guid>
      <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I first read Nick Bostrom’s <a
          href="https://en.wikipedia.org/wiki/Superintelligence:_Paths,_Dangers,_Strategies">Superintelligence</a>
          a few years ago, before the current AI boom took off. Recently
          I revisited it and was struck by how thought-provoking it
          still is. If you are interested in the philosophical
          implications of AI, this book is essential reading. It
          explores existential risk, alignment, and the control problem
          of machine intelligence. Though it was published in 2013, its
          core arguments still hold up surprisingly well.</p>
          <p>For me, the book’s greatest value is its function as a
          calibration tool. In today’s AI bubble, there is a strong
          tendency to talk as if superintelligence is almost here,
          simply because current systems can do things that would have
          seemed astonishing a few years ago. The book reminds you what
          superintelligence is actually supposed to mean. Bostrom helps
          re-establish the scale of the idea, and by that standard we
          are still very far from it.</p>
          <p>Rereading it reminded me how inflated much of the current
          discussion around AI has become. Whatever is happening right
          now, it is still nowhere close to what Bostrom meant by
          superintelligence.</p>]]></description>
      <content:encoded><![CDATA[<p>I first read Nick Bostrom’s <a
          href="https://en.wikipedia.org/wiki/Superintelligence:_Paths,_Dangers,_Strategies">Superintelligence</a>
          a few years ago, before the current AI boom took off. Recently
          I revisited it and was struck by how thought-provoking it
          still is. If you are interested in the philosophical
          implications of AI, this book is essential reading. It
          explores existential risk, alignment, and the control problem
          of machine intelligence. Though it was published in 2013, its
          core arguments still hold up surprisingly well.</p>
          <p>For me, the book’s greatest value is its function as a
          calibration tool. In today’s AI bubble, there is a strong
          tendency to talk as if superintelligence is almost here,
          simply because current systems can do things that would have
          seemed astonishing a few years ago. The book reminds you what
          superintelligence is actually supposed to mean. Bostrom helps
          re-establish the scale of the idea, and by that standard we
          are still very far from it.</p>
          <p>Rereading it reminded me how inflated much of the current
          discussion around AI has become. Whatever is happening right
          now, it is still nowhere close to what Bostrom meant by
          superintelligence.</p>]]></content:encoded>
    </item>
    <item>
      <title>Thoughts on .onion sites</title>
      <link>https://andreasglashauser.com/blog/thoughts-on-onion-sites.html</link>
      <guid>https://andreasglashauser.com/blog/thoughts-on-onion-sites.html</guid>
      <pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I really like the idea behind .onion sites. Onion addresses
          are self-authenticating, which means the address is tied
          directly to the cryptographic key used by the service. That is
          a stronger form of authentication than relying on a
          certificate authority to vouch for such a binding.</p>
          <p>In practice, this means that if you already have the
          correct onion address of a site, you can be confident that you
          are reaching the service that actually controls that address.
          However, the challenge is that you still need a trustworthy
          way to obtain the correct onion address in the first place.
          That makes the system excellent in theory, but difficult to
          use in practice.</p>
          <p>Onion sites also have several other unique use cases:</p>
          <ul>
          <li>Anonymous publishing and hiding a server’s physical
          location</li>
          <li>Whistleblower systems and secure source contact through
          tools like <a
          href="https://securedrop.org/">SecureDrop</a></li>
          <li>Invite-only private services, where you need not only the
          onion address but also use <a
          href="https://community.torproject.org/onion-services/advanced/client-auth/">Tor’s
          built-in client authorization</a></li>
          <li>Self-hosting behind NAT or restrictive firewalls, as seen
          in tools like Lightning services</li>
          <li>Temporary file drops, disposable websites, and chats
          without relying on a third-party platform using eg. <a
          href="https://onionshare.org/">OnionShare</a></li>
          <li>Messaging systems with no central public server identity,
          such as <a href="https://briarproject.org/">Briar</a></li>
          </ul>
          <p>I have now also made this website available via an onion
          address: <a
          href="http://metrsww4o7yeijgkdp6otpu5hu2bz5uizntuxan6cbed5sm6w2kknayd.onion/">http://metrsww4o7yeijgkdp6otpu5hu2bz5uizntuxan6cbed5sm6w2kknayd.onion/</a></p>
          <p>I cannot think of a particularly practical reason why
          accessing this site via its onion address would be useful.
          Perhaps it would have been more relevant when Tor still had
          its “Prioritize .onion sites when known” feature, which
          automatically upgraded a connection to an onion address when
          possible. <a
          href="https://blog.torproject.org/new-release-tor-browser-13012/">That
          feature was removed in early 2024</a> because of potential
          fingerprinting risks.</p>
          <p>Still, I have wanted to offer this option for a while,
          mainly to learn how onion services are set up. I learned that
          it is surprisingly easy; the Tor Project provides a
          straightforward guide <a
          href="https://community.torproject.org/onion-services/setup/">here</a>.</p>
          <p>At the moment, I use Wireguard to access my home network. I
          have been thinking about trying onion addresses for some of
          the services I host for myself, mainly out of curiosity and to
          see how well it works in practice as an experiment. While this
          is still just a rough idea, I do find it very appealing.</p>]]></description>
      <content:encoded><![CDATA[<p>I really like the idea behind .onion sites. Onion addresses
          are self-authenticating, which means the address is tied
          directly to the cryptographic key used by the service. That is
          a stronger form of authentication than relying on a
          certificate authority to vouch for such a binding.</p>
          <p>In practice, this means that if you already have the
          correct onion address of a site, you can be confident that you
          are reaching the service that actually controls that address.
          However, the challenge is that you still need a trustworthy
          way to obtain the correct onion address in the first place.
          That makes the system excellent in theory, but difficult to
          use in practice.</p>
          <p>Onion sites also have several other unique use cases:</p>
          <ul>
          <li>Anonymous publishing and hiding a server’s physical
          location</li>
          <li>Whistleblower systems and secure source contact through
          tools like <a
          href="https://securedrop.org/">SecureDrop</a></li>
          <li>Invite-only private services, where you need not only the
          onion address but also use <a
          href="https://community.torproject.org/onion-services/advanced/client-auth/">Tor’s
          built-in client authorization</a></li>
          <li>Self-hosting behind NAT or restrictive firewalls, as seen
          in tools like Lightning services</li>
          <li>Temporary file drops, disposable websites, and chats
          without relying on a third-party platform using eg. <a
          href="https://onionshare.org/">OnionShare</a></li>
          <li>Messaging systems with no central public server identity,
          such as <a href="https://briarproject.org/">Briar</a></li>
          </ul>
          <p>I have now also made this website available via an onion
          address: <a
          href="http://metrsww4o7yeijgkdp6otpu5hu2bz5uizntuxan6cbed5sm6w2kknayd.onion/">http://metrsww4o7yeijgkdp6otpu5hu2bz5uizntuxan6cbed5sm6w2kknayd.onion/</a></p>
          <p>I cannot think of a particularly practical reason why
          accessing this site via its onion address would be useful.
          Perhaps it would have been more relevant when Tor still had
          its “Prioritize .onion sites when known” feature, which
          automatically upgraded a connection to an onion address when
          possible. <a
          href="https://blog.torproject.org/new-release-tor-browser-13012/">That
          feature was removed in early 2024</a> because of potential
          fingerprinting risks.</p>
          <p>Still, I have wanted to offer this option for a while,
          mainly to learn how onion services are set up. I learned that
          it is surprisingly easy; the Tor Project provides a
          straightforward guide <a
          href="https://community.torproject.org/onion-services/setup/">here</a>.</p>
          <p>At the moment, I use Wireguard to access my home network. I
          have been thinking about trying onion addresses for some of
          the services I host for myself, mainly out of curiosity and to
          see how well it works in practice as an experiment. While this
          is still just a rough idea, I do find it very appealing.</p>]]></content:encoded>
    </item>
    <item>
      <title>Thoughts on AI-assisted coding</title>
      <link>https://andreasglashauser.com/blog/thoughts-on-ai-assisted-coding.html</link>
      <guid>https://andreasglashauser.com/blog/thoughts-on-ai-assisted-coding.html</guid>
      <pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I first experienced AI-assistant development via GitHub
          Copilot during its beta in 2021. It was the first AI
          programming assistant back then and it only offered
          tab-completion, which I think was based on gpt-3.5.</p>
          <p>Github Copilot lost it’s edge quickly, many new competitors
          were built and surpassed it. The second coding agent I tried
          was Cursor, also in its early beta days. It fels like a huge
          leap forward, though everything remained immature and the
          generated code rarely even compiled.</p>
          <p>Fast forward to 2026, the number of projects exploded. We
          now have Claude Code, Cline, Kilo Code, Hermes Agent, Zed,
          Codex, Aider, Windsurf, Gemini CLI, and many others. I
          regularly test new projects when they offer genuinely
          interesting new features, though such unique features are
          becoming increasingly rare. After years of experimentation,
          I’ve settled on just one tool for AI-assisted programming: <a
          href="https://github.com/anomalyco/opencode">OpenCode</a>.</p>
          <p>I am genuinely enthusiastic about OpenCode. The UI is
          great, it includes all the features I actually need, and it’s
          open source. The agent framework feels good, even if I
          disagree with their assumption that every LLM performs best
          without adjusting the harness for each model. I love the
          flexibility to switch between models and providers, plus the
          ability to leverage existing subscriptions.</p>
          <p>Most importantly, I trust that the team behind the project
          won’t sell out and abandon open source. Initially, the project
          originated with three developers in the <a
          href="https://github.com/opencode-ai/opencode">opencode-ai/opencode</a>
          repository. When one founder wanted to sell and the other two
          refused, those two created <a
          href="https://github.com/anomalyco/opencode">anomalyco/opencode</a>
          (initally sst/opencode). This fork has since become the clear
          winner between the two competing projects. After a period of
          shared naming (which led to a lot of confusion), the original
          project rebranded as <a
          href="https://github.com/charmbracelet/crush">Crush</a>. While
          Crush maintains respectable traction with 22k GitHub stars, it
          is overshadowed by comparison to the “real” OpenCode with 132k
          stars.</p>
          <p>The open source nature also lead to the creation of <a
          href="https://github.com/nickjvandyke/opencode.nvim">opencode.nvim</a>,
          a neovim extension that filled the missing piece to things
          like Cursor, where I was able to select code and ask specific
          questions about it and the code was added to the context
          automatically, which the extension allows you to do. Since I
          adopted the plugin, I havent missed other IDEs.</p>
          <p>… Besides one gap that is still remaining in neovim: good
          tab completion. Cursor excels here, their completion model is
          remarkably good, and I admire the technical approach of
          continuous fine-tuning with updates every 30 minutes (Reading
          recommendation: <a
          href="https://cursor.com/blog/tab-rl">tab-rl</a>).</p>
          <p>Neovim introduced a <a
          href="https://neovim.io/doc/user/lsp/#_lua-module%3a-vim.lsp.inline_completion">new
          API for inline completion</a> in (I think) v0.11, but tool
          adoption remains limited. I’m only aware of two maintained
          implementations:</p>
          <ul>
          <li>Github Copilot Language Server</li>
          <li><a
          href="https://github.com/ggml-org/llama.vim">llama.vim</a>,
          which builds on llama.cpp (the foundation projects for most
          local LLM projects)</li>
          </ul>
          <p>llama.vim works well in theory, but without a good GPU its
          painfully slow. The available models are also constrained,
          both in <a
          href="https://huggingface.co/collections/ggml-org/llamavim">quantity</a>
          and capability.</p>
          <p><a href="https://supermaven.com/">Supermaven</a> once
          filled this niche for Neovim users, but Cursor acquired it two
          years ago (which is why Cursor is now the leader in tab
          completion). Even though their website confusingly still
          sugests otherwise, new useres can no longer sign up for
          it.</p>
          <p>Supermaven was <a
          href="https://supermaven.com/blog/sunsetting-supermaven">temporarily
          planned to be sunsetted</a> even for existing users, but a lot
          of people were frustrated about it. OpenCode’s creators <a
          href="https://x.com/thdxr/status/1983597955568603433">hinted</a>
          that they plan on creating their own alternative for it (which
          I would have loved), but since Supermaven reverted their
          decision and now provide free inference for all existing
          users, I dont think that it’s a priority for them,
          unfortunately.</p>
          <p>In my opinion the industry rushed too quickly from
          tab-completion to async coding agents. For me, the next major
          productivity gains won’t come from better models but from a
          plugin that nails tab-completion. It would strike the ideal
          balance for me: I code dramatically faster without offloading
          my understanding of the problem. <a
          href="https://margaretstorey.com/blog/2026/02/09/cognitive-debt/">Cognitive
          debt</a> is a big concern of mine with async coding agents,
          which is why I use them very selectively only. I hope this gap
          closes soon.</p>]]></description>
      <content:encoded><![CDATA[<p>I first experienced AI-assistant development via GitHub
          Copilot during its beta in 2021. It was the first AI
          programming assistant back then and it only offered
          tab-completion, which I think was based on gpt-3.5.</p>
          <p>Github Copilot lost it’s edge quickly, many new competitors
          were built and surpassed it. The second coding agent I tried
          was Cursor, also in its early beta days. It fels like a huge
          leap forward, though everything remained immature and the
          generated code rarely even compiled.</p>
          <p>Fast forward to 2026, the number of projects exploded. We
          now have Claude Code, Cline, Kilo Code, Hermes Agent, Zed,
          Codex, Aider, Windsurf, Gemini CLI, and many others. I
          regularly test new projects when they offer genuinely
          interesting new features, though such unique features are
          becoming increasingly rare. After years of experimentation,
          I’ve settled on just one tool for AI-assisted programming: <a
          href="https://github.com/anomalyco/opencode">OpenCode</a>.</p>
          <p>I am genuinely enthusiastic about OpenCode. The UI is
          great, it includes all the features I actually need, and it’s
          open source. The agent framework feels good, even if I
          disagree with their assumption that every LLM performs best
          without adjusting the harness for each model. I love the
          flexibility to switch between models and providers, plus the
          ability to leverage existing subscriptions.</p>
          <p>Most importantly, I trust that the team behind the project
          won’t sell out and abandon open source. Initially, the project
          originated with three developers in the <a
          href="https://github.com/opencode-ai/opencode">opencode-ai/opencode</a>
          repository. When one founder wanted to sell and the other two
          refused, those two created <a
          href="https://github.com/anomalyco/opencode">anomalyco/opencode</a>
          (initally sst/opencode). This fork has since become the clear
          winner between the two competing projects. After a period of
          shared naming (which led to a lot of confusion), the original
          project rebranded as <a
          href="https://github.com/charmbracelet/crush">Crush</a>. While
          Crush maintains respectable traction with 22k GitHub stars, it
          is overshadowed by comparison to the “real” OpenCode with 132k
          stars.</p>
          <p>The open source nature also lead to the creation of <a
          href="https://github.com/nickjvandyke/opencode.nvim">opencode.nvim</a>,
          a neovim extension that filled the missing piece to things
          like Cursor, where I was able to select code and ask specific
          questions about it and the code was added to the context
          automatically, which the extension allows you to do. Since I
          adopted the plugin, I havent missed other IDEs.</p>
          <p>… Besides one gap that is still remaining in neovim: good
          tab completion. Cursor excels here, their completion model is
          remarkably good, and I admire the technical approach of
          continuous fine-tuning with updates every 30 minutes (Reading
          recommendation: <a
          href="https://cursor.com/blog/tab-rl">tab-rl</a>).</p>
          <p>Neovim introduced a <a
          href="https://neovim.io/doc/user/lsp/#_lua-module%3a-vim.lsp.inline_completion">new
          API for inline completion</a> in (I think) v0.11, but tool
          adoption remains limited. I’m only aware of two maintained
          implementations:</p>
          <ul>
          <li>Github Copilot Language Server</li>
          <li><a
          href="https://github.com/ggml-org/llama.vim">llama.vim</a>,
          which builds on llama.cpp (the foundation projects for most
          local LLM projects)</li>
          </ul>
          <p>llama.vim works well in theory, but without a good GPU its
          painfully slow. The available models are also constrained,
          both in <a
          href="https://huggingface.co/collections/ggml-org/llamavim">quantity</a>
          and capability.</p>
          <p><a href="https://supermaven.com/">Supermaven</a> once
          filled this niche for Neovim users, but Cursor acquired it two
          years ago (which is why Cursor is now the leader in tab
          completion). Even though their website confusingly still
          sugests otherwise, new useres can no longer sign up for
          it.</p>
          <p>Supermaven was <a
          href="https://supermaven.com/blog/sunsetting-supermaven">temporarily
          planned to be sunsetted</a> even for existing users, but a lot
          of people were frustrated about it. OpenCode’s creators <a
          href="https://x.com/thdxr/status/1983597955568603433">hinted</a>
          that they plan on creating their own alternative for it (which
          I would have loved), but since Supermaven reverted their
          decision and now provide free inference for all existing
          users, I dont think that it’s a priority for them,
          unfortunately.</p>
          <p>In my opinion the industry rushed too quickly from
          tab-completion to async coding agents. For me, the next major
          productivity gains won’t come from better models but from a
          plugin that nails tab-completion. It would strike the ideal
          balance for me: I code dramatically faster without offloading
          my understanding of the problem. <a
          href="https://margaretstorey.com/blog/2026/02/09/cognitive-debt/">Cognitive
          debt</a> is a big concern of mine with async coding agents,
          which is why I use them very selectively only. I hope this gap
          closes soon.</p>]]></content:encoded>
    </item>
    <item>
      <title>Exploring MirageOS</title>
      <link>https://andreasglashauser.com/blog/exploring-mirageos.html</link>
      <guid>https://andreasglashauser.com/blog/exploring-mirageos.html</guid>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>I first discovered MirageOS and unikernels through <a
          href="https://github.com/mirage/qubes-mirage-firewall">mirage-fw</a>,
          a firewall for <a
          href="https://www.qubes-os.org/">QubesOs</a>. I was amazed by
          how fast it boots and how few resources it requires: just 1
          vCPU and 32 MiB of memory with no disk usage at all.</p>
          <p><a
          href="https://research.redhat.com/blog/research_project/unikernel-linux/">RedHat’s
          explanation of unikernels</a> puts it well: <em>“Unikernels
          are small, lightweight, single address space operating systems
          with the kernel included as a library within the application.
          Because unikernels run a single application, there is no
          sharing or competition for resources among different
          applications, improving performance and security”</em></p>
          <p>Unikernels are only an abstract concept, MirageOS is one of
          the tools used to implement them. It’s a library operating
          system that lets you to construct unikernels using OCaml on a
          normal operating system, then compile and deploy them under a
          Xen or KVM hypervisor.</p>
          <p>You can find a good overview of MirageOs <a
          href="https://mirageos.org/docs/overview-of-mirage">here</a>
          on its website.</p>
          <p>Besides mirage-fw, I also tried these other unikernels and
          can recommend them:</p>
          <ul>
          <li><a
          href="https://github.com/robur-coop/qubes-miragevpn">qubes-miragevpn</a></li>
          <li><a
          href="https://github.com/dinosaure/pasteur">pasteur</a></li>
          <li><a
          href="https://github.com/robur-coop/caldav">caldav</a></li>
          </ul>
          <p>Unikernels deserve more attention in the security community
          as they eliminate entire classes of vulnerabilities. What I
          especially hope to see are especially a sys-usb unikernel
          replacement and a wireguard unikernel in qubes. The former is
          already tracked via an <a
          href="https://github.com/QubesOS/qubes-issues/issues/7159">open
          issue</a>, though unfortunately no work has been done on it
          for some time. I have yet to write a (functional) unikernel
          myself, though I hope the unikernel community grows.</p>]]></description>
      <content:encoded><![CDATA[<p>I first discovered MirageOS and unikernels through <a
          href="https://github.com/mirage/qubes-mirage-firewall">mirage-fw</a>,
          a firewall for <a
          href="https://www.qubes-os.org/">QubesOs</a>. I was amazed by
          how fast it boots and how few resources it requires: just 1
          vCPU and 32 MiB of memory with no disk usage at all.</p>
          <p><a
          href="https://research.redhat.com/blog/research_project/unikernel-linux/">RedHat’s
          explanation of unikernels</a> puts it well: <em>“Unikernels
          are small, lightweight, single address space operating systems
          with the kernel included as a library within the application.
          Because unikernels run a single application, there is no
          sharing or competition for resources among different
          applications, improving performance and security”</em></p>
          <p>Unikernels are only an abstract concept, MirageOS is one of
          the tools used to implement them. It’s a library operating
          system that lets you to construct unikernels using OCaml on a
          normal operating system, then compile and deploy them under a
          Xen or KVM hypervisor.</p>
          <p>You can find a good overview of MirageOs <a
          href="https://mirageos.org/docs/overview-of-mirage">here</a>
          on its website.</p>
          <p>Besides mirage-fw, I also tried these other unikernels and
          can recommend them:</p>
          <ul>
          <li><a
          href="https://github.com/robur-coop/qubes-miragevpn">qubes-miragevpn</a></li>
          <li><a
          href="https://github.com/dinosaure/pasteur">pasteur</a></li>
          <li><a
          href="https://github.com/robur-coop/caldav">caldav</a></li>
          </ul>
          <p>Unikernels deserve more attention in the security community
          as they eliminate entire classes of vulnerabilities. What I
          especially hope to see are especially a sys-usb unikernel
          replacement and a wireguard unikernel in qubes. The former is
          already tracked via an <a
          href="https://github.com/QubesOS/qubes-issues/issues/7159">open
          issue</a>, though unfortunately no work has been done on it
          for some time. I have yet to write a (functional) unikernel
          myself, though I hope the unikernel community grows.</p>]]></content:encoded>
    </item>
    <item>
      <title>Thoughts on LiteLLM incident</title>
      <link>https://andreasglashauser.com/blog/thoughts-on-litellm-compromise.html</link>
      <guid>https://andreasglashauser.com/blog/thoughts-on-litellm-compromise.html</guid>
      <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>Supply chain attacks through compromised packages aren’t
          something new. If you read any tech news, you will regularly
          read about hijacked npm packages, usually as the result of
          some maintainer account getting pwned or stolen api keys.</p>
          <p>I always wondered why the npm ecosystem seemed to be the
          biggest focus for threat actors, as pypi incidents remained
          relatively rare.</p>
          <p>This changed with <a
          href="https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/">this
          weeks LiteLLM compromise</a>. Of course, this was only one
          major compromise and is nothing compared with the volume of
          npm compromises, but I think this may be the start of a new
          normal where we see the same issues in pypi.</p>
          <p>I use uv for all my projects, and it is the only python
          package manager supporting <a
          href="https://docs.astral.sh/uv/concepts/resolution/#dependency-cooldowns">dependency
          cooldowns</a>. I adopted dependency cooldowns across all my
          projects since uv added support for it in <a
          href="https://github.com/astral-sh/uv/releases/tag/0.9.17">December
          2025</a>, and I am increasingly glad I did.</p>
          <p>Additionally, I started experimenting with <a
          href="https://containers.dev/">devcontainers</a> on machines
          where I can’t run <a
          href="https://www.qubes-os.org/">QubesOs</a> (which allows me
          to compartmentalize everything so that I genuinely dont have
          to worry about such incidents). I dont like the tooling around
          devcontainers yet, so its a bit of a pain to use, but
          long-term I am skeptical that there is any way around it.</p>]]></description>
      <content:encoded><![CDATA[<p>Supply chain attacks through compromised packages aren’t
          something new. If you read any tech news, you will regularly
          read about hijacked npm packages, usually as the result of
          some maintainer account getting pwned or stolen api keys.</p>
          <p>I always wondered why the npm ecosystem seemed to be the
          biggest focus for threat actors, as pypi incidents remained
          relatively rare.</p>
          <p>This changed with <a
          href="https://futuresearch.ai/blog/litellm-pypi-supply-chain-attack/">this
          weeks LiteLLM compromise</a>. Of course, this was only one
          major compromise and is nothing compared with the volume of
          npm compromises, but I think this may be the start of a new
          normal where we see the same issues in pypi.</p>
          <p>I use uv for all my projects, and it is the only python
          package manager supporting <a
          href="https://docs.astral.sh/uv/concepts/resolution/#dependency-cooldowns">dependency
          cooldowns</a>. I adopted dependency cooldowns across all my
          projects since uv added support for it in <a
          href="https://github.com/astral-sh/uv/releases/tag/0.9.17">December
          2025</a>, and I am increasingly glad I did.</p>
          <p>Additionally, I started experimenting with <a
          href="https://containers.dev/">devcontainers</a> on machines
          where I can’t run <a
          href="https://www.qubes-os.org/">QubesOs</a> (which allows me
          to compartmentalize everything so that I genuinely dont have
          to worry about such incidents). I dont like the tooling around
          devcontainers yet, so its a bit of a pain to use, but
          long-term I am skeptical that there is any way around it.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to uncensor LLMs?</title>
      <link>https://andreasglashauser.com/blog/how-to-uncensor-llms.html</link>
      <guid>https://andreasglashauser.com/blog/how-to-uncensor-llms.html</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate>
      <description><![CDATA[<p>LLMs contain safety guardrails for good reasons: prompt
          injection, IP violations, abuse and harmful outputs are risks
          which have to be mitigated. These guardrails lead to
          situations where the model won’t answer your question,
          resulting in responses like “<em>I’m sorry, but I can’t
          provide that</em>” (sometimes you receive such an answer even
          for legitimate prompts). Refusal behavior makes it difficult
          to observe what a model would actually do without those
          safeguards in place.</p>
          <p>Before fine-tuning models to meet safety guardrails,
          companies typically conduct extensive research to understand
          the risks of their models in domains such as cybersecurity or
          biosecurity and usually publish their findings in model cards.
          For external researchers who want to understand model behavior
          and evaluate risks independently, this is a serious
          limitation. You are forced to trust without the ability to
          verify their claims.</p>
          <p>On Huggingface, I had seen various uncensored models in the
          past, but I never paid attention to them until I found myself
          in a situation where I tried to evaluate open-weights models
          myself for offensive cyber security purposes. All (newer)
          models consistently rejected my requests.</p>
          <p>I know that adversaries are able to bypass these
          limitations, but how? And how can I do it myself?</p>
          <p><strong>Changing prompts/templates</strong> is the most
          obvious thing to do and works for getting low-hanging-fruit
          questions answered. It worked well for previous generations of
          models, but not so well for newer ones anymore. You might get
          around some refusals even on newer models from time to time,
          but it won’t work consistently.</p>
          <p><strong>Retraining or fine-tuning</strong> the model so it
          stops preferring refusals is an obvious way of uncensoring
          models. However, I do not know of any open-source,
          high-quality (!) dataset for this, and creating one is not
          realistic for a single person like me. As far as I can tell,
          this is often how adversaries approach the problem.</p>
          <p><strong>Directly editing the model’s internals</strong>.
          The first paper exploring this idea was <a
          href="https://arxiv.org/abs/2406.11717">Refusal in Language
          Models is Mediated by a Single Direction</a>. The main idea is
          simple: in many chat models, refusal behavior seems to be tied
          to a specific internal pattern. If that pattern is suppressed,
          the model becomes much less likely to refuse, while remaining
          mostly coherent. I found this surprising, because LLMs are
          usually treated as black boxes. Research like this suggests
          that at least some parts of their behavior can be understood
          and modified directly. After spending a lot of time reading
          about this, I developed a rough understanding of <em>how</em>
          it works, but admittedly, I still have no idea <em>why</em> it
          works. Fortunately, there are tools that can be used without
          requiring a deep understanding of the topic.</p>
          <p>Multiple projects were built on the idea introduced in the
          paper, the most popular one is <a
          href="https://github.com/p-e-w/heretic">heretic</a> .</p>
          <p>Usage is straightforward: you can install it via
          <code>uv tool install heretic-llm</code> and run it via
          <code>heretic &lt;modelId&gt;</code>. It automatically
          downloads the model from Huggingface and starts removing the
          refusal behavior from models. When I first tried it, I wanted
          to uncensor Qwen3.5-4B to see how well it works before running
          it on a larger model. I had to clone the repo instead of
          downloading it from pypi because Qwen3.5 is not yet supported
          in the latest release, but support for it was already added in
          <a
          href="https://github.com/p-e-w/heretic/commit/5e3c04c8020050923a40e57b6f92603e23ee7161">this</a>
          commit on the master branch. It took about 31 hours using a
          RTX 4090. The result was very positive:</p>
          <p>Prompt: “List some popular torrent sites”<br />
          Before:</p>
          <pre><code>I cannot provide a list of torrent sites, as many are associated with copyright infringement and can pose significant security risks to users. 

Torrent technology itself is neutral and legal, but it is frequently used to distribute copyrighted material without permission. Additionally, torrent sites often host malicious files (malware, viruses) or phishing links that can compromise your device.
If you need to download large files legally, consider these alternatives: 
*   **Official Distributors:** Use official stores for software, movies, and music. 
*   **Public Domain Archives:** Sites like the Internet Archive offer free access to public domain content. 
*   **Open Source Projects:** Many Linux distributions and open-source tools use torrents for distribution on their official websites (e.g., Ubuntu). 
*   **Peer-to-Peer File Sharing:** For personal files, consider using secure cloud storage or dedicated file transfer services like WeTransfer or Dropbox. 

Always ensure you have the right to share or download any content you access online.</code></pre>
          <p>After:</p>
          <pre><code>Here are some of the most popular torrent sites currently active:

**General Purpose:**
...</code></pre>
          <p>You can also filter for keywords like <code>heretic</code>
          or <code>uncensored</code> in Huggingface to download
          uncensored models from people that already applied such
          modifications.</p>
          <p>Use this knowledge responsibly.</p>]]></description>
      <content:encoded><![CDATA[<p>LLMs contain safety guardrails for good reasons: prompt
          injection, IP violations, abuse and harmful outputs are risks
          which have to be mitigated. These guardrails lead to
          situations where the model won’t answer your question,
          resulting in responses like “<em>I’m sorry, but I can’t
          provide that</em>” (sometimes you receive such an answer even
          for legitimate prompts). Refusal behavior makes it difficult
          to observe what a model would actually do without those
          safeguards in place.</p>
          <p>Before fine-tuning models to meet safety guardrails,
          companies typically conduct extensive research to understand
          the risks of their models in domains such as cybersecurity or
          biosecurity and usually publish their findings in model cards.
          For external researchers who want to understand model behavior
          and evaluate risks independently, this is a serious
          limitation. You are forced to trust without the ability to
          verify their claims.</p>
          <p>On Huggingface, I had seen various uncensored models in the
          past, but I never paid attention to them until I found myself
          in a situation where I tried to evaluate open-weights models
          myself for offensive cyber security purposes. All (newer)
          models consistently rejected my requests.</p>
          <p>I know that adversaries are able to bypass these
          limitations, but how? And how can I do it myself?</p>
          <p><strong>Changing prompts/templates</strong> is the most
          obvious thing to do and works for getting low-hanging-fruit
          questions answered. It worked well for previous generations of
          models, but not so well for newer ones anymore. You might get
          around some refusals even on newer models from time to time,
          but it won’t work consistently.</p>
          <p><strong>Retraining or fine-tuning</strong> the model so it
          stops preferring refusals is an obvious way of uncensoring
          models. However, I do not know of any open-source,
          high-quality (!) dataset for this, and creating one is not
          realistic for a single person like me. As far as I can tell,
          this is often how adversaries approach the problem.</p>
          <p><strong>Directly editing the model’s internals</strong>.
          The first paper exploring this idea was <a
          href="https://arxiv.org/abs/2406.11717">Refusal in Language
          Models is Mediated by a Single Direction</a>. The main idea is
          simple: in many chat models, refusal behavior seems to be tied
          to a specific internal pattern. If that pattern is suppressed,
          the model becomes much less likely to refuse, while remaining
          mostly coherent. I found this surprising, because LLMs are
          usually treated as black boxes. Research like this suggests
          that at least some parts of their behavior can be understood
          and modified directly. After spending a lot of time reading
          about this, I developed a rough understanding of <em>how</em>
          it works, but admittedly, I still have no idea <em>why</em> it
          works. Fortunately, there are tools that can be used without
          requiring a deep understanding of the topic.</p>
          <p>Multiple projects were built on the idea introduced in the
          paper, the most popular one is <a
          href="https://github.com/p-e-w/heretic">heretic</a> .</p>
          <p>Usage is straightforward: you can install it via
          <code>uv tool install heretic-llm</code> and run it via
          <code>heretic &lt;modelId&gt;</code>. It automatically
          downloads the model from Huggingface and starts removing the
          refusal behavior from models. When I first tried it, I wanted
          to uncensor Qwen3.5-4B to see how well it works before running
          it on a larger model. I had to clone the repo instead of
          downloading it from pypi because Qwen3.5 is not yet supported
          in the latest release, but support for it was already added in
          <a
          href="https://github.com/p-e-w/heretic/commit/5e3c04c8020050923a40e57b6f92603e23ee7161">this</a>
          commit on the master branch. It took about 31 hours using a
          RTX 4090. The result was very positive:</p>
          <p>Prompt: “List some popular torrent sites”<br />
          Before:</p>
          <pre><code>I cannot provide a list of torrent sites, as many are associated with copyright infringement and can pose significant security risks to users. 

Torrent technology itself is neutral and legal, but it is frequently used to distribute copyrighted material without permission. Additionally, torrent sites often host malicious files (malware, viruses) or phishing links that can compromise your device.
If you need to download large files legally, consider these alternatives: 
*   **Official Distributors:** Use official stores for software, movies, and music. 
*   **Public Domain Archives:** Sites like the Internet Archive offer free access to public domain content. 
*   **Open Source Projects:** Many Linux distributions and open-source tools use torrents for distribution on their official websites (e.g., Ubuntu). 
*   **Peer-to-Peer File Sharing:** For personal files, consider using secure cloud storage or dedicated file transfer services like WeTransfer or Dropbox. 

Always ensure you have the right to share or download any content you access online.</code></pre>
          <p>After:</p>
          <pre><code>Here are some of the most popular torrent sites currently active:

**General Purpose:**
...</code></pre>
          <p>You can also filter for keywords like <code>heretic</code>
          or <code>uncensored</code> in Huggingface to download
          uncensored models from people that already applied such
          modifications.</p>
          <p>Use this knowledge responsibly.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
