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

@tbluhm82/o1mem

v0.1.11

Published

Instalador da busca semântica O(1)mem (memória contínua de projetos)

Readme

@tbluhm82/o1mem — instalador

Por quê um instalador npm?

O Runtime que indexa e busca a memória é Python (skillRag, modelos transformers). Mas Node é o padrão de instalação portável para ferramentas que cruzam sistemas: detecta Python, pede chave, instala dependencies, indexa projetos, registra o hook. Tudo num comando, zero risco de dependências enfiadas manualmente no meio.

Fluxo

npx @tbluhm82/o1mem install
  ✓ Verifica Python ≥ 3.8 + pip
  ✓ Lista projetos em ~/.claude/projects/*/memory/
  ✓ Você escolhe quais indexar (multi-select)
  ✓ Escolhe modo: local (grátis) | aprendizado (chave requerida)
  ✓ Se aprendizado: pede chave (Anthropic | OpenAI), valida formato, grava em ~/.claude/o1mem/.env
  ✓ pip install chromadb + sentence-transformers (~470 MB)
  ✓ Pergunta em qual pasta de projeto instalar as skills, copia
    organizador-mem/handover/retomar/lembrar para <pasta>/.claude/skills/
  ✓ Indexa cada projeto: "N chunks embedados"
  ✓ Registra hook no ~/.claude/settings.json (merge defensivo)
  ✓ Resumo: mostra o caminho exato de cada skill instalada
  ✓ Resumo: npx @tbluhm82/o1mem status

Um comando entrega as 3 partes: as skills (.claude/skills/), o hook de nudge (settings.json) e o índice semântico (~/.claude/o1mem/chroma/). Não sobrescreve skill já existente na pasta alvo — se já tem uma, mantém e avisa.

Modos

| Modo | O que faz | Custo | |---|---|---| | local (padrão) | Busca semântica pura (embeddings locais) | Grátis | | aprendizado | Semântica + destilação: LLM lê top-3 e cura 1 parágrafo por pergunta | Seus tokens |

Modo local é 100% offline, zero credenciais. Modo aprendizado requer API key (Anthropic ou OpenAI) — adicionado depois via npx @tbluhm82/o1mem config.

Quick Start (via npm, publicado)

npm install -g @tbluhm82/o1mem
o1mem install
o1mem status
o1mem query "sua pergunta" --project c--Projetos-meu-projeto

O comando instalado chama-se o1mem (definido em bin), independente do nome do pacote no registry.

Quick Start (a partir do repo, sem npm)

Clone o repo, instale e use:

git clone https://github.com/thiagobluhm/skills.git
cd skills/installer
npm link
o1mem status
o1mem query "sua pergunta" --project c--Projetos-meu-projeto

Subcomandos

npx @tbluhm82/o1mem install              # Setup completo
npx @tbluhm82/o1mem status               # Python ok? Mode? Índices? Daemon?
npx @tbluhm82/o1mem index --project MEUPROJ  # Re-indexa um projeto
npx @tbluhm82/o1mem query "topic" -k 5   # Busca
npx @tbluhm82/o1mem query "topic" --distill  # Idem, + destilação via LLM (se chave existe)
npx @tbluhm82/o1mem config               # Trocar mode/chave
npx @tbluhm82/o1mem uninstall            # Remove hook, opcionalmente apaga dados

Estrutura

installer/
  cli.js           # entry point (bin o1mem)
  package.json     # name: @tbluhm82/o1mem, bin: cli.js, zero deps
  lib/
    paths.js       # caminhos centralizados
    prompt.js      # readline helpers (input oculto, confirm, multi-select)
    preflight.js   # verifica Python, pip, projetos
    env.js         # escreve .env (chave) + config.json (mode/provider)
    pip.js         # instala chromadb + sentence-transformers
    hooks.js       # merge defensivo em settings.json
    index.js       # dispara primeira indexação
    skills.js      # copia organizador-mem/handover/retomar/lembrar para .claude/skills/
  skills/          # cópias empacotadas das SKILL.md (fonte: ../<nome>/SKILL.md)
    organizador-mem/SKILL.md
    handover/SKILL.md
    retomar/SKILL.md
    lembrar/SKILL.md
  test/
    hooks.test.js   # fixture: merge preserva hooks pré-existentes
    env.test.js     # fixture: chave nunca aparece em log
    skills.test.js  # fixture: copia, não sobrescreve, overwrite opcional

As skills/ empacotadas aqui são cópias — a fonte de verdade continua sendo ../organizador-mem/SKILL.md, ../handover/SKILL.md, ../retomar/SKILL.md na raiz do repo. Ao editar uma skill, sincronize a cópia antes de publicar uma nova versão.

Segurança

  • Chave jamais é logada: variável nunca entra em console.* nem é impressa.
  • Chave só em ~/.claude/o1mem/.env: nunca em config.json, nunca no repo.
  • POSIX: chmod 600 após escrever.
  • Windows: aviso que é arquivo do perfil do usuário, não compartilhe.
  • Merge defensivo em settings.json: se JSON está corrompido, aborta sem tocar. Se hook já existe, não duplica.

Desenvolvendo

cd skills/installer
node cli.js status              # sem instalar via npm
node cli.js --help

Para testar com fixture isolada:

export O1MEM_TEST_HOME=/tmp/o1mem-test
node cli.js status

Dependências

Zero em production (readline é nativo do Node). Repo Python (rag/) continua sendo o "runtime" — installer é só o shell de entrada.