Skip to content

test: check that skills name real MCP operations, CLI commands and files - #8

Merged
xavidop merged 1 commit into
voiceflow:mainfrom
z4o4z:evgeny/skill-reference-checks
Oct 29, 2026
Merged

xavidop merged 1 commit into
voiceflow:mainfrom
z4o4z:evgeny/skill-reference-checks

Conversation

@z4o4z

@z4o4z z4o4z commented Oct 28, 2026

Copy link
Copy Markdown
Member

Problem and resulting behavior

Skills can name an MCP operation, a vf command, another skill or a link anchor that does not exist. Nothing caught that before, so an agent following the skill would call a tool that is not there.

python3 scripts/validate.py now fails, with one file:line: reason per problem, when a skill:

  • names an MCP tool or operation that the hosted MCP does not have;
  • names an operation the MCP always refuses, such as setting a secret value, instead of the CLI command;
  • names a vf command path that the pinned CLI does not have;
  • links a file or #anchor that does not exist, or names a skill folder that does not exist;
  • uses an in-app tool name from the existing denylist, which now also matches names like vf_agent_get.

The list of real operations and commands is a committed snapshot, tests/fixtures/voiceflow-surface.json. scripts/refresh_surface.py rebuilds it from the public voiceflow/cli release spec: the MCP side from the latest release, the CLI side from the pinned version. A refresh with no upstream change is a no-op.

scripts/verify_cli.py also runs --help for every CLI command the skills name, and checks each flag against the pinned binary.

Verification

  • python3 scripts/validate.py, python3 -m unittest discover -s tests -v (97 tests, 1 skipped) and python3 scripts/build.py pass on this branch.
  • verify_cli.py passed against the checksum-verified pinned vf 0.287.0. It used help output and the localhost fixture only, with no account calls.
  • The current skills had no violations, so no skill text changed.
  • New tests cover each check, including correct values that must pass (voiceflow-telnyx) and typos that must fail (voiceflow-buidl).
  • Not run: scan_secrets.py locally (Gitleaks not installed here; CI runs it). The suite ran on Python 3.14 locally; CI covers 3.12 on three systems.

Compatibility and release notes

Contributor tooling only. No customer-visible change, so no CHANGELOG entry. CONTRIBUTING.md explains how to refresh the snapshot.

🤖 Generated with Claude Code

Skills can now only name MCP operations, CLI commands, skills, anchors and
reference files that exist. A committed snapshot of the public MCP and CLI
surface, built from the voiceflow/cli release spec, is the source of truth.
verify_cli.py also runs help for every CLI command the skills name and checks
their flags against the pinned binary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

xavidop commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Merge activity

  • Oct 29, 12:16 PM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Oct 29, 12:17 PM UTC: Graphite couldn't merge this PR because it failed for an unknown reason (Fast-forward merges are not supported for forked repositories. Please create a branch in the target repository in order to merge).

@xavidop
xavidop merged commit a7d338d into voiceflow:main Oct 29, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants