@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 projectsflow-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-passwordOnly .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.shThe 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.shYou 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_IDis set but differs from the cachedsessionId→ new Claude Code session.- The cached
fetchedAtis more than 8 hours old. - The spec file or meta file is missing.
CLAUDE_CODE_SESSION_IDis 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.
