> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evolutionfoundation.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Goals

> Hierarquia Mission → Project → Goal → Task que dá direção ao trabalho dos agentes

# Goals

<img src="https://mintcdn.com/evoai-683d737d/KKvOt8ip-TVpeDVn/evo-nexus/imgs/doc-goals.webp?fit=max&auto=format&n=KKvOt8ip-TVpeDVn&q=85&s=d0853b07003c9ee10826e7312fe210cc" alt="Goals — árvore Mission → Project → Goal com progresso" width="1920" height="975" data-path="evo-nexus/imgs/doc-goals.webp" />

**Goals dão direção ao EvoNexus.** Sem um goal, rotinas e heartbeats são apenas atividade. Com um goal, cada execução de agente tem um alvo a perseguir — e o progresso é mensurável.

## A Hierarquia

```
Mission  →  Project  →  Goal  →  Task
```

Cada camada responde a uma pergunta diferente:

| Camada | Pergunta | Exemplo |
| - | - | - |
| **Mission** | Por que estamos fazendo isso? | "Crescer Evo AI para 10k usuários pagos" |
| **Project** | Qual frente de trabalho? | "Vendas — Q2 2026" |
| **Goal** | Qual resultado mensurável? | "Atingir 80k MRR até 30 de junho" |
| **Task** | Qual ação concreta? | "Lançar plano de cobrança anual" |

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:

1. **Rotinas injetam contexto do goal.** Uma rotina com `goal_id: mrr-80k` em `config/routines.yaml` informa 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".
2. **Heartbeats injetam contexto do goal.** Mesmo mecanismo — um heartbeat com `goal_id` dá ao agente proativo uma âncora.
3. **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:

1. Escolher (ou criar) uma mission
2. Escolher (ou criar) um project sob ela
3. Definir o goal — título, tipo de métrica, target, due date
4. (Opcional) anexar tasks iniciais
5. (Opcional) ligar uma rotina existente

### Via dashboard

A página **Goals** tem um formulário "Novo Goal". Mesmos campos, mesma hierarquia.

### Via API

```bash theme={null}
# 1. Criar o project (se necessário)
curl -X POST http://localhost:8080/api/projects \
  -H "Content-Type: application/json" \
  -d '{"slug": "sales-q2-2026", "title": "Sales — Q2 2026", "mission_id": 1}'

# 2. Criar o goal
curl -X POST http://localhost:8080/api/goals \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "mrr-80k",
    "project_id": 7,
    "title": "Atingir 80k MRR",
    "metric_type": "currency",
    "target_value": 80000,
    "current_value": 62000,
    "due_date": "2026-06-30"
  }'
```

O slug é o handle público. É o que rotinas e heartbeats referenciam.

## Tipos de Métrica

| `metric_type` | Use para |
| - | - |
| `count` | Quantidade de coisas (usuários, signups, posts) |
| `currency` | Receita, despesa, MRR (valor na menor unidade — centavos ou BRL) |
| `percent` | Targets percentuais (NPS, taxa de conversão) |
| `boolean` | Resultados de uma vez só ("lançado", "certificado") — `target_value: 1` |
| `tasks` | Contagem de tasks completas sob o goal |

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 em `current_value`:

1. Crie tasks com `goal_id: {numeric_id}`
2. Quando o `status` da task vira `done`, o backend recalcula `current_value` a partir da view SQL `goal_progress_v`
3. Quando `current_value >= target_value`, o `status` do goal vira `achieved`

### Manual (PATCH direto)

Métricas que não são tasks (MRR, NPS, follower count) precisam de updates diretos:

```bash theme={null}
curl -X PATCH http://localhost:8080/api/goals/{id} \
  -H "Content-Type: application/json" \
  -d '{"current_value": 67500}'
```

Você pode amarrar uma rotina para fazer isso na agenda — ex. uma rotina diária `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 com `current_value`:

```bash theme={null}
curl -X POST http://localhost:8080/api/goals/{id}/recalculate
```

Força um recálculo a partir da view SQL.

## Ligando uma Rotina

```bash theme={null}
curl -X POST http://localhost:8080/api/goals/link-routine \
  -H "Content-Type: application/json" \
  -d '{"routine_name": "financial-pulse", "goal_id": "mrr-80k"}'
```

Isso grava `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 aceitam `goal_id` na entrada YAML:

```yaml theme={null}
- id: flux-6h
  agent: flux-finance
  goal_id: mrr-80k
  # ... resto
```

Mesmo efeito das rotinas — o agente roda com contexto do goal.

## Ligando um Ticket

Tickets aceitam um `goal_id` numérico na criação ou via PATCH:

```bash theme={null}
curl -X POST http://localhost:8080/api/tickets \
  -d '{"title": "...", "goal_id": 12}'
```

O ticket aparece na lista de tickets do goal e conta para sua atividade.

## 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

```bash theme={null}
# Todos os goals ativos
curl "http://localhost:8080/api/goals?status=active"

# Goals atrasados
curl "http://localhost:8080/api/goals?due_date=overdue"

# Goals de um project, com tasks
curl "http://localhost:8080/api/goals?project_id=7&include_tasks=true"
```

## Anti-padrões

* **Goals sem métrica.** "Melhorar o produto" não é um goal — é um desejo. Todo goal precisa de `metric_type`, `target_value` e `due_date`.
* **Goals que nunca mudam de estado.** Se `current_value` nã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/goals` antes.

## Skills do CLI

| Skill | O que faz |
| - | - |
| `create-goal` | Wizard interativo (mission → project → goal → tasks) |

## Relacionados

* `docs/heartbeats.md` — acordar agentes em intervalos com contexto de goal
* `docs/tickets.md` — unidades de trabalho persistentes que podem ser ligadas a goals
* Código: `dashboard/backend/routes/goals.py`, `dashboard/backend/goal_context.py`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.