Ghostlight

org.sylin由 sylin.org 發布v2.0.2更新於 Oct 30, 2026

Visible local browser automation in signed-in Chromium, with optional policy and audit.

已驗證STDIO僅桌面瀏覽器自動化開發者工具

概覽

AI 產生的概覽

Ghostlight 讓 AI 助理在你已登入的 Chromium 瀏覽器中操作一個可見的分頁群組:導覽、讀取頁面、點擊、填表、上傳檔案並診斷失敗。

可以做什麼
  • 管理分頁與導覽:列出、聚焦或關閉分頁,開啟網址,上一頁、下一頁或重新載入,縮放與調整視窗。
  • 讀取頁面並定位控制項:可見文字、頁面結構、表單控制項的選項與限制、依文字尋找目標、截圖。
  • 執行互動:點擊、懸停、捲動、拖曳、輸入文字、按鍵、一次填寫最多 30 個表單欄位、上傳檔案、處理 JavaScript 對話框、等待頁面條件。
  • 執行腳本與多步驟流程,錄製一段簡短 GIF,並讀取按需開啟的主控台與網路觀測。
  • 說明目前生效的策略權限,以及某次呼叫為何被拒絕。
適用情境
當任務需要用到你已登入的頁面時適用,例如讀取頁面、填寫表單、處理檔案或彈出視窗,或排查失敗的網頁流程,而且你希望在自己的瀏覽器中觀看並隨時中斷這些操作。
執行需求
需在 Windows 或 Linux 本機安裝(目前不支援 macOS),並具備 Chrome、Edge、Brave 或 Chromium 125 以上版本、Ghostlight 瀏覽器擴充功能以及一個 MCP 用戶端。npx 安裝方式需要 Node.js,一行指令安裝則不需要。未宣告需要帳號、API 金鑰或環境變數。
安裝前請注意
助理可在你已登入的瀏覽器工作階段中操作,包括填寫表單、上傳本機檔案、執行頁面 JavaScript 與送出資料。輸入憑證需要你的明確指示以及每次請求的確認。未設定策略時,允許存取 HTTP(S) 位址,包括 localhost 與回送位址;選用策略層只能收緊權限。關閉分頁需同時取得策略授權與瀏覽器本身的保留分頁設定。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Ghostlight,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Ghostlight mascot: a small sky-blue pixel-art ghost holding a glowing lantern]

Ghostlight MCP

Give your agent a visible place in the browser you already use.

[CI] [npm] [release] [MCP registry]

[Ghostlight reading and completing a launch brief in a real browser with visible page, field, and click feedback]

A launch brief moves from empty form to ready for review, in full view.

Install Ghostlight | See where it fits | Installation guide | Trust Center

Your agent needs a page you are signed in to. The usual answer is a second, empty browser that knows none of your sessions, driven by a model that has to learn Chrome internals to get anything done.

Ghostlight gives it a tab group inside the Chromium you already have open. The work happens in front of you: watch it, pause it, take the wheel, or end the session. The model says what it wants, and Ghostlight does the browser part.

Ask an agent to read a page, complete a form, handle a file, follow a popup, or investigate a failed web workflow. Ghostlight carries the task across tabs and browser changes while keeping the browser work and its controls on your machine.

A light left burning, so the halls stay safe.

Where it stands today

The published release is 2.0.2. It is available as the GitHub release v2.0.2, the npm package [email protected] and the MCP Registry record org.sylin/ghostlight 2.0.2, with the Chrome Web Store adapter v2.0.1, all observed on 2026-10-29 and recorded in docs/public-status.json and the release custody record.

What you get

  • 23 catalog tools: 22 browser tools covering tabs, navigation, reading a page, screenshots, semantic clicks and hovers, form input, file upload, scripts, waits, short flows, dialogs, and diagnostics, plus one policy tool that explains the authority in force. One call carries the intent; Ghostlight performs the browser steps behind it.
  • One truthful answer per call: what happened, what changed in the browser, what is ready, and whether running it again is safe. Ghostlight writes that answer, never the page, and adds at most two recovery steps of its own. When an effect is uncertain it says so rather than guessing, and never proposes a replay that could submit a form twice.
  • A desktop workbench in the tray that shows work as it happens.
  • Your machine, and only your machine. Ghostlight runs as you, reaches your browser over local IPC, and keeps a payload-free local record. No account, no telemetry, no activation service, no update ping, no hosted control plane, and no second hidden browser. The only network traffic is the browsing you asked for.

Your first five minutes

You need Chrome, Edge, Brave, or Chromium 125+ and an MCP client. The npx installer needs Node.js; the one-line installers do not. The service you run afterward is native Rust. Agent setup supports Windows and Linux; macOS is not supported yet.

  1. Install Ghostlight. It registers the MCP clients it finds and opens the Ghostlight window on its setup steps:

    sh
    npx -y ghostlight install

    Without Node.js, use the one-liner for your system. On Windows, in PowerShell:

    powershell
    irm https://sylin.org/ghostlight/get.ps1 | iex

    On Linux:

    sh
    curl -fsSL https://sylin.org/ghostlight/get.sh | sh
  2. Add Ghostlight in Browser from the step the window shows. It lists the browsers on your computer. Add opens the Chrome Web Store listing in that browser, which is also where Edge gets the extension. If the browser already holds the extension, the row reads Open instead.

  3. Ask your agent:

    Open sylin.org/ghostlight/demo/desk and ring the bell.

If the install named an agent to restart, restart it first; the install says so. There is no other restart step.

A sky-blue Ghostlight group appears in your browser, the agent rings the bell on a demo page that submits and stores nothing, and the window shows Ready. That one prompt proves the whole connection. For a read-only first task instead, ask:

Open https://example.com/ in a new Ghostlight tab, summarize the page, and tell me which tab you used. Do not click, type, submit, or change the page.

When a session ends, the tabs Ghostlight keeps open leave its group and stay where they are, so no idle group is saved to your bookmarks bar. Next time, the same agent gets its group back and reuses a tab Ghostlight opened for it on that site and left open, so repeated work stops littering your tab strip. It never takes over a tab you opened, or a tab another agent left open. After a browser restart, an agent's remembered tab is used only when the browser still shows that tab at the page Ghostlight last saw there; otherwise the agent opens a fresh tab. The one case it cannot tell apart is a tab of yours that the restarted browser gave the same id and that shows the same address, such as a restored copy of the agent's page.

If a step needs attention, run:

sh
ghostlight doctor

If you installed with npm and ghostlight is not on your PATH, npx -y ghostlight doctor runs the same check.

doctor checks the client entry, local service, browser connection, and extension, then names the next action. The installation guide covers targeted clients, source builds, updates, uninstall, and symptom-led recovery.

From one page to a whole workflow

Ghostlight is at its best when browser work has a thread to follow:

  • Pick up where you are signed in. Open an application in the Chromium profile you chose and work with the session already there. Credentials stay with the browser.
  • Finish the interaction. Navigate, fill forms, upload files, resolve dialogs, wait for page state, and carry results from one step into the next.
  • Follow the browser. Keep working when a site opens a supported child tab or when a known workspace changes underneath the task.
  • See what failed. Bring page state, console messages, and network requests together so the next debugging step comes from evidence instead of guesswork.

Use the same browser capability from any agent Ghostlight sets up (the installation guide lists every one), or from another compatible stdio MCP client. Agents receive structured page reads, exact element references, bounded action receipts, and specific recovery guidance. They can ask the policy tool to explain the authority in force at any moment.

The browser stays a shared space

Ghostlight works in a dedicated sky-blue tab group inside the browser window you chose. Page scans, clicks, typing, drags, and longer phases share one visual language, so the movement on screen has an explanation.

Pause the workspace, take over for a delicate step, or stop it. Move its tabs where you want them; Ghostlight follows the workspace instead of snapping it back. Ordinary tabs remain outside the agent's owned set: a tab you opened is never reused, regrouped, or navigated, even on the same site, and loading a page yourself in a tab Ghostlight left open takes that tab back.

Closing a tab needs two independent yes votes: the orchestrator's authority, which needs Action on that tab's site, and the browser's own preserve-tabs setting, which ships on. That keeps the evidence of what happened in front of you. Closing a tab yourself always works.

Personal use is complete without a policy manifest. Start with the full browser engine and get useful work done. When a workflow needs stronger boundaries, grant read, action, write, and execute by domain. Add sacred domains and structured audit, and preview a policy against your own history before you apply it, with Check in the window or ghostlight policy simulate, while the browser experience stays the same. The governance guide shows the operating model, and the Trust Center carries the security, privacy, continuity, deployment, and procurement evidence.

