<?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: Willie</title>
    <description>The latest articles on DEV Community by Willie (@runkids).</description>
    <link>https://dev.to/runkids</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F786770%2F276ce9be-c3ef-4aa3-8e54-efafa6c4dfdc.png</url>
      <title>DEV Community: Willie</title>
      <link>https://dev.to/runkids</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/runkids"/>
    <language>en</language>
    <item>
      <title>Claude Code, Codex, Pi: Stop Rebuilding Your AI Coding Setup</title>
      <dc:creator>Willie</dc:creator>
      <pubDate>Thu, 22 Oct 2026 16:02:47 +0000</pubDate>
      <link>https://dev.to/runkids/claude-code-codex-pi-stop-rebuilding-your-ai-coding-setup-2cab</link>
      <guid>https://dev.to/runkids/claude-code-codex-pi-stop-rebuilding-your-ai-coding-setup-2cab</guid>
      <description>&lt;p&gt;Say your team uses Claude Code, Codex, and Pi. Someone catches an authorization bug and adds a useful rule to their review skill: check the denied request as well as the allowed one.&lt;/p&gt;

&lt;p&gt;Where does that rule go next?&lt;/p&gt;

&lt;p&gt;If it stays in one person's home directory, the next teammate's AI reviewer never gets it. Copy it into three tool folders and you now have three files to keep up to date.&lt;/p&gt;

&lt;p&gt;I prefer keeping the checklist beside the code, where a pull request can change it. Each developer can use their preferred AI tool.&lt;/p&gt;

&lt;p&gt;I maintain &lt;strong&gt;skillshare&lt;/strong&gt;, the open-source tool used below. It manages skills, MCP connections, plugins, and hooks across supported tools. Start with one local review skill, then bring in the rest of your setup as needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 20-second look
&lt;/h2&gt;






&lt;p&gt;&lt;a href="https://skillshare.runkids.cc/video/skillshare-demo.mp4" rel="noopener noreferrer"&gt;Watch the original demo (MP4)&lt;/a&gt;. The original animation includes Cursor; this walkthrough uses Pi alongside Claude Code and Codex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one useful review task
&lt;/h2&gt;

&lt;p&gt;For this example, the task is reviewing authorization and public API changes. A skill is a directory containing a &lt;code&gt;SKILL.md&lt;/code&gt; file with a name, a description of when to use it, and the instructions.&lt;/p&gt;

&lt;p&gt;Keep the first version short. A checklist with four rules your team agrees on is easier to review than a large prompt collection nobody has read.&lt;/p&gt;

&lt;p&gt;On macOS or Linux, install the CLI with Homebrew:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Other installation options, including Windows, are in the &lt;a href="https://github.com/runkids/skillshare#installation" rel="noopener noreferrer"&gt;installation instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;From the root of a project that doesn't already have a skillshare config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare init &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--targets&lt;/span&gt; claude,codex,pi
skillshare new team-review &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--pattern&lt;/span&gt; none
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose the targets your team actually uses. &lt;code&gt;-p&lt;/code&gt; keeps this setup scoped to the project. &lt;code&gt;--pattern none&lt;/code&gt; creates the plain template.&lt;/p&gt;

&lt;p&gt;Replace &lt;code&gt;.skillshare/skills/team-review/SKILL.md&lt;/code&gt; with:&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;team-review&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pull&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;regressions&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authorization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;public&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;behavior.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;asked&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review."&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gh"&gt;# Team review&lt;/span&gt;

Read the diff and the relevant callers before reporting findings.
&lt;span class="p"&gt;
-&lt;/span&gt; For authorization changes, check both allowed and denied requests.
&lt;span class="p"&gt;-&lt;/span&gt; For public API changes, compare request and response shapes with existing consumers.
&lt;span class="p"&gt;-&lt;/span&gt; Report only reachable bugs. Include the file, line, and an example that triggers each one.
&lt;span class="p"&gt;-&lt;/span&gt; State which checks you ran and which behavior remains unverified.

Keep the review read-only. Propose fixes without changing files.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The description gives the tool a reason to load the skill. The body tells it what to do once loaded. Replace the rules with checks that matter to your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect it, then sync it
&lt;/h2&gt;

&lt;p&gt;Run these in order, stopping if a step fails:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare audit &lt;span class="nt"&gt;-p&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt;
skillshare status &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The audit scans the skill for suspicious content. Read the instructions yourself too, especially when you start installing third-party skills; a clean scan isn't a guarantee of safety.&lt;/p&gt;

&lt;p&gt;The dry run previews the sync. With the default merge mode on macOS and Linux, the real sync creates per-skill symlinks into the configured target directories. The checklist stays in &lt;code&gt;.skillshare/skills/team-review/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For this setup, the target directories are &lt;code&gt;.claude/skills&lt;/code&gt; for Claude Code, &lt;code&gt;.agents/skills&lt;/code&gt; for Codex, and &lt;code&gt;.pi/skills&lt;/code&gt; for Pi. Each &lt;code&gt;team-review&lt;/code&gt; link points back to the same project skill.&lt;/p&gt;

&lt;p&gt;Copy mode is available for environments that need regular files; run sync again after edits when using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review checklist changes in the same PR
&lt;/h2&gt;

&lt;p&gt;Suppose a bug fix reveals a missing check. Add that check to &lt;code&gt;team-review/SKILL.md&lt;/code&gt; in the same pull request as the fix. A reviewer can ask whether the new instruction would actually have caught the bug.&lt;/p&gt;

&lt;p&gt;Commit the project config, the local skill, and the generated &lt;code&gt;.skillshare/.gitignore&lt;/code&gt; using your normal Git workflow. Keep generated target links out of version control. If you later add remote skills, include their lockfile as well. The &lt;a href="https://skillshare.runkids.cc/docs/how-to/sharing/project-setup" rel="noopener noreferrer"&gt;project setup guide&lt;/a&gt; covers what belongs in Git.&lt;/p&gt;

&lt;p&gt;After a teammate clones or pulls the project, this local-only example needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare audit &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; skillshare &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the project declares remote skills, install those before auditing and syncing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; skillshare audit &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; skillshare &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git carries the local checklist and configuration. The sync step makes them available to the configured tools on that machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bring MCP, plugins, and hooks along too
&lt;/h2&gt;

&lt;p&gt;The review checklist is only part of a working setup. Changing tools can also mean re-entering MCP connections, finding the right plugin package, and rebuilding hooks. Skillshare manages these resources alongside skills, with separate previews for what each tool receives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6dwqzus69q1f1af26r0z.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6dwqzus69q1f1af26r0z.png" alt="The skillshare MCP dashboard lists server connections and lets you select receiving agents before syncing." width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP: define a connection once
&lt;/h3&gt;

&lt;p&gt;Keep a server's command or URL in one definition, choose its receiving tools, and let skillshare write their native configuration formats. The &lt;a href="https://skillshare.runkids.cc/docs/how-to/daily-tasks/sharing-mcp" rel="noopener noreferrer"&gt;MCP setup guide&lt;/a&gt; covers adding a connection and importing one you already use.&lt;/p&gt;

&lt;p&gt;Claude Code, Codex, and Pi are supported. Pi uses its built-in MCP support and needs Pi 0.99.0 or later. Keep credentials out of the project repository and use environment references where appropriate. Login, OAuth, and tool approvals still happen in the receiving agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plugins: keep the package together
&lt;/h3&gt;

&lt;p&gt;A plugin can bundle skills, MCP connections, hooks, and supporting files. Use the &lt;a href="https://skillshare.runkids.cc/docs/how-to/daily-tasks/sharing-plugins" rel="noopener noreferrer"&gt;plugin manager&lt;/a&gt; to discover a source, select compatible tools, and review the installation. Pi packages are supported too.&lt;/p&gt;

&lt;p&gt;Choose a package built for the target tool. Skillshare doesn't turn a Claude plugin into a Pi extension. Project plugin management is supported for Claude Code and Pi; Codex plugin management uses global scope. Native project trust still applies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hooks: keep the tool's own behavior
&lt;/h3&gt;

&lt;p&gt;Hooks can run a project check at an agent event or load a native extension. Skillshare keeps named &lt;a href="https://skillshare.runkids.cc/docs/reference/commands/hooks" rel="noopener noreferrer"&gt;hook definitions&lt;/a&gt;, previews their destinations, and writes the relevant configuration or files.&lt;/p&gt;

&lt;p&gt;Event names and payloads remain tool-specific. For Pi, supply extension code that matches your installed Pi version; skillshare writes the extension file without translating another agent's hook runtime. Review and test that code in Pi before relying on it.&lt;/p&gt;

&lt;p&gt;After configuring these resources, preview them separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare &lt;span class="nb"&gt;sync &lt;/span&gt;mcp &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync &lt;/span&gt;hooks &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync &lt;/span&gt;plugins &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the configured project resources, &lt;code&gt;skillshare sync --all -p&lt;/code&gt; includes skills, agents, extras, MCP, and hooks. Plugins are a separate operation: &lt;code&gt;skillshare sync plugins -p&lt;/code&gt;. Review the preview and respect the supported scope before applying either.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the reviewer against a known bug
&lt;/h2&gt;

&lt;p&gt;Open a configured tool and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use the team-review skill to review this diff. Keep it read-only and show a concrete input for each finding.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Try it against a past authorization bug whose cause you know. Check whether the tool finds the missed denied-request case, cites the right code, and distinguishes executed tests from assumptions. Verify that the skill is available in each tool you use; restart the tool if needed after syncing.&lt;/p&gt;

&lt;p&gt;Sharing the instructions doesn't make different models produce identical reviews. It gives your team one checklist to inspect and improve when a review misses something.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/runkids/skillshare" rel="noopener noreferrer"&gt;skillshare is on GitHub&lt;/a&gt;. If you try this, I'd like to hear which project rule you put in your first shared skill. A star helps other developers find the project if it earns a place in your workflow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I built figlens so cloud coding agents can read Figma files offline</title>
      <dc:creator>Willie</dc:creator>
      <pubDate>Thu, 22 Oct 2026 15:42:42 +0000</pubDate>
      <link>https://dev.to/runkids/i-built-figlens-so-cloud-coding-agents-can-read-figma-files-offline-37e</link>
      <guid>https://dev.to/runkids/i-built-figlens-so-cloud-coding-agents-can-read-figma-files-offline-37e</guid>
      <description>&lt;p&gt;A cloud coding agent can have your source code and still be missing the design. I built &lt;a href="https://github.com/runkids/figlens" rel="noopener noreferrer"&gt;figlens&lt;/a&gt; around a file-based handoff: save a local &lt;code&gt;.fig&lt;/code&gt; copy in Figma, then let the agent read it wherever it runs.&lt;/p&gt;

&lt;p&gt;The machine reading the design needs no Figma installation, login or API key. Designers can keep working in Figma.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real build, with a live preview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9ata5nvuxejf38a2iqj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe9ata5nvuxejf38a2iqj.gif" alt="Pi builds HTML from a local Figma file, with the browser preview beside the terminal" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a real Pi session in Orca, shown at &lt;strong&gt;8x speed&lt;/strong&gt;. Pi reads the local design bundle, writes HTML/CSS, and checks the result in a browser. The finished page uses 19 SVG icons from the bundle and includes a local Share dialog and composer.&lt;/p&gt;

&lt;p&gt;The design is the “List views” frame from &lt;a href="https://www.figma.com/community/file/1597641111449594397/mcp-apps-for-claude" rel="noopener noreferrer"&gt;MCP Apps for Claude (Community)&lt;/a&gt;. System sans and Georgia replace the unavailable Anthropic fonts. Replies in the demo stay in the page and reset on reload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/runkids/figlens/blob/main/assets/demo-8x.mp4" rel="noopener noreferrer"&gt;Watch the 45-second video&lt;/a&gt;. The capture uses actual window snapshots, so motion is less smooth than a native recording.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it with your own design
&lt;/h2&gt;

