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 ominisignestiver instalado, ele também confere a assinatura da versão; - cria o link
timeuno-agentem/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 statusmostra, para bash, zsh e fish, se o hook está instalado, quando ele anotou o último comando e o tamanho do arquivo dele.
Comandos
| Comando | O que faz |
|---|---|
timeuno-agent pair | Conecta o agente à sua conta. |
timeuno-agent status | Mostra 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 install | Adiciona o hook de shell (o instalador faz isso por você). |
timeuno-agent shell-hook remove | Remove o hook de shell. |
timeuno-agent update | Instala a versão mais recente agora. |
timeuno-agent run | Executa o agente em primeiro plano (o serviço faz isso por você). |
timeuno-agent version | Exibe 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, executesystemctl --user restart timeuno-agent. - Para desativar as atualizações automáticas, defina
"auto_update": falseem~/.config/timeuno/config.json, ou definaTIMEUNO_NO_AUTO_UPDATE=1no 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.