qiksy-mcp 1.1.1 → 1.2.0

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.
Files changed (2) hide show
  1. package/AGENT-GUIDE.md +111 -0
  2. package/package.json +2 -2
package/AGENT-GUIDE.md ADDED
@@ -0,0 +1,111 @@
1
+ # Qiksy bridge — guide for a coding agent
2
+
3
+ Drop this file into a project (`.claude/qiksy-bridge.md`, `AGENTS.md`, or wherever your
4
+ assistant reads project notes) and the assistant knows what the bridge is, what it can
5
+ do, and — just as important — what it deliberately cannot.
6
+
7
+ Qiksy connects an agent to **the browser the human already has open**: their real
8
+ profile, their logged-in sessions, the tab they are looking at. It never launches a
9
+ browser, never switches window or tab focus, and never steals the pointer. Work happens
10
+ inside the existing (even backgrounded) tab.
11
+
12
+ ---
13
+
14
+ ## Setup, once
15
+
16
+ 1. **Install the extension** — [Qiksy on the Chrome Web Store](https://chromewebstore.google.com/detail/jcnbcbpndahhblhobhjjkhafmbkleoem).
17
+ 2. **Turn the bridge on.** Either the extension popup → *Agent bridge · MCP* → On →
18
+ *Generate* a token, or — from a Qiksy web app — press **Connect this browser** and
19
+ confirm on the page the extension opens. Both end the same way: a port (7333 by
20
+ default) and a shared token.
21
+ 3. **Point the agent at it.** Same token, same port:
22
+
23
+ ```bash
24
+ claude mcp add --transport stdio qiksy \
25
+ --env QIKSY_MCP_TOKEN=YOUR_TOKEN \
26
+ -- npx qiksy-mcp --port 7333
27
+ ```
28
+
29
+ ```json
30
+ { "mcpServers": { "qiksy": {
31
+ "command": "npx",
32
+ "args": ["qiksy-mcp", "--port", "7333"],
33
+ "env": { "QIKSY_MCP_TOKEN": "YOUR_TOKEN" }
34
+ } } }
35
+ ```
36
+
37
+ 4. **Check it.** `qa_status` should answer with the current page. "Qiksy extension is not
38
+ connected" means the popup switch is off or the token/port differ — it is not a
39
+ reason to reach for another browser driver.
40
+
41
+ ---
42
+
43
+ ## The tools
44
+
45
+ **Read-only — always available.**
46
+
47
+ | Tool | What it gives you |
48
+ |---|---|
49
+ | `qa_tabs` | Every tab the bridge can see, with `tabId`, URL, title, and which are isolated logins. Start here when several tabs are open. |
50
+ | `qa_status` | Health of one tab: URL, counts of errors, warnings, forms, failed requests. The cheap "did I break something". |
51
+ | `qa_snapshot` | The whole page as an **accessibility tree** — every control, landmark and heading with a role, a name, its state, and a stable `ref` like `[ref=e12]`. This is how you SEE the page. |
52
+ | `qa_findings` | Console errors, failed requests, a11y problems Qiksy has collected, filterable by severity. |
53
+ | `qa_export` | The `qa-export/v1` bundle: findings with selectors, failed requests with server bodies, detected form structure, repro steps. |
54
+
55
+ **Qiksy's own surfaces — never touches the page under test.**
56
+
57
+ `qa_open_panel` · `qa_run_audit` · `qa_tour` · `qa_report` · `qa_spotlight`
58
+ (`qa_spotlight` highlights an element so the human can look at the same thing you are.)
59
+
60
+ **Agent control — acts on the page. Requires Qiksy Pro AND a one-time "Agent control"
61
+ consent in the popup.** A refusal there is the human's to clear; report it in one
62
+ sentence rather than working around it.
63
+
64
+ `qa_click` · `qa_type` · `qa_type_many` · `qa_press` · `qa_wait_ready` ·
65
+ `qa_navigate` · `qa_open_isolated` · `qa_close_tab`
66
+
67
+ ---
68
+
69
+ ## How to drive it well
70
+
71
+ - **Target by `ref` from a fresh snapshot.** A `ref` is unique where a CSS selector is
72
+ ambiguous. After anything that navigates or re-renders, call `qa_wait_ready` and take
73
+ a **new** snapshot — old refs go stale.
74
+ - **Address a specific tab** with `tabId` from `qa_tabs`; omit it to act on the active
75
+ one. Tabs from `qa_open_isolated` are separate logins on the same site — that is how
76
+ you drive several accounts at once.
77
+ - **After a submit**, `qa_wait_ready` before the next call: the old document (and Qiksy
78
+ inside it) is gone, and the next call would land on a page still being replaced.
79
+ - **Autocomplete fields need a beat.** Suggestion lists arrive asynchronously (~0.4s on
80
+ travel sites). Type, wait, snapshot, then click the option you want — do not assume
81
+ the first one committed.
82
+
83
+ ## What it cannot do — say so, don't substitute
84
+
85
+ - **No screenshots.** `qa_snapshot` is a tree, not pixels. Judgements about spacing,
86
+ colour or alignment cannot be made from here.
87
+ - **No arbitrary JavaScript.** No `evaluate`, by design (a Web Store requirement). Which
88
+ means **no reading or writing localStorage** and **no measuring geometry**.
89
+ - **No `<iframe>` contents.** Payment forms (Stripe, 3-D Secure) live in frames the
90
+ content script does not enter. Fill up to them, not inside them.
91
+ - **No captcha.** Stop and hand it back.
92
+ - **Background tabs are throttled by Chrome.** Native inputs fill fine in the
93
+ background; custom popovers (Radix/MUI selects, date pickers) only render in the
94
+ foreground tab.
95
+ - **Navigation stays on the site under test.** `qa_navigate` refuses a different site
96
+ (`out-of-scope`) — the human opens that tab, then the agent works in it.
97
+
98
+ When a task genuinely needs pixels, eval or a different site, name the missing
99
+ capability out loud instead of quietly switching to another tool.
100
+
101
+ ## Several agent windows, one browser
102
+
103
+ Each MCP client starts its own copy of the server, but only one can own the loopback
104
+ port: whoever binds it is the hub and holds the extension socket, the rest relay
105
+ through it automatically. You do not need to know which one you are. If the owning
106
+ window closes, the others take the port over within a second or two — a call that fails
107
+ that way is worth one retry.
108
+
109
+ If the port is held by something that cannot share it (an older bridge, an unrelated
110
+ process), the tools say so; the fix is that process or a different `--port`, not the
111
+ popup.
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "qiksy-mcp",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "MCP bridge for the Qiksy browser extension — expose live QA findings, forms, network and session to any MCP-capable coding agent.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "qiksy-mcp": "server.mjs"
8
8
  },
9
- "files": ["server.mjs", "README.md"],
9
+ "files": ["server.mjs", "README.md", "AGENT-GUIDE.md"],
10
10
  "engines": {
11
11
  "node": ">=18"
12
12
  },