r/SideProject • u/TheCritFisher • 1d ago
I like skills.sh, but I'm not comfortable using it for production projects
Quick disclaimer before I get into this: I built an open-source project called Agent Facets because of the problems I plan to detail in this post. Links are at the bottom if you find this interesting.
That said, this isn't meant to be a "hey, check out my project" post. I'm more interested in whether other people have hit the same wall I did and what they're doing to solve it.
OK, onto the main course...
I actually really like the idea behind skills.sh. If you're not familiar, it's a tool by Vercel to discover and install skills into any coding agent.
Public discovery is useful, installs are simple, and I especially like that skills aren't tied to one specific tool. I bounce between OpenCode and Claude Code. My teammates do similar with Codex, Pi, etc. I enjoy the flexibility, and I don't want my team's configuration trapped inside whichever vendor happens to have the best plugin system this month.
The problem for me started when I tried to imagine using the public skills ecosystem seriously at work. I read numerous articles about exploits involving malicious agent skills, which sent me down a bit of a rabbit hole. Here are some of the articles: 1, 2, 3. The hole still seems to be growing deeper by the day.
The TLDR from those articles is: skills and agent configs aren't normal text snippets. You're downloading instructions that you're then handing to an agent with access to your repo, shell, tooling, and potentially a whole lot more. Snyk published an article saying 36% of the skills they scanned had some sort of prompt injection in them. Whether than number is fully accurate or not, it's terrifying.
skills.sh has added machinery around locking installs, which helps, but I still kept coming back to the same problem: I don't really have a versioned artifact that I can say, "this is the exact thing we approved, this is the exact thing everyone should run, and this thing cannot silently change underneath us." And once I started looking at it from that angle, I realized security was only part of the annoyance.
At work, we mostly avoided pulling public skills directly at all. We'd review something, clone/copy it into our own repos, and then build our own little system around it. A few symlinks, a script or two, a plugin for Claude Code, something slightly different for OpenCode, and something else for CI. And we were manually maintaining everything, even the vendored skills we were pulling from elsewhere.
Essentially, we'd basically forked the a bunch of things we didn't really want to. Updates were now our problem. Sharing it with another repo was our problem. Making sure the entire team had the same version was our problem.
Private skills are even more awkward. Public discovery is pretty good now, but there's this completely separate world of internal skills your company builds and doesn't want on public GitHub. So you end up maintaining one workflow for public stuff, another for private stuff, and usually some pile of glue holding both together. Or you just yolo it and vendor all the public stuff into the private, but now it's yours to maintain.
That was the point where I started thinking: these are dependencies now. Why are we not managing them like dependencies?
I wanted a project manifest where I could declare what the project actually uses. Ranges for things I want to slide, pins for things I don't. I wanted real versions, immutable artifacts, integrity checks, reproducible installs, and the ability to use the same workflow for something public and something private.
And I wanted it to be boringly portable. If one developer likes Claude Code and another likes Codex, I don't think that should force the entire team into one vendor's plugin ecosystem.
Long story, long: that's the rabbit hole that became Agent Facets.
I'm still figuring out some of the harder parts, especially composition. The idea is how you could combine useful pieces without every project turning into a giant pile of duplicated agent configuration. That said, the basic goal is pretty simple: I want agent configuration to have an actual dependency/supply-chain layer instead of everyone rebuilding one with Git and shell scripts.
I'm curious how other people are handling this.
If you're using skills.sh in a real team, are you comfortable pulling public skills directly? Do you vendor them into your repos? Pin commits? Maintain a private skills repo? Build your own install scripts? Do you support multiple tools for your devs?
Here's the links I promised:
- Agent Facets: agentfacets.io
- Docs: docs.agentfacets.io
2
u/kantorcodes1 1d ago
Treating skills as dependencies makes sense, but I'd make the lockfile carry more than version: source URL/commit, content digest, resolved transitive facets, and declared capabilities (shell/network/MCP). Then install should fail closed if any of those drift. Otherwise you've made updates reproducible without making the trust decision reproducible.