<?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>Forem: J Now</title>
    <description>The latest articles on Forem by J Now (@palo_alto_ai).</description>
    <link>https://forem.com/palo_alto_ai</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%2F3875408%2F4401de35-525d-496b-b2fb-347e8052bfa1.png</url>
      <title>Forem: J Now</title>
      <link>https://forem.com/palo_alto_ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/palo_alto_ai"/>
    <language>en</language>
    <item>
      <title>Klein Blue in a Terminal: One Pigment, Four Themes, One Constraint</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Wed, 15 Apr 2026 19:10:55 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/klein-blue-in-a-terminal-one-pigment-four-themes-one-constraint-4ln8</link>
      <guid>https://forem.com/palo_alto_ai/klein-blue-in-a-terminal-one-pigment-four-themes-one-constraint-4ln8</guid>
      <description>&lt;p&gt;Yves Klein registered IKB — International Klein Blue, hex 002FA7 — in 1960 as a pigment so saturated it reads as pure depth rather than surface color. That's the aesthetic argument for building a terminal theme around it. The practical problem came after.&lt;/p&gt;

&lt;p&gt;Pure IKB fails APCA contrast as text on a dark background. Lc -12, essentially invisible. If you want IKB present without lying about its legibility, you split it: pure 002FA7 into ansi:blue for decorative roles — borders, highlights, things you clock without reading — and lift it to A8BEF0 in ansi:blueBright for permission-prompt text that needs to actually land.&lt;/p&gt;

&lt;p&gt;That split is the structural decision the whole project turns on, because Claude Code is mostly prose. Tool output, reasoning steps, permission prompts — paragraphs, not syntax. Most terminal themes are tuned for code: they get the keyword and string colors right and treat everything else as afterthought. When your screen is 80% English for hours at a stretch, the wrong thing is being optimized.&lt;/p&gt;

&lt;p&gt;So the four variations use APCA Lc contrast with per-role gates: body text must hit Lc 90, subtle text Lc 75, muted Lc 45, accents Lc 60. Klein Void Prot (V3) is the one where every single accent clears its strict gate. The others make deliberate aesthetic trades — V2 accepts claude-sand (the ansi:redBright slot Claude Code uses for its brand color) as a second hero color alongside Klein blue; V4 goes maximum void, one blue, nothing competing.&lt;/p&gt;

&lt;p&gt;Fonts ship with it: CommitMono-Regular for V1 and V3, IBM Plex Mono for V2 and V4, both installed to ~/Library/Fonts/. One requirement that bites people: Claude Code's /theme picker must be set to dark-ansi, or Claude Code ignores the ANSI profile entirely and falls back to its hardcoded RGB palette.&lt;/p&gt;

&lt;p&gt;Built from build.m, a variation-aware Objective-C builder. Install via install.sh, fully rollback-able via restore.sh.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertnowell/klein-blue" rel="noopener noreferrer"&gt;https://github.com/robertnowell/klein-blue&lt;/a&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>claude</category>
      <category>cli</category>
      <category>design</category>
    </item>
    <item>
      <title>rabbitholes: inline knowledge without leaving the page</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Wed, 15 Apr 2026 16:59:07 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/rabbitholes-inline-knowledge-without-leaving-the-page-4mmn</link>
      <guid>https://forem.com/palo_alto_ai/rabbitholes-inline-knowledge-without-leaving-the-page-4mmn</guid>
      <description>&lt;p&gt;I read an article about Byzantine fault tolerance last week. Three paragraphs in, I hit 'quorum-based consensus' — a phrase I could gesture at but not actually explain. I opened a new tab, read half of a Wikipedia article, came back, and had lost the thread of the original piece entirely.&lt;/p&gt;

&lt;p&gt;rabbitholes fixes this at the browser level. Highlight any text on any page, and a shadow-DOM tooltip renders an explanation from Claude Haiku 4.5 next to your cursor — it doesn't inject styles into the host page or reflow anything. The explanation ends with two suggested rabbit-hole topics, the most interesting threads to pull from where you landed. Click any word in the explanation to go deeper on that term. Drag across words to pick a phrase.&lt;/p&gt;

&lt;p&gt;The thing I use most: the globe icon re-answers your query enriched with Brave Search results, with source chips you can click. So for something time-sensitive or contested, you're not just getting a language model's cached understanding — you're getting it grounded in current sources.&lt;/p&gt;

&lt;p&gt;There's a rabbit-hole counter that tracks how many hops deep you've gone. It's partly a curiosity feature, partly a practical anchor — you can retrace your path without reconstructing it from memory.&lt;/p&gt;

&lt;p&gt;Privacy setup: zero analytics, zero telemetry, no intermediary server. Your Anthropic and Brave API keys live in &lt;code&gt;chrome.storage.sync&lt;/code&gt;, encrypted by Chrome, and requests go directly from your browser to &lt;code&gt;api.anthropic.com&lt;/code&gt; and &lt;code&gt;api.search.brave.com&lt;/code&gt;. Nothing passes through anything I run.&lt;/p&gt;

&lt;p&gt;Manifest V3. Works on any page Chrome renders.&lt;/p&gt;

&lt;p&gt;The repo, including the full extension source: github.com/robertnowell/rabbitholes&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>productivity</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Why most MCP servers stay invisible after launch</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Wed, 15 Apr 2026 15:03:16 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/why-most-mcp-servers-stay-invisible-after-launch-kp4</link>
      <guid>https://forem.com/palo_alto_ai/why-most-mcp-servers-stay-invisible-after-launch-kp4</guid>
      <description>&lt;p&gt;The MCP ecosystem is moving fast. New servers ship every week, but there's no distribution infrastructure built for indie builders — no equivalent of Product Hunt for agents, no curator reliably picking up your tool. You submit to one directory, maybe post once on Bluesky, and then the work of showing up consistently loses to whatever you're actually building.&lt;/p&gt;

&lt;p&gt;I wrote marketing-pipeline to handle that recurring work. The angle that mattered to me was MCP servers specifically: one command onboards a project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;marketing onboard &lt;span class="nt"&gt;--name&lt;/span&gt; my-tool &lt;span class="nt"&gt;--repo&lt;/span&gt; owner/repo &lt;span class="nt"&gt;--kind&lt;/span&gt; mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It fetches your README, extracts the problem, facts, and content angles into &lt;code&gt;projects.yml&lt;/code&gt;, and routes the project to the right directories — MCP Registry, Smithery, Glama, PulseMCP — based on the &lt;code&gt;kind&lt;/code&gt; field. Claude Code skills route to awesome-claude-code instead; browser extensions go to the Chrome Web Store submission queue.&lt;/p&gt;

&lt;p&gt;From there, a GitHub Actions cron runs at 14:00 UTC on weekdays. It rotates through projects × angles × channels, picks the least-recently-used angle, drafts a post, and publishes. Bluesky, Dev.to, Hashnode, Mastodon. Per-channel character limits are enforced in code: 280 for X, 300 for Bluesky, 500 for Mastodon, 150–400 words for Dev.to and Hashnode.&lt;/p&gt;

&lt;p&gt;The part I spent the most time on was the anti-slop gate in &lt;code&gt;pipeline/antislop.py&lt;/code&gt;. It hard-rejects specific tokens — 'excited', 'game-changer', 'AI-powered', emoji, hashtags, exclamation points — before anything goes out. The posts that survive read like a practitioner wrote them, not a marketing template.&lt;/p&gt;

&lt;p&gt;One constraint worth knowing: awesome-claude-code submissions can't be automated. Their rules require a human to file a GitHub issue. The pipeline generates the payload and flags it; you submit once, manually.&lt;/p&gt;

&lt;p&gt;github.com/robertnowell/marketing-pipeline&lt;/p&gt;

</description>
      <category>automation</category>
      <category>marketing</category>
      <category>mcp</category>
      <category>showdev</category>
    </item>
    <item>
      <title>When one translation isn't enough</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:15:56 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/when-one-translation-isnt-enough-2dnc</link>
      <guid>https://forem.com/palo_alto_ai/when-one-translation-isnt-enough-2dnc</guid>
      <description>&lt;p&gt;I was drafting a message to my girlfriend in Farsi — something small, just that I'd missed her that day — and Google Translate gave me one option. No indication of whether it was tender or clinical, whether a native speaker would find it warm or weirdly formal. I sent it anyway and she laughed, kindly. It sounded like a receipt.&lt;/p&gt;

&lt;p&gt;So I built konid.&lt;/p&gt;

&lt;p&gt;The core behavior: you describe what you want to say, and it returns three translations ordered casual to formal, with a note explaining the register difference between them. Not "here's the word" but "here's what each one signals to a native speaker and when you'd reach for it."&lt;/p&gt;

&lt;p&gt;For the Farsi version of "I missed you today" the three options ranged from something you'd text a close partner to something that reads as almost literary — and the nuance note explained which one actually sounds like a person rather than a phrase card. Audio pronunciation plays through your speakers via node-edge-tts, no API key needed.&lt;/p&gt;

&lt;p&gt;It covers 13+ languages: Mandarin, Japanese, Korean, Spanish, French, German, Portuguese, Italian, Russian, Arabic, Hindi, Farsi, and more.&lt;/p&gt;

&lt;p&gt;The setup I use daily:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add konid-ai &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; konid-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That installs it as an MCP server in Claude Code. It also works in Cursor, VS Code Copilot, Windsurf, Zed, JetBrains, and Claude Cowork. If you're on ChatGPT, there's a Developer mode install via &lt;code&gt;https://konid.fly.dev/mcp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I kept reaching for it when drafting work emails in Spanish — not just to get through the task but to actually understand why one phrasing felt more professional than another. The register comparison does that work.&lt;/p&gt;

&lt;p&gt;MIT licensed. github.com/robertnowell/konid-language-learning&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nlp</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Eleven behaviors define Claude fluency. I was using three.</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Wed, 15 Apr 2026 10:55:47 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/eleven-behaviors-define-claude-fluency-i-was-using-three-2ga1</link>
      <guid>https://forem.com/palo_alto_ai/eleven-behaviors-define-claude-fluency-i-was-using-three-2ga1</guid>
      <description>&lt;p&gt;Anthropologic's February 2026 study classified 11 observable collaboration behaviors across 9,830 Claude conversations — things like delegation depth, discernment quality, how you frame ambiguous tasks. I'd been using Claude Code every day for months, but when I looked at that taxonomy honestly, I could count the behaviors I actually varied on one hand.&lt;/p&gt;

&lt;p&gt;skill-tree runs against your local Claude Code or Cowork session history, classifies the same 11 behaviors using the same framework, and maps where you cluster.&lt;/p&gt;

&lt;p&gt;The classifier is Claude Haiku on Fly.io, takes 30–60 seconds end-to-end across a 7-step pipeline: find session files, extract user messages, classify, assign archetype, synthesize narrative, render, return a stable URL. The archetypes are rendered as tarot cards with museum art — seven total, one assigned per analysis. Live example at skill-tree-ai.fly.dev/fixture/illuminator.&lt;/p&gt;

&lt;p&gt;The part I actually built it for: it picks one behavior you haven't touched and sets it as a growth quest that persists into your next session via the SessionStart hook. Not a generic tip — a specific behavior from the 4D AI Fluency Framework (Description, Discernment, Delegation axes) that your own log shows you've skipped.&lt;/p&gt;

&lt;p&gt;Install in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude plugin marketplace add robertnowell/ai-fluency-skill-cards
claude plugin &lt;span class="nb"&gt;install &lt;/span&gt;skill-tree-ai@ai-fluency-skill-cards
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also available as an MCP server (npm: &lt;code&gt;skill-tree-ai&lt;/code&gt;) for Cursor, VS Code, Windsurf.&lt;/p&gt;

&lt;p&gt;github.com/robertnowell/skill-tree&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Terminal themes optimize for syntax. Claude Code isn't syntax.</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Tue, 14 Apr 2026 19:32:49 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/terminal-themes-optimize-for-syntax-claude-code-isnt-syntax-28o</link>
      <guid>https://forem.com/palo_alto_ai/terminal-themes-optimize-for-syntax-claude-code-isnt-syntax-28o</guid>
      <description>&lt;p&gt;For the first few months of using Claude Code, I assumed eye fatigue after long sessions was just the cost of the work. It wasn't. It was a theme designed for syntax highlighting running against a screen that was mostly English prose — tool output, reasoning traces, permission prompts, explanations. The color roles were wrong for the job.&lt;/p&gt;

&lt;p&gt;kleIn-blue is four macOS Terminal.app themes built around Yves Klein's IKB pigment, tuned specifically for how Claude Code actually uses ANSI slots.&lt;/p&gt;

&lt;p&gt;The concrete problem that shaped every contrast decision: pure IKB (hex 002FA7) fails APCA contrast as text on a dark ground — Lc -12, effectively invisible. But IKB is the whole point. The fix is a split: pure IKB in the ansi:blue slot, which Claude Code uses for decorative borders and highlights (doesn't need to be readable), and a lifted Klein-family A8BEF0 in ansi:blueBright, which is where permission-prompt text actually lands. You get the pigment where it's decorative and legibility where it's load-bearing.&lt;/p&gt;

&lt;p&gt;Contrast is enforced with APCA Lc gates per role: body &amp;gt;= 90, subtle &amp;gt;= 75, muted &amp;gt;= 45, accent &amp;gt;= 60. Klein Void Prot (V3) is the only variation where every single accent slot passes strict gates. The other three make deliberate tradeoffs — V2 (Sand &amp;amp; Sea) accepts claude-sand as a second hero color in ansi:redBright rather than neutralizing it; V4 (Gallery) maximizes void at the cost of some accent strictness.&lt;/p&gt;

&lt;p&gt;Installs as .terminal profile files. CommitMono-Regular ships with V1 and V3; IBM Plex Mono with V2 and V4, both dropped into ~/Library/Fonts/. One prerequisite worth knowing: Claude Code's /theme picker must be set to dark-ansi — if it's on a hardcoded RGB theme, none of the ANSI slots are in play and the theme is ignored entirely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertnowell/klein-blue" rel="noopener noreferrer"&gt;https://github.com/robertnowell/klein-blue&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>cli</category>
      <category>design</category>
      <category>tooling</category>
    </item>
    <item>
      <title>GYMSHARK66: Forge Your Grind — scored 93/100</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Mon, 13 Apr 2026 21:55:53 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/gymshark66-forge-your-grind-scored-93100-3f9o</link>
      <guid>https://forem.com/palo_alto_ai/gymshark66-forge-your-grind-scored-93100-3f9o</guid>
      <description>&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%2Fp3j873dqnn6kx5to1dgv.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%2Fp3j873dqnn6kx5to1dgv.png" alt="GYMSHARK66: Forge Your Grind email design" width="800" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gymshark email generated and critiqued by Kopi. The automated design review scores layout hierarchy, mobile readability, CTA contrast, and 12 other criteria on a 0-100 scale before the email ships.&lt;/p&gt;

&lt;p&gt;This one scored 93/100 — top tier. The design uses a dark background with high-contrast CTAs, clear visual hierarchy from headline to body to action, and a single-column layout that works on mobile without reflow.&lt;/p&gt;

&lt;p&gt;Kopi generates complete HTML emails from a text brief in under 5 minutes. Every email gets scored before it leaves the tool. The public gallery at trykopi.ai/emails has 400+ emails that scored 80 or above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trykopi.ai/emails/gymshark66-forge-your-grind-B2e57qICMY" rel="noopener noreferrer"&gt;View the full email&lt;/a&gt; | &lt;a href="https://trykopi.ai" rel="noopener noreferrer"&gt;Try Kopi&lt;/a&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>design</category>
      <category>marketing</category>
      <category>ai</category>
    </item>
    <item>
      <title>You shipped an MCP server. Nobody found it. Here's what I did about it.</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Sun, 12 Apr 2026 22:17:23 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/you-shipped-an-mcp-server-nobody-found-it-heres-what-i-did-about-it-119b</link>
      <guid>https://forem.com/palo_alto_ai/you-shipped-an-mcp-server-nobody-found-it-heres-what-i-did-about-it-119b</guid>
      <description>&lt;p&gt;Built a few MCP servers and Claude Code skills over the past months. Each time: ship it, post once on Bluesky, get a handful of likes from people who already follow me, watch the repo go quiet. The tools weren't bad. The problem was I never showed up again after day one, because writing platform-specific posts, submitting to directories, and rotating through angles week after week is a part-time job I didn't sign up for.&lt;/p&gt;

&lt;p&gt;So I built &lt;code&gt;marketing-pipeline&lt;/code&gt; — a GitHub Actions-based system that handles the recurring distribution work once you've configured it.&lt;/p&gt;

&lt;p&gt;Onboarding a project is one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;marketing onboard &lt;span class="nt"&gt;--name&lt;/span&gt; konid &lt;span class="nt"&gt;--repo&lt;/span&gt; robertnowell/konid &lt;span class="nt"&gt;--kind&lt;/span&gt; mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That fetches the README, sends it to Claude, and writes &lt;code&gt;problem&lt;/code&gt;, &lt;code&gt;facts&lt;/code&gt;, and &lt;code&gt;angles&lt;/code&gt; into &lt;code&gt;projects.yml&lt;/code&gt;. From that point, a daily cron at 14:00 UTC picks the least-recently-used angle, drafts channel-specific posts (Bluesky at ≤300 chars, X at ≤280, Dev.to/Hashnode at 150–400 words), runs them through an antislop gate that hard-rejects tokens like &lt;code&gt;excited&lt;/code&gt;, &lt;code&gt;game-changer&lt;/code&gt;, &lt;code&gt;unlock&lt;/code&gt;, emoji, hashtags, and exclamation points before anything gets published, then posts across Bluesky, Dev.to, Hashnode, and Mastodon.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;kind&lt;/code&gt; field does directory routing automatically. &lt;code&gt;mcp-server&lt;/code&gt; gets submitted to the MCP Registry, Smithery, Glama, and PulseMCP. &lt;code&gt;claude-skill&lt;/code&gt; targets awesome-claude-code (the pipeline generates the payload, but their rules require a human to submit via their GitHub issue form — that one step is manual, once per project). &lt;code&gt;browser-extension&lt;/code&gt; goes to Chrome Web Store, Firefox AMO, and Edge Add-ons.&lt;/p&gt;

&lt;p&gt;The antislop gate is the part I'm most glad exists. Early drafts without it produced marketing copy I wouldn't have posted myself. The gate enforces the same voice bar as the hand-written posts I actually stand behind.&lt;/p&gt;

&lt;p&gt;The MCP and agent ecosystem is moving fast, but most indie builders don't have distribution infrastructure — they have a README and a hope. This is the plumbing I wished existed when I shipped my first server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/robertnowell/marketing-pipeline" rel="noopener noreferrer"&gt;https://github.com/robertnowell/marketing-pipeline&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>opensource</category>
      <category>marketing</category>
      <category>automation</category>
    </item>
    <item>
      <title>konid: say what you mean in 13+ languages, not what Google Translate thinks you mean</title>
      <dc:creator>J Now</dc:creator>
      <pubDate>Sun, 12 Apr 2026 19:42:57 +0000</pubDate>
      <link>https://forem.com/palo_alto_ai/konid-say-what-you-mean-in-13-languages-not-what-google-translate-thinks-you-mean-4l63</link>
      <guid>https://forem.com/palo_alto_ai/konid-say-what-you-mean-in-13-languages-not-what-google-translate-thinks-you-mean-4l63</guid>
      <description>&lt;p&gt;I wanted to tell my girlfriend 'I missed you today' in Farsi and have it land right — not phrasebook-stiff, not accidentally formal in a way that reads cold. Google Translate gives one answer. It doesn't tell you whether that answer sounds like a text message or a letter to a government office.&lt;/p&gt;

&lt;p&gt;So I built konid: you give it anything you want to say, it returns three versions ordered casual to formal, with a note on register and cultural context for each. Mandarin, Japanese, Korean, Spanish, French, German, Portuguese, Italian, Russian, Arabic, Hindi, and a few more — 13+ total. Audio pronunciation plays directly through your speakers via node-edge-tts, no API key required.&lt;/p&gt;

&lt;p&gt;The three-option structure is the whole point. For 'I missed you today' in Spanish you might get:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Te extrañé hoy&lt;/em&gt; — casual, direct, what you'd text&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Hoy te he echado de menos&lt;/em&gt; — slightly warmer, more felt, common in Spain&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Tu ausencia se hizo notar hoy&lt;/em&gt; — formal, almost literary, wrong register for a partner&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The nuance note tells you which to pick and why. That's the thing a phrasebook skips.&lt;/p&gt;

&lt;p&gt;I use it as an MCP server inside Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add konid-ai &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; konid-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also works in Cursor, VS Code Copilot, Windsurf, Zed, JetBrains, and Claude Cowork. If you're on ChatGPT, enable Developer mode and add the endpoint &lt;code&gt;https://konid.fly.dev/mcp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The name: konid (کنید) is Farsi for 'do' — take action.&lt;/p&gt;

&lt;p&gt;MIT licensed. github.com/robertnowell/konid-language-learning&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>languagelearning</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
