Activity Tracker
Daemon em Rust que captura atividades do sistema (terminal, janelas abertas, abas do Chrome/Brave, repositórios Git) e gera resumos inteligentes via LLM. Suporta Ollama (local), OpenAI, Anthropic, Groq, Gemini e OpenRouter. Opcionalmente envia o resumo para o Notion ou para um canal do Slack via webhook.
Instalação
|
O script detecta o OS/arquitetura, baixa o binário pré-compilado da última release do GitHub, instala em ~/.local/bin, configura o autostart e adiciona aliases ao shell:
- macOS — cria um LaunchAgent em
~/Library/LaunchAgents/e abre as telas de permissão necessárias - Linux (systemd) — cria e ativa um serviço systemd de usuário
Após a instalação, dois aliases ficam disponíveis:
at → activity-tracker
ats → activity-tracker summary
Instalar em diretório customizado:
INSTALL_DIR=/usr/local/bin |
Ou compilar a partir do fonte:
Pré-requisitos:
- LLM — Ollama local (
ollama serve) ou API key de um provider cloud - Opcional:
wmctrlpara captura de janelas X11 (sudo apt install wmctrl)
Providers de LLM
| Provider | Modelos exemplo | Requer |
|---|---|---|
ollama |
llama3.1, mistral, gemma2 | Ollama rodando localmente |
openai |
gpt-4o, gpt-4o-mini | API key OpenAI |
anthropic |
claude-sonnet-4-6, claude-haiku-4-5-20251001 | API key Anthropic |
groq |
llama-3.1-8b-instant, mixtral-8x7b | API key Groq |
gemini |
gemini-2.0-flash, gemini-1.5-pro | API key Google |
openrouter |
qualquer modelo disponível | API key OpenRouter |
O padrão é ollama. Para usar outro provider:
Uso
# Daemon em background
# Coleta manual única
# Resumo dos últimos N dias
# Busca por termo nos logs antes de resumir
# Resumo de uma data específica (formato YYYY-DD-MM)
# Override de provider por sessão (sem alterar config)
# Enviar resumo ao Notion
# Enviar resumo ao Slack
# Enviar para ambos ao mesmo tempo
# TUI interativa
# Anotações manuais
# Exportar logs em CSV ou JSON
# Configuração persistente
TUI interativa
at tui abre uma interface de terminal completa:
┌──────────────────── ◄ 2026-06-12 (hoje) ► ────────────────────┐
│ Atividades │ Resumo │ Projetos │ Config │
├───────────────────────────────────────────────────────────────┤
│ ■ SHELL (42 comandos) │
│ ───────────────────────────────────────────────────────── │
│ $ cargo build --release │
│ $ git commit -m "feat: tui interativa" │
│ $ vim src/tui.rs │
│ ... │
│ │
│ ■ GIT (2 repos, 5 commits) │
│ ───────────────────────────────────────────────────────── │
│ activity-tracker │
│ ↳ 2026-06-12 feat: tui interativa │
├───────────────────────────────────────────────────────────────┤
│ ←/→ dia Tab aba ↑↓ scroll r resumo q sair │
└───────────────────────────────────────────────────────────────┘
A aba Projetos exibe distribuição de tempo por repositório:
activity-tracker ████████████████░░░░░░░░ 67.3% (12c, 5d)
meu-projeto ████████░░░░░░░░░░░░░░░░ 32.7% ( 6c, 3d)
A aba Config permite editar todas as configurações sem sair da TUI. Campos de provider e idioma ciclan com ←/→; demais campos abrem modo de edição de texto. Padrões de privacidade podem ser adicionados e removidos diretamente.
| Tecla | Ação |
|---|---|
← / → ou h / l |
Navegar entre dias |
Tab / 1 / 2 / 3 / 4 |
Alternar entre abas Atividades, Resumo, Projetos e Config |
↑ / ↓ ou j / k |
Rolar conteúdo / navegar campos (Config) |
PgUp / PgDn |
Rolar rápido |
Home |
Ir ao topo |
r |
Gerar resumo via LLM (muda para aba Resumo) |
s |
Na aba Projetos: janela de 7 dias |
m |
Na aba Projetos: janela de 30 dias |
Enter / e |
Na aba Config: editar campo selecionado |
← / → |
Na aba Config: ciclar provider ou idioma |
d / Delete |
Na aba Config: remover padrão de privacidade |
R |
Na aba Config: recarregar configuração do disco |
q / Esc |
Sair (ou cancelar edição na aba Config) |
Aceita os mesmos flags de provider que o summary (--provider, --model, --api-key, --lang).
Autostart no login
macOS
O install.sh cria e carrega um LaunchAgent automaticamente:
|
Linux (systemd)
Para o autostart funcionar após reinicialização sem sessão gráfica ativa (Linux):
Permissões no macOS
O install.sh abre as telas automaticamente. Caso precise configurar manualmente, adicione o binário (~/.local/bin/activity-tracker) em:
- System Settings → Privacy & Security → Full Disk Access — para ler o histórico do Chrome/Brave
- System Settings → Privacy & Security → Accessibility — para capturar títulos de janelas via
osascript
Integração com Notion
Crie uma Internal Integration no Notion, compartilhe uma página com ela e configure:
A partir daí, qualquer resumo pode ser enviado com --send-notion:
O resumo é criado como subpágina da página configurada. O título usa a data e o nome da máquina, ex: 2026-06-12 — MacBook Pro.
Integração com Slack
Crie um Incoming Webhook no Slack (em api.slack.com/apps → seu app → Incoming Webhooks) e configure:
A partir daí, qualquer resumo pode ser enviado com --send-slack:
O resumo é enviado como mensagem formatada com Block Kit (header + seções). Funciona com qualquer canal ao qual o webhook tenha acesso. Pode ser usado junto com --send-notion:
O que é capturado
| Fonte | Detalhes |
|---|---|
| Shell history | Bash, Zsh e Fish — leitura incremental (só novos comandos desde a última coleta) |
| Janelas abertas | wmctrl (X11) → xdotool → osascript (macOS) → ps (fallback Linux) |
| Chrome / Brave | DevTools Protocol (porta 9222) ou SQLite history DB (últimas 2 horas) |
| Git | Todos os commits do dia por repo, encontrados até 4 níveis abaixo do home (máx. 15 repos) |
Comandos triviais são filtrados automaticamente (ls, cd, clear, pwd, etc.).
Armazenamento
| Arquivo | Caminho |
|---|---|
| Logs diários (JSONL) | ~/.local/share/activity-tracker/logs/YYYY-MM-DD.jsonl |
| PID do daemon | ~/.local/share/activity-tracker/daemon.pid |
| Configuração | ~/.config/activity-tracker/config.toml |
Cada linha do .jsonl é uma entrada tipada (shell, apps, chrome_tabs ou context).
Configuração padrão
= "ollama"
= "llama3.1"
= "http://localhost:11434"
= "pt-br"
# api_key = "sk-..." # opcional, para providers cloud
# notion_token = "secret_xxx" # opcional
# notion_page_id = "abc123..." # opcional
# slack_webhook = "https://hooks.slack.com/services/..." # opcional
# machine_name = "MacBook Pro" # opcional, padrão: hostname do sistema
Resumo gerado
- Resumo Geral — o que foi feito, em 2-3 parágrafos
- Projetos Identificados — tarefas em andamento detectadas
- Ferramentas Mais Usadas — apps e CLIs mais frequentes
- Sites e Pesquisas — o que foi lido ou pesquisado online
- Sugestões — observações de produtividade
Chrome com DevTools Protocol
Para capturar abas em tempo real (sem depender do histórico SQLite), inicie o Chrome com: