<?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: Lacy Morrow</title>
    <description>The latest articles on DEV Community by Lacy Morrow (@lacymorrow).</description>
    <link>https://dev.to/lacymorrow</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%2F57203%2Fe930d640-5c8e-47bb-b0f4-6357b0be02a1.jpeg</url>
      <title>DEV Community: Lacy Morrow</title>
      <link>https://dev.to/lacymorrow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lacymorrow"/>
    <language>en</language>
    <item>
      <title>What's in ShipKit's $249 Next.js starter</title>
      <dc:creator>Lacy Morrow</dc:creator>
      <pubDate>Tue, 21 Apr 2026 20:49:38 +0000</pubDate>
      <link>https://dev.to/lacymorrow/whats-in-shipkits-249-nextjs-starter-4bcn</link>
      <guid>https://dev.to/lacymorrow/whats-in-shipkits-249-nextjs-starter-4bcn</guid>
      <description>&lt;p&gt;I have started a lot of Next.js apps. Every single one burns the same first two months: auth, payments, database setup, CMS, email templates, UI components. Different project, same plumbing.&lt;/p&gt;

&lt;p&gt;ShipKit is my attempt to stop repeating that.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is
&lt;/h2&gt;

&lt;p&gt;ShipKit is a Next.js 15 starter kit with production-ready infrastructure already wired up. You clone it, fill in your env vars, and you are writing product code on day two.&lt;/p&gt;

&lt;p&gt;$249 one-time. Lifetime updates. No subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is included
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Auth: Better Auth with OAuth, magic links, and RBAC. Session handling is done.&lt;/li&gt;
&lt;li&gt;Payments: LemonSqueezy pre-wired with webhook handling. One-time and subscription support.&lt;/li&gt;
&lt;li&gt;Database: Postgres + Drizzle ORM. Schema already migrated.&lt;/li&gt;
&lt;li&gt;CMS: Payload CMS with an admin panel. MDX for blog and docs pages.&lt;/li&gt;
&lt;li&gt;Email: Resend integration with templates ready to customize.&lt;/li&gt;
&lt;li&gt;UI: 100+ shadcn/ui components. No more hunting the docs.&lt;/li&gt;
&lt;li&gt;AI: OpenAI and Anthropic hooks, v0.dev integration, and Cursor rules for AI-assisted development.&lt;/li&gt;
&lt;li&gt;Deploy: One-click Vercel deploy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Free tier
&lt;/h2&gt;

&lt;p&gt;There is also Shipkit Bones - the free version. You get Next.js 15, Better Auth, TypeScript setup, and basic components. No card required. Good starting point if you want to see how it is structured before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why $249
&lt;/h2&gt;

&lt;p&gt;Less than a day of consulting. If you are building something new and would otherwise spend weeks on setup, it pays for itself before you ship.&lt;/p&gt;

&lt;p&gt;Full details at &lt;a href="https://shipkit.io/pricing" rel="noopener noreferrer"&gt;shipkit.io/pricing&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>startup</category>
    </item>
    <item>
      <title>How I Made My Terminal Understand English</title>
      <dc:creator>Lacy Morrow</dc:creator>
      <pubDate>Mon, 30 Mar 2026 22:28:12 +0000</pubDate>
      <link>https://dev.to/lacymorrow/how-i-made-my-terminal-understand-english-3hff</link>
      <guid>https://dev.to/lacymorrow/how-i-made-my-terminal-understand-english-3hff</guid>
      <description>&lt;p&gt;Every time I need AI help while coding, I do the same thing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy terminal output&lt;/li&gt;
&lt;li&gt;Switch to Claude or ChatGPT&lt;/li&gt;
&lt;li&gt;Paste and ask my question&lt;/li&gt;
&lt;li&gt;Wait for the response&lt;/li&gt;
&lt;li&gt;Copy the answer&lt;/li&gt;
&lt;li&gt;Switch back to terminal&lt;/li&gt;
&lt;li&gt;Paste and run&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That loop happens 20+ times a day.&lt;/p&gt;

&lt;p&gt;AI coding tools like Claude Code and Gemini CLI already live in the terminal. But you still have to switch into them, type &lt;code&gt;claude&lt;/code&gt;, ask your thing, then go back to your regular shell. Two workflows, one terminal.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://lacy.sh" rel="noopener noreferrer"&gt;Lacy Shell&lt;/a&gt;, a ZSH/Bash plugin that figures out whether you're typing a command or a question and sends it to the right place. Commands run in your shell. Questions go to your AI agent. No prefix, no hotkey. You just type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrsbraq7ssqq1ilth0ij.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrsbraq7ssqq1ilth0ij.gif" alt="Demo of Lacy Shell showing real-time color indicator" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The color indicator
&lt;/h2&gt;

&lt;p&gt;The thing that made it click for me was the color indicator. As you type, a dot next to your prompt changes color:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Green = shell command&lt;/li&gt;
&lt;li&gt;Magenta = AI agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first word gets syntax-highlighted too. Both update on every keystroke, so you know what's going to happen before you press Enter.&lt;/p&gt;

&lt;p&gt;ZSH also gets a mode badge in the right prompt: &lt;code&gt;SHELL&lt;/code&gt;, &lt;code&gt;AGENT&lt;/code&gt;, or &lt;code&gt;AUTO&lt;/code&gt;. &lt;code&gt;Ctrl+Space&lt;/code&gt; toggles between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  How detection works
&lt;/h2&gt;

&lt;p&gt;The part that surprised me: you don't need AI to classify input. Lacy uses lexical analysis. No network call, no API key, no latency. Under a millisecond.&lt;/p&gt;

&lt;p&gt;Here are the rules, in order:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Agent words catch obvious natural language.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;About 150 conversational words ("explain", "why", "thanks", "perfect", "yes", "no") always route to AI. &lt;code&gt;explain this error&lt;/code&gt; has no ambiguity. It's a lookup table, not a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Shell reserved words are trickier than they look.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Words like &lt;code&gt;do&lt;/code&gt;, &lt;code&gt;then&lt;/code&gt;, &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;fi&lt;/code&gt;, and &lt;code&gt;select&lt;/code&gt; pass &lt;code&gt;command -v&lt;/code&gt; (they're valid shell syntax), but they're never the first token of a standalone command. Nobody types &lt;code&gt;do&lt;/code&gt; and means a &lt;code&gt;do&lt;/code&gt; loop. "Do we have a way to deploy?" is a question. "In the codebase, where is auth?" is a question. Lacy catches these.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. If the first word is a valid command, it goes to shell.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git status&lt;/code&gt;, &lt;code&gt;ls -la&lt;/code&gt;, &lt;code&gt;docker ps&lt;/code&gt; — if &lt;code&gt;command -v&lt;/code&gt; finds it, shell gets it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Single non-command words go to shell.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you type &lt;code&gt;gti&lt;/code&gt; (a typo for &lt;code&gt;git&lt;/code&gt;), Lacy lets the shell handle it so you see the normal error. Single words that aren't commands are almost always typos, not questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Multiple words starting with a non-command go to AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Fix the bug in auth" starts with "fix" — not a command on most systems. Multiple words, first word isn't a command. That's natural language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Post-execution reroute catches the rest.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the one I like best. Sometimes a valid command gets natural language arguments: &lt;code&gt;kill the process on localhost:3000&lt;/code&gt;. &lt;code&gt;kill&lt;/code&gt; is a real command, so Lacy sends it to the shell. It fails. Lacy checks: did the error match a known pattern ("No such process")? Did the input have natural language markers (articles, pronouns, 3+ bare words)? If both match, it silently reroutes to the AI agent. You never see the failed attempt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Routing table
&lt;/h2&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You type&lt;/th&gt;
&lt;th&gt;Routes to&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ls -la&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;Valid command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;what files are here&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Agent word "what"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;Valid command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;do we have auth?&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Reserved word "do"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cd..&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;Single word (typo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fix the bug&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Multi-word, not a command&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kill the process on 3000&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shell, then AI&lt;/td&gt;
&lt;td&gt;Valid command fails with NL patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;make sure the tests pass&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shell, then AI&lt;/td&gt;
&lt;td&gt;"sure" is an NL marker, make fails&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Works with whatever AI tool you have
&lt;/h2&gt;

&lt;p&gt;Lacy isn't another AI tool. It's a routing layer for the ones you already have:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;How Lacy calls it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude -p "query"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini CLI&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini --resume -p "query"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenCode&lt;/td&gt;
&lt;td&gt;&lt;code&gt;opencode run -c "query"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Codex&lt;/td&gt;
&lt;td&gt;&lt;code&gt;codex exec resume --last "query"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lash&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lash run -c "query"&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It auto-detects what's on your system, or you can set a custom command. Lacy doesn't compete with any of these. If you use Claude Code, Lacy just makes it easier to reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unexpected part
&lt;/h2&gt;

&lt;p&gt;I built this to stop context-switching. But the thing that actually changed my workflow was different: I started asking my terminal stuff I'd never have bothered looking up.&lt;/p&gt;

&lt;p&gt;What's the flag for recursive grep again? How do I find processes on port 8080? What's the git command to undo the last commit without losing changes?&lt;/p&gt;

&lt;p&gt;I'd normally Google these or just fumble through &lt;code&gt;man&lt;/code&gt; pages. Now I type the question where I'm already working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;One line:&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;-fsSL&lt;/span&gt; https://lacy.sh/install | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;lacymorrow/tap/lacy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or npx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx lacy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Works on macOS, Linux, and WSL. ZSH and Bash 4+. MIT licensed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lacymorrow/lacy" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lacy.sh" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try it, I want to hear about the edge cases. The boundary between command and question is inherently fuzzy, and real usage is the best way to tune it.&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>ai</category>
      <category>devtools</category>
      <category>opensource</category>
    </item>
    <item>
      <title>AI terminal tools in 2026: Warp, Lacy Shell, and the rest</title>
      <dc:creator>Lacy Morrow</dc:creator>
      <pubDate>Mon, 30 Mar 2026 16:19:41 +0000</pubDate>
      <link>https://dev.to/lacymorrow/2026-ai-terminal-tools-comparison-warp-vs-lacy-shell-vs-traditional-shells-5a8f</link>
      <guid>https://dev.to/lacymorrow/2026-ai-terminal-tools-comparison-warp-vs-lacy-shell-vs-traditional-shells-5a8f</guid>
      <description>&lt;h1&gt;
  
  
  AI terminal tools in 2026: Warp, Lacy Shell, and the rest
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Full disclosure: I built Lacy Shell. This comparison is biased by definition. I've tried to be accurate about what Warp does well, but I have obvious opinions here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The terminal has not changed much in 40 years. Prompt, shell, command syntax, basically the same as the 1980s. What has changed is what developers are building around it: AI autocomplete, natural language commands, inline explanations. A few different tools have gone after this problem with pretty different approaches.&lt;/p&gt;

&lt;p&gt;Here is how they compare: Warp, Lacy Shell (which I built), iTerm2 with an AI plugin, and plain ZSH/Bash.&lt;/p&gt;




&lt;h2&gt;
  
  
  The tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Warp&lt;/strong&gt; is a full terminal replacement built from scratch in Rust. It ships its own rendering engine, text editor, and AI features. You can highlight a command and ask what it does, or type natural language to generate one. The UX is genuinely well-designed. Probably the most polished terminal in this comparison. It requires you to adopt it as your primary terminal, and queries go through Warp's servers by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lacy Shell&lt;/strong&gt; is a ZSH/Bash plugin I wrote. It sits inside your existing shell rather than replacing it. When you type input, it classifies the line in real-time using local word analysis (no API call) and either runs it as a shell command (green indicator in the prompt) or routes it to whatever AI CLI you have installed: Claude Code, Gemini, OpenCode, or anything else. Version 1.8.9 shipped in March 2026. The whole thing is MIT-licensed and on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iTerm2 + AI plugin&lt;/strong&gt; is the DIY path. iTerm2 is a mature macOS terminal; pair it with something like shell-gpt and you get natural language commands with manual configuration. There is no unified routing layer; you invoke AI explicitly when you want it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standard ZSH/Bash&lt;/strong&gt; is what most developers already use. No AI integration without adding tools yourself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Warp&lt;/th&gt;
&lt;th&gt;Lacy Shell&lt;/th&gt;
&lt;th&gt;iTerm2 + AI&lt;/th&gt;
&lt;th&gt;Standard ZSH/Bash&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Natural language routing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time input classification&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works in existing terminal&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ZSH/Bash plugin&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bring your own AI&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux/WSL support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes (MIT)&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requires account/login&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Yes (limited)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  How the routing works
&lt;/h2&gt;

&lt;p&gt;This is where the tools differ most.&lt;/p&gt;

&lt;p&gt;Warp integrates AI as a distinct layer. You invoke it explicitly: highlight text, use a hotkey, open the AI panel. The terminal and AI are separate modes you switch between.&lt;/p&gt;

&lt;p&gt;Lacy Shell classifies input before you press Enter. &lt;code&gt;ls -la&lt;/code&gt; runs immediately. &lt;code&gt;what files are in this folder&lt;/code&gt; routes to your configured AI agent. The classification runs locally with no round trip. If input pattern-matches as natural language but fails as a command, it reroutes automatically.&lt;/p&gt;

&lt;p&gt;The practical difference: Warp asks you to switch modes. Lacy Shell tries to remove that step.&lt;/p&gt;




&lt;h2&gt;
  
  
  The open source angle
&lt;/h2&gt;

&lt;p&gt;Warp is VC-backed and closed source. It is a real product with real investment in UX. Your queries go through their infrastructure.&lt;/p&gt;

&lt;p&gt;Lacy Shell is MIT. The source is at github.com/lacymorrow/lacy. Your queries go wherever your AI backend is configured: Anthropic, Google, a local model, whatever you have set up. I built it partly because I wanted that control myself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Active development
&lt;/h2&gt;

&lt;p&gt;Lacy Shell shipped v1.8.5 through v1.8.9 in a single week in March 2026.&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;-fsSL&lt;/span&gt; https://lacy.sh/install | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Homebrew and npx installs are also supported.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built Lacy Shell, so read this comparison accordingly. Warp's feature details are accurate as of March 2026 based on their public documentation and app.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>terminal</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
