DEV Community

Cover image for I Built a Local Registry for My CLI Tools
Alucard
Alucard

Posted on

I Built a Local Registry for My CLI Tools

I Built a Local Registry for My CLI Tools

Over time, my development machine became full of small commands.

Some were global npm packages.

Some were pnpm tools.

Some were shell scripts.

Some were internal tools.

Some were small automation commands created for AI-assisted coding workflows.

The problem was not installation.

The problem was memory.

I kept asking myself:

  • What does this command do?
  • Where is the repository?
  • Who maintains it?
  • How do I use it?
  • Is it still active?
  • Why did I add it?

So I built a small CLI tool called tool-manage.

GitHub:
https://github.com/AlucPro/tool-manage

npm:
https://www.npmjs.com/package/@alucpro/tool-manage

What it does

tool-manage gives local commands a sqlite-backed registry.

It can:

  • register a command from PATH
  • save metadata
  • store help output
  • import JSON specs
  • generate starter JSON templates
  • update records
  • soft-delete old commands

Example

tm --add pnpm
tm --show pnpm
tm --update pnpm

tm --generate sync-notes
tm --add ./sync-notes.json

tm --remove old-script
Enter fullscreen mode Exit fullscreen mode

Why not just use npm global list?

Because I do not only want to know what is installed.

I want to know what each command means in my workflow.

Package managers are good at installing things.
They are not designed to preserve the context around local commands, private scripts, or internal tools.

Why JSON specs?

Some tools do not expose good package metadata.

Some are just shell scripts.

Some are internal commands.

For those cases, tool-manage can generate a starter JSON file:

tm --generate sync-notes
Enter fullscreen mode Exit fullscreen mode

Then I can complete the description and import it later.

AI-assisted workflow

One use case I care about is AI-assisted coding.

When an AI assistant creates or explains a script, I can ask it to generate a tool-manage JSON spec for that command.

Then I can import it:

tm --add ./generated-command.json
Enter fullscreen mode Exit fullscreen mode

This makes small tools easier to remember and reuse.

What this tool is not

It is not a package manager.

It is not a version manager.

It does not replace npm, pnpm, nvm, volta, or mise.

It is just a memory layer for the commands already living on your machine.

Feedback welcome

I am still refining the workflow.

If you maintain many small scripts, internal tools, or local CLI commands, I would like to know how you currently manage them.

Top comments (0)