CommunityEscrita e Ediçãogithub.com

alreshi/1password-cookies

Habilidade para agente: armazenar cookies de sessão do navegador no 1Password, buscar com uma conta de serviço e injetar no Chrome ou Playwright.

O que é 1password-cookies?

Esta habilidade implementa um fluxo completo de gerenciamento de cookies de sessão autenticada usando o 1Password como repositório seguro, em vez de armazená-los em git. Ela permite exportar cookies do Chrome (usando a extensão 'Get cookies.txt LOCALLY' em formato JSON), fazer push desses cookies para um cofre do 1Password como campos ocultos de itens do tipo `API_CREDENTIAL`, e depois buscar esses cookies em aplicações headless usando o SDK `@1password/sdk` com um token de conta de serviço. O fluxo de injeção suporta Chrome e Playwright, garantindo que cookies sejam agrupados por origem, com navegação para a origem correta antes de usar `setCookie`, e mapeamento adequado de propriedades como `sameSite`, `domain`/`hostOnly` e `secure`. A habilidade enfatiza segurança rigorosa: nunca expor valores de cookies em logs ou chat, nunca usar valores secretos em argumentos de linha de comando, e nunca modificar itens de token de conta de serviço. Plataformas suportadas incluem CLI `op` para interação humana e SDK para automação, com scripts auxiliares para push (`sync-cookies.sh`) e fetch (`fetch-session.js`).

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add alreshi/1password-cookies

Installed? Explore more Escrita e Edição skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Cookies de sessão 1Password

Playbook para sessões autenticadas de navegador cujos cookies residem no 1Password, não no git. Leia isto antes de escrever código de sincronização, busca ou injeção de cookies. Esquema do item, mapeamento do Chrome e solução de problemas: references/REFERENCE.md.

Esta habilidade é um fluxo de trabalho de cookie de sessão. Não é o MCP de Ambientes 1Password (montagens .env). Não armazene JSON de cookies como variáveis de Ambiente.

Não concluído até

Push (JSON → 1Password)

  • Cookies exportados com Get cookies.txt LOCALLY como JSON (não Netscape .txt)
  • Arquivos JSON de cookies estão no .gitignore
  • op está autenticado e o cofre existe
  • Item criado ou atualizado via --template (nunca valores secretos em argv)
  • Resumo registrado (contagens, nomes de seção, token presente/ausente apenas)

Busca (aplicação / runtime do agente)

  • OP_SERVICE_ACCOUNT_TOKEN vem do ambiente, nunca hardcoded
  • Cada campo de cookie analisado como JSON completo de objeto de cookie, com fallback para valor simples
  • Logs mostram contagens / hostname / token-presente — nunca valores

Injeção (navegador)

  • Cookies agrupados por origem; a página navega para essa origem antes de setCookie
  • sameSite, domain / hostOnly, secure mapeados (consulte references/REFERENCE.md)
  • Cookies que o Chrome rejeita são ignorados; o login é comprovado sem despejar cookies

Não faça

  • Comprometer JSON de cookies, ou colar valores de cookie / token / cookieHeader no chat
  • Colocar segredos no argv do processo (op item edit … value=secret)
  • Modificar itens cujo título é Service Account Auth Token: …
  • Usar o MCP de Ambientes 1Password ou montagens .env para sessões de cookie
  • Registrar Set-Cookie, Authorization, access_token ou valores de campo
  • Tratar um campo de cookie como string simples quando ele é JSON (domínio/caminho/expiração devem ser preservados)

Arquitetura

  1. Humano exporta cookies do Chrome com Get cookies.txt LOCALLY como um array JSON de objetos de cookie.
  2. CLI (op item create|edit --template) faz upsert de um item API_CREDENTIAL. Cada cookie é um campo oculto cujo valor é o JSON completo do objeto de cookie.
  3. Aplicações não monitoradas buscam com @1password/sdk e um token de conta de serviço.
  4. Automação do navegador injeta cookies por origem, e opcionalmente escreve um token de acesso em localStorage / sessionStorage.

op interativo é para humanos (e agentes com CLI autenticada). SDK de conta de serviço é para bots e scrapers.

