npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

iuri-cli

v0.1.6

Published

Agente/CLI estilo Claude Code que dirige ChatGPT/Gemini/Grok/DeepSeek pelo navegador (sem API paga), com TUI, modo plano, imagens e modelo auxiliar local.

Downloads

1,174

Readme

iuri

Usa o ChatGPT web (sua conta, login Google) como um CLI estilo claude/codex — sem a API, sem custo por token. Um daemon mantém um Chrome logado (oculto) e expõe uma API HTTP local; o comando iuri é o cliente.

Automatiza a UI web do ChatGPT (Playwright). Fere o ToS da OpenAI — uso pessoal, baixo volume. Use por sua conta e risco.

Pré-requisitos

  • Node.js 24+ (o código é TypeScript; o Node 24 roda .ts nativo) e Google Chrome instalados.
  • Uma conta no ChatGPT (login feito uma vez via iuri login).

Instalação (inclusive em outro PC)

Pela npm (recomendado — como qualquer pacote):

npm i -g iuri-cli   # publicado no npm; o comando instalado é `iuri`
iuri login          # abre o Chrome p/ você logar (só na 1ª vez)
iuri "olá"          # o comando `iuri` funciona de qualquer pasta

Instala do registry (tarball flat, com o dist/ já compilado) — requer Node 24 + Chrome.

Ou clone + instalador (bom p/ desenvolver no repo):

git clone https://github.com/iurivilarinho/cli-ia.git
cd cli-ia
./install.ps1     # checa Node/Chrome, faz npm install + npm link
iuri login

Sem o script, manualmente: npm installnpm linkiuri login. O dist/ (JS compilado) já vem versionado, então não precisa buildar — o npm link aponta o iuri pro dist/bin/iuri.js (o Node não roda .ts sob node_modules, por isso o JS pronto).

Desenvolvendo: o iuri global (via npm link) aponta pro dist/. Depois de editar src/, rode npm run build (ou deixe npm run watch numa aba) pra recompilar o dist/ — ou use npm run dev / node bin/iuri.ts pra rodar o source .ts direto sem build. A sessão fica salva em profile*/ (gitignored, por PC/usuário — cada máquina loga a sua). Credenciais de banco (db_query) ficam em db.json (gitignored — nunca versione).

Gestão (modelos, padrão, status)

iuri --provider gemini "..."   # usa outra IA nesta chamada
iuri config default gemini     # define a IA padrão (salvo em ~/.iuri/config.json)
iuri config                    # ver padrão + IAs disponíveis
iuri status                    # painel: quais IAs estão no ar/logadas
iuri status --watch            # painel atualizando ao vivo
iuri stop                      # encerra o daemon ativo

Uso

iuri                       # agente interativo: lê/edita arquivos, roda comandos
iuri "tarefa"              # tarefa única no modo agente (em terminal)
iuri --chat "pergunta"     # chat puro (sem ferramentas), com streaming
echo dados | iuri "..."    # chat puro com stdin junto
iuri --continue "..."      # emenda na última conversa (chat puro)
iuri -p "..."              # modo print (sem streaming, p/ scripts)
iuri --schema f.json "tx"  # extrai JSON validado contra um JSON Schema
iuri login                 # abre a janela do Chrome p/ (re)autenticar
iuri --provider gemini ... # escolhe a IA: chatgpt (padrão)·gemini·deepseek·grok
iuri status [--watch]      # painel de status de todos os provedores
iuri --status              # estado do daemon ativo (JSON)
iuri stop                  # encerra o daemon
iuri help                  # ajuda

Provedores (multi-IA)

Cada provedor tem daemon, porta e perfil próprios. Escolha com --provider <id>. Trocar de provedor é também a melhor recuperação se uma conta/IP cair no anti-ban.

| Provedor | Status | |---|---| | ChatGPT | ✅ testado (logado) e funciona anônimo | | Gemini | ✅ testado — funciona até anônimo (sem login) | | DeepSeek | ✅ testado (logado) — input/resposta ok (envia com Enter) | | Grok | ✅ testado (logado) — o consentimento de cookies interceptava o envio; resolvido pelo predismiss (aceita cookies + remove o SDK + passa o portão de idade) |

Seletores ficam em src/providers/<id>.js — é lá que se conserta se a UI mudar.

Contas e modo anônimo

Cada combinação provedor + conta/anônimo tem seu próprio login (perfil separado).

iuri login                     # loga a conta padrão do provedor atual
iuri logout                    # desloga (apaga a sessão) — depois 'iuri login' p/ OUTRA conta
iuri --account trabalho "..."  # usa uma conta nomeada (perfil próprio); troque à vontade
iuri --account trabalho login  # loga uma conta específica nesse slot
iuri --anon "..."              # MODO ANÔNIMO: usa sem login, enquanto o provedor deixar
iuri reset-anon                # esgotou o anônimo? zera (cookies + user-agent) → quota nova

A troca de sessão é automática: pedir --anon ou --account X reinicia o daemon na sessão certa. Recuperação quando esgota: reset-anon (nova identidade anônima), trocar de conta (--account), ou trocar de IA (--provider).

Anti-ban

Automação de UI fere o ToS — não há garantia contra ban. Mitigações: digitação humanizada + jitter, gap mínimo entre envios (IURI_MIN_GAP_MS), teto/h (IURI_MAX_PER_HOUR), e detecção de limite → back-off (recua em vez de martelar). Se cair: troque de provedor/conta ou IP. O Chrome roda off-screen (não headless — headless apanha do Cloudflare).

Segurança em operações de máquina

O agente pode instalar/limpar/baixar/configurar via PowerShell, mas comandos destrutivos/de sistema (netsh, Remove-Item -Recurse, format, reg delete...) SEMPRE pedem confirmação — mesmo em --bypass. Para liberar em modo não-interativo: IURI_ALLOW_DANGER=1 (use com cuidado).

O daemon sobe sozinho na primeira chamada (não precisa iniciar nada). A sessão fica salva em profile/ — só precisa de iuri login na 1ª vez ou quando a sessão expirar.

Modo agente

Em terminal interativo, iuri vira um agente como o Claude Code: o modelo pede ações num protocolo JSON e o CLI executa de verdade no seu PC, em loop, até a resposta final. Ferramentas:

| Ferramenta | Args | O que faz | |---|---|---| | list_dir | path | lista arquivos/pastas | | read_file | path, start?, end? | lê arquivo (intervalo de linhas numeradas) | | glob | pattern | lista caminhos por padrão | | grep | pattern, path, glob?, flags? | busca regex no conteúdo (pula node_modules/.git) | | write_file | path, content | cria/sobrescreve arquivo inteiro | | edit_file | path, old, new, replace_all? | troca trecho único (com checagem de unicidade) | | edit_lines | path, start, end, new | troca linhas N..M (confiável p/ código) | | delete | path, recursive? | apaga arquivo/pasta | | git | args (lista), cwd? | roda git (status/log/diff não pedem confirmação) | | run | command | executa no PowerShell | | db_query | database, sql, server?, connection? | roda SQL num banco e devolve as linhas |

Bancos de dados (db_query)

Credenciais ficam em db.json (local, gitignored) — o modelo só manda o SQL, nunca vê senha. Para os bancos configurados, o agente usa só {database, sql} e a ferramenta abre o túnel SSH sozinha quando o Postgres não é exposto.

Para um banco ad-hoc, o agente passa connection inline:

// Postgres/MySQL (com túnel SSH opcional)
{"engine":"postgres","host":"localhost","port":5432,"user":"u","password":"p",
 "ssl":true,"ssh":{"host":"1.2.3.4","user":"root","password":"..."}}
// SQLite
{"engine":"sqlite","file":"C:/caminho/base.db"}

Engines nativos: postgres, mysql/mariadb, sqlite. Outros (mssql, etc.) carregam o driver sob demanda (npm install <driver>). SQL que altera dados (insert/update/delete) pede confirmação [s/N].

Para adicionar um banco fixo, edite db.json:

{
  "servers": {
    "meu-server": {
      "ssh": {"host":"1.2.3.4","user":"root","password":"..."},
      "pg":  {"host":"localhost","port":5432,"user":"dev","password":"...","ssl":true},
      "databases": ["app1","app2"]
    }
  },
  "default": "meu-server"
}
  • --agent força o modo agente (mesmo fora de terminal); --chat/-p voltam ao chat puro, sem ferramentas.
  • Caminhos usam barra normal (C:/dev). O agente vê o sistema de arquivos real.

Permissões (estilo Claude Code)

Ações que mexem no disco/banco (write_file, edit_file, delete, run, git mutante, db_query não-leitura) pedem confirmação 3-vias:

permitir rodar: npm install?
  [s] só agora · [a] sempre nesta sessão (run) · [N] não ›
  • [a] lembra aquele tipo de ação pelo resto da sessão (não pergunta de novo).
  • Bypass (nunca pergunta): inicie com iuri --bypass (ou --yes), use /bypass no REPL, ou simplesmente diga "não precisa pedir permissão" / "pode fazer sem pedir" — ele entende e para de perguntar (/bypass off ou "volte a pedir" desliga).

Codar

Rode iuri dentro da pasta do projeto — o agente carrega o contexto automaticamente:

  • CLAUDE.md / AGENTS.md / .claude/CLAUDE.md / .cursorrules e segue as convenções;
  • lista as skills em .claude/skills/ (lê o SKILL.md da relevante);
  • conhece os scripts do package.json.

Fluxo de código embutido: ler → editar cirúrgico (edit_lines) → rodar testes/build (run) → corrigir até passar. O agente é instruído a verificar com npm test/build antes de dizer que terminou, e a escrever testes quando pedido. Caminhos podem ser relativos à pasta atual.

Contexto (memória da conversa)

No REPL o agente mantém o contexto entre as mensagens — pode dizer "agora implemente aquilo", "e a população dela?", etc., que ele lembra do que veio antes. /new começa uma conversa limpa.

Mudou o código do agente/ferramentas? Reabra o iuri — o REPL carrega o código uma vez no início da sessão.

Integração com outras apps

Bata direto na API HTTP local (http://127.0.0.1:4179):

| Rota | Corpo | Retorno | |------|-------|---------| | GET /status | — | { ready, state, loggedIn, mode } | | POST /chat | { message, continue? } | { reply } | | POST /chat/stream | { message, continue? } | SSE: event: delta / done | | POST /extract | { text, schema } | { data, attempts } | | POST /login | — | { ok, state } | | POST /shutdown | — | { ok } |

Estado da sessão (state): ready · login (deslogado) · challenge (Cloudflare) · loading. Quando não está ready, /chat e /extract respondem 409 com mensagem clara; rode iuri login.

Arquitetura

bin/iuri.js        CLI cliente (node:http, encerra limpo no Windows)
src/daemon.js     servidor HTTP local + fila serial (1 prompt por vez)
src/browser.js    Chrome persistente; modos hidden/visible/headless; getState()
src/chat.js       enviar / esperar stream / ler resposta (ask, askStream)
src/extract.js    texto -> JSON validado (ajv) com retry
src/selectors.js  seletores do DOM — ÚNICO ponto a corrigir se a UI mudar
schemas/          JSON Schemas dos extratores

Modos do navegador

  • hidden (padrão): Chrome real fora da tela — passa pelo Cloudflare e não mostra janela. É o que faz parecer "headless" sem ser bloqueado.
  • visible: janela normal (usado no iuri login).
  • headless: sem janela de verdade — costuma ser bloqueado pelo Cloudflare, evite. (IURI_CLI_MODE=headless para forçar.)

Notas

  • É automação da UI web → fere o ToS da OpenAI. Uso pessoal, baixo volume.
  • Se a OpenAI mudar a interface, ajuste src/selectors.js.
  • Iniciar no boot (opcional): crie uma tarefa no Agendador de Tarefas que rode node C:\dev\iuri\src\daemon.js no logon. Sem isso, o auto-spawn já cobre.