<?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: Luren L.</title>
    <description>The latest articles on DEV Community by Luren L. (@comeonoliver).</description>
    <link>https://dev.to/comeonoliver</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%2F1308424%2F68984af6-5144-4945-9b2f-e3a996ae658f.png</url>
      <title>DEV Community: Luren L.</title>
      <link>https://dev.to/comeonoliver</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/comeonoliver"/>
    <language>en</language>
    <item>
      <title>I Analyzed Claude Code's Leaked Source — Here's How Anthropic's AI Agent Actually Works</title>
      <dc:creator>Luren L.</dc:creator>
      <pubDate>Tue, 31 Mar 2026 17:35:51 +0000</pubDate>
      <link>https://dev.to/comeonoliver/i-analyzed-claude-codes-leaked-source-heres-how-anthropics-ai-agent-actually-works-2bik</link>
      <guid>https://dev.to/comeonoliver/i-analyzed-claude-codes-leaked-source-heres-how-anthropics-ai-agent-actually-works-2bik</guid>
      <description>&lt;p&gt;On March 31, 2026, Anthropic's Claude Code source code leaked — again. A 60MB source map file (&lt;code&gt;cli.js.map&lt;/code&gt;) was accidentally shipped in npm package v2.1.88, exposing ~1,900 TypeScript files and 512,000 lines of code.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;second time&lt;/strong&gt; this has happened. The first was February 2025.&lt;/p&gt;

&lt;p&gt;Instead of just reading the headlines, I did what any curious engineer would do: &lt;strong&gt;I read all of it.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;Claude Code is not what most people think. It's not a simple chat wrapper. It's a full &lt;strong&gt;agentic AI runtime&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;QueryEngine&lt;/strong&gt; — A conversation loop orchestrator that manages context assembly → API calls → tool execution → response rendering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;40+ Tools&lt;/strong&gt; — File operations, shell execution, web search, MCP integration, notebook editing, and more&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Task System&lt;/strong&gt; — Sub-agent orchestration for parallelizing complex work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100+ Slash Commands&lt;/strong&gt; — &lt;code&gt;/commit&lt;/code&gt;, &lt;code&gt;/review&lt;/code&gt;, &lt;code&gt;/security-review&lt;/code&gt;, &lt;code&gt;/ultraplan&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bridge System&lt;/strong&gt; — Remote session control from desktop/mobile via WebSocket&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin &amp;amp; Skills&lt;/strong&gt; — User-defined extensions loaded from &lt;code&gt;.claude/&lt;/code&gt; directories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Mode&lt;/strong&gt; — STT integration with keyword detection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;The most interesting part is the &lt;strong&gt;tool-call loop&lt;/strong&gt;. Claude doesn't just generate text — it requests tools, the engine executes them, and results are fed back. This loop can run dozens of iterations for a single user request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input → Context Assembly → API Call → Tool Request → Execute → Feed Back → ... → Final Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;permission model&lt;/strong&gt; is layered: some tools auto-approve, others require user confirmation, and some are always denied. This is how Claude Code stays safe while being powerful.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;context budget&lt;/strong&gt; system is fascinating — it dynamically allocates tokens across system prompt, user context, memories, and tool results based on the current conversation state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Internal Codenames
&lt;/h2&gt;

&lt;p&gt;The leak revealed internal model codenames:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Capybara&lt;/strong&gt; → Claude 4.6 variant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fennec&lt;/strong&gt; → Opus 4.6&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbat&lt;/strong&gt; → Unreleased model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Migration files show the progression: &lt;code&gt;migrateFennecToOpus.ts&lt;/code&gt;, &lt;code&gt;migrateSonnet45ToSonnet46.ts&lt;/code&gt; — giving us a roadmap of model evolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Memory System
&lt;/h2&gt;

&lt;p&gt;Claude Code has a &lt;code&gt;memdir/&lt;/code&gt; (memory directory) system that persists context across sessions. It scans for relevant memories, manages memory aging, and supports team-shared memory. This is how it "remembers" your codebase.&lt;/p&gt;

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

&lt;p&gt;If you're building AI agents, this is a masterclass in production architecture:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tool abstraction&lt;/strong&gt; — How to design a flexible tool system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context management&lt;/strong&gt; — How to stay within token limits while being useful&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission models&lt;/strong&gt; — How to make agents safe in production&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State management&lt;/strong&gt; — Zustand-style store + React for terminal UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-agent orchestration&lt;/strong&gt; — How to parallelize work across agent instances&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Full Analysis
&lt;/h2&gt;

&lt;p&gt;I wrote a 770+ line detailed analysis covering all 17 architectural layers:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/ComeOnOliver/claude-code-analysis" rel="noopener noreferrer"&gt;GitHub: claude-code-analysis&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Includes bilingual README (English/中文) and the complete source architecture documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Take
&lt;/h2&gt;

&lt;p&gt;Anthropic calls this a "packaging error." Maybe. But for the AI engineering community, this is one of the most educational codebases to study. It shows how a well-funded AI lab actually builds production agent infrastructure — not toy demos, but real systems handling millions of users.&lt;/p&gt;

&lt;p&gt;The irony? The best documentation for Claude Code wasn't written by Anthropic. It was written by the community, after the code leaked.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclaimer: This analysis is based on publicly available information. Claude Code is owned by Anthropic. This is an unofficial community analysis.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>opensource</category>
      <category>architecture</category>
    </item>
    <item>
      <title>SkillsHub March 2026 Dev Log: BM25, Rate Limiting, and 5,900+ AI Agent Skills</title>
      <dc:creator>Luren L.</dc:creator>
      <pubDate>Sun, 22 Mar 2026 17:54:00 +0000</pubDate>
      <link>https://dev.to/comeonoliver/skillshub-march-2026-dev-log-bm25-rate-limiting-and-5900-ai-agent-skills-49mo</link>
      <guid>https://dev.to/comeonoliver/skillshub-march-2026-dev-log-bm25-rate-limiting-and-5900-ai-agent-skills-49mo</guid>
      <description>&lt;h1&gt;
  
  
  SkillsHub March 2026 Dev Log: BM25, Rate Limiting, and 5,900+ AI Agent Skills
&lt;/h1&gt;

&lt;p&gt;March was a big month for &lt;a href="https://skillshub.wtf" rel="noopener noreferrer"&gt;SkillsHub&lt;/a&gt; — we shipped v0.2.0 with a completely revamped search engine, proper rate limiting, better docs, and crossed 5,900 skills in the registry. Here's what happened.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  BM25 Multi-Field Scoring
&lt;/h3&gt;

&lt;p&gt;The biggest change: we replaced our TF-IDF (v2) skill resolution with &lt;strong&gt;BM25 multi-field scoring&lt;/strong&gt;. If you've used SkillsHub's &lt;code&gt;/resolve&lt;/code&gt; endpoint, you'll notice results are significantly more relevant now — especially for ambiguous queries where the old TF-IDF approach would surface noisy matches.&lt;/p&gt;

&lt;p&gt;BM25 scores across multiple fields (name, description, tags) with field-specific weighting, so a match in the skill name carries more weight than a match buried in the description. It's the same family of algorithms that powers Elasticsearch under the hood.&lt;/p&gt;

&lt;p&gt;Try it out:&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;# Resolve skills for a task description&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://skillshub.wtf/api/resolve?q=deploy+nextjs+to+vercel"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Search by tag&lt;/span&gt;
curl &lt;span class="s2"&gt;"https://skillshub.wtf/api/resolve?q=kubernetes+helm+charts"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  In-Memory Skill Cache (~3.5x Faster)
&lt;/h3&gt;

&lt;p&gt;Along with BM25, we added an &lt;strong&gt;in-memory skill cache with pre-computed corpus stats&lt;/strong&gt;. The result: resolve latency dropped from ~700ms to ~200ms. The cache pre-computes term frequencies and document lengths at startup so BM25 scoring doesn't hit the database on every request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rate Limiting with Upstash Redis
&lt;/h3&gt;

&lt;p&gt;SkillsHub is a free, open registry — but we need to keep it healthy. We added rate limiting backed by &lt;strong&gt;Upstash Redis&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Endpoint&lt;/th&gt;
&lt;th&gt;Limit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read (resolve, search)&lt;/td&gt;
&lt;td&gt;60 req/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write (update skills)&lt;/td&gt;
&lt;td&gt;20 req/min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Register (new skills)&lt;/td&gt;
&lt;td&gt;5 req/hr&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These limits are generous for normal usage. If you're building an integration and need higher limits, open an issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Docs Page
&lt;/h3&gt;

&lt;p&gt;We shipped a &lt;code&gt;/docs&lt;/code&gt; page with &lt;strong&gt;interactive curl examples&lt;/strong&gt; you can copy and run directly. No more guessing at API parameters — the docs show real requests and responses for every endpoint.&lt;/p&gt;

&lt;p&gt;Check it out: &lt;a href="https://skillshub.wtf/docs" rel="noopener noreferrer"&gt;skillshub.wtf/docs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributor Infrastructure
&lt;/h3&gt;

&lt;p&gt;Getting a local dev environment running is now much easier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;db:push&lt;/code&gt;&lt;/strong&gt; — push schema changes to your local database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;db:seed-skills&lt;/code&gt;&lt;/strong&gt; — seed your local instance with real skill data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.env.example&lt;/code&gt;&lt;/strong&gt; — all the env vars you need, documented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also added a &lt;strong&gt;public SKILL.md export&lt;/strong&gt; — all 5,338 skills exported as individual &lt;code&gt;.md&lt;/code&gt; files. Useful if you want to analyze the skill corpus, build alternative search, or just browse offline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;YAML frontmatter stripping&lt;/strong&gt; for proper SKILL.md rendering (no more raw &lt;code&gt;---&lt;/code&gt; blocks cluttering the display)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chinese README sync&lt;/strong&gt; — keeping our Chinese documentation up to date with the English version&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth.js integration&lt;/strong&gt; for contributor authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Featured: tanweai/pua 🔥
&lt;/h2&gt;

&lt;p&gt;We added &lt;a href="https://github.com/tanweai/pua" rel="noopener noreferrer"&gt;tanweai/pua&lt;/a&gt; as a featured skill pack — it's got &lt;strong&gt;10k+ GitHub stars&lt;/strong&gt; and contributes &lt;strong&gt;9 skills&lt;/strong&gt; to SkillsHub. PUA (Performance Ultimatum for AI) puts your AI on a structured performance improvement plan when it's stuck or giving up. Think of it as a "try harder" protocol with actual methodology behind it.&lt;/p&gt;

&lt;p&gt;It's one of the most creative skill designs we've seen — worth checking out if you're building agent workflows that need resilience.&lt;/p&gt;

&lt;h2&gt;
  
  
  By the Numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;5,900+&lt;/strong&gt; total skills in the registry (up from ~5,300 at v0.2.0 launch)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;~3.5x&lt;/strong&gt; faster resolve latency (700ms → ~200ms)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5,338&lt;/strong&gt; public SKILL.md files exported&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Semantic search (embedding-based) alongside BM25 for hybrid resolution&lt;/li&gt;
&lt;li&gt;Skill versioning and changelogs&lt;/li&gt;
&lt;li&gt;SDK packages for popular agent frameworks&lt;/li&gt;
&lt;li&gt;Community skill reviews and ratings&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Registry:&lt;/strong&gt; &lt;a href="https://skillshub.wtf" rel="noopener noreferrer"&gt;skillshub.wtf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ComeOnOliver/skillshub" rel="noopener noreferrer"&gt;github.com/ComeOnOliver/skillshub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://skillshub.wtf/docs" rel="noopener noreferrer"&gt;skillshub.wtf/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you're building AI agents, give SkillsHub a try. Register your skills, resolve what you need, and help grow the ecosystem. PRs and issues welcome. ✌️&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>I Ran 60+ Automated Tests on My AI Skills Registry — Here's What Broke</title>
      <dc:creator>Luren L.</dc:creator>
      <pubDate>Thu, 19 Mar 2026 04:01:06 +0000</pubDate>
      <link>https://dev.to/comeonoliver/i-ran-60-automated-tests-on-my-ai-skills-registry-heres-what-broke-3j5p</link>
      <guid>https://dev.to/comeonoliver/i-ran-60-automated-tests-on-my-ai-skills-registry-heres-what-broke-3j5p</guid>
      <description>&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;I've been building an open registry that indexes AI agent skills — think npm but for agent capabilities. The idea: crawl GitHub repos, extract skill metadata, and let agents discover tools they need at runtime.&lt;/p&gt;

&lt;p&gt;After indexing &lt;strong&gt;5,090 skills from 200+ repositories&lt;/strong&gt;, I figured it was time to actually test whether any of this worked. I wrote 60+ automated tests covering the API surface, search quality, security headers, and data integrity.&lt;/p&gt;

&lt;p&gt;The results were... humbling.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-tagging was wrong 50% of the time
&lt;/h2&gt;

&lt;p&gt;This was the biggest gut punch. I had an auto-tagger that analyzed skill descriptions and assigned category tags. Seemed smart. Seemed useful.&lt;/p&gt;

&lt;p&gt;It tagged a PostgreSQL migration skill as &lt;code&gt;robotics&lt;/code&gt;. A bioinformatics pipeline skill got &lt;code&gt;iOS&lt;/code&gt;. A Redis caching skill got &lt;code&gt;embedded-systems&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;50% of auto-assigned tags were wrong.&lt;/strong&gt; Not slightly-off wrong — &lt;em&gt;completely unrelated domain&lt;/em&gt; wrong.&lt;/p&gt;

&lt;p&gt;The root cause was pretty mundane: the tagger was matching on incidental keywords in descriptions rather than understanding what the skill actually did. A description mentioning "arm" (as in ARM architecture) triggered &lt;code&gt;robotics&lt;/code&gt;. Mentioning "cell" triggered &lt;code&gt;biology&lt;/code&gt;, which cascaded to &lt;code&gt;iOS&lt;/code&gt; through some associative chain I still don't fully understand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Keyword-based classification on short technical text is basically a coin flip. Either invest in proper few-shot classification with domain examples, or don't auto-tag at all. Wrong tags are worse than no tags — they actively erode trust in search results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The resolve API: 45% perfect, 80% usable
&lt;/h2&gt;

&lt;p&gt;The resolve endpoint is the core of the project — an agent describes what it needs, and the API returns matching skills. I tested it against a curated set of queries with known correct answers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;45% of responses were perfect&lt;/strong&gt; (returned exactly the right skill, top result)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80% were usable&lt;/strong&gt; (correct skill appeared somewhere in the top 5)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;20% returned garbage or missed entirely&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting finding: &lt;strong&gt;keyword matching consistently beat semantic search&lt;/strong&gt; for this use case. When an agent asks for "postgres connection pooling," matching on "postgres" and "pool" in skill names and descriptions outperformed embedding similarity.&lt;/p&gt;

&lt;p&gt;But keyword matching has a pollution problem. Skills from forked repos with identical names flood the results. A query for "docker-deploy" might return the same skill 3 times from 3 different forks, pushing actually-different skills off the first page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; For structured, technical queries (which is what agents generate), keyword search with good deduplication probably beats semantic search. The AI community's instinct to embed everything isn't always right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security: started at 1/7, ended at 7/7
&lt;/h2&gt;

&lt;p&gt;I ran a basic security header audit. On first test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;code&gt;X-Content-Type-Options&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;Strict-Transport-Security&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;X-Frame-Options&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;Content-Security-Policy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;Referrer-Policy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;Permissions-Policy&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;❌ &lt;code&gt;X-XSS-Protection&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1 out of 7.&lt;/strong&gt; For a project that serves executable skill metadata to AI agents, this was not great.&lt;/p&gt;

&lt;p&gt;The fix was straightforward — a middleware adding the missing headers took about 20 minutes. Now at 7/7. But the fact that I shipped without them, and didn't notice until automated tests caught it, is the real takeaway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Security header checks should be in your CI pipeline from day one, not something you add after a QA sweep. Especially for APIs that serve content agents will act on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Duplicate skills are growing, not shrinking
&lt;/h2&gt;

&lt;p&gt;I found the same skill appearing 2, then 3 times across different repos. The cause: GitHub forks. Someone forks a repo with 15 skills, makes one change, and now I'm indexing 15 duplicate skills from a slightly-different source.&lt;/p&gt;

