---
name: Create Goal
slug: create-goal
category: AI Engineering
description: Create Goal creates missions, projects, or measurable goals in EvoNexus and writes them through the goals API. Use it when you want to define a target, choose a project, and link work to a measurable outcome.
github: "https://github.com/evolution-foundation/evo-nexus/tree/main/.claude/skills/create-goal"
language: Python
stars: 523
forks: 176
install: "npx degit https://github.com/evolution-foundation/evo-nexus/tree/main/.claude/skills/create-goal ~/.claude/skills/create-goal"
installs_to: ~/.claude/skills/create-goal
source_path: .claude/skills/create-goal/SKILL.md
collection_size: 25
category_size: 2451
collection_url: "https://dirskills.com/collections/evolution-foundation/evo-nexus"
added: 2026-08-26T05:12:13.459Z
last_synced: 2026-08-26T05:12:13.459Z
canonical_url: "https://dirskills.com/skills/create-goal"
---

# Create Goal

Create Goal creates missions, projects, or measurable goals in EvoNexus and writes them through the goals API. Use it when you want to define a target, choose a project, and link work to a measurable outcome.

**Install:**

```bash
npx degit https://github.com/evolution-foundation/evo-nexus/tree/main/.claude/skills/create-goal ~/.claude/skills/create-goal
```

## README

# Create Goal

Create a Goal in the Mission → Project → Goal → Task hierarchy.

## When to use

Use this skill when the user wants to:
- Declare a new measurable outcome ("100 paying customers by June")
- Add a project under a mission ("Evo AI is a project under our revenue mission")
- Create the mission itself (rare — usually 1 mission)

## Step 1: Identify the level

Ask the user:
- **Mission** — top-level purpose (usually already exists; check with `GET /api/missions`). v1 assumes 1 active mission.
- **Project** — major initiative (Evo AI, Evolution Summit, Academy). Creates under a mission.
- **Goal** — measurable target within a project (100 customers, $50k MRR, ship billing v2).

Start with the most common: a new Goal under an existing Project.

## Step 2: Collect fields

For a Goal:
- **Title** — what's being measured ("100 paying customers")
- **Description** — context (optional)
- **Project** — which existing project (fetch list via `GET /api/projects`)
- **metric_type** — one of:
  - `count` — integer (customers, tickets sold, users)
  - `currency` — USD or BRL value ($50k MRR)
  - `percentage` — 0.0 to 100.0 (retention rate)
  - `boolean` — yes/no (ship billing v2 → target_value=1)
- **target_value** — the number to reach
- **due_date** — ISO date (YYYY-MM-DD) — when the goal is expected to hit
- **target_metric** — short label to display on UI (e.g., "paying customers")

For a Project:
- **Slug** — unique kebab-case id (e.g., `evo-ai`)
- **Title** — display name
- **Description**
- **Mission** — parent mission slug
- **workspace_folder_path** — optional, points to `workspace/project/<slug>.md`

For a Mission:
- **Slug, title, description, target_metric, target_value, due_date, status** — same pattern

## Step 3: Call the API

Use `from dashboard.backend.sdk_client import evo` — auto-handles URL + auth.

```python
from dashboard.backend.sdk_client import evo

# Goal:
goal = evo.post("/api/goals", {
    "slug": "evo-ai-100-customers",
    "project_id": project_id,
    "title": "100 paying customers by Jun 30",
    "metric_type": "count",
    "target_metric": "paying customers",
    "target_value": 100,
    "due_date": "2026-06-30",
})

# Same shape for /api/projects and /api/missions.
```

Response includes `id` and `slug`.

## Step 4: Show the user how to link work

Return the slug and show how to attach it to a routine, heartbeat, or ticket:

```yaml
# routines.yaml
- name: my-routine
  goal_id: evo-ai-100-customers
  ...

# heartbeats.yaml
- id: flux-6h
  goal_id: evo-ai-100-customers
  ...

# ticket
evo.post("/api/tickets", {"title": "...", "goal_id": goal["id"]})
```

When linked, the agent running the work receives Mission → Project → Goal chain automatically in its prompt.

## Step 5: Show the progress view

Direct the user to `/goals` in the UI to see the new goal in the tree with 0% progress. As tasks complete (status='done'), the SQLite trigger increments `current_value` automatically. When `current_value >= target_value`, the goal status flips to `achieved`.

## Notes

- Drift: if `current_value` and `SELECT COUNT(*) FROM goal_tasks WHERE status='done'` disagree, call `POST /api/goals/<id>/recalculate` to rebuild.
- Target changes: `PATCH /api/goals/<id>` accepts `target_value` updates.
- Cancelling: set `status='cancelled'` to hide from active views without deleting.

Related: `.claude/rules/goals.md`, `.claude/rules/heartbeats.md`, `.claude/rules/tickets.md`.
