Vmanomaly Sizing logo

Vmanomaly Sizing

Organization
VictoriaMetrics
vmanomaly-sizing

Estimate vmanomaly deployment CPU, RAM and disk for a known workload, or approximate inference capacity for fixed resources. Use for deployment sizing, maximum active time-series questions, RAM-versus-disk comparisons, or suspected OOM during fitting. Not for forecasting a monitored metric's capacity or selecting anomaly models.

Overview

PublisherVictoriaMetrics
Repositoryskills
Skill namevmanomaly-sizing
Stars
62
Forks
9
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by VictoriaMetrics on GitHub. Read the source before you install it.

Installation

Install the Vmanomaly Sizing AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/VictoriaMetrics/skills/tree/main/plugins/vmanomaly/skills/vmanomaly-sizing
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/VictoriaMetrics/skills.git /tmp/skills
mkdir -p .claude/skills
cp -r /tmp/skills/plugins/vmanomaly/skills/vmanomaly-sizing .claude/skills/vmanomaly-sizing
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Vmanomaly Sizing in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Vmanomaly Sizing on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Vmanomaly Sizing is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Deployment sizing

Currently experimental as of v1.31.0. Use the connected server's deployment-sizing API (v1.31.0+) or the corresponding MCP tools. Estimate vmanomaly resources without changing its configuration. No exact query, data fetch or autotune is needed when the model and workload shape are already known.

Choose the unknown

User knowsEstimateMCP toolHTTP route
Model, series count, inference cadenceRequired resourcesvmanomaly_estimate_deployment_resourcesPOST /api/v1/deployment-sizing/estimate
Model, CPUs, cadence; optionally RAMActive models served per intervalvmanomaly_estimate_inference_capacityPOST /api/v1/deployment-sizing/throughput
Wants supported model configurationsAvailable sizing profilesvmanomaly_get_deployment_sizing_profilesGET /api/v1/deployment-sizing/profiles

For reverse sizing, cardinality is the output: do not ask for a series count. Clarify missing history, sampling or model parameters when needed, or disclose defaults. Preserve an explicitly supplied version. Check model schemas or available profiles before supplying required parameters. Unsupported versions/configurations are not permission to substitute another model or seasonality.

Preserve workload meaning

  • One univariate model usually serves one series; multivariate counts refer to groups and also need channels per group. For peer-group models, use the pool-count semantics below on supporting servers. Size a tuned result using its concrete selected model and parameters, retaining its grouping. The estimate excludes the auto wrapper's optimization search; do not present it as the wrapper's total resource requirement.
  • Keep history depth, sampling step, inference window and inference cadence separate. For non-overlapping cycles, new points follow cadence/step; an explicit window or overlapping batch needs an explicit point count. Verify the resolved request.
  • Online models default to bootstrap-only fitting. Omit fit_every_seconds unless periodic refits were explicitly requested; never copy fit_window into it. Bare MAD/Z-score names resolve to their online equivalents. A long bootstrap is advisory, but its RAM/disk requirements still count in forward sizing. Reverse sizing excludes bootstrap, refits and churn work.
  • For equal query shards of the same model, pass total entity_count, query_count, and explicit deployment membership with split_by: queries. If only the query count is proposed, disclose any one-member-per-query assumption. More instances do not automatically subdivide fixed queries. Preserve explicit placement after an infeasible result.
  • Compare CPU candidates in one forward call. Keep RAM/disk comparisons otherwise identical. storage_mode accepts memory or disk; it is a sizing option, not a deployment YAML field. Persistent state restoration has separate storage requirements.

Peer-group sizing

On servers supporting experimental peer_outlier sizing, use topology: wide and channels_per_entity for peers per pool. Forward entity_count counts pools, not individual peers; model state is per pool and outputs are per peer. Reverse sizing takes a pool width, CPUs and cadence (optionally RAM), not a pool count or workloads; report the returned pool-model capacity and input_series separately. Separate reverse scenarios for different widths are not additive capacities on the same hardware.

Keep the full requested pool width: the 64-peer calibration sample is not a workload cap. The current estimator accepts equal-size fixed pools of 3–10,000 peers, complete observations and no churn retention. model_params.min_peer_count defaults to 5; for a 3- or 4-peer pool, explicitly set it to 3 or 4 respectively. This parameter must not exceed the pool width and is limited to 3–64 by the current estimator; higher minimums require offline calibration. A 10,000-peer pool can use the default minimum of 5. For forward sizing, use one query per workload and separate workloads for different queries or pool sizes; do not average unequal pools. Omit model_params.groupby: the declared pools are already grouped. A missing shipped peer profile does not itself mean unsupported; the installed server version can use bounded live calibration. An older server's rejection is not permission to substitute univariate models or fewer peers.

For example, 100 pools of 100 peers means 100 model states and 10,000 input series. This forward HTTP body preserves one-minute inference and sampling, one week of initial training and disk storage; omit fit_every_seconds for bootstrap-only fitting:

json
{"workloads":[{"model_class":"peer_outlier","topology":"wide","entity_count":100,"channels_per_entity":100,"infer_every_seconds":60,"infer_points_per_cycle":1,"fit":{"window_seconds":604800,"step_seconds":60}}],"policy":{"storage_mode":"disk"}}

Use the server's estimate rather than calculating resource numbers locally. Peer estimates are less calibrated than regular profiles: show the returned estimate_notice once, or “Rough peer-group estimate; allow extra headroom and validate with your workload.” Keep operational limits and omitted costs visible without explaining calibration formulas.

Direct API examples

Requires Bash, jq and curl 7.84.0+ for selective response-header write-out and --fail-with-body. Check curl --version; use an available MCP tool or a compatible curl installation if the client is older.

Use the user's configured server and authentication. VM_ANOMALY_URL must include any path prefix. VM_CURL_CONFIG points to an existing protected curl configuration, or /dev/null for an unauthenticated instance. Do not print credentials or create a credential file. Do not use automatic retries. The examples keep the JSON body on stdout, expose only HTTP status and Retry-After on stderr, and preserve a nonzero exit status on failure. Do not enable verbose tracing or dump all headers: responses can contain session cookies.

Forward example: 100,000 MAD series, one week of one-minute history, two-minute inference with two new points, disk storage:

bash
set -o pipefail
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -sS --max-time 30 --fail-with-body \
  --write-out '%{stderr}HTTP status: %{http_code}\nRetry-After: %header{retry-after}\n' \
  -H 'Content-Type: application/json' \
  "$VM_ANOMALY_URL/api/v1/deployment-sizing/estimate" \
  --data '{"workloads":[{"model_class":"mad_online","entity_count":100000,"infer_every_seconds":120,"infer_points_per_cycle":2,"fit":{"window_seconds":604800,"step_seconds":60}}],"policy":{"storage_mode":"disk"}}' | jq .

Reverse example: the same history/cadence, eight CPUs and a six-GiB RAM limit:

bash
set -o pipefail
curl -q --config "${VM_CURL_CONFIG:-/dev/null}" -sS --max-time 30 --fail-with-body \
  --write-out '%{stderr}HTTP status: %{http_code}\nRetry-After: %header{retry-after}\n' \
  -H 'Content-Type: application/json' \
  "$VM_ANOMALY_URL/api/v1/deployment-sizing/throughput" \
  --data '{"model_class":"mad_online","cpus":8,"ram_limit_bytes":6442450944,"infer_every_seconds":120,"infer_points_per_cycle":2,"history":{"window_seconds":604800,"step_seconds":60},"storage_mode":"disk"}' | jq .

MCP wraps optional fields differently: forward workload fit/query_count/topology/channels_per_entity belong in each workload's options, while policy/deployment belong in top-level options. Reverse history/storage_mode/topology/channels_per_entity belong in top-level options; ram_limit_bytes stays a named argument. Follow the discovered tool schema rather than sending an HTTP body unchanged to MCP.

Interpret and recover

Report per-instance versus fleet totals, planned RAM/disk, inference time against cadence, limiting constraints, bootstrap duration and omitted costs. Keep nominal time distinct from time with headroom. Storage includes both input data and model state; do not call the whole disk estimate model dumps. search_limit_reached: true is a lower bound at the search ceiling, not a demonstrated maximum. The estimate is not a measured guarantee or an OOM bound. Use the returned estimate_notice once; without one use the peer caveat above for peer models, otherwise “Experimental estimate; validate with a representative workload.” Omit calibration coefficients, benchmark dimensions, extrapolation factors and implementation details from user-facing prose.

On 422, report actionable missing/invalid fields or binding constraints. Correct a configuration error only when the intended value is known; ask for missing choices. Unsupported seasonal configurations need a matching profile or offline calibration, not a smaller fleet. Do not silently change a fixed topology, deadline or workload to obtain a feasible answer. On overload, stop immediate retries and respect Retry-After when supplied. On 404, verify the configured base URL (including its path prefix) and server version before concluding that the sizing API is unavailable. Correct a confirmed URL error; if the intended base URL is unknown, ask rather than probing guessed paths.

For suspected OOM, check container termination reasons and memory events; CrashLoopBackOff alone is not proof. If resource pressure is confirmed, compare disk-backed storage, shorter justified history or fewer input series, then worker/batch limits and sharding. Distinguish bootstrap peaks from steady inference and active models from retained inactive state. Present proposed changes for review; estimates do not deploy them.

Frequently asked questions

What does the Vmanomaly Sizing AI skill do?

Estimate vmanomaly deployment CPU, RAM and disk for a known workload, or approximate inference capacity for fixed resources. Use for deployment sizing, maximum active time-series questions, RAM-versus-disk comparisons, or suspected OOM during fitting. Not for forecasting a monitored metric's capacity or selecting anomaly models.

Why use Vmanomaly Sizing on TypingMind?

Because you install it once and use it with any model. Vmanomaly Sizing is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Vmanomaly Sizing in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/VictoriaMetrics/skills/tree/main/plugins/vmanomaly/skills/vmanomaly-sizing. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Vmanomaly Sizing?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Vmanomaly Sizing?

As many as you like. As long as a model supports skills, you can use Vmanomaly Sizing with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Vmanomaly Sizing AI skill free?

Yes. It is published on GitHub by VictoriaMetrics under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