<?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: Walid Hassan Tahrim</title>
    <description>The latest articles on DEV Community by Walid Hassan Tahrim (@tahrimwalid).</description>
    <link>https://dev.to/tahrimwalid</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4194955%2F33e799bf-9abd-455c-91fb-b05703b18429.jpg</url>
      <title>DEV Community: Walid Hassan Tahrim</title>
      <link>https://dev.to/tahrimwalid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tahrimwalid"/>
    <language>en</language>
    <item>
      <title>PHP Is "Dead"...again💀</title>
      <dc:creator>Walid Hassan Tahrim</dc:creator>
      <pubDate>Sat, 31 Oct 2026 10:32:48 +0000</pubDate>
      <link>https://dev.to/tahrimwalid/php-is-deadagain-2pga</link>
      <guid>https://dev.to/tahrimwalid/php-is-deadagain-2pga</guid>
      <description>&lt;p&gt;&lt;em&gt;A Hackers Hostel story: Submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Quick question. How many WordPress sites do you know that are technically alive?&lt;/p&gt;

&lt;p&gt;Not &lt;em&gt;alive&lt;/em&gt; alive. Nobody's posting. Nobody's updating. But the domain renews every year, the server's still running PHP from a different era, and somewhere in there is a blog post that people still land on from Google. The site isn't dead. It's a ghost. It just hasn't been told yet.&lt;/p&gt;

&lt;p&gt;Then on October 21, PHP shipped emergency patches for two critical remote code execution bugs (PHP2Shell), and a few days later CISA confirmed attackers were already using them. Guess which sites didn't get patched. Yeah. The ghosts.&lt;/p&gt;

&lt;p&gt;We know a lot of those. Some of them are ours. So this week we built something for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;WP2Astro&lt;/strong&gt; is a WordPress plugin that turns the site it's installed on into an &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; site, pushes it to GitHub, and keeps it in sync whenever you publish.&lt;/p&gt;

&lt;p&gt;The flow is: install the plugin, click &lt;strong&gt;Convert to Astro&lt;/strong&gt;, get a repo. No Node.js, no terminal, no copy-pasting application passwords. If you've ever installed a plugin, you're already qualified.&lt;/p&gt;

&lt;p&gt;What comes out the other side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Links stay.&lt;/strong&gt; Every post, page, category, tag, custom post type and archive keeps its URL. The old weird ones too, like &lt;code&gt;?p=123&lt;/code&gt;, &lt;code&gt;?page_id=7&lt;/code&gt;, &lt;code&gt;/feed/&lt;/code&gt;, and slugs you changed years ago. They all redirect where they should. A link someone shared in 2014 still works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The look stays.&lt;/strong&gt; Theme CSS, fonts, images and scripts come along, and an AI model rebuilds the header, menu and footer as an Astro layout from your homepage. It still looks like your site, because it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The junk gets buried.&lt;/strong&gt; Shortcodes from plugins you deleted ages ago (&lt;code&gt;[vc_row]&lt;/code&gt;, &lt;code&gt;[button]&lt;/code&gt;, the usual suspects) get cleaned up instead of showing up as raw text forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You keep WordPress.&lt;/strong&gt; You write where you always wrote. Visitors just get static pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live Demo at &lt;a href="https://hackershostel.com/" rel="noopener noreferrer"&gt;hackershostel.com&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HackersHostel" rel="noopener noreferrer"&gt;
        HackersHostel
      &lt;/a&gt; / &lt;a href="https://github.com/HackersHostel/WP2Astro" rel="noopener noreferrer"&gt;
        WP2Astro
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Turn a WordPress site into a fast Astro site — same URLs, same look — push it to GitHub and keep it in sync. A WordPress plugin.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HackersHostel/WP2Astro/.wordpress-org/banner-1544x500.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHackersHostel%2FWP2Astro%2FHEAD%2F.wordpress-org%2Fbanner-1544x500.png" alt="WP2Astro — WordPress in, fast Astro site out. Same URLs, same look, synced to GitHub."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://github.com/HackersHostel/wp2astro/releases/latest" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/913db3adff2dd362e972014783145468f3a03efc0044b40c305932e094321de6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f4861636b657273486f7374656c2f777032617374726f3f6c6162656c3d72656c65617365" alt="Latest release"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/HackersHostel/wp2astro/actions/workflows/tests.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/HackersHostel/wp2astro/actions/workflows/tests.yml/badge.svg" alt="Tests"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9d02b9fa4c99e372caa80fbb2fe13f29092ccd8c30c421134754563de135573c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576f726450726573732d362e352532422d323137353962"&gt;&lt;img src="https://camo.githubusercontent.com/9d02b9fa4c99e372caa80fbb2fe13f29092ccd8c30c421134754563de135573c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f576f726450726573732d362e352532422d323137353962" alt="WordPress 6.5+"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/a452f44e1b9613a134ddc286b26eff386cb59c582a0f42aa21687af1ba5df112/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e302532422d373737626234"&gt;&lt;img src="https://camo.githubusercontent.com/a452f44e1b9613a134ddc286b26eff386cb59c582a0f42aa21687af1ba5df112/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e302532422d373737626234" alt="PHP 8.0+"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/HackersHostel/WP2Astro/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cd781d0568c328bdea35f284d33e2b1e96675ef60910926c1dd75d5a4d46de66/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d47504c2d2d322e302d2d6f722d2d6c617465722d626c7565" alt="License: GPL-2.0-or-later"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;WP2Astro&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Turn a WordPress site into a fast Astro site — same URLs, same look — push it to GitHub, and keep it in sync.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WP2Astro is a WordPress plugin by &lt;a href="https://hackershostel.com" rel="nofollow noopener noreferrer"&gt;Hackers Hostel&lt;/a&gt;. It converts the site it runs on into an
&lt;a href="https://astro.build" rel="nofollow noopener noreferrer"&gt;Astro&lt;/a&gt; project, pushes it to a GitHub repository and keeps that repository up to date as you
publish. You keep writing in WordPress; your visitors get a static site. Free and open source (GPL-2.0-or-later).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Highlights&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Installs like any plugin.&lt;/strong&gt; No Node.js, terminal or application passwords on your side: upload the zip, open
&lt;strong&gt;WP2Astro&lt;/strong&gt;, click &lt;strong&gt;Convert to Astro&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same URLs.&lt;/strong&gt; Every post, page, custom post type entry, category and tag keeps its permalink, and so do paginated
archives and year, month and author archives. Old links still work: changed slugs, &lt;code&gt;?p=123&lt;/code&gt;, &lt;code&gt;?page_id=7&lt;/code&gt;
&lt;code&gt;?s=search&lt;/code&gt; and &lt;code&gt;/feed/&lt;/code&gt; redirect to the right place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same look.&lt;/strong&gt; The theme's…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HackersHostel/WP2Astro" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How We Built It
&lt;/h2&gt;

&lt;p&gt;The AI in this thing runs on &lt;strong&gt;open-weight models, on your own machine if you want.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's a &lt;strong&gt;Local model&lt;/strong&gt; option that works with anything that speaks the OpenAI API: Ollama, LM Studio, llama.cpp, vLLM. Pull Gemma, point WP2Astro at &lt;code&gt;http://localhost:11434/v1&lt;/code&gt;, hit &lt;strong&gt;Test&lt;/strong&gt;, done. Your posts never leave your network. If you don't want to host a model, OpenRouter is supported, and even there the default is the open &lt;code&gt;google/gemma-4-31b-it&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We kept the AI's job small on purpose. It does exactly two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Writes the Astro layout from your homepage's header, menu and footer (scripts and styles stripped out first).&lt;/li&gt;
&lt;li&gt;Fixes posts that have dead shortcodes in them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it. And here's the part we actually care about: &lt;strong&gt;we don't trust it.&lt;/strong&gt; Every answer goes through strict checks. If it fails, WP2Astro uses a plain default layout, or leaves the shortcode alone and writes it into &lt;code&gt;CONVERSION_REPORT.md&lt;/code&gt; so you can deal with it. A small model can have a bad day and your site is still fine. That's why "use a small open model" is a real option here and not a downgrade.&lt;/p&gt;

&lt;p&gt;It also caches answers, so syncing doesn't ping the model unless your theme, your menu or one of those shortcode posts changed.&lt;/p&gt;

