Skip to content

Add a Kane CLI skill for natural-language browser checks with evidence #762

Open

Description

@rahulj-123

Request

Add skills/kane-cli/ so an OpenHands agent can verify a web flow in real Chrome from a natural-language objective, using Kane CLI by TestMu AI.

Disclosure: I work at TestMu AI (formerly LambdaTest), which builds Kane CLI. Related: #758 and #760, the TestMu AI MCP catalog entry.

The gap

qa-changes validates a change by running it, and the built-in browser tools let an agent drive a page step by step. What is missing is a one-command check an agent can run and gate on: describe the flow, get a pass or fail with a typed exit code, and keep an evidence pack (screenshots, network log, console log) that a reviewer can replay.

What Kane CLI does

  • kane-cli run "<objective>" --url <start url> --agent --headless drives Chrome to verify the objective and prints NDJSON events.
  • Exit codes: 0 pass, 1 fail, 2 auth or setup error, 3 timeout or cancelled.
  • Each run leaves a replayable .evidence pack.
  • By default it launches Chrome with a fresh temporary profile for every run, not the user's signed-in profile.
  • Runs on Linux, macOS and Windows. Needs Google Chrome, or KANE_CLI_CHROME_PATH pointing at a Chrome binary.
  • The CLI ships on npm as @testmuai/kane-cli (latest 0.8.21). Its docs and skills are Apache-2.0 at https://github.com/LambdaTest/kane-cli. Needs a TestMu AI account.

Proposed change

  • skills/kane-cli/SKILL.md, skills/kane-cli/references/ and skills/kane-cli/README.md, written for OpenHands from the upstream skill at the 0.8.21 tag. Two changes from upstream:
    • It offers Kane CLI as an option alongside the built-in browser tools, instead of telling the agent not to use Playwright, Puppeteer or Selenium.
    • Valid YAML frontmatter, plain hyphens and no links to main.
  • An entry in marketplaces/openhands-extensions.json, plus the files scripts/sync_extensions.py generates.

The skill will follow the points raised on #477:

  • Pinned install: npm install -g @testmuai/kane-cli@0.8.21, never --force or @latest.
  • The user signs in. Headless runs use kane-cli login --username "$LT_USERNAME" --access-key "$LT_ACCESS_KEY" with both values from OpenHands secrets.
  • No guidance on stealth or getting past bot protection.

How it will be tested

In an OpenHands sandbox with the released package and Google Chrome installed: install @testmuai/kane-cli@0.8.21, sign in, run one objective against a public page with --agent --headless, and attach the exit code and NDJSON summary to the PR, with no credentials or account data.


OpenHands AI triage

The following comments and acceptance criteria were added by the OpenHands AI agent.

Triage

This is an additive, opt-in skill that packages the upstream Kane CLI skill (Apache-2.0, tag 0.8.21) for OpenHands, following the pattern already merged for other CLI/service skills (see the adjacent skills/datadog and skills/qa-changes, and the approach discussed on #477). Scope is one new skills/kane-cli/ directory plus its marketplace registration and the artifacts the repo's sync/build commands derive from it.

Non-goals:

A repository mechanism, not an open design choice, fixes two details: every marketplace skill entry must ship .plugin/plugin.json with vendor manifests (.claude-plugin, .codex-plugin) or the load tests fail, and the marketplace category for a ./skills/ entry must be one of the taxonomy values enforced by scripts/build-skills-catalog.mjs. The issue's "files scripts/sync_extensions.py generates" wording does not cover plugin.json, which is hand-authored. These are treated as requirements below.

Acceptance Criteria

  • skills/kane-cli/SKILL.md exists with valid YAML frontmatter that parses via the repo's PyYAML-based tooling, with name: kane-cli and a non-empty description, plus a keyword trigger (for example kane-cli).
  • The skill documents the one-command check: kane-cli run "<objective>" --url <start url> --agent --headless, the exit-code contract (0 pass, 1 fail, 2 auth or setup error, 3 timeout or cancelled), and that each run leaves a replayable .evidence pack (screenshots, network log, console log).
  • The skill states that runs default to a fresh temporary Chrome profile, not the user's signed-in profile, and documents the Chrome prerequisite: Google Chrome installed, or KANE_CLI_CHROME_PATH pointing at a Chrome binary; it notes Linux, macOS and Windows support.
  • Kane CLI is presented as an option alongside the built-in browser tools, and the skill does not instruct the agent to avoid Playwright, Puppeteer or Selenium; it contains no stealth or bot-protection guidance.
  • Install is pinned to npm install -g @testmuai/kane-cli@0.8.21, with no --force and no @latest.
  • Authentication is user-driven: headless runs use kane-cli login --username "$LT_USERNAME" --access-key "$LT_ACCESS_KEY" with both values taken from OpenHands secrets. The skill contains no credentials, tokens, or account data.
  • skills/kane-cli/.plugin/plugin.json exists with name matching the directory and the required fields (name, description, author as an object with a name, version); .claude-plugin and .codex-plugin are present as symlinks to .plugin or as real directories mirroring plugin.json.
  • skills/kane-cli/README.md exists and matches the skill's behavior and scope.
  • marketplaces/openhands-extensions.json has one entry with source: "./skills/kane-cli" and a category drawn from the skill taxonomy accepted by scripts/build-skills-catalog.mjs; the new skill is defaultEnabled: false by omission.
  • Skill content uses plain hyphens (no em dashes), references the upstream project at the 0.8.21 tag or release, and contains no links to the upstream main branch.
  • Generated artifacts are in sync: python scripts/sync_extensions.py --check passes, and node scripts/build-skills-catalog.mjs regenerates skills/index.js with the kane-cli entry and produces no further diff on a second run (npm run build:skills).
  • uv sync --group test && uv run pytest -q passes, including tests/test_skills_catalog.py, tests/test_skill_plugin_loading.py, tests/test_plugin_manifest.py, and tests/test_sdk_loading.py::test_marketplace_includes_all_skills.
  • Validation evidence on the PR: in an OpenHands sandbox with Google Chrome and @testmuai/kane-cli@0.8.21 installed, one objective is run against a public page with --agent --headless, and the exit code and NDJSON summary are attached to the PR with no credentials or account data.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:lowready-for-devScoped for contribution; managed by repository readiness checks.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions