<?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: Charles Ouimet</title>
    <description>The latest articles on DEV Community by Charles Ouimet (@couimet).</description>
    <link>https://dev.to/couimet</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%2F1475576%2Fd36deeb8-78e0-4310-9748-efdf225ed9e9.jpeg</url>
      <title>DEV Community: Charles Ouimet</title>
      <link>https://dev.to/couimet</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/couimet"/>
    <language>en</language>
    <item>
      <title>I thought I was DRY-ing. I may have been double-paying.</title>
      <dc:creator>Charles Ouimet</dc:creator>
      <pubDate>Tue, 21 Apr 2026 12:30:29 +0000</pubDate>
      <link>https://dev.to/couimet/i-thought-i-was-dry-ing-i-may-have-been-double-paying-5dli</link>
      <guid>https://dev.to/couimet/i-thought-i-was-dry-ing-i-may-have-been-double-paying-5dli</guid>
      <description>&lt;h2&gt;
  
  
  Something was off
&lt;/h2&gt;

&lt;p&gt;A few weeks after publishing &lt;a href="https://dev.to/couimet/from-vide-coding-to-supercharged-vibe-guiding-6nm"&gt;From Vide Coding to Supercharged Vibe Guiding&lt;/a&gt;, I landed &lt;a href="https://github.com/couimet/my-claude-skills/pull/121" rel="noopener noreferrer"&gt;pull/121&lt;/a&gt; — a follow-up refactor that made &lt;code&gt;/scratchpad&lt;/code&gt;, &lt;code&gt;/question&lt;/code&gt;, and &lt;code&gt;/commit-msg&lt;/code&gt; "self-contained" by inlining a foundation skill's logic into each of them. I was expecting lighter sessions afterwards. I couldn't tell if I got them. The next refactor on my list was "inline more of these foundations" and I caught myself about to make the same bet twice — without ever having checked whether the first one paid off.&lt;/p&gt;

&lt;p&gt;My theory at that point, the one driving both refactors, was that the foundation skills were what cost too much. &lt;code&gt;/code-ref&lt;/code&gt; for code-link format, &lt;code&gt;/github-ref&lt;/code&gt; for issue-URL format, &lt;code&gt;/issue-context&lt;/code&gt; for figuring out which directory a scratchpad should go in — all auto-consulted by Claude constantly. The working assumption was that the cross-references themselves were the tax. Inline the rules, kill the foundations, buy the tokens back.&lt;/p&gt;

&lt;p&gt;My hypothesis may have had the cost in the wrong place. At least, an independent audit thought it did.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I let another Claude run the audit
&lt;/h2&gt;

&lt;p&gt;Doing the audit myself would have confirmed my bias. So I opened a fresh Claude Code session, told it explicitly not to run my own &lt;code&gt;/audit-efficiency&lt;/code&gt; skill, not to read my README or CHANGELOG, and asked six specific questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where is token budget being spent unnecessarily?&lt;/li&gt;
&lt;li&gt;How often is each overhead paid (once per session, once per invocation, once per skill type)?&lt;/li&gt;
&lt;li&gt;Rank the findings with your own labels. Don't use the HIGH/MEDIUM/LOW my existing audit skill uses.&lt;/li&gt;
&lt;li&gt;For each top finding, propose at least two fixes including "do nothing."&lt;/li&gt;
&lt;li&gt;Separately, flag anti-patterns about reliability and maintainability, not just efficiency.&lt;/li&gt;
&lt;li&gt;End with: "What question would you have asked me before starting this audit if you could?"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;The full prompt, verbatim, with a short note on its design rationale, lives in the repo at &lt;a href="https://github.com/couimet/my-claude-skills/blob/main/docs/run-an-audit.md" rel="noopener noreferrer"&gt;docs/run-an-audit.md&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Claude dropped a timestamped report in &lt;code&gt;/tmp/&lt;/code&gt;. I read it cold. The executive summary opened with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The largest recurring cost in this collection is a self-inflicted duplication of branch-parsing + filename logic inlined into &lt;code&gt;scratchpad&lt;/code&gt;, &lt;code&gt;question&lt;/code&gt;, and &lt;code&gt;commit-msg&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The day before, I'd refactored those three skills to make them "self-contained" — taken about 35 lines of branch-parsing Markdown out of a shared foundation and pasted the same block into each caller. The idea was to stop paying for the foundation's auto-consultation. What actually happened: the foundation kept auto-consulting anyway (its description line advertised itself for exactly that workflow), the same logic was now sitting in three places, and the copies had already started drifting. The foundation's examples list didn't match the inlined copies and I hadn't noticed. So I had two copies of drifting logic and, if the audit's cost model is right, was paying for both.&lt;/p&gt;

&lt;h2&gt;
  
  
  My hypothesis was backwards
&lt;/h2&gt;

&lt;p&gt;I'd gone in assuming DRY-via-cross-references was the tax. The audit's sharper version was more like: &lt;em&gt;half-finished migrations can cost tokens, and deterministic logic in Markdown tends to cost tokens whether it's DRY or not.&lt;/em&gt; That's a working theory, not a measurement — but it's a theory I was already primed to believe once the drift was in front of me.&lt;/p&gt;

&lt;p&gt;The audit pointed at two skills it thought were well-shaped — &lt;code&gt;/auto-number&lt;/code&gt; and &lt;code&gt;/ensure-gitignore&lt;/code&gt;. Both are foundation skills whose SKILL.md just documents a shell-script contract. The script does the work. Claude calls it and reads one line of stdout. Zero reasoning burned per invocation.&lt;/p&gt;

&lt;p&gt;That was the pattern I should have been trying to extend. With the audit in hand, &lt;a href="https://github.com/couimet/my-claude-skills/pull/121" rel="noopener noreferrer"&gt;pull/121&lt;/a&gt; looks like the wrong direction — it added more Markdown where, in retrospect, a shell script fits better.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the audit found
&lt;/h2&gt;

&lt;p&gt;Findings in my paraphrase of the audit, ranked by how often it thought the cost was paid:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F1, per-invocation bleed.&lt;/strong&gt; The branch-parsing + filename block inlined into &lt;code&gt;/scratchpad&lt;/code&gt;, &lt;code&gt;/question&lt;/code&gt;, and &lt;code&gt;/commit-msg&lt;/code&gt;. Paid every time any of them fires, plus transitively when &lt;code&gt;/start-issue&lt;/code&gt;, &lt;code&gt;/tackle-scratchpad-block&lt;/code&gt;, &lt;code&gt;/finish-issue&lt;/code&gt;, and &lt;code&gt;/tackle-pr-comment&lt;/code&gt; invoke them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F2, per-session surtax.&lt;/strong&gt; A three-line "Output Format" epilogue (hard-wrap rule, code-reference rule, GitHub-URL rule) copy-pasted into 11 skills. Two existing foundations (&lt;code&gt;/code-ref&lt;/code&gt;, &lt;code&gt;/github-ref&lt;/code&gt;) already covered the same rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F3, structural debt.&lt;/strong&gt; &lt;code&gt;/issue-context&lt;/code&gt; was in a halfway state. Its content had drifted from the inlined copies. A direction had to be picked and finished.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F4, per-session surtax.&lt;/strong&gt; The two longest skill descriptions (&lt;code&gt;/scratchpad&lt;/code&gt; at 316 chars, &lt;code&gt;/tackle-scratchpad-block&lt;/code&gt; at 275) loaded into the catalog on every session, even when neither was invoked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;F5, structural debt verging on bleed.&lt;/strong&gt; The step-JSON schema redrawn in five places instead of once.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pivot
&lt;/h2&gt;

&lt;p&gt;Before any edits, I worked through six scoping questions in a &lt;code&gt;/question&lt;/code&gt; file and had the Claude session read them back. One question carried most of the weight: pick &lt;em&gt;delete-and-script&lt;/em&gt;, &lt;em&gt;delete-and-inline-more&lt;/em&gt;, &lt;em&gt;restore-the-foundation&lt;/em&gt;, or &lt;em&gt;status quo&lt;/em&gt; for &lt;code&gt;/issue-context&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I picked the script route. I'd already done it twice. &lt;code&gt;/auto-number&lt;/code&gt; collapses "scan this directory, find the highest number, add one, zero-pad it" into one Bash call. &lt;code&gt;/ensure-gitignore&lt;/code&gt; collapses "read the file, check for the sentinel, append if missing" the same way. "Read the branch, extract the issue ID, decide where the file goes, slugify the description, and auto-number it" is the same shape of problem.&lt;/p&gt;

&lt;p&gt;I called it &lt;code&gt;target-path.sh&lt;/code&gt;. One call, one line of stdout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skills/issue-context/target-path.sh &lt;span class="nt"&gt;--type&lt;/span&gt; scratchpads &lt;span class="nt"&gt;--description&lt;/span&gt; &lt;span class="s2"&gt;"audit follow-up"&lt;/span&gt;
&lt;span class="c"&gt;# → .claude-work/issues/120/scratchpads/0003-audit-follow-up.txt&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of &lt;code&gt;/scratchpad&lt;/code&gt;, &lt;code&gt;/question&lt;/code&gt;, and &lt;code&gt;/commit-msg&lt;/code&gt; dropped from a roughly 45-line Step 1 block to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run these two commands as parallel tool calls. They are independent.
&lt;span class="p"&gt;
-&lt;/span&gt; skills/issue-context/target-path.sh --type &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt; --description "$ARGUMENTS"
&lt;span class="p"&gt;-&lt;/span&gt; skills/ensure-gitignore/ensure-gitignore.sh

Use the stdout of the first command as the full file path.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;/issue-context&lt;/code&gt; foundation went from 118 lines of branch-parsing prose to 30 lines that just document the script's contract.&lt;/p&gt;

&lt;p&gt;For F2, I folded the hard-wrap rule plus the two reference-format rules into a single new &lt;code&gt;/prose-style&lt;/code&gt; foundation. Then I deleted the epilogues from all 11 callers and replaced each with a one-line pointer: &lt;code&gt;Formatting: see /prose-style&lt;/code&gt;. The standalone &lt;code&gt;/code-ref&lt;/code&gt; and &lt;code&gt;/github-ref&lt;/code&gt; foundations got folded into &lt;code&gt;/prose-style&lt;/code&gt; too, then deleted. Side effect: a dangling symlink at &lt;code&gt;~/.claude/skills/prose-style&lt;/code&gt; that had been pointing at a non-existent directory for months finally had something to point at. I hadn't noticed it was broken.&lt;/p&gt;

&lt;p&gt;F4 (descriptions) and F5 (JSON schema redrawn) were one-shot edits. Shrink two descriptions. Replace three inline JSON blocks with references to the authoritative schema in &lt;code&gt;/scratchpad&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this might save in tokens
&lt;/h2&gt;

&lt;p&gt;Counting SKILL.md content only, the before state was roughly 25,600 tokens and the after state is roughly 21,500. About 4,100 tokens lighter, call it 16%. Treat every token count here as a ~4-chars-per-token ballpark, not a microbenchmark.&lt;/p&gt;

&lt;p&gt;The static diff is the part I can actually count. Everything beyond that is arithmetic on the audit's cost model, not a measurement — token consumption is hard to predict when you're not deep in how these systems load context. So take what follows as "if the audit is roughly right, this is what the math would look like."&lt;/p&gt;

&lt;p&gt;On a typical full-time coding day I run this loop 25+ times: plan via &lt;code&gt;/scratchpad&lt;/code&gt;, surface a design question via &lt;code&gt;/question&lt;/code&gt; when something needs one, tackle a block, draft a &lt;code&gt;/commit-msg&lt;/code&gt;. That's only about three cycles an hour. When I'm iterating on small pieces, I easily hit 10 cycles an hour. By lunchtime I've already blown past what used to feel like a full day's worth of context.&lt;/p&gt;

&lt;p&gt;If the audit's model holds, each cycle was spending around 140 tokens of branch-parsing Markdown re-reasoned per &lt;code&gt;/scratchpad&lt;/code&gt; call, the same pattern on &lt;code&gt;/question&lt;/code&gt; and &lt;code&gt;/commit-msg&lt;/code&gt;, plus the &lt;code&gt;/issue-context&lt;/code&gt; foundation body pulled in by description match whenever any of them fired. Call it 500 to 1,000 tokens per cycle in duplicated logic.&lt;/p&gt;

&lt;p&gt;Multiply by 25 cycles and the refactor might buy back somewhere in the tens of thousands of tokens a day. Double that on a heavy iteration day. The 4,100 tokens I shaved off the static diff is the boring headline; the number that might actually change my workday is closer to 25,000 to 50,000 tokens not being burned on the same deterministic logic over and over. Would I have noticed that in practice? Honestly, I don't know. The real move — the one I should have started with — is to measure often and keep optimizing for whatever actually shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm taking away
&lt;/h2&gt;

&lt;p&gt;"DRY is good" and "DRY costs tokens" feel like slogans that don't quite capture what I ran into. What I'm starting to think matters more is whether the logic you're trying to deduplicate is deterministic. When it is, my bet is Markdown's the wrong container — a script that returns one line of stdout fits the shape better, and lets Claude spend its reasoning on the parts that need it. The three scripts carrying the load here (&lt;code&gt;auto-number.sh&lt;/code&gt;, &lt;code&gt;ensure-gitignore.sh&lt;/code&gt;, and now &lt;code&gt;target-path.sh&lt;/code&gt;) all fit that shape.&lt;/p&gt;

&lt;p&gt;The halfway migration is the one the audit saved me from. My previous refactor inlined three skills and left the foundation in place, and I'd have kept maintaining both without realizing the shape was broken. Committing to either direction would probably have been cheaper than the in-between state I shipped.&lt;/p&gt;

&lt;p&gt;One more thing about the audit itself. If I'd run it myself I'd have confirmed my hypothesis and doubled down on inlining — the same move that caused the problem in the first place. Pointing a fresh Claude session explicitly at what &lt;em&gt;not&lt;/em&gt; to look at was the cheapest way I had to step outside my own framing. Obvious in hindsight. Wasn't at the time.&lt;/p&gt;

&lt;p&gt;Which leads to the last decision in this refactor: I deleted my own &lt;code&gt;/audit-efficiency&lt;/code&gt; skill. Once the cold audit clearly produced a stronger report, keeping the biased version around made it likely I'd reach for it next time. The prompt from this post replaces it at &lt;a href="https://github.com/couimet/my-claude-skills/blob/main/docs/run-an-audit.md" rel="noopener noreferrer"&gt;docs/run-an-audit.md&lt;/a&gt; — a file you paste from, not a skill you invoke. That's the whole operational artifact now.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to try this
&lt;/h2&gt;

&lt;p&gt;The prompt lives in the repo at &lt;a href="https://github.com/couimet/my-claude-skills/blob/main/docs/run-an-audit.md" rel="noopener noreferrer"&gt;docs/run-an-audit.md&lt;/a&gt;. Copy it and paste it into a fresh Claude Code session.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written alongside &lt;a href="https://github.com/couimet/my-claude-skills/pull/122" rel="noopener noreferrer"&gt;the refactor PR itself&lt;/a&gt; using the same skills it describes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devtools</category>
      <category>productivity</category>
    </item>
    <item>
      <title>From Vide Coding to Supercharged Vibe Guiding</title>
      <dc:creator>Charles Ouimet</dc:creator>
      <pubDate>Mon, 16 Mar 2026 13:52:14 +0000</pubDate>
      <link>https://dev.to/couimet/from-vide-coding-to-supercharged-vibe-guiding-6nm</link>
      <guid>https://dev.to/couimet/from-vide-coding-to-supercharged-vibe-guiding-6nm</guid>
      <description>&lt;h2&gt;
  
  
  It's Not a Typo
&lt;/h2&gt;

&lt;p&gt;"Vide" means &lt;em&gt;empty&lt;/em&gt; in French. And that's exactly what unstructured AI coding produces when the vibes run out.&lt;/p&gt;

&lt;p&gt;I run multiple &lt;a href="https://code.claude.com/docs" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; agents in parallel across git worktrees every day. I'm not here to tell you to stop using AI for development. But when a SaaStr founder &lt;a href="https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/" rel="noopener noreferrer"&gt;lost his production database&lt;/a&gt; to an AI coding agent in July 2025, it confirmed something I'd already learned: vibes alone aren't enough.&lt;/p&gt;

&lt;p&gt;The answer isn't less AI. It's more guidance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Missing Piece: Guidance
&lt;/h2&gt;

&lt;p&gt;Claude Code is powerful, but out-of-the-box sessions are ephemeral — context evaporates between tasks, there's no trail of decisions, and commits happen whenever the AI feels like it.&lt;/p&gt;

&lt;p&gt;So I built a set of &lt;a href="https://github.com/couimet/my-claude-skills" rel="noopener noreferrer"&gt;custom skills&lt;/a&gt; — portable markdown instructions that Claude follows when you type &lt;code&gt;/skill-name&lt;/code&gt; in Claude Code (&lt;a href="https://code.claude.com/docs/en/skills" rel="noopener noreferrer"&gt;skills are a standard Claude Code extension mechanism&lt;/a&gt;). They live in &lt;code&gt;~/.claude/skills/&lt;/code&gt; — install once, use everywhere. They encode a simple contract:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Questions go to files, not chat.&lt;/strong&gt; &lt;code&gt;/question&lt;/code&gt; creates a structured document I edit directly — not a conversation that scrolls away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never implement before the plan is approved.&lt;/strong&gt; &lt;code&gt;/scratchpad&lt;/code&gt; saves plans to files I control. I iterate until I'm satisfied, and every block the AI tackles comes from a plan I've reviewed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never auto-commit.&lt;/strong&gt; &lt;code&gt;/commit-msg&lt;/code&gt; writes a draft file. I review and commit manually.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't complicated rules. But they're the difference between vide coding and what I call &lt;em&gt;vibe guiding&lt;/em&gt; — you steer the AI through a structured workflow instead of hoping it gets the next thing right.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Optional but useful: I also use RangeLink to navigate scratchpads with precise line references — it makes reviewing plans faster, but the skills work perfectly without it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Looks Like in Practice
&lt;/h2&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%2Fj9teygum186385s2l6ye.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%2Fj9teygum186385s2l6ye.png" alt="Skill workflow diagram as of March 2026" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Skills keep evolving — see the &lt;a href="https://github.com/couimet/my-claude-skills#see-it-in-action" rel="noopener noreferrer"&gt;latest workflow&lt;/a&gt; on GitHub.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I documented a &lt;a href="https://ouimet.info/follow-alongs/my-claude-skills-issues-10.html" rel="noopener noreferrer"&gt;full issue lifecycle&lt;/a&gt; — every artifact real, nothing fabricated. Here's the compressed version:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. &lt;code&gt;/start-issue&lt;/code&gt;&lt;/strong&gt; — I point Claude at a GitHub issue. It fetches the details, creates a branch, explores the codebase, and writes an implementation plan via &lt;code&gt;/scratchpad&lt;/code&gt; with concrete steps — each with its own status and defined interdependencies. Then it stops and waits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. I review the plan.&lt;/strong&gt; Sometimes I adjust scope. Sometimes I use &lt;code&gt;/question&lt;/code&gt; to surface design decisions in a structured file. The plan lives in a file I can read, edit, and come back to — not buried in a chat transcript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. &lt;code&gt;/tackle-scratchpad-block&lt;/code&gt;&lt;/strong&gt; — I point Claude at one step or a set of steps from the plan. It executes them, runs tests, updates each step's status in the scratchpad, and writes a commit message draft. It does not commit. I review the diff, review the message, and commit when I'm satisfied.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Repeat&lt;/strong&gt; until all steps are done. Because steps have explicit interdependencies, independent ones can be tackled by parallel agents within the same worktree for faster throughput. One caveat: parallel agents may touch the same files across different tasks, so hand-picking staged blocks for truly atomic commits gets tricky — the practical trade-off is to embrace the parallelism and accept slightly larger commits.&lt;/p&gt;

