npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@smartsoft001-mobilems/claude-plugins

v2.87.0

Published

Claude Code plugins for MobileMS / MuzaCMS projects. Ships three variants:

Readme

@smartsoft001-mobilems/claude-plugins

Claude Code plugins for MobileMS / MuzaCMS projects. Ships three variants:

  • flow — modern Angular 20+ projects (primary plugin)
  • flow-legacy — Angular 14 projects
  • flow-external — standalone Angular 6–11 projects

MuzaCMS API access (required for mobilems-docs-reader skill)

The mobilems-docs-reader skill answers questions about the MuzaCMS / MobileMS indexer API by fetching its Swagger spec from a live MuzaCMS instance. The MuzaCMS docs page is behind a Symfony form-login, so the skill needs credentials. The refresh script lives next to the skill (plugins/<variant>/skills/mobilems-docs-reader/refresh-mobilems-api-spec.sh) and caches fetches per Claude Code session (with an 8-hour TTL) — see Caching below for details.

Set these two environment variables in every environment where the skill runs:

| Variable | Value | | --- | --- | | MOBILEMS_LOGIN | MuzaCMS username | | MOBILEMS_PASSWORD | MuzaCMS password |

These are not vault-grade secrets, but they are still credentials — do not commit them to source control.

Local setup

The simplest path: put the two variables in a .env file at your project root. The refresh script auto-loads .env from the current working directory every time it runs — no set -a; source .env; set +a ritual, no direnv, no dotenv-cli. Example .env entry:

MOBILEMS_LOGIN=your.username
MOBILEMS_PASSWORD=your-password

Only .env is loaded (not .env.local, .env.dev, or any other variant) — keep your MuzaCMS credentials in the single canonical file. Already-set shell environment variables take precedence over .env values, so you can override individual keys with an inline export when needed:

MOBILEMS_LOGIN=other-user bash ./node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow/scripts/refresh-mobilems-api-spec.sh

The script's first action is to validate that both MOBILEMS_LOGIN and MOBILEMS_PASSWORD are present (in your shell or loaded from .env). If either is missing it exits with a clear instruction on what to set, before attempting any HTTP call.

Tool dependencies

The shell script uses curl and jq. Both are usually preinstalled on macOS (with Homebrew) and most Linux distros, but the script does a pre-flight check and tells you how to install whichever is missing (brew install jq / sudo apt install jq).

Manual refresh

Run the refresh script directly:

bash ./node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow/scripts/refresh-mobilems-api-spec.sh

You should see a ✓ Refreshed N bytes — <Title> <Version> line and a new mobilems-api.json inside node_modules/@smartsoft001-mobilems/claude-plugins/shared-assets/.

The same script ships under plugins/flow-external/... and plugins/flow-legacy/... for the other two plugin variants — pick the path that matches the plugin your project uses.

Claude Code permission

The mobilems-docs-reader skill invokes the refresh script via the Bash tool. Claude Code prompts before running unknown Bash commands; depending on your permission mode, the call may be auto-denied without a prompt. To pre-approve, add the entry below to your project's .claude/settings.json (committed) or .claude/settings.local.json (per-dev, gitignored), under permissions.allow:

{
  "permissions": {
    "allow": [
      "Bash(bash ./node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow/scripts/refresh-mobilems-api-spec.sh:*)"
    ]
  }
}

If the call is denied, the skill stops and tells you which rule to add — it does not fabricate an answer.

CI setup

Add MOBILEMS_LOGIN and MOBILEMS_PASSWORD to your CI provider's repository secrets, then expose them in the env: block of any job that may invoke a Claude skill. No scheduled refresh job is needed — each CI job runs without a CLAUDE_CODE_SESSION_ID, so the script treats it as a manual/terminal invocation and always re-fetches a fresh spec.

Caching

To avoid re-downloading the ~400 KB spec on every follow-up question inside a single Claude Code session, the script caches the fetched spec and skips the network call when the cache is still valid.

A small sidecar mobilems-api.meta.json is written next to the spec containing two fields:

{
  "sessionId": "<CLAUDE_CODE_SESSION_ID at time of fetch>",
  "fetchedAt": "<ISO 8601 timestamp>"
}

The script fetches afresh when any of these holds:

  • CLAUDE_CODE_SESSION_ID is set but differs from the cached sessionId → new Claude Code session.
  • The cached fetchedAt is more than 8 hours old.
  • The spec file or meta file is missing.
  • CLAUDE_CODE_SESSION_ID is not set → the call is treated as manual/terminal and always re-fetches.

Manual/terminal fetches preserve the existing sessionId in the meta file (only fetchedAt is updated). That way, if you run the script from your shell and later resume the same Claude Code session, the in-session cache is still valid.

The skill itself doesn't read the meta — it simply runs the script and reads mobilems-api.json. The caching is entirely script-internal.