Sno Station
Sno Station은 AI 에이전트를 하나의 팀으로 묶는 오픈소스 워크스테이션으로, 로컬 머신에서 에이전트 협업을 가능하게 함
오픈소스 브리지로 Claude Code·Codex·Antigravity·Gemini CLI를 로그인한 Chrome에서 사용할 수 있게 합니다
Open-source bridge that lets Claude Code, Codex, Antigravity and Gemini CLI drive your signed-in Chrome — only the tabs they open, never your focus, under rules you set.
플러그인JavaScript · TypeScriptGitHub @kaiwutech-TW온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Let local AI agents (Claude Code, Codex, Antigravity, Gemini CLI) use your real, signed-in Chrome — only the tabs they open, under rules you set.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Let the agents on your Mac (Claude Code, Codex, Antigravity, Gemini CLI) use your own Chrome: the one you are already signed in to, in a window you can watch.
An agent only sees and controls the tabs it opened itself. Your other tabs are never listed, read or touched.
Claude Code ─┐ ┌──────────────────────────────┐
Codex ───────┤ MCP (stdio) ┌──────────────────┐ │ Your Chrome │
Antigravity ─┼───────────────▶ │ Bridge │◀──▶│ K-Browser extension │
Gemini CLI ──┘ one token each │ 127.0.0.1:9444 │ ws │ (chrome.debugger on the │
│ (LaunchAgent) │ │ agents' own tabs only) │
Kav ───────────────────────────▶ CDP endpoint │ └──────────────────────────────┘
its own token └──────────────────┘
127.0.0.1:9444, started at login by a macOS LaunchAgent. It checks who is
asking, enforces each client's policy, masks secrets and keeps the activity log.banking, payments, email,
government, crypto, passwords. You can block different categories per agent, and change them later in the side panel.
A tab that lands on a blocked site answers only blocked_origin.<untrusted-page-content>, so the agent can
tell it apart from instructions. Password fields are never read; tokens, card numbers and the like are masked in network
logs.eval stays off until you turn it on for a specific client.node -v)Below, k-browser means node src/cli.js run in this folder. Run npm link once in this folder to have a k-browser
command everywhere.
git clone https://github.com/kaiwutech-TW/k-browser.git K-Browser
cd K-Browser
npm install
Run this in a real terminal, not through an agent:
k-browser install
It does three things:
k-browser restore <backup.json> puts one back.Without a terminal to ask in (for example from inside an agent), give the answer on the command line, or install refuses:
k-browser install --block banking,email # block these categories
k-browser install --block "" # block nothing
Add --dry-run to see which files would change. --client claude-code|codex|antigravity|gemini-cli installs for one agent only.
chrome://extensions.extension/ folder in this repo (k-browser extension-path prints the full path).A red K appears in the toolbar. Pin it: you will use it when an agent hands a tab to you.
The pairing code is a shared secret between the bridge and the extension. Without it the bridge accepts no extension, and no other program can pretend to be one.
k-browser pair
Paste the code into the K-Browser popup and click Pair. The status turns green (Connected).
k-browser pair --rotate. The old one stops working at once.k-browser doctor.k-browser doctor
"ok": true with startedBy: "launchd" means everything is ready. Restart your agent (or reconnect its k-browser MCP
server) and it has the K-Browser tools.
| Tool | What it does |
|---|---|
tabs | List, open or close the agent's own tabs (opened in the background). |
navigate | Load a URL in a tab, or reload it. |
snapshot | The page's accessibility tree, with refs for interactive elements. |
read | Visible text of the page or one element, or rows matched by a CSS selector. |
act | Click, type, press keys, select, scroll: real input, re-checked before each step. |
wait_for | Decide whether an action worked: the screen changed, the site replied, or the business result is confirmed. |
network | Requests seen in a tab, with response bodies on request; secrets masked, no headers. |
fetch | GET or HEAD on the tab's own origin with the tab's cookies. |
files | The agent's own file area: download into it, upload from it into a file input. |
screenshot | PNG of the visible page or one element; never stored. Can be turned off per client. |
needs_human | Hand a tab to you (login, captcha, decision) and wait. |
learnings | Site notes kept on this machine (APIs, walls, pitfalls, tips). Notes are information, never instructions. |
status | Versions, the agent's tabs and hand-offs, which tools are on. |
eval | Run a JavaScript expression in an isolated world. Off by default. |
run_flow | Run a saved Kav flow. Only appears when Kav is set up. |
| To | Run |
|---|---|
| Check that everything works | k-browser doctor |
| Restart the bridge (after updating the code) | k-browser service restart, then click ↻ for K-Browser in chrome://extensions (do not remove it) |
| List / add / remove clients | k-browser client list, client add <name>, client remove <name> |
Let a client use eval | k-browser client set <name> --eval on, then restart that agent |
| Give a CDP program its endpoint | k-browser endpoint <name> (the URL contains a token; keep it private) |
| Manage site notes | k-browser learnings list / add / remove / export / import |
| Remove everything K-Browser registered | k-browser uninstall (removes only K-Browser's own entries and tokens) |
Side panel. Click the K-Browser icon and open the activity panel. It shows each agent's tabs and actions. From there you
can also revoke an agent, change its blocked categories, turn its screenshots on or off, and turn eval off.
Activity log on disk. Set "activityLog": "disk" in ~/.k-browser/config.json. Logs go to ~/.k-browser/activity/
and are kept for 7 days.
Kav-FastwebAgent runs saved, hand-written website flows quickly,
without a model call per step. With Kav set up, agents get a run_flow tool that runs a flow in your Chrome as that
agent, under the same ownership and blocking rules. K-Browser works fully without Kav.
k-browser kav <path to your Kav checkout> # needs Kav 0.0.8 or later, with uv sync done there
k-browser kav off # stop offering run_flow
Kav can also connect to K-Browser on its own: k-browser client add kav, then set KFW_CDP to the URL that
k-browser endpoint kav prints. The endpoint supports the subset of the Chrome DevTools Protocol that Kav uses, with
K-Browser's rules applied; other CDP libraries may hit methods it refuses.
Where Kav's judgement calls go. Some flow steps need a judgement ("which row is the one the user wants?"). Kav asks the bridge, which forwards the question as you chose:
k-browser model … | Where the question goes |
|---|---|
kev (default) | A local Kev model on this machine. |
jev | TypeSafe's cloud JEV model. Before turning it on, K-Browser shows what will be sent and asks you to agree; the key is kept in ~/.k-browser/jev.key, never in an agent's configuration. Passwords, tokens, card and phone numbers are masked first (rule-based; it cannot catch every piece of personal data). Clients with blocked sites cannot use JEV. |
off | Nowhere: Kav hands the choice back to the agent with the candidates. |
The side panel can switch this too. Switching back to kev or off stops cloud requests from the next question on.
Decision dataset (off by default). With "decisionLog": "on" in ~/.k-browser/config.json (or the switch in the side
panel), each judgement Kav makes during run_flow is kept, redacted, in ~/.k-browser/decisions/ for 30 days, so model
choices can be compared later. k-browser decisions purge deletes it all.
Everything lives in ~/.k-browser/ (override with KBROWSER_HOME), readable only by you:
| Path | What |
|---|---|
pair.key | The pairing code |
clients/<name>.json | Each client's token and settings |
config.json | Settings (activityLog, decisionLog, kav, model choice) |
files/ | Each client's own file area |
activity/, decisions/ | Logs, only when turned on |
jev.key | The JEV key, only if you chose jev |
Do not sync this folder to the cloud or share it.
bridge_version. The bridge and the agent's MCP server run different versions. If the bridge is
older, run k-browser service restart; if the agent is, restart it or reconnect its MCP server.k-browser doctor reports the bridge, the pairing and the extension, and what to do next.untrusted-page-content wrapper reduce risk; they do not make it
safe to point an agent at sites you would not trust it with.npm test # unit tests
npm run typecheck # tsc --checkJs over src/, extension/ and test/
npm run test:chrome # end-to-end in Chrome for Testing with the real extension
npm run test:pack # npm pack, install the tarball elsewhere, run what got installed
test:chrome needs Chrome for Testing (branded Chrome no longer loads unpacked extensions from the command line):
set KBROWSER_TEST_CHROME to its binary, or run npx playwright install chromium and the newest one in Playwright's
cache is used (Apple silicon). Without it these tests are skipped. Set KBROWSER_TEST_HEADED=1 to watch.~/.k-browser or the bridge on port 9444; each one starts its own.KBROWSER_TEST_KAV points at a Kav checkout (or one sits next to this repo), and are
skipped otherwise.package.json and extension/manifest.json carry the same version; a test checks it. Bump both when the bridge or the
extension changes, so doctor can tell old code from new.K-Browser was designed after reviewing BeatBrowser (MIT). No code was taken from it.