Axiom Dashboard Builder
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.
Author or review Netdata SNMP trap profiles, metrics/charts rules, loader schema, snmp-trap-profile-gen, stock catalogue/compression and category/severity changes.
$ npx skills add netdata/netdata --skill collectors-snmp-trap-profiles -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install netdata/netdata collectors-snmp-trap-profiles --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/netdata/netdata.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .claude/skills/collectors-snmp-trap-profiles && 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 "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .claude/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profilesType 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 netdata/netdata --skill collectors-snmp-trap-profiles -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install netdata/netdata collectors-snmp-trap-profiles --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/netdata/netdata.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .agents/skills/collectors-snmp-trap-profiles && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .agents/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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 netdata/netdata --skill collectors-snmp-trap-profiles -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install netdata/netdata collectors-snmp-trap-profiles --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/netdata/netdata.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .cursor/skills/collectors-snmp-trap-profiles && 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 "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .cursor/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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/netdata/netdata.git --path .agents/skills/collectors-snmp-trap-profiles--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 netdata/netdata --skill collectors-snmp-trap-profiles -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install netdata/netdata collectors-snmp-trap-profiles --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/netdata/netdata.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .gemini/skills/collectors-snmp-trap-profiles && 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 "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .gemini/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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 netdata/netdata collectors-snmp-trap-profilesInstalls 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 netdata/netdata --skill collectors-snmp-trap-profiles -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/netdata/netdata.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .github/skills/collectors-snmp-trap-profiles && 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 "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .github/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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 netdata/netdata --skill collectors-snmp-trap-profiles -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install netdata/netdata collectors-snmp-trap-profiles --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/netdata/netdata.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/collectors-snmp-trap-profiles .opencode/skills/collectors-snmp-trap-profiles && 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 "collectors-snmp-trap-profiles" agent skill from https://github.com/netdata/netdata/tree/master/.agents/skills/collectors-snmp-trap-profiles into .opencode/skills/collectors-snmp-trap-profiles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "collectors-snmp-trap-profiles", 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.
collectors-snmp-trap-profilesAuthor or review Netdata SNMP trap profiles, metrics/charts rules, loader schema, snmp-trap-profile-gen, stock catalogue/compression and category/severity changes.
Collectors Snmp Trap Profiles is an agent skill from netdata/netdata. Author or review Netdata SNMP trap profiles, metrics/charts rules, loader schema, snmp-trap-profile-gen, stock catalogue/compression and category/severity changes. Preserve MIB, varbind, taxonomy and cardinality contracts. Trap-log queries and SNMP polling profiles use separate skills.
Its SKILL.md is about 5.7k 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. The repository describes itself as: The fastest path to AI-powered full stack observability, even for lean teams. The licence is GPL-3.0.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a7f3cf9. 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:
gogitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From 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.
Collectors Snmp Trap Profiles loads about 5.7k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 2,655 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 netdata/netdata at commit a7f3cf9, republished under its GPL-3.0 licence (© netdata). 2,655 words, ~5,675 tokens.
.claude/skills/collectors-snmp-trap-profiles/SKILL.md (or your agent's skills folder).Use this skill for authoring or reviewing the affected contracts under:
src/go/plugin/go.d/config/go.d/snmp.trap-profiles/ (stock pack default/, catalogue.json, profile-format.md)src/go/cmd/snmptrapprofilegen/ (the generator; installed as snmp-trap-profile-gen)src/go/plugin/go.d/collector/snmp_traps/internal/catalog/ when the change is about what a profile may containApply AGENTS.md#skill-selection. Review checks affected rules against source and existing validation evidence;
implementation procedures below do not require a reviewer to create artifacts, regenerate the pack, call a classifier
or install profiles. Select additional sections when the changed behavior reaches them.
| Task | Read |
|---|---|
| Profile contents, templates or metric rules | Profile checks and the profile-format owner |
| Generator or loader behavior | Applicable generator/profile checks and their source owners; follow emitted-schema effects |
| Stock pack regeneration or compression | Regeneration, file-size/compression and catalogue contracts; inspect affected generator changes |
| Category or severity set changes | Taxonomy section and every coupled surface it lists |
| Trap log investigation or polling profiles | query-snmp-traps or collectors-snmp-profiles |
This skill holds only what the documents below lack. Point at them; do not restate them here.
src/go/plugin/go.d/config/go.d/snmp.trap-profiles/profile-format.md: the profile format (file layout, the varbinds
table, trap entries, .0. tolerance, description templates, metrics:/charts: rules and their validation list,
categories, severities, cardinality, operator overrides, generated stock profiles). It ships with the pack under
usr/lib/netdata/conf.d/go.d/snmp.trap-profiles/, so it is operator-facing and must stay true to the loader.src/go/plugin/go.d/collector/snmp_traps/ARCHITECTURE.md: how the collector works (life of a trap, journal field
contract, package map, "Where To Change Things", and the validation commands; the sections a rule below relies on
are cited as src/go/plugin/go.d/collector/snmp_traps/ARCHITECTURE.md#where-to-change-things and
src/go/plugin/go.d/collector/snmp_traps/ARCHITECTURE.md#validation). Collector code changes start there, not here.docs/npm/snmp-traps/ (published operator docs): trap-profiles.md (override versus new profile), configuration.md
(every job option), field-reference.md (every TRAP_* field), metrics.md (built-in charts and dimensions).collectors-snmp-profiles for polling profiles; query-snmp-traps for reading trap logs.Trap name: is MIB-qualified <MIB-MODULE>::<symbol> (IF-MIB::linkDown). Bare symbols are reused across
vendor MIB modules and are not unique; the qualified form is what snmptranslate produces and what lands in
TRAP_NAME. If the OID changes, the name changes. Different OIDs must have different names (profile-format.md,
"Trap entries").
Check MAX-ACCESS of the source MIB object for every varbind. A not-accessible index object still belongs in
the varbinds table, so that the rare device that does include it gets it named in TRAP_JSON and, when
non-sensitive and non-redundant, as an indexed TRAP_VAR_* field. Never use it as a description: template
variable on its own: an SNMP entity normally does not send it in the trap PDU, so the placeholder renders empty.
No in-tree artifact can check this; it needs the MIB.
Every varbind reference resolves. A name in a trap's varbinds: list must exist in the file-scoped varbinds:
table or be an inline {name, oid, type} dict on that trap. A dangling name renders empty in the description and
produces a misleading journal message. Table entries need both oid and type; an empty {} entry fails profile
load. The generator drops extractor records with an empty name, OID, or type from the table and from every trap's
reference list (buildProfile, pinned by TestBuildProfileDropsUnresolvedVarbinds); do the same by hand.
Keep the metadata the loader validates. Trap status: takes only current, deprecated, mandatory,
obsolete, optional (validTrapStatuses in the generator, validStatuses in internal/catalog/profile.go).
Varbind enum: is what renders {{value}} symbolically and what equals/in predicates match; constraints:
documents the range. File-scope vendor:, mib_count:, trap_count: are emitted on every stock file. Do not
strip any of them when editing.
Categories: closed set of 8. state_change, config_change, security, auth, license, mobility,
diagnostic, unknown. Cross-cutting concerns (compliance scope, tenant, datacenter, change window) go in
labels:, not new slugs. Every profile entry declares category and severity (the loader rejects a missing
or unknown value); only a trap with no profile match is logged with unknown/notice at runtime, and operators
reclassify it through the job's overrides:. There is no "custom" category. Changing the set is taxonomy work.
Severities: closed set of 8 full syslog names mapped to PRIORITY=0..7: emerg, alert, crit, err,
warning, notice, info, debug (never warn). emerg is for true vendor catastrophe; routine events are
warning/notice/info; debug only when the MIB itself marks the notification debug-level.
Label cardinality. Label templates reference bounded varbinds only. Reject labels built from MAC addresses,
source IPs, usernames, packet contents, RAID slot IDs, or any per-event identifier; the loader rejects unbounded
label templates at profile load. High-cardinality content belongs in description: (rendered into MESSAGE),
the indexed TRAP_VAR_* fields, and TRAP_JSON, none of which propagate to metrics.
Label keys match [a-z][a-z0-9_]* and emit as TRAP_TAG_<KEY_UPPERCASE>, whether they come from a profile's
labels: or from a listener job's per-OID overrides[].labels (there is no job-wide labels: option). The
dedicated prefix makes collision with the plugin-owned TRAP_* fields impossible, so the key syntax is the only
check. See docs/npm/snmp-traps/field-reference.md for the shipped TRAP_* set (it is not closed at
the profile level; new fields arrive with collector releases).
Trap OID form and .0. tolerance. Use the OID form the source MIB tooling produces. Lookup is exact-match
first, then retries the alternate spelling with one .0. segment added or removed before the final arc
(model.AlternateTrapOID, called from Epoch.lookupLoaded). A catalogue that defines both spellings of one trap
fails to load ("alternate form already defined"). The tolerance is trap-OID only: never normalize or
alternate-match varbind OIDs.
Stock versus operator. Files under default/ are generated and overwritten on regeneration (their header
comment says so); never hand-edit them for site concerns. Operator profiles live in the user config directory
go.d/snmp.trap-profiles/ (catalog_paths.go) in one of three forms: a complete same-identity replacement of a
stock file, an independent different-identity addition, or a metric-only profile whose rules reference stock
traps. Partial inheritance does not exist; an extends: key is rejected as unknown at profile load. Per-OID
category, severity, and label overrides belong in the listener job's overrides:
(docs/npm/snmp-traps/trap-profiles.md has the decision table).
No hand-authored journal fields. There is no journal_fields: key: TRAP_VAR_* fields are derived from the
received non-sensitive, non-redundant varbinds and TRAP_JSON keeps the audit copy. display_hint is documented
as a future varbind field but is not part of the loaded schema: varbinds: entries accept unknown keys
(profileYAMLSpec in internal/catalog/load.go), so a hand-added display_hint is silently ignored and then
overwritten on regeneration. When the renderer starts consuming DISPLAY-HINT metadata, the extractor,
profile-format.md, and model.TrapEntry change in the same cycle.
Profile metrics only through the validated schema. profile-format.md, "Optional metrics: rules and
charts:", owns the syntax, defaults, numeric source types, and the load-time rejection list; a listener job
enables rules explicitly with profile_metrics.include (rule names, never trap names or filenames). Checks the
loader enforces (internal/catalog/metric_validate.go) that authors most often get wrong:
events, severity, errors,
dedup_suppressed, pipeline, profile_metric_diagnostics or their snmp.trap.* contexts; a chart context
defaults to snmp.trap.<chart id> and must start with snmp.trap.; metric names must not start with a
reserved prefix (builtInProfileMetricChartIDs, reservedProfileMetricPrefixes).where: predicate selects exactly one string-valued source: varbind, or field from the closed set
category, severity, trap_name, trap_oid; predicates AND; use absent, not not plus exists.identity.resource.key_from_varbind must be an integer-like bounded varbind (INTEGER, Integer32,
Unsigned32, Gauge32); Counter32, Counter64, TimeTicks are sample values, not identity keys.missing: is one of drop, error, zero, unknown_dimension (zero is invalid for counter and
state; unknown_dimension needs resource identity).
Authoring rules the loader does NOT check, so review them by hand:lifecycle explicitly on every chart that creates per-source or per-resource instances instead of
relying on the loader's defaults; expired instances are removed and a returning identity starts a fresh series.state rule, lifecycle.expire_after_cycles must outlast state.ttl: the TTL
publishes the clear value once and only then expires the series, so a chart that expires first leaves the
problem state as the last value. The loader validates the two fields independently and never compares them.
A rule's where: is evaluated before its state.set_when/clear_when predicates.model.IsSensitiveVarbind) as a predicate or
sample source; redaction happens downstream, not in rule validation.metrics: today (0 of 803). Stock rules would be a curation layer that the generator
must preserve through a tested read-modify-write path from a reviewable, committed source recording rule name,
trap, varbinds, type, chart, and cardinality evidence, and must validate against the varbinds: and traps:
it just emitted before writing the file. That path does not exist; build it before adding stock rules, and
check pack size and lazy-load memory when you do.src/go/cmd/snmptrapprofilegen/)One Go binary, no runtime dependencies. CMake target snmp_trap_profile_gen builds snmp-trap-profile-gen
and installs it under usr/libexec/netdata/plugins.d/ in the plugin-go component; the pack build runs it with
CGO_ENABLED=0. Do not add Python, CGO, SQLite, or a runtime MIB compiler to the shipped path.
Subcommands are extract, classify, emit, generate, and compress-zstd (usage). generate is
extract plus optional classify plus emit; the three stages exist separately for reruns on saved artifacts.
Extraction stays incremental and memory-bounded. The corpus is too large for one MIB universe: keep
batch-based gomib loading (--batch-size, default 32), deterministic source priority, and the review artifacts
under --out-dir:
traps.jsonl, extraction-report.json, conflicts.json (duplicate trap OIDs), dot0-conflicts.json (both
.0. spellings present), source-conflicts.json (one module name in several files). --baseline-profiles-dir
adds a stock-overlap report. If source discovery changes, rerun a representative multi-vendor corpus before
touching the stock pack.
Classification cache stays reviewable JSONL. One Classification record per trap keyed by hashTrap, with
schema_version and prompt_version; a record whose versions differ from defaultSchemaVer or
defaultPromptVer is rejected, so bump defaultPromptVer whenever the prompt or the taxonomy changes or the
cache silently replays stale answers. --force-llm ignores the cache. The cache path is derived from the default
out-dir unless --cache is passed explicitly, even when --out-dir differs. Never switch to SQLite or another
opaque store.
LLM output validation is mandatory. Every response passes the classifier response JSON Schema
(classifierResponseSchemaJSON, checked by validateClassifierResponseSchema), the template check
(validateDescriptionTemplate: only the helpers in classifierTemplateFuncMap, references checked against the
trap record), and the style check (validateDescriptionStyle: ends with on {{hostname}}., {{hostname}}
exactly once). Off-taxonomy categories are remapped first by repairInvalidCategory. Up to
maxLLMAttempts (5) tries, then mechanicalClassification, or a hard failure under --require-llm. MIB text
reaches the model wrapped as untrusted input (sanitizePromptText); keep that wrapping.
Emission is deterministic and produces the file-scoped table (buildProfile, writeProfileYAML):
name: is MIB-qualified; varbind table names are bare symbols;{name, oid, type} dict on that trap (intended; do not "fix" it, and do not regress to inline everywhere);{} entries;compareOIDString) and the table keys and rule names are sorted, so regenerations diff
cleanly;vendorForOID: standard, ieee-lldp, ieee-802, the PEN slug or enterprise-<pen>, else
oid-<first arc> or unknown) is the output filename and therefore the identity an operator override replaces.catalogue.json stays in sync. Each entry (profileCatalogueEntry) records file, mib_count, mibs,
sample_traps, trap_count, trap_oids, varbind_count, sha256, and metric_rule_names when the profile
has rules (omitted otherwise, which is every stock file today; emitting stock rules also needs the curation path
described in profile check 12). sha256 is 64 lowercase hex over the exact bytes
written, comments and final newline included (format pinned by TestStockProfileCatalogueRequiresValidSHA256);
lazy hydration verifies it (TestStockProfileEpochBindsLazyHydrationToManifestContent). Catalog tests load all
shipped profiles and require the manifest and the files to agree in both directions
(TestStockProfileCatalogueMatchesDefaultFiles, TestStockCatalogueReconcilesPhysicalInventory,
TestStockProfileDefaultFilesParse): regenerating profiles without the catalogue fails tests.
PEN registry. The default is the bundled snapshot (defaultPENFilePath; installed at
usr/lib/netdata/conf.d/go.d/snmp.profiles/metadata/iana-enterprise-numbers.txt). With --refresh-pen, or when
the file is missing or empty, loadPENs fetches --pen-url and a failed fetch aborts the run
(TestLoadPENsRefreshFailureIsFatal). An air-gapped run needs the snapshot present.
--classify sends MIB-derived text to the configured endpoint. Establish the source scope and
endpoint/model within the task's authorization before running; the default local endpoint is not an offline parser.--cache for an intentional rerun. Reuse can append and
compact that file; copy it into the fresh run first when preserving the original matters.(
set -e
umask 077
PROFILE_AUDIT_DIR="$PWD/.local/audits/snmp-trap-profiles"
mkdir -p "$PROFILE_AUDIT_DIR"
PROFILE_RUN_DIR="$(mktemp -d "$PROFILE_AUDIT_DIR/generate.XXXXXX")"
cd src/go
go run ./cmd/snmptrapprofilegen generate \
--source-dir /path/to/mibs \
--all \
--classify \
--require-llm \
--concurrency 20 \
--out-dir "$PROFILE_RUN_DIR" \
--cache "$PROFILE_RUN_DIR/classification-cache.jsonl" \
--profiles-out-dir ./plugin/go.d/config/go.d/snmp.trap-profiles/default \
--catalogue ./plugin/go.d/config/go.d/snmp.trap-profiles/catalogue.json
)--base-url, default a local server; --model); without
--classify every trap keeps the extractor defaults: category unknown, severity notice, description
<qualified name> on {{hostname}}..ARCHITECTURE.md, docs/npm/snmp-traps/trap-profiles.md) describe the pack; recompute
them from catalogue.json after a regeneration rather than carrying old numbers.The installed operator form converts site MIBs offline; the output under snmp-trap-profile-gen-output/profiles/ is
copied into the operator profile directory (profile-format.md, "Generated stock profiles").
The sets are duplicated in code, alerts, and docs. Only the telemetry series are test-pinned
(TestJobCollectsExactRetainedMetricSet in internal/telemetry/job_test.go enumerates the per-category and
per-severity counters); nothing pins the generator's or the loader's sets. A change must touch every site:
main.go: validCategories, validSeverities, severityPriority, repairInvalidCategory,
mechanicalClassification (the no-LLM fallback hard-codes both sets), the classifier response JSON Schema
(classifierResponseSchemaJSON), and the prompt text; bump defaultPromptVer.internal/catalog/profile.go: validCategories, validSeverities, categoryList, severityList
(the loader rejects profiles the generator would otherwise emit).overrides[].category and overrides[].severity enums in
config_schema.json, the internal/telemetry counters and their test, the events and severity chart
dimensions in charts.yaml and metadata.yaml, the OTLP severity mapping (otlpSeverity in
internal/output/otlp), and the PRIORITY mapping in internal/output/journal (grep -rn the slug across
snmp_traps/).src/health/health.d/snmp_traps.conf has severity-rate alert templates for emerg, alert, crit,
err, and warning (notice, info, debug deliberately do not alert), mirrored in the alerts: list of
metadata.yaml; a renamed or removed slug silently breaks them. grep -rn the slug across
src/health/health.d/ too.profile-format.md category and severity tables, and every operator page that enumerates the sets
(grep -rln the slug across docs/npm/snmp-traps/: today README.md, trap-profiles.md, configuration.md,
field-reference.md, metrics.md, alerts.md, usage-and-output.md, journal-and-querying.md,
investigation-playbooks.md).Add tests that pin the generator's and the loader's sets when you touch them.
git diff reviews them.compress-zstd --rm subcommand via go run on a copy of the pack and
installs *.yaml.zst plus catalogue.json.zst; the installed pack must stay compressed. The loader accepts
profiles as .yaml.zst, .yml.zst, .yaml, or .yml (internal/catalog/load.go) and the manifest as
catalogue.json or catalogue.json.zst, never gzip (internal/catalog/stock.go)..yaml for editability.Use the suites for the affected generator/profile contract, including consumers when their behavior changes. Review checks relevant existing results and can run isolated local tests; it does not execute the stock-regeneration recipe.
cd src/go
go test -count=1 ./cmd/snmptrapprofilegen/
go test -count=1 ./plugin/go.d/collector/snmp_traps/internal/catalog/...The catalog tests load all shipped profiles and verify the manifest. For collector code changes run the full
snmp_traps suite with -race as src/go/plugin/go.d/collector/snmp_traps/ARCHITECTURE.md#validation describes.
© netdata, GPL-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 .agents/skills/collectors-snmp-trap-profiles of netdata/netdata.
Open the folder on GitHubat commit a7f3cf9
Collectors Snmp Trap Profiles 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 |
|---|---|---|---|---|---|---|
| Collectors Snmp Trap Profiles this skillnetdata/netdata | 81k | — | ~5.7k | Automated safety check: Pass | GPL-3.0 | |
| Axiom Dashboard Builderopenclaw/clawhub | 9.5k | — | ~4.9k | Automated safety check: Pass | MIT | |
| Axiom Cost Controlopenclaw/clawhub | 9.5k | — | ~1.7k | Automated safety check: Pass | MIT | |
| Sf AI Agentforce ObservabilityJaganpro/sf-skills | 424 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Verify CI Impactgodatadriven/whirl | 205 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Add React Analyticsgotempsh/temps | 828 | — | ~2.7k | Automated safety check: Pass | Apache-2.0 |
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.
openclaw/clawhub
Finds unused data in Axiom by analyzing query patterns, then deploys a cost dashboard and ingest monitors to keep spend under the contract limit.
Jaganpro/sf-skills
Agentforce session tracing extraction and analysis. An agent skill from Jaganpro/sf-skills.
godatadriven/whirl
Before committing, work out which Whirl examples need a CI run to verify changes still work, then run them after confirming with the user.
gotempsh/temps
Add Temps analytics to React applications with comprehensive tracking capabilities including page views, custom events, scroll tracking, engagement monitoring, session recording, and Web Vitals…
bmeares/Meerschaum
Meerschaum release process — bump version, update changelog, stage dev→main PR, run CI, publish to PyPI, tag, GitHub release, build/push Docker images, rebuild docs on prod VPS.
netdata/netdata
Use only when the user explicitly asks to build, run, preview, inspect, or validate learn.netdata.cloud locally using the contents of a PR or documentation branch before merge.
netdata/netdata
Inspect Netdata-org source checkouts under NETDATAREPOSDIR, or set up and synchronize that mirror when requested.
netdata/netdata
Investigate Netdata crashes, panics and fatals from agent-events captures or authorized fleet queries.
netdata/netdata
Inspect, analyze, troubleshoot, or review Codacy findings and local analyzer/API helpers.
netdata/netdata
Inspect or review Coverity Scan defects and saved CID bundles; fetch live findings or apply verified triage decisions when requested.
netdata/netdata
Inspect, review, or apply authorized triage decisions to SonarCloud issues and security hotspots; also review the Sonar helpers.
Categories
Author or review Netdata SNMP trap profiles, metrics/charts rules, loader schema, snmp-trap-profile-gen, stock catalogue/compression and category/severity changes. Collectors Snmp Trap Profiles is an agent skill from netdata/netdata. Author or review Netdata SNMP trap profiles, metrics/charts rules, loader schema, snmp-trap-profile-gen, stock catalogue/compression and category/severity changes.
Collectors Snmp Trap Profiles fits situations like: devOps & Cloud work in your project.
Run `npx skills add netdata/netdata --skill collectors-snmp-trap-profiles -a claude-code`. Or copy the skill folder (.agents/skills/collectors-snmp-trap-profiles in netdata/netdata) into .claude/skills/collectors-snmp-trap-profiles in your project. Claude Code loads it when a task matches its description.
Run `npx skills add netdata/netdata --skill collectors-snmp-trap-profiles -a codex`. Or copy the skill folder (.agents/skills/collectors-snmp-trap-profiles in netdata/netdata) into .agents/skills/collectors-snmp-trap-profiles 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 netdata/netdata --skill collectors-snmp-trap-profiles -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/collectors-snmp-trap-profiles, .gemini/skills/collectors-snmp-trap-profiles, .github/skills/collectors-snmp-trap-profiles and .opencode/skills/collectors-snmp-trap-profiles in your project.
Going by SKILL.md and its folder, Collectors Snmp Trap Profiles needs the command-line tools its instructions call (go and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Collectors Snmp Trap Profiles is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.7k tokens (SKILL.md is roughly 23k 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 Collectors Snmp Trap Profiles: Axiom Dashboard Builder (openclaw/clawhub, 9.5k stars), Axiom Cost Control (openclaw/clawhub, 9.5k stars), Sf AI Agentforce Observability (Jaganpro/sf-skills, 424 stars) and Verify CI Impact (godatadriven/whirl, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
netdata (a GitHub organization) maintains it in netdata/netdata, which has 80,853 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 9, 2026.
Source: netdata/netdata on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.