What it will and will not do

With no policy configured, HTTP(S) browsing is allowed, including localhost, loopback, and link-local destinations. Host restrictions belong to policy. Non-HTTP schemes and stale handles remain restricted. Optional local and managed policy layers can only take capability away.

Credential input requires your explicit instruction. Fill and typing accept a per-request acknowledgement from the agent; without it, the call returns guidance without pausing the session. That acknowledgement cannot override policy or your Pause and End session controls. Repeated policy refusals also leave later permitted work available; a tab that policy refused a landing on stays held until the agent moves it to an allowed page or closes it. Browser messages and animations remain passive, with no buttons or interference with your input; interactive runtime control belongs in the workbench.

The audit record holds identifiers, decisions, and content-minimized measurements: which tool ran, whether authority allowed it, how long it took, and what it did -- 3 fields, 1,240 words, 1280x720. The site an action landed on is named, because that answers where your agent went and is already in your own tab strip. Paths, queries, fragments, page text, field values, screenshots, selectors, and dialog text never enter it. docs/guides/siem-integration.md is the exact record shape.

The full catalog is in docs/1.0/LANGUAGE.md, and the exact policy schema is in docs/guides/governance-configuration.md.

The workbench

Open the tray icon and you land At a glance: the action running right now in full, finished actions stacking below it, newest first, each in Ghostlight's own words -- "Opened example.com.", "Read 1,240 words.", "Filled 3 fields and submitted the form." -- never the page's. Beside it sit Integrations, which connects the coding clients you already have and merges into their configuration with a backup (goose and Continue get Copy setup to paste, never an edit); Status, which answers whether the stack is healthy; Policy, which states what the current rules allow, one plain line per capability, naming the layer that decided each one; Settings, a tab with a rail for this screen, who else can watch, browser work, notifications and diagnostics, and where you can quit Ghostlight; and About, which carries the promise underneath it: it never phones home.

Pause and resume sit in the header beside the lamp on every tab, the same control the tray offers. They work with or without a connected browser, because Ghostlight itself holds the pause. When configured policy is not valid, Ghostlight refuses all browser work and the header never reads Ready. It reads Policy not valid and points to Policy, unless a more urgent state such as Not connected or Paused comes first. A broken edit to a local policy that is already in force is different: the last valid version stays in force, Status warns about the edit, and the header does not change. Closing the window leaves the icon in the tray and Ghostlight running, and the first time it says so in one notification. The service serves with no display, so if the window program cannot start, or the computer has no display, web view or tray, Ghostlight keeps working and ghostlight status says why there is no window.

Build it from source

Rust 1.89 or newer, plus Chromium 125 or newer for browser validation.

sh
cargo build --workspace

Three executables land side by side:

  • ghostlight-service -- the orchestrator and the workbench it serves on loopback. It links no UI toolkit and runs with no display;
  • ghostlight -- the edge: the MCP stdio relay (ghostlight mcp), the Chromium native-messaging relay, and the front door that hands every other command to the service;
  • ghostlight-desktop -- the shell: the window, the tray and the notices. On Linux building it needs the WebKitGTK 4.1, GTK 3 and AppIndicator development packages; running the service does not.

Deploy a build with pwsh scripts/dev-loop.ps1: it installs your build into ~/.ghostlight/bin as the development channel, because a build directory never serves on its own. docs/DEV-LOOP.md covers the loop, browser registration and the full validation loop.

After setup there is no startup ritual: launching a connected MCP client or Chromium demand-starts Ghostlight when it is not already running.

On Windows, WinGet is another way to install: winget install Sylin.Ghostlight, then run ghostlight install once. The self-contained Claude Desktop MCPB is a third. Every route puts the three executables in ~/.ghostlight/bin: WinGet only delivers them, and ghostlight install copies them there. After winget upgrade, the next ghostlight install carries the newer version there. An older copy never replaces a newer one. WinGet serves 2.0.0 until a newer manifest is accepted into winget-pkgs; the one-line installer serves 2.0.2.

Current release and compatibility

Platform state. Windows (x64) and Linux (x86_64, with glibc or musl, such as Alpine) are the supported 2.0 platforms. 2.0.2 was tested before publication on Windows, and its release workflow installs it from the release bundle on Ubuntu and Alpine. Its public install was proven on Windows on 2026-10-29. macOS has no artifact yet.

Extension state. The Chrome Web Store listing serves adapter v2.0.1, compatible with service 2.0.x under adapter protocol 4. The service gives the extension the page code it runs, so a 2.0 service update needs no extension update or reload. A 1.x extension updates once to 2.0.

The service and Chrome adapter are delivered separately with compatible mechanisms. The compatibility map is authoritative, and the public status file owns current release, platform, and store state.

The MCP edge negotiates a compatible stdio revision per client; the compatibility map records them. See the changelog for release changes and upgrade consequences.

How Ghostlight fits together
text
MCP Client <--stdio--> ghostlight mcp <--relay--> ghostlight-service    <--relay--> ghostlight (browser) <--native messaging--> Extension <--CDP--> Browser

The orchestrator makes every product decision and owns everything the model reads. The edge carries protocol and relay lifecycle, nothing more. The extension owns Chromium, the page, and the drawing, and never policy. Adding a feature normally means changing the orchestrator alone; that is a contract the shores are held to, not a happy accident.

The desktop is a presentation adapter in a process of its own, not a second service. It has no GUI protocol, command runner, filesystem access, or browser primitives. ADR-0102 records why. docs/SPEC.md gives the deeper governance model.

Choose your next step

I want to...Start here
Install, verify, update, recover, or uninstallInstallation guide
Let an AI client perform setupAgent install guide
Try a complete visible workflowLaunch brief demo
Build from source and test locallyBuild from source
Understand which browser operating model fitsDecision aid
Add boundaries or review trust evidenceGovernance guide and Trust Center
Read the product promise and journeysdocs/1.0/INTENT.md
Read the complete model-facing languagedocs/1.0/LANGUAGE.md
Read the architecture and acceptance contractsdocs/1.0/ARCHITECTURE.md, docs/1.0/ACCEPTANCE.md
See where the candidate standsdocs/STATUS.md
Contribute code, docs, testing, or ideasContributing guide
Read every decision, and whyADR index

License and continuity

Ghostlight is entirely free and open source: everything in this repository, including the governance module, is Apache-2.0 OR MIT. LICENSING.md explains what that covers. The former open-core split and its paid tiers were withdrawn by ADR-0140.

License state never reaches runtime -- there is no license check to reach it. An installed copy keeps working on its own terms, with no check-in and no expiry. The Continuity Promise carries the durable version of that.

Questions and contributions

GitHub Issues for reproducible defects, GitHub Discussions for questions and ideas, and [email protected] for security, licensing, or anything that should not be public.

I build Ghostlight in partnership with AI coding agents. CONTRIBUTING.md explains the current boundaries and the gates every change passes.

來源:README.md,提交 c6b4eb9

工具

23

browser_tabs

Browser tabs

List, focus, or close this session's tabs. List gives fresh handles from the live browser; with no tab yet it needs none and names those connected.

輸入參數tabactiontimeout_ms

browser_navigate

Navigate

Go to an HTTP(S) URL. Reuses the obvious tab; new_tab true opens a new one.

輸入參數taburl必填reusebrowsernew_tabtimeout_msbeforeunload

browser_history

Browser history

Go back or forward, or reload. A new document invalidates target_ and view_ handles, so collect fresh ones.

輸入參數tabaction必填timeout_msbypass_cache

browser_window

Browser window

Set a tab's zoom or resize its browser window. Either invalidates view_ handles, so take a fresh screenshot before coordinate work.

輸入參數tabwidthactionheightpercenttimeout_ms

browser_read

Read page

Read visible page text, including open shadow roots and frames, or one target. To act, get handles from browser_inspect or browser_find.

輸入參數tabmodetargetmax_charstimeout_msvisual_settle

browser_inspect

Inspect page

Inspect controls or page structure for fresh target_ handles. Scope document returns the outline as a bounded tree, without handles. Form controls also carry their value and what they accept: options, type, limits, hint and group.

輸入參數tabrootscopemax_depthmax_itemstimeout_msvisual_settle

browser_find

Find on page

Find targets by visible or accessible text and get fresh target_ handles. Fastest when you know the label. Option text finds its dropdown.

輸入參數tabtext必填scopetimeout_msmax_resultsvisual_settle

