<?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: Yves Jutard</title>
    <description>The latest articles on DEV Community by Yves Jutard (@yvem).</description>
    <link>https://dev.to/yvem</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%2F2924041%2F0ea12451-4c0c-4e5c-8b47-533b2ea09b24.jpg</url>
      <title>DEV Community: Yves Jutard</title>
      <link>https://dev.to/yvem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yvem"/>
    <language>en</language>
    <item>
      <title>🤖 What is a ReAct-style agent?</title>
      <dc:creator>Yves Jutard</dc:creator>
      <pubDate>Tue, 09 Jun 2026 06:04:00 +0000</pubDate>
      <link>https://dev.to/yvem/what-is-a-react-style-agent-jn4</link>
      <guid>https://dev.to/yvem/what-is-a-react-style-agent-jn4</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR: "ReAct" is the way all models do their internal "reasoning+acting" &lt;a href="https://code.claude.com/docs/en/agent-sdk/agent-loop" rel="noopener noreferrer"&gt;loop&lt;/a&gt; since 2023.&lt;/strong&gt; &lt;code&gt;prompt =&amp;gt; {loop = evaluate &amp;lt;-&amp;gt; tool call(s)} =&amp;gt; final answer&lt;/code&gt; It used to be dumber, before a paper from Google.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Disclaimer: this article is a &lt;strong&gt;reviewed&lt;/strong&gt;, &lt;strong&gt;lightly edited&lt;/strong&gt; and &lt;strong&gt;enriched&lt;/strong&gt; &lt;a href="https://claude.ai/share/b8f8d556-277e-44a7-8815-be8e91f199c8" rel="noopener noreferrer"&gt;&lt;strong&gt;conversation with Claude Opus 4.8&lt;/strong&gt;&lt;/a&gt;.&lt;br&gt;
I was learning the subject and found the answer worth sharing.&lt;br&gt;
I'm not taking any credit: It helped me, hopefully it'll help you.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;A &lt;strong&gt;ReAct-style agent&lt;/strong&gt; is an LLM agent that interleaves reasoning and acting in a loop. The name comes from "Reasoning + Acting." It was introduced in a &lt;strong&gt;October 2022 paper by Google Research's Brain Team&lt;/strong&gt;, and it became one of the foundational patterns for building tool-using agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The paper
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;ReAct: Synergizing Reasoning and Acting in Language Models by Yao et al. (2022).&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;arXiv abstract page: &lt;a href="https://arxiv.org/abs/2210.03629" rel="noopener noreferrer"&gt;https://arxiv.org/abs/2210.03629&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;PDF: &lt;a href="https://arxiv.org/pdf/2210.03629" rel="noopener noreferrer"&gt;https://arxiv.org/pdf/2210.03629&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mini-site &lt;a href="https://react-lm.github.io/" rel="noopener noreferrer"&gt;https://react-lm.github.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Readable write-up from the authors on the Google Research blog (lighter version): &lt;a href="https://research.google/blog/react-synergizing-reasoning-and-acting-in-language-models/" rel="noopener noreferrer"&gt;https://research.google/blog/react-synergizing-reasoning-and-acting-in-language-models/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&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%2Fdwtaj5wggtizk3vmcsxb.png" 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%2Fdwtaj5wggtizk3vmcsxb.png" alt="ReAct from the paper" width="533" height="719"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  In details
&lt;/h2&gt;