&lt;p&gt;The scratchpad evolves as I iterate — I might spin off a new &lt;code&gt;/scratchpad&lt;/code&gt; with pros and cons to evaluate an approach, then integrate the decision back into the main plan. The thought process lives in files, not in my head.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. &lt;code&gt;/finish-issue&lt;/code&gt;&lt;/strong&gt; — Claude runs verification (lint, tests), checks if documentation needs updating, and generates a PR description. It does not create the PR. I review and submit.&lt;/p&gt;

&lt;p&gt;At every stage, I'm in the loop. The AI does the heavy lifting. I do the steering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;Skills are workflow steps with hard stops built in. Every skill produces a file I review before anything becomes permanent — plans, questions, commit messages, PR descriptions. Nothing reaches the repo without passing through my eyes first. That's what makes it vibe &lt;em&gt;guiding&lt;/em&gt;: the AI brings the force, the workflow lets me guide it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The skills are open source and designed to be portable — they work in any project via symlinks:&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 git@github.com:couimet/my-claude-skills.git ~/src/my-claude-skills
~/src/my-claude-skills/install.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the full "show the work" follow-along: &lt;a href="https://ouimet.info/follow-alongs/my-claude-skills-issues-10.html" rel="noopener noreferrer"&gt;ouimet.info/follow-alongs/my-claude-skills-issues-10&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vide → Vibe Guiding
&lt;/h2&gt;

&lt;p&gt;Vibe coding is fun until the vibes run out. When they do, you're left with duplicated code instead of refactored, missing dependency injection, and untestable first drafts.&lt;/p&gt;

&lt;p&gt;But here's what I've found: once you give the AI proper guidance through structured skills, it &lt;em&gt;continues&lt;/em&gt; with that quality. Guide it toward dependency injection once, and it keeps using the pattern. Set up testable architecture in the first step, and every subsequent step follows suit.&lt;/p&gt;

&lt;p&gt;That's supercharged vibe guiding. You're not fighting the AI or replacing it. You're giving it rails to run on — and then it runs far.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Inspired by &lt;a href="https://boristane.com/blog/how-i-use-claude-code/" rel="noopener noreferrer"&gt;Boris Tane's workflow article&lt;/a&gt;, this post was built with the same skills it describes — starting from &lt;a href="https://github.com/couimet/my-claude-skills/issues/20" rel="noopener noreferrer"&gt;issue #20&lt;/a&gt;. Over or under 10 skill invocations to go from blank file to what you're reading? Leave your guess below.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  About RangeLink
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/couimet/rangeLink#rangelink" rel="noopener noreferrer"&gt;RangeLink&lt;/a&gt; is an extension I built to create precise code references for AI assistants. One keybinding. Any AI, any tool. Character-level precision. Available for &lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt; and &lt;a href="https://open-vsx.org/extension/couimet/rangelink-vscode-extension" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>RangeLink v1.0.0: Perfected AI Workflows + The R-Keybinding Family</title>
      <dc:creator>Charles Ouimet</dc:creator>
      <pubDate>Tue, 16 Dec 2025 01:52:33 +0000</pubDate>
      <link>https://dev.to/couimet/rangelink-v100-perfected-ai-workflows-the-r-keybinding-family-104b</link>
      <guid>https://dev.to/couimet/rangelink-v100-perfected-ai-workflows-the-r-keybinding-family-104b</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%2Ff98z91jdfj0gthw2ketq.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%2Ff98z91jdfj0gthw2ketq.png" alt="RangeLink Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey folks! &lt;strong&gt;RangeLink v1.0.0&lt;/strong&gt; is here, and this feels like a real milestone.&lt;/p&gt;

&lt;p&gt;If you've been following along since &lt;a href="https://dev.to/couimet/rangelink-v030-one-keybinding-to-rule-them-all-2h01"&gt;v0.3.0&lt;/a&gt;, you know RangeLink brings character-level precision to code references and seamless paste destinations for AI workflows — all with one keybinding that works regardless of which AI assistant you're using. &lt;strong&gt;v1.0.0 perfects that experience&lt;/strong&gt; by eliminating a major v0.3.0 pain point and expanding your choices with new features.&lt;/p&gt;

&lt;p&gt;This isn't just a version bump — it's a commitment that RangeLink is mature, reliable, and ready for your daily workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's New in v1.0.0
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🎯 Perfected Paste Destinations (Major UX Improvement)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code Extension and Cursor AI now &lt;strong&gt;fully automatic&lt;/strong&gt; — no more manual Cmd+V paste!&lt;/li&gt;
&lt;li&gt;In v0.3.0, these destinations required you to manually paste after RangeLink copied the link. That workflow interruption is gone.&lt;/li&gt;
&lt;li&gt;All AI chat destinations now provide identical seamless UX: select code → link appears → keep typing.&lt;/li&gt;
&lt;li&gt;Remember "One Keybinding to Rule Them All"? &lt;strong&gt;In v1.0.0, it truly does.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🤖 GitHub Copilot Chat Integration (3rd AI Chat Option)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste destination for GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Expands your AI choices: Claude, Cursor AI, or Copilot — your preference, your workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⌨️ Complete R-Keybinding Family (New Commands)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;R-C&lt;/strong&gt;: Clipboard-only RangeLink generation (cross-project sharing with absolute paths, no destination unbind needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R-V&lt;/strong&gt;: Paste selected text directly to destination (not just links!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;R-J&lt;/strong&gt;: Jump to bound destination (no more tab hunting)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔄 Smart Bind with Confirmation (QoL)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick switching between destinations without manual unbind&lt;/li&gt;
&lt;li&gt;QuickPick dialog confirms before replacing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Feature Deep-Dives
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The v0.3.0 → v1.0.0 Evolution: Fully Automatic AI Chats
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The problem in v0.3.0:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude Code Extension and Cursor AI destinations worked like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select code → &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;RangeLink copied link to clipboard and opened chat panel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You manually pasted with Cmd+V&lt;/strong&gt; ← workflow interruption&lt;/li&gt;
&lt;li&gt;Continue typing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It worked, but that manual paste step broke the flow. Terminal and Text Editor destinations were already fully automatic, so the inconsistency was frustrating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution in v1.0.0:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All destinations now fully automatic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select code → &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Link appears in chat automatically&lt;/li&gt;
&lt;li&gt;Continue typing immediately&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How I did it (the technical bit):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The lightbulb moment came from &lt;a href="https://github.com/couimet/rangeLink/pull/136" rel="noopener noreferrer"&gt;PR #136&lt;/a&gt; when improving the Terminal destination. I realized &lt;code&gt;executeCommand()&lt;/code&gt; could programmatically trigger actions in VSCode extensions. For Claude Code and Cursor AI (which don't expose text insertion APIs), RangeLink could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set focus to the chat panel (RangeLink was already doing this)&lt;/li&gt;
&lt;li&gt;Copy link to clipboard&lt;/li&gt;
&lt;li&gt;Add a small delay (50-150ms) to ensure focus is ready&lt;/li&gt;
&lt;li&gt;Execute the paste command programmatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's a clipboard-based workaround, but from the user's perspective it's indistinguishable from true API-based insertion. The workflow is seamless, and that's what matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Claude Code, Cursor AI, and Copilot Chat all provide identical automatic paste UX. Choose your AI based on preference, not workflow limitations. The v0.3.0 promise of "One Keybinding to Rule Them All" is now fully delivered.&lt;/p&gt;




&lt;h3&gt;
  
  
  The R-Keybinding Family: R-C, R-V, R-J
&lt;/h3&gt;

&lt;p&gt;All RangeLink commands start with &lt;code&gt;Cmd+R&lt;/code&gt; (for &lt;strong&gt;R&lt;/strong&gt;ange*&lt;em&gt;L&lt;/em&gt;*ink), creating a memorable pattern. v1.0.0 completes the R-family with three new commands (R-C, R-V, R-J):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keybinding&lt;/th&gt;
&lt;th&gt;Not About...&lt;/th&gt;
&lt;th&gt;Actually Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R-L&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;R&lt;/strong&gt;ocket &lt;strong&gt;L&lt;/strong&gt;eague 🎮&lt;/td&gt;
&lt;td&gt;Generate RangeLink at current selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R-C&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;R&lt;/strong&gt;adio &lt;strong&gt;C&lt;/strong&gt;ontrol 📻&lt;/td&gt;
&lt;td&gt;Copy RangeLink to &lt;strong&gt;C&lt;/strong&gt;lipboard only (skip destination)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R-V&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;R&lt;/strong&gt;ecreational &lt;strong&gt;V&lt;/strong&gt;ehicle 🚐&lt;/td&gt;
&lt;td&gt;Paste selected text directly to destination (like &lt;strong&gt;V&lt;/strong&gt; for paste)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;R-J&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;R&lt;/strong&gt;oger &lt;strong&gt;J&lt;/strong&gt;unior&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;J&lt;/strong&gt;ump to your currently bound destination&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h4&gt;
  
  
  R-C: RangeLink Clipboard-Only Mode
&lt;/h4&gt;

&lt;p&gt;Sometimes you need a RangeLink but don't want it auto-pasting to your bound destination:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sharing links across projects or IDE instances&lt;/li&gt;
&lt;li&gt;Pasting into Slack, documentation, etc&lt;/li&gt;
&lt;li&gt;Validating references before sending to AI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;Cmd+R Cmd+C&lt;/code&gt;&lt;/strong&gt; generates a formatted RangeLink (e.g., &lt;code&gt;src/auth.ts#L42C10-L58C25&lt;/code&gt;) directly to clipboard, bypassing your bound destination entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key benefit:&lt;/strong&gt; No need to unbind your destination first. Generate clipboard-only links on demand while keeping your paste destination active.&lt;/p&gt;

&lt;p&gt;Supports both relative paths (same project) and absolute paths (cross-project sharing). Use &lt;code&gt;Cmd+R Cmd+Shift+C&lt;/code&gt; for absolute paths when sharing links across different projects or IDE instances.&lt;/p&gt;

&lt;h4&gt;
  
  
  R-V: Paste Text, Not Just Links 🚐
&lt;/h4&gt;

&lt;p&gt;You've bound RangeLink to your terminal or AI chat, and now you want to send actual code — not a link, but the &lt;strong&gt;selected text itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;Cmd+R Cmd+V&lt;/code&gt;&lt;/strong&gt; sends your selected text directly to your bound destination. Same seamless workflow: select code → &lt;code&gt;R-V&lt;/code&gt; → text appears → destination auto-focuses → keep typing.&lt;/p&gt;

&lt;p&gt;Why the RV emoji? Well, &lt;code&gt;R-V&lt;/code&gt; &lt;strong&gt;is&lt;/strong&gt; literally a Recreational Vehicle. I couldn't resist. 🚐&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Works with all destinations (Claude Code Extension, Cursor AI, GitHub Copilot Chat, Terminal, Text Editor) and handles multi-selection by concatenating with newlines. Perfect for quickly sharing code snippets with AI assistants — even if your current AI tool doesn't offer this feature natively.&lt;/p&gt;

&lt;h4&gt;
  
  
  R-J: Jump to Destination
&lt;/h4&gt;

&lt;p&gt;You've bound a terminal or text editor as your paste destination, but it's buried under other tabs or panes. Instead of hunting for it, hit &lt;strong&gt;&lt;code&gt;Cmd+R Cmd+J&lt;/code&gt;&lt;/strong&gt; to instantly jump to (and focus) your bound destination.&lt;/p&gt;

&lt;p&gt;Not about Roger Junior. Just a quick jump to where your links are going. 🎯&lt;/p&gt;




&lt;h3&gt;
  
  
  GitHub Copilot Chat: Your 3rd AI Chat Option
&lt;/h3&gt;

&lt;p&gt;v1.0.0 adds GitHub Copilot Chat support as a paste destination, giving you three AI chat options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code Extension&lt;/strong&gt; — Anthropic's official extension (works in VSCode and Cursor)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor AI&lt;/strong&gt; — Built into Cursor IDE&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot Chat&lt;/strong&gt; — GitHub's AI coding assistant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three provide identical automatic paste UX. Choose based on your AI preference, not workflow constraints.&lt;/p&gt;

&lt;p&gt;Bind via Command Palette → "Bind RangeLink to GitHub Copilot Chat Destination"&lt;/p&gt;




&lt;h3&gt;
  
  
  Smart Bind with Confirmation
&lt;/h3&gt;

&lt;p&gt;Switching between destinations is now frictionless. Run any "Bind to..." command when already bound, and RangeLink shows a QuickPick dialog confirming the switch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Currently bound to: Terminal
Switch to: Claude Code Chat?
[Yes] [No]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No need to unbind first—just quick switching with confirmation as your workflow demands.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why RangeLink Matters
&lt;/h2&gt;

&lt;p&gt;Built-in AI features are convenient, but they lock you into one AI model, one workflow, and usually only line-level precision. RangeLink gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Character-level precision&lt;/strong&gt; — Highlight exactly the function signature, the problematic condition, that one sneaky semicolon. Not the whole block. Most AI code-sharing tools only work at line-level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Any AI assistant&lt;/strong&gt; — Claude, GPT, Gemini, Copilot, whatever you prefer. No vendor lock-in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One keybinding memory&lt;/strong&gt; — Switch between Claude, Copilot, Cursor, or terminal assistants without relearning shortcuts. &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; works the same everywhere. Your muscle memory stays constant even as your AI toolkit evolves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Features your AI doesn't have&lt;/strong&gt; — &lt;code&gt;Cmd+R Cmd+V&lt;/code&gt; sends selected text directly to any AI chat. Even if your current tool doesn't offer this natively, RangeLink does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexible workflows&lt;/strong&gt; — Terminal for quick questions, scratchpad for complex prompts, direct AI chat integrations. All with the same seamless UX.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Universal format&lt;/strong&gt; — GitHub-style links that work everywhere (PRs, Slack, docs, teammates without RangeLink). RangeLinks aren't proprietary.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And with v1.0.0, the workflow is just as seamless as integrated tools — arguably better, because you're not limited to one AI vendor or workflow pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Install RangeLink:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt;: &lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt;: &lt;a href="https://open-vsx.org/extension/couimet/rangelink-vscode-extension" rel="noopener noreferrer"&gt;Open VSX Registry&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick start:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Command Palette → "Bind RangeLink to [your preferred destination]"&lt;/li&gt;
&lt;li&gt;Select code → Try the R-keybindings:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; — Generate RangeLink (auto-pastes to destination)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd+R Cmd+C&lt;/code&gt; — Clipboard-only copy (no destination paste)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd+R Cmd+V&lt;/code&gt; — Paste selected text directly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cmd+R Cmd+J&lt;/code&gt; — Jump to bound destination&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Cmd+Click any RangeLink in terminal or editor to navigate&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The text editor destination with a split-screen scratchpad is still my favorite for complex AI prompts — lets you iterate on context before sending. Give it a try!&lt;/p&gt;




&lt;h2&gt;
  
  
  How Are You Using RangeLink?
&lt;/h2&gt;

&lt;p&gt;RangeLink v1.0.0 is feature-complete and stable. The core vision is realized: character-level precision, seamless AI workflows, flexible paste destinations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'd love to hear about your usage patterns:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which destinations do you use most? (Terminal? Scratchpad? AI chat?)&lt;/li&gt;
&lt;li&gt;How are the R-keybindings fitting into your workflow?&lt;/li&gt;
&lt;li&gt;Any rough edges or unexpected behaviors?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your feedback shapes priorities. If you're interested in contributing—code, docs, ideas—check out &lt;a href="https://github.com/couimet/rangeLink/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt; or open a discussion. The codebase is TypeScript with comprehensive test coverage, and PRs are always welcome.&lt;/p&gt;

&lt;p&gt;Built something cool with RangeLink? Share it! Always fun to see how people are using the tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;If RangeLink is useful for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo&lt;/strong&gt; on &lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Report issues or share ideas&lt;/strong&gt; via &lt;a href="https://github.com/couimet/rangeLink/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Contribute&lt;/strong&gt; — TypeScript codebase with comprehensive test coverage, PRs welcome&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Share your workflows&lt;/strong&gt; — Drop a comment below or open a discussion&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://open-vsx.org/extension/couimet/rangelink-vscode-extension" rel="noopener noreferrer"&gt;Open VSX Registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/couimet/rangeLink/blob/main/packages/rangelink-vscode-extension/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>showdev</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>cursor</category>
    </item>
    <item>
      <title>RangeLink v0.3.0: One Keybinding to Rule Them All</title>
      <dc:creator>Charles Ouimet</dc:creator>
      <pubDate>Wed, 12 Nov 2025 04:00:54 +0000</pubDate>
      <link>https://dev.to/couimet/rangelink-v030-one-keybinding-to-rule-them-all-2h01</link>
      <guid>https://dev.to/couimet/rangelink-v030-one-keybinding-to-rule-them-all-2h01</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%2Ff98z91jdfj0gthw2ketq.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%2Ff98z91jdfj0gthw2ketq.png" alt="RangeLink Logo" width="256" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey folks! Just shipped &lt;strong&gt;RangeLink v0.3.0&lt;/strong&gt;, and I'm genuinely excited about this one.&lt;/p&gt;

&lt;p&gt;If you caught my &lt;a href="https://dev.to/couimet/i-built-a-vs-code-extension-to-stop-the-copy-paste-madness-3d7l"&gt;previous post about v0.2.1&lt;/a&gt;, you know RangeLink started as a way to share precise code references with AI assistants in the terminal. That's still there, but v0.3.0 takes it further: &lt;strong&gt;one keybinding (&lt;code&gt;Cmd+R Cmd+L&lt;/code&gt;) now sends your code references anywhere you need them.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Evolution
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;v0.2.0&lt;/strong&gt; launched with terminal binding — auto-send links to your integrated terminal where AI assistants can see them — plus clickable navigation to jump back to code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v0.3.0&lt;/strong&gt; introduces &lt;strong&gt;Paste Destinations&lt;/strong&gt; — a unified system that lets you bind RangeLink to wherever you're working: Claude Code Extension, Cursor AI, your terminal, or even a scratchpad file for drafting complex AI prompts.&lt;/p&gt;

&lt;p&gt;Same keybinding. Different destinations. Your choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Here's the thing about built-in AI features in editors: they're convenient, but they lock you into one AI model, one workflow, and usually only line-level precision. RangeLink gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Character-level precision&lt;/strong&gt; — Not just line 42, but &lt;code&gt;#L42C10-L58C25&lt;/code&gt; (that exact function signature, that specific condition)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any AI assistant&lt;/strong&gt; — Claude, GPT, Gemini, whatever you prefer. No vendor lock-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible workflows&lt;/strong&gt; — Terminal for quick questions, scratchpad for complex prompts, direct AI chat integrations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Universal format&lt;/strong&gt; — GitHub-style links that work everywhere (PRs, Slack, docs, teammates without RangeLink)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part? &lt;strong&gt;You don't give up any convenience.&lt;/strong&gt; Select code, hit &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt;, and your link appears exactly where you need it — with the same character-level precision that makes RangeLink special.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New in v0.3.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Paste Destinations (The Big One)
&lt;/h3&gt;

&lt;p&gt;Bind RangeLink to one destination at a time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code Extension&lt;/strong&gt; — Links open Claude's chat panel (works in VSCode and Cursor)*&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor AI&lt;/strong&gt; — Links open Cursor's AI chat*&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal&lt;/strong&gt; — Auto-paste links for terminal-based AI assistants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text Editor&lt;/strong&gt; — Draft complex prompts in any file (markdown, untitled, whatever)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All destinations share the same seamless UX: select code → &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; → link appears at your cursor position → destination auto-focuses → keep typing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(*) &lt;strong&gt;FULL DISCLAIMER:&lt;/strong&gt; Claude Code Extension and Cursor AI destinations use a clipboard-based workaround because their APIs don't support programmatic text insertion yet (as of Nov 2025). RangeLink copies the link and opens the chat panel, but you need to paste (&lt;code&gt;Cmd+V&lt;/code&gt; / &lt;code&gt;Ctrl+V&lt;/code&gt;) yourself. Terminal and Text Editor destinations fully auto-paste without manual intervention.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Editor Link Navigation
&lt;/h3&gt;

&lt;p&gt;Any RangeLink in any editor file (markdown, code, untitled) is now clickable. Hover to preview, Cmd+Click to navigate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; You're drafting a prompt in a scratchpad file with multiple code references. Before sending to your AI assistant, you can validate each link by clicking it — makes sure you're sharing the right context.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "One Keybinding" Philosophy
&lt;/h3&gt;

&lt;p&gt;Every AI tool has its own way to share code — different shortcuts, different formats, different workflows.&lt;/p&gt;

&lt;p&gt;RangeLink unifies it: &lt;strong&gt;&lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; works everywhere&lt;/strong&gt;, with &lt;strong&gt;character-level precision everywhere&lt;/strong&gt;, and connects to &lt;strong&gt;any AI assistant&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One keybinding to rule them all&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Excited
&lt;/h2&gt;

&lt;p&gt;This release makes RangeLink competitive with integrated AI features without sacrificing its core strengths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're not locked into one AI model&lt;/li&gt;
&lt;li&gt;You get more precision (characters, not just lines)&lt;/li&gt;
&lt;li&gt;Links work universally (paste them anywhere, share with anyone)&lt;/li&gt;
&lt;li&gt;The workflow is just as seamless as built-in tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly? The paste destinations architecture feels like the right foundation for whatever comes next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Behind the Scenes: Working with AI on RangeLink
&lt;/h2&gt;

&lt;p&gt;One thing I've been experimenting with: using AI assistants to help build RangeLink itself. I've progressively added instructions to &lt;a href="https://github.com/couimet/rangeLink/blob/main/CLAUDE.md" rel="noopener noreferrer"&gt;CLAUDE.md&lt;/a&gt; to guide how Claude Code helps me develop.&lt;/p&gt;

&lt;p&gt;A pattern I really like is the &lt;a href="https://github.com/couimet/rangeLink/blob/80f9432b82121161b6e227febe1afc4924b9f541/CLAUDE.md?plain=1#L64-L99" rel="noopener noreferrer"&gt;questions template&lt;/a&gt;. When Claude needs design decisions before implementing a feature, instead of asking questions in the terminal (which gets messy), it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Saves questions to a &lt;code&gt;.txt&lt;/code&gt; file in &lt;code&gt;.claude-questions/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Pre-fills recommended answers when it has context&lt;/li&gt;
&lt;li&gt;I edit the file with my decisions&lt;/li&gt;
&lt;li&gt;Claude reads my answers and proceeds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This keeps the workflow clean and creates a record of design decisions. The questions file becomes documentation.&lt;/p&gt;

&lt;p&gt;If you're working with AI on your projects, this pattern might be worth trying!&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Install RangeLink:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt;: &lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt;: &lt;a href="https://open-vsx.org/extension/couimet/rangelink-vscode-extension" rel="noopener noreferrer"&gt;Open VSX Registry&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick start:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Command Palette → "Bind RangeLink to [your preferred destination]"&lt;/li&gt;
&lt;li&gt;Select code → &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; (or Command Palette → "Copy Range Link" if you have keybinding conflicts)&lt;/li&gt;
&lt;li&gt;Your link is ready where you need it&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Try the text editor destination with a split-screen scratchpad — it's a game-changer for complex AI prompts.&lt;/p&gt;

&lt;p&gt;Would love to hear your feedback, especially if you're bouncing between different AI assistants!&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;If you find RangeLink useful, I'd love your support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo&lt;/strong&gt; on &lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — it helps others discover it&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Report bugs or request features&lt;/strong&gt; via &lt;a href="https://github.com/couimet/rangeLink/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt; — I've started adding ideas there, not yet organized into a roadmap but wanted to share visibility on what's on my mind&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Contribute&lt;/strong&gt; — the codebase is well-documented and PR-friendly&lt;/li&gt;
&lt;li&gt;🗣️ &lt;strong&gt;Share your feedback&lt;/strong&gt; — I'm actively iterating based on what the community needs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For vim/neovim users interested in building a plugin: the &lt;a href="https://github.com/couimet/rangeLink/tree/main/packages/rangelink-core-ts" rel="noopener noreferrer"&gt;core library is platform-agnostic&lt;/a&gt; and designed for multi-editor support. Would love to collaborate!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>showdev</category>
      <category>vscode</category>
      <category>tooling</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a VS Code Extension to Stop the Copy-Paste Madness</title>
      <dc:creator>Charles Ouimet</dc:creator>
      <pubDate>Sat, 08 Nov 2025 22:46:36 +0000</pubDate>
      <link>https://dev.to/couimet/i-built-a-vs-code-extension-to-stop-the-copy-paste-madness-3d7l</link>
      <guid>https://dev.to/couimet/i-built-a-vs-code-extension-to-stop-the-copy-paste-madness-3d7l</guid>
      <description>&lt;p&gt;Hey devs! I just shipped v0.2.1 of &lt;a href="https://github.com/couimet/rangeLink/tree/main/packages/rangelink-vscode-extension" rel="noopener noreferrer"&gt;&lt;strong&gt;RangeLink&lt;/strong&gt;&lt;/a&gt;, a VS Code/Cursor extension that fixes something that's been driving me (and probably you) crazy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://www.claude.com/product/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; running in a terminal &lt;em&gt;inside&lt;/em&gt; Cursor daily. And the constant copy-pasting between terminal and editor? Exhausting.&lt;/p&gt;

&lt;p&gt;One day, after the hundredth copy-paste, I got frustrated and just tried something: I sent Claude a link like &lt;code&gt;src/path/file.rb#L42C10-L58C25&lt;/code&gt; pointing to a specific code snippet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It just worked.&lt;/strong&gt; No explanation needed. Claude understood immediately.&lt;/p&gt;

&lt;p&gt;That was the lightbulb moment: &lt;strong&gt;precise code references should be universal&lt;/strong&gt;. Not just for AI assistants, but for code reviews, documentation, team collaboration — anywhere developers share code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What RangeLink Does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Create precise code references in one keystroke.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select some code in VS Code/Cursor&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; (Mac) or &lt;code&gt;Ctrl+R Ctrl+L&lt;/code&gt; (Windows/Linux)&lt;/li&gt;
&lt;li&gt;Done! Link is in your clipboard: &lt;code&gt;src/path/file.rb#L42C10-L58C25&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The notation is GitHub-inspired, so your teammates already know it. They don't even need RangeLink installed to understand your links.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Killer Feature (v0.2.1)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auto-paste to terminal&lt;/strong&gt; — this is where it gets good for Claude Code users (or any terminal-based workflow).&lt;/p&gt;

&lt;p&gt;One-time setup: bind your Claude Code terminal to RangeLink (Command Palette → "Bind Terminal"). Now every RangeLink you generate &lt;strong&gt;automatically appears in that terminal&lt;/strong&gt;. No copy-paste needed. Zero. None.&lt;/p&gt;

&lt;p&gt;Select code → hit the keybinding → the link is instantly in your terminal prompt, ready to send to Claude (or any AI assistant).&lt;/p&gt;

&lt;p&gt;The copy-paste workflow? Gone. You stay in flow. Even if you switch between multiple terminals, links always go to your bound terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; You can also &lt;strong&gt;Cmd+Click&lt;/strong&gt; (Mac) or &lt;strong&gt;Ctrl+Click&lt;/strong&gt; (Windows/Linux) any RangeLink in your terminal to jump straight back to that code. No more "wait, which file was that?" moments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You'll Love It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No more "around line 42"&lt;/strong&gt; — Share exact ranges with column precision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works everywhere&lt;/strong&gt; — Claude Code, VS Code, Cursor, GitHub, Slack, PRs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One keystroke&lt;/strong&gt; — &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; → link copied, done&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible paths&lt;/strong&gt; — Workspace-relative or absolute paths, your choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code reviews ("The bug is in &lt;code&gt;api/routes.ts#L215C8-L223C45&lt;/code&gt;")&lt;/li&gt;
&lt;li&gt;AI assistants (multi-file context in one prompt)&lt;/li&gt;
&lt;li&gt;Team collaboration (universal format everyone can use)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  About the Logo
&lt;/h2&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%2Ft8jjg15p3feosy5dahsp.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%2Ft8jjg15p3feosy5dahsp.png" alt="RangeLink Logo" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever notice the chicken in the logo? That's a &lt;strong&gt;free-range&lt;/strong&gt; chicken. Because your code should roam free across editors, tools, and teams.&lt;/p&gt;

&lt;p&gt;The chains represent links — connections between developers, tools, and ideas.&lt;/p&gt;

&lt;p&gt;Look at the numbers in the range, &lt;strong&gt;precision matters&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Install RangeLink:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt;: &lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt;: &lt;a href="https://open-vsx.org/extension/couimet/rangelink-vscode-extension" rel="noopener noreferrer"&gt;Open VSX Registry&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Select some code, hit &lt;code&gt;Cmd+R Cmd+L&lt;/code&gt; (or Command Palette → "Copy Range Link" if you have keybinding conflicts), and paste the link into Claude Code or Slack. See how it feels to never say "around line X" again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;If you find RangeLink useful, I'd love your support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo&lt;/strong&gt; on &lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; — it helps others discover it&lt;/li&gt;
&lt;li&gt;🐛 &lt;strong&gt;Report bugs or request features&lt;/strong&gt; via &lt;a href="https://github.com/couimet/rangeLink/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🤝 &lt;strong&gt;Contribute&lt;/strong&gt; — the codebase is well-documented and PR-friendly&lt;/li&gt;
&lt;li&gt;🗣️ &lt;strong&gt;Share your feedback&lt;/strong&gt; — I'm actively iterating based on what the community needs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For &lt;code&gt;vim&lt;/code&gt;/&lt;code&gt;neovim&lt;/code&gt; users interested in building a plugin: the &lt;a href="https://github.com/couimet/rangeLink/tree/main/packages/rangelink-core-ts" rel="noopener noreferrer"&gt;core library is platform-agnostic&lt;/a&gt; and designed for multi-editor support. Would love to collaborate!&lt;/p&gt;

&lt;p&gt;Curious about the implementation? Browse the &lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;source code on GitHub&lt;/a&gt; or reach out — I'm happy to chat about the architecture and design decisions.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Links:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=couimet.rangelink-vscode-extension" rel="noopener noreferrer"&gt;VS Code Marketplace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/couimet/rangeLink" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/couimet/rangeLink?tab=readme-ov-file#history" rel="noopener noreferrer"&gt;Full README with origin story&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>vscode</category>
      <category>cursor</category>
      <category>extensions</category>
    </item>
  </channel>
</rss>
