vmware-debug 1.11.3__tar.gz → 1.12.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/.claude-plugin/plugin.json +2 -2
- vmware_debug-1.12.0/.clawhubignore +19 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/.mcp.json +1 -1
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/PKG-INFO +28 -10
- vmware_debug-1.12.0/README-CN.md +72 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/README.md +25 -7
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/RELEASE_NOTES.md +57 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/SECURITY.md +18 -5
- vmware_debug-1.12.0/openclaw.plugin.json +24 -0
- vmware_debug-1.12.0/package.json +20 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/pyproject.toml +3 -3
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/server.json +3 -3
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/SKILL.md +25 -12
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/agent-guardrails.md +4 -4
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/capabilities.md +11 -2
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/cli-reference.md +3 -1
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/routing.md +5 -2
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/setup-guide.md +18 -7
- vmware_debug-1.12.0/tests/conftest.py +42 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/_skill.py +2 -2
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/test_entity_reachability.py +2 -2
- vmware_debug-1.12.0/tests/eval/regression/test_audit_isolation.py +67 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_classification_against_vsphere_vocabulary.py +7 -0
- vmware_debug-1.12.0/tests/eval/regression/test_real_alert_titles_classify.py +153 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_tool_annotations.py +3 -2
- vmware_debug-1.12.0/tests/test_case_ledger_concurrency.py +417 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/uv.lock +5 -5
- vmware_debug-1.12.0/vmware_debug/__init__.py +9 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/cli.py +4 -3
- vmware_debug-1.12.0/vmware_debug/mcp/__init__.py +3 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/mcp/tools.py +5 -3
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/mcp_server/server.py +32 -22
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/api.py +6 -3
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/conclusion.py +38 -28
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/evidence.py +47 -28
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/hypotheses.py +22 -13
- vmware_debug-1.12.0/vmware_debug/ops/cases/store.py +396 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/timeline.py +74 -57
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/timeline.py +31 -1
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/rules/evidence_sources.yaml +62 -2
- vmware_debug-1.11.3/README-CN.md +0 -47
- vmware_debug-1.11.3/vmware_debug/__init__.py +0 -8
- vmware_debug-1.11.3/vmware_debug/mcp/__init__.py +0 -2
- vmware_debug-1.11.3/vmware_debug/ops/cases/store.py +0 -184
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/.gitignore +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/docs/plans/2026-08-28-investigation-layer-design.md +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/event-envelope.md +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/_family.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/_scores.json +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/_scoring.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/conftest.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/test_error_actionability.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/test_tool_description_quality.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/capability/test_tool_manifest_budget.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/_vsphere_event_vocabulary.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_capability_grader.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_case_id_non_ascii.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_case_plan_max_steps.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_debug_regressions.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_environment_resolver_isolation.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_every_tool_parameter_is_documented.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_evidence_payload_contract.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_host_lifecycle_classification.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_investigation_metrics.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_result_envelope.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_skill_name_aliases.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/eval/regression/test_spike_resolution.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_conclusion.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_evidence.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_grading.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_hypotheses.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_ids.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_plan.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_readiness.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_store.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_timeline_close.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_case_tools.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_knowledge.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_safe_error_passthrough.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/tests/test_timeline.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/envelope.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/mcp_server/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/__init__.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/grading.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/ids.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/knowledge.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/model.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/payloads.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/plan.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/readiness.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/cases/sources.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/ops/skill_names.py +0 -0
- {vmware_debug-1.11.3 → vmware_debug-1.12.0}/vmware_debug/rules/grading_rules.yaml +0 -0
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
|
|
3
3
|
"name": "vmware-debug",
|
|
4
4
|
"displayName": "VMware Debug",
|
|
5
|
-
"version": "1.
|
|
6
|
-
"description": "
|
|
5
|
+
"version": "1.12.0",
|
|
6
|
+
"description": "VMware incident timeline, root-cause routing, local case ledger; no vSphere access. 14 MCP tools.",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Wei Zhou",
|
|
9
9
|
"email": "zhouwei008@gmail.com",
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# What `clawhub package publish` uploads from this folder.
|
|
2
|
+
#
|
|
3
|
+
# The CLI does not read .gitignore — only this file. Without it, publishing from
|
|
4
|
+
# the repo root uploads everything on disk: .venv/, dist/, and any untracked
|
|
5
|
+
# credential file (mcp-publisher leaves .mcpregistry_*_token here). So this is an
|
|
6
|
+
# allowlist: ignore every top-level entry, then re-include only the plugin.
|
|
7
|
+
/*
|
|
8
|
+
!/openclaw.plugin.json
|
|
9
|
+
!/package.json
|
|
10
|
+
!/.claude-plugin/
|
|
11
|
+
!/.mcp.json
|
|
12
|
+
!/skills/
|
|
13
|
+
!/README.md
|
|
14
|
+
!/LICENSE
|
|
15
|
+
|
|
16
|
+
# Never ship these even inside an allowed directory.
|
|
17
|
+
.DS_Store
|
|
18
|
+
__pycache__/
|
|
19
|
+
*.pyc
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vmware-debug
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: VMware diagnostic brain —
|
|
3
|
+
Version: 1.12.0
|
|
4
|
+
Summary: VMware diagnostic brain — offline incident triage, log/event correlation, and root-cause routing across the VMware skill family
|
|
5
5
|
Project-URL: Homepage, https://github.com/vmware-skills/VMware-Debug
|
|
6
6
|
Project-URL: Repository, https://github.com/vmware-skills/VMware-Debug
|
|
7
7
|
Project-URL: Issues, https://github.com/vmware-skills/VMware-Debug/issues
|
|
@@ -18,17 +18,13 @@ Requires-Dist: mcp[cli]<2.0,>=1.10
|
|
|
18
18
|
Requires-Dist: pyyaml<7.0,>=6.0
|
|
19
19
|
Requires-Dist: rich<15.0,>=13.0
|
|
20
20
|
Requires-Dist: typer<1.0,>=0.12
|
|
21
|
-
Requires-Dist: vmware-policy<2.0,>=1.
|
|
21
|
+
Requires-Dist: vmware-policy<2.0,>=1.13.1
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
|
|
24
24
|
<!-- mcp-name: io.github.vmware-skills/vmware-debug -->
|
|
25
25
|
|
|
26
26
|
# VMware Debug
|
|
27
27
|
|
|
28
|
-
> ⚠️ **Work in progress** — the core (event correlation engine, MCP tools, CLI)
|
|
29
|
-
> is built and tested; README, `server.json`, full reference docs, and packaging
|
|
30
|
-
> polish are still landing. Not yet published to PyPI.
|
|
31
|
-
|
|
32
28
|
> **Disclaimer**: Community-maintained open-source project, **not affiliated with,
|
|
33
29
|
> endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" and
|
|
34
30
|
> "vSphere" are trademarks of Broadcom. Source is publicly auditable under the MIT
|
|
@@ -37,21 +33,43 @@ Description-Content-Type: text/markdown
|
|
|
37
33
|
The diagnostic brain of the VMware skill family. You bring the symptom (an error,
|
|
38
34
|
a log dump, a slow VM); this skill runs a systematic investigation, correlates
|
|
39
35
|
events from the other skills into one timeline, ranks root-cause hypotheses, and
|
|
40
|
-
tells you what to check next. It
|
|
41
|
-
never executes fixes
|
|
36
|
+
tells you what to check next. It **never touches vSphere** — it connects to
|
|
37
|
+
nothing and never executes fixes; its only writes are to a local case ledger
|
|
38
|
+
under `$OPS_HOME`. Remediation is routed to `vmware-aiops` (single op) or
|
|
42
39
|
`vmware-pilot` (multi-step, gated), mirroring the `vmware-harden → vmware-pilot`
|
|
43
40
|
advisor/executor split.
|
|
44
41
|
|
|
45
42
|
See [`skills/vmware-debug/SKILL.md`](skills/vmware-debug/SKILL.md) for the full
|
|
46
43
|
methodology, the event-envelope contract, and symptom routing.
|
|
47
44
|
|
|
48
|
-
## MCP tools
|
|
45
|
+
## MCP tools (14 — 7 read, 7 write)
|
|
46
|
+
|
|
47
|
+
The seven writes go to the local case ledger only; none reaches a VMware system.
|
|
48
|
+
|
|
49
|
+
**Correlation** — stateless, for a single look:
|
|
49
50
|
|
|
50
51
|
| Tool | What |
|
|
51
52
|
|---|---|
|
|
52
53
|
| `incident_timeline` | [READ] Correlate pre-fetched events → timeline + spikes + ranked hypotheses + next-check ideas |
|
|
53
54
|
| `list_symptom_categories` | [READ] List recognised symptom categories + what to check for each |
|
|
54
55
|
|
|
56
|
+
**Investigation ledger** — for an incident you will reason about over time:
|
|
57
|
+
|
|
58
|
+
| Tool | What |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `case_open` | [WRITE] Define the event; returns a case id and the grade this environment can reach |
|
|
61
|
+
| `case_readiness` | [READ] What grade this environment can reach, per symptom category, **before** you start |
|
|
62
|
+
| `case_knowledge` | [READ] Which knowledge formats are accepted, what is mounted, and which entries apply to a case |
|
|
63
|
+
| `case_plan` | [READ] What to fetch next — skill, tool and purpose per step; recomputed from the case's current state |
|
|
64
|
+
| `case_list` | [READ] Cases, newest first |
|
|
65
|
+
| `case_get` | [READ] One case: scope, ledger sizes, grade history |
|
|
66
|
+
| `case_hypotheses` | [WRITE] Register a candidate explanation, or read the ledger of what supports and refutes each |
|
|
67
|
+
| `case_submit_evidence` | [WRITE] Record one retrieved fact, with its source, query and time basis |
|
|
68
|
+
| `case_record_gap` | [WRITE] Record what could **not** be retrieved, and how to close it |
|
|
69
|
+
| `case_timeline` | [WRITE] Correlate everything the case has collected into one timeline |
|
|
70
|
+
| `case_grade` | [WRITE] Recompute the conclusion grade from the ledger and record it |
|
|
71
|
+
| `case_close` | [WRITE] Record the final grade, archive, and name what was left open |
|
|
72
|
+
|
|
55
73
|
## Offline / Air-Gapped Install (from source)
|
|
56
74
|
|
|
57
75
|
This project uses the modern PEP 517 build system (hatchling), so there is **no
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<!-- mcp-name: io.github.vmware-skills/vmware-debug -->
|
|
2
|
+
|
|
3
|
+
# VMware Debug(中文)
|
|
4
|
+
|
|
5
|
+
> **声明**:本项目为社区维护的开源项目,**与 VMware, Inc. 或 Broadcom Inc. 无任何隶属、
|
|
6
|
+
> 背书或赞助关系。** "VMware"、"vSphere" 为 Broadcom 商标。源码以 MIT 许可证公开可审计。
|
|
7
|
+
|
|
8
|
+
VMware skill 家族的**诊断大脑**。你给出症状(报错、日志、变慢的 VM),它来跑系统化排查:
|
|
9
|
+
把其它 skill 取到的事件关联成一条时间线、检测突刺、给根因假设排序,并告诉你下一步该查什么。
|
|
10
|
+
它**从不触碰 vSphere**——不连接任何东西,也从不执行修复;唯一的写入是 `$OPS_HOME` 下的本地案卷。修复一律路由给 vmware-aiops(单步)或
|
|
11
|
+
vmware-pilot(多步、带审批门控),完全复刻 vmware-harden → vmware-pilot 的「顾问/执行」分工。
|
|
12
|
+
|
|
13
|
+
## 配套 Skill
|
|
14
|
+
|
|
15
|
+
| 需求 | Skill |
|
|
16
|
+
|---|---|
|
|
17
|
+
| 故障关联 / 根因 | **vmware-debug**(本项目) |
|
|
18
|
+
| 集中日志检索 | vmware-log-insight(把 `log_search` 结果喂给它) |
|
|
19
|
+
| vCenter 事件与告警 | vmware-monitor |
|
|
20
|
+
| 指标 / 异常 | vmware-aria |
|
|
21
|
+
| 执行修复 | vmware-aiops(单步)/ vmware-pilot(多步门控) |
|
|
22
|
+
|
|
23
|
+
## 安装
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
uv tool install vmware-debug
|
|
27
|
+
vmware-debug categories # 看它能诊断哪些症状类别
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## MCP 工具(14 个:7 读、7 写)
|
|
31
|
+
|
|
32
|
+
7 个写工具只写本地案卷,没有一个触及任何 VMware 系统。
|
|
33
|
+
|
|
34
|
+
**关联**——无状态,看一眼用:
|
|
35
|
+
|
|
36
|
+
- `incident_timeline`:[READ] 把已取到的事件关联成 时间线 + 突刺 + 排序后的根因假设 + 下一步检查建议
|
|
37
|
+
- `list_symptom_categories`:[READ] 症状类别及对应的排查路由(不知道查什么时用它)
|
|
38
|
+
|
|
39
|
+
**调查案卷**——需要持续推理的事件:
|
|
40
|
+
|
|
41
|
+
- `case_open`:[WRITE] 定义事件;返回案卷 id 和本环境能达到的结论等级
|
|
42
|
+
- `case_readiness`:[READ] 开始**之前**,按症状类别说明本环境能达到的等级
|
|
43
|
+
- `case_knowledge`:[READ] 接受哪些知识格式、挂载了什么、哪些条目适用于某个案卷
|
|
44
|
+
- `case_plan`:[READ] 下一步该取什么——每步给出 skill、工具和目的;按案卷当前状态重算
|
|
45
|
+
- `case_list`:[READ] 案卷列表,最新的在前
|
|
46
|
+
- `case_get`:[READ] 单个案卷:范围、账本大小、等级历史
|
|
47
|
+
- `case_hypotheses`:[WRITE] 登记一个候选解释,或读取各假设的支持/反驳账本
|
|
48
|
+
- `case_submit_evidence`:[WRITE] 记录一条取到的事实,连同来源、查询和时间基准
|
|
49
|
+
- `case_record_gap`:[WRITE] 记录**没能**取到的东西,以及如何补上
|
|
50
|
+
- `case_timeline`:[WRITE] 把案卷收集到的一切关联成一条时间线
|
|
51
|
+
- `case_grade`:[WRITE] 从账本重算结论等级并记录
|
|
52
|
+
- `case_close`:[WRITE] 记录最终等级、归档,并写明留下了哪些未决项
|
|
53
|
+
|
|
54
|
+
**事件信封**:`{ts, source, severity, entity, text, fields}`。agent 把各源事件归一成此形状再交给
|
|
55
|
+
debug;debug 因此与其它包零运行时依赖。**请把每条事件的 `event_type` 保留在 `fields` 里**——
|
|
56
|
+
分类器除了正文之外也匹配它,而现代 vSphere 多数事件是 `EventEx`:正文是一句通用套话,
|
|
57
|
+
真正说明「这是什么事件」的只有 `eventTypeId`。
|
|
58
|
+
|
|
59
|
+
## 安全
|
|
60
|
+
|
|
61
|
+
结构上离线、无凭据:不连任何 vCenter/NSX/Aria,对 VMware 没有可破坏面,也没有秘密可泄露。
|
|
62
|
+
唯一的写入是本地案卷:证据、缺口、假设和等级历史只增不改;`timeline.md` 由证据重新生成,
|
|
63
|
+
`case.json` 保存当前等级和状态。多个写入者同样成立:每次写案卷都要先拿该案卷的锁文件(`.ledger.lock`,
|
|
64
|
+
独占创建),所以两个进程在共享的 `$OPS_HOME` 里写同一个案卷会被串行化,而不是互相丢条目;每个文件都先写到
|
|
65
|
+
临时文件名再移到位,读者不会读到写了一半的文件(在不支持硬链接的文件系统上,新的证据文件改为原地创建:
|
|
66
|
+
仍然绝不覆盖,但可能被读到写了一半)。崩溃进程留下的锁会连同持有者一起报告,从不自动删除;
|
|
67
|
+
确认没有进程在写该案卷后再手动删除。已发布的 1.11.3 及更早版本不拿这个锁,共享案卷目录的每台机器都要升级。
|
|
68
|
+
详见 [SECURITY.md](SECURITY.md)。
|
|
69
|
+
|
|
70
|
+
## 许可证
|
|
71
|
+
|
|
72
|
+
MIT。
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
# VMware Debug
|
|
4
4
|
|
|
5
|
-
> ⚠️ **Work in progress** — the core (event correlation engine, MCP tools, CLI)
|
|
6
|
-
> is built and tested; README, `server.json`, full reference docs, and packaging
|
|
7
|
-
> polish are still landing. Not yet published to PyPI.
|
|
8
|
-
|
|
9
5
|
> **Disclaimer**: Community-maintained open-source project, **not affiliated with,
|
|
10
6
|
> endorsed by, or sponsored by VMware, Inc. or Broadcom Inc.** "VMware" and
|
|
11
7
|
> "vSphere" are trademarks of Broadcom. Source is publicly auditable under the MIT
|
|
@@ -14,21 +10,43 @@
|
|
|
14
10
|
The diagnostic brain of the VMware skill family. You bring the symptom (an error,
|
|
15
11
|
a log dump, a slow VM); this skill runs a systematic investigation, correlates
|
|
16
12
|
events from the other skills into one timeline, ranks root-cause hypotheses, and
|
|
17
|
-
tells you what to check next. It
|
|
18
|
-
never executes fixes
|
|
13
|
+
tells you what to check next. It **never touches vSphere** — it connects to
|
|
14
|
+
nothing and never executes fixes; its only writes are to a local case ledger
|
|
15
|
+
under `$OPS_HOME`. Remediation is routed to `vmware-aiops` (single op) or
|
|
19
16
|
`vmware-pilot` (multi-step, gated), mirroring the `vmware-harden → vmware-pilot`
|
|
20
17
|
advisor/executor split.
|
|
21
18
|
|
|
22
19
|
See [`skills/vmware-debug/SKILL.md`](skills/vmware-debug/SKILL.md) for the full
|
|
23
20
|
methodology, the event-envelope contract, and symptom routing.
|
|
24
21
|
|
|
25
|
-
## MCP tools
|
|
22
|
+
## MCP tools (14 — 7 read, 7 write)
|
|
23
|
+
|
|
24
|
+
The seven writes go to the local case ledger only; none reaches a VMware system.
|
|
25
|
+
|
|
26
|
+
**Correlation** — stateless, for a single look:
|
|
26
27
|
|
|
27
28
|
| Tool | What |
|
|
28
29
|
|---|---|
|
|
29
30
|
| `incident_timeline` | [READ] Correlate pre-fetched events → timeline + spikes + ranked hypotheses + next-check ideas |
|
|
30
31
|
| `list_symptom_categories` | [READ] List recognised symptom categories + what to check for each |
|
|
31
32
|
|
|
33
|
+
**Investigation ledger** — for an incident you will reason about over time:
|
|
34
|
+
|
|
35
|
+
| Tool | What |
|
|
36
|
+
|---|---|
|
|
37
|
+
| `case_open` | [WRITE] Define the event; returns a case id and the grade this environment can reach |
|
|
38
|
+
| `case_readiness` | [READ] What grade this environment can reach, per symptom category, **before** you start |
|
|
39
|
+
| `case_knowledge` | [READ] Which knowledge formats are accepted, what is mounted, and which entries apply to a case |
|
|
40
|
+
| `case_plan` | [READ] What to fetch next — skill, tool and purpose per step; recomputed from the case's current state |
|
|
41
|
+
| `case_list` | [READ] Cases, newest first |
|
|
42
|
+
| `case_get` | [READ] One case: scope, ledger sizes, grade history |
|
|
43
|
+
| `case_hypotheses` | [WRITE] Register a candidate explanation, or read the ledger of what supports and refutes each |
|
|
44
|
+
| `case_submit_evidence` | [WRITE] Record one retrieved fact, with its source, query and time basis |
|
|
45
|
+
| `case_record_gap` | [WRITE] Record what could **not** be retrieved, and how to close it |
|
|
46
|
+
| `case_timeline` | [WRITE] Correlate everything the case has collected into one timeline |
|
|
47
|
+
| `case_grade` | [WRITE] Recompute the conclusion grade from the ledger and record it |
|
|
48
|
+
| `case_close` | [WRITE] Record the final grade, archive, and name what was left open |
|
|
49
|
+
|
|
32
50
|
## Offline / Air-Gapped Install (from source)
|
|
33
51
|
|
|
34
52
|
This project uses the modern PEP 517 build system (hatchling), so there is **no
|
|
@@ -1,3 +1,60 @@
|
|
|
1
|
+
## v1.12.0 — real alert titles get a category
|
|
2
|
+
|
|
3
|
+
Eight alerts read off a lab vCenter 8.0.3 and Aria 8.18.7 were passed through `triage`, and six
|
|
4
|
+
came back `uncategorized`; the top hypothesis was "uncategorized" itself. Five of them were not odd
|
|
5
|
+
spellings of subsystems the taxonomy already had — they were subsystems it had no category for:
|
|
6
|
+
|
|
7
|
+
* **`hardware`** (tpm, attestation, ipmi, sensor, bmc) — "Host TPM attestation alarm". The catalogue
|
|
8
|
+
already routed `hardware`, but the classifier could never emit it. Its plan now asks vmware-monitor
|
|
9
|
+
for the host sensors and the CIM Server state that supplies them (new `host_hardware` class).
|
|
10
|
+
* **`licensing`** (license) — "License will soon expire", "Expired vCenter Server license". Routes to
|
|
11
|
+
vmware-monitor `license_status` (which asset holds which key). An Aria alert about a vCenter license
|
|
12
|
+
is built from vCenter's data, so it is not counted as a second source: licensing stays at Candidate.
|
|
13
|
+
* **`data_collection`** (adapter instance, not receiving data, collector group, cloud proxy) — "Objects
|
|
14
|
+
are not receiving data from adapter instance". Routes to Aria's adapters, collector groups, node
|
|
15
|
+
health and resources, plus vmware-monitor for whether the source vCenter is reachable. Not a bare
|
|
16
|
+
"collector": vCenter's own services are named that way ("ESXi Dump Collector service") and stay
|
|
17
|
+
under `platform`.
|
|
18
|
+
* **`auth`** now reads "password" — "Root user password expired".
|
|
19
|
+
|
|
20
|
+
Seven of the eight now classify. "Group population health is degraded" stays uncategorized on purpose:
|
|
21
|
+
it is a roll-up of member health and names no subsystem. Against all 427 vSphere event types the
|
|
22
|
+
taxonomy now reads 140 (was 124): 14 licensing and 2 password events, and no type changed its first
|
|
23
|
+
category. The keyword table is at 100, the cap its padding test allows — the next category will have
|
|
24
|
+
to argue for moving it.
|
|
25
|
+
|
|
26
|
+
**`case_readiness` recognises vmware-aiops.** It used to land in `unrecognised_skills` although routing
|
|
27
|
+
sent power_lifecycle cases to it. A new `vm_operations` class lists `vm_list_snapshots` only. AIops's
|
|
28
|
+
cluster summary and investigation bundles call vmware-monitor's code and would have counted monitor's
|
|
29
|
+
data as a second source; `vm_task_status` needs a task id a plan does not have, and called with a VM
|
|
30
|
+
name it answers "gone" with no error. With monitor and aiops, power_lifecycle now reaches Probable;
|
|
31
|
+
data_collection reaches Probable with monitor and aria.
|
|
32
|
+
|
|
33
|
+
## v1.11.4 — concurrent writers stop losing case entries
|
|
34
|
+
|
|
35
|
+
Two agents on one case — a supported setup, since `OPS_HOME` can point at a shared folder — lost
|
|
36
|
+
entries: six processes writing 150 gaps and hypotheses each kept 157 of 900 gaps and handed out
|
|
37
|
+
duplicate hypothesis ids. Ledger writes are now serialised by a per-case lock (`.ledger.lock`
|
|
38
|
+
in the case folder), and each write lands atomically. Versions up to and including 1.11.3 do not
|
|
39
|
+
take the lock, so **every machine that shares an `OPS_HOME` needs this version** — one older
|
|
40
|
+
writer on the share can still lose entries.
|
|
41
|
+
|
|
42
|
+
The manifests advertised 2 tools (14 are registered), and the docs called the case-ledger writes
|
|
43
|
+
read-only. Both are corrected, and the docs now say that case data is sensitive, owner-only, and
|
|
44
|
+
kept until you delete the case folder.
|
|
45
|
+
|
|
46
|
+
**OpenClaw hid this skill unless `vmware-debug` was on PATH.** `metadata.openclaw.requires` was
|
|
47
|
+
only `bins: ["vmware-debug"]` — there was no `requires.config` or `requires.env`, unlike most of the
|
|
48
|
+
family. OpenClaw hides a skill whose required binary is missing, and a plugin install runs the
|
|
49
|
+
server through uvx, which never puts `vmware-debug` on PATH, so there the skill was "needs setup / not
|
|
50
|
+
visible to the model" (requirement semantics verified on OpenClaw 2026.6.35). `requires` is now
|
|
51
|
+
`anyBins: ["vmware-debug", "uvx"]`; `optional.env` is unchanged, and the placeholder
|
|
52
|
+
`primaryEnv: "NONE"` is gone.
|
|
53
|
+
|
|
54
|
+
**Install commands in the skill pin this release.** ClawHub reviews SKILL.md and references/,
|
|
55
|
+
not the package they install, so an unpinned `uv tool install` vouched for code nobody reviewed.
|
|
56
|
+
Every install command for this package in the skill now names this version.
|
|
57
|
+
|
|
1
58
|
## v1.11.3 — 398 tests never ran
|
|
2
59
|
|
|
3
60
|
|
|
@@ -15,11 +15,24 @@ or by email to the maintainer. Please do not open public issues for security bug
|
|
|
15
15
|
|
|
16
16
|
## Security Design
|
|
17
17
|
|
|
18
|
-
###
|
|
19
|
-
vmware-debug has **no
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
### Offline by construction; writes only its own ledger
|
|
19
|
+
vmware-debug has **no network access and no credentials**. It does not connect to
|
|
20
|
+
vCenter, NSX, Aria, or any appliance. Its tools work over event data the
|
|
21
|
+
orchestrating agent has already fetched with the other skills' read tools. Seven
|
|
22
|
+
of its fourteen MCP tools write — only to the local investigation ledger under
|
|
23
|
+
`$OPS_HOME` (default `~/.vmware/cases`). Evidence, gaps, hypotheses and grade
|
|
24
|
+
history are only ever added to; `timeline.md` is regenerated from the evidence
|
|
25
|
+
and `case.json` holds the current grade and state. That holds with several writers
|
|
26
|
+
too: every write to a case takes that case's lock file (`.ledger.lock`, created
|
|
27
|
+
exclusively), so two processes working one case in a shared `$OPS_HOME` are
|
|
28
|
+
serialised rather than losing each other's entries, and every file is written to
|
|
29
|
+
a temporary name and moved into place, so a reader never sees half of one (on a
|
|
30
|
+
filesystem without hard links, a new evidence file is created in place instead:
|
|
31
|
+
still never overwritten, but readable half-written). A lock left by a crashed
|
|
32
|
+
process is reported with its holder and never removed automatically; delete it
|
|
33
|
+
once nothing is writing the case. Released versions up to and including 1.11.3
|
|
34
|
+
do not take the lock, so upgrade every machine that shares a cases folder. There
|
|
35
|
+
is no destructive surface against any VMware system and no secret to leak.
|
|
23
36
|
|
|
24
37
|
### No remediation execution
|
|
25
38
|
debug only *diagnoses* and *recommends*. Any fix is routed to vmware-aiops
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vmware-debug",
|
|
3
|
+
"name": "VMware Debug",
|
|
4
|
+
"description": "VMware incident timeline, root-cause routing, local case ledger; no vSphere access. 14 MCP tools.",
|
|
5
|
+
"skills": [
|
|
6
|
+
"./skills"
|
|
7
|
+
],
|
|
8
|
+
"mcpServers": {
|
|
9
|
+
"vmware-debug": {
|
|
10
|
+
"transport": "stdio",
|
|
11
|
+
"command": "uvx",
|
|
12
|
+
"args": [
|
|
13
|
+
"--from",
|
|
14
|
+
"vmware-debug==1.12.0",
|
|
15
|
+
"vmware-debug-mcp"
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"configSchema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"properties": {}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zw008/vmware-debug",
|
|
3
|
+
"version": "1.12.0",
|
|
4
|
+
"description": "VMware incident timeline, root-cause routing, local case ledger; no vSphere access. 14 MCP tools.",
|
|
5
|
+
"private": true,
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://github.com/vmware-skills/VMware-Debug",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/vmware-skills/VMware-Debug.git"
|
|
11
|
+
},
|
|
12
|
+
"openclaw": {
|
|
13
|
+
"compat": {
|
|
14
|
+
"pluginApi": ">=2026.3.24-beta.2"
|
|
15
|
+
},
|
|
16
|
+
"build": {
|
|
17
|
+
"openclawVersion": "2026.3.24-beta.2"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "vmware-debug"
|
|
7
|
-
version = "1.
|
|
8
|
-
description = "VMware diagnostic brain —
|
|
7
|
+
version = "1.12.0"
|
|
8
|
+
description = "VMware diagnostic brain — offline incident triage, log/event correlation, and root-cause routing across the VMware skill family"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
requires-python = ">=3.10"
|
|
@@ -21,7 +21,7 @@ dependencies = [
|
|
|
21
21
|
"typer>=0.12,<1.0",
|
|
22
22
|
"rich>=13.0,<15.0",
|
|
23
23
|
"mcp[cli]>=1.10,<2.0",
|
|
24
|
-
"vmware-policy>=1.
|
|
24
|
+
"vmware-policy>=1.13.1,<2.0",
|
|
25
25
|
# Imported directly by ops/cases/grading.py for the rules file. It has
|
|
26
26
|
# always arrived transitively via vmware-policy; a package should
|
|
27
27
|
# declare what it imports rather than rely on a dependency's dependency.
|
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.vmware-skills/vmware-debug",
|
|
4
4
|
"title": "VMware Debug",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "VMware incident timeline, root-cause routing, local case ledger; no vSphere access. 14 MCP tools.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/vmware-skills/VMware-Debug",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "1.
|
|
10
|
+
"version": "1.12.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "pypi",
|
|
14
14
|
"identifier": "vmware-debug",
|
|
15
|
-
"version": "1.
|
|
15
|
+
"version": "1.12.0",
|
|
16
16
|
"runtimeHint": "uvx",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
@@ -10,7 +10,8 @@ description: >
|
|
|
10
10
|
don't know where to start. Always use this skill for "diagnose this VMware
|
|
11
11
|
issue", "why is my VM slow", "troubleshoot this vSphere error", "what does
|
|
12
12
|
this log mean", "help me figure out what broke" when the context is explicitly
|
|
13
|
-
VMware/vSphere/ESXi/NSX. It
|
|
13
|
+
VMware/vSphere/ESXi/NSX. It never touches vSphere: its only writes are to a
|
|
14
|
+
local case ledger. Do NOT
|
|
14
15
|
use it to execute fixes — single fixes go to vmware-aiops, multi-step gated
|
|
15
16
|
remediation goes to vmware-pilot. Do NOT use it for routine inventory or
|
|
16
17
|
health checks with no problem to solve — use vmware-monitor.
|
|
@@ -19,7 +20,7 @@ installer:
|
|
|
19
20
|
package: vmware-debug
|
|
20
21
|
allowed-tools:
|
|
21
22
|
- Bash
|
|
22
|
-
metadata: {"openclaw":{"requires":{"
|
|
23
|
+
metadata: {"openclaw":{"requires":{"anyBins":["vmware-debug","uvx"]},"optional":{"env":["VMWARE_AUDIT_APPROVED_BY","VMWARE_AUDIT_RATIONALE"],"bins":["vmware-policy"]},"homepage":"https://github.com/vmware-skills/VMware-Debug","os":["macos","linux"]}}
|
|
23
24
|
---
|
|
24
25
|
|
|
25
26
|
# VMware Debug
|
|
@@ -30,7 +31,8 @@ metadata: {"openclaw":{"requires":{"bins":["vmware-debug"]},"optional":{"env":["
|
|
|
30
31
|
|
|
31
32
|
The diagnostic brain of the VMware skill family. You bring the symptom; this skill
|
|
32
33
|
runs the investigation and points at the root cause. It **reads and reasons** — it
|
|
33
|
-
never writes
|
|
34
|
+
never writes to vSphere; its only writes go to its own local case ledger.
|
|
35
|
+
Companion skills do the data collection and the fixing.
|
|
34
36
|
|
|
35
37
|
## What This Skill Does
|
|
36
38
|
|
|
@@ -40,14 +42,16 @@ never writes. Companion skills do the data collection and the fixing.
|
|
|
40
42
|
| Root-cause ranking | Score symptom clusters, surface the most likely cause first | Read |
|
|
41
43
|
| Next-check ideas | Suggest exactly what to look at next (which skill/tool) when you're stuck | Read |
|
|
42
44
|
| Remediation routing | Hand the fix to vmware-aiops (single) or vmware-pilot (gated, multi-step) | Read (routes only) |
|
|
45
|
+
| Investigation ledger | Open a case; record evidence, gaps and hypotheses; grade and close it | Write (local ledger only) |
|
|
43
46
|
|
|
44
|
-
**
|
|
45
|
-
has already gathered with the other skills' read tools
|
|
47
|
+
**No network access of its own, and no write to any VMware system.** It correlates
|
|
48
|
+
data the agent has already gathered with the other skills' read tools; its seven
|
|
49
|
+
write tools touch only the local case ledger.
|
|
46
50
|
|
|
47
51
|
## Quick Install
|
|
48
52
|
|
|
49
53
|
```bash
|
|
50
|
-
uv tool install vmware-debug
|
|
54
|
+
uv tool install vmware-debug==1.12.0
|
|
51
55
|
vmware-debug categories # see what it can diagnose
|
|
52
56
|
```
|
|
53
57
|
|
|
@@ -126,7 +130,7 @@ a recommended plan.
|
|
|
126
130
|
| `case_grade` | [WRITE] Recompute the conclusion grade from the ledger and record it |
|
|
127
131
|
| `case_close` | [WRITE] Record the final grade, archive, and name what was left open |
|
|
128
132
|
|
|
129
|
-
The
|
|
133
|
+
The seven writes go to `$OPS_HOME` (default `~/.vmware/cases/`) and nowhere else.
|
|
130
134
|
|
|
131
135
|
**List envelope** (output of `list_symptom_categories`): `{items, returned, limit, total, truncated, hint}` — read the rows from `items`. `truncated` is always `false` here, which is the point: it states that the catalogue is complete instead of leaving you to infer it.
|
|
132
136
|
|
|
@@ -267,11 +271,20 @@ vmware-debug mcp # start stdio MCP server (proxy-
|
|
|
267
271
|
|
|
268
272
|
## Audit & Safety
|
|
269
273
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
No network, nothing executed. The seven [WRITE] tools write only to the local case
|
|
275
|
+
ledger under `$OPS_HOME`; nothing here touches a remote VMware estate. Evidence, gaps,
|
|
276
|
+
hypotheses and grade history are only ever added to — `timeline.md` is regenerated from
|
|
277
|
+
the evidence and `case.json` holds the current grade and state. Remediation is always routed to
|
|
278
|
+
aiops/pilot, where the double-confirm / approval / audit gates live (audit DB
|
|
279
|
+
`~/.vmware/audit.db`). debug has no config and no connection, so it registers no
|
|
280
|
+
environment resolver, and its tools do not pass through the policy engine — no policy
|
|
281
|
+
rule applies to them. See `references/setup-guide.md`.
|
|
282
|
+
|
|
283
|
+
**Case data is sensitive and is kept until you delete it.** Each case lives in
|
|
284
|
+
`$OPS_HOME/cases/<case-id>/` (default `~/.vmware/cases/`), created owner-only (`0700`).
|
|
285
|
+
It holds whatever evidence was submitted — host names, addresses, log and event text.
|
|
286
|
+
Nothing is deleted automatically: `case_close` records the grade and marks the case
|
|
287
|
+
closed but keeps its files. Remove a case by deleting its folder.
|
|
275
288
|
|
|
276
289
|
## License
|
|
277
290
|
|
{vmware_debug-1.11.3 → vmware_debug-1.12.0}/skills/vmware-debug/references/agent-guardrails.md
RENAMED
|
@@ -16,7 +16,7 @@ vmware-debug are specific to this skill.
|
|
|
16
16
|
|
|
17
17
|
vmware-debug exposes 14 MCP tools: 7 reads and 7 writes. It connects to nothing
|
|
18
18
|
and holds no credentials — the calling agent gathers events from the other
|
|
19
|
-
skills, normalises them, and hands them over. The
|
|
19
|
+
skills, normalises them, and hands them over. The seven writes go to the local
|
|
20
20
|
investigation ledger under `~/.vmware/cases/`, never to a VMware system. That
|
|
21
21
|
makes it the safest skill in the family to point a small model at — and the one
|
|
22
22
|
most exposed to the model's reasoning, because its output *is* an
|
|
@@ -41,12 +41,12 @@ These are structural, so it cannot.
|
|
|
41
41
|
|
|
42
42
|
| Guardrail you would otherwise prompt for | Now enforced by |
|
|
43
43
|
|---|---|
|
|
44
|
-
| "Work read-only and never modify anything" | **The tool surface itself.**
|
|
45
|
-
| "Diagnose only — never apply the fix you propose" | **Structural.** This skill has no tool that changes anything, and it holds no connection to vCenter, NSX or anything else. Remediation is routed to vmware-aiops or vmware-pilot by the calling agent. |
|
|
44
|
+
| "Work read-only and never modify anything" | **The tool surface itself.** No tool reaches a VMware system. The seven [WRITE] tools write only to this skill's own local case ledger, so there is nothing in vSphere to withhold and nothing to switch off. |
|
|
45
|
+
| "Diagnose only — never apply the fix you propose" | **Structural.** This skill has no tool that changes anything outside its own ledger, and it holds no connection to vCenter, NSX or anything else. Remediation is routed to vmware-aiops or vmware-pilot by the calling agent. |
|
|
46
46
|
| "Do not fabricate a timeline — build it from the events I gave you" | **`incident_timeline` correlates only its input.** It is source-agnostic and has no way to fetch anything, so the timeline cannot contain an event the agent did not supply. |
|
|
47
47
|
| "Tell me when the symptom is outside what you can recognise" | **`list_symptom_categories`** states the catalogue, and unmatched symptoms come back as `uncategorized` rather than being forced into the nearest signature. |
|
|
48
48
|
| "Use explicit limits for queries that may return large amounts of data" | **The list envelope.** `list_symptom_categories` returns `{items, returned, limit, total, truncated, hint}` with `truncated` always `false` — which is the point: it states that the catalogue is complete instead of leaving you to infer it. |
|
|
49
|
-
| "Log everything you looked at" | **The
|
|
49
|
+
| "Log everything you looked at" | **The case ledger, for investigations.** Evidence submitted to a case is recorded with its source skill, tool, query and fetch time. Debug's own tool calls are not written to `~/.vmware/audit.db`: none of them acts on a VMware target. |
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# vmware-debug Capabilities
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Offline incident correlation. No network, no credentials, no writes to any VMware
|
|
4
|
+
system. This table covers the two stateless correlation tools; the twelve `case_*`
|
|
5
|
+
investigation-ledger tools (seven of which write, to the local ledger only) are
|
|
6
|
+
listed in `SKILL.md`, and their response sizes are not yet measured here.
|
|
4
7
|
|
|
5
8
|
| Tool | What it returns | Typical response tokens |
|
|
6
9
|
|---|---|---|
|
|
@@ -28,9 +31,15 @@ fixed in-process constant, so `total` is a real count and `limit` is `null`.
|
|
|
28
31
|
## Symptom categories
|
|
29
32
|
|
|
30
33
|
`storage`, `network`, `compute`, `ha_drs`, `host_lifecycle`, `power_lifecycle`,
|
|
31
|
-
`auth`, `platform`.
|
|
34
|
+
`auth`, `platform`, `hardware`, `licensing`, `data_collection`.
|
|
32
35
|
See `references/routing.md` for keyword signatures and the skill each routes to.
|
|
33
36
|
|
|
37
|
+
`hardware`, `licensing` and `data_collection` were added after real alert titles
|
|
38
|
+
("Host TPM attestation alarm", "License will soon expire", "Objects are not
|
|
39
|
+
receiving data from adapter instance") matched no category at all. A roll-up
|
|
40
|
+
such as "Group population health is degraded" is deliberately left
|
|
41
|
+
uncategorized: it names no subsystem, and the cause is in one of its members.
|
|
42
|
+
|
|
34
43
|
`host_lifecycle` is a host changing its own availability state — maintenance
|
|
35
44
|
mode, shutdown, reboot, standby, connection loss, sync failure.
|
|
36
45
|
`power_lifecycle` is the VM-level equivalent. They are separate because they are
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# vmware-debug CLI Reference
|
|
2
2
|
|
|
3
|
-
All commands are
|
|
3
|
+
All commands are offline (no network, no credentials). All but `mcp` are
|
|
4
|
+
read-only; `mcp` starts the MCP server, whose seven `case_*` write tools record
|
|
5
|
+
into the local case ledger.
|
|
4
6
|
|
|
5
7
|
## triage — correlate a set of collected events
|
|
6
8
|
|
|
@@ -11,9 +11,12 @@ Keep this in sync with `_CATEGORY_SIGNATURES` in `vmware_debug/ops/timeline.py`
|
|
|
11
11
|
| **compute** | cpu ready, memory, balloon, swap, contention, numa | vmware-aria (metrics + anomalies) | pilot (rightsizing) |
|
|
12
12
|
| **ha_drs** | ha, high availability, drs, failover, admission control, isolation | vmware-monitor, vmware-aiops (cluster) | pilot |
|
|
13
13
|
| **host_lifecycle** | maintenance mode, shut down of, host reboot, standby mode, lost connection to, cannot synchronize, not responding | vmware-monitor (host/cluster state), vmware-harden (drift — a host that left service on cue was told to), vmware-log-insight (vpxd/hostd) | pilot |
|
|
14
|
-
| **power_lifecycle** | power on/off, failed to start, boot, vmx, ovf, clone, snapshot | vmware-aiops (
|
|
15
|
-
| **auth** | login, authentication, denied, 401, 403, token, certificate, tls | config/.env, target cert + time sync | config fix |
|
|
14
|
+
| **power_lifecycle** | power on/off, failed to start, boot, vmx, ovf, clone, snapshot | vmware-aiops (snapshot tree), vmware-monitor | aiops |
|
|
15
|
+
| **auth** | login, authentication, denied, 401, 403, token, certificate, tls, password | config/.env, target cert + time sync | config fix |
|
|
16
16
|
| **platform** | vpxd, hostd, service restart, crash, 503, not responding, disconnected | vmware-monitor (connection/service), vmware-log-insight (vpxd/hostd) | pilot |
|
|
17
|
+
| **hardware** | tpm, attestation, ipmi, sensor, bmc | vmware-monitor (host sensors and the CIM Server that supplies them, host logs for ipmi/cim), the server's BMC | site / vendor |
|
|
18
|
+
| **licensing** | license | vmware-monitor (license_status — which asset holds which key); an Aria alert on "Unlicensed Group" is Aria's own license | license portal |
|
|
19
|
+
| **data_collection** | adapter instance, not receiving data, collector group, cloud proxy | vmware-aria (adapters, collector groups, node health, objects that stopped reporting), vmware-monitor (is the source vCenter reachable) | aria admin |
|
|
17
20
|
|
|
18
21
|
## Remediation handoff (advisor → executor)
|
|
19
22
|
|