Goals

A Hierarquia
Missions são opcionais — um project pode existir sozinho. Goals devem obrigatoriamente pertencer a um project. Tasks opcionalmente pertencem a um goal (se pertencerem, completá-las soma em
current_value).
Por que importa
Três coisas acontecem quando você liga trabalho a um goal:- Rotinas injetam contexto do goal. Uma rotina com
goal_id: mrr-80kemconfig/routines.yamlinforma ao agente: “este é o resultado que você está perseguindo.” Relatórios, análises e recomendações ficam mais afiados porque o agente sabe como é o “bom”. - Heartbeats injetam contexto do goal. Mesmo mecanismo — um heartbeat com
goal_iddá ao agente proativo uma âncora. - Progresso fica visível. O dashboard mostra cada goal com
current_value / target_value, prazo e status. Goals parados ou atrasados aparecem automaticamente.
Criando um Goal
Via skill create-goal (recomendado)
No Claude Code:
“Crie um goal para atingir 80k MRR até 30 de junho.”A skill conduz você por:
- Escolher (ou criar) uma mission
- Escolher (ou criar) um project sob ela
- Definir o goal — título, tipo de métrica, target, due date
- (Opcional) anexar tasks iniciais
- (Opcional) ligar uma rotina existente
Via dashboard
A página Goals tem um formulário “Novo Goal”. Mesmos campos, mesma hierarquia.Via API
Tipos de Métrica
O dashboard renderiza cada tipo com a formatação correta (currency com símbolo, percent com
%, etc.).
Acompanhamento de Progresso
Automático (via tasks)
Tasks somam emcurrent_value:
- Crie tasks com
goal_id: {numeric_id} - Quando o
statusda task viradone, o backend recalculacurrent_valuea partir da view SQLgoal_progress_v - Quando
current_value >= target_value, ostatusdo goal viraachieved
Manual (PATCH direto)
Métricas que não são tasks (MRR, NPS, follower count) precisam de updates diretos:fin-pulse que faz PATCH no goal de MRR com o número mais recente do Stripe.
Correção de drift
Se a contagem de tasks ficar fora de sincronia comcurrent_value:
Ligando uma Rotina
goal_id: mrr-80k na entrada correspondente em config/routines.yaml. Todas as próximas execuções dessa rotina verão o contexto do goal.
Ligando um Heartbeat
Heartbeats aceitamgoal_id na entrada YAML:
Ligando um Ticket
Tickets aceitam umgoal_id numérico na criação ou via PATCH:
Visualizando Progresso
Dashboard
A página Goals agrupa goals por project, mostra barras de progresso, sinaliza atrasos em vermelho e permite filtrar por status (active, achieved, dropped), janela de prazo (overdue, this-week, this-month) ou project.
API
Anti-padrões
- Goals sem métrica. “Melhorar o produto” não é um goal — é um desejo. Todo goal precisa de
metric_type,target_valueedue_date. - Goals que nunca mudam de estado. Se
current_valuenão se move por semanas, o goal está parado (arquive-o) ou não está conectado a um sinal (adicione uma rotina que atualize). - Sobrecarregar missions. Uma mission deve cobrir um trimestre ou mais. Se você está criando uma mission por semana, achate-as em projects.
- Ligar uma rotina a um goal slug inexistente. A API retorna 404. Confirme o slug com
GET /api/goalsantes.
Skills do CLI
Relacionados
docs/heartbeats.md— acordar agentes em intervalos com contexto de goaldocs/tickets.md— unidades de trabalho persistentes que podem ser ligadas a goals- Código:
dashboard/backend/routes/goals.py,dashboard/backend/goal_context.py