&lt;p&gt;Save your design with &lt;strong&gt;File &amp;gt; Save local copy&lt;/strong&gt; in Figma. With Node.js 18+ installed, list its frames:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @runkids/figlens tree design.fig &lt;span class="nt"&gt;--depth&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose a frame ID from that output, then create a bundle. Replace &lt;code&gt;12:345&lt;/code&gt; below with your frame ID:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @runkids/figlens bundle design.fig 12:345 frame.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The npm launcher downloads and caches a native binary on its first run. You can also install a native release directly; users need neither Rust nor Docker.&lt;/p&gt;

&lt;p&gt;Give your coding agent &lt;code&gt;frame.zip&lt;/code&gt; and a prompt like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Extract frame.zip into its own directory and read context.md. Build this screen using this project’s stack and conventions. Use the supplied layout values and assets, then compare your result with references/screen.png.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The bundle contains layout and text data, bound variables, image and SVG assets, a reference render, and a list of any missing assets. That gives the agent concrete values to build from. Font files are not included.&lt;/p&gt;

&lt;p&gt;For agents that support skills:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add runkids/figlens &lt;span class="nt"&gt;--skill&lt;/span&gt; figlens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is also a local stdio MCP server. The README has native and npx configuration examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  What “offline” covers
&lt;/h2&gt;

&lt;p&gt;figlens reads the saved design locally without calling the Figma API. Your AI provider, initial binary download, and project dependencies may still need a network connection. A Figma URL alone does not supply the design: you need the saved &lt;code&gt;.fig&lt;/code&gt; file, and a new copy when it changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  One measured example
&lt;/h2&gt;

&lt;p&gt;For this 57.5 MiB file, extracting the selected frame’s bundle took &lt;strong&gt;0.47 seconds median over five warm runs&lt;/strong&gt;. The frame had 153 nodes and produced 25 SVG assets with no missing assets.&lt;/p&gt;

&lt;p&gt;That timing measures &lt;code&gt;figlens bundle&lt;/code&gt; only. It excludes the AI’s implementation time. It was recorded with figlens 0.1.2 in an ARM64 Docker container using a prebuilt release binary. &lt;a href="https://github.com/runkids/figlens/blob/main/wiki/accuracy.md#local-design-to-html-demo" rel="noopener noreferrer"&gt;Individual runs, environment and reproduction commands&lt;/a&gt; are in the repository.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;.fig&lt;/code&gt; format is undocumented, and rendering has known gaps. I would like feedback from people using coding agents in headless or cloud environments: does a local design bundle fit your handoff, and what information would your agent still need?&lt;/p&gt;

&lt;p&gt;Source and installation: &lt;a href="https://github.com/runkids/figlens" rel="noopener noreferrer"&gt;https://github.com/runkids/figlens&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Sync AI Skills Across Claude Code, OpenClaw, and Codex in 2 Minutes</title>
      <dc:creator>Willie</dc:creator>
      <pubDate>Mon, 09 Feb 2026 21:17:38 +0000</pubDate>
      <link>https://dev.to/runkids/how-to-sync-ai-skills-across-claude-code-openclaw-and-codex-in-2-minutes-226e</link>
      <guid>https://dev.to/runkids/how-to-sync-ai-skills-across-claude-code-openclaw-and-codex-in-2-minutes-226e</guid>
      <description>&lt;p&gt;You use Claude Code at work, Openclaw for side projects, and Codex for quick scripts.&lt;/p&gt;

&lt;p&gt;You have 20+ skills. They need to exist in all three tools.&lt;/p&gt;

&lt;p&gt;Here's how to set that up in under 2 minutes — and never manually copy a skill again.&lt;/p&gt;

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