Checklist de novo projeto

Copie esta lista e preencha antes de escrever código:

- [ ] Nome do cofre
- [ ] Título do item (não um item Service Account Auth Token)
- [ ] Um caminho de exportação JSON por origem do Get cookies.txt LOCALLY (no .gitignore)
- [ ] Id da seção + rótulo por arquivo JSON
- [ ] Mapa de URL de origem (sufixo de domínio do cookie → https://host/)
- [ ] Nome do ambiente do token de conta de serviço (padrão OP_SERVICE_ACCOUNT_TOKEN)
- [ ] Títulos de itens protegidos a recusar

Então:

  1. Exporte cookies com Get cookies.txt LOCALLY como JSON. Coloque esses nomes de arquivo no .gitignore.
  2. Faça push com scripts/sync-cookies.sh (copie para o projeto ou execute a partir deste diretório de habilidade).
  3. Copie scripts/fetch-session.js para a aplicação; defina OP_VAULT_ID / OP_ITEM_ID a partir de op item get --format json (campos id). Prefira ambiente a hardcoding.
  4. Implemente a injeção usando o mapeamento em references/REFERENCE.md. Prove login com URL / título / “tem formulário de login” — não imprimindo cookies.

Exportar cookies

Use a extensão do Chrome Get cookies.txt LOCALLY (fonte). Ela lê cookies no dispositivo e não os envia para fora da máquina.

  1. Faça login no site no Chrome (e no host SSO, se a sessão abranger duas origens).
  2. Abra Get cookies.txt LOCALLY naquela aba.
  3. Defina Export Format como JSON — não Netscape (.txt) e nem Header String.
  4. Clique em Export para o site atual. Use Export All Cookies apenas quando necessário, depois divida o arquivo por origem.
  5. Salve o .json ao lado do kit de ferramentas (no .gitignore). Esse arquivo é a entrada para scripts/sync-cookies.sh --json.

Repita em cada origem para a qual você precisa de uma seção do 1Password. Netscape cookies.txt não é uma entrada --json válida.

Push

Requer op e python3. Os valores passam por um template temporário com modo 0600, e então o template é excluído.

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

--section ID:LABEL aplica-se ao anterior --json. Se omitido, o id da seção é um slug do nome do arquivo e o rótulo é o nome do arquivo.

--dry-run pré-visualiza. --include-empty armazena valores em branco. --keep-missing mantém campos de cookie que desapareceram do JSON.

Se o título já existir, atualize esse item. Não crie um segundo item com o mesmo título.

Busca

Aplicações em runtime usam @1password/sdk, não op:

  1. createClient({ auth: process.env.OP_SERVICE_ACCOUNT_TOKEN, integrationName, integrationVersion })
  2. client.items.get(vaultId, itemId)
  3. Colete campos por sectionId (inclua uma seção cookies legada se presente)
  4. JSON.parse(field.value) quando parecer um objeto de cookie; senão { name: field.title, value: raw }
  5. Construa cookieHeader apenas em memória. Retorne contagens nos logs.

Campos internos a ler quando presentes: hostname, credential (token de acesso), username.

Injeção

Para cada grupo de origem: goto(origin) → setCookie(...). Se o lote falhar, defina os cookies um por um e pule falhas.

Cookies SSO primeiro quando o site redireciona através de SSO, depois a origem da aplicação, depois quaisquer origens restantes. Após os cookies serem aplicados, goto a origem da aplicação e injete credential em localStorage / sessionStorage como access_token quando a aplicação esperar.

Segurança

  • Chat e logs: nomes, contagens, hostname, booleanos. Nunca valores.
  • Remova chaves que correspondam a cookie|access_token|authorization|password|credential|secret|set-cookie|cookieheader|bearer.
  • Itens de conta de serviço são protegidos contra escrita. Scripts de sincronização de cookies e push de segredos devem recusar esses títulos.
  • JSON de cookies em disco é uma sessão ativa. Mantenha no .gitignore; trate o cofre como fonte da verdade após a sincronização.

Habilidades Relacionadas