CommunityRedacción y edicióngithub.com

alreshi/1password-cookies

Habilidad para almacenar cookies de sesión del navegador en 1Password, recuperarlas con una cuenta de servicio e inyectarlas en Chrome o Playwright.

¿Qué es 1password-cookies?

Esta habilidad permite a los agentes de IA manejar sesiones de navegador autenticadas de forma segura, almacenando las cookies en 1Password en lugar de en el repositorio git o en variables de entorno. El flujo de trabajo consiste en: 1) exportar cookies desde Chrome en formato JSON usando la extensión 'Get cookies.txt LOCALLY', 2) subirlas a 1Password mediante el CLI `op` con una plantilla temporal para evitar exponer secretos en argumentos de línea de comandos, 3) recuperarlas en tiempo de ejecución usando el SDK `@1password/sdk` con un token de cuenta de servicio (nunca codificado), y 4) inyectarlas en el navegador por origen, navegando primero a cada origen antes de llamar a `setCookie`. Soporta múltiples orígenes (útil para SSO), mapea campos como `sameSite`, `domain` y `secure` según la referencia incluida, y redacta estrictamente valores sensibles en registros y chats. Es compatible con Chrome, Playwright y cualquier navegador que soporte la API de cookies de CDP.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add alreshi/1password-cookies

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Cookies de sesión de 1Password

Guía para sesiones de navegador autenticadas cuyas cookies residen en 1Password, no en git. Léala antes de escribir código de sincronización, recuperación o inyección de cookies. Esquema de elementos, mapeo de Chrome y solución de problemas: references/REFERENCE.md.

Esta habilidad es un flujo de trabajo de cookie de sesión. No es el MCP de Entornos de 1Password (montajes .env). No almacene JSON de cookies como variables de Entorno.

No está terminado hasta que

Subida (JSON → 1Password)

  • Cookies exportadas con Get cookies.txt LOCALLY como JSON (no Netscape .txt)
  • Los archivos JSON de cookies están en gitignore
  • op ha iniciado sesión y la bóveda existe
  • Elemento creado o actualizado mediante --template (nunca valores secretos en argv)
  • Resumen registrado (conteos, nombres de sección, token presente/ausente solamente)

Recuperación (app / entorno del agente)

  • OP_SERVICE_ACCOUNT_TOKEN proviene del entorno, nunca codificado
  • Cada campo de cookie se analiza como JSON de objeto de cookie completo, con fallback de valor plano
  • Los registros muestran conteos / nombre de host / token presente — nunca valores

Inyección (navegador)

  • Cookies agrupadas por origen; la página navega a ese origen antes de setCookie
  • sameSite, domain / hostOnly, secure mapeados (ver references/REFERENCE.md)
  • Cookies que Chrome rechaza se omiten; el inicio de sesión se demuestra sin volcar cookies

No hacer

  • Confirmar JSON de cookie, ni pegar valores de cookie / token / cookieHeader en el chat
  • Poner secretos en argv de proceso (op item edit … value=secret)
  • Modificar elementos cuyo título sea Service Account Auth Token: …
  • Usar el MCP de Entornos de 1Password o montajes .env para sesiones de cookies
  • Registrar Set-Cookie, Authorization, access_token o valores de campo
  • Tratar un campo de cookie como una cadena simple cuando es JSON (dominio/ruta/caducidad deben sobrevivir)

Arquitectura

  1. El humano exporta cookies desde Chrome con Get cookies.txt LOCALLY como un array JSON de objetos de cookie.
  2. CLI (op item create|edit --template) inserta un elemento API_CREDENTIAL. Cada cookie es un campo oculto cuyo valor es el JSON completo del objeto de cookie.
  3. Las aplicaciones no supervisadas recuperan con @1password/sdk y un token de cuenta de servicio.
  4. La automatización del navegador inyecta cookies por origen, luego opcionalmente escribe un token de acceso en localStorage / sessionStorage.

op interactivo es para humanos (y agentes con CLI que ha iniciado sesión). El SDK de cuenta de servicio es para bots y scrapers.

Lista de verificación para nuevo proyecto

Copie esta lista y complétela antes de escribir código:

- [ ] Nombre de la bóveda
- [ ] Título del elemento (no un elemento de Service Account Auth Token)
- [ ] Una ruta de exportación JSON por origen desde Get cookies.txt LOCALLY (gitignorado)
- [ ] id de sección + etiqueta por archivo JSON
- [ ] Mapa de URL de origen (sufijo de dominio de cookie → https://host/)
- [ ] Nombre de entorno del token de cuenta de servicio (por defecto OP_SERVICE_ACCOUNT_TOKEN)
- [ ] Títulos de elementos protegidos a rechazar

Luego:

  1. Exporte cookies con Get cookies.txt LOCALLY como JSON. Gitignore esos nombres de archivo.
  2. Suba con scripts/sync-cookies.sh (cópielo en el proyecto o ejecútelo desde este directorio de habilidad).
  3. Copie scripts/fetch-session.js en la aplicación; establezca OP_VAULT_ID / OP_ITEM_ID desde op item get --format json (campos id). Prefiera entorno sobre codificación.
  4. Implemente la inyección usando el mapeo en references/REFERENCE.md. Demuestre inicio de sesión con URL / título / “tiene formulario de inicio de sesión” — no imprimiendo cookies.

Exportar cookies

Use la extensión de Chrome Get cookies.txt LOCALLY (fuente). Lee cookies en el dispositivo y no las envía fuera de la máquina.

  1. Inicie sesión en el sitio en Chrome (y el host de SSO, si la sesión abarca dos orígenes).
  2. Abra Get cookies.txt LOCALLY en esa pestaña.
  3. Establezca Formato de exportación en JSON — no Netscape (.txt) ni Cadena de encabezado.
  4. Haga clic en Exportar para el sitio actual. Use Exportar todas las cookies solo cuando sea necesario, luego divida el archivo por origen.
  5. Guarde el .json junto al conjunto de herramientas (gitignorado). Ese archivo es la entrada para scripts/sync-cookies.sh --json.

Repita en cada origen para el que necesite una sección de 1Password. Netscape cookies.txt no es una entrada --json válida.

Subir

Requiere op y python3. Los valores pasan por una plantilla temporal en modo -0600, luego la plantilla se elimina.

bash scripts/sync-cookies.sh \
  --vault TuBoveda \
  --title "cookies de ejemplo.com" \
  --hostname "ejemplo.com, sso.ejemplo.com" \
  --url https://ejemplo.com \
  --json ./ejemplo.com.json --section app:ejemplo.com \
  --json ./sso.ejemplo.com.json --section sso:sso.ejemplo.com

--section ID:ETIQUETA se aplica al anterior --json. Si se omite, el id de sección es un slug del nombre base del archivo y la etiqueta es el nombre del archivo.

--dry-run previsualiza. --include-empty almacena valores en blanco. --keep-missing deja campos de cookie que desaparecieron del JSON.

Si el título ya existe, actualice ese elemento. No cree un segundo elemento con el mismo título.

Recuperar

Las aplicaciones en tiempo de ejecución usan @1password/sdk, no op:

  1. createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })
  2. client.items.get(vaultId, itemId)
  3. Recolecte campos por sectionId (incluya una sección cookies heredada si está presente)
  4. JSON.parse(field.value) cuando parezca un objeto de cookie; de lo contrario { name: field.title, value: raw }
  5. Construya cookieHeader solo en memoria. Devuelva conteos en registros.

Campos integrados a leer cuando estén presentes: hostname, credential (token de acceso), username.

Inyectar

Para cada grupo de origen: goto(origen) → setCookie(...). Si el lote falla, establezca cookies una por una y omita las fallidas.

Cookies de SSO primero cuando el sitio redirige a través de SSO, luego el origen de la aplicación, luego cualquier origen restante. Después de que las cookies aterricen, goto al origen de la aplicación e inyecte credential en localStorage / sessionStorage como access_token cuando la aplicación lo espere.

Seguridad

  • Chat y registros: nombres, conteos, nombre de host, booleanos. Nunca valores.
  • Redacte claves que coincidan con cookie|access_token|authorization|password|credential|secret|set-cookie|cookieheader|bearer.
  • Los elementos de cuenta de servicio están protegidos contra escritura. Los scripts de sincronización de cookies y subida de secretos deben rechazar esos títulos.
  • El JSON de cookies en disco es una sesión activa. Manténgalo gitignorado; trate la bóveda como fuente de verdad después de la sincronización.

Skills relacionados