Sistema federado de diary de desenvolvimento com análise LLM e busca semântica.
DiaryMCP captura automaticamente o contexto de desenvolvimento, analisa com LLMs e permite busca semântica local.
Filosofia: "Install and forget" - zero manutenção após instalação.
Roda no projeto do desenvolvedor. Responsável por captura e indexação.
local/
├── agent/ # Coleta, anonimização, upload
├── daemon/ # Monitoramento de arquivos
├── search/ # Busca semântica local
├── hooks/ # Git hooks automáticos
└── scripts/ # CLI (capture, search, daemon)
Fluxo de Captura:
Git Event/File Change
↓
Hook/Daemon Trigger
↓
ContextCollector: Coleta git, arquivos, TODOs, processos
↓
DataAnonymizer: Remove dados sensíveis
↓
LocalStorage: Salva em .diary/data/entries/
↓
AutoIndexer: Indexa para busca (FAISS + SQLite)
↓
CloudUploader: Envia ao orquestrador (opcional)
Servidor FastAPI que processa capturas com múltiplos agentes LLM.
cloud/
├── orchestrator/ # API, queue, dispatcher, consensus
├── agents/ # Agentes especializados com LLM
├── storage/ # Repositório e vector store
├── telegram/ # Bot (opcional)
└── llm/ # Cliente LLM (OpenAI/OpenRouter)
Fluxo de Processamento:
POST /api/v1/capture
↓
QueueManager: Enfileira job
↓
AgentDispatcher: Distribui para agentes
↓
Agentes Paralelos:
- CodeReviewerAgent: Code smells, bugs
- StorytellerAgent: Narrativas
- ArchitectAgent: Decisões arquiteturais
- ConnectorAgent: Conexões com histórico
↓
ByzantineConsensus: Agrega resultados
↓
Repository: Armazena + indexa em Pinecone
↓
TelegramBot: Notifica (opcional)
Embeddings locais com sentence-transformers, sem API calls.
Capture → EntryIndexer
↓
FAISS Index (vetores)
SQLite DB (metadados)
↓
Query → EntrySearcher
↓
Top-K Results
Modelo: all-MiniLM-L6-v2 (80MB, multilíngue, rápido)
- ✅ Auto-capture via git hooks
- ✅ Busca semântica local
- ✅ Armazenamento local
- ❌ Sem análise LLM
- ❌ Sem Telegram
Uso: Desenvolvedor individual, offline-first
- ✅ Auto-capture via git hooks
- ✅ Busca semântica local
- ✅ Análise LLM no cloud
- ✅ Telegram opcional
Uso: Desenvolvedor com LLM API
- ✅ Múltiplos desenvolvedores
- ✅ Orquestrador centralizado
- ✅ Consenso entre agentes
- ✅ Busca federada (Pinecone)
- ✅ Telegram como hub
Uso: Times com servidor compartilhado
- Python 3.11+: Core
- GitPython: Integração Git
- psutil: Monitoramento processos
- watchdog: File system events
- sentence-transformers: Embeddings locais
- FAISS: Busca vetorial
- SQLite: Metadados
- FastAPI: API REST
- Uvicorn: ASGI server
- OpenAI SDK: LLM client
- Pinecone: Vector store (opcional)
- python-telegram-bot: Bot (opcional)
- Tenacity: Retry logic
Git:
- Branch, commit hash, mensagem
- Diff recente (anonimizado)
- Arquivos modificados
Código:
- TODOs/FIXMEs
- Imports modificados
- Estrutura (não conteúdo completo)
Sistema:
- Processos relevantes (python, node, docker)
- Timestamp
NÃO Capturado:
- Conteúdo completo de arquivos
- Credenciais (via .diaryprivate)
- Arquivos hidden (por padrão)
Aplicada automaticamente em DataAnonymizer:
- Remove emails, IPs, paths absolutos
- Redação de secrets (.env, .pem)
- Respeita
.diaryprivate - Configurable via manifest.yaml
Local:
.diary/data/entries/- Capturas JSON.diary/search/- Índice FAISS + SQLite.diary/cache/- Cache temporário
Cloud (se configurado):
- Orquestrador: SQLite ou PostgreSQL
- Vector store: Pinecone (opcional)
- API keys em
credentials.yaml(gitignored) - Signing keys para criptografia
- API authentication com X-API-Key header
- Dados anonimizados antes de upload
- HTTPS recomendado para orquestrador
./local/install.sh # Uma vez por projetoDocker Compose:
cd cloud
docker-compose up -dManual:
cd cloud
uvicorn orchestrator.api:app --host 0.0.0.0 --port 8000from cloud.agents.base_agent import BaseAgent
class MyAgent(BaseAgent):
name = "my_agent"
def _heuristic_analyze(self, context):
# Análise sem LLM
return {"analysis": {...}, "confidence": 0.7}
def _prepare_context_for_llm(self, context):
# Preparar para LLM
return f"Analyze: {context}"
def _calculate_llm_confidence(self, response):
# Calcular confiança
return 0.9from local.search.indexer import EntryIndexer
indexer = EntryIndexer(
diary_dir=".diary",
model_name="custom-model-name" # Hugging Face
)- Git hooks: ~0-2s (background)
- Daemon: ~50MB RAM, <1% CPU
- Indexação: ~100ms/entry
- Busca: ~100-200ms/query
- Armazenamento: ~2KB/entry
- Latência: ~1-3s/captura
- Custo: ~$0.18/mês (gpt-4o-mini, 10 capturas/dia)
- Código:
/root/DiaryMCP/ - Guias:
docs/AUTO_CAPTURE.md,docs/BUSCA_SEMANTICA.md - Config:
docs/CONFIGURACAO.md