Engineering

·

Skillset: The self-hosted registry for AI resources

Why we built Skillset, a self-hosted registry that helps everyone at Quicko find and use AI skills.

vishvajit-sonagara

Dev Parikh

Full-Stack Developer

Skillset registry with a skills table, a zsh install command and a GitHub skill import

At Quicko, we started writing skills for tasks across engineering, design, product and other functions. These skills were important to give AI tools context about our work. Engineers kept them in a shared GitHub repository or in their project repositories. Other teams shared them on Slack or through our Claude organisation. Soon enough, our skills were fragmented in several places. To find one, you often had to know who wrote it or where they shared it. However, we wanted everyone in the team to be able to find and use these skills. So we built Skillset, a self-hosted registry for AI resources.

Why we built it

We first tried keeping all our skills in a shared GitHub repository. That worked for engineers. But teams across other functions neither had access to Github, nor did they needed it for their work. We needed a way for all our skills to be accessible to the entire organisation. We looked at skills.sh, openagentskill.com and other registries. While they were robust and cataloged a wide range of skills and MCP servers, they were mainly listed from public registries. Our skills had proprietary knowledge, so making them public was not an option. Thus, we decided to build a private registry that anyone in the organisation could use.

Agentic coding helped us build the MVP quickly.

The stack

We wanted Skillset to be easy to deploy and maintain. Bun let us keep using TypeScript, which we already knew well. It also brought several tools into one runtime, so we had fewer parts to set up and maintain. Compiling the application into a single binary helped keep the Docker image small. With Hono, we could keep the API code lightweight and organised. While React and TailwindCSS let us build the interface and make changes as we tested it. We chose PostgreSQL and S3 for storage because we already use them at Quicko.

Log in and sign up had to be simple. Google Workspace is one of the most commonly used methods for login, including us. Thus, it made sense for teams to be able to use Skillset with their work accounts. Better Auth helped us implement this and we were able to support not only Google Workspace, but also Microsoft Entra and GitHub through the same framework.

We ship Skillset as a Docker image to make setup easier. Teams can run the application without installing and configuring each part of the stack.


Figure 1. Skillset architecture: one Bun container backed by PostgreSQL and S3.

Figure 1. Skillset architecture: one Bun container backed by PostgreSQL and S3.

Inside a skill

A skill is a folder which contains SKILL.md. It can also have other files like reference materials, scripts etc. Being able to read all the Skill files helps a reader decide whether they want to install and use it. Hence, we decided to use Monaco Editor. As the name suggests, it is a text editor. It also supports syntax highlighting which helps while reading code files. Along with this, it helps in visualising a file tree.


Figure 2. A skills contents visualised using Monaco Editor.

Figure 2. A Skill's contents visualised using Monaco Editor.

Access and permissions

Skillset is by-default accessible by everyone in the organisation. However, there is a need for better access control. Skillset supports four user roles: Super Admin, Admin, Writer and Reader. Super Admins and Admins can manage organisation settings and skill management, meanwhile Writers can publish skills to the registry. Readers can only view skills. We added support for admins to import skills directly from their GitHub or GitLab repositories by supporting GitHub and OAuth applications and integrations.

Our internal skills still live in the shared GitHub repository we started with. We did not want people to copy each skill into Skillset and then keep two copies in sync. So we added a GitHub integration. Writers connect their GitHub account and publish a skill from the GitHub tab in the publish dialog. The shared repository remains the source of truth, and we maintain each skill in one place.


Figure 3. Writers can publish a skill straight from a connected GitHub repository.

Figure 3. Writers can publish a skill straight from a connected GitHub repository.

Installing skills

In Skillset, you can download a ZIP from the skill's page, use the CLI, or connect the Skillset MCP server to your preferred coding agent. The CLI and MCP server supports the same operations as the interface like publishing, downloading and reading a skill. CLI and MCP are the interfaces developers and agents use extensively. Your agents can interact with Skillset in same way a human would interact with the interface.

Skillset counts each download from these three routes as an install. The install count helps us see which skills people download most.


Figure 4. How a skill is published and installed. File bytes never pass through the API.

Figure 4. How a skill is published and installed.


Most of us use both private and public skills. We did not want people to upload every public skill to Skillset before they could install it. So the CLI can install skills from the registry or directly from a public GitHub repository. Adding a skill through a GitHub URL also sends a request to an Admin or Super Admin to add it to Skillset. This lets people try public skills and submit them for the rest of the team to use.


Figure 5. Installing from a GitHub URL submits the skill for an Admin to approve.

Figure 5. Installing from a GitHub URL submits the skill for an Admin to approve.

Adoption at Quicko

Before Skillset, we had few skills in a private repository and about 10 in our Claude organisation. After taking Skillset live, we saw immediate adaptation across functions. With more than 30 skills being published within the first week, we realised what easy access and robust cataloging can solve for organisations.

What’s next

We want Skillset to become a catalog for every AI resource our organisation uses. It helps in cataloging all the AI resources which would make them more accessible and discoverable.

An agent needs two things to work: access to information, and knowledge of how your team works. MCP servers give it the first. Skills give it the second. Say you want your agent to build a page for your website. The design lives in Figma, and the Figma MCP server lets the agent fetch it and write code to match. But your team also follows its own coding practices. Without a skill, you have to repeat them each time the agent changes your code. A skill records those practices once, and the agent applies them on every change.

For now, Skillset catalogs only skills. As we explored similar products, we realized the registry could also hold MCP servers and Plugins. Therefore, we plan to add support for cataloging MCP Servers and Plugins on Skillset.

Found this useful?

Share it with someone who’d enjoy it.

Author

vishvajit-sonagara
Dev Parikh

Full-Stack Developer