agentleFS
timurgaleevtimurgaleev/vibestack/skills/setup-browser-cookies/SKILL.md

setup-browser-cookies

Skill8 starsChanged 6 months agoMITView on GitHub

Import cookies from your real Chromium browser into the headless browse session to QA authenticated pages.

33 other projects use a version of this, 9 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use ios-clean, ios-fix and 5 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • Saqlain-811Skill

    ios-clean

    Remove the DebugBridge SPM package and all #if DEBUG wiring from an iOS app. (gstack)

    Also in 5 projects that use this

  • Saqlain-811Skill

    ios-fix

    Autonomous iOS bug fixer. (gstack)

    Also in 5 projects that use this

  • ShreyRaviSkill

    setup-gbrain

    Set up gbrain for this coding agent: install the CLI, initialize a local PGLite or Supabase brain, register MCP, capture per-remote trust policy. One command from zero to "gbrain is running, and this agent can call it." Use when: "setup gbrain", "connect gbrain", "start gbrain", "install gbrain", "configure gbrain for this machine". (gstack)

    Also in 6 projects that use this

  • ShreyRaviSkill

    sync-gbrain

    Keep gbrain current with this repo's code and refresh agent search guidance in CLAUDE.md. Wraps the gstack-gbrain-sync orchestrator with state probing, native code-surface registration, capability checks, and a verdict block. Re-runnable, idempotent. Use when: "sync gbrain", "refresh gbrain", "re-index this repo", "gbrain search isn't finding things". (gstack)

    Also in 6 projects that use this

  • bastosSkill

    ios-design-review

    Review iOS app UI/UX design quality using Apple's design principles and the Liquid Glass-era design language from WWDC25/26. Use when asked for a design review, UX critique, visual design assessment, or evaluation of an app's interface quality, design intent, alignment with the new Apple design system, or usability. Triggers: "design review", "UX review", "visual design critique", "review the UI", "does this design work", "evaluate this interface", "design feedback", "Liquid Glass review".

    Also in 5 projects that use this

  • seek888Skill

    open-gstack-browser

    Launch GStack Browser — AI-controlled Chromium with the sidebar extension baked in. Opens a visible browser window where you can watch every action in real time. The sidebar shows a live activity feed and chat. Anti-bot stealth built in. Use when asked to "open gstack browser", "launch browser", "connect chrome", "open chrome", "real browser", "launch chrome", "side panel", or "control my browser". Voice triggers (speech-to-text aliases): "show me the browser".

    Also in 7 projects that use this

  • +1 more from Saqlain-811

The file

We split this skill into the rules it gives an agent

12 rules. 1 is common, 4 are distinctive, and 7 are very specific to this project.

  • 1

    Common

    Most of the 26 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 7

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If this session was compacted, the copy of this skill in context may be cut off.

    line 15
  2. Very specific:

    Read ${CLAUDE_SKILL_DIR}/SKILL.md from disk and resume at the step you are on.

    line 16
  3. Distinctive:

    Use when asked to "import cookies", "login to the site", or "authenticate the browser".

    line 20
  4. Common:

    Import logged-in sessions from your real Chromium browser into the headless browse session.

    line 48
  5. Very specific:

    Run cookie-import-browser to detect installed browsers and open the picker UI

    line 53
  6. Very specific:

    Every Bash call starts a fresh shell, so $B is unset in every later block.

    line 72
  7. Very specific:

    If NEEDS_SETUP, stop and tell the user the browse binary could not be found or could not start — node is missing, or first-run setup was …

    line 76
  8. Very specific:

    If the user names a domain directly (e.g., /setup-browser-cookies github.com), skip the UI — but only with a browser the user named.

    line 108
  9. Very specific:

    Never run $B cookies or $B storage to "show what was imported", and never put a cookie value, token, password, or session detail into the …

    line 133
  10. Distinctive:

    Keep three states apart, and name the one you are in:

    line 137
  11. Distinctive:

    Stop at Not checked unless the user asked you to check.

    line 145
  12. Distinctive:

    Only domain names and cookie counts are shown in the UI — no cookie values are exposed

    line 152

“Common” is measured: kept by at least 6 in 10 of the 26 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

If this session was compacted, the copy of this skill in context may be cut off. Read ${CLAUDE_SKILL_DIR}/SKILL.md from disk and resume at the step you are on.

When to invoke

Use when asked to "import cookies", "login to the site", or "authenticate the browser".

Preamble

eval "$("${VIBESTACK_HOME:-$HOME/.vibestack}/bin/vibe-slug" 2>/dev/null)" 2>/dev/null || SLUG="unknown"
_LEARN_FILE="${VIBESTACK_HOME:-$HOME/.vibestack}/projects/${SLUG:-unknown}/learnings.jsonl"
if [ -f "$_LEARN_FILE" ]; then
  _LEARN_COUNT=$(wc -l < "$_LEARN_FILE" 2>/dev/null | tr -d ' ')
  echo "LEARNINGS: $_LEARN_COUNT entries loaded"
  if [ "$_LEARN_COUNT" -gt 5 ] 2>/dev/null; then
    "${VIBESTACK_HOME:-$HOME/.vibestack}/bin/vibe-learnings-search" --limit 5 2>/dev/null || true
  fi