browser_screenshot

Take screenshot

Capture the viewport, full page, one target, or a magnified region; returns a view_ handle for coordinate calls.

輸入參數xytabviewwidthheighttargetfull_pagetimeout_msvisual_settle

browser_click

Click

Click a target_ handle, a control found by selector, or a point in a view_ screenshot. Needs action; a selector lookup or expect check also needs read. Prefer a target.

輸入參數xytabviewbuttonexpecttargetselectormodifierstimeout_msclick_countvisual_settle

browser_scroll

Scroll

Scroll the page (default down, medium), reveal a target_, or wheel-scroll at a point in a view_ screenshot.

輸入參數xytabviewticksamounttargetdirectiontimeout_msvisual_settle

browser_hover

Hover

Hover a target_ handle or a point in a view_ screenshot.

輸入參數xytabviewtargettimeout_msvisual_settle

browser_fill_form

Fill form

Fill 1 to 30 fields in one call; needs write even for unsent drafts. Nothing submits unless submit_target names the control. A value a control cannot take is refused before any field changes, with what it accepts. For credentials, set user_authorized_credentials only on the user's explicit instruction.

輸入參數tabexpectfields必填timeout_mssubmit_targetvisual_settleuser_authorized_credentials

browser_type_text

Type text

Type through real keyboard input. Needs action; a selector lookup or expect check also needs read. Prefer browser_fill_form for plain values. For credentials, set user_authorized_credentials only on the user's explicit instruction.

輸入參數tabtext必填expecttargetfocusedselectortimeout_msclear_firstvisual_settleuser_authorized_credentials

browser_press_key

Press key

Send a named key or literal character, optionally at a target_. Needs action; an expect check also needs read. For Control+A send key a with modifiers Control; strokes sends keys in order.

輸入參數keytabexpectrepeattargetstrokesmodifierstimeout_msvisual_settle

browser_drag

Drag

Drag between two target_ handles or two points in one view_ screenshot.

輸入參數tabviewend_xend_ystart_xstart_ytimeout_mssource_targetvisual_settledestination_target

browser_wait

Wait

Wait for one observable page condition. A false condition is a failed result, not an unknown effect.

輸入參數tabvaluetargetselectorconditiontimeout_msvisual_settle

browser_dialog

Browser dialog

Read the open JavaScript dialog with status, then accept, dismiss, or answer it; it blocks its page.

輸入參數tabtextactiontimeout_ms

browser_upload

Upload files

Attach local paths, inline files, or one captured image to a file input, or drop the image at a point in a view_. Needs write; a selector lookup also needs read.

輸入參數xytabviewfilespathstargetselectortimeout_mssource_imagevisual_settle

browser_execute

Execute JavaScript

Run JavaScript in the page main world. It may read, mutate, or navigate; prefer a semantic tool. A script that is one expression is awaited, so a promise it evaluates to resolves.

輸入參數tabscript必填timeout_msvisual_settlemax_result_chars

browser_flow

Run flow

Run 1 to 20 tool calls. tab defaults tab-scoped steps; a step's own tab wins. Later arguments may reference earlier results. Stops at the first failed step by default.

輸入參數tabsteps必填on_errortimeout_ms

browser_record

Record browser

Record browser work as a short memory-only GIF. One recording per session; save stops an active capture.

輸入參數tabactiontargetdownloadtimeout_ms

browser_diagnose

Diagnose page

Read opt-in console and network observations for a tab. Observation begins with the first call, so reload or reproduce to capture earlier activity. Sensitive request data is never collected.

輸入參數tabafterlimitmatchdetailsourcetimeout_ms

policy_explain

Explain policy

Explain the authority in force: one line per capability with its deciding layer, the rules behind them, permanent ceilings, and each layer's document. Available under every authority; use it to learn why a call was refused or what is allowed.

輸入參數timeout_ms

版本歷史

9
  1. v2.0.2最新Oct 30, 2026
  2. v2.0.1Oct 22, 2026
  3. v2.0.0Oct 20, 2026
  4. v1.3.14Oct 3, 2026
  5. v1.3.13Oct 2, 2026
  6. v1.3.12Sep 30, 2026
  7. v1.3.10Sep 25, 2026
  8. v1.3.8Sep 17, 2026
  9. v1.3.7Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分