<?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: Wu Kun</title>
    <description>The latest articles on Forem by Wu Kun (@wu_kun_a21099fda19f1d5a09).</description>
    <link>https://forem.com/wu_kun_a21099fda19f1d5a09</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%2F3923321%2F516734a3-0064-4f1e-a868-183bb8f3e3eb.png</url>
      <title>Forem: Wu Kun</title>
      <link>https://forem.com/wu_kun_a21099fda19f1d5a09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wu_kun_a21099fda19f1d5a09"/>
    <language>en</language>
    <item>
      <title>I wrote the same AI instructions 6 times. Then I built a sync engine to stop.</title>
      <dc:creator>Wu Kun</dc:creator>
      <pubDate>Sun, 10 May 2026 13:29:41 +0000</pubDate>
      <link>https://forem.com/wu_kun_a21099fda19f1d5a09/i-wrote-the-same-ai-instructions-6-times-then-i-built-a-sync-engine-to-stop-3ihb</link>
      <guid>https://forem.com/wu_kun_a21099fda19f1d5a09/i-wrote-the-same-ai-instructions-6-times-then-i-built-a-sync-engine-to-stop-3ihb</guid>
      <description>&lt;p&gt;Every AI coding tool has its own skills format. I got tired of maintaining copies, so I built a tool that writes once and syncs everywhere.&lt;/p&gt;




&lt;p&gt;I use Claude Code for deep refactoring, Cursor for quick edits, and occasionally hop into Windsurf or Cline when trying something new. The problem? Every one of these tools has its own "skills" or "rules" system, and none of them talk to each other.&lt;/p&gt;

&lt;p&gt;Claude Code wants files in &lt;code&gt;~/.claude/skills/&lt;/code&gt;. Cursor uses &lt;code&gt;.cursorrules&lt;/code&gt;. Windsurf has workflows. Cline merges everything into &lt;code&gt;.clinerules&lt;/code&gt;. Copilot has its own format too.&lt;/p&gt;

&lt;p&gt;So every time I refined a workflow — say, my iterative dev process — I had to manually reformat and copy it to 5 different places. Skip one, and that tool is out of sync. It's the kind of toil that compounds silently until you realize your Windsurf setup is 3 months behind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a sync engine
&lt;/h2&gt;

&lt;p&gt;I built a small tool that scans your machine for whatever AI coding tools are installed and pushes your skills to each one in the correct format.&lt;/p&gt;

&lt;p&gt;No config files. No manual tool list. It detects tools by scanning for directory content patterns — so when a new tool shows up, it gets picked up automatically.&lt;/p&gt;

&lt;p&gt;Here's what a typical workflow looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/share-skills              &lt;span class="c"&gt;# detect all tools, sync everything&lt;/span&gt;
/share-skills &lt;span class="nt"&gt;--add&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt;   &lt;span class="c"&gt;# sync just one skill&lt;/span&gt;
/share-skills &lt;span class="nt"&gt;--list&lt;/span&gt;       &lt;span class="c"&gt;# see what's available without syncing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;This was the fun part. I didn't want to hardcode paths because tools change their directory structures across versions. Instead, each tool has a "signature" — a set of files or directories that uniquely identify it.&lt;/p&gt;

&lt;p&gt;For example, Claude Code is identified by the presence of &lt;code&gt;~/.claude/&lt;/code&gt;, Cursor by &lt;code&gt;.cursorrules&lt;/code&gt; in the project root, and so on. The scanner walks through known locations, matches signatures, and registers whatever it finds.&lt;/p&gt;

&lt;p&gt;New tool comes out? If it has a recognizable directory pattern, it gets detected. No code changes needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's synced
&lt;/h2&gt;

&lt;p&gt;The repo ships with 9 skills out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;dev-iterate&lt;/strong&gt; — iterative dev workflow: PRD → dev → test → commit, with 14 self-checks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;test&lt;/strong&gt; — smart test runner that analyzes what changed and runs targeted tests instead of the full suite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;commit&lt;/strong&gt; — infers your commit style from git history, commits and pushes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;backlog-update&lt;/strong&gt; — analyzes your project from UX/security/performance angles and suggests prioritized features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;doc-consistency&lt;/strong&gt; — finds all .md files in your project and checks for cross-document consistency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;review-iterate&lt;/strong&gt; — iterative doc review against a reference document&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;share-skills&lt;/strong&gt; — the sync engine itself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;resume-tailor&lt;/strong&gt; / &lt;strong&gt;resume-html&lt;/strong&gt; — generates tailored resumes from job descriptions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each skill is just a &lt;code&gt;SKILL.md&lt;/code&gt; file with some frontmatter. No code, no dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding your own
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/.ai-skills/my-skill/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then drop a &lt;code&gt;SKILL.md&lt;/code&gt; in there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-skill&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;What it does&lt;/span&gt;
&lt;span class="na"&gt;when_to_use&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;trigger words&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

Your instructions here...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;/share-skills&lt;/code&gt; and it goes everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't building the sync engine — it was figuring out the right abstraction for a "skill." Too rigid and you can't express real workflows. Too loose and tools can't parse them. I ended up with a simple format: a markdown file with YAML frontmatter, where the body is just natural language instructions. Every tool I've tested can consume that.&lt;/p&gt;

&lt;p&gt;The second tricky bit was making detection robust without being brittle. Hardcoding &lt;code&gt;~/Library/Application Support/Cursor/&lt;/code&gt; works until Cursor changes their path. Pattern-based detection is more resilient but requires thinking carefully about what makes each tool unique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/wukun2005-gif/ai-skills.git ~/.ai-skills
&lt;span class="nb"&gt;ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; ~/.ai-skills/&lt;span class="k"&gt;*&lt;/span&gt; ~/.claude/skills/
/share-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you're juggling multiple AI coding tools and tired of keeping configs in sync, give it a spin. PRs welcome if you have workflows worth sharing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Repo: &lt;a href="https://github.com/wukun2005-gif/ai-skills" rel="noopener noreferrer"&gt;github.com/wukun2005-gif/ai-skills&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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