Releases: TranHuyQn/cc-chrome-extension
Release list
1.2.0 — gửi ảnh trong khung chat, và ba sửa lỗi về trải nghiệm
Có gì mới trong 1.2.0
🖼 Gửi ảnh trong khung chat
Đính tối đa 5 ảnh mỗi tin nhắn — bấm nút 📎, dán từ clipboard (⌘V / Ctrl+V), hoặc kéo thả file ảnh vào khung soạn. Gửi ảnh không kèm chữ cũng hợp lệ.
Mỗi ảnh được thu về cạnh dài 1568px trước khi gửi (cạnh dài nhất model thực sự đọc — gửi to hơn chỉ tốn token chứ không rõ thêm) và mã hoá lại theo đúng nguồn: JPEG giữ JPEG, còn lại thành PNG. Ảnh chụp màn hình dán vào là trường hợp hay gặp nhất và đầy chữ, mà JPEG thì làm nhoè viền chữ.
Lưu ý: mở lại panel chỉ thấy số lượng ảnh (🖼 2 ảnh), không thấy lại ảnh — nhật ký replay giới hạn 512KB, một tấm ảnh chụp màn hình là đủ lấp đầy và đẩy văng cả hội thoại.
📜 Khung chat không tự cuộn xuống nữa
Cuộn lên đọc lại câu trả lời cũ thì nó nằm yên ở đó, kể cả khi Claude đang trả lời dở. Một nút "↓ Tin mới" hiện ra để đưa bạn về cuối. Gửi tin nhắn thì vẫn luôn cuộn xuống.
🟠 Tắt được viền cam, và viền không lọt vào ảnh chụp
Popup extension có công tắc mới "Hiện viền cam khi Claude dùng tab" (mặc định bật) — dành cho lúc bạn tự chụp màn hình máy mình. Tắt là viền biến khỏi mọi tab ngay, không chờ hết 30 giây.
Đồng thời sửa hai lỗi độc lập khiến viền cam vẫn lọt vào ảnh take_screenshot dù code đã gỡ viền trước khi chụp:
- lệnh vẽ viền chạy kiểu "bắn rồi quên", nên có thể đáp xuống sau lệnh xoá và dựng lại viền kịp lúc chụp;
- Claude Code chạy tool song song, nên một
read_pagecùng lúc sẽ vẽ lại viền ngay giữa lúc chụp.
🗂 Tab group tự dọn khi phiên kết thúc
Khi một phiên MCP kết thúc, nhóm Claude · xxxx của nó được gỡ. Tab được gỡ khỏi nhóm, không bao giờ bị đóng — chúng đang giữ trang thật của bạn.
Giới hạn phải nói rõ: phiên MCP qua HTTP chỉ kết thúc khi có DELETE /mcp tường minh hoặc sau 8 tiếng nhàn rỗi, và Claude Code không gửi DELETE đó khi thoát (đã đo). Nghĩa là:
- Khung chat: đóng panel → dọn ngay. ✅
- Phiên
claudeở terminal: thoát cũng không dọn, phải chờ hết 8 tiếng nhàn rỗi. ❌
Nhóm còn sót thì chuột phải vào chip trên thanh bookmark → Delete group. Muốn đường tự động chạy sớm hơn thì giảm CC_CHROME_SESSION_TTL_MS, đổi lại là đóng hẳn phiên nhàn rỗi chứ không chỉ gỡ nhóm.
Cài đặt lần đầu (chưa từng dùng)
Đây là MCP server + extension Chrome giúp Claude Code điều khiển Chrome, không cần đăng nhập claude.ai. Cài xong bạn sẽ có một dịch vụ nền chạy dưới tài khoản của mình, tự bật lại mỗi lần đăng nhập máy.
Yêu cầu: Node.js 20+, Google Chrome, và Claude Code đã cài sẵn.
Bước 1 — chạy một lệnh
macOS / Linux:
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (cửa sổ PowerShell thường, không cần "Run as administrator"):
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Windows phải là hai dòng, KHÔNG dùng
irm … | iex.install.ps1bắt đầu bằng UTF-8 BOM (thiếu nó thì PowerShell 5.1 đọc file như ANSI và làm hỏng toàn bộ chữ tiếng Việt tới mức không parse được). Nhưng| iexlại đẩy chính cái BOM đó vào parser như một ký tự thường →The term '#' is not recognized.-OutFileghi đúng byte thô,-Fileđọc lại đúng.
Lệnh này in ra một URL WebSocket kèm token ở cuối — giữ lại, bước 3 cần đến.
Bước 2 — nạp extension vào Chrome
- Mở
chrome://extensions - Bật Developer mode (góc trên bên phải)
- Bấm Load unpacked, chọn thư mục:
- macOS / Linux:
~/.cc-chrome-bridge/extension - Windows:
%USERPROFILE%\.cc-chrome-bridge\extension
- macOS / Linux:
Bước 3 — nối extension với bridge
Bấm icon extension trên thanh công cụ, dán URL mà bước 1 đã in ra (dạng ws://127.0.0.1:<port>/ws?token=…) vào ô địa chỉ, rồi bấm Lưu & kết nối lại.
Chấm tròn chuyển xanh là xong. Bấm Mở khung chat để chat thẳng trong Chrome.
Kiểm tra nhanh
Trong Claude Code, gõ /ccchrome status. Hoặc bảo Claude "mở vnexpress.net và cho tôi biết tiêu đề bài đầu tiên" — Chrome sẽ mở một tab trong nhóm riêng của phiên, viền cam sáng lên ở mép tab đó.
Gỡ cài đặt
bash ~/.cc-chrome-bridge/uninstall.shĐang dùng bản cũ?
Chạy lại đúng lệnh cài ở trên — bản cài sẽ giữ nguyên cổng và token cũ của bạn, không phải dán lại URL. Sau đó vào chrome://extensions bấm ⟳ trên thẻ extension để nạp code mới.
Hoặc bấm thẳng nút cập nhật trong khung chat nếu bạn đang chạy từ 1.1.0 trở lên.
1.1.1 — Markdown trong khung chat, và ba lỗi Windows
Khung chat giờ hiển thị Markdown
Câu trả lời của Claude trước đây về nguyên văn Markdown — ##, dấu backtick, **, dấu | của bảng — nhồi trong một cột rộng 370px, tức đúng chỗ khó đọc nhất. Giờ nó được render: heading, danh sách, bảng, blockquote, link, code inline, và khối code có tô màu cú pháp kèm nút chép.
Chỉ câu trả lời của Claude mới được render. Chữ bạn gõ giữ nguyên như bạn gõ.
Markdown do marked phân tích, tô màu do Prism — cả hai nhúng sẵn trong extension và chỉ dùng phần lexer: panel tự dựng từng node DOM, không bao giờ gán HTML. Đây là chủ đích chứ không phải cầu kỳ — câu trả lời thường trích lại đúng thứ một trang web hiển thị (kết quả của get_page_text, read_console_messages…), mà panel lại là trang extension có đặc quyền. Nên thẻ thô trong nội dung hiện ra thành chữ, và link javascript:/data: không bao giờ thành link.
Tô màu có sẵn cho markup, css, javascript, typescript, json, bash, python, yaml, diff, sql. Ngôn ngữ khác vẫn hiện thành khối code, chỉ là không màu.
Ba lỗi trên Windows
Cả ba đều do người dùng Windows báo hoặc phát hiện khi kiểm thử trên máy thật.
Installer chọn nhầm claude.ps1. PowerShell phân giải ExternalScript trước Application, mà npm i -g thả cả claude, claude.cmd lẫn claude.ps1 vào cùng một thư mục — nên Get-Command claude trả về file .ps1, và nó bị ghi vào bridge.cmd. Nhưng bridge spawn claude qua cmd.exe, mà cmd không chạy được .ps1. Cài xong trông hoàn hảo, còn mọi lượt chat trong khung chat đều chết. Bản này lọc theo CommandType và phần mở rộng, và lọc cả giá trị kế thừa — nhờ vậy bản cập nhật sẽ tự chữa những máy đã cài bản lỗi thay vì bake lại cái sai.
Stop-ScheduledTask + Start-ScheduledTask không phải là restart. Đo trên máy thật: dừng task chỉ kết thúc wscript, còn node.exe — cháu của nó — vẫn sống, vẫn giữ cổng, vẫn phục vụ bằng cấu hình cũ đã nạp trong bộ nhớ; PID không đổi và /health vẫn trả 200 suốt. Giờ đã có Restart-CcTask, và tài liệu (/ccchrome restart, cả hai README) trỏ vào đó.
Task đăng ký hỏng ở máy có USERDOMAIN khác tên máy. Register-ScheduledTask từ chối với 0x80070534, mà installer lại cố tình nuốt lỗi này — nên nó in đủ dòng "Xong" trong khi không có dịch vụ nào được đăng ký, và lần đăng nhập sau không có gì chạy. Principal giờ lấy từ identity đang chạy.
Cổng mặc định: 8787 → 23949
Máy đã cài giữ nguyên cổng cũ. Bản cập nhật đọc port trong ~/.ccchrome.json y như nó vẫn đọc token, nên bridge của bạn không bị dời và URL trong popup extension vẫn đúng. Mặc định mới chỉ áp cho máy cài lần đầu.
Muốn chuyển máy đang chạy sang cổng mới thì đặt biến rồi chạy lại lệnh cài:
CC_CHROME_PORT=23949 curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashrồi dán URL mới (installer in ra ở cuối) vào popup extension.
Vì sao đổi: dải ephemeral đo được là macOS 49152–65535, Windows 49152–65535, Linux 32768–60999 — hợp lại 32768–65535. 8787 vốn không nằm trong đó, nhưng mặc định mới cũng phải ở ngoài, nên chọn 23949 chứ không phải một số ≥ 32768, để hệ điều hành không thể mượn mất cổng của bridge làm source port rồi khiến dịch vụ không bind được lúc đăng nhập.
Popup cũng nói rõ hơn khi mất kết nối: bridge không trả lời ở cổng trong URL đang lưu, và cổng hiện tại nằm ở ~/.ccchrome.json hoặc xem bằng /ccchrome status.
Sau khi cập nhật
Nhớ vào chrome://extensions bấm Reload trên "Claude Code Chrome Bridge". Trình cài đặt thay mã nguồn trên đĩa nhưng không thể nạp lại extension đang chạy trong Chrome — không Reload thì bạn vẫn đang chạy extension của bản cũ, tức là chưa có Markdown.
Nhật ký cũ trong panel lưu Markdown gốc, nên các câu trả lời từ trước cũng sẽ hiện ra đã render, không chỉ tin nhắn mới.
1.1.0 — timeline hoạt động trong khung chat, và nút tự cập nhật
Có gì mới
Timeline hoạt động trong khung chat. Trước đây gửi prompt xong là ngồi nhìn màn hình
đứng yên, không biết agent đang nghĩ hay đã lỗi. Giờ panel hiện từng bước: đang suy nghĩ,
đang gọi công cụ nào, kết quả ra sao, mất bao lâu. Mở lại panel thì lịch sử được dựng lại
từ nhật ký của chính nó, không còn khung trống cho một hội thoại mà server vẫn nhớ.
Nút tự cập nhật. Khi có bản mới, panel hiện nút; bấm là bridge tự tải, đối chiếu
SHA256, sao lưu bản đang chạy, cài đè, rồi kiểm tra bản mới có sống dậy không. Không lên
được thì tự khôi phục bản cũ và tự bật lại dịch vụ nền.
Cập nhật chỉ kích hoạt được từ khung chat qua cổng /panel — không phải MCP tool, nên
Claude không thể tự cập nhật cái máy nó đang chạy trên đó, kể cả khi được yêu cầu.
Cài đặt
macOS / Linux:
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bash
Windows (PowerShell thường, không cần "Run as administrator") — hai dòng, không phải | iex:
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"
install.ps1 bắt đầu bằng BOM UTF-8, vì PowerShell 5.1 không có BOM thì đọc file theo
bảng mã ANSI và làm hỏng mọi chuỗi tiếng Việt. Nhưng | iex lại đưa chính BOM đó vào
parser như ký tự thường (The term '#' is not recognized), và irm còn giải mã asset
của GitHub theo ISO-8859-1 nên chữ có dấu vỡ hết. -OutFile ghi nguyên byte, -File đọc
đúng — đó cũng là đường CI kiểm mỗi lần push.
Sau khi cài, làm nốt hai việc trong Chrome mà trình cài in ra: Load unpacked thư mục
extension, và dán URL kèm token vào popup.
Đã đo trên phần cứng thật
Trình cập nhật không được là con cháu của dịch vụ, vì việc đầu tiên trình cài làm là dừng
dịch vụ đó. Mỗi nền tảng một cơ chế, và cả ba đều đã đo chứ không suy luận:
- macOS —
launchctl bootoutkhông giết tiến trình con tách rời, nên vẫn spawn thẳng. - Windows — đo trên máy thật, hai lần (cắm sạc và chạy pin, kết quả giống nhau): runner
do Task Scheduler khởi động sống sóttaskkill /TmàStop-CcTaskdùng để giết bridge.
Đăng ký task không cần quyền admin. - Linux — đo trong CI mỗi lần push, có in cgroup thật của từng nhánh: con detached
thường chết,systemd-run --user --collect --unit=sống.
Đường cập nhật đã chạy thật
Toàn bộ đường cập nhật — tải, đối chiếu checksum, giải nén, bàn giao tiến trình, cài,
kiểm tra bridge mới sống lại — đã chạy thành công end-to-end trên macOS và Windows,
bằng đúng thao tác người dùng làm: bấm nút trong khung chat.
Không có test tự động nào đi qua đường này, và đó là cố ý: làm vậy nghĩa là npm test sẽ
cài đè lên bridge của chính người đang phát triển. Nó được bảo đảm bằng lần chạy thật ở
trên, cộng với các phép đo từng phần đã nêu.
Riêng Linux chưa được chạy thử end-to-end — không có máy Linux. Phần đã đo trên Linux
là cơ chế bàn giao tiến trình, do CI kiểm mỗi lần push, chứ không phải một lần cập nhật
hoàn chỉnh.
1.0.9 — khung chat chạy hook của bạn
Sửa trong 1.0.9
Khung chat giờ chạy hook của chính bạn. Trước đây panel bị cách ly hoàn toàn khỏi ~/.claude/settings.json, nên hook theo dõi usage hay thông báo của bạn không bắn lần nào — chat trong panel không được tính vào thống kê.
Giờ bridge đọc phần hooks trong cấu hình cá nhân của bạn ngay lúc spawn, ghi ra một file tạm 0600 và truyền qua --settings. Không kèm enabledPlugins — plugin mới là thứ cần chặn (một SessionStart hook của plugin từng bơm memory chéo project vào mọi lượt chat, làm nút "Phiên mới" trông như hỏng). Không ai phải tạo file gì trên máy mình: cài xong là chạy.
SessionStart và SessionEnd bị bỏ có chủ đích — panel spawn một tiến trình mỗi LƯỢT, nên chuyển tiếp hai sự kiện đó sẽ ghi nhận nguyên một "phiên" cho mỗi tin nhắn bạn gõ. Với công cụ đếm usage thì đó không phải sai số nhỏ, mà là dữ liệu rác.
Đo trước khi làm, không đoán: hook có chạy dưới claude -p, --settings ghép được với --setting-sources project, và payload của Stop mang transcript_path đọc được — đúng thứ công cụ đếm usage cần để tính token của lượt vừa xong. Nên bỏ SessionStart không mất dữ liệu usage.
Sửa hook rồi thì lượt chat kế tiếp đã có hiệu lực, không cần cài lại.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Sửa trong 1.0.8
Không còn để lại token đã thu hồi trên đĩa. Mỗi phiên khung chat sinh một file .mcp-config-<id>.json trong ~/.cc-chrome-bridge/panel/, và mỗi file chứa một bản sao token Bearer của bridge. Không có gì dọn chúng — đo được 40 file trên một máy dùng vài ngày — còn gỡ cài đặt thì giữ nguyên tất cả, vì cả thư mục panel/ được xếp vào nhóm "dữ liệu người dùng".
Giờ phiên chat tự xoá file của nó khi đóng, và uninstall quét nốt những file còn sót (trường hợp bridge bị kill đột ngột), không đụng tới bất cứ thứ gì khác trong panel/.
Và nói đúng sự thật. Uninstall trước đây gọi panel/ là "lịch sử hội thoại của khung chat" — nhưng lịch sử nằm ở ~/.claude/projects/; panel/ chỉ là thư mục làm việc của các tiến trình claude mà khung chat sinh ra. Giờ nó gọi đúng tên, và chỉ nhắc khi thật sự còn gì trong đó.
Có gì trong dòng 1.0.x
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Trạng thái nghiệm thu
✅ macOS và Windows đã chạy thật trên máy thật, trọn vòng đời: cài không cần quyền admin/root, dịch vụ tự lên, extension nối được, tool trình duyệt chạy, khung chat trả lời, khởi động lại máy thì dịch vụ tự lên, và gỡ cài đặt sạch trong một lần chạy.
⏳ Linux chưa có ai cài trên máy thật. Đường Linux có test tự động chạy mỗi lần push (CI trên ubuntu-latest) và hai lỗi riêng của nó đã được sửa, nhưng người đầu tiên cài thật sẽ là lần nghiệm thu — nếu là bạn, chạy systemctl --user status ccchrome-bridge sau khi cài và báo lại giúp.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload.
🔒 Bridge chỉ nghe trên 127.0.0.1. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.
1.0.8 — dọn token cũ, mô tả đúng thứ được giữ lại
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Sửa trong 1.0.8
Không còn để lại token đã thu hồi trên đĩa. Mỗi phiên khung chat sinh một file .mcp-config-<id>.json trong ~/.cc-chrome-bridge/panel/, và mỗi file chứa một bản sao token Bearer của bridge. Không có gì dọn chúng — đo được 40 file trên một máy dùng vài ngày — còn gỡ cài đặt thì giữ nguyên tất cả, vì cả thư mục panel/ được xếp vào nhóm "dữ liệu người dùng".
Giờ phiên chat tự xoá file của nó khi đóng, và uninstall quét nốt những file còn sót (trường hợp bridge bị kill đột ngột), không đụng tới bất cứ thứ gì khác trong panel/.
Và nói đúng sự thật. Uninstall trước đây gọi panel/ là "lịch sử hội thoại của khung chat" — nhưng lịch sử nằm ở ~/.claude/projects/; panel/ chỉ là thư mục làm việc của các tiến trình claude mà khung chat sinh ra. Giờ nó gọi đúng tên, và chỉ nhắc khi thật sự còn gì trong đó.
Có gì trong dòng 1.0.x
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Trạng thái nghiệm thu
✅ macOS và Windows đã chạy thật trên máy thật, trọn vòng đời: cài không cần quyền admin/root, dịch vụ tự lên, extension nối được, tool trình duyệt chạy, khung chat trả lời, khởi động lại máy thì dịch vụ tự lên, và gỡ cài đặt sạch trong một lần chạy.
⏳ Linux chưa có ai cài trên máy thật. Đường Linux có test tự động chạy mỗi lần push (CI trên ubuntu-latest) và hai lỗi riêng của nó đã được sửa, nhưng người đầu tiên cài thật sẽ là lần nghiệm thu — nếu là bạn, chạy systemctl --user status ccchrome-bridge sau khi cài và báo lại giúp.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload.
🔒 Bridge chỉ nghe trên 127.0.0.1. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.
1.0.7 — gỡ cài đặt sạch trên Windows
Bản phát hành đầu tiên. Mọi số hiệu 2.x/3.x trước đây chỉ tồn tại trong lịch sử git nội bộ, chưa từng phát hành ra ngoài.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Có gì trong bản này
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret — mô hình VPS cũ đã được gỡ hẳn khỏi code chứ không phải để lại như tuỳ chọn. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Sửa trong 1.0.6 và 1.0.7 (gỡ cài đặt trên Windows)
Gỡ cài đặt trước đây không dừng được bridge, và hỏng theo hai tầng:
- 1.0.6 — scheduled task chạy
wscript.exe→bridge.cmd→node.exe, nênnodelà cháu vàStop-ScheduledTaskkhông đụng tới. Task biến mất, script tưởng đã sạch rồi xoá thư mục trong khi server còn sống — hỏng giữa chừng ởlogs\bridge.err.log. Giờ tiến trình bị diệt cả cây và được kiểm chứng đã chết trước khi xoá gì. - 1.0.7 — nhưng diệt tiến trình trong khi task vẫn còn đăng ký thì Task Scheduler dựng lại một bridge mới ngay sau đó (task có trigger lặp 5 phút, đóng vai KeepAlive). Giờ task bị vô hiệu hoá/xoá đăng ký trước, rồi mới diệt.
Bộ test Windows trước đây luôn chạy với CC_CHROME_SKIP_SERVICE=1, tức chưa lần nào đăng ký/khởi động/dừng một scheduled task thật. Giờ CI làm trọn: cài thật, kiểm task đạt trạng thái Running (không phải Ready), /health phục vụ được, rồi gỡ và kiểm không còn task, không còn tiến trình, không còn thư mục.
Lưu ý
install.ps1/uninstall.ps1 trên windows-latest mỗi lần push và đang xanh, nhưng với CC_CHROME_SKIP_SERVICE=1 — nên chưa ai kiểm ba thứ: đăng ký scheduled task có cần nâng quyền không, có hiện cửa sổ console đen không, và task có thật sự ở trạng thái Running không. Side panel chat trên Windows cũng chưa chạy thật lần nào. macOS và Linux thì đã dùng thật.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload. Bỏ qua bước này nghĩa là âm thầm chạy extension bản cũ, kể cả khi server đã lên bản mới.
🔒 Bridge chỉ nghe trên 127.0.0.1. Không dữ liệu nào rời khỏi máy bạn, không cần đăng nhập claude.ai trong trình duyệt. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.✅ Windows đã được nghiệm thu trọn vẹn trên máy thật (Windows 11, PowerShell 5.1): cài không cần quyền admin, bridge tự lên và /health trả lời, extension nối được, tool trình duyệt chạy, khung chat side panel trả lời được, khởi động lại máy thì dịch vụ tự lên, và gỡ cài đặt sạch trong một lần chạy — task biến mất, tiến trình về 0, cổng được trả lại.
1.0.6 — gỡ cài đặt dừng được bridge
Bản phát hành đầu tiên. Mọi số hiệu 2.x/3.x trước đây chỉ tồn tại trong lịch sử git nội bộ, chưa từng phát hành ra ngoài.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Có gì trong bản này
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret — mô hình VPS cũ đã được gỡ hẳn khỏi code chứ không phải để lại như tuỳ chọn. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Sửa trong 1.0.6 (Windows)
Gỡ cài đặt không thật sự dừng bridge. Scheduled task chạy wscript.exe → bridge.cmd → node.exe, nên node là cháu và Stop-ScheduledTask không đụng tới nó. Task biến mất, script tưởng đã sạch, rồi xoá thư mục trong khi server vẫn sống — hỏng giữa chừng ở logs\bridge.err.log ("The process cannot access the file because it is being used by another process"), để lại đúng cái "bridge zombie" mà thứ tự các bước vốn được thiết kế để ngăn.
Giờ Stop-CcTask tìm bridge theo command line (Task Scheduler không cho biết PID của bất kỳ tiến trình nào trong chuỗi đó), diệt cả cây bằng taskkill /T /F, và chờ nó biến mất thật rồi mới trả về. uninstall.ps1 kiểm cả tiến trình lẫn task, và từ chối xoá bất cứ thứ gì nếu bridge còn sống.
Điều này cũng ảnh hưởng nâng cấp: bản cũ còn sống nghĩa là code bị thay dưới chân một tiến trình vẫn đang phục vụ phiên bản cũ trên cùng cổng.
Lưu ý
install.ps1/uninstall.ps1 trên windows-latest mỗi lần push và đang xanh, nhưng với CC_CHROME_SKIP_SERVICE=1 — nên chưa ai kiểm ba thứ: đăng ký scheduled task có cần nâng quyền không, có hiện cửa sổ console đen không, và task có thật sự ở trạng thái Running không. Side panel chat trên Windows cũng chưa chạy thật lần nào. macOS và Linux thì đã dùng thật.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload. Bỏ qua bước này nghĩa là âm thầm chạy extension bản cũ, kể cả khi server đã lên bản mới.
🔒 Bridge chỉ nghe trên 127.0.0.1. Không dữ liệu nào rời khỏi máy bạn, không cần đăng nhập claude.ai trong trình duyệt. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.
1.0.5 — hết cảnh báo bảo mật sai
Bản phát hành đầu tiên. Mọi số hiệu 2.x/3.x trước đây chỉ tồn tại trong lịch sử git nội bộ, chưa từng phát hành ra ngoài.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Có gì trong bản này
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret — mô hình VPS cũ đã được gỡ hẳn khỏi code chứ không phải để lại như tuỳ chọn. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Sửa trong 1.0.5
Server không còn báo sai rằng extension của bạn thiếu cách ly tab-group.
Việc đánh số lại về 1.0.0 đã âm thầm biến một cảnh báo bảo mật thành lời nói dối: server suy ra "extension có cách ly hay không" từ số phiên bản (major >= 3), nên mọi extension của dòng mới đều bị xếp vào loại cũ và mỗi lần kết nối lại in ra "isolation is NOT enforced, so every tool can reach every tab in that browser" — trong khi cách ly vẫn hoạt động bình thường.
Giờ extension tự khai năng lực đó trong gói hello; số phiên bản chỉ còn dùng làm dự phòng cho bản quá cũ để khai. Số phiên bản có thể khởi động lại từ đầu, năng lực thì không.
Lưu ý
install.ps1/uninstall.ps1 trên windows-latest mỗi lần push và đang xanh, nhưng với CC_CHROME_SKIP_SERVICE=1 — nên chưa ai kiểm ba thứ: đăng ký scheduled task có cần nâng quyền không, có hiện cửa sổ console đen không, và task có thật sự ở trạng thái Running không. Side panel chat trên Windows cũng chưa chạy thật lần nào. macOS và Linux thì đã dùng thật.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload. Bỏ qua bước này nghĩa là âm thầm chạy extension bản cũ, kể cả khi server đã lên bản mới.
🔒 Bridge chỉ nghe trên 127.0.0.1. Không dữ liệu nào rời khỏi máy bạn, không cần đăng nhập claude.ai trong trình duyệt. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.
1.0.4 — gói cài sạch cho Linux
Bản phát hành đầu tiên. Mọi số hiệu 2.x/3.x trước đây chỉ tồn tại trong lịch sử git nội bộ, chưa từng phát hành ra ngoài.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Có gì trong bản này
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret — mô hình VPS cũ đã được gỡ hẳn khỏi code chứ không phải để lại như tuỳ chọn. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Sửa trong 1.0.4
Cài trên Linux không còn in hàng nghìn dòng tar: Ignoring unknown extended header keyword 'LIBARCHIVE.xattr.com.apple.provenance' nữa.
Gói phát hành được dựng trên macOS, và bsdtar nhét xattr com.apple.provenance — thứ macOS đời mới tự dán lên file — vào một PAX header cho mỗi entry. COPYFILE_DISABLE không chặn được: biến đó chỉ quản cơ chế AppleDouble (._*), khác hẳn. Đo trên chính gói v1.0.3: 3971 entry, mỗi entry mang cả hai cách viết key. GNU tar vẫn giải nén đúng, chỉ là kêu ầm lên khiến bản cài trông như hỏng.
Cảm ơn @tung2212002 đã tìm ra và gửi PR #1.
Lưu ý
install.ps1/uninstall.ps1 trên windows-latest mỗi lần push và đang xanh, nhưng với CC_CHROME_SKIP_SERVICE=1 — nên chưa ai kiểm ba thứ: đăng ký scheduled task có cần nâng quyền không, có hiện cửa sổ console đen không, và task có thật sự ở trạng thái Running không. Side panel chat trên Windows cũng chưa chạy thật lần nào. macOS và Linux thì đã dùng thật.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload. Bỏ qua bước này nghĩa là âm thầm chạy extension bản cũ, kể cả khi server đã lên bản mới.
🔒 Bridge chỉ nghe trên 127.0.0.1. Không dữ liệu nào rời khỏi máy bạn, không cần đăng nhập claude.ai trong trình duyệt. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.
1.0.3 — cài được trên Windows
Bản phát hành đầu tiên. Mọi số hiệu 2.x/3.x trước đây chỉ tồn tại trong lịch sử git nội bộ, chưa từng phát hành ra ngoài.
Cài đặt
macOS / Linux
curl -fsSL https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.sh | bashWindows (PowerShell thường, không cần quyền admin)
irm https://github.com/TranHuyQn/cc-chrome-extension/releases/latest/download/install.ps1 -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Hai dòng, không phải irm … | iex: script bắt đầu bằng BOM UTF-8 (Windows PowerShell 5.1 cần nó để đọc đúng tiếng Việt), mà | iex lại đưa BOM vào parser như ký tự thường và chết ngay với The term '#' is not recognized.
Sau khi script chạy xong còn hai việc phải tự làm trong Chrome — script in ra đúng đường dẫn và URL cần dán: Load unpacked thư mục ~/.cc-chrome-bridge/extension, rồi dán ws://127.0.0.1:8787/ws?token=… vào popup của extension.
Có gì trong bản này
Chạy hoàn toàn trên máy bạn. Bridge nghe ở 127.0.0.1, chạy như một dịch vụ nền của riêng tài khoản bạn và tự lên khi đăng nhập — LaunchAgent (macOS), systemd --user (Linux), scheduled task (Windows). Không có server dùng chung, không tên miền, không pairing secret — mô hình VPS cũ đã được gỡ hẳn khỏi code chứ không phải để lại như tuỳ chọn. Không dữ liệu nào rời khỏi máy bạn.
Không tool nào cướp focus của bạn. Không handler nào activate tab hay kéo cửa sổ Chrome lên trước ứng dụng bạn đang dùng — kể cả switch_tab, giờ chỉ đổi tab bên trong cửa sổ của nó. Đây là khác biệt có chủ đích so với extension Claude in Chrome chính chủ, vốn kéo cửa sổ lên ở gần như mọi lời gọi tool (#39696, #39707). Một bài test quét toàn bộ handler canh điều này, và nó đọc danh sách handler trực tiếp từ code nên thêm handler mới mà quên là fail ngay.
Cách ly theo tab group. Claude chỉ thao tác được trên tab nằm trong nhóm của phiên đó. Kéo một tab vào nhóm chính là cách bạn cấp quyền cho nó.
Khung chat ngay trong Chrome (side panel), spawn claude trên máy bạn, tách biệt hoàn toàn khỏi plugin/hook/memory ở cấu hình cá nhân.
Sửa trong 1.0.2 và 1.0.3
Hai lỗi chỉ xuất hiện trên Windows, cùng chặn ở bước cài:
- 1.0.2 — gói phát hành chứa một symlink (
server/node_modules/.bin/node-which) màtar.exeđi kèm Windows không tạo được nếu chưa bật Developer Mode; nó bỏ dở cả lần giải nén. Đã bỏnode_modules/.binkhỏi gói — server không chạy shim nào trong đó. - 1.0.3 — ở lần cài đầu,
claude mcp removekhông có gì để gỡ nên ghi stderr và exit 1 (bình thường). Nhưng khi chuyển hướng stderr của lệnh native mà$ErrorActionPreference = 'Stop', PowerShell biến nó thành lỗi kết thúc script — installer chết ngay trước bước đăng ký MCP và in URL. Đã bọc mọi lời gọiclaudeđể không bao giờ ném.
Nếu bạn đã chạy bản 1.0.2 và thấy nó dừng ở dòng No MCP server named "chrome": bridge của bạn đã cài và đang chạy, chỉ thiếu đăng ký MCP. Chạy lại lệnh cài là xong, token cũ được giữ nguyên.
Lưu ý
✅ Windows đã chạy thật trên máy thật (Windows 11, PowerShell 5.1): cài xong không cần quyền admin, bridge tự lên và /health trả lời, extension nối được, tool trình duyệt chạy, khung chat side panel trả lời được, và sau khi khởi động lại máy thì dịch vụ tự lên trở lại. Chỉ còn gỡ cài đặt là chưa ai chạy thật.
~/.cc-chrome-bridge/extension trên đĩa, nhưng Chrome vẫn chạy code cũ cho tới khi bạn vào chrome://extensions bấm Reload. Bỏ qua bước này nghĩa là âm thầm chạy extension bản cũ, kể cả khi server đã lên bản mới.
🔒 Bridge chỉ nghe trên 127.0.0.1. Không dữ liệu nào rời khỏi máy bạn, không cần đăng nhập claude.ai trong trình duyệt. Đọc mục "Lưu ý bảo mật" trong README để biết chính xác Origin check bảo vệ được gì và không bảo vệ được gì.