chromeflow 0.1.11 → 0.1.13

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/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # Chromeflow
2
+
3
+ Browser guidance for Claude Code. When Claude needs you to set up Stripe, grab API keys, configure a third-party service, or do anything in a browser — Chromeflow takes over. It highlights what to click, fills in fields it knows, clicks buttons automatically, and writes captured values straight to your `.env`.
4
+
5
+ ## How it works
6
+
7
+ Chromeflow is two things that work together:
8
+
9
+ - **MCP server** — gives Claude Code a set of browser tools (`open_page`, `click_element`, `fill_input`, `read_element`, `write_to_env`, etc.)
10
+ - **Chrome extension** — receives those commands and acts on the active tab (highlights, clicks, fills, captures screenshots)
11
+
12
+ Claude drives the flow. You only touch the browser for things that genuinely need you — login, passwords, payment details, personal choices.
13
+
14
+ ## Setup
15
+
16
+ **1. Run the setup wizard** from your project directory:
17
+
18
+ ```bash
19
+ npx chromeflow setup
20
+ ```
21
+
22
+ This registers the MCP server in `~/.claude.json` and writes a `CLAUDE.md` into your project so Claude knows when and how to use Chromeflow.
23
+
24
+ **2. Load the Chrome extension** (one time):
25
+
26
+ The setup wizard opens `chrome://extensions` for you. Then:
27
+ 1. Enable **Developer mode** (top-right toggle)
28
+ 2. Click **Load unpacked**
29
+ 3. Select the path printed by the setup wizard
30
+
31
+ The extension persists across Chrome restarts. You only do this once.
32
+
33
+ **3. Restart Claude Code.**
34
+
35
+ That's it. Claude will automatically reach for Chromeflow whenever a task needs browser interaction.
36
+
37
+ ## Usage
38
+
39
+ Just ask Claude normally:
40
+
41
+ > "Set up Stripe for this project — create a product with monthly and annual pricing, capture the price IDs into .env"
42
+
43
+ > "Go to Supabase and get my project's anon key and service role key"
44
+
45
+ > "Help me configure SendGrid webhooks for this app"
46
+
47
+ Claude will navigate, highlight steps, click what it can, pause for anything sensitive, and write values to your `.env` automatically.
48
+
49
+ ## Adding to another project
50
+
51
+ Run the setup wizard from the new project's directory:
52
+
53
+ ```bash
54
+ npx chromeflow setup
55
+ ```
56
+
57
+ The MCP server is already registered globally — this just adds `CLAUDE.md` to the project.
58
+
59
+ ## Development
60
+
61
+ ```bash
62
+ git clone https://github.com/NeoDrew/chromeflow
63
+ cd chromeflow
64
+ npm install
65
+ npm run build
66
+ ```
67
+
68
+ Then run setup using the local build:
69
+
70
+ ```bash
71
+ node packages/mcp-server/dist/index.js setup
72
+ ```
73
+
74
+ To rebuild on changes:
75
+
76
+ ```bash
77
+ npm run dev:mcp # watches mcp-server
78
+ npm run dev:ext # watches extension
79
+ ```
80
+
81
+ After rebuilding the extension, click **Update** on `chrome://extensions`.
82
+
83
+ ## Requirements
84
+
85
+ - Claude Code
86
+ - Chrome (or any Chromium browser)
87
+ - Node.js 22+
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ async function main() {
27
27
  const bridge = new WsBridge();
28
28
  const server = new McpServer({
29
29
  name: "chromeflow",
30
- version: "0.1.11"
30
+ version: "0.1.13"
31
31
  });
32
32
  registerBrowserTools(server, bridge);
33
33
  registerHighlightTools(server, bridge);
@@ -60,9 +60,10 @@ After calling this, use those exact coordinates in highlight_region \u2014 do NO
60
60
  if (els.length === 0) {
61
61
  return { content: [{ type: "text", text: "No visible interactive elements found on page." }] };
62
62
  }
63
- const lines = els.map(
64
- (e) => `${e.index}. ${e.type} "${e.label}" \u2014 x:${e.x} y:${e.y} w:${e.width} h:${e.height}`
65
- );
63
+ const lines = els.map((e) => {
64
+ const val = e.value ? ` [currently: "${e.value}"]` : "";
65
+ return `${e.index}. ${e.type} "${e.label}"${val} \u2014 x:${e.x} y:${e.y} w:${e.width} h:${e.height}`;
66
+ });
66
67
  return {
67
68
  content: [{ type: "text", text: `Visible interactive elements:
68
69
  ${lines.join("\n")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chromeflow",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Browser guidance MCP server for Claude Code — highlights, clicks, fills, and captures from the web so you don't have to.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,7 +8,8 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
- "CLAUDE.md"
11
+ "CLAUDE.md",
12
+ "README.md"
12
13
  ],
13
14
  "repository": {
14
15
  "type": "git",
@@ -25,7 +26,7 @@
25
26
  "chrome"
26
27
  ],
27
28
  "scripts": {
28
- "prebuild": "cp ../../CLAUDE.md ./CLAUDE.md",
29
+ "prebuild": "cp ../../CLAUDE.md ./CLAUDE.md && cp ../../README.md ./README.md",
29
30
  "build": "tsc",
30
31
  "postbuild": "node --input-type=commonjs -e \"const fs=require('fs');const f='dist/index.js';fs.writeFileSync(f,'#!/usr/bin/env node\\n'+fs.readFileSync(f,'utf8'));\"",
31
32
  "dev": "tsc --watch"