代理程序技能的 CLI/框架 - 创建、测试、衡量和提高技能的质量和有效性
A Go CLI for evaluating AI agent skills — scaffold eval suites, run benchmarks, and compare results across models.
Download and install the latest pre-built binary with the Bash install script on macOS, Linux, or Windows Bash environments such as Git Bash, MSYS2, or Cygwin:
curl -fsSL https://raw.githubusercontent.com/microsoft/waza/main/install.sh | bashThe Bash script auto-detects the OS and architecture of the environment where Bash is running (linux/darwin/windows, amd64/arm64), downloads the latest standalone waza CLI release, verifies the checksum, and installs to /usr/local/bin (or ~/bin if not writable).
For native Windows PowerShell:
irm https://raw.githubusercontent.com/microsoft/waza/main/install.ps1 | iexThe PowerShell script downloads the latest standalone native Windows waza binary, verifies the checksum, and installs to an existing waza.exe location or %LOCALAPPDATA%\Microsoft\Waza. On Windows, piping the Bash command from PowerShell may invoke WSL and install the Linux binary inside WSL.
Or browse the GitHub Releases page and choose the standalone waza binary assets for the version you want.
Requires Go 1.26+:
Note: due to the use of LFS artifacts you cannot install waza using go install. To install waza outside of a normal release, clone the repository:
git clone https://github.com/microsoft/waza.git
cd waza
# ensure git LFS-based artifacts are available (for embedded copilot binaries)
git lfs install
git lfs pull
go build -o waza ./cmd/waza
./waza Waza bundles the GitHub Copilot CLI used by the copilot-sdk executor and extracts it to the local user cache on first use. Set COPILOT_CLI_PATH only when you need to force a specific Copilot CLI binary.
Waza is also available as an azd extension:
# Add the waza extension registry
azd ext source add -n waza -t url -l https://raw.githubusercontent.com/microsoft/waza/main/registry.json
# Install the extension
azd ext install microsoft.azd.waza
# Verify it's working
azd waza --helpOnce installed, all waza commands are available under azd waza. For example:
azd waza init my-eval --interactive
azd waza run examples/code-explainer/eval.yaml -vWaza automatically checks for new versions in the background. If an update is available, a notice appears after command output:
A newer version of waza is available: v0.24.0 → v0.28.0. Run: waza updateRun waza update to download and execute the official OS-specific installer after an explicit confirmation prompt. It uses the Bash installer on macOS/Linux and the PowerShell installer on native Windows. Use waza update --yes to skip the prompt in scripted environments. The check is non-blocking (never slows commands), cached for 24 hours, and can be disabled with --no-update-check or WAZA_NO_UPDATE_CHECK=1.
See Getting Started Guide for a complete walkthrough:
# Initialize a new project
waza init my-project && cd my-project
# Create a new skill
waza new skill my-skill
# Define the skill in skills/my-skill/SKILL.md
# Write evaluation tasks in evals/my-skill/tasks/
# Add test fixtures in evals/my-skill/fixtures/
# Run evaluations
waza run my-skill
# Check skill readiness
waza check my-skill…waza updateUpdate waza to the latest release by running the official OS-specific installer after confirmation.
| Flag | Description |
|---|---|
--yes, -y |
Skip the confirmation prompt |
Example:
waza update
waza update --yeswaza init [directory]Initialize a waza project workspace with separated skills/ and evals/ directories. Idempotent — creates only missing files.
| Flag | Description |
|---|---|
--no-skill |
Skip the first-skill creation prompt |
Creates:
skills/ — Skill definitions directoryevals/ — Evaluation suites directory.github/workflows/eval.yml — CI/CD pipeline for running evals on PR.gitignore — Waza-specific exclusionsREADME.md — Getting started guide for your projectExample:
waza init my-project
# Optionally creates first skill interactively
waza init my-project --no-skill
# Skip skill creation promptwaza new skill Create a new skill with scaffolded structure and evaluation suite. Detects workspace context and adapts output. In interactive mode, the wizard collects spec-aligned metadata: name, description, trigger phrases, and anti-trigger phrases.
| Flag | Short | Description |
|---|---|---|
--template |
-t |
Template pack (coming soon) |
Modes:
Project mode (detects skills/ directory):
project/
├── skills/{skill-name}/SKILL.md
└── evals/{skill-name}/
├── eval.yaml # or files.evalFile
├── tasks/*.yaml # or files.taskGlob / files.taskFileSuffix
└── fixtures/APM-managed skills are detected from their compiled output without symlinks:
project/
├── skills/{skill-name}/apm.yml
├── skills/{skill-name}/.apm/skills/{skill-name}/SKILL.md
└── skills/{skill-name}/eval.yamlWhen both skills/{skill-name}/SKILL.md and the APM compiled
.apm/skills/{skill-name}/SKILL.md exist for the same skill, the top-level
SKILL.md takes precedence.
Standalone mode (no skills/ detected):
{skill-name}/
├── SKILL.md
├── evals/
│ ├── eval.yaml # or files.evalFile
│ ├── tasks/*.yaml # or files.taskGlob / files.taskFileSuffix
│ └── fixtures/
├── .github/workflows/eval.yml
├── .gitignore
└── README.mdExample:
# In project mode (explained Modes section, above): creates skills/code-explainer/SKILL.md + evals/code-explainer/
waza new skill code-explainer
# In standalone mode (explained Modes section, above): creates code-explainer/ self-contained directory
waza new skill code-explainerwaza new eval Scaffold an eval suite from an existing SKILL.md (reads frontmatter trigger hints from USE FOR and DO NOT USE FOR).
Creates:
evals//evals//tasks/positive-trigger-1evals//tasks/positive-trigger-2evals//tasks/negative-trigger-1| Flag | Description |
|---|---|
--output |
Custom path for the eval file (tasks are generated under sibling tasks/) |
Generated eval and task filenames are configurable in .waza.yaml:
files:
evalFile: waza-eval.yaml
taskGlob: tasks/*.waza-task.yaml
taskFileSuffix: .waza-task.yamlExample:
# Default output location
waza new eval code-explainer
# Custom eval path
waza new eval code-explainer --output evals/custom-code-explainer/eval.yamlwaza new task from-prompt Run a prompt through Copilot and generate a task YAML with inferred validators based on observed behavior (response text, tool usage, and invoked skills).
| Flag | Description |
|---|---|
--model |
Copilot model to run for recording (default: claude-sonnet-4.5) |
--testname |
Test name and ID written into the generated task (default: auto-generated-test) |
--tags |
Comma-separated tags to attach to the generated task |
--timeout |
Max time for prompt execution (default: 5m) |
--overwrite |
Overwrite the output task file if it already exists |
--root |
Root directory used for skill discovery (default: .) |
Example:
# Record a prompt and generate a reusable task YAML
waza new task from-prompt "Refactor this function for readability" evals/code-explainer/tasks/refactor-readability.yaml
# Add metadata and overwrite an existing file
waza new task from-prompt "Explain this diff and risks" evals/code-explainer/tasks/diff-analysis.yaml \
--testname diff-analysis \
--tags recorded,regression \
--overwritewaza run Run an evaluation benchmark from a spec file.
| Flag | Short | Description |
|---|---|---|
--context-dir |
Fixture directory (default: ./fixtures relative to spec) |
|
--output |
-o |
Save results to JSON |
--output-dir |
Directory for structured output; each run creates a UTC-timestamped subdirectory of ``. Mutually exclusive with --output. |
|
--verbose |
-v |
Detailed progress output |
--transcript-dir |
Save per-task transcript JSON files | |
--task |
Filter tasks by name/ID pattern (repeatable) | |
--parallel |
Run tasks concurrently | |
--workers |
Concurrent workers (default: auto, requires --parallel) |
|
--trials |
Run each task n times to detect flakiness (omit to use config.trials_per_task; if provided, n must be >= 1) |
|
--interpret |
Print plain-language result interpretation | |
--format |
Output format: default or github-comment (default: default) |
|
--cache |
Enable result caching to speed up repeated runs | |
--no-cache |
Explicitly disable result caching | |
--cache-dir |
Cache directory (default: .waza-cache) |
|
--reporter |
Output reporters: json (default), junit: (repeatable) |
|
--baseline |
A/B testing mode — runs each task twice (without skill = baseline, with skill = normal) and computes improvement scores | |
--discover |
Auto skill discovery — walks directory tree for SKILL.md + eval.yaml (root/tests/evals) | |
--strict |
Fail if any SKILL.md lacks eval coverage (use with --discover) |
|
--suggest |
Generate a Copilot suggestion report based on test outcomes (mock engine emits a deterministic fake report) |
|
--output-dir |
Directory for structured output; each run creates a UTC timestamped subdirectory. Mutually exclusive with --output. |
|
--tags |
Filter tasks by tags, using glob patterns (repeatable) | |
--model |
Override model (repeatable for multi-model comparison) | |
--recommend |
Generate heuristic recommendation after multi-model run | |
--judge-model |
Model for LLM-as-judge graders (overrides execution model) | |
--session-log |
Enable session event logging (NDJSON) | |
--session-dir |
Directory for session log files (default: current directory) | |
--no-summary |
Skip writing combined summary.json for multi-skill runs | |
--update-snapshots |
Update or create diff grader snapshot files to match current output | |
--skip-graders |
Skip grading (execution only); grade later with waza grade |
|
--keep-workspace |
Preserve temp workspaces after execution for debugging | |
--auto-file-issue |
Auto-file or update a GitHub issue for failing runs (requires gh and GITHUB_REPOSITORY) |
|
--otel-exporter |
Export OpenTelemetry traces using otlp, stdout, or file. Off by default. See OpenTelemetry Tracing. |
|
--otel-endpoint |
OTLP endpoint (host:port or URL); only used with --otel-exporter=otlp |
|
--otel-headers |
Comma-separated key=value OTLP headers (e.g. for auth) |
|
--otel-file |
File path for span JSON when --otel-exporter=file |
|
--otel-include-payloads |
Include prompt/tool-arg/tool-result/completion content in spans (default: redacted to sha256+length) |
|
--snapshot |
Capture self-contained snapshot.json per task for later waza replay. |
|
--snapshot-env-allow |
Allow-list of env var name patterns embedded in snapshots (default-deny; supports WAZA_* wildcards). |
|
--redact |
YAML redaction policy applied to snapshot output (merged with built-in defaults). |
**Result
暂无开放 Issues,或尚未同步最近议题。