Aproveita os tokens ociosos das suas assinaturas de IA. Monitora as janelas de uso (5 horas + semanal) do Claude Code (Pro/Max) e do Codex (ChatGPT), mantém uma fila de tarefas e as executa automaticamente quando identifica que vai sobrar token — antes que a janela resete e o saldo se perca.
- Uso do Claude Code: consulta o endpoint OAuth (não documentado) que alimenta o
/usagedo próprio CLI, usando o login local de~/.claude/.credentials.json. Retorna % da janela de 5h, % semanal e horários de reset. Cache de 180s (o endpoint limita consultas frequentes). - Uso do Codex: lê os JSONL de sessão em
~/.codex/sessions/**— cada interação grava um eventotoken_countcomrate_limits(primária = 5h, secundária = semanal). O dado tem a idade da última interação com o Codex (marcado como "estimado" na UI). - Execução:
claude -p(com--permission-mode acceptEdits) ecodex exec -s workspace-write, headless, no diretório de trabalho da tarefa. O prompt vai por stdin. Concorrência de 1 tarefa por assinatura. - Entrega por Pull Request (opcional, por tarefa): o executor cria uma
git worktreetemporária a partir deorigin/<base>(branch base configurável; padrão = a default do repo), a IA trabalha nela — o seu checkout fica intocado — e, ao concluir, o PapaToken commita, faz push e abre o PR viagh, com o resumo da IA no corpo. O nome da branch vem da tarefa ou do template das Configurações (feat/{slug}por padrão; variáveis{id},{slug},{date}). Se a IA não alterar nada, não há PR; se o push/PR falhar, o commit fica preservado na worktree para inspeção. - Portão de qualidade (opcional, por tarefa): um comando de verificação
(ex.:
npm test) roda após a IA e antes do commit/PR. Se falhar, a saída é devolvida à IA para uma rodada de correção e a verificação roda de novo; persistindo a falha, a tarefa é marcada como falha (sem PR). O formulário sugere comandos detectados no repositório e lembra o último usado por repo. - Tarefa de code review: o tipo "Revisar Pull Request" recebe a URL de um
PR aberto (e o clone local do repo), checa a branch numa worktree de leitura,
a IA revisa o diff com acesso ao código para contexto e o resultado é
publicado como comentário no PR (resumo, problemas por severidade com
arquivo:linha, sugestões — nunca approve/request-changes: o veredito é humano). O prompt pede uma varredura completa numa passada só, para achar tudo de uma vez. Nada é commitado; no Codex roda em sandboxread-only. - Re-revisão (botão "Revisar de novo", no detalhe da tarefa de review):
depois que o autor mexe no PR, revisa o estado atual ciente da sua
revisão anterior (achada pelo rodapé do comentário) e da discussão desde
então — tudo vai no prompt via stdin, então o revisor confere o que já foi
resolvido, não repete esses pontos e considera as respostas do autor (o Codex
em sandbox
read-onlyenxerga os comentários sem depender de acesso externo). - Ciclo de review: quando o PR de uma tarefa recebe comentários, o botão
"Atender review" (no detalhe da tarefa) lê os comentários novos — posteriores
ao último push — via
gh, re-executa a IA na branch do PR em worktree própria e o push atualiza o mesmo PR. O portão de qualidade também vale nessa rodada. - Histórico de execuções (1:N): cada disparo da IA — tentativa, atendimento
de review, code review — vira um registro em
task_runscom log, desfecho e custo/tokens próprios. O detalhe da tarefa mostra a execução mais recente aberta e as anteriores recolhidas; a tarefa guarda os agregados (status atual, custo somado). - Custo por tarefa: o envelope JSON do Claude traz custo (valor de API
equivalente) e tokens de cada execução — o PapaToken acumula por tarefa
(somando rodadas de correção e de review) e mostra na lista, no detalhe e no
card "🌾 Valor colhido" do dashboard (mês e total). O Codex não expõe custo
no
exec— tarefas dele mostram "—". - Scheduler (tick de 60s), por assinatura:
- nunca despacha acima do teto de segurança (default 90%, janela 5h ou semanal);
- exige sobra mínima até o teto (default 15%);
- no modo
window(default), só despacha quando faltar menos que a janela de despacho (default 60 min) para o reset da 5h — token que ia sobrar de qualquer jeito; no modoaggressive, despacha sempre que houver sobra;pauseddesliga tudo.
- Se o CLI acusar rate limit, a tarefa volta para a fila e o provider fica bloqueado 30 min.
- Falhas transitórias são re-tentadas até
max_attempts(default 2).
npm install
npm run build # build do frontend (web/dist)
npm run start # servidor em http://127.0.0.1:3333Desenvolvimento: npm run dev (server com watch) + npm run dev:web (Vite em :5173 com proxy).
npm run check # typecheck (server + web) e testes — rode antes de commitar
npm test # só os testes (Vitest, em server/test/)Os testes cobrem os pontos mais sujeitos a regressão: os parsers dos providers
(com fixtures reais em server/test/fixtures/ — se o formato do endpoint OAuth ou dos
JSONL do Codex mudar, atualize as fixtures junto), o algoritmo de despacho
(decide() em scheduler.ts, função pura com relógio injetável), as rotas da API
(via app.inject() do Fastify) e as funções da entrega por PR (git.ts).
Rodam com banco em memória (PAPATOKEN_DB=:memory:) e não tocam rede, CLIs nem o
banco real.
O fluxo git completo (worktree → commit → push) tem um smoke manual contra um
repositório local descartável: cd server && npx tsx test/smoke-git.ts.
Iniciar junto com o sistema:
- Windows:
powershell -ExecutionPolicy Bypass -File scripts\install-autostart.ps1 - Linux (systemd):
bash scripts/install-autostart.sh
- Node.js 22.5+ (usa o SQLite nativo do Node — sem dependência compilada)
@anthropic-ai/claude-codeinstalado e logado (claude→ login com a assinatura)@openai/codexinstalado e logado (codex login) — sem isso o card do Codex mostra "sem dados" e tarefas designadas a ele ficam na fila- Para entrega por PR:
gite o GitHub CLI (gh) logado (gh auth login) — Windows:winget install GitHub.cli; Linux:apt install gh(ou equivalente) - Windows e Linux são suportados (macOS deve funcionar pelo caminho POSIX, não testado)
server/src/
providers/claude.ts uso via endpoint OAuth + execução claude -p
providers/codex.ts uso via JSONL de sessões + execução codex exec
scheduler.ts algoritmo de despacho (tick 60s)
executor.ts spawn headless, timeout, rate-limit, retries
git.ts entrega por PR: worktree, branch, commit/push, gh pr create
routes.ts REST + SSE (/api/events)
db.ts SQLite (node:sqlite) — server/data/papatoken.db
web/src/pages/ Dashboard, Tarefas, Detalhe, Configurações
- Os mecanismos de leitura de uso são semi-oficiais (endpoint não documentado /
formato interno dos logs) e podem quebrar com atualizações dos CLIs. A camada
providers/isola isso do resto do sistema. - Tarefas rodam de forma autônoma com permissão de escrita no diretório informado. Prefira diretórios com git para revisar e reverter o que a IA fez.
- Se o token OAuth do Claude expirar, abra o Claude Code uma vez para renovar (o dashboard avisa).
- Escreva prompts autossuficientes: contexto, critério de pronto e o que não fazer.
- Use a prioridade para ordenar a fila (no empate, a mais antiga executa primeiro);
anydeixa o scheduler usar a primeira assinatura com sobra. - O teto de segurança existe para o seu uso manual nunca ser prejudicado — ajuste em Configurações conforme sua rotina.