&lt;p&gt;The rest is just PHP doing PHP things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content becomes Markdown with frontmatter. Text that only looks like Markdown gets escaped, because we learned the hard way that &lt;code&gt;__init__&lt;/code&gt; turns bold if you let it.&lt;/li&gt;
&lt;li&gt;Work is split into small steps run by the dashboard, WP-Cron or WP-CLI, so it doesn't time out on cheap hosting.&lt;/li&gt;
&lt;li&gt;GitHub login uses the device flow. Syncs only commit what changed, and if you edit a file in the repo yourself, we never overwrite it.&lt;/li&gt;
&lt;li&gt;SEO data from Yoast, Rank Math or AIOSEO comes over, plus RSS, a sitemap, robots.txt and Pagefind search.&lt;/li&gt;
&lt;li&gt;Media can live in the repo, in Git LFS, on WordPress, or on S3, R2 or Bunny.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each repo also comes with an agent kit (&lt;code&gt;AGENTS.md&lt;/code&gt;, &lt;code&gt;CLAUDE.md&lt;/code&gt;, skills) so a coding agent can pick up whatever the conversion flagged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters
&lt;/h2&gt;

&lt;p&gt;WordPress got this big because anyone could take it and do whatever they wanted with it. It'd be pretty backwards to build a tool for WordPress people that only works if they rent a closed model forever.&lt;/p&gt;

&lt;p&gt;With open weights the whole stack is something you can actually own. GPL plugin, Astro, Git, a model on your own hardware. Free to run, private by default, and none of it stops working if we stop paying attention to it. For a tool whose whole job is making sure old stuff doesn't disappear, that kind of matters.&lt;/p&gt;

&lt;p&gt;Also, real talk: this design only works because open models got good enough at being small. Checks plus fallbacks means a modest Gemma does the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spirit of the Project
&lt;/h2&gt;

&lt;p&gt;So much of what people wrote online sits on WordPress installs that nobody wants to babysit anymore. Those sites don't get shut down because they stopped mattering. They get shut down because updating PHP is boring.&lt;/p&gt;

&lt;p&gt;We'd rather they stick around. Same words, same links, same look, way less maintenance. 🕯️&lt;/p&gt;

&lt;p&gt;And to be clear, this isn't a "PHP bad" post. WP2Astro is PHP too, and PHP has been "dead" for about 30 years now. It's just that after PHP2Shell, PHP belongs backstage. Your WordPress still runs it, so you still patch it, and you can keep wp-admin off the public internet entirely. What your visitors hit is plain HTML. No PHP runs there for anyone to pop.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/HackersHostel/WP2Astro" rel="noopener noreferrer"&gt;github.com/HackersHostel/WP2Astro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— The Hackers Hostel crew: &lt;a class="mentioned-user" href="https://dev.to/mahmudurrahmanlabib"&gt;@mahmudurrahmanlabib&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/tahrimwalid"&gt;@tahrimwalid&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/mahedi"&gt;@mahedi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>wordpress</category>
      <category>astro</category>
    </item>
    <item>
      <title>One Face, Many Agents: Meet AgentWebUI</title>
      <dc:creator>Walid Hassan Tahrim</dc:creator>
      <pubDate>Sun, 25 Oct 2026 02:52:38 +0000</pubDate>
      <link>https://dev.to/tahrimwalid/one-face-many-agents-meet-agentwebui-1a8l</link>
      <guid>https://dev.to/tahrimwalid/one-face-many-agents-meet-agentwebui-1a8l</guid>
      <description>&lt;p&gt;&lt;em&gt;A Hackers Hostel story: Submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It's 1 a.m. and I have three coding agents running on the little Linux box in the corner of my room. Codex is refactoring something in one tmux pane. Claude is still "thinking" in another, on "medium effort" mind you. Gemini CLI has been waiting for me to approve a file write for twenty minutes, in a terminal I forgot I opened.&lt;/p&gt;

&lt;p&gt;I'm in bed, laptop closed. To see what any of them are doing, I have to SSH back in and go pane-hunting.&lt;/p&gt;

&lt;p&gt;That's the part nobody tells you about CLI agents: they're brilliant, and they live in a terminal. Each one has its own slash commands, its own approval prompts, and its own idea of what a diff looks like (usually a wall of text scrolling past faster than you can read it). My sessions are scattered across panes, tabs, and, because I'm that kind of person, two machines and two accounts. My muscle memory has filed for divorce and is asking for the good keyboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we got here
&lt;/h2&gt;

&lt;p&gt;A few of us at Hackers Hostel share a group chat that is roughly 40% memes and redacted content, and 60% complaining about tooling. One week the complaint was always the same: every agent speaks its own dialect. New commands, new prompts, new way of showing you what it just did to your code, and no way to check on any of it without being glued to the terminal it started in.&lt;/p&gt;

&lt;p&gt;From the builder side it's worse. Every agent team ends up writing the same dashboard: a chat pane, a message list, a model dropdown, a little loading animation, a button to stop the thing before it rewrites your entire git history. Between us, we've built that exact dashboard more times than we'd like to admit. One of us built it in three different JavaScript frameworks. You know the drill: "Oh, this one's a tad bit faster than the other..." Bro, pick a lane.&lt;/p&gt;

&lt;p&gt;Then someone (name withheld, they know what they did) typed: "why does every agent get a new face? just give them all the same one."&lt;/p&gt;

&lt;p&gt;The chat went quiet for about four seconds. Then everyone started typing at once.&lt;/p&gt;

&lt;p&gt;What made that more than a group-chat topic was timing. Agents had finally started speaking a shared protocol (ACP, more on that below), which meant one interface could actually talk to all of them instead of needing a custom integration per agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The big one, and the small one
&lt;/h2&gt;

&lt;p&gt;That message turned into the first AgentWebUI: one web interface for driving CLI coding agents like Claude Code, Codex, Gemini CLI and OpenCode, plus anything else that speaks ACP. You pick the agent, the interface stays the same. Your brain gets to keep its shortcuts.&lt;/p&gt;

&lt;p&gt;Then it grew. It picked up features. It picked up more features. It got heavy in the way your backpack gets heavy when you keep tossing chargers in it and never take any out. No offense, but those people are psychopaths.&lt;/p&gt;

&lt;p&gt;So we gave the big one a new name, &lt;strong&gt;AgentWebUI Pro&lt;/strong&gt;, and let it keep the control-room job it had grown into. Then, for Hacktoberfest week 3, we set ourselves a constraint: rebuild AgentWebUI from scratch, this week, as the smallest thing that still does the job. One dependency. No build step. A codebase you can read in one sitting. It takes the idea and the lessons from Pro, and it's what carries the AgentWebUI name now.&lt;/p&gt;

&lt;p&gt;The whole design goal fits on a sticky note:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Install it. Open the browser. Talk to your agent. If that takes more steps than making toast, we messed up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Setup, for people who also hate reading setup instructions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/HackersHostel/AgentWebUI.git
&lt;span class="nb"&gt;cd &lt;/span&gt;AgentWebUI
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env   &lt;span class="c"&gt;# fill in your models and agents&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's the whole onboarding. No accounts, no setup wizard, no twelve-page wiki, no "first, install our other CLI to install this CLI." Everything lives in &lt;code&gt;.env&lt;/code&gt;. Running it on a homelab box or a VPS like I do? There's also an install script that sets it up as a systemd service with Caddy for HTTPS. Want to poke it before you clone anything? There's a live demo: &lt;a href="https://agentwebui.hackershostel.com/#/" rel="noopener noreferrer"&gt;agentwebui.hackershostel.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What you get (and what you don't)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Basically you get what you bargained for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One chat interface, no matter which agent is doing the work behind it.&lt;/li&gt;
&lt;li&gt;Every agent on your machine or server, reachable from a browser. No more SSHing in to find out which pane is waiting on you.&lt;/li&gt;
&lt;li&gt;Readable diffs and approval prompts in one consistent place, instead of a different style per agent. Like getting intel from five squads who all refuse to use the same map.&lt;/li&gt;
&lt;li&gt;Switch agents without relearning where anything is.&lt;/li&gt;
&lt;li&gt;A small codebase you can actually read in one sitting, which matters a lot if you plan to send us a PR (you do, keep reading).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You don't get:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The full control-room experience. That's what our big sibling, AgentWebUI Pro, is for.&lt;/li&gt;
&lt;li&gt;A dashboard with 14 tabs you'll open once. AgentWebUI is for when you just want to talk to your agents, not manage a fleet of them. Well, not yet at least. Fingers crossed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Under the hood (the part where I brag a little)
&lt;/h2&gt;

