██████╗ █████╗ ██████╗ ███████╗██████╗ ██╗ ███████╗███████╗███████╗
██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗██║ ██╔════╝██╔════╝██╔════╝
██████╔╝███████║██████╔╝█████╗ ██████╔╝██║ █████╗ ███████╗███████╗
██╔═══╝ ██╔══██║██╔═══╝ ██╔══╝ ██╔══██╗██║ ██╔══╝ ╚════██║╚════██║
██║ ██║ ██║██║ ███████╗██║ ██║███████╗███████╗███████║███████║
╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝╚══════╝
Seu assistente pessoal, 100% offline. Zero nuvem. Zero telemetria. Zero concessões.
Paperless é uma LLM local e privada via CLI, escrita em C# .NET 10, que roda inteiramente na sua máquina — sem precisar de internet, sem enviar dados para servidores externos, sem assinaturas.
A ideia nasceu de uma necessidade simples: ter um assistente inteligente que conhece seus arquivos, seus projetos e suas tarefas — e que responde perguntas sobre eles de forma direta, rápida e completamente offline.
"Como ter o seu próprio ChatGPT particular, que só lê o que você autorizar e nunca fala com ninguém."
- 🔍 RAG (Retrieval-Augmented Generation) — indexa sua pasta local e usa busca semântica por cosseno para encontrar os trechos mais relevantes antes de responder
- 📋 Gerenciador de TODO — crie, liste e conclua tarefas via CLI; o arquivo de tarefas também é indexado pelo RAG automaticamente
- 💬 Sessão com TTL — mantém contexto da conversa em memória com expiração de 10 minutos por inatividade
- 👁️ File Watcher — monitora a pasta em tempo real; novos arquivos são vetorizados automaticamente sem reiniciar
- 🏃 Single Binary — compilável como executável único via AOT publish do .NET
- 🔒 100% Privado — nenhum dado sai da sua máquina. Jamais.
┌─────────────────────────────────────────────────────────────┐
│ CLI REPL Loop │
│ (input → process → output) │
├───────────┬────────────┬─────────────────┬──────────────────┤
│ Chat │ TODO │ RAG Search │ Session │
│ Service │ Manager │ Engine │ Manager (TTL) │
├───────────┴────────────┴────────┬────────┴──────────────────┤
│ │ │
│ Ollama HTTP Client │ Vector Store (SQLite) │
│ /api/chat · /api/embeddings │ embeddings + chunks │
├─────────────────────────────────┴────────────────────────────┤
│ File Watcher + Indexer │
│ (monitora pasta → chunka → vetoriza) │
└──────────────────────────────────────────────────────────────┘
O fluxo de uma pergunta segue 6 etapas:
- Verifica sessão — expirou? Limpa o contexto e recomeça
- Gera embedding da pergunta via
nomic-embed-text - Busca RAG — recupera os top-K chunks com maior similaridade cosseno
- Monta o prompt — injeta o contexto semântico no system prompt
- Chama o Ollama — obtém a resposta do modelo de chat
- Atualiza o resumo da sessão via chamada extra ao LLM
| Componente | Tecnologia | Por quê |
|---|---|---|
| Runtime | .NET 10 | Cross-platform, AOT publish, single binary |
| LLM Engine | Ollama | Roda localmente, API HTTP simples |
| Modelo Chat | qwen3.5:0.8b |
Leve, roda bem em hardware modesto |
| Modelo Embedding | nomic-embed-text |
274MB, rápido, excelente qualidade semântica |
| Banco Vetorial | SQLite + cosseno em C# | Zero dependência nativa, cross-platform |
| File Watcher | FileSystemWatcher |
Nativo do .NET, event-driven |
| CLI | System.Console puro |
Sem dependências extras |
- .NET 10 SDK
- Ollama instalado e rodando localmente
- Modelos baixados:
ollama pull qwen3.5:0.8b
ollama pull nomic-embed-textNota: Em releases futuras, a instalação do Ollama e o pull dos modelos serão feitos automaticamente pelo instalador.
git clone https://github.com/seu-usuario/paperless.git
cd paperlessEdite o appsettings.json para apontar para a sua pasta de dados:
{
"Storage": {
"BaseFolder": "Paperless",
"UserFolderPath": "data/"
},
"Ollama": {
"Model": "qwen3.5:0.8b",
"EmbeddingModel": "nomic-embed-text"
}
}dotnet run❯ Quais são minhas tarefas de alta prioridade?
❯ O que eu anotei sobre o projeto X?
❯ /todo add "Revisar PR" "Checar os testes unitários" 1
❯ /todo list
❯ /todo done a1b2c3
| Comando | Descrição |
|---|---|
/todo add "título" "descrição" <1-5> |
Cria uma nova tarefa com prioridade |
/todo list |
Lista todas as tarefas |
/todo list <1-5> |
Filtra por prioridade |
/todo done <id> |
Marca tarefa como concluída |
/todo remove <id> |
Remove uma tarefa |
As tarefas ficam salvas em
tasks.jsone são automaticamente indexadas pelo RAG — você pode perguntar sobre elas em linguagem natural.
~/Paperless/
├── system/
│ ├── tasks.json ← suas tarefas (TODO)
│ └── paperless.db ← banco vetorial SQLite
└── data/ ← sua pasta monitorada
├── projetos/
├── ideias.md
└── notas.txt
Nenhum dado sai da sua máquina.
- Sem analytics, sem telemetria, sem logs remotos
- O modelo roda via Ollama local — sem chamadas para OpenAI, Anthropic ou qualquer API externa
- Seus arquivos são indexados localmente no SQLite — nada é enviado para nenhum servidor
- Funciona 100% offline após o setup inicial
- RAG com busca semântica por cosseno
- Gerenciador de TODO com CLI
- Sessão em memória com TTL
- File Watcher com reindexação automática
- Instalador automático do Ollama
- Pull automático dos modelos na primeira execução
- Suporte a PDFs e imagens na indexação
- Interface TUI (Terminal UI) com Spectre.Console
- Exportação de TODO para Markdown
Contribuições são bem-vindas! Abra uma issue para bugs ou sugestões, ou envie um pull request diretamente.
Feito com ☕ e a vontade de não depender de nuvem nenhuma.