Web Console Local Traces
forcedotcom/salesforcedx-vscode
Unblock hosted Web Console OTLP to localhost:4318. An agent skill from forcedotcom/salesforcedx-vscode.
How sfdx-hardis monitoring commands, notification types, frequency, and per-channel routing fit together.
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notifications --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/monitoring-notifications .claude/skills/monitoring-notifications && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .claude/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notificationsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notifications --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/monitoring-notifications .agents/skills/monitoring-notifications && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .agents/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notifications --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/monitoring-notifications .cursor/skills/monitoring-notifications && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .cursor/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/hardisgroupcom/sfdx-hardis.git --path .claude/skills/monitoring-notifications--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notifications --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/monitoring-notifications .gemini/skills/monitoring-notifications && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .gemini/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notificationsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/monitoring-notifications .github/skills/monitoring-notifications && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .github/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install hardisgroupcom/sfdx-hardis monitoring-notifications --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/hardisgroupcom/sfdx-hardis.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/monitoring-notifications .opencode/skills/monitoring-notifications && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "monitoring-notifications" agent skill from https://github.com/hardisgroupcom/sfdx-hardis/tree/main/.claude/skills/monitoring-notifications into .opencode/skills/monitoring-notifications/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "monitoring-notifications", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
monitoring-notificationsHow sfdx-hardis monitoring commands, notification types, frequency, and per-channel routing fit together.
Monitoring Notifications is an agent skill from hardisgroupcom/sfdx-hardis. How sfdx-hardis monitoring commands, notification types, frequency, and per-channel routing fit together. Use when adding a new monitoring command, adding a new notification type, changing default routing thresholds, wiring a new channel, or changing/removing an indicator's metrics or logElements (which also requires the grafana-dashboards skill for dashboard impact).
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Monitoring and alerting. It works with Grafana and Salesforce. The repository describes itself as: French-army-knife Toolbox for Salesforce. Orchestrates base commands and assist users with interactive wizards to make much more than native Salesforce CLI + Allows you to define…. The licence is AGPL-3.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 971ac89. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
yarnnodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
salesforceicons.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Monitoring Notifications loads about 5.5k tokens when it runs. Until then it costs about 99 tokens; SKILL.md has 1,844 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from hardisgroupcom/sfdx-hardis at commit 971ac89, republished under its AGPL-3.0 licence (© hardisgroupcom). 1,844 words, ~5,453 tokens.
.claude/skills/monitoring-notifications/SKILL.md (or your agent's skills folder).This skill documents the moving parts of the monitoring + notification pipeline and lists exactly which files must be touched when adding or modifying a command, notification type, channel, or default.
hardis:org:monitor:all. Has a key, command, frequency, and a notificationTypes: string[] declaring which notification type keys it can emit. Listed in monitoringCommandsDefault. Routing thresholds are NOT stored here.NotifMessage.type. Every notification dispatched through NotifProvider.postNotifications has one. Listed in the NotifMessage.type union. Its per-channel routing thresholds (plus its category, SLDS icon, colorClass, and emitted severities) live on notificationTypesDefault in src/common/notifProvider/types.ts.messaging (Slack + Teams), email, api. Providers declare their channel via getChannel().log < success < info < warning < error < critical. The sentinel off disables the channel.colorClass -> category's colorClass.Most monitoring commands emit a single notification type whose key matches the command key (e.g. AUDIT_TRAIL command emits AUDIT_TRAIL). The exception is APEX_FLOW_ERRORS, which emits two distinct types via notificationTypes: ['APEX_ERROR', 'FLOW_ERROR'].
| What | Where | Notes |
|---|---|---|
| Per-notification-type metadata (category + icon + colorClass + emittedSeverities + channel defaults) | src/common/notifProvider/types.ts -> notificationTypesDefault | Record<NotifMessageType, NotificationTypeDefault> -- the SINGLE source of truth for everything per-type. Exhaustive: a new union member without an entry here is a compile error. Read fields with notificationTypesDefault[key].category, .icon, .colorClass, .emittedSeverities, .defaults. |
| Monitoring commands (key, command, frequency, notif refs) | src/common/monitoring/monitoringDefaults.ts -> monitoringCommandsDefault | Array of MonitoringCommandEntry. Iterated by monitor:all on every run. Each entry has notificationTypes: string[] plus optional category / icon / colorClass overrides for aggregate commands (e.g. APEX_FLOW_ERRORS). |
| Notification type union | src/common/notifProvider/types.ts -> NotifMessageType | The TypeScript union. Maintainer comment in NotifMessage lists everywhere to update. |
| Category list (key + order + icon + colorClass) | src/common/notifProvider/types.ts -> NOTIFICATION_CATEGORIES | The 7 categories rendered as sections in the configuration UI (orgActivity, userActivity, apexTestsSecurity, orgInfo, technicalDebt, licensesPackages, other). Each entry carries an SLDS icon and a colorClass used as the category-level theming fallback. Titles/descriptions are resolved at runtime via i18n (notifCategoryTitle<Pascal> / notifCategoryDesc<Pascal>). |
The user .sfdx-hardis.yml has two independent top-level keys, each merged by key onto its respective defaults list:
monitoringCommands: -- scheduling overrides. monitor:all calls resolveMonitoringCommands(monitoringCommandsDefault, userEntries) from src/common/notifProvider/notificationConfig.ts. Each user entry is shallow-merged on top of the matching default; user-only entries (new keys) are appended as custom commands.notificationConfig: -- per-notification-type routing overrides. NotifProvider.postNotifications calls getEffectiveNotificationConfig(notifType) from the same file. It reads notificationTypesDefault[type].defaults and merges the user's notificationConfig[i].notifications block on top, field-by-field.Net effect: fields the user did not set automatically pick up new defaults the next time you ship. Fields the user explicitly set keep their value (user intent wins).
This is a breaking change from the previous shape, where thresholds lived on monitoringCommands[].notifications. Old user YAML must be migrated; see CHANGELOG for the migration note.
Implemented in shouldRunCommandNow() in notificationConfig.ts. Each entry's frequency is one of:
daily -- runs every time.weekly -- runs on frequencyDay (default saturday).biweekly -- runs on frequencyDay of even ISO weeks (anchored, predictable).monthly -- runs on frequencyDayOfMonth (default 1, clamped to last day for short months).off -- never runs unless --force-all or env var MONITORING_IGNORE_FREQUENCY=true.Touch these files, in this order. The new command will be picked up on every existing installation automatically (as long as the user has not overridden the same key).
src/common/monitoring/monitoringDefaults.ts -- append an entry to monitoringCommandsDefault:
{
key: 'YOUR_NEW_COMMAND',
command: 'sf hardis:your:new:command',
frequency: 'weekly',
notificationTypes: ['YOUR_NEW_COMMAND'], // most commands list their own key; APEX_FLOW_ERRORS-style aggregates list 2+ different keys
// frequencyDay: 'monday', // optional
// frequencyDayOfMonth: 1, // optional, monthly only
// category: 'orgActivity', // optional override; aggregates only -- single-type commands inherit from the notification type
// icon: 'utility:warning', // optional override; aggregates only -- single-type commands inherit from the notification type
// colorClass: 'audit', // optional override; aggregates only -- single-type commands inherit (type -> category)
}Note: built-in entries do set explicit category and icon (even single-type ones) for self-containment, but they intentionally do not set colorClass, letting it inherit from the notification type. Set colorClass on the command only when an aggregate needs a badge color that differs from its first notification type.
Do not set a hardcoded title -- the title is resolved at runtime from the notifTypeTitle<PascalCaseKey> i18n key (see step 4).
src/common/notifProvider/types.ts -- add the notification type emitted by the command (typically the same key as the command, but it can differ) to the NotifMessageType union and add a matching entry to notificationTypesDefault. The record is typed Record<NotifMessageType, NotificationTypeDefault> so the compiler enforces this. A single entry carries all per-type metadata:
YOUR_NEW_COMMAND: {
category: 'orgActivity', // one of the 7 categories
icon: 'utility:warning', // SLDS icon (https://www.salesforceicons.com/)
colorClass: 'audit', // CSS class hint for UI theming (see existing entries for the vocabulary in use: audit, alerts, tests, security, users, limits, health, licenses, legacy, updates, backup, apex, metadata-access, unused-metadata, connected-apps)
emittedSeverities: ['warning', 'log'], // every severity your command may pass to postNotifications()
defaults: { messaging: 'warning', email: 'error', api: 'log' }, // per-channel routing thresholds
},Default routing patterns:
{ messaging: 'warning', email: 'error', api: 'log' } for issues to act on{ messaging: 'info', email: 'warning', api: 'log' } for informational reportsAlways include api: 'log' unless there's a reason not to (the API/Grafana provider expects to receive everything). Each per-channel threshold MUST be a value the type can actually be emitted with (= a member of emittedSeverities ∪ {"log"} ∪ {"off"}) -- the catalog clamps any out-of-range value, so a mismatch silently downgrades to 'off' or to the nearest emitted severity.
colorClass is required on NotificationTypeDefault. Pick the closest existing value rather than inventing a new one unless the VS Code extension also gains a matching CSS rule. Reuse is the norm: e.g. AUDIT_TRAIL -> audit, anything alert-flavoured -> alerts, security-flavoured -> security, license-related -> licenses. Per-type values override the category-level colorClass.
The email default may also be the object form { threshold, recipients, replaceRecipients } -- see EmailChannelObject in types.ts. Built-in defaults use the bare string form; the object form is mostly for user overrides in .sfdx-hardis.yml.
If the command aggregates multiple notification types (like APEX_FLOW_ERRORS -> APEX_ERROR + FLOW_ERROR), set category / icon / colorClass directly on the command entry in step 1 to pin a row identity that isn't inherited from the first emitted type.
config/sfdx-hardis.jsonschema.json -- add the key to both definitions.enum_monitoring_commands.enum/enumNames and definitions.enum_notification_types.enum/enumNames. Keep both arrays alphabetically sorted.
i18n -- add two keys per locale, all 9 of them (en, de, es, fr, it, ja, nl, pl, pt-BR). Naming follows the pattern emitted by the helpers in monitoringDefaults.ts:
notifTypeTitle<PascalCaseKey> -- short label shown in the configuration UI.notifTypeDesc<PascalCaseKey> -- one-line explanation.YOUR_NEW_COMMAND -> YourNewCommand; UNUSED_USERS_CRM_6_MONTHS -> UnusedUsersCrm6Months.notifTypeTitle... is the single source of truth for the title (the docs table generator in monitor:all resolves it via t(getTitleI18nKey(cmd.key))). Write a short imperative phrase, and wrap the most informative noun phrase in **...** so it stands out in UIs that render markdown (e.g. "Detect if **org limits** are close to be reached")..claude/rules/translations.md for the other 8 locales. Each locale file has its own sort convention (see existing entries); pt-BR.json uses case-insensitive ordering, the others use case-sensitive.In the new command's source file -- when calling NotifProvider.postNotifications(...), set type: 'YOUR_NEW_COMMAND' (or whichever notification type key your command emits). Pick the right severity per case (it interacts with the threshold filter, so emit warning/error only when you really want to push to messaging by default).
metrics. An absent metric key means "not measured on this org"; a 0 means "measured, and it is zero". Emit nothing for something the org does not have (a SKU that is not provisioned, an object the edition lacks, a resource Salesforce reports no usage for) and emit a real 0 when you did measure zero -- apiProvider writes zero values correctly, and the dashboards rely on the difference to choose between a number and an empty state. The same rule applies to a value you cannot determine: if a split (billed vs covered, used vs allowed) cannot be computed because the source lacks the column, omit the derived metric instead of publishing a 0 that asserts something you did not measure.isUnsupportedSObjectError(error, '<SObject>') (src/common/utils/apiUtils.ts), or probe availability first, then log the reason, skip the notification and exit 0. usage-entitlements, consumption-alerts and ai-usage all follow this shape.CHANGELOG.md -- add a bullet under ## [beta] (main) pointing at the new command.
Grafana dashboards impact -- load the grafana-dashboards skill and follow its "When a monitoring indicator changes" checklist. Every new indicator (and every new metrics key) must be evaluated for the v2 dashboards in docs/grafana/dashboards-v2/: dedicated panel, fleet column, or generic Indicator Detail only.
You usually do not need to touch src/commands/hardis/org/monitor/all.ts -- it imports monitoringCommandsDefault from the shared module.
For notification types emitted outside monitor:all (e.g. BACKUP, DEPLOYMENT, DORA_REPORT):
src/common/notifProvider/types.ts -- add the type to the NotifMessageType union and add a single entry to notificationTypesDefault carrying category, icon, colorClass, emittedSeverities, and defaults (per-channel routing). Exhaustiveness check will fail compilation if you forget. There is no separate notificationDefaults file to edit -- it's derived from this map.config/sfdx-hardis.jsonschema.json -- add the key to definitions.enum_notification_types. Do not add it to enum_monitoring_commands (it isn't a command).notifTypeTitle<PascalCaseKey> and notifTypeDesc<PascalCaseKey> in all 9 locales.NotifProvider.postNotifications({ type: 'YOUR_TYPE', ... }) in the code that emits the notification.The new type appears automatically in notificationConfig[] of the hardis:config:monitoring-defaults payload because that list is derived from notificationTypesDefault.
grafana-dashboards skill: the type appears automatically in the Indicator Detail dashboard, but decide whether it deserves dedicated panels, and check alert rules if it carries actionable metrics.Edit notificationTypesDefault[KEY] in src/common/notifProvider/types.ts. The five sub-fields (category, icon, colorClass, emittedSeverities, defaults) live in the same place; updating one does not require touching any other file. Existing installations pick the change up automatically for any channel the user did not explicitly override.
Renaming/removing a metrics key, changing the logElements row shape, or deleting a notification type breaks Grafana panels that query it. Load the grafana-dashboards skill and follow its "When a monitoring indicator changes" checklist (grep the generator for the metric name, check docs/grafana/alerts-v2/, regenerate, lint, re-import).
If you change a default that a user has fully overridden in their YAML (notificationConfig: entry), their override wins. That's intentional.
The backup writes an AGENTS.md in every monitoring repository that lists the checks, their frequencies, the Loki labels, the log payload fields and the metric naming, for coding agents. A new or renamed command, notification type, metric key, log field or label changes what it must say: load the monitoring-agents-md skill and update the template in the same change.
Three steps if you ever need a fourth channel:
NotificationChannel in src/common/notifProvider/types.ts.Provider extending NotifProviderRoot with getChannel() returning the new value; register it in NotifProvider.getInstances() in src/common/notifProvider/index.ts.DEFAULT_CHANNEL_THRESHOLD in notificationConfig.ts and the channels array in getMonitoringConfigDefaults() (monitoringDefaults.ts).config/sfdx-hardis.jsonschema.json definitions.notification_channel_config.properties to expose it in YAML autocompletion.The VS Code extension reads defaults via the read-only hardis:config:monitoring-defaults command (src/commands/hardis/config/monitoring-defaults.ts). It returns:
{
"monitoringCommands": [
{
"key": "APEX_FLOW_ERRORS",
"title": "...", // translated
"description": "...", // translated
"category": "orgActivity", // foreign key to categories[]
"icon": "utility:warning", // SLDS, inherits from first notification type if entry omits it
"colorClass": "alerts", // CSS class for UI theming; entry override -> first type's colorClass -> category's colorClass
"command": "sf hardis:org:monitor:errors",
"frequency": "daily",
"frequencyDay": "saturday", // optional
"frequencyDayOfMonth": 1, // optional
"notificationTypes": ["APEX_ERROR", "FLOW_ERROR"] // cross-refs into notificationConfig[]
}
],
"notificationConfig": [
{
"key": "APEX_ERROR",
"title": "...", // translated
"description": "...", // translated
"category": "orgActivity", // foreign key to categories[]
"icon": "utility:bug", // SLDS icon (https://www.salesforceicons.com/)
"colorClass": "alerts", // per-type CSS class for UI theming, falls back to the category's colorClass
"notifications": { "messaging": "error", "email": "error", "api": "log" },
"availableThresholds": ["error", "success", "log", "off"] // emitted severities + "log" (always) + "off"
}
],
"categories": [
{
"key": "orgActivity",
"title": "Org Activity", // translated
"description": "...", // translated
"order": 1,
"icon": "utility:refresh", // default SLDS icon for the category section header
"colorClass": "tests" // category-level CSS class fallback for theming
}
],
"options": {
"frequencies": ["daily","weekly","biweekly","monthly","off"],
"frequencyDays": ["monday",...,"sunday"],
"thresholds": ["log","success","info","warning","error","critical","off"],
"channels": ["messaging","email","api"]
}
}The command does not read .sfdx-hardis.yml -- the UI reads it directly and merges the user values on top, using merge-by-key semantics on each list independently. Title/description are resolved via t() so they honour SFDX_HARDIS_LANG.
After any change in this area, run:
yarn compile # TypeScript catches missing union members and enum drift
yarn lint
yarn build:doc --commands "hardis:org:monitor:all,hardis:config:monitoring-defaults" # Regenerates only these two pages, plus the pages of the commands you changed
node -e "for (const l of ['en','de','es','fr','it','ja','nl','pl','pt-BR']) JSON.parse(require('fs').readFileSync('src/i18n/'+l+'.json','utf8'))"Then smoke-test:
node bin/dev.js hardis:config:monitoring-defaults --json
SFDX_HARDIS_LANG=fr node bin/dev.js hardis:config:monitoring-defaults --json # confirms translations resolvemonitoringCommands[] length should equal monitoringCommandsDefault.length, and notificationConfig[] length should equal Object.keys(notificationTypesDefault).length.
© hardisgroupcom, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/monitoring-notifications of hardisgroupcom/sfdx-hardis.
Open the folder on GitHubat commit 971ac89
Monitoring Notifications next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Monitoring Notifications this skillhardisgroupcom/sfdx-hardis | 400 | — | ~5.5k | Automated safety check: Pass | AGPL-3.0 | |
| Web Console Local Tracesforcedotcom/salesforcedx-vscode | 1k | — | ~796 | Automated safety check: Pass | BSD-3-Clause | |
| Mz Release SignoffMaterializeInc/materialize | 6.4k | — | ~7.2k | Automated safety check: Pass | Custom licence | |
| Axiom Dashboard Builderopenclaw/clawhub | 9.5k | — | ~4.9k | Automated safety check: Pass | MIT | |
| Happy Infra Metrics and Grafanaslopus/happy | 24k | — | ~2k | Automated safety check: Notes | MIT | |
| Syncmetapawurb/hotpath-rs | 1.9k | — | ~1.2k | Automated safety check: Notes | MIT |
forcedotcom/salesforcedx-vscode
Unblock hosted Web Console OTLP to localhost:4318. An agent skill from forcedotcom/salesforcedx-vscode.
MaterializeInc/materialize
Verify a release candidate on the Grafana dashboards and sign off in release.
openclaw/clawhub
Designs and deploys Axiom dashboards through the API, choosing chart types and writing APL or metrics queries, with templates and migration notes for Splunk and Grafana.
slopus/happy
Queries live Prometheus metrics and manages Grafana dashboards as code for Happy's infrastructure, using the grafanactl CLI and the Grafana datasource proxy API.
pawurb/hotpath-rs
Sync changes from the hotpath, hotpath-macros and hotpath-drain crates to their meta counterparts (hotpath-meta, hotpath-macros-meta and hotpath-drain-meta).
NVlabs/alpasim
Optimize AlpaSim Slurm topology throughput using persistent local Prometheus/Grafana telemetry and run artifacts.
hardisgroupcom/sfdx-hardis
Runs a full end-to-end test of sfdx-hardis promotion branches and backpromote against real Salesforce orgs and a throwaway repository, then writes a report.
hardisgroupcom/sfdx-hardis
Walks the sfdx-hardis training course end to end as a learner would, against a real Developer Edition org and fork, fixing broken steps and screenshots that no longer match.
hardisgroupcom/sfdx-hardis
Explains how the sfdx-hardis Salesforce CLI plugin is built: its TypeScript and Oclif stack, command layout, agent-mode flag and provider classes for git, notifications and AI.
hardisgroupcom/sfdx-hardis
Style rules for adding CHANGELOG.md entries: short, user-facing bullets grouped by command under the beta section, each linking the command's docs page.
hardisgroupcom/sfdx-hardis
Documentation standards for sfdx-hardis commands (description format with Command Behavior and Technical explanations sections, MkDocs site, build:doc).
hardisgroupcom/sfdx-hardis
Decision framework for fixing jscpd (copy-paste detector) errors.
Works with
Categories
How sfdx-hardis monitoring commands, notification types, frequency, and per-channel routing fit together. Monitoring Notifications is an agent skill from hardisgroupcom/sfdx-hardis. How sfdx-hardis monitoring commands, notification types, frequency, and per-channel routing fit together.
Monitoring Notifications fits situations like: adding a new monitoring command; adding a new notification type; changing default routing thresholds; wiring a new channel.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a claude-code`. Or copy the skill folder (.claude/skills/monitoring-notifications in hardisgroupcom/sfdx-hardis) into .claude/skills/monitoring-notifications in your project. Claude Code loads it when a task matches its description.
Run `npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a codex`. Or copy the skill folder (.claude/skills/monitoring-notifications in hardisgroupcom/sfdx-hardis) into .agents/skills/monitoring-notifications in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add hardisgroupcom/sfdx-hardis --skill monitoring-notifications -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/monitoring-notifications, .gemini/skills/monitoring-notifications, .github/skills/monitoring-notifications and .opencode/skills/monitoring-notifications in your project.
Going by SKILL.md and its folder, Monitoring Notifications needs the command-line tools its instructions call (yarn and node).
SKILL.md names 1 domain. In commands or code: salesforceicons.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Monitoring Notifications is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.5k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Monitoring Notifications: Web Console Local Traces (forcedotcom/salesforcedx-vscode, 1k stars), Mz Release Signoff (MaterializeInc/materialize, 6.4k stars), Axiom Dashboard Builder (openclaw/clawhub, 9.5k stars) and Happy Infra Metrics and Grafana (slopus/happy, 24k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
hardisgroupcom (a GitHub organization) maintains it in hardisgroupcom/sfdx-hardis, which has 400 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: hardisgroupcom/sfdx-hardis on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.