&lt;p&gt;Every AI CLI stores skills in a different directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.claude/skills/          # Claude Code
~/.codex/skills/           # Codex CLI
~/.opencode/skills/        # OpenCode
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you install a skill, you pick which tools get it. When you edit a skill in one tool, the others don't know. When you remove a skill from one tool, you might break the others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The root cause&lt;/strong&gt;: there's no single source of truth. Skills are scattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix: One Source, Symlinks Everywhere
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/runkids/skillshare" rel="noopener noreferrer"&gt;skillshare&lt;/a&gt; keeps all your skills in one directory and creates symlinks to each AI CLI.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/.config/skillshare/skills/     ← single source
  ├── code-review/
  ├── react-guidelines/
  └── _team-repo/
        ├── frontend/
        └── testing/

~/.claude/skills/code-review → symlink to source
~/.codex/skills/code-review  → symlink to source
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit the source, every tool sees the change instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS / Linux&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/runkids/skillshare/main/install.sh | sh

&lt;span class="c"&gt;# Homebrew&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;runkids/tap/skillshare

&lt;span class="c"&gt;# Windows PowerShell&lt;/span&gt;
irm https://raw.githubusercontent.com/runkids/skillshare/main/install.ps1 | iex
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Initialize
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creates &lt;code&gt;~/.config/skillshare/skills/&lt;/code&gt; (your source directory)&lt;/li&gt;
&lt;li&gt;Detects which AI CLIs you have installed&lt;/li&gt;
&lt;li&gt;Generates &lt;code&gt;config.yaml&lt;/code&gt; with your targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Created source directory
✓ Detected targets:
    claude  → ~/.claude
    codex   → ~/.codex/skills
✓ Config saved to ~/.config/skillshare/config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Import existing skills
&lt;/h3&gt;

&lt;p&gt;Already have skills scattered across your AI CLIs? Collect them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare collect &lt;span class="nt"&gt;--all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This copies every skill from every detected target into the source directory. Duplicates are flagged so you can choose which to keep.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Sync
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done. Every target now has symlinks pointing to your source directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Synced 3 targets:
  claude   → 15 linked, 0 skipped, 0 removed
  codex    → 15 linked, 0 skipped, 0 removed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;From now on, this is the only command you need.&lt;/strong&gt; Made changes to your skills? &lt;code&gt;skillshare sync&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Day-to-Day Workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install a skill from GitHub
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare &lt;span class="nb"&gt;install &lt;/span&gt;anthropics/skills/skills/pdf
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The skill is downloaded to your source directory, then synced to all targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install a full team/org skill repo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare &lt;span class="nb"&gt;install &lt;/span&gt;github.com/your-org/team-skills &lt;span class="nt"&gt;--track&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--track&lt;/code&gt; flag preserves &lt;code&gt;.git&lt;/code&gt;, so you can update later:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare update _team-skills   &lt;span class="c"&gt;# git pull&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;                  &lt;span class="c"&gt;# push changes to all targets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create a new skill
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare new my-custom-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creates a &lt;code&gt;SKILL.md&lt;/code&gt; template in your source directory. Edit it, sync, and every AI CLI has it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scan for security threats
&lt;/h3&gt;

&lt;p&gt;Before syncing third-party skills to your AI agents, scan them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare audit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This checks every installed skill for prompt injection, data exfiltration, destructive commands, and other threats. Critical findings block installation by default — no malicious skill reaches your AI agent without you explicitly approving it.&lt;/p&gt;

&lt;p&gt;Skills are also scanned automatically during &lt;code&gt;skillshare install&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pull back edits from a specific tool
&lt;/h3&gt;

&lt;p&gt;You tweaked a skill in codex's UI. Pull the change back to source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare collect codex
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;             &lt;span class="c"&gt;# propagate to other targets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check status
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows which targets are in sync, which have drifted, and which skills are unlinked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preview before syncing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare diff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows exactly what &lt;code&gt;sync&lt;/code&gt; will do — which symlinks will be created, updated, or removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cross-Machine Sync
&lt;/h2&gt;

&lt;p&gt;If your source directory is a git repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Machine A&lt;/span&gt;
skillshare push

&lt;span class="c"&gt;# Machine B&lt;/span&gt;
skillshare pull
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or just version-control &lt;code&gt;~/.config/skillshare/&lt;/code&gt; as part of your dotfiles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project-Scoped Skills
&lt;/h2&gt;

&lt;p&gt;For skills that should live inside a specific repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
skillshare init &lt;span class="nt"&gt;-p&lt;/span&gt;                              &lt;span class="c"&gt;# Creates .skillshare/&lt;/span&gt;
skillshare &lt;span class="nb"&gt;install &lt;/span&gt;org/skills/skills/react &lt;span class="nt"&gt;-p&lt;/span&gt;   &lt;span class="c"&gt;# Install to project&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;                                 &lt;span class="c"&gt;# Sync to targets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit &lt;code&gt;.skillshare/&lt;/code&gt; to git. Teammates clone the repo and run &lt;code&gt;skillshare sync&lt;/code&gt; — everyone gets the same skills, in every AI tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Dashboard
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare ui
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opens a web dashboard at &lt;code&gt;http://localhost:19420&lt;/code&gt; for visual skill management — browsing, installing, syncing, and searching skills without the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Config File
&lt;/h2&gt;

&lt;p&gt;Everything is controlled by &lt;code&gt;~/.config/skillshare/config.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;source&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/Users/you/.config/skillshare/skills&lt;/span&gt;
&lt;span class="na"&gt;sync_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;merge&lt;/span&gt;    &lt;span class="c1"&gt;# merge (per-skill symlinks) or symlink (whole directory)&lt;/span&gt;
&lt;span class="na"&gt;targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;claude&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/Users/you/.claude&lt;/span&gt;
  &lt;span class="na"&gt;codex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/Users/you/.codex/skills&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Want to add a new AI CLI? Add a target. Want to remove one? Delete the entry. Then &lt;code&gt;sync&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Reference
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create config + detect targets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare sync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sync source → all targets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare install &amp;lt;source&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Install skill from GitHub/local path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare collect [target]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Import skills from target(s) to source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List skills in source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show sync status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare diff&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preview what sync will change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare search &amp;lt;query&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search skills on GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare audit [name]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scan skills for security threats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare new &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Create a new skill template&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare update --all&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Update all tracked repos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;skillshare push&lt;/code&gt; / &lt;code&gt;pull&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Cross-machine git sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skillshare ui&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open web dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Migration from Other Tools
&lt;/h2&gt;

&lt;p&gt;If you're already using &lt;code&gt;npx skills&lt;/code&gt; or manual management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;skillshare init          &lt;span class="c"&gt;# detect your AI CLIs&lt;/span&gt;
skillshare collect &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="c"&gt;# import everything&lt;/span&gt;
skillshare &lt;span class="nb"&gt;sync&lt;/span&gt;          &lt;span class="c"&gt;# symlink to all targets&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full migration guide: &lt;a href="https://skillshare.runkids.cc/docs/guides/migration" rel="noopener noreferrer"&gt;skillshare.runkids.cc/docs/guides/migration&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Architectural comparison: &lt;a href="https://skillshare.runkids.cc/docs/guides/comparison" rel="noopener noreferrer"&gt;skillshare.runkids.cc/docs/guides/comparison&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;skillshare&lt;/strong&gt; is open source (MIT), written in Go, and supports 40+ AI CLI targets.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/runkids/skillshare" rel="noopener noreferrer"&gt;github.com/runkids/skillshare&lt;/a&gt;&lt;br&gt;
Docs: &lt;a href="https://skillshare.runkids.cc" rel="noopener noreferrer"&gt;skillshare.runkids.cc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you found this useful, a ⭐ on GitHub would help others find it too.&lt;/p&gt;

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