Feature request: allow Agent Window to be created already minimized (chrome.windows.create state)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 65/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
Research direction
Start by reading the window-creation helper in background.js and trace how session options reach it; the issue also identifies a tab-detach creation path with the same shape. Check the extension tests or existing coverage for window creation, then verify that a session configured to start minimized creates both windows minimized while page automation still works. The issue does not name a test file.
Written by the indexing model from the issue text.
Description
Summary
When a session is started with the default background mode (--no-focus), the Agent Window is still created as a normal, visible window. On a normal (non-fullscreen) desktop it paints its first frame — a white about:blank window — before any caller can react, so users see a brief white flash even when the automation immediately minimizes it.
Request: let the Agent Window be created in the minimized state, so it never exists as a visible normal window.
Environment
| OS | Windows 10 (18362) |
| Browser | Microsoft Edge |
| Extension | BrowserSkill 0.4.2 (Edge Add-ons build) |
| CLI | bsk session start (default --no-focus) |
Steps to reproduce
- Have a dark window in the foreground (e.g. a video player, windowed).
- Run
bsk session startwith the default background mode. - Watch the screen.
Expected: nothing appears; the Agent Window only exists in the taskbar.
Actual: a white window frame flashes for a moment before the caller minimizes it.
Root cause
chrome.windows.create is called without a state field, in the window-creation helper of background.js:
const win = await chrome.windows.create({
type: `normal`,
focused: t.focused ?? !1,
incognito: t.incognito ?? !1,
url: e,
...(t.size ? { width: t.size.width, height: t.size.height } : {})
});
The tab-detach path has the same shape:
const id = (await this.api.windows.create({
tabId: e, type: `normal`, focused: !1, ...(a.incognito ? { incognito: !0 } : {})
}))?.id;
focused: false only means "don't steal focus" — the window is still shown and composited. A caller can therefore only minimize it after windows.create resolves, and by then the first white frame may already have been presented. Measured latency from a polling caller is ~40 ms, which still lands on several vsync intervals and is clearly visible against dark content.
Proposed fix
chrome.windows.create already accepts state: "minimized":
const win = await chrome.windows.create({
type: `normal`,
focused: t.focused ?? !1,
state: t.minimized ? `minimized` : undefined, // <-- new
incognito: t.incognito ?? !1,
url: e,
...(t.size ? { width: t.size.width, height: t.size.height } : {})
});
Any of these interfaces would work:
- Extension setting — "Open Agent Window minimized" (best: users opt in once, no CLI change needed).
- CLI flag —
bsk session start --minimized, forwarded to the extension. - New default — when
--no-focusis used, create minimized unless--focusis explicitly requested.
Notes
- A minimized window keeps its renderer alive: navigating, DOM queries, screenshots and
syncall still work. Verified against 0.4.2 by minimizing an Agent Window externally and then driving the page normally. - The extension already performs the same transition elsewhere — the focus-restore helper after a task popup calls
windows.update(id, { state:minimized})— so the state change itself is known-good; only the create-time path is missing it. - If
stateat creation is not viable, awindows.update({state:'minimized'})issued immediately aftercreate(before returning) would also narrow the exposure window considerably, though create-timestateis the clean fix.
- Dominant language
- TypeScript
- Stars
- 10.1k
- Forks
- 732
- Avg merge
- 1d 21h
- Merged PRs (30d)
- 97
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Tencent/BrowserSkill
-
Recording drops clicks on links, filters and checkboxes that share a form with a search fieldPossibly taken @columbia11 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
Tencent/BrowserSkill#657 ·
Maintainers usually reply within 1 day
-
录制 contenteditable 多行内容时 fill 值丢失换行Possibly taken @tlysanhuo claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Tencent/BrowserSkill#594 ·
Maintainers usually reply within 1 day
-
录制遗漏 input[type=submit] 和 input[type=reset] 的真实点击Possibly taken @tlysanhuo claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Tencent/BrowserSkill#593 ·
Maintainers usually reply within 1 day
-
[Bug] dsh-plugin skill: the injection-warning sentence added for #286 is itself a prompt-injection match, so the skill body gets blockedMay be free again A pull request for this issue was closed without being merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Tencent/BrowserSkill#390 · 1 comment ·
Maintainers usually reply within 1 day
-
调试网络录制将 application/soap+xml 响应正文误判为 non_text 丢弃Possibly taken @kesmeey claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 35/100
Tencent/BrowserSkill#648 ·
Maintainers usually reply within 1 day
All issues in Tencent/BrowserSkill
Similar issues
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
Maintainers usually reply within 2 days
-
Choosing a folder while continuing an Antigravity session submits a history fork the runtime rejectsOpen
Difficulty 2/5 1-3 hours Newbie friendliness 87/100
-
ai-handle
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
nextlevelbuilder/dewee-web-v2#138 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
NEARBuilders/citynode.app#512 ·
Maintainers usually reply within 1 day
-
needs triage
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day