<a id="feature-map"></a>
# 기능 지도

상위 경로: [Norma 시스템 지도](../README.md#system-map) → 기능 지도

Norma의 기능은 하나의 대표 agent loop로 끝나지 않는다. 아래 지도는 host trigger에서 결과까지 이어지는 일곱 기능을 분리하며, 각 단계는 담당 모듈과 계약으로 왕복한다.

```mermaid
flowchart TD
  H[Host] --> S[Session 실행]
  S --> P[Provider 통합]
  P --> T[Tool action]
  T --> S
  S --> C[Context 연속성]
  S --> X[확장 기능]
  X --> D[위임과 coordination]
  C --> N[선택형 Noa]

  click S "../runtime/session-loop.md#prompt-lifecycle" "Prompt 생명주기"
  click P "../runtime/extensions-and-coordination.md#providers" "Provider 통합"
  click T "../runtime/tools-and-permissions.md#permission-pipeline" "Tool action"
  click C "../runtime/context-and-resume.md#state-ownership" "Context 연속성"
  click X "../runtime/extensions-and-coordination.md#mcp" "확장 기능"
  click D "../runtime/extensions-and-coordination.md#coordination" "위임"
  click N "../modules/noa.md#enablement" "Noa"
```

| 기능 | trigger와 기대 결과 | 완료·실패 경계 | 구현 |
|---|---|---|---|
| [Session 실행](../runtime/session-loop.md#prompt-lifecycle) | host `Prompt` → event stream과 terminal | iterator 조기 종료 시 commit·terminal 없음 | [`agentcore`/`harness`](../modules/README.md#agentcore-harness) |
| [Provider 통합](../runtime/extensions-and-coordination.md#providers) | normalized request → text/thinking/tool/usage | wire별 translation과 pre-stream retry만 제공 | [`llm`](../modules/README.md#llm) |
| [Tool action](../runtime/tools-and-permissions.md#permission-pipeline) | model `tool_use` → result와 외부 효과 | schema/permission/hook/result가 별도 실패 가능 | [`tool`/`permission`/`hook`](../modules/README.md#tool-permission-hook) |
| [Context 연속성](../runtime/context-and-resume.md#state-ownership) | 누적 history → request view·resume | history, view, 외부 effect는 서로 다른 상태 | [context packages](../modules/README.md#context-packages) |
| [확장 기능](../runtime/extensions-and-coordination.md#mcp) | MCP/skill/plan 설정 → 추가 capability | extension trust와 lifecycle은 host가 소유 | [extension packages](../modules/README.md#extension-packages) |
| [위임과 coordination](../runtime/extensions-and-coordination.md#subagent-boundary) | task → child conversation/output | isolation과 terminal 합산이 완전하지 않음 | [coordination packages](../modules/README.md#coordination-packages) |
| [Noa context](../modules/noa.md#projection) | long history → model-visible projection·archive | model summary 품질과 sidecar durability에 의존 | [`noa`/`noaadapter`](../modules/README.md#noa-stack) |

## 기능 간 상태 전달

1. host가 `Options`로 provider, tool registry, permission, context manager와 optional stores를 구성한다.
2. `Prompt`가 user input과 injection을 conversation에 추가하고 `Query`에 snapshot을 넘긴다.
3. context manager가 provider-visible message view를 만든다.
4. provider adapter가 normalized events를 만들고 harness가 `tool_use`를 scheduler에 넣는다.
5. 각 call은 schema → permission → PreToolUse → tool → output cap → PostToolUse 순으로 실행된다.
6. assistant/tool-result message가 history와 recorder에 반영되고 다음 model turn 또는 terminal로 간다.
7. subagent, MCP, skill, plan과 Noa는 이 흐름의 특정 계약에 붙으며 별도 control plane을 만들지 않는다.

이 순서에서 `tool result 반환`, `conversation 기록`, `외부 효과 완료`, `업무 목표 완료`는 다른 사건이다. [종료 규칙](../rules-and-algorithms.md#termination-rule)과 [상태 소유권](../runtime/context-and-resume.md#state-ownership)을 함께 확인해야 한다.

## 직접 진입할 독자 과제

- agent를 embedding하려면 [Session options](../contracts/README.md#session-options) → [Prompt 흐름](../runtime/session-loop.md#prompt-lifecycle) → [terminal 계약](../contracts/README.md#event-contract)을 따른다.
- custom tool을 추가하려면 [tool contract](../contracts/README.md#tool-interface) → [permission 판정](../rules-and-algorithms.md#permission-rule) → [scheduler](../rules-and-algorithms.md#scheduler-rule)을 따른다.
- 장기 session을 재개하려면 [파일 계약](../contracts/README.md#persisted-files) → [cold resume](../runtime/context-and-resume.md#cold-resume) → [재개 checklist](../runtime/context-and-resume.md#resume-checklist)을 따른다.
- multi-agent host를 만들려면 [subagent 경계](../runtime/extensions-and-coordination.md#subagent-boundary) → [coordination](../runtime/extensions-and-coordination.md#coordination) → [운영 책임](../operations-and-integration.md#adoption-boundary)을 따른다.
