tabctl
Original:🇺🇸 English
Translated
Manage and analyze Edge tabs and groups with tabctl. Use when asked to list, search, analyze stale or duplicate tabs, generate reports, or organize tabs. Prefer read-only commands and only run mutating actions with explicit targets and confirmation.
2installs
Sourceekroon/tabctl
Added on
NPX Install
npx skill4agent add ekroon/tabctl tabctlTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Tab Control
Use tabctl to inspect and analyze tabs safely, then perform targeted actions only when requested.
GraphQL API (preferred for agents)
Use for field-selective reads and mutations in a single roundtrip.
Use to discover available types and fields.
tabctl querytabctl schemaRead examples
bash
# Get only tabId and url for all windows
tabctl query '{ windows { windowId tabs { tabId url } } }'
# Paginated tabs (default limit 20)
tabctl query '{ tabs { items { tabId url title } total hasMore } }'
# Next page
tabctl query '{ tabs(offset: 20) { items { tabId url } total hasMore } }'
# Get tabs in a specific window
tabctl query '{ tabs(windowId: 123) { items { tabId title url } total } }'
# Get groups with tab counts
tabctl query '{ groups { groupId title tabCount } }'
# Get a single tab by ID
tabctl query '{ tab(id: 456) { tabId url title active groupTitle } }'Mutation examples
bash
# Close tabs and get remaining tabs in one call
tabctl query 'mutation { closeTabs(tabIds: [123, 456], confirm: true) { txid closedTabs remainingTabs { tabId url } } }'
# Open tabs and get the new tab IDs
tabctl query 'mutation { openTabs(urls: ["https://example.com"], group: "Research") { tabs { tabId url } } }'
# Refresh tabs
tabctl query 'mutation { refreshTabs(tabIds: [123]) { refreshedTabs } }'Introspection
bash
tabctl schema # Full SDL
tabctl query '{ __type(name: "Tab") { fields { name } } }' # Discover Tab fieldsSafety
- Prefer read-only commands: list, analyze, inspect, report, query (without mutations).
- Never run or
archive --allin a normal session.close --apply - Only mutate explicit targets (,
--tab,--group) and use--windowfor close.--confirm - Respect policy: protected tabs are excluded.
- Use screenshots only when you need visual context.
Discover commands
- Use (or
tabctl help) to discover commands and flags.tabctl help --json - For specific commands, use .
tabctl <command> --help
Common tasks (CLI)
- List tabs in a window:
tabctl list --window <id|active|last-focused> - List ungrouped tabs:
tabctl list --ungrouped - List with pagination:
tabctl list --all --limit 10 --offset 0 - Close tabs:
tabctl close --tab <id1> --tab <id2> --confirm - Refresh a tab:
tabctl refresh --tab <id> - Generate a report: (add scope flags as needed)
tabctl report --format md - Get page metadata:
tabctl inspect --tab <id> --signal page-meta - Get page metadata after JS loads:
tabctl inspect --tab <id> --signal page-meta --wait-for settle - Extract links safely (absolute http(s) only):
tabctl inspect --tab <id> --selector '{"name":"links","selector":"a[href]","attr":"href-url","all":true}' - Capture visual context when needed:
tabctl screenshot --tab <id> --mode full - Undo most recent change:
tabctl undo --latest - Undo by txid: (from
tabctl undo <txid>)tabctl history --json | jq -r '.[] | .txid'
Narrow scope
Use one or more of: , , , , .
If scope is unclear, ask for it before running mutating commands.
--window--group--group-id--tab--ungroupedTroubleshooting
- Check profile health:
tabctl doctor - Auto-repair broken profiles and resync extension files:
tabctl doctor --fix - Verify connection + runtime version sync:
tabctl ping --json - Read version state only from /
pingsurfaces (not fromversion/openoutput payloads).list - For local release-like sync checks during development, run a scoped command with (example:
TABCTL_AUTO_SYNC_MODE=release-like).TABCTL_AUTO_SYNC_MODE=release-like tabctl list --all
Output flags
- Use for JSON output (list/analyze/inspect/etc.).
--json - is only for
--format(e.g.,report).tabctl report --format md
Wait modes for inspect/screenshot
Use to control when inspection runs:
--wait-for- – wait for page load event (may miss JS-set titles)
load - – wait for DOMContentLoaded
dom - – wait for URL and title to stabilize (500ms quiet period); use for JS-heavy pages or freshly opened tabs
settle - – no waiting (default)
none
Example for newly opened tabs:
bash
tabctl open --url "https://example.com" --json
tabctl inspect --tab <new_tab_id> --wait-for settle --wait-timeout-ms 10000 --json