# goal

## Назначение

`goal` сейчас отключен по умолчанию и больше не подмешивает локальный hidden context. Extension оставлен как переходная поверхность для будущего порта OMP `GoalRuntime`: он регистрирует primary tool `goal` с OMP-shaped операциями и legacy `goalSet`, но оба tool вызова возвращают `isError=true`, пока настоящий OMP runtime не портирован.

## Почему он есть в проекте

Нужный продуктовый behavior уже есть в OMP: `GoalTool` и `GoalRuntime` управляют операциями `create`, `get`, `resume`, `drop`, `complete`, статусами `active`, `paused`, `budget-limited`, `complete`, `dropped`, token budget accounting, continuation prompts и completion audit. Старый локальный `goalSet` только сохранял текст цели и добавлял его в hidden context перед стартом агента. Это не goal lifecycle и не должно конкурировать с OMP runtime.

## Пользовательская поверхность

- Пользователь может вызвать `/goal show`, `/goal set <text>`, `/goal done`, `/goal resume` или `/goal clear`, но команда покажет fail-closed сообщение о том, что OMP `GoalRuntime` еще не портирован.
- Агент может вызвать primary tool `goal` с OMP-shaped параметрами: `op` (`create`, `get`, `complete`, `resume`, `drop`), optional `objective` и optional `token_budget`; результат будет `isError=true` до порта OMP runtime.
- Старый tool `goalSet` оставлен как legacy alias для прежнего локального API, но он тоже fail-closed и больше не пишет `sharedState.goal`.
- Extension больше не регистрирует `session_start` или `before_agent_start` hooks, чтобы не создавать вторую систему hidden goal context.

## Как работает по коду

Entrypoint `extensions/goal/index.ts` регистрирует command `goal`, primary tool `goal` и legacy tool `goalSet`. `goal` валидирует OMP-shaped параметры через TypeBox, а `goalSet` валидирует прежний compatibility shape. После валидации оба пути вызывают `goalNotPorted`, который возвращает ошибку с source evidence для OMP goal files.

Execution path намеренно отсутствует. Extension не пишет `goal-state` entries, не меняет `sharedState.goal`, не считает token usage, не отправляет continuation prompts и не добавляет hidden messages. Это защищает API от фейкового goal lifecycle до настоящего порта.

- Entrypoint: `./extensions/goal/index.ts`
- Manifest: `extensions/goal/manifest.json`
- Commands: `goal`
- Tools: `goal`, `goalSet`
- Hooks: none
- Permissions: fs.read=none, fs.write=none, subprocess=none, network=none, browser=false, models=false, ui=`setStatus`, `setWidget`
- State: local goal state is not mutated in the fail-closed slice.
- Review: status=reviewed, source=wrapper-first, reviewedBy=pi-dev-extensions, reviewedAt=2026-06-01, risk=medium

## Ограничения и риски

Этот extension пока не создает goal mode state, не умеет paused/resume lifecycle, не считает budget usage, не доказывает completion и не генерирует continuation prompts. Включать его по умолчанию нельзя, пока OMP `GoalRuntime` не портирован и не проверен в Pi runtime.

## Решение

Решение: `OMP-port-backlog`. Следующий шаг — портировать или тонко упаковать OMP `GoalRuntime` и `GoalTool`. Miloc-specific goal behavior можно добавлять только поверх OMP-compatible lifecycle, а не вместо него.
