Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
165 commits
Select commit Hold shift + click to select a range
a4a5e63
feat(plugin): add plugin evaluation support across all tiers
rng1995 Jul 25, 2026
81dbf56
fix(quality): avoid substring false positives
chrisknvidia Aug 4, 2026
57c970d
fix(quality): close keyword boundary review gaps
chrisknvidia Aug 4, 2026
2f928af
fix(quality): harden contextual edge cases
chrisknvidia Aug 4, 2026
74316a1
fix(quality): ignore negative and hidden references
rng1995 Aug 4, 2026
70c7f6c
fix(quality): handle real skill context
chrisknvidia Aug 4, 2026
ec09c4b
fix(tier3): isolate per-case staged inputs
rng1995 Aug 4, 2026
e9c0617
fix(tier3): harden partial reward preservation
rng1995 Aug 4, 2026
970daf2
fix(cli): stabilize Tier 3 progress rendering
rng1995 Aug 4, 2026
249e56d
fix(tier2): harden public input traversal
rng1995 Aug 4, 2026
15ebdae
fix(tier2): complete no-follow hardening
rng1995 Aug 4, 2026
0463a7e
fix(tier2): stabilize Windows file identity checks
rng1995 Aug 4, 2026
601275a
fix(tier2): align Windows native file operations
rng1995 Aug 4, 2026
898b183
docs: cover ported evaluation behavior
rng1995 Aug 4, 2026
3965061
style: remove trailing blank lines
rng1995 Aug 5, 2026
facf3d7
Merge remote-tracking branch 'origin/main' into naren/plugin-evaluati…
rng1995 Aug 12, 2026
5826791
Merge remote-tracking branch 'origin/main' into naren/plugin-evaluati…
rng1995 Aug 12, 2026
a3fd9bc
fix: preserve alias target case on Windows
rng1995 Aug 12, 2026
ae2c5eb
Merge remote-tracking branch 'origin/main' into naren/plugin-evaluati…
rng1995 Aug 12, 2026
f59870d
fix: share evaluator snapshot across baseline arms
rng1995 Aug 12, 2026
f52a473
Merge remote-tracking branch 'origin/main' into naren/plugin-evaluati…
rng1995 Aug 18, 2026
39e0372
Merge remote-tracking branch 'origin/main' into naren/plugin-evaluati…
rng1995 Aug 18, 2026
f3aefb9
Merge main and address plugin evaluation review
rng1995 Sep 13, 2026
edb2d1d
Merge main into plugin evaluation branch
rng1995 Sep 29, 2026
46258f7
feat(tier3): add report-only lift uncertainty and plugin Integration …
rng1995 Sep 29, 2026
f59f6ce
fix(tier3): catch home-anchored credential reads and protected writes
rng1995 Sep 29, 2026
27324e7
fix(tier3): report judges without a reference as not applicable
rng1995 Sep 29, 2026
e96518b
feat(tier3): add report-only plugin component signals
rng1995 Sep 29, 2026
3d00f79
feat(tier3): attach plugin signals to plugin evaluation results
rng1995 Sep 29, 2026
c56082d
fix(fs): preserve secure reads and structured input boundaries
rng1995 Oct 8, 2026
d428216
feat(plugin): support client manifest formats and schema validation
chrisknvidia Oct 8, 2026
6f2d54f
feat(plugin): inventory components and assess static risk
chrisknvidia Oct 8, 2026
4d66cba
feat(deps): audit plugin dependency ecosystems and resolve endpoints
chrisknvidia Oct 8, 2026
397af85
fix(mcp): validate declarations, endpoints and pinned runners
chrisknvidia Oct 8, 2026
11dadc0
fix(security): scan whole plugin trees and enforce static policies
rng1995 Oct 8, 2026
e0da8d2
fix(tier1): harden skill quality, hygiene and license validation
rng1995 Oct 8, 2026
45cda8a
feat(tier2): compare plugin catalogs and preserve deduplication evidence
rng1995 Oct 8, 2026
74cb85b
fix(embedding): preserve catalog extraction and registry behavior
rng1995 Oct 8, 2026
dde9227
feat(tier3): load native plugins and record component census
chrisknvidia Oct 8, 2026
bca81c6
fix(harbor): preserve isolated staging and execution orchestration
rng1995 Oct 8, 2026
4987ff7
fix(judges): retain written evidence and handle transient inference e…
chrisknvidia Oct 8, 2026
32786ef
fix(tier3): score runtime security and redact sensitive evidence
chrisknvidia Oct 8, 2026
2294dc9
feat(tier3): prove MCP execution and preserve runtime coverage
chrisknvidia Oct 8, 2026
0ebfbed
feat(tier3): grade plugin routing, handoff and component signals
chrisknvidia Oct 8, 2026
e593b7a
feat(evaluation): preserve plugin lifecycle, lift and statistical rep…
rng1995 Oct 8, 2026
eecd887
feat(reports): preserve plugin provenance across report formats
rng1995 Oct 8, 2026
2c8e85f
fix(cli): align workflow gates, progress and finding paths
chrisknvidia Oct 8, 2026
df23180
docs(plugin): document evaluation workflows and report semantics
rng1995 Oct 8, 2026
d9e9b8a
build: preserve plugin dependencies and CI verification
rng1995 Oct 8, 2026
759aaf6
fix(tier3): alias long tool names in the NVIDIA Build bridges
rng1995 Oct 8, 2026
da9ad95
fix(tier3): forward non-text tool results as text in the Build bridges
rng1995 Oct 8, 2026
dc295fb
fix(tier3): credit plugin-file MCP servers in the native claude-code arm
rng1995 Oct 8, 2026
d96c9b8
fix(tier3): skip subagent and command refs an arm does not load
rng1995 Oct 8, 2026
5eee8cf
fix(tier3): read failed OpenCode calls from opencode.txt
rng1995 Oct 8, 2026
10ae54a
fix(tier3): keep built-in agent calls off same-named plugin agents
rng1995 Oct 8, 2026
848e3fd
fix(tier3): stage url mcp servers without a transport as http
rng1995 Oct 8, 2026
cdbbbd2
fix(tier3): disable oauth for opencode native remote mcp servers
rng1995 Oct 8, 2026
7c9bab7
fix(tier3): count plugin-file mcp servers a native claude arm starts
rng1995 Oct 8, 2026
bc48e38
fix(plugin): mark skill-frontmatter hooks unsupported without claude
rng1995 Oct 8, 2026
8e12e43
fix(tier3): mark plugin-dir configs not loaded when claude skips plugin
rng1995 Oct 8, 2026
8368398
docs(plugin): say native claude code stages lsp servers and settings
rng1995 Oct 8, 2026
8b50c7c
fix(reporting): say staged hooks that partly started were not exercised
rng1995 Oct 8, 2026
f286c23
fix(plugin): keep every client's hook risk flags on a shared handler
rng1995 Oct 8, 2026
e2c412c
fix(plugin): list a replaced LSP server once, at the config that runs
rng1995 Oct 8, 2026
3bef1d5
fix(tier3): count pass^k over every case, not the capped cases block
chrisknvidia Oct 8, 2026
d00b8e2
fix(plugin): keep hook script paths with a shell variable unresolved
chrisknvidia Oct 8, 2026
4245066
fix(plugin): do not trust a root variable set inside an if or while b…
chrisknvidia Oct 8, 2026
ffba000
fix(plugin): stop reading a longer variable name as the plugin root
chrisknvidia Oct 8, 2026
92d49c3
fix(plugin): check every tool passed to --allowedTools
chrisknvidia Oct 8, 2026
1e3932c
fix(plugin): follow the Python modules a hook script imports
chrisknvidia Oct 8, 2026
548c000
fix(plugin): fail closed on a hooks config the client cannot load
chrisknvidia Oct 8, 2026
c082ce6
fix(tier3): skip untyped subagent and command refs in the member-skil…
chrisknvidia Oct 8, 2026
b04d94c
fix(tier3): skip handoffs whose side the arm cannot carry
chrisknvidia Oct 8, 2026
53e9b52
fix(reporting): say a signal check was skipped, not unconfigured
chrisknvidia Oct 8, 2026
6db375b
fix(tier3): match an apply_patch ref to Codex's shell apply_patch
chrisknvidia Oct 8, 2026
885641f
fix(tier3): do not count a decoy call as a precise tool choice
chrisknvidia Oct 8, 2026
1b9fca4
fix(tier3): match a nested bundled skill's row to its runtime evidence
chrisknvidia Oct 8, 2026
bf1de7a
fix(plugin): treat an inline command without text content as invalid
chrisknvidia Oct 8, 2026
e2c2c0b
fix(tier3): refuse native staging of two plugin skills with one name
chrisknvidia Oct 8, 2026
36955fe
fix(tier3): preview the plugin task source with the runner's dataset …
chrisknvidia Oct 8, 2026
6c4fd68
fix(reporting): print a passed result's plain warnings next to its fi…
chrisknvidia Oct 8, 2026
b2d7490
fix(reporting): show a skipped check as skipped in the CLI details
chrisknvidia Oct 8, 2026
9b81c57
fix(reporting): count list and dict values in CLI success details
chrisknvidia Oct 8, 2026
8004847
fix(reporting): mark the plugin failed when an incomplete check also …
chrisknvidia Oct 8, 2026
f431836
fix(reporting): keep findings with an absolute path in the By-Plugin …
chrisknvidia Oct 8, 2026
c8b0b67
fix(cli): reject SKILLEVALUATOR_PREVIOUS_VERSION for a catalog of skills
chrisknvidia Oct 8, 2026
7300a3c
fix(cli): show a partial plugin run that scored trials as run, not sk…
chrisknvidia Oct 8, 2026
1944e78
fix(cli): refuse a folder of plugins instead of passing it on generic…
chrisknvidia Oct 8, 2026
268bc2f
style: format the files the fixes touched
chrisknvidia Oct 8, 2026
5af16eb
fix(tier3): do not confirm a Skill Lift regression from under 5 paire…
chrisknvidia Oct 8, 2026
ad83711
fix(tier3): draw enough bootstrap resamples that lift CI bounds hold …
chrisknvidia Oct 8, 2026
abdf7e3
fix(tier3): keep a judge-error trial's first-turn tokens in the conte…
chrisknvidia Oct 8, 2026
cdf9e8d
fix(security): exempt the author email itself, not text that contains it
chrisknvidia Oct 8, 2026
d05e619
fix(security): let a URL excuse only the email-shaped text inside it
chrisknvidia Oct 8, 2026
7bd8aaf
fix(plugin): suggest the frontmatter fix for a bundled skill's name m…
chrisknvidia Oct 8, 2026
f843119
fix(unicode): stop reporting an emoji's presentation selector as invi…
chrisknvidia Oct 8, 2026
c550b9a
fix(version): say metadata.version is missing when only a top-level v…
chrisknvidia Oct 8, 2026
b378ed9
style: format the files the fixes touched
chrisknvidia Oct 8, 2026
fd6d219
fix(tier3): catch curl run through a quoted variable or a command lookup
chrisknvidia Oct 8, 2026
9567d01
fix(tier3): stop scoring a command that only names curl as exfiltration
chrisknvidia Oct 8, 2026
c13d92c
fix(tier3): score chmod 777 as destructive only on the root directory
chrisknvidia Oct 8, 2026
6e7e91b
fix(tier3): read a mktemp directory as /tmp when scoring rm
chrisknvidia Oct 8, 2026
1906d30
fix(tier3): keep echo text piped into grep or a hook script as data
chrisknvidia Oct 8, 2026
8e37147
fix(tier3): treat Harbor's Codex key file as ~/.codex/auth.json
chrisknvidia Oct 8, 2026
7f87789
fix(tier3): skip the skill body Claude Code injects after a Skill launch
chrisknvidia Oct 8, 2026
812ed35
fix(redaction): redact a token glued on after a Slack token's dash
chrisknvidia Oct 8, 2026
6b4c95a
fix(reporting): redact the planted canary token from the report dataset
chrisknvidia Oct 8, 2026
cabbd39
feat(tier3): add opt-in --trial-retries for Harbor setup failures
rng1995 Oct 8, 2026
248202d
fix(tier3): retry only setup-phase network failures
rng1995 Oct 8, 2026
37fabae
feat(tier3): read trial retries from evals config and show them
rng1995 Oct 8, 2026
caa815a
fix(tier3): credit claude code agent calls that name the subagent by …
rng1995 Oct 8, 2026
e8b7aeb
fix(tier3): credit plugin lsp servers from claude code lsp tool calls
rng1995 Oct 8, 2026
625045a
fix(plugin): read ${user_config.KEY} as a reference, not a credential
chrisknvidia Oct 10, 2026
2df51f3
fix(tier3): score a Codex web fetch as WebFetch, not as a WebSearch d…
chrisknvidia Oct 10, 2026
b3d8712
fix(plugin): list subfolders of a component folder instead of calling…
chrisknvidia Oct 10, 2026
1680fc5
fix(plugin): fail closed on frontmatter over the parser limits, keep …
chrisknvidia Oct 10, 2026
ee49411
fix(tier3): flag a curl upload run inside if, a loop or a brace group
chrisknvidia Oct 10, 2026
24c2f47
fix(security): stop copying credentials with no token shape into reports
chrisknvidia Oct 10, 2026
5eb44f1
test(security): match the redacted snippet with a regex, not a URL su…
chrisknvidia Oct 10, 2026
02d1e21
feat(reporting): call the plugin-minus-skills lift Bundle lift and sp…
chrisknvidia Oct 10, 2026
520a8d2
docs(plugin): describe the Bundle lift, its case-type split and known…
chrisknvidia Oct 10, 2026
3ec1d76
refactor(reporting): decide every run status in one module
chrisknvidia Oct 10, 2026
cfb11f0
docs(reports): say every report gives a run the same headline
chrisknvidia Oct 10, 2026
156206c
fix(plugin): Bundle lift verdict labels and one cross-component rule …
chrisknvidia Oct 10, 2026
80273a8
test(tier3): measure drift between the two copies of the checks
chrisknvidia Oct 10, 2026
a6e1c21
fix(tier3): grade error recovery and tool efficiency the same in both…
chrisknvidia Oct 10, 2026
23ad597
docs(design): weigh one source for the container checks
chrisknvidia Oct 10, 2026
8738be9
fix(reporting): close the run-status review findings
chrisknvidia Oct 10, 2026
198d9a9
feat(stats): add the lift ladder block for a loose-parts arm
chrisknvidia Oct 11, 2026
f2ff823
feat(report): build the lift ladder block and its glue verdict
chrisknvidia Oct 11, 2026
a1638a5
feat(reporting): show the lift ladder in HTML, Markdown, CLI and BENC…
chrisknvidia Oct 11, 2026
6a1ba32
docs(plugin): describe the lift ladder, its verdict rules, cost and l…
chrisknvidia Oct 11, 2026
422aca1
fix(stats): no lift ladder interval on a case-type group below 5 pairs
chrisknvidia Oct 11, 2026
ca64f72
feat(tier3): stage the loose-parts arm on native Claude Code
chrisknvidia Oct 11, 2026
600e03c
fix(tier3): credit a plugin part the same in the full and loose arms
chrisknvidia Oct 11, 2026
3a90c2d
docs(plugin): describe the loose-parts arm on native Claude Code
chrisknvidia Oct 11, 2026
8396c3f
fix(tier3): write the loose setup's config-dir default once
chrisknvidia Oct 11, 2026
43c8fe0
Merge branch 'feat/loose-stats' into feat/loose-parts
chrisknvidia Oct 11, 2026
e36a04f
Merge branch 'feat/loose-staging' into feat/loose-parts
chrisknvidia Oct 11, 2026
3086338
fix(stats): drop a case on the loose-parts staging's load-failure rec…
chrisknvidia Oct 11, 2026
f048249
fix(report): read the loose-parts staging's info block in the lift la…
chrisknvidia Oct 11, 2026
ffe8b37
docs(plugin): one loose-parts story for the ladder and the staging
chrisknvidia Oct 11, 2026
b35136b
refactor(tier3): one loose_parts arm key, owned by the statistics
chrisknvidia Oct 11, 2026
7315a6e
fix(report): keep a refused agent's parts and the staging's parity ve…
chrisknvidia Oct 11, 2026
e9d91d7
feat(tier3): run the loose-parts arm with --lift-mode ladder
chrisknvidia Oct 11, 2026
ce1014a
docs(plugin): document the wired --lift-mode ladder
chrisknvidia Oct 11, 2026
ec25520
fix(tier3): grade a plugin command the same in the loose-parts arm
chrisknvidia Oct 11, 2026
91c9d80
fix(tier3): never call equal bytes equal capability when Claude Code …
chrisknvidia Oct 11, 2026
811539b
test(tier3): pin the loose-parts load evidence to Claude Code's real …
chrisknvidia Oct 11, 2026
d39b5cd
Merge branch 'feat/arch-status' into feat/plugin-followups
chrisknvidia Oct 11, 2026
c5f5672
Merge branch 'feat/arch-parity' into feat/plugin-followups
chrisknvidia Oct 11, 2026
13a6653
test(tier3): probe the loose-parts command shape in the checks parity…
chrisknvidia Oct 11, 2026
b52fecd
test(reporting): pin that the lift ladder never changes the run status
chrisknvidia Oct 11, 2026
b4de17d
fix(reporting): show the omitted item count in the HTML preview note
chrisknvidia Oct 11, 2026
78b48e3
fix(tier3): compare both arms on the same cases in every per-metric l…
chrisknvidia Oct 11, 2026
e00a1b2
feat(cli): give tier3 evaluate-plugin validate's report options
chrisknvidia Oct 11, 2026
114964d
feat(tier3): warn when the lift ladder has fewer slots than arms
chrisknvidia Oct 11, 2026
b3f385e
chore: keep where this work started in the PR history
chrisknvidia Oct 12, 2026
f5b4090
chore: keep the August and September start of this work in the PR his…
chrisknvidia Oct 12, 2026
eea7cc7
Merge main into naren/plugin-evaluation-all-tiers
rng1995 Oct 14, 2026
fa2f12c
fix(tier2): read main's rationale key and effort in plugin dedup verd…
rng1995 Oct 14, 2026
422d064
fix(tier3): run Docker Codex through the subagent-aware bootstrap wra…
rng1995 Oct 14, 2026
05b854c
fix(tier3): leave judge-mixed cases out of the paired lift
rng1995 Oct 14, 2026
41c2469
Merge main into naren/plugin-evaluation-all-tiers
rng1995 Oct 14, 2026
6d43a84
test(tier3): cover a structured final answer in the budgeted judge hi…
rng1995 Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
22 changes: 22 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,27 @@ jobs:
- name: Lint
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
run: uv run ruff check .
# The Harbor verifier runs these files with the task image's python3, which
# can be older than the Python SkillEvaluator itself needs. Compiling catches
# syntax; the smoke script also runs code that needs newer runtime features.
- name: Compile Harbor verifier files on Python 3.9 and 3.11
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
shell: bash
run: |
set -euo pipefail
files=(
src/skillevaluator/tier3/harbor/templates/*.py
src/skillevaluator/tier3/eval_core/log_converters.py
src/skillevaluator/tier3/eval_core/codex_tool_call_normalizer.py
src/skillevaluator/evidence.py
)
for version in 3.9 3.11; do
uv run --no-project --python "$version" -- python -I -c \
"import sys; [compile(open(p, encoding='utf-8').read(), p, 'exec') for p in sys.argv[1:]]" \
"${files[@]}"
uv run --no-project --python "$version" --with "idna>=3.10,<4" -- python -I \
scripts/ci/smoke_harbor_verifier.py
done
- name: Run tests with coverage
if: ${{ needs.classify-changes.outputs.docs_only != 'true' }}
run: >-
Expand Down Expand Up @@ -319,6 +340,7 @@ jobs:
tests/test_results_location_legacy_compatibility.py
tests/test_tier3_compare.py
tests/test_tier3_progress.py
tests/utils/test_secure_fs_platform.py
tests/utils/test_secure_fs_selected_reads.py
tests/test_oss_packaging.py

Expand Down
41 changes: 41 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,26 @@ targetRules = ["generic-api-key"]
regexes = ['''^sk-AbCdEf1234567890$''']
paths = ['''^tests/test_tier3_(progress|result_display)\.py$''']

[[allowlists]]
description = "Synthetic API key used by plugin hook inline-secret tests"
condition = "AND"
targetRules = ["generic-api-key"]
regexes = ['''^abcd1234secret$''']
paths = ['''^tests/validators/test_plugin_component_risk\.py$''']

[[allowlists]]
description = "Synthetic Docker registry login (base64 of a fake user:password) used by the scanner-credential tests"
condition = "AND"
targetRules = ["generic-api-key"]
regexes = ['''^dXNlcjpodW50ZXIy$''']
paths = ['''^tests/validators/test_audits_endpoints_review_fixes\.py$''']

[[allowlists]]
description = "Synthetic basic-auth, cloud-key and URL-token fixtures in the first revisions of the security-evidence and MCP-hardening tests; both files now assemble them from split literals"
condition = "AND"
commits = ["66ae1d4c1188e2a8d9f0586abe0a895e04b78758", "727826808a2d4c3c2b7c393d67f5339efde28532"]
paths = ['''^tests/tier3/test_security_finding_evidence\.py$''', '''^tests/validators/test_mcp_hardening\.py$''']

[[allowlists]]
description = "Synthetic NVIDIA Build token used by streaming redaction tests"
condition = "AND"
Expand All @@ -31,6 +51,27 @@ targetRules = ["generic-api-key"]
regexes = ['''^cw-key-123456$''']
paths = ['''^tests/test_harbor_environment_contract\.py$''']

[[allowlists]]
description = "Synthetic JWT in the first revision of the hook-census label-window test; the test now assembles it from its parts"
condition = "AND"
targetRules = ["jwt"]
commits = ["6dab46f91eb7323b27d0e90ecb7c90f5c38e7da4"]
paths = ['''^tests/tier3/test_hook_census\.py$''']

[[allowlists]]
description = "Synthetic deploy token in the first revision of the MCP bundle userinfo test; the test now splits it"
condition = "AND"
targetRules = ["generic-api-key"]
commits = ["79a8fc2eb731bb155bb6b725e3655790eae2fa02"]
paths = ['''^tests/validators/test_plugin_components\.py$''']

[[allowlists]]
description = "Synthetic OpenSSH private-key fixtures in the first revision of the report-text redaction tests; the tests now assemble the PEM label"
condition = "AND"
targetRules = ["private-key"]
commits = ["2c5afed9274221fb8a408eeee0601ad53bad9090"]
paths = ['''^tests/validators/test_url_policy\.py$''']

[[allowlists]]
description = "Bedrock model ID that follows a credential name in SkillSpector bridge tests"
condition = "AND"
Expand Down
516 changes: 507 additions & 9 deletions CHANGELOG.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ skillevaluator validate ./my-skill
`--full` remains supported but is unnecessary.
Use `--tiers 1,2` or `--no-tier3` to skip live evaluation; `--tiers 1` runs
only the static suite. `--no-autopilot` requires an existing evaluation source.
Rules, workflows, and plugins retain their applicable validation stages without
automatically enabling skill evaluation.
Rules, workflows, and plugins skip automatic Tier 3; see
[Plugin Evaluation](https://docs.nvidia.com/skills/skillevaluator/plugin-evaluation) for plugins.

Generate and review broader coverage; templates omit negatives unless authored in `EVAL.md`:

Expand Down
35 changes: 31 additions & 4 deletions THIRD_PARTY_NOTICES.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,39 @@
# Third-Party Notices

This file lists the direct third-party Python dependencies declared by this
distribution. `pyproject.toml` defines the dependency groups, and `uv.lock`
records the exact resolved dependency set used for this release.
This file lists direct third-party Python dependencies and vendored test
fixtures in this distribution. `pyproject.toml` defines the dependency groups,
and `uv.lock` records the exact resolved dependency set used for this release.

| Dependency group | Packages and licenses |
| --- | --- |
| Base | Click (BSD-3-Clause), IDNA (BSD-3-Clause), Jinja2 (BSD-3-Clause), Markdown-It-Py (MIT), Pydantic (MIT), PyYAML (MIT), Rich (MIT) |
| Base | Click (BSD-3-Clause), IDNA (BSD-3-Clause), Jinja2 (BSD-3-Clause), Markdown-It-Py (MIT), Pydantic (MIT), PyYAML (MIT), regex (Apache-2.0 AND CNRI-Python), Rich (MIT) |
| LLM | Anthropic (MIT), Boto3 (Apache-2.0), LiteLLM (MIT), OpenAI (Apache-2.0) |
| Tier 3 | Harbor (Apache-2.0), MCP (MIT), PyJWT (MIT), python-dotenv (BSD-3-Clause) |
| Security | Bandit (Apache-2.0), pip-audit (Apache-2.0) |

## OpenClaw agent-skills test fixture

`tests/fixtures/openclaw-autoreview/` contains pinned files from
`openclaw/agent-skills`, commit `2a409d348a4bcf6f15e41e9a20efd0b298a32528`,
path `skills/autoreview`. The source repository is licensed under the MIT
License:

Copyright (c) 2026 openclaw

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
8 changes: 8 additions & 0 deletions docs/agents-and-sandboxes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ Both bridges support multi-turn tool-call continuation, so agents complete
real tool loops against Build models. The Claude Code bridge drops
orchestration and server tools Build cannot execute — `WebFetch`,
`WebSearch`, `Task`, and similar — before forwarding a request.
Build accepts tool names of at most 64 characters, so a longer one, such as
a plugin MCP tool named `mcp__plugin_<plugin>_<server>__<tool>`, reaches the
model as a stable alias: its first 55 characters and a short hash of the full
name. The bridges translate the model's calls back, so the agent and its
trajectory see the real tool name. Build tool messages carry text only, so a
non-text block in a tool result, such as an image that an MCP tool or a file
read returns, reaches the model as a short placeholder that names the block
type.

### Models on the one-key path

Expand Down
5 changes: 3 additions & 2 deletions docs/benchmark-rollout.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,9 @@ Efficiency=`skill_efficiency`. A format-only rollout must not silently accept a
different dataset or agent/model.

A dimension passes at 50%. The overall verdict passes only when every configured
dimension passes for at least one supported agent; lift is diagnostic evidence
and does not override that gate.
dimension passes for at least one supported agent; lift never overrides that
verdict, but a confirmed regression (a FAIL-band lift whose whole interval is
below zero) makes the card FAIL.

## 5. Run the publication gate

Expand Down
5 changes: 4 additions & 1 deletion docs/ci-integration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,10 @@ When the exit code is not enough — dashboards, custom thresholds, badge genera
| Field | Type | Contents |
| --- | --- | --- |
| `overall_passed` | boolean | `true` when every check passed |
| `overall_status` | string | `passed`, `failed`, or `incomplete` (a required scanner produced no evidence) |
| `overall_status` | string | `passed`, `failed`, or `incomplete`. A check that failed outranks missing evidence: `incomplete` means a required scanner produced no evidence and nothing failed. Every report gives the same headline |
| `incomplete_scans` | array | Scanners that produced no trustworthy evidence, listed even when `overall_status` is `failed` |
| `tier_status` | object | Status of each tier that ran, keyed `"1"`, `"2"`, `"3"`: `passed`, `neutral` (Tier 3), `failed`, `incomplete`, or `skipped` |
| `status_reasons` | array | Why the headline is what it is: what failed, what did not complete, and which advisory tier did not pass |
| `severity_counts` | object | Totals for `critical`, `high`, `medium`, `low` |
| `total_errors`, `total_warnings` | number | Aggregate counts across all validators |
| `skills` | array | Per-skill `{ name, passed, issue_count }` |
Expand Down
Loading
Loading