&lt;p&gt;Remember the three JavaScript frameworks? The web client uses none of them. It's Preact through htm with &lt;strong&gt;no build step&lt;/strong&gt;. No bundler config, no &lt;code&gt;node_modules&lt;/code&gt; folder with its own weather system. You change a file, you refresh, it's there.&lt;/p&gt;

&lt;p&gt;The server is about 3,000 lines of Python with exactly one dependency (&lt;code&gt;aiohttp&lt;/code&gt;), and it runs in around 40 MB of memory. A single browser tab usually eats more than that just to show you a loading skeleton.&lt;/p&gt;

&lt;p&gt;The thing that makes "one face for every agent" actually work is the &lt;a href="https://agentclientprotocol.com" rel="noopener noreferrer"&gt;Agent Client Protocol&lt;/a&gt;. Think of it as LSP, but for coding agents. Zed and Google started it because every new agent-plus-editor combo needed its own custom integration, which is the exact same headache we were complaining about, just with better funding. Anything that speaks ACP over stdio plugs straight in: Claude Code and Codex (through their ACP adapters), Gemini CLI, OpenCode, Hermes, Pi. You pick the agent, then its model and effort, then the folder it works in. It streams the thinking, the plan, the tool calls and the diffs, and it asks before it touches anything.&lt;/p&gt;

&lt;p&gt;If your eyes glazed over somewhere around "stdio," here's the squad-briefing version: the agents are your squad, ACP is the radio, and AgentWebUI is the one headset that talks to all of them. Nobody has to learn a new radio every mission, and nobody gets left on an open channel waiting for orders while you're in bed.&lt;/p&gt;

&lt;p&gt;On the model side, anything with an OpenAI-compatible API works: OpenAI, OpenRouter, Groq, or a local model through Ollama, LM Studio or vLLM. So your quick questions can go to a small model on your own laptop and never leave the building.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why open, though?
&lt;/h2&gt;

&lt;p&gt;Every agent vendor wants you living in &lt;em&gt;their&lt;/em&gt; tab. Totally fair from their side. From your side, it means your workflow breaks every time someone ships a better model somewhere else.&lt;/p&gt;

&lt;p&gt;Open protocol, open models, open code: switching becomes an edit to &lt;code&gt;.env&lt;/code&gt; and a restart, not a migration weekend. And since it's self-hosted, your code and your chats stay on your machine instead of taking a field trip to someone else's cloud. No telemetry phoning home, no mystery servers. As Captain Price would put it: "Bravo Six, going dark."&lt;/p&gt;

&lt;p&gt;RIP, Captain. (Yes, that's an MW4 spoiler. If you haven't finished the campaign, you've had two days. We're not sorry.)&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HackersHostel" rel="noopener noreferrer"&gt;
        HackersHostel
      &lt;/a&gt; / &lt;a href="https://github.com/HackersHostel/AgentWebUI" rel="noopener noreferrer"&gt;
        AgentWebUI
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The lightest web UI for OpenAI-compatible model APIs and ACP agents.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/HackersHostel/AgentWebUI/agentwebui_lite/static/logo.svg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHackersHostel%2FAgentWebUI%2FHEAD%2Fagentwebui_lite%2Fstatic%2Flogo.svg" width="56" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;AgentWebUI&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/HackersHostel/AgentWebUI/actions/workflows/tests.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/HackersHostel/AgentWebUI/actions/workflows/tests.yml/badge.svg" alt="Tests"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One small web page to chat with AI models and with command-line agents, on your own server. Open it and chat
there is no setup screen and no accounts. Everything is configured in &lt;code&gt;.env&lt;/code&gt;. The package and command are still
named &lt;code&gt;agentwebui-lite&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; any OpenAI-compatible API (OpenAI, OpenRouter, NVIDIA, Groq, Ollama, LM Studio, vLLM, …).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents:&lt;/strong&gt; anything that speaks the &lt;a href="https://agentclientprotocol.com" rel="nofollow noopener noreferrer"&gt;Agent Client Protocol&lt;/a&gt; over stdio: Claude
Code, Codex, Hermes, Pi, Gemini CLI, OpenCode, … Pick the agent, then &lt;strong&gt;its&lt;/strong&gt; model and effort, then the folder it
works in. It streams its thinking, plan, tool calls and diffs, and asks before it acts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The server is about 3,000 lines of Python with one dependency (&lt;code&gt;aiohttp&lt;/code&gt;) and uses about 40 MB of memory. The web
client is Preact through htm with no build step. Nothing loads from the internet unless you pick a font other than
Geist.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/HackersHostel/AgentWebUI" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Our very "punctual" release process
&lt;/h2&gt;

&lt;p&gt;Version 0.1.0 went up on PyPI at 00:23 GMT on October 20. Version 0.2.0 went up at 10:48 GMT. The same day.&lt;/p&gt;

&lt;p&gt;That's ten and a half hours between releases. That's not a release cadence, that's a sleep schedule asking for help. (We're on 0.3.0 now. Please don't ask what time it is.) It also means, with total honesty, that there are bugs in here. Some we know about. Some are hiding. Some are probably features we haven't explained yet.&lt;/p&gt;

&lt;p&gt;Which brings me to the real reason I'm writing this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hacktoberfest: come break our code
&lt;/h2&gt;

&lt;p&gt;As Captain Price used to say : "We get dirty, and the world stays clean." That's open source in one sentence. Somebody digs through stack traces at 3 a.m. so everybody else gets software that just works. We're recruiting for the digging.&lt;/p&gt;

&lt;p&gt;Hacktoberfest is different this year: it's all about building with open-source AI, which is basically our whole personality right now. There's no PR count to chase anymore, but contributions still get you our eternal gratitude and your face in the contributors list. Here's the mission briefing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Star and fork the repo:&lt;/strong&gt; &lt;a href="https://github.com/HackersHostel/AgentWebUI" rel="noopener noreferrer"&gt;github.com/HackersHostel/AgentWebUI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install it and try to break it.&lt;/strong&gt; Point it at whatever agent you've got. Click things you shouldn't. Paste a 9,000-line stack trace into the chat. Resize the window to the width of a breadstick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When it breaks, open an issue.&lt;/strong&gt; Repro steps are beautiful. "it doesnt work lol" is less beautiful, but we'll still read it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Then fix it and send the PR.&lt;/strong&gt; We review fast, partly because we're excited and partly because we're awake anyway.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Things we would love help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bridges for more agents.&lt;/strong&gt; Anything that speaks ACP already works. If your favorite agent doesn't, help it learn. That's the whole point of the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI polish.&lt;/strong&gt; Our CSS was written at 3 a.m. by people who think &lt;code&gt;!important&lt;/code&gt; is a personality trait. Not to mention thousands of edge cases that we ignored like a div that’s never gonna be centered. Besides who uses Safari anyway right guys?!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests.&lt;/strong&gt; We have some. "Some" is doing a lot of heavy lifting in that sentence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs.&lt;/strong&gt; If you got confused anywhere during setup, that's a docs bug. Please fix the sentence that confused you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility.&lt;/strong&gt; Keyboard nav, screen readers, contrast. We want this to work for everyone, not just people with our exact monitor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While you're in the Hacktoberfest mood, have a look at &lt;a href="https://hacktoberfest.com" rel="noopener noreferrer"&gt;hacktoberfest.com&lt;/a&gt;: this year it's local Fests and building with open models instead of counting PRs.&lt;/p&gt;

&lt;p&gt;One small request: no drive-by PRs that change one typo into a different typo. We see you. We love you. Please write a test instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop learning a new interface for every agent. Teach one interface to speak every agent!
&lt;/h2&gt;

&lt;p&gt;Come help us build it. Bring coffee. Queue up a match of MW4 while the Docker image pulls; we won't tell.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/HackersHostel/AgentWebUI" rel="noopener noreferrer"&gt;github.com/HackersHostel/AgentWebUI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— The Hackers Hostel crew: &lt;a class="mentioned-user" href="https://dev.to/mahmudurrahmanlabib"&gt;@mahmudurrahmanlabib&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/tahrimwalid"&gt;@tahrimwalid&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/mahedi"&gt;@mahedi&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;P.S. Mahmudur wrote about the same project from a very different angle (sloths, chainsaws, too many tabs). &lt;a href="https://dev.to/mahmudurrahmanlabib/i-was-too-lazy-to-open-five-ai-tabs-so-i-built-agentwebui-207a"&gt;Go read that one too.&lt;/a&gt;&lt;br&gt;
This is my very first Dev.to post. Kindly ignore my oversights.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
