Rastrear CLIs de IA em um servidor remoto

Se você usa o Claude Code, o Cursor CLI ou outra ferramenta de IA de linha de comando em um servidor Linux remoto, o aplicativo para desktop no seu computador não consegue ver essas sessões. Instale o agente headless no servidor. Ele rastreia as mesmas ferramentas de linha de comando que o aplicativo para desktop (Claude Code, Cursor CLI, Codex CLI, Gemini CLI, OpenCode, Aider e Ollama), cada sessão em execução separadamente, com o projeto e se ela está trabalhando ou esperando por você.

Instalar

curl -fsSL https://app.timeuno.io/install-agent.sh | bash

O script:

  • baixa o binário para a sua CPU (x86_64 ou arm64) em ~/.local/share/timeuno/bin/ e confere o checksum. Se o minisign estiver instalado, ele também confere a assinatura da versão;
  • cria o link timeuno-agent em /usr/local/bin (ou em ~/.local/bin, se não tiver permissão de escrita lá);
  • adiciona um hook de shell para bash, zsh e fish que anota o nome de cada comando que você executa (mais detalhes abaixo);
  • configura um serviço de usuário do systemd e ativa o lingering, para o agente continuar rodando depois que você sair da sessão.

Defina TIMEUNO_NO_SERVICE=1 para pular o serviço do systemd e TIMEUNO_NO_SHELL_HOOK=1 para pular o hook de shell. Defina TIMEUNO_REF com uma tag de versão (como agent-v0.2.0) para instalar uma versão específica.

Conectar

timeuno-agent pair

Isso exibe um link. Abra no navegador do seu próprio computador, não no servidor, e aprove a conexão. Veja Conectar um dispositivo. Depois:

systemctl --user start timeuno-agent

O que sai do seu dispositivo

O agente envia os mesmos dados que o app para desktop: quando cada sessão de IA começa e termina, se a IA está trabalhando ou esperando, o modelo, a quantidade de tokens e o custo, e a pasta do projeto. Seus prompts nunca saem do seu dispositivo, que aqui é o servidor. As respostas da IA, a saída dos comandos e o seu código também não.

Para que as linhas da sua planilha de horas digam no que você trabalhou, ele também envia estes detalhes das tarefas:

  • o título que a própria ferramenta de IA deu à sessão;
  • os assuntos dos commits que a IA fez;
  • os caminhos dos arquivos que a IA editou, relativos à pasta do projeto;
  • o tipo de tarefa (correção, desenvolvimento, testes, documentação…) e a área envolvida (cobrança, login…), escolhidos no seu dispositivo a partir de uma lista fixa, nunca com as suas palavras;
  • pelo hook de shell, o nome de cada comando que você executa, mais a primeira palavra em algumas ferramentas como git, npm, make ou docker (git push, docker compose), nunca o resto da linha, e a pasta onde você o executou, com a sua pasta pessoal mostrada como ~.

Qualquer coisa em um título ou assunto de commit que pareça uma chave ou um token é trocada antes por [redacted]. Saiba mais em Ferramentas de IA.

Para parar de enviar os detalhes das tarefas, desative Configurações → Seus dados → Compartilhar detalhes das tarefas. Os detalhes já salvos são excluídos. Na próxima conexão, o agente para de enviá-los e esvazia o arquivo do hook de shell com os comandos que ainda não tinha enviado. O registro do tempo continua.

Hook de shell

Para cada shell que existir no servidor (bash, zsh, fish), o instalador adiciona o hook: uma linha no fim do ~/.bashrc ou do ~/.zshrc que termina em # timeuno-shell-hook, e para o fish um arquivo em ~/.config/fish/conf.d/. Antes de cada comando, o hook grava o nome e a pasta dele em um arquivo que o agente envia. Só o nome do comando fica, mais a primeira palavra em algumas ferramentas como git, npm, make ou docker, nunca o resto da linha: git commit -m "corrigir login" vira git commit, e vim notas.txt vira vim. Ele só anota nomes que correspondem a um comando real, então uma linha digitada errado ou um segredo colado não fica guardado. Enquanto o agente não estiver conectado ou a sua conta não compartilhar os detalhes das tarefas, o hook não grava nada.

  • Para pular o hook na instalação, defina TIMEUNO_NO_SHELL_HOOK=1.
  • Para adicioná-lo depois, execute timeuno-agent shell-hook install.
  • Para removê-lo, execute timeuno-agent shell-hook remove. Isso também exclui os comandos que ele ainda não tinha enviado.
  • timeuno-agent status mostra, para bash, zsh e fish, se o hook está instalado, quando ele anotou o último comando e o tamanho do arquivo dele.

Comandos

ComandoO que faz
timeuno-agent pairConecta o agente à sua conta.
timeuno-agent statusMostra a versão, se as atualizações são automáticas, quais ferramentas de IA ele encontrou e o estado do hook de shell em cada shell.
timeuno-agent shell-hook installAdiciona o hook de shell (o instalador faz isso por você).
timeuno-agent shell-hook removeRemove o hook de shell.
timeuno-agent updateInstala a versão mais recente agora.
timeuno-agent runExecuta o agente em primeiro plano (o serviço faz isso por você).
timeuno-agent versionExibe a versão.

Atualizações

Quando roda como serviço do systemd, o agente procura uma nova versão alguns minutos depois de iniciar e, a partir daí, a cada 6 horas. Ele verifica a assinatura, se substitui pela nova versão e reinicia.

  • Depois de timeuno-agent update, execute systemctl --user restart timeuno-agent.
  • Para desativar as atualizações automáticas, defina "auto_update": false em ~/.config/timeuno/config.json, ou defina TIMEUNO_NO_AUTO_UPDATE=1 no ambiente do serviço.

Agentes instalados a partir da versão 0.1.0 não conseguem se atualizar sozinhos. Execute o comando de instalação de novo, uma vez.

Se o systemctl falhar

Se o systemctl --user mostrar Failed to connect to bus: Permission denied, defina XDG_RUNTIME_DIR=/run/user/$(id -u) nesse shell e tente de novo.