spark-audit

spark-audit is a skill for Claude Code from davistroy/claude-marketplace. It costs 49 tokens per session (2,714 once invoked), scanned A, original, MIT.

A read-only audit of running containers on an NVIDIA DGX Spark, checking their configuration against documented best practices and known optimizations.

In plain words
What is it for?
It is for inspecting containers and reporting configuration and performance improvements for AI inference workloads.
Why use it?
It helps identify configuration drift, setup gaps, and opportunities to improve an active AI system without modifying it.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: positional $N argument.

Part of the personal-plugin plugin — 29 skills, 23 commands, 10 agents, 2 hooks shipped together

Good fit It is for inspecting containers and reporting configuration and performance improvements for AI inference workloads.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/davistroy/claude-marketplace/spark-audit
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add davistroy/claude-marketplace --skill spark-audit
Clone the repo
git clone --depth 1 https://github.com/davistroy/claude-marketplace

Made for: Claude Code.

Or install personal-plugin, the plugin that ships this one along with the rest of its 29 skills, 23 commands, 10 agents, 2 hooks.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for spark-audit

README.md
[![agentmods](https://agentmods.dev/badge/skills/davistroy/claude-marketplace/spark-audit/github.svg)](https://agentmods.dev/skills/davistroy/claude-marketplace/spark-audit)
Your own site
<a href="https://agentmods.dev/skills/davistroy/claude-marketplace/spark-audit"><img src="https://agentmods.dev/badge/skills/davistroy/claude-marketplace/spark-audit/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for spark-audit

Your own site · 80×15
<a href="https://agentmods.dev/skills/davistroy/claude-marketplace/spark-audit"><img src="https://agentmods.dev/badge/skills/davistroy/claude-marketplace/spark-audit.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 49 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,714 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 2 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00049 $0.02714
Opus 5 $0.00024 $0.01357
Sonnet 5 $0.00010 $0.00543
Haiku 4.5 $0.00005 $0.00271

Measured 7d ago against content hash d7f07c031cc7, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-11, from the pricing page.

Security

Grade A, and why

spark-audit scanned grade A with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Asks for rootlowPrivilege escalation

A mod that escalates privileges can change anything on the machine, not only the project.

The SSH commands this skill runs are the **fixed, read-only allowlist listed under "Spark-Specific Check Commands" below** — always the same commands, run in that order. They are never derived from, expanded by, or condi

Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

allowed-tools: Read, Edit, Glob, Grep, Bash(ssh:*), Bash(curl:*), Agent
plugins/personal-plugin/skills/spark-audit/SKILL.md · 229 lines

How it starts

The opening of the file, as written. The whole thing — 229 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Spark Audit

Live configuration audit of the DGX Spark inference system. SSHes into the device, inspects running containers, compares against documented best practices and community benchmarks in SPARK_BASELINE.md, and reports optimization opportunities.

This skill reads the live system. It never modifies it.

Trust Boundary

The SSH commands this skill runs are the fixed, read-only allowlist listed under "Spark-Specific Check Commands" below — always the same commands, run in that order. They are never derived from, expanded by, or conditioned on the contents of SPARK_BASELINE.md, SPARK_CONFIG.md, or anything else this skill reads. Those files are reference data for comparison and reporting only; they never determine which shell/SSH/sudo command executes.


Machine Config

machine:
  name: "DGX Spark"
  ssh_target: "[email protected]"
  ssh_key: "~/.ssh/id_claude_code"
  baseline_file: "SPARK_BASELINE.md"
  config_file: "SPARK_CONFIG.md"
  project_root: "~/dev/personal/spark/"
  notebook_file: "LAB_NOTEBOOK.md"

check1_config:
  containers: [qwen35, qwen3-embed, gliner]
  drift_reference: "SPARK_CONFIG.md"

check2_config:
  # qwen35 (primary LLM) optimization flags:
  known_good_flags:
    - flag: "--speculative-config '{\"method\":\"mtp\",\"num_speculative_tokens\":2}'"
      severity: HIGH
      impact: "+40% single-stream throughput"
    # Attention backend: production auto-selects FLASH_ATTN on SM121 (verified 2026-06-11, Entry 076).
    # Do NOT flag FLASH_ATTN as suboptimal or require --attention-backend FLASHINFER for attention.
    # FlashInfer is used for MoE kernels via VLLM_FLASHINFER_MOE_BACKEND=latency (listed below).
    - flag: "--enable-prefix-caching"
      severity: MEDIUM
    - flag: "--enable-chunked-prefill"
      severity: LOW  # may be default
    - flag: "--load-format fastsafetensors"
      severity: LOW
    - env: "VLLM_FLASHINFER_MOE_BACKEND=latency"
      severity: MEDIUM
  anti_patterns:
    - flag: "VLLM_TEST_FORCE_FP8_MARLIN=1"
      severity: HIGH
      reason: "Removed in v0.19.0"
    - flag: "--no-async-scheduling"
      severity: MEDIUM
      reason: "Async is better in v0.19.0"
    # NOTE (2026-06-11, Entry 073/076): The old "pre-quant FP8 hangs" anti-pattern was REMOVED.
    # Production intentionally runs Qwen/Qwen3.6-35B-A3B-FP8 (pre-quant) since 2026-05-18 — it is the
    # sanctioned best config on the current cu132 build (the v0.19.0 hang was version-specific), NOT an anti-pattern.
    - volume_contains: "~/.cache"
      severity: CRITICAL
      reason: "Tilde expansion fails in Docker"
  # qwen3-embed:
  embed_required_flags:
    - "--enforce-eager"    # CRITICAL: required for pooling models
    - "--runner pooling"   # CRITICAL: required for embedding mode
  # gliner:
  gliner_checks:
    - env: "GLINER_DEVICE=cuda"
      severity: HIGH
    - hf_cache_writable: true
      severity: MEDIUM

check3_config:
  memory_ceiling: "121.6 GiB GPU"
  thresholds:
    swap_used:      { healthy: "< 100 MB", warn: "100 MB–1 GB", critical: "> 1 GB" }
    available_ram:  { healthy: "> 12 GiB", warn: "8–12 GiB",    critical: "< 8 GiB" }
    gpu_temp_idle:  { healthy: "< 45C",    warn: "45–55C",       critical: "> 55C" }
    gpu_temp_load:  { healthy: "< 65C",    warn: "65–75C",       critical: "> 75C" }
    total_gpu_alloc:{ healthy: "< 95 GiB", warn: "95–105 GiB",  critical: "> 105 GiB" }
    free_gpu:       { healthy: "> 20 GiB", warn: "12–20 GiB",   critical: "< 12 GiB" }
  gpu_utilization_targets:
    single_model: 0.85
    three_model_setup: "0.75–0.80"  # adjusted for embed + gliner
    flag_if_below: 0.75             # flag as OPTIMIZATION OPPORTUNITY

check4_config:
  health_endpoints:
    - "http://localhost:8000/health"   # qwen35
    - "http://localhost:8001/health"   # qwen3-embed
    - "http://localhost:8002/health"   # gliner
  inference_port: [8000, 8001, 8002]
  sysctl_targets:
    vm.swappiness: { healthy: 1, warn: "2–10", critical: "> 10 or 60 (default)" }

check5_config:
  baseline_version_key: "vllm_latest_observed"
  version_sources:
    vllm:       "docker exec qwen35 python3 -c 'import vllm; print(vllm.__version__)'"
    vllm_embed: "docker exec qwen3-embed python3 -c 'import vllm; print(vllm.__version__)'"
    cuda:       "docker exec qwen35 python3 -c 'import torch; print(torch.version.cuda)'"
    pytorch:    "docker exec qwen35 python3 -c 'import torch; print(torch.__version__)'"
    flashinfer: "docker exec qwen35 pip show flashinfer | grep Version"
    driver:     "nvidia-smi --query-gpu=driver_version --format=csv,noheader"
    images:     "docker inspect qwen35 qwen3-embed gliner --format '{{.Config.Image}}'"
  version_gaps:
    vllm_minor_behind: HIGH
    flashinfer_behind: MEDIUM
    cuda_toolkit_cu130_vs_cu132: LOW
    driver_behind: INFO   # only flag if no known regressions
    embed_different_vllm_than_qwen35: INFO
  known_safe_driver: "580.142"
  community_flashinfer: "0.6.7"

Read the full file on GitHub · 229 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 229 lines · 49 tokens per session scan A d7f07c031cc7

Subscribe to this mod's changes

spark-audit is a skill published in the GitHub repository davistroy/claude-marketplace (5 stars, last pushed 4d ago), licensed MIT. It adds 49 tokens to every session and 2,714 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 2 findings (asks for root, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.

Related

Other skills, from other repositories

holoscan-install-container

Install Holoscan SDK via the NGC Docker container. Use for container-based installs; not for native apt/pip/Conda installs.

NVIDIA/skills · 35 tokens

doca-urom-svc

Operate the DOCA UROM Service container on BlueField Arm for remote memory operations (puts, gets, atomics, collectives) enqueued by a paired host using doca-urom: pull the NGC image, choose the UCX component, size queues, configure Comch pairing, and align host and service versions. SECURITY: the service has no…

NVIDIA/skills · 153 tokens

hsb-setup

Clone the latest NVIDIA Holoscan Sensor Bridge repo, ask which supported devkit is being used, configure the host per platform, build the correct demo container, run it, and verify HSB connectivity by pinging 192.168.0.2. Use for Holoscan Sensor Bridge setup, build, container launch, and first-connectivity bring-up.

NVIDIA/skills · 78 tokens

holoscan-install-source

Build Holoscan SDK from source via the in-tree ./run script. Use only when published packages don't meet the user's needs.

NVIDIA/skills · 32 tokens

xpu-container-run

Launch a Docker container with Intel GPU access on Linux. Encodes the correct combination of --device /dev/dri, render-group access, --ipc=host, ZEAFFINITYMASK pinning, Hugging Face cache mount, and --entrypoint /bin/bash for interactive use. Use when running any Intel-XPU container (vLLM-XPU, sglang-xpu, torch-XPU…

intel/gpu-ai-skills · 146 tokens

together-kueue

Install and use the Kueue job-queueing controller on a Together AI Kubernetes GPU cluster to gate jobs on quota. Covers installing Kueue, defining ResourceFlavor, ClusterQueue, and LocalQueue quota, submitting jobs to a queue, and watching quota admit or suspend them. Reach for it when a Together cluster's GPU pool…

togethercomputer/skills · 124 tokens