Tocli reúne Google Tasks, Google Calendar e métricas visuais (contribution graph, daily rating e progresso do ano) num único painel de terminal — interface totalmente por teclado, tema escuro, layout em painéis.
A integração com o Google usa o SDK oficial com OAuth 2.0, sem ferramentas de terceiros.
Sem credenciais, sem configuração — explora a TUI com dados fictícios:
git clone https://github.com/TETEURYAN/tocli.git
cd tocli
go run . -offlineQuer conectar sua conta Google de verdade? Veja Uso.
| Funcionalidade | Descrição | |
|---|---|---|
| ✅ | Lista de tarefas | Tarefas abertas e concluídas de hoje; suporta criar, concluir, reabrir e excluir. Sincroniza com Google Tasks. |
| 📅 | Agenda do dia | Eventos de hoje com horário, título e local. Destaque para o evento em andamento e esmaecimento dos passados. |
| 🗓️ | Detalhe por dia | Navegar pelo contribution graph mostra os eventos e tarefas concluídas daquele dia na agenda. |
| 📊 | Contribution graph | Grade anual de tarefas concluídas por dia, com intensidade de cor proporcional ao volume — estilo GitHub. |
| 🌈 | Daily Rating Graph | Segundo modo do gráfico (g alterna): atribua uma nota de 1 a 5 para cada dia (humor/produtividade), com cor interpolada de vermelho a verde, e escreva um texto livre sobre como foi o dia (t). Nota e texto persistem em disco e podem ser exportados em CSV mês a mês. |
| 📈 | Progresso do ano | Percentual do ano decorrido, dia atual e dias restantes. |
| 🔴 | Prioridade | Sistema de três níveis (Urgente / Importante / Normal) inferido automaticamente pelo nome da lista ou por prefixo no título da tarefa. |
- Go 1.22+ (go.dev/dl)
- Terminal com suporte a cores e largura ≥ 100 colunas recomendada (abaixo de 68 o layout muda para pilha vertical)
git clone https://github.com/TETEURYAN/tocli.git
cd tocli
go mod downloadEsta seção cobre os três jeitos de rodar o Tocli — escolha o que corresponde ao seu caso.
Já coberto em Comece agora: go run . -offline, ou compile o binário primeiro:
go build -o tocli . && ./tocli -offlineSe você recebeu um binário pré-compilado com as credenciais embutidas, apenas execute:
./tocliNa primeira execução o browser abre automaticamente para autenticação OAuth. Após aprovar, volte ao terminal — o token é salvo e renovado automaticamente nas execuções seguintes.
Compile embutindo suas credenciais OAuth do Google Cloud Console:
go build \
-ldflags "-X 'tocli/internal/adapter/google.clientID=SEU_CLIENT_ID' \
-X 'tocli/internal/adapter/google.clientSecret=SEU_CLIENT_SECRET'" \
-o tocli .Guia completo de setup OAuth: docs/GOOGLE.md
| Flag | Descrição |
|---|---|
-offline |
Usa dados mock, sem chamar APIs do Google |
-sync |
Valida a conexão com o Google e sai (sem TUI) |
-version |
Exibe a versão atual e compara com a última release no GitHub |
-update |
Baixa a tag mais recente e recompila o binário automaticamente |
| Tecla | Ação |
|---|---|
Tab / Shift+Tab |
Próximo / painel anterior |
r |
Atualizar tarefas, eventos e gráfico |
? |
Exibir / ocultar ajuda |
q / Ctrl+C |
Sair |
| Tecla | Ação |
|---|---|
↑ ↓ ou k j |
Navegar na lista |
Enter ou Espaço |
Concluir / reabrir tarefa selecionada |
n |
Criar nova tarefa |
d → y |
Excluir tarefa selecionada (pede confirmação; n ou Esc cancela) |
| Tecla | Ação |
|---|---|
Tab |
Alternar foco entre campo título e campo prazo |
[ ] |
Lista de destino anterior / próxima |
Enter |
Confirmar e criar |
Esc |
Cancelar |
O campo de prazo aceita os formatos DD-MM-YYYY ou DD-MM-YYYY HH:MM (fuso local).
| Tecla | Ação |
|---|---|
↑ ↓ ou k j |
Navegar entre eventos |
| Tecla | Ação |
|---|---|
← → ou h l |
Navegar semana a semana |
↑ ↓ ou k j |
Navegar dia a dia |
g |
Alternar entre contribution graph e daily rating |
1-5 |
(modo daily rating) Atribuir nota ao dia selecionado |
t |
(modo daily rating) Escrever/editar um texto livre sobre o dia selecionado |
e |
(modo daily rating) Exportar as notas e textos do mês exibido para CSV |
Enquanto o cursor está sobre um dia no gráfico, a agenda exibe os eventos e tarefas concluídas daquele dia (não o dia atual) — em ambos os modos.
O daily rating é uma nota manual de 1 (vermelho) a 5 (verde) para humor/produtividade do dia, independente do Google — não sincroniza com nenhuma conta, apenas fica salva localmente (veja Arquitetura).
Pressionar t abre uma tela cheia com um campo de texto multi-linha (já preenchido com o texto existente, se houver) para descrever como foi o dia — ctrl+s salva, esc cancela. Quando o dia selecionado tem um texto salvo, o subtítulo do gráfico mostra 📝 has note.
A exportação (e) gera um arquivo tocli-ratings-AAAA-MM.csv no diretório atual, com uma linha por dia do mês (data,nota,texto) — nota em branco nos dias sem avaliação, texto em branco nos dias sem anotação.
O Google Tasks não tem campo de prioridade nativo. O Tocli infere três níveis:
| Nível | Marcador | Como definir |
|---|---|---|
| Urgente | 🔴 vermelho |
Prefixe o título com [U] ou 🔴 |
| Importante | ⭐ amarelo |
Prefixe o título com [I], ⭐ ou ★ |
| Normal | marcador de categoria | Nenhum prefixo necessário |
Se nenhum prefixo for usado, o nível é inferido a partir do nome da lista por palavras-chave (ex.: urgente, asap, critical → Urgente; priority, focus, star → Importante).
Quando a prioridade é Normal, a tarefa exibe um marcador de categoria baseado no nome da lista:
| Marcador | Categoria | Exemplos de nome de lista |
|---|---|---|
W |
Trabalho | work, trabalho, job |
J |
Job | job, freelance |
P |
Pessoal | personal, pessoal, life |
L |
Aprendizado | learning, study, curso |
· |
Padrão | qualquer outro nome |
Para quem quer contribuir ou entender como o Tocli é montado por baixo dos panos:
flowchart TB
subgraph ui_layer["Interface — internal/ui"]
UI["TUI · Bubble Tea\ncomponents · theme · keys"]
end
subgraph app_layer["Aplicação — internal/usecase"]
UC["Casos de uso\ntarefas · agenda · contribution · daily rating · progresso do ano"]
end
subgraph domain_layer["Domínio — internal/domain"]
DM["Entidades Task, Event, DailyRating\ncontratos TaskRepository · EventRepository · RatingRepository"]
end
subgraph infra_layer["Infraestrutura — internal/adapter"]
MOCK["mock\n(fallback / testes)"]
GOOGLE["google\nOAuth 2.0 + SDK oficial\nCalendar API · Tasks API"]
LOCAL["local\nRatingRepository → ratings.json"]
end
UI --> UC
UC --> DM
MOCK -.->|implementa| DM
GOOGLE -.->|implementa| DM
LOCAL -.->|implementa| DM
- Domain (
internal/domain): entidadesTask,Event,DailyRatinge interfaces de repositório. - Use cases (
internal/usecase): listar tarefas, eventos do dia, contribution graph, daily rating (+ exportação CSV), progresso do ano. - Adapters (
internal/adapter):mockpara desenvolvimento/offline;googlepara integração real via SDK;localpara persistência das notas diárias (não sincroniza com Google). - UI (
internal/ui): modelo Bubble Tea, componentes eminternal/ui/components, tema eminternal/ui/theme.
Nenhum banco de dados é criado. Tarefas e eventos vivem no Google (ou na memória em modo mock). O token OAuth é salvo em
~/.config/tocli/token.jsone as notas do daily rating em~/.config/tocli/ratings.json(em modo-offline, ficam apenas em memória com dados de exemplo).
Contribuições são bem-vindas via issues e pull requests:
- Abra uma issue descrevendo o bug ou a proposta antes de um PR grande, para alinhar o escopo.
- Para PRs: um branch por mudança, descrição do que foi feito e por quê.
- Não há suíte de testes automatizada no repositório ainda — se adicionar testes, siga a convenção padrão do Go (
_test.goao lado do código testado).
Encontrou um bug ou tem uma dúvida? Abra uma issue no GitHub — é o único canal de suporte do projeto no momento.
- Bubble Tea
- Lipgloss
- Bubbles
- Google API Go Client
- Inspiração visual: Calcure, contribution graphs estilo GitHub