&lt;p&gt;The duplication is &lt;em&gt;growing&lt;/em&gt; over time because forks keep happening. When I first checked: 2 copies of common skills. A week later: 3 copies. The indexer treats each repo as authoritative, so forks look like legitimate new sources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Any registry that crawls GitHub needs fork detection from the start. The GitHub API exposes fork relationships — use them. Deduplicate on content hash, not just name, because forks with minor changes are still essentially duplicates for discovery purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Template placeholders in production
&lt;/h2&gt;

&lt;p&gt;This one was embarrassing. Several indexed skills had descriptions like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;TODO: Add description here&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;A skill that does [THING]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Template skill - replace with your implementation&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These were template/scaffold skills from starter repos that the indexer treated as real skills. Nobody caught them because they had valid structure — a name, a SKILL.md file, the right directory layout. They just had zero actual content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Validate content, not just structure. A skill with "TODO" in its description should be filtered out or flagged. This seems obvious in retrospect, but when you're focused on parsing metadata correctly, you forget to check whether the metadata is actually meaningful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search returns 0 results. Resolve works fine.
&lt;/h2&gt;

&lt;p&gt;This was the weirdest bug. The &lt;code&gt;/search&lt;/code&gt; endpoint — meant for humans browsing the registry — returned 0 results for queries like "kubernetes deployment" or "database migration." Meanwhile, the &lt;code&gt;/resolve&lt;/code&gt; endpoint — meant for agents — found relevant skills instantly for equivalent queries.&lt;/p&gt;

&lt;p&gt;The cause: search used full-text search against a subset of fields (name + short description), while resolve searched against all fields including README content, tags, and examples. The skills that matched were rich in their full metadata but had terse names and descriptions.&lt;/p&gt;

&lt;p&gt;Example: a skill named &lt;code&gt;k8s-deploy&lt;/code&gt; with description "Manages deployments" would never match a search for "kubernetes deployment." But resolve would find it through README content mentioning "Kubernetes deployment orchestration."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; If your data has inconsistent metadata richness, your search needs to account for that. Either enforce richer required fields, or search across everything. Having two endpoints with different search scopes is a bug, not a feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write the tests before indexing.&lt;/strong&gt; I built the crawler, indexed 5k skills, then tested. Should have had quality gates before anything entered the registry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fork detection on day one.&lt;/strong&gt; The duplicate problem compounds daily and is harder to fix retroactively because people may already reference the duplicate entries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No auto-tagging without a validation set.&lt;/strong&gt; I should have manually tagged 100 skills first and measured accuracy before deploying the auto-tagger to 5,000.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security headers in the project template.&lt;/strong&gt; Not as an afterthought.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One search implementation, not two.&lt;/strong&gt; The search/resolve split made sense architecturally but created a confusing quality gap.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Numbers summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Skills indexed&lt;/td&gt;
&lt;td&gt;5,090&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source repos&lt;/td&gt;
&lt;td&gt;200+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auto-tag accuracy&lt;/td&gt;
&lt;td&gt;~50%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolve: perfect match&lt;/td&gt;
&lt;td&gt;45%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resolve: usable (top-5)&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security headers (before)&lt;/td&gt;
&lt;td&gt;1/7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security headers (after)&lt;/td&gt;
&lt;td&gt;7/7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate skill copies&lt;/td&gt;
&lt;td&gt;2→3 and growing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template placeholders found&lt;/td&gt;
&lt;td&gt;Multiple&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search zero-result rate&lt;/td&gt;
&lt;td&gt;High for reasonable queries&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;The project is &lt;a href="https://skillshub.wtf" rel="noopener noreferrer"&gt;skillshub.wtf&lt;/a&gt; if you want to poke at it. It's open source and clearly still has rough edges.&lt;/p&gt;

&lt;p&gt;The meta-lesson from all of this: &lt;strong&gt;building a registry is easy; building a trustworthy registry is hard.&lt;/strong&gt; The indexing, API, and infrastructure were the fun parts. Data quality, deduplication, and search relevance are where the actual work lives — and where I underinvested.&lt;/p&gt;

&lt;p&gt;If you're building anything that aggregates open-source metadata at scale, write your quality tests first. Your crawler will happily ingest garbage with perfect formatting, and you won't notice until someone searches for "kubernetes" and gets zero results.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All findings are from real QA runs against a real system. Nothing was cherry-picked to look worse (or better) than it is.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>An agent skills solver - free to use. No need to pre-load skills for your agent, retrieve skills at anytime you need it</title>
      <dc:creator>Luren L.</dc:creator>
      <pubDate>Wed, 18 Mar 2026 04:25:54 +0000</pubDate>
      <link>https://dev.to/comeonoliver/an-agent-skills-solver-free-to-use-no-need-to-pre-load-skills-for-your-agent-retrieve-skills-at-3okj</link>
      <guid>https://dev.to/comeonoliver/an-agent-skills-solver-free-to-use-no-need-to-pre-load-skills-for-your-agent-retrieve-skills-at-3okj</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/comeonoliver" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1308424%2F68984af6-5144-4945-9b2f-e3a996ae658f.png" alt="comeonoliver"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/comeonoliver/i-built-a-skill-resolver-for-ai-agents-what-i-learned-about-token-economics-2n27" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;I Built a Skill Resolver for AI Agents - What I Learned About Token Economics&lt;/h2&gt;
      &lt;h3&gt;Luren L. ・ Mar 18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#opensource&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#typescript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Built a Skill Resolver for AI Agents - What I Learned About Token Economics</title>
      <dc:creator>Luren L.</dc:creator>
      <pubDate>Wed, 18 Mar 2026 04:24:06 +0000</pubDate>
      <link>https://dev.to/comeonoliver/i-built-a-skill-resolver-for-ai-agents-what-i-learned-about-token-economics-2n27</link>
      <guid>https://dev.to/comeonoliver/i-built-a-skill-resolver-for-ai-agents-what-i-learned-about-token-economics-2n27</guid>
      <description>&lt;h2&gt;
  
  
  The Problem Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;AI coding agents (Claude Code, Codex, Cursor) have a dirty secret: they waste &lt;strong&gt;~50,000 tokens&lt;/strong&gt; every time they need a new skill.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent gets a task it doesn't know how to do&lt;/li&gt;
&lt;li&gt;Searches GitHub for SKILL.md files&lt;/li&gt;
&lt;li&gt;Reads 5-10 of them to compare&lt;/li&gt;
&lt;li&gt;Picks one&lt;/li&gt;
&lt;li&gt;Finally starts the actual work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps 2-4 burn through context window like jet fuel. And here's the kicker — the agent does this &lt;strong&gt;every session&lt;/strong&gt;, because it doesn't remember what it found last time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Math That Changed My Mind
&lt;/h2&gt;

&lt;p&gt;I measured it across 50 sessions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;Tokens for skill discovery&lt;/th&gt;
&lt;th&gt;Tokens for actual task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manual search&lt;/td&gt;
&lt;td&gt;~50,000&lt;/td&gt;
&lt;td&gt;~5,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pre-loaded (20 skills)&lt;/td&gt;
&lt;td&gt;0 (pre-loaded)&lt;/td&gt;
&lt;td&gt;~5,000 + 40,000 context tax&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resolver&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~200&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~5,000&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The resolver approach is &lt;strong&gt;250x more efficient&lt;/strong&gt; than manual search and doesn't waste context on skills you might never use.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://skillshub.wtf" rel="noopener noreferrer"&gt;SkillsHub&lt;/a&gt; — an open-source skill registry with a resolve endpoint that matches natural language task descriptions to the best skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s1"&gt;'https://skillshub.wtf/api/v1/skills/resolve?task=terraform+modules+testing'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"skill"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terraform-skill"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Terraform and OpenTofu — modules, tests, CI/CD..."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fetchUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://skillshub.wtf/antonbabenko/terraform-skill/terraform-skill?format=md"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tokenWeights"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"terraform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"modules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"testing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One call. Best skill. Confidence score. Direct URL to fetch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ranking Algorithm
&lt;/h2&gt;

&lt;p&gt;The resolver uses a multi-signal scoring system (no LLM inference required):&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Text Relevance (0-70 points)
&lt;/h3&gt;

&lt;p&gt;TF-IDF-inspired token weighting. Rare terms score higher:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;weight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;log2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;totalMatched&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;tokenMatchCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"terraform" appears in 12 out of 5,000 skills → weight 3x.&lt;br&gt;
"testing" appears in 400 → weight 1.2x.&lt;/p&gt;

&lt;p&gt;This means domain-specific terms dominate the ranking naturally.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Phrase Matching
&lt;/h3&gt;

&lt;p&gt;"infrastructure as code" is treated as one concept, not three separate words. 25+ phrase mappings prevent "code signing" from matching "infrastructure as code."&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Quality Score (0-20 points)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Readme depth (log₂ of character count)&lt;/li&gt;
&lt;li&gt;Tag completeness&lt;/li&gt;
&lt;li&gt;Description quality&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  4. Popularity (0-10 points)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;GitHub stars (log₁₀ scaled)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  5. Domain Conflict Penalties
&lt;/h3&gt;

&lt;p&gt;If the query says "nodejs" but the skill is for Django → -15 points. Prevents cross-domain false positives.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. TF-IDF beats embeddings for structured matching
&lt;/h3&gt;

&lt;p&gt;At 5,000 skills, keyword matching with IDF weighting runs in &lt;strong&gt;~300ms&lt;/strong&gt; and achieves &lt;strong&gt;7.75/10 accuracy&lt;/strong&gt; on our benchmark. No GPU needed, no embedding model to maintain.&lt;/p&gt;

&lt;p&gt;Embeddings would be better for semantic matching ("infrastructure as code" ≈ "IaC tooling") but the added complexity and latency aren't worth it at this scale.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Tag quality is make-or-break
&lt;/h3&gt;

&lt;p&gt;We imported 5,000+ skills from 200+ GitHub repos. Auto-tagging from descriptions created massive pollution — an email composer skill got tagged "docker" because the description mentioned Docker deployment. We had to build 3 layers of tag validation to fix it.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. The feedback loop is the hardest part
&lt;/h3&gt;

&lt;p&gt;Our initial confidence scores measured &lt;strong&gt;semantic match&lt;/strong&gt; — how well the words align. But "sounds right" ≠ "actually works." We shipped a feedback endpoint so agents can report whether a skill actually helped:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;POST /api/v1/skills/&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;/feedback
&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"task"&lt;/span&gt;: &lt;span class="s2"&gt;"terraform testing"&lt;/span&gt;, &lt;span class="s2"&gt;"helpful"&lt;/span&gt;: &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The real ranking will come from execution outcomes, not word matching.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Agents need methodology, not knowledge
&lt;/h3&gt;

&lt;p&gt;The most useful SKILL.md files aren't encyclopedias. They're playbooks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When to use this vs that&lt;/li&gt;
&lt;li&gt;Decision tree for common scenarios
&lt;/li&gt;
&lt;li&gt;What breaks and how to fix it&lt;/li&gt;
&lt;li&gt;When to stop and ask for help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trail of Bits' 61 security skills are the gold standard. Each one reads like an engineering runbook.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;API&lt;/td&gt;
&lt;td&gt;Next.js 16 API Routes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;PostgreSQL + Drizzle ORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scoring&lt;/td&gt;
&lt;td&gt;TF-IDF + phrase matching (pure TypeScript)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;API keys (skh_...) for writes, none for reads&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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;&lt;span class="c"&gt;# Get the API guide&lt;/span&gt;
curl https://skillshub.wtf/api/v1

&lt;span class="c"&gt;# Resolve a skill&lt;/span&gt;
curl &lt;span class="s1"&gt;'https://skillshub.wtf/api/v1/skills/resolve?task=react+testing+best+practices'&lt;/span&gt;

&lt;span class="c"&gt;# Fetch the skill markdown&lt;/span&gt;
curl &lt;span class="s1"&gt;'https://skillshub.wtf/trailofbits/skills/modern-python?format=md'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No auth needed for reading. &lt;a href="https://github.com/ComeOnOliver/skillshub" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; (MIT license).&lt;/p&gt;

&lt;p&gt;5,000+ skills from Microsoft, OpenAI, Trail of Bits, HashiCorp, Sentry, Snyk, and 200+ more repos.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's your experience with AI agent skill discovery? Do your agents pre-load skills or resolve on demand? I'd love to hear about different approaches in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
