kane-qe is a Claude Code plugin (a mod) that watches kane-cli (KaneAI) and shows what it is doing, without being asked.
Claude runs kane-cli; the mod reads what kane-cli leaves on disk and draws it: a band of three rows above the prompt with the kane mascot, and a pane for runs, assurance and history. When Claude changes code and nothing has tested it, the band says so and offers a test.
Read more: the Field Guide (every band state, the pane, flows, use cases, guidelines, and a chaptered walkthrough video recorded with real runs: docs/kane-qe-v2-tour.mp4) and Explained simply. Both are standalone pages: open them from a clone. How v2 meets its design lists every designed feature and screen and how it was checked.
Requirements: Claude Code with mods (function-hook plugins), and kane-cli: npm install -g @testmuai/kane-cli, then ! kane-cli login --oauth from the Claude prompt.
In Claude Code:
/plugin marketplace add LambdaTest/kane-claude-plugin
/plugin install kane-qe@lambdatest
From a terminal: claude plugin marketplace add LambdaTest/kane-claude-plugin, then claude plugin install kane-qe@lambdatest.
- Pin a release or branch by adding
#ref:LambdaTest/kane-claude-plugin#kane-qe--v2.0.0. - Updates:
claude plugin update kane-qe@lambdatest, then/reload-pluginsin a running session. Background auto-update is off by default for this marketplace; turn it on in/plugin→ Marketplaces, or with"autoUpdate": truebelow. - Without the marketplace, from a clone:
claude --plugin-dir kane-claude-plugin/kane-qe, or name that folder inenv.CLAUDE_CODE_PLUGIN_DIRSin~/.claude/settings.json.
Commit this to a project's .claude/settings.json; everyone who opens the project and trusts it gets the marketplace and the plugin:
{
"extraKnownMarketplaces": {
"lambdatest": {
"source": { "source": "github", "repo": "LambdaTest/kane-claude-plugin" },
"autoUpdate": true
}
},
"enabledPlugins": {
"kane-qe@lambdatest": true
}
}The same block works in ~/.claude/settings.json (every project on one machine) and in organization managed settings (claude.ai → Admin settings → Claude Code → Managed settings, or managed settings on each machine).
Nothing to start. Open Claude Code in a project and the band is there.
- Ask Claude to test something: "run
kane-cli run "Search for iPod and assert 4 products are listed" --url https://ecommerce-playground.lambdatest.io --agent --headless", or "run the login test with kane-cli". Within two seconds the band shows the run, its time and the step it is on. A run started in a terminal in the same folder shows up the same way. - Read the card: each test Claude runs leaves a card in the conversation with its result, and View evidence opens the evidence in the browser.
- Open the pane with
/kaneor[ Open ]. Press a run for its steps; the current or failing step opens to what the agent thinks, does and checks. - When a test fails, the band names it and the step; the run's detail gives kane's own verdict (why, what kind, how sure, where) and Open evidence.
- Several runs or a suite: one coloured cell per run or test, with counts; a failure takes row 2 while the rest keep going. A suite on the remote grid (
--remote) shows how many tests are on the grid and since when; the pane gives the job and its link, and the tests are counted when the job ends. - After Claude changes code, the band warns ⚠ 1 file changed, untested with Test this change: saved tests that cover the change (with their last result), or an objective Claude drafts from the diff.
/kane automakes Claude test before it finishes;/kane offturns it off. - Assurance: row 3 is requirement coverage from
kane-cli cover gaps --json; the Assurance tab breaks it down per use case, or offers to set it up. Press a use case to see what it still owes and kane-cli's next command for each; Close these gaps with Claude hands it over. - History: the History tab lists the last 30 finished runs in this project, with where each failed.
| Command | |
|---|---|
/kane |
Open the pane |
/kane assurance |
Open the Assurance tab |
/kane history |
Open the History tab |
/kane auto · /kane ask · /kane off |
What happens after Claude changes code, for this session |
/config → kane-qe: After Claude changes code (offer by default, auto, off) and kane-cli command (default kane-cli, used only for the read-only cover gaps). Colours follow Claude Code's theme.
What it never does: it never starts a kane-cli test, and never shows what kane-cli did not report. The commands it runs are kane-cli cover gaps --json, kill -0, ps, git check-ignore and git diff, and, only when you press View evidence, kane-cli evidence serve <pack> and open. It reads kane-cli's structured output only, with one exception: the viewer link that evidence serve prints.
claude plugin validate kane-qe --strict # the plugin: manifest, hooks, state contract
claude plugin validate . --strict # the marketplace manifest
claude plugin test kane-qe # 127 tests
CI (.github/workflows/ci.yml) runs the same on every push to main and on pull requests.
- Raise
versioninkane-qe/.claude-plugin/plugin.jsonand in the plugin's entry in.claude-plugin/marketplace.json(claude plugin tagchecks they agree). - Commit and push to
main. - Tag the release:
claude plugin tag kane-qe --pushcreates and pusheskane-qe--v<version>, which people can pin with#kane-qe--v<version>.
People get it with claude plugin update kane-qe@lambdatest (or by auto-update), then /reload-plugins.
- This repository as a marketplace (above): anyone adds it once.
- A team or the whole organization: the settings block above, in a project's
.claude/settings.jsonor in managed settings. Managed settings can also restrict hooks to organization-approved mods (allowManagedModsOnly).
To list kane-qe in the plugin directory on claude.ai, so anyone can find and enable it:
- Make sure
claude plugin validate kane-qe --strictpasses,plugin.jsonhasname,version,description,author,homepageandrepository, and the plugin folder has aREADME.md(all true today). - Open claude.ai/directory/manage (a paid plan; for an organization, the Owner role) and follow Submit a plugin. The steps are in Submit a plugin.
- Anthropic reviews it. Once published, people who enable it on claude.ai get it in Claude Code as
kane-qe@synced. - For an update: raise
version, push, and submit the new version in the same portal.
References: install plugins, publish, host a marketplace, organization settings, mods reference.
| Path | What |
|---|---|
kane-qe/hooks/adapter.ts |
One kane-cli wire line → a small internal event: the only place raw field names appear |
kane-qe/hooks/model.ts |
Pure: events → runs, runs → the band's rows and the pane's text, cover gaps, change helpers |
kane-qe/hooks/sources.ts |
The live-run pointer and byte offsets into event files |
kane-qe/hooks/register.tsx |
Polling, hooks (edits, end of turn, /kane, theme) and the drawing |
kane-qe/hooks/mascot.ts |
The mascot: a cell grid in terminals, an image elsewhere |
kane-qe/tests/ |
Adapter table, band states at 60/80/120 columns, recorded kane-cli streams replayed, band and pane on terminal and desktop, change tracking, stale pointers, assurance and use-case detail, remote suites, history, the card in the chat, theme |
.claude-plugin/marketplace.json |
The lambdatest marketplace: this repository installs with /plugin marketplace add |
docs/ |
The Field Guide and the explainer as standalone HTML, with the walkthrough video and screenshots (guide/build_docs.sh rebuilds them) |
guide/ |
The page sources, screenshots, design coverage, and the scripts that record a walkthrough with real runs (KANE_DEMO_DIR=<project> guide/run_tour_v2.sh; run_tour_v3.sh for a demo shop project, covering the chat card, auto mode, use-case detail and History) and cut a short captioned promo from one (python3 guide/make_promo.py guide/promo.json) |
Edit kane-qe/ and a session that loads it with --plugin-dir or CLAUDE_CODE_PLUGIN_DIRS reloads it on save. After recording a new kane-cli stream into kane-qe/tests/fixtures/, run node kane-qe/tests/fixtures/build.mjs.
