Repository navigation
Releases
v2.5.1
v2.5.1 (2026-11-10) — Separate dispatch result interpretation and refusals
Extract dispatch-result classification and execution-refusal helpers, preserving preview-only failures, guest commands with unknown effects, sensitive-placeholder refusal, workflow state and public import aliases. Workflow execution and rollback semantics remain unchanged.
Validation: existing suites, complete CLI/MCP surface comparison, structural guard checks and security scanning; exact results are retained in the private release record. Live 9.1/Supervisor, PAIS, NSX and Horizon validation is not established by synthetic tests.
中文:本轮修复和重构范围见上述说明;保留既有 Policy、审计及确认门。合成测试不代表 9.1/Supervisor、PAIS、NSX 或 Horizon 正向真机验证。
v2.5.0 — Explicit ClusterClass references in VKS deployment workflows
Released 2026-11-09.
-
Synchronize the companion-tool contract snapshot with the new optional VKS creation arguments.
-
Allow explicit ClusterClass name/namespace in the VKS deployment template, omitting new arguments for legacy callers. Requires the companion VKS skill 3.7.0 or newer; no live 9.1 validation is claimed.
v2.4.3 — Gemini extension packaging
Released 2026-11-09.
Add the root Gemini CLI extension manifest and discovery metadata, using the existing canonical skill and exact MCP package version. No duplicate skill entrypoint is introduced.
Runtime infrastructure operations, permissions, TLS defaults and confirmation behavior are unchanged. No new vSphere/VCF 9.x or live product compatibility is claimed. ClawHub skill and bundle verdicts are checked separately after publication; documentation corrections are not a clean-scan claim.
v2.4.2 — refresh companion tool contracts (2026-11-08)
-
Update public author/project contact metadata to
zhouwei008@gmail.com. -
Refresh the companion contract for Monitor log selection and the PAIS gallery; no Pilot runtime/tool-count changes.
v2.4.1 — VKS 9.1 upgrade risk in the companion catalog (2026-11-01)
- The companion-tool snapshot now includes VKS 3.5.0's read-only
get_supervisor_upgrade_risktool. The documented VKS and family tool counts match the live registries. Pilot's workflow execution behavior is unchanged. - Install VMware-VKS 3.5.0 or later to use that tool. Its advisory report does not measure VUMDB schema or establish upgrade clearance.
v2.4.0 — runs its own steps on request; honest gates and rollback (first real-vSphere run)
Behaviour changes for existing callers
approverefuses a gate whose earlier steps were handed out (not_executed) until
acknowledge_not_executed=True— this applies to the default MCP server and to workflows saved by 2.3.0 that are
already awaiting approval. An automatedapprovecaller must pass the flag after performing the steps.clone_and_testrequiressnapshot_name(it used to clone from a snapshot literally namedcurrent).- Rollback reports a step without an undo as
not_reversible(wasskipped); approval gates and catalog reads are no
longer listed. A rollback whose undo failed or whose effect is unknown returnsaction: "rollback_incomplete"with
outcome: "failed"and anerrornaming them (it saidrolled_back). cancel_workflowkeeps handed-out stepsnot_executed(was rewritten toskipped).- With vmware-policy 1.24.2, Pilot's own refusals and failed outcomes (
run_workflow/approveending
outcome: "failed", refusals carryingerror, an incomplete rollback) areisErrorframes; previews,
awaiting_approvalanddispatch_requiredare not.
Details
- A step result's
kubeconfig(a bearer token from VKSissue_*_kubeconfigunder--dispatch) is masked in
workflows.dblike a password. With--dispatch, a skill's failed call keeps its own error envelope (hint
included) instead of a flattened JSON string.
Found running Pilot workflows on vCenter 8.0.3 for the first time, through the MCP server and through an embedder
that dispatched steps to the 2.4.0 skill servers.
clone_and_testworks on real vSphere. It cloned from a snapshot literally namedcurrent(almost no VM
has one) and resized the clone after powering it on, which vCenter refuses (MemoryHotPlugNotSupported) on any
VM without hot-add. Nowsnapshot_nameis required (no default; the error nameslist_vm_snapshots), the
clone is made powered off, staging is resized while off and then powered on, and the check is vmware-monitor
investigate_vmon the staging VM instead ofget_alarmsfor the whole vCenter. A guest command runs after
power-on. 7 steps (8 for a guest command). Pilot still does not waitmonitor_minutes: the approval message
asks the approver to, says a running production VM is resized in place (needs hot-add), and that the production
change is not rolled back. The clone step no longer claims a rollback (powering a clone off does not remove it).approverefuses a gate whose earlier steps nobody ran. Through the MCP server (no dispatcher) every step
before the gate isnot_executed, and the gate used to pass under "Staging VM … tested". It now refuses and
lists them innot_executed_before_gate;acknowledge_not_executed=Truerecords them asreported_done
(performed outside Pilot) and they are not handed out again. Pilot never saw their results: through MCP a later
step that references one is handed out with the reference unresolved (fill it from that step's result), and
an embedder that dispatches it refuses it. An embedder with a dispatcher is unaffected unless it resumes a workflow
that was first run without one — then the same refusal applies. The acknowledgement is the caller's
statement, not a check: Pilot records who sent it, not what the steps returned.
SKILL.md now says plainly who executes steps: through MCP the agent does, and a workflow never reaches
completedthat way.- Rollback says what it cannot undo. A step with no rollback is reported
not_reversible(it wasskipped,
"no rollback defined"); a rollback that does not remove what the step created — a clone powered off — is
partialwithleft_behind, and the step ispartially_rolled_back. The preview carries the same:
leaves_behindon such entries andleft_in_place_note. Approval gates are no longer listed as skipped. - Failure is read from the frame, not from prose. Besides
isErrorand a top-levelerroron a plain
dict, a top-levelerrorin an MCP result's structured content and a one-row[{"error": ...}]list now fail
the step, the last step included. A string is never read as failure, even one startingError:— decided,
as in vmware-policy, because tools return console text that can start that way. A skill must setisError;
AIops's linked clone returned its failure as prose in 2.4.0 and is fixed there (it now raises). - Pilot can run the steps itself:
vmware-pilot mcp --dispatch(orVMWARE_PILOT_DISPATCH=stdio), off by
default (HLD §19, D-26). Each step runs in that skill's own MCP server (vmware-<skill>-mcp), so its policy,
confirmation gate and audit apply; nothing after an approval gate runs beforeapprove; workflows reach
completed. stdio only — refused with--transport https/http, and a call with a network caller is refused.
Only the family's skills (notpilot) are started, without a shell. A step that exceeds
VMWARE_PILOT_DISPATCH_TIMEOUT(default 1800 s) is recordedinterrupted(effect unknown), as is a step whose
skill server died after the call was sent; a server that never starts fails the step with its reason. Every
step's skill is resolved before step 0 runs; settings are checked at start (VMWARE_PILOT_DISPATCHmust be
stdioor unset). A step already handed out inpending_dispatchis never run again by a--dispatchPilot.
Results are stored as the tool's own data, so__from_step_N__:keyworks; a reference to a key the step did
not return is refused (it used to send the whole result in its place). Failure is read from the frame:
skills' failed calls arrive asisErroronce they run vmware-policy withvmware_policy.frame(vmware-policy
1.24.2). With an older Policy, 13 of 14 skills sent failures withisError: false; Pilot catches the
{"error": ...}envelope itself, but a string-shaped failure (mostly AVI's) reads as success.
Pilot's tools are synchronous: set the MCP client's tool timeout above the longest step. - A guest command (
run_vm_guest_command,_with_output) that exits non-zero now fails the step (it was recorded
as success); one that timed out or whose process vanished (exit_code-1) isinterrupted— it may still be
running. A clone leftpartially_rolled_backis still listed by a second rollback; an undo whose effect is
unknown marks its stepinterrupted. The rollback preview lists a rollback attached to a read step. investigate_vmadded to the design catalog (101 tools).- Two new step statuses,
reported_doneandpartially_rolled_back. Pilot 2.3.0 does not know them: reading a
workflow that has them, itsrollback/cancel_workflowrefuse ("unrecognised status") rather than guess. - The rollback preview gains
not_reversible_outside_pilot(steps handed to the caller with no undo — a clone,
a production resize; tools the catalog marks read-only left out) with a note; through MCP those used to appear nowhere in the
preview. The cancel preview gainshanded_out_to_caller: steps already inpending_dispatch, which cancel
can neither stop nor undo — they used to be listed aswould_skip, and cancel now keeps themnot_executed
on the record instead of rewriting them toskipped.
v2.3.0 — roles for network callers (HLD §18)
- Workflows record their creator (
created_by: the network callertoken:<name>, or the OS user). Workflows saved
before this release have none. - With vmware-policy ≥ 1.24.0 and roles enabled,
approvefollows the caller's role:approve: nonecannot
approve,approve: otherscannot approve a workflow its own token created (nor one with no recorded creator),
approve: anycan. The token also needs a role that allows theapprovetool itself. Whoever edits a draft
(update_draft) or confirms it (confirm_draft) is recorded inauthorsand counts as its creator for
others; so is whoever saved a custom template, for workflows made from it (the YAML recordsauthors).
A refusal is audited asdeniedwithrule=role:<name>. - Approval is an audited attestation, not a gate on execution: this server does not run other skills' steps, it
returns them (pending_dispatch) and each skill's server checks the caller's own role there. - Declares role metadata (no tool takes a target). README and setup guide: one endpoint for several people or roles.
v2.2.0 — serve MCP over HTTPS
vmware-pilot mcp can now serve the network as well as stdio (HLD §16, via vmware-policy 1.21.0):
vmware-audit token create alice # once per caller; shown once
vmware-pilot mcp --transport https --host 0.0.0.0 --port 8443 \
--cert server.pem --key server-key.pem --public-name mcp.example.comConnect a client and manage callers (Claude Code shown; any MCP client with streamable HTTP and custom headers works):
claude mcp add --transport http vmware-pilot https://mcp.example.com:8443/mcp \
--header "Authorization: Bearer $VMWARE_MCP_TOKEN"
vmware-audit token list # names only
vmware-audit token revoke alice # refused from its next request, no restart- Every request needs
Authorization: Bearer <token>; the server will not start without a token, refuses Host or
Origin values outside--public-name, and checks itself (unauthenticated requests must get 401) before it
binds.--transport httpbinds loopback only, for a TLS-terminating reverse proxy. - Audit rows record the caller as
token:<name>and the surface asmcp-https. Calls naming different targets
run in parallel; calls naming no target run one at a time. - Over HTTPS,
approverecords the authenticated caller as the approver and refuses a different free-text
name (HLD §16 D-12). stdio and the CLI are unchanged. - stdio remains the default; the
vmware-pilot-mcpconsole script andpython -mare unchanged. - Everyone who can reach the endpoint acts with this server's account; run one endpoint per privilege level.
- Requires
vmware-policy>=1.21.0andmcp>=1.28.
v2.1.0 — offer only read tools, plus chosen write tools
vmware-pilot mcp can now offer a subset of this server's tools (HLD §17 D-16, via vmware-policy 1.20.0):
vmware-pilot mcp --expose read --allow-write cancel_workflow--expose read(orVMWARE_PILOT_MCP_EXPOSE=read) keeps only tools annotatedreadOnlyHint: true;--allow-write a,b
(orVMWARE_PILOT_MCP_ALLOW_WRITE) keeps chosen write tools on top. The default is unchanged: every tool.- A bad value, or a name that is not a write tool of this server, stops the server before it serves (exit 2).
Flags and environment variables are not mixed; a blank flag counts as not given. Pre-2.0 names are accepted. - This limits what clients are offered; it is not authorization. See "Limiting which tools are offered" in
references/setup-guide.md, which also notes that an agent with a shell can bypass MCP, so the account itself
must be least-privilege. - Requires
vmware-policy>=1.20.0.
v2.0.0 — create_workflow_from_template, and VKS kubeconfig tools at their new names
Breaking: one of Pilot's own MCP tools is renamed. plan_workflow → create_workflow_from_template.
It never produced a dry-run plan: it builds the steps a template (workflow_type + params, built-in or
custom YAML) defines and saves the workflow in state pending, ready for run_workflow — a write.
"plan" read as a look that changes nothing. The new name says what it does and sets it apart from
create_workflow, which saves a step list you write yourself. Parameters, results, risk label and
annotations are unchanged; the MCP instructions and the tool's description now say this.
| Old | New |
|---|---|
plan_workflow |
create_workflow_from_template |
- vmware-vks renamed
get_supervisor_kubeconfig→issue_supervisor_kubeconfigand
get_tkc_kubeconfig→issue_tkc_kubeconfig(they hand out a live credential). The skill catalog
lists them under the new names, still athigh(credential access is gated). - CLI commands are unchanged.
- Saved workflows keep working: a stored workflow, YAML file, draft or undo descriptor whose step names
pilot.plan_workflowor a VKSget_*_kubeconfigtool is translated to the new name when Pilot builds
the step, like the other 2.0 renames. - Deny rules in
~/.vmware/rules.yamlwritten with the old names keep working (vmware-policy matches
both names);vmware-audit policylists any rule that now matches more. - Requires vmware-policy ≥ 1.19.0, which carries these three pairs in
vmware_policy.renames. - Upgrade vmware-vks to 3.0.0 together with this release. Pilot 2.0 calls the kubeconfig tools by
their new names, which vmware-vks 2.x does not register; Pilot does not depend on vmware-vks, so
upgrading Pilot alone leaves those steps pointing at tools that do not exist yet.