else
  echo "LEARNINGS: none yet"
fi

{{include lib/snippets/session-host.md}}

{{include lib/snippets/decision-brief.md}}

{{include lib/snippets/working-protocols.md}}

{{include lib/snippets/state-protocols.md}}

Setup Browser Cookies

Import logged-in sessions from your real Chromium browser into the headless browse session.

How it works

  1. Find the browse binary
  2. Run cookie-import-browser to detect installed browsers and open the picker UI
  3. User selects which cookie domains to import in their browser
  4. Cookies are decrypted and loaded into the Playwright session

Steps

1. Find the browse binary

B="${CLAUDE_SKILL_DIR:-$HOME/.claude/skills/setup-browser-cookies}/../browse/bin/vibe-browse"
[ -x "$B" ] || B="$(command -v vibe-browse || true)"
if [ -n "$B" ] && [ -x "$B" ] && [ "$("$B" status 2>/dev/null)" != "BROWSE_NOT_AVAILABLE" ]; then
  echo "READY: $B"
  echo "BROWSE_BIN: $B"
else
  echo "NEEDS_SETUP"
fi

Every Bash call starts a fresh shell, so $B is unset in every later block. A block that runs a browse command starts with B='<BROWSE_BIN>': replace <BROWSE_BIN> with the path printed on the BROWSE_BIN: line.

If NEEDS_SETUP, stop and tell the user the browse binary could not be found or could not start — node is missing, or first-run setup was declined.

Cookie import needs the full browse daemon; the stateless fallback shim cannot decrypt a real browser's cookie store. If any command below answers NOT_SUPPORTED:cookie-import-browser, that is what happened: tell the user the full daemon is not running in this checkout and stop, rather than reporting a half-import that never occurred. Point them at /connect-chrome, which imports cookies into the shim from a Chrome started with a remote debugging port.

2. Open the cookie picker

B='<BROWSE_BIN>'
$B cookie-import-browser

This auto-detects installed Chromium browsers and opens an interactive picker UI in your default browser where you can:

  • Switch between installed browsers
  • Search domains
  • Click "+" to import a domain's cookies
  • Click trash to remove imported cookies

Tell the user: "Cookie picker opened — choose the browser, the profile, and the domains you want to import, then tell me when you're done."

The choice of browser, profile and domains is the user's. Never pick one for them, and never treat whichever browser the CLI falls back to as consent. A profile you could not read is unknown, not empty.

3. Direct import (alternative)

If the user names a domain directly (e.g., /setup-browser-cookies github.com), skip the UI — but only with a browser the user named. If they did not name one, ask via AskUserQuestion which browser to import from — this path skips the picker, so you have no detected list: name the supported ones (Chrome, Chromium, Arc, Brave, Edge, Comet) and let the user answer; never fill one in yourself. The import is scoped to the page the daemon is on, so navigate to the domain first:

B='<BROWSE_BIN>'
$B goto https://github.com
$B cookie-import-browser <browser> --domain github.com

<browser> is the one the user chose. --profile takes a profile directory (Default, Profile 1), not a display name; omit it only when the user's browser has a single relevant profile, otherwise use the picker. --all imports every non-expired cookie from the browser — run it only when the user asked for exactly that.

4. Report honestly

Report what the import itself returned: the receipt line (Imported N cookies for <domain> from <browser>, plus any failed to decrypt count) or the picker's per-domain counts, and say plainly when an import was partial, zero, or errored.

Never run $B cookies or $B storage to "show what was imported", and never put a cookie value, token, password, or session detail into the transcript or a report. Counts and domain names are the whole summary.

Keep three states apart, and name the one you are in:

  • Not checked — cookies were copied; nobody looked at whether they sign you in.
  • Not verified — you checked, and the target did not show a signed-in state.
  • Verified — a page on the target showed positive signed-in evidence (an account-only page rendered instead of the sign-in wall).

An import count, a zero-error import, or an HTTP 200 never proves a login. Stop at Not checked unless the user asked you to check.

Notes

  • On macOS, the first import per browser may trigger a Keychain dialog — click "Allow" / "Always Allow"
  • On Linux, v11 cookies may require secret-tool/libsecret access; v10 cookies use Chromium's standard fallback key
  • Cookie picker is served on the same port as the browse server (no extra process)
  • Only domain names and cookie counts are shown in the UI — no cookie values are exposed
  • The browse session persists cookies between commands, so imported cookies work immediately
  • Imported cookies apply to the whole browser context: every tab, and any agent paired into this daemon, sends them

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.