&lt;p&gt;The core idea is that instead of having the model either just think (chain-of-thought) or just call tools blindly, you let it alternate between the two in a structured cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Thought →&lt;/strong&gt; the model reasons about the current state and what to do next&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action →&lt;/strong&gt; the model issues a tool call (search, API request, code execution, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observation →&lt;/strong&gt; the result of that action gets fed back in&lt;/li&gt;
&lt;li&gt;…and then it loops back to Thought, using the new observation to inform its next step, until it decides it has enough to produce a final answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A toy trace looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question: What's the population of the capital of France?

Thought: I need to find the capital of France first.
Action: search("capital of France")
Observation: Paris is the capital of France.

Thought: Now I need Paris's population.
Action: search("population of Paris")
Observation: Approximately 2.1 million.

Thought: I have what I need.
Answer: The population of Paris is about 2.1 million.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why it works well:&lt;/strong&gt; The reasoning steps keep the model grounded—it plans before acting and adapts when an observation contradicts its expectation. The action steps keep it factual, since it pulls real data from tools rather than hallucinating. The interleaving is the key: reasoning informs which action to take, and observations correct the reasoning. Pure chain-of-thought can reason its way confidently into a wrong answer; pure action-taking can't plan or recover from surprises.&lt;/p&gt;

&lt;p&gt;In practice today, the "Thought/Action/Observation" text format from the original paper has &lt;strong&gt;&lt;em&gt;largely been absorbed into native tool-calling APIs (function calling)&lt;/em&gt;&lt;/strong&gt;, where the model emits structured tool calls and the runtime feeds back results. But the underlying loop is still ReAct — it's the conceptual backbone behind frameworks like LangChain agents, LlamaIndex agents, and most custom agent loops you'd build yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trade-offs:&lt;/strong&gt; ReAct loops can be token-hungry and occasionally get stuck in repetitive cycles (re-issuing similar actions), which is why people layer on things like step limits, reflection (e.g., Reflexion), or more structured planning (Plan-and-Execute) on top.&lt;/p&gt;

&lt;p&gt;ReAct's core contribution is best understood as a fix for the failure mode of pure chain-of-thought (CoT): When a model reasons via CoT, it isn't grounded in the external world and works only from its own internal representations, which limits its ability to reactively explore, reason, and update what it knows.&lt;/p&gt;

&lt;p&gt;The consequence is the familiar pathology: a model reasons fluently and confidently &lt;strong&gt;down a chain that's built on a wrong or stale premise&lt;/strong&gt;, and because nothing external ever contradicts it, the error compounds at every subsequent step. That's the "hallucination and error propagation" problem.&lt;/p&gt;

&lt;p&gt;ReAct breaks that closed loop by letting actions interrupt the reasoning. On HotpotQA and Fever, ReAct overcomes the hallucination and error-propagation issues prevalent in chain-of-thought by interacting with a simple Wikipedia API, and it produces human-like task-solving trajectories that are more interpretable than baselines lacking reasoning traces.&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%2F1jgb3luz3822jt9w9p3c.png" 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%2F1jgb3luz3822jt9w9p3c.png" alt="loop before/after" width="515" height="517"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key word is synergy—it's bidirectional. Reasoning traces help the model induce, track, and update action plans and handle exceptions, while actions let it interface with external sources to gather additional information. So reasoning decides what to look up, the lookup injects a real fact, and that fact constrains the next round of reasoning—the model can't drift far from reality because it keeps getting pulled back to ground truth.&lt;/p&gt;

&lt;p&gt;Two things from the paper are worth underlining for how you think about agent design:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✅ &lt;strong&gt;The gains weren't marginal on the interactive tasks&lt;/strong&gt;. On ALFWorld and WebShop (two interactive decision-making benchmarks) ReAct outperformed imitation and reinforcement-learning methods by absolute success-rate margins of 34% and 10% respectively, while being prompted with only one or two in-context examples. That few-shot efficiency was a big part of why the pattern caught on: you got RL-beating behavior from a couple of prompt examples, no training loop required.&lt;/li&gt;
&lt;li&gt;⚠️ &lt;strong&gt;ReAct alone wasn't strictly dominant on the QA tasks&lt;/strong&gt; the real winner was the hybrid. On HotpotQA and Fever, the best overall approach was a combination of ReAct and CoT that lets the model use both its internal knowledge and externally obtained information during reasoning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The takeaway&lt;/strong&gt;: grounding via tools and reasoning from internal knowledge aren't competitors; the strongest setup lets the model lean on its own priors when they're reliable and reach for external sources when they aren't. That tension—when to trust the model's internal knowledge versus when to force a retrieval—is exactly the design knob you're tuning in RAG and agentic pipelines.&lt;/p&gt;

&lt;p&gt;The interpretability point is also more than a footnote. Because every step is an explicit thought or a named action with an observation, the trajectory is human-readable, which makes the system far easier to diagnose and steer when it goes wrong—a meaningful operational advantage over an opaque policy that just emits actions.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>learning</category>
    </item>
    <item>
      <title>⚽️ Claude Code Isn’t the Only Game in Town</title>
      <dc:creator>Yves Jutard</dc:creator>
      <pubDate>Wed, 13 May 2026 23:35:26 +0000</pubDate>
      <link>https://dev.to/yvem/claude-code-isnt-the-only-game-in-town-3l5i</link>
      <guid>https://dev.to/yvem/claude-code-isnt-the-only-game-in-town-3l5i</guid>
      <description>&lt;p&gt;&lt;em&gt;Claude Code is great, but alternatives exist with unique strengths. I tried a few.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; the "coding agents" space is extremely dynamic with fierce competition. We can expect a lot of changes in the coming months, from form factor to mental models. Competition is good! Trying other coding agents may help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stay open-minded about the UX / form factor&lt;/li&gt;
&lt;li&gt;increase your performance by using their unique strengths&lt;/li&gt;
&lt;li&gt;save credits: they have free tiers 💰&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a short list, in order of personal preference/relevance:&lt;/p&gt;




&lt;h2&gt;
  
  
  ⭐️⭐️⭐️ &lt;a href="https://openai.com/codex/?utm_source=yvem" rel="noopener noreferrer"&gt;Codex&lt;/a&gt; by OpenAI
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"The same agent everywhere you build"&lt;/p&gt;
&lt;/blockquote&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%2Fkzlvg5jt5xv0m4eh4vpp.png" 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%2Fkzlvg5jt5xv0m4eh4vpp.png" alt="screenshot of the Codex app" width="800" height="315"&gt;&lt;/a&gt;&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%2F76amnfywsx06flh0m8yg.png" 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%2F76amnfywsx06flh0m8yg.png" alt="screenshot of the Codex TUI" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ generous free tier&lt;/li&gt;
&lt;li&gt;✅ frontier models&lt;/li&gt;
&lt;li&gt;✅ built-in worktrees and cloud environments&lt;/li&gt;
&lt;li&gt;💡 not a CLI! Codex is primarily an app (though they do have a TUI version)&lt;/li&gt;
&lt;li&gt;💡 integrated browser that the agent can access, with annotation tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall the strongest contender. Integrated browser is extremely useful (all coding agents can access the browser, but some setup is required). Integrated agent orchestration + all-in-one app makes a great UX.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://openai.com/codex/?utm_source=yvem" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;openai.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  ⭐️⭐️ &lt;a href="https://opencode.ai/?utm_source=yvem" rel="noopener noreferrer"&gt;openCode&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"The open source AI coding agent"&lt;/p&gt;
&lt;/blockquote&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%2Ffingp8wtkhon44l0bf5e.png" 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%2Ffingp8wtkhon44l0bf5e.png" alt="Screenshot of OpenCode app" width="800" height="315"&gt;&lt;/a&gt;&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%2Fu1nhwnbp6td9jqp4g934.png" 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%2Fu1nhwnbp6td9jqp4g934.png" alt="Screenshot of OpenCode TUI" width="799" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ free tier (not frontier models) + low-cost plans&lt;/li&gt;
&lt;li&gt;✅ Can connect to any model = you can use frontier ones&lt;/li&gt;
&lt;li&gt;✅ Open Source (extensible / tweakable)&lt;/li&gt;
&lt;li&gt;✅ Enterprise plan with confidentiality promises&lt;/li&gt;
&lt;li&gt;✅ has an app like Codex&lt;/li&gt;
&lt;li&gt;💡 killer feature seems to be the plans and open-source nature&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://opencode.ai/?utm_source=yvem" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;opencode.ai&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  ⭐️ &lt;a href="https://geminicli.com/?utm_source=yvem" rel="noopener noreferrer"&gt;Gemini CLI&lt;/a&gt; by Google
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build debug &amp;amp; deploy with AI"&lt;/p&gt;
&lt;/blockquote&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%2Fs1ct115tj6to611aaimw.png" 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%2Fs1ct115tj6to611aaimw.png" alt="Screenshot of Gemini TUI" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ generous free tier&lt;/li&gt;
&lt;li&gt;✅ frontier models&lt;/li&gt;
&lt;li&gt;✅ must be decent and reliable since it's Google&lt;/li&gt;
&lt;li&gt;✅ procurement may be easier since it's Google&lt;/li&gt;
&lt;li&gt;normal TUI coding agent, I didn't notice any original feature (typical Google?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Note to Google: make your landing page scrollable and immediately list your USPs&lt;/em&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://geminicli.com/?utm_source=yvem" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgeminicli.com%2Fassets%2Fsocial-poster.png" height="451" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://geminicli.com/?utm_source=yvem" rel="noopener noreferrer" class="c-link"&gt;
            Build, debug &amp;amp; deploy with AI | Gemini CLI
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgeminicli.com%2Ffavicon.ico" width="48" height="48"&gt;
          geminicli.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  &lt;a href="https://mistral.ai/products/vibe?utm_source=yvem" rel="noopener noreferrer"&gt;Vibe&lt;/a&gt; by Mistral AI
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Agentic coding that meets you where you work. Write, test, and deploy autonomously with full codebase context."&lt;/p&gt;
&lt;/blockquote&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%2Fpuw6yywzq9lqxhg331p5.png" 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%2Fpuw6yywzq9lqxhg331p5.png" alt="Screenshot of Vibe TUI" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ free tier&lt;/li&gt;
&lt;li&gt;✅ European company&lt;/li&gt;
&lt;li&gt;✅ decent&lt;/li&gt;
&lt;li&gt;💡 killer feature seems to be sovereignty since it's a rare non-USA one.&lt;/li&gt;
&lt;li&gt;still has room to grow: I encountered a backend error during first use&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://mistral.ai/products/vibe/?utm_source=yvem" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmistral.ai%2Fcms-media%2Fapi%2Fmedia%2Ffile%2FOG-Main-1.jpg" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://mistral.ai/products/vibe/?utm_source=yvem" rel="noopener noreferrer" class="c-link"&gt;
            Mistral Vibe (formerly Le Chat) - AI chat and coding agent
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Vibe (formerly Le Chat) is Mistral's AI chat and agent for work and code. Chat, think, search, write, code, and automate your most meaningful work.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
          mistral.ai
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  &lt;a href="https://ampcode.com/?utm_source=yvem" rel="noopener noreferrer"&gt;Amp&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"the frontier coding agent built for leading models, and what comes next"&lt;/p&gt;
&lt;/blockquote&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%2Ffm4kj8prjgr1wdeyd3h8.png" 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%2Ffm4kj8prjgr1wdeyd3h8.png" alt="Screenshot of AMP TUI" width="799" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;recommended by an opinion leader (maybe &lt;a href="https://steve-yegge.medium.com/" rel="noopener noreferrer"&gt;Steve Yegge&lt;/a&gt;?), I wish I'd tried it, unfortunately Amp discontinued their free tier: &lt;a href="https://ampcode.com/news/amp-free-is-ad-free" rel="noopener noreferrer"&gt;https://ampcode.com/news/amp-free-is-ad-free&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://ampcode.com/?utm_source=yvem" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;ampcode.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;





&lt;p&gt;Did I miss a notable one? Any notable Chinese coding agents worth trying? Feel free to share in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>claude</category>
      <category>agents</category>
    </item>
    <item>
      <title>🌅 Brighten your day in 3 CLAUDE.md lines</title>
      <dc:creator>Yves Jutard</dc:creator>
      <pubDate>Wed, 29 Apr 2026 04:15:37 +0000</pubDate>
      <link>https://dev.to/yvem/brighten-your-day-in-3-claudemd-lines-36jj</link>
      <guid>https://dev.to/yvem/brighten-your-day-in-3-claudemd-lines-36jj</guid>
      <description>&lt;p&gt;This won't save your job, but it might get a few laughs during your workday:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ask Claude to act like a pirate and call you 'Captain' 🏴‍☠️&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here are 3 lines to drop in your &lt;code&gt;CLAUDE.md&lt;/code&gt;: (or &lt;code&gt;AGENTS.md&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Coding Agent Guidance

In all conversations, address me as "Captain Yvem".

You're a very experienced staff product engineer.
If you meet my expectations,
you'll get gold doubloons and rum.

On start, greet me. Also crack me a joke.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the result:&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%2Fdhussoc8rg81pisok5ux.png" 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%2Fdhussoc8rg81pisok5ux.png" alt="Claude Code acting like a pirate" width="797" height="100"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes Claude asks for rewards on its own:&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%2Fxe29g2x9vovekyaxfqn8.png" 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%2Fxe29g2x9vovekyaxfqn8.png" alt="Claude Code acting like a pirate" width="799" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;

&lt;p&gt;I’ll be sharing more coding agent tips soon: Feel free to follow along ⛵️🛟&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>claude</category>
      <category>tooling</category>
    </item>
    <item>
      <title>HOWTO: run a local MCP server in TypeScript without a build step</title>
      <dc:creator>Yves Jutard</dc:creator>
      <pubDate>Fri, 30 May 2025 02:42:10 +0000</pubDate>
      <link>https://dev.to/yvem/how-to-run-a-local-mcp-server-in-typescript-with-node-23-without-a-build-step-5gd5</link>
      <guid>https://dev.to/yvem/how-to-run-a-local-mcp-server-in-typescript-with-node-23-without-a-build-step-5gd5</guid>
      <description>&lt;p&gt;I experimented with &lt;strong&gt;writing and running a local MCP server in TypeScript&lt;/strong&gt; and I ran into difficulties having it properly called from Claude.&lt;/p&gt;

&lt;p&gt;In this article, I'll share the working config and the issues I encountered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite: MCP server code
&lt;/h2&gt;

&lt;p&gt;I copy/pasted the &lt;a href="https://github.com/modelcontextprotocol/quickstart-resources/blob/main/weather-server-typescript/src/index.ts" rel="noopener noreferrer"&gt;TypeScript example&lt;/a&gt; from &lt;a href="https://modelcontextprotocol.io/quickstart/server#node" rel="noopener noreferrer"&gt;Claude documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal: Direct Local execution
&lt;/h2&gt;

&lt;p&gt;Claude rightfully recommends using TypeScript and suggests a build step to convert &lt;code&gt;.ts&lt;/code&gt; to &lt;code&gt;.js&lt;/code&gt;. However node &amp;gt;23.6 now supports &lt;a href="https://nodejs.org/en/learn/typescript/run-natively" rel="noopener noreferrer"&gt;direct execution of TypeScript with type stripping&lt;/a&gt;, so the build step felt unnecessary ❌.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL:DR; Here is the working config:
&lt;/h2&gt;

&lt;p&gt;Final, working, Claude's local &lt;code&gt;config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"hello-world"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/Users/sam/.nvm/nvm-exec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"NODE_VERSION"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"23"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"--disable-warning=ExperimentalWarning --experimental-strip-types"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"/Users/sam/work/src/mcp/module/src/index.ts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Issues encountered and solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Everything path must be absolute
&lt;/h3&gt;

&lt;p&gt;Claude's config doesn't perform any path interpolation or env inheritance, so everything has to be explicitly declared and all paths have to be absolute. No &lt;code&gt;~&lt;/code&gt; or &lt;code&gt;$HOME&lt;/code&gt; or &lt;code&gt;PATH&lt;/code&gt; preset:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"command": "/Users/sam/.nvm/nvm-exec"
"/Users/sam/work/src/mcp/module/src/index.ts"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Calling the right node
&lt;/h3&gt;

&lt;p&gt;I'm using &lt;code&gt;nvm&lt;/code&gt; to manage my node runtimes. Even after installing the latest node 23 with &lt;code&gt;nvm install 23&lt;/code&gt;, calling &lt;code&gt;node&lt;/code&gt; from Claude yielded another version. The solution is to use &lt;code&gt;nvm-exec&lt;/code&gt; with an env variable &lt;code&gt;NODE_VERSION=23&lt;/code&gt;, see the config above. Note that &lt;code&gt;nvm-exec&lt;/code&gt; must be referenced with an absolute path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stdout pollution
&lt;/h3&gt;

&lt;p&gt;Since node 23's &lt;code&gt;--experimental-strip-types&lt;/code&gt; is considered experimental, there is a warning message displayed on invocation. Since the local MCP protocol relies on stdin/stdout, this warning message disrupted the protocol.&lt;/p&gt;

&lt;p&gt;The solution is to silence this warning with &lt;code&gt;--disable-warning=ExperimentalWarning&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It works!&lt;br&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%2F6uf92y4uvykbplnwi28b.png" 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%2F6uf92y4uvykbplnwi28b.png" alt="Claude Settings showing the valid active MCP" width="799" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you'll overcome those issues faster thanks to this post. Good luck experimenting with MCP! Comments and reactions are appreciated 😊&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>node</category>
      <category>llm</category>
      <category>typescript</category>
    </item>
    <item>
      <title>🖼️ Install those 6 browsers now… (Yes you need them all!)</title>
      <dc:creator>Yves Jutard</dc:creator>
      <pubDate>Thu, 20 Mar 2025 05:25:37 +0000</pubDate>
      <link>https://dev.to/yvem/install-those-3-browsers-now-not-the-ones-you-think-1367</link>
      <guid>https://dev.to/yvem/install-those-3-browsers-now-not-the-ones-you-think-1367</guid>
      <description>&lt;p&gt;I'm Frontend Software Engineer. I routinely use 2x browsers at once. Since last year, I further improved my productivity thanks to 2x extra browsers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: 2 of them are macOs only.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1st: Main browser: &lt;a href="https://www.mozilla.org/en-US/firefox/new/" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.mozilla.org/en-US/firefox/new/" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt; is not the greatest and fastest browser, but it has 2x killer features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vertical tabs&lt;/strong&gt;: (&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/sidebery/" rel="noopener noreferrer"&gt;webextension&lt;/a&gt;) THE killer feature. A collapsible tree of tabs is a huge productivity gain! Chrome absolutely rejects vertical tabs for no clear reasons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad blocking&lt;/strong&gt;: while Chrome is &lt;a href="https://ublockorigin.com/" rel="noopener noreferrer"&gt;trying to kill ad blockers&lt;/a&gt;, Firefox promised they would keep them working. I use an advanced one called &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/umatrix/" rel="noopener noreferrer"&gt;uMatrix&lt;/a&gt; but I heard good things about &lt;a href="https://ublockorigin.com/" rel="noopener noreferrer"&gt;uBlock Origin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2nd: Secondary browser: Chrome
&lt;/h2&gt;

&lt;p&gt;The most supported browser, also the most "enterprise ready", the only one supporting all my company's internal tools.&lt;/p&gt;

&lt;p&gt;Killer feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The standard&lt;/strong&gt;: like it or not, all websites work on Chrome, especially business webapps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-profiles&lt;/strong&gt;: allowing to seamlessly keep a separate personal profile on the side of a work one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Be sure to tweak the security settings to block 3rd party cookies!&lt;/p&gt;

&lt;h2&gt;
  
  
  3rd: Dev browser: &lt;a href="https://www.google.com/intl/en_us/chrome/dev/" rel="noopener noreferrer"&gt;Chrome Dev&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Using a dedicated Dev browser is a big gain! To properly debug websites (esp. perf issues), one needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;no webextensions&lt;/strong&gt;: daily-life webextensions such as password managers inject code into pages, add extra iframes etc. This is confusing when trying to debug a page, seeing extra logs &amp;amp; errors, extra classes on elements, confusing flamegraphs...&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;a cleanable browser&lt;/strong&gt;: a dedicated dev browser allows you to safely "reset" your browser, clearing all cookies and site data without impacting all your work sessions on the main browser(s).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;a defaulted browser&lt;/strong&gt;: unlike your main browser which is likely "strenghtened" (strict Safe Browsing, 3p blocking…), you can keep the dev browser "defaulted" to experience it like most of your users do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.google.com/intl/en_us/chrome/dev/" rel="noopener noreferrer"&gt;Chrome Dev&lt;/a&gt; is an excellent choice. It's evergreen and the most used browser anyway.&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%2F6jw8bxy106607owua0bx.png" 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%2F6jw8bxy106607owua0bx.png" alt="Chrome Dev splash screen" width="799" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4th: "picker" browser: &lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sindresorhus.com/velja" rel="noopener noreferrer"&gt;Velja&lt;/a&gt; by Sindre Sorhus is not a real browser but a browser picker. By setting it as the default system browser, it shows a picker upon click on a link from outside of a browser (ex. in your Terminal, Slack, Zoom…):&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%2Fgjwsfybm0r31lg9acbv1.png" 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%2Fgjwsfybm0r31lg9acbv1.png" alt="Velja demo" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  (Bonus) 5th: Mobile debugging browser &lt;a href="https://developer.apple.com/safari/technology-preview/" rel="noopener noreferrer"&gt;Safari Technology Preview&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Killer feature:&lt;/strong&gt; mobile debugging. Safari Technology Preview can open dev tools on a connected iPhone, either a physical one or an emulated one. This is invaluable when fixing mobile issues.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm not doing much mobile debugging at the moment, but when needed, it's a must-have.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  (Bonus) 6th: Responsive Development browser &lt;a href="https://polypane.app/" rel="noopener noreferrer"&gt;Polypane&lt;/a&gt; or &lt;a href="https://responsively.app/" rel="noopener noreferrer"&gt;Responsively&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Killer feature:&lt;/strong&gt; responsive development. Both browsers allow to simultaneously open several synchronised tabs with different viewport sizes.&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%2Fcee0p2467z64vtdernx8.png" 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%2Fcee0p2467z64vtdernx8.png" alt="Multi viewports demo" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://polypane.app/" rel="noopener noreferrer"&gt;Polypane&lt;/a&gt; is paid but feature-packed by very motivated devs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;brew install --cask polypane&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://responsively.app/" rel="noopener noreferrer"&gt;Responsively&lt;/a&gt; is free but has less features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;brew install --cask responsively&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I'm not doing much responsive dev at the moment, but when needed, it's a must-have.&lt;/em&gt;&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%2F8bnc8k6hshnkbashku5j.png" 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%2F8bnc8k6hshnkbashku5j.png" alt="List of browsers" width="566" height="749"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
