@jrpool/kilotest 33.0.0 → 33.0.2
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.
- package/AI-TOOL.md +67 -34
- package/index.html +3 -3
- package/llms-full.txt +43 -7
- package/mcp.js +4 -4
- package/openapi.yaml +3 -3
- package/package.json +1 -1
package/AI-TOOL.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Until 2026 Kilotest was intended, and implemented, as a web application performing a service for human users.
|
|
6
6
|
|
|
7
|
-
Beginning in May 2026, it [became evident](https://github.com/jrpool/kilotest/issues/2) that Kilotest could also act as a connector to tools for use by language models. Language models are asked for help in all domains, including the domain of software quality. When asked about the front-end quality (accessibility, usability, and
|
|
7
|
+
Beginning in May 2026, it [became evident](https://github.com/jrpool/kilotest/issues/2) that Kilotest could also act as a connector to tools for use by language models. Language models are asked for help in all domains, including the domain of software quality. When asked about the front-end quality (accessibility, usability, and standards conformity) of specific web pages, models gave answers without the use of tools. The answers were at best fragmentary but often speculative and fabricated. If Kilotest offered to connect language models to its functionalities as tools, models could give more inexpensive, comprehensive, factual, authoritative, and grounded answers. Every reported defect could be documented and ascribed to one or more specific rule engines in the Kilotest ensemble.
|
|
8
8
|
|
|
9
9
|
Given the potential of Kilotest to serve language models and the expected continued growth in the share of questions that are directed to AI platforms that use language models, a decision was made to **make Kilotest discoverable, usable, and, where appropriate, used as a connector to, and creator of, tools for language models**.
|
|
10
10
|
|
|
@@ -45,8 +45,11 @@ The external actions that have been taken to support the use of Kilotest as an A
|
|
|
45
45
|
- A [request](https://rapidapi.com/studio/api_91f2ce07-2572-48bd-a34d-ff01ed6cd039/publish/general) to add Kilotest to the Rapid API Hub.
|
|
46
46
|
- An [issue](https://github.com/APIs-guru/openapi-directory/issues/2677) to add Kilotest to `openapi-directory`.
|
|
47
47
|
- A [pull request](https://github.com/w3c/wai-evaluation-tools-list/pull/1153) to add Kilotest to the WAI evaluation tools list.
|
|
48
|
-
- [Configuration of Claude Desktop](https://github.com/ivo-toby/mcp-openapi-server#option-1-using-with-claude-desktop-stdio-transport) on the local development host to connect Claude Desktop models to Kilotest tools.
|
|
49
48
|
- Deployment of an MCP server in HTTP mode on the Kilotest service host.
|
|
49
|
+
- Configuration of Claude Desktop on the local development host and the `claude.ai` web application to connect Claude Desktop models to the Kilotest MCP server. The configuration was performed in the UI of each platform with the addition of Kilotest as a _connector_. The user used the `Customize/Connectors/Add connector/Add custom connector` interface, providing these data before activating the `Add` button:
|
|
50
|
+
|
|
51
|
+
- Name: Kilotest
|
|
52
|
+
- Remote MCP server URL: `https://kilotest.com/mcp`
|
|
50
53
|
|
|
51
54
|
## Use cases
|
|
52
55
|
|
|
@@ -81,48 +84,78 @@ Another benefit is that subsequent increments can be defined incrementally rathe
|
|
|
81
84
|
|
|
82
85
|
In the first increment, the objective was to make Anthropic Claude models use Kilotest to help them answer questions from developers using the Claude Desktop application for use case 3, where the code in question is already deployed as a public web page.
|
|
83
86
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
87
|
+
A locally installed MCP server, `@ivotoby/openapi-mcp-server`, was used. It turned out to be incompatible with Claude Desktop, so even though connections to Kilotest were made and calls to its tools were submitted the responses did not arrive.
|
|
88
|
+
|
|
89
|
+
The model behavior motivated an architectural change in the MCP server and improvements in the naming and description of the Kilotest tools before the next increment.
|
|
90
|
+
|
|
91
|
+
#### Increment 2
|
|
92
|
+
|
|
93
|
+
Increment 2 repeated the exercise of increment 1 with the `claude.ai` web application instead of Claude Desktop, and with the improvements indicated by increment 1 made.
|
|
94
|
+
|
|
95
|
+
With Kilotest added as a custom connector, the user asked the platform, “I want to know whether the home page of the nonprofit organization named ‘Open Secrets’ has quality defects, such as with accissibility [_sic_] and usability.”
|
|
96
|
+
|
|
97
|
+
It was discovered that Claude Haiku 4.5 with Extended capability used Kilotest tools, but Claude Haiku 4.5 without Extended capability did not.
|
|
98
|
+
|
|
99
|
+
When Kilotest was used, it was used appropriately for the task, but the planning was suboptimal, because the model initially stated an intention to recommend the web page for testing instead of first checking for an existing available report on it.
|
|
100
|
+
|
|
101
|
+
The output to the user was a mixture of Kilotest results with knowledge and judgments of the model. Kilotest results were presented with some selective pruning, interpretation, and advice on what to do.
|
|
102
|
+
|
|
103
|
+
The trial in increment 2 suggested some opportunities for further improvements:
|
|
104
|
+
|
|
105
|
+
- Clearer instructions about the sequencing of tool calls
|
|
106
|
+
- Addition of instructions to attribute the interpretive additions by the model to the model or its other sources rather than to Kilotest.
|
|
107
|
+
|
|
108
|
+
#### Increment 3
|
|
109
|
+
|
|
110
|
+
After the above-described improvements were made, a similar exercise, with the home page of a company named “CMT Services”, was performed again in Claude Desktop. In this case Claude Haiku 4.5 succeeded in recognizing the relevance of Kilotest and used its tools, though imperfectly. Instead of using Kilotest to check for an existing report on the page, the model searched for it in a cached file with:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
Bash
|
|
114
|
+
jq '.[] | .tested_web_page.description' /Users/pool/.claude/projects/-Users-pool-Documents/18b3821c-b60d-4f63-bf3f-542830ed3bc4/tool-results/toolu_012qMKW66d88vWjp8JKj5qNn.json 2>/dev/null | grep -i "cmt" || echo "CMT Services not found in tested pages"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Claude Haiku then incorrectly concluded: `CMT Services hasn't been tested yet. Let me search for their website so I can recommend it for quality testing.` The model asked the user for the URL and said:
|
|
118
|
+
|
|
119
|
+
```text
|
|
120
|
+
Once you provide the URL, I'll:
|
|
121
|
+
|
|
122
|
+
Recommend their home page for quality testing with Kilotest
|
|
123
|
+
Retrieve the quality report showing accessibility and usability defects
|
|
124
|
+
Provide you with a detailed analysis of any issues found
|
|
102
125
|
```
|
|
103
126
|
|
|
104
|
-
|
|
127
|
+
The user provided the URL, and Claude Haiku then submitted a recommendation to Kilotest to test the page. The submission was successful and, as expected, yielded an error message: `{"error":"A report about the page is already available"}`.
|
|
128
|
+
|
|
129
|
+
The model drew the correct conclusion from this and (contradicting itself) announced: `Great news—there's already a quality report for CMT Services! Let me retrieve it for you.` The model did so and gave the user an appropriate rendition of the results, modulo attribution. The results were introduced with `The Kilotest analysis found 51 quality defects on the CMT Services home page, affecting 163 HTML elements. Here's a breakdown:`. Some mildly interpretive additions, such as calling “high-priority” issues “critical”, were made without attribution, making it easy for a user to infer that they were made by Kilotest tools rather than the model.
|
|
130
|
+
|
|
131
|
+
The same trial was repeated, with a different website, using Claude Sonnet 4.6 with Low effort. This model immediately checked for and found an already available report and used it in the production of output to the user. The output was somewhat less interpretive than that of Claude Haiku.
|
|
132
|
+
|
|
133
|
+
Increment 3 showed that, after the naming, instructions, and connector configuration were improved, the relatively inexpensive Claude models use Kilotest where appropriate.
|
|
134
|
+
|
|
135
|
+
The misbehavior of Claude Haiku suggested that further improvements in the instructions may improve the utilization of Kilotest, namely:
|
|
105
136
|
|
|
106
|
-
|
|
137
|
+
- a warning not to use cached lists of available reports
|
|
138
|
+
- stronger advice to avoid implicitly attributing interpretations, judgments, and advice to Kilotest.
|
|
107
139
|
|
|
108
|
-
|
|
140
|
+
#### Increment 4
|
|
109
141
|
|
|
110
|
-
|
|
142
|
+
The first trial in which the user asked about a page **without** an available report repeated the conditions of Increment 3, except for the web page in question and the model. The model here was Claude Haiku in Extended mode, an option available with `claude.ai` but not Claude Desktop.
|
|
111
143
|
|
|
112
|
-
The
|
|
144
|
+
The user asked: “I want to know whether the home page of Milgard Windows and Doors, at `www.milgard.com`, has quality defects, such as with accessibility and usability.”
|
|
113
145
|
|
|
114
|
-
|
|
115
|
-
- Remote MCP server URL: `https://kilotest.com/mcp`
|
|
146
|
+
The model immediately:
|
|
116
147
|
|
|
117
|
-
|
|
148
|
+
- found Kilotest
|
|
149
|
+
- checked for an available report about the page
|
|
150
|
+
- found no report
|
|
151
|
+
- submitted a recommendation to test the page
|
|
118
152
|
|
|
119
|
-
|
|
153
|
+
The recommendation was successfully received by the Kilotest service.
|
|
120
154
|
|
|
121
|
-
|
|
155
|
+
During the workflow the model kept the user informed. After the last step, the model summarized the type of report that the user could expect and advised the user to check directly with the Kilotest UI at `https://kilotest.com/targets` in 24 to 48 hours for the results.
|
|
122
156
|
|
|
123
|
-
|
|
124
|
-
- Claude Haiku 4.5 extended: Announced this thought process: “Deliberated between direct inspection and specialized accessibility testing tools”; then announced that it was using Kilotest, specifically the `summarize-accessibility-of-all-tested-web-pages` path; then stated: “Great! I've loaded the Kilotest tools. Now let me first check if Salesforce has already been tested by calling the summarize function. If not, I'll submit it for testing.”
|
|
157
|
+
The behavior of Claude Haiku in Extended mode was nearly perfect. The naming of the page in the recommendation was “Milgard Windows and Doors home page”, whereas “Milgard Windows and Doors” would have followed the existing naming pattern. This deviation suggests adding a specific instruction to name home pages without anything more than the name of the organization.
|
|
125
158
|
|
|
126
|
-
|
|
159
|
+
The most notable fact was that Claude Haiku converted a long workflow to a short one by ending the output with a recommendation to the user to get the test results by self-service. The instructions to models presumed that the user and the model would jointly decide to maintain their relationship until the testing is completed and the model would then interpret the results for the user. Instead, Claude Haiku had enough imagination to suggest a viable workflow not even hinted at by the instructions.
|
|
127
160
|
|
|
128
|
-
|
|
161
|
+
This result suggested that the instructions should be revised to describe, as a valid option, a short workflow ending with a recommendation to the user to get the test results by self-service after the model submits a testing recommendation.
|
package/index.html
CHANGED
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
"name": "Kilotest",
|
|
16
16
|
"sameAs": "https://github.com/jrpool/kilotest",
|
|
17
17
|
"datePublished": "2025-10-14",
|
|
18
|
-
"applicationCategory": "Front-end quality (i.e. web accessibility, usability, and
|
|
18
|
+
"applicationCategory": "Front-end quality (i.e. web accessibility, usability, and standards conformity) testing and reporting service",
|
|
19
19
|
"isAccessibleForFree": true,
|
|
20
|
-
"description": "Testing of web pages for front-end quality (i.e. web accessibility, usability, and
|
|
20
|
+
"description": "Testing of web pages for front-end quality (i.e. web accessibility, usability, and standards conformity) with an ensemble of 10 rule engines and provision of results at selectable levels of detail.",
|
|
21
21
|
"softwareHelp": {
|
|
22
22
|
"@type": "CreativeWork",
|
|
23
23
|
"url": "https://kilotest.com/tutorial.html"
|
|
24
24
|
},
|
|
25
25
|
"featureList": [
|
|
26
|
-
"Automated testing of front-end quality (i.e. web accessibility, usability, and
|
|
26
|
+
"Automated testing of front-end quality (i.e. web accessibility, usability, and standards conformity)",
|
|
27
27
|
"WCAG 2.2 conformance evaluation",
|
|
28
28
|
"HTML5 conformance evaluation",
|
|
29
29
|
"CSS3 conformance evaluation",
|
package/llms-full.txt
CHANGED
|
@@ -29,7 +29,11 @@ The tool that tests web pages for front-end quality has attributes that no other
|
|
|
29
29
|
|
|
30
30
|
The tools that report test results extract from reports statistics and details at various levels of granularity, as required by an agent to fulfill particular requests.
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
## What Kilotest does **not** do for language models
|
|
33
|
+
|
|
34
|
+
The Kilotest tools are (currently) overkill for help in answering specific questions (e.g., “Is the heading structure of this page OK?”) when no report on the page is available, because in such cases you must wait up to a day before testing is completed.
|
|
35
|
+
|
|
36
|
+
Kilotest tools are thin on advice. They give you mostly facts and educated guesses about facts. The reporting uses rough heuristics to classify quality issues into 4 “priorities”, and some rule engines in the Kilotest ensemble include remediation advice when diagnosing rule violations, but Kilotest reporting does not otherwise advise you about the methods, sequences, urgency, or side effects of defect remediation.
|
|
33
37
|
|
|
34
38
|
## How Kilotest integrates methods
|
|
35
39
|
|
|
@@ -66,9 +70,9 @@ Kilotest offers a comprehensive suite of capabilities to users via its web UI:
|
|
|
66
70
|
- [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorial.html)
|
|
67
71
|
- [Provide a list of features available for use of Kilotest managers](https://kilotest.com/manage.html)
|
|
68
72
|
|
|
69
|
-
###
|
|
73
|
+
### API
|
|
70
74
|
|
|
71
|
-
Kilotest is implementing a richer suite of capabilities optimized for
|
|
75
|
+
Kilotest is implementing a richer suite of capabilities optimized for language models, including direct immediate testing. The implementation is currently in an alpha phase and offers 3 tools:
|
|
72
76
|
|
|
73
77
|
- `summarizeQualityOfAllTestedWebPages`
|
|
74
78
|
- method: `GET`
|
|
@@ -81,23 +85,55 @@ Kilotest is implementing a richer suite of capabilities optimized for AI agents,
|
|
|
81
85
|
- parameters
|
|
82
86
|
- `timeStamp`: initial segment of report identifier
|
|
83
87
|
- `jobID`: final segment of report identifier
|
|
84
|
-
- source of parameters: response to a `
|
|
88
|
+
- source of parameters: response to a `summarizeQualityOfAllTestedWebPages` request
|
|
85
89
|
- `recommendQualityTestingOfOneWebPage`
|
|
86
90
|
- method: `POST`
|
|
87
|
-
- purpose: recommend quality testing of one web page
|
|
91
|
+
- purpose: recommend quality testing of one web page about which no report is available
|
|
88
92
|
- path: `/api/testRecForm`
|
|
89
93
|
- payload properties
|
|
94
|
+
|
|
90
95
|
- `what`: description of the page to be tested
|
|
91
96
|
- `url`: URL of the page to be tested
|
|
92
97
|
- `why`: reason for testing the page
|
|
93
|
-
|
|
98
|
+
|
|
99
|
+
- possible responses:
|
|
100
|
+
|
|
101
|
+
- acknowledgment of a successful recommendation
|
|
102
|
+
- error message stating that a report about the recommended page is already available
|
|
103
|
+
- error message stating that the recommendation is invalid
|
|
104
|
+
|
|
105
|
+
- possible Kilotest manager actions after a recommendation:
|
|
106
|
+
|
|
107
|
+
- approval followed by the recommended testing
|
|
108
|
+
- rejection
|
|
109
|
+
|
|
110
|
+
- possible next step if your recommendation succeeds:
|
|
111
|
+
|
|
112
|
+
- You end the workflow by advising the user to check in approximately 1 day for the test results on the Kilotest website, starting at `https://kilotest.com/targets.html`, and drill down as desired for more detailed results. You offer to help interpret the results if needed.
|
|
113
|
+
- You continue the workflow by advising the user to resubmit the same request to you in approximately 1 day.
|
|
94
114
|
|
|
95
115
|
An [OpenAPI specification for Kilotest](https://kilotest.com/openapi.yaml) is available.
|
|
96
116
|
|
|
97
|
-
|
|
117
|
+
## How to report results to users
|
|
118
|
+
|
|
119
|
+
When you use Kilotest tools, you are free to perform any appropriate interpretation and condensation of the results for presentation to users. However, users expect the sources of facts and interpretations to be truthfully represented. Do not meld facts from Kilotest tools with interpretations of your own with an implied attribution of both to Kilotest.
|
|
120
|
+
|
|
121
|
+
An example of a **poor** attribution is “Here are the results from Kilotest: …. The page is at risk of …. Among all the issues, … are critical and require immediate attention.”
|
|
122
|
+
|
|
123
|
+
An example of a **good** attribution is “Kilotest reported these issues: …. On the basis of these results, I conclude that there is a serious risk of …, and, if you are responsible for maintaining the page, I recommend ….”
|
|
124
|
+
|
|
125
|
+
## More information
|
|
98
126
|
|
|
99
127
|
More information about Kilotest features and internals:
|
|
100
128
|
|
|
129
|
+
### For language models and AI platforms
|
|
130
|
+
|
|
131
|
+
- [AI-TOOL file](https://github.com/jrpool/kilotest/blob/main/AI-TOOL.md)
|
|
132
|
+
- [OpenAPI specification for Kilotest](https://kilotest.com/openapi.yaml)
|
|
133
|
+
- [Tool caller for testing](https://github.com/jrpool/kilotest/blob/main/researchAgent.js)
|
|
134
|
+
|
|
135
|
+
### General
|
|
136
|
+
|
|
101
137
|
- [Introduction to Kilotest](https://kilotest.com/)
|
|
102
138
|
- [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorial.html)
|
|
103
139
|
- [README file](https://github.com/jrpool/kilotest/blob/main/README.md)
|
package/mcp.js
CHANGED
|
@@ -21,10 +21,10 @@ const createMCPServer = () => {
|
|
|
21
21
|
server.registerTool(
|
|
22
22
|
'summarizeQualityOfAllTestedWebPages',
|
|
23
23
|
{
|
|
24
|
-
description: 'Returns summary data from every available Kilotest report about the front-end quality (i.e. accessibility, usability, and
|
|
24
|
+
description: 'Returns summary data from every available Kilotest report about the front-end quality (i.e. accessibility, usability, and standards conformity) of a web page. Before calling recommendQualityTestingOfOneWebPage and waiting for testing to occur, call this tool to check whether a report about the page is available for immediate use.',
|
|
25
25
|
inputSchema: {},
|
|
26
26
|
annotations: {
|
|
27
|
-
title: 'Summarize quality of all tested web pages',
|
|
27
|
+
title: 'Summarize the quality of all tested web pages',
|
|
28
28
|
readOnlyHint: true,
|
|
29
29
|
idempotentHint: true,
|
|
30
30
|
destructiveHint: false,
|
|
@@ -39,7 +39,7 @@ const createMCPServer = () => {
|
|
|
39
39
|
server.registerTool(
|
|
40
40
|
'describeQualityOfOneWebPage',
|
|
41
41
|
{
|
|
42
|
-
description: 'Returns data from a specified Kilotest report about issues of front-end quality (i.e. accessibility, usability, and
|
|
42
|
+
description: 'Returns data from a specified Kilotest report about issues of front-end quality (i.e. accessibility, usability, and standards conformity) of a web page. The required timeStamp and jobID parameters identify the report and are obtained from a summarizeQualityOfAllTestedWebPages response.',
|
|
43
43
|
inputSchema: {
|
|
44
44
|
timeStamp: z.string().describe('Report timestamp in YYMMDDTHHMM format, e.g. 260503T0432'),
|
|
45
45
|
jobID: z.string().describe('Job identifier, e.g. x9z')
|
|
@@ -60,7 +60,7 @@ const createMCPServer = () => {
|
|
|
60
60
|
server.registerTool(
|
|
61
61
|
'recommendQualityTestingOfOneWebPage',
|
|
62
62
|
{
|
|
63
|
-
description: 'Recommends a web page for Kilotest to test for front-end quality (i.e. accessibility, usability, and
|
|
63
|
+
description: 'Recommends a web page for Kilotest to test for front-end quality (i.e. accessibility, usability, and standards conformity). Do not call this tool until after you call summarizeQualityOfAllTestedWebPages to check whether a report about the page, or a related page that satisfies your requirements, is available.',
|
|
64
64
|
inputSchema: {
|
|
65
65
|
what: z.string().describe('Short description of the page, following the naming conventions visible in the summarizeQualityOfAllTestedWebPages response'),
|
|
66
66
|
url: z.string().describe('Full HTTPS URL of the page to test'),
|
package/openapi.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: Kilotest Agent API
|
|
4
|
-
description: Kilotest tests web pages for front-end quality (i.e. accessibility, usability, and
|
|
4
|
+
description: Kilotest tests web pages for front-end quality (i.e. accessibility, usability, and standards conformity) using an ensemble of ten independent rule engines that employ rule-based and machine-learning-based methods. This API enables AI agents to recommend web pages for testing, discover available test reports, and retrieve data from reports. For background on Kilotest and the advantages of ensemble testing, visit https://kilotest.com.
|
|
5
5
|
version: 1.0.0
|
|
6
6
|
contact:
|
|
7
7
|
name: Kilotest
|
|
@@ -30,7 +30,7 @@ paths:
|
|
|
30
30
|
post:
|
|
31
31
|
operationId: recommendQualityTestingOfOneWebPage
|
|
32
32
|
summary: Recommend quality testing of one web page
|
|
33
|
-
description: Submit a recommendation for Kilotest to test, for the first time, a particular web page for front-end quality (i.e. accessibility, usability, and
|
|
33
|
+
description: Submit a recommendation for Kilotest to test, for the first time, a particular web page for front-end quality (i.e. accessibility, usability, and standards conformity). Recommendations are typically approved and the testing completed within a day, whereupon the results can be found with the summarizeQualityOfAllTestedWebPages operation. Before submitting a recommendation, use the summarizeQualityOfAllTestedWebPages operation to ensure that no report about the page is available, and also to see the stylistic rules for the naming of pages. An attempt to recommend a page for testing will fail if a report about the page is already available.
|
|
34
34
|
requestBody:
|
|
35
35
|
description: Test recommendation specifications
|
|
36
36
|
required: true
|
|
@@ -83,7 +83,7 @@ paths:
|
|
|
83
83
|
get:
|
|
84
84
|
operationId: describeHTMLElementsHavingOneQualityIssue
|
|
85
85
|
summary: Describe HTML elements having one quality issue (NOT YET IMPLEMENTED)
|
|
86
|
-
description: Get issue-specific data from a specified report about the front-end quality (i.e. accessibility, usability, and
|
|
86
|
+
description: Get issue-specific data from a specified report about the front-end quality (i.e. accessibility, usability, and standards conformity) of a web page. The data describe the issue, all of the HTML elements of the page that have the issue, and, for each such element, URLs for retrieving diagnoses by rule engines of the issue on the element. NOT YET IMPLEMENTED.
|
|
87
87
|
parameters:
|
|
88
88
|
- name: issueID
|
|
89
89
|
in: path
|