# 실행 코어 공개 API

<a id="overview"></a>

이 페이지는 고정 소스 리비전의 production(non-test) Go 파일을 AST로 열거한 공개 계약 색인이다. 테스트 선언, 비공개 식별자, 비공개 receiver 메서드는 제외했다. 각 행의 근거는 선언이 있는 파일 자체이며, 자세한 기본값과 실패 의미는 [설정 참조](configuration.md), [도구 계약](tools.md), [저장 스키마](persistence-schemas.md)에서 보완한다.

| 종류 | 수 |
|---|---:|
| exported types | 147 |
| exported funcs | 180 |
| exported methods on exported receivers | 92 |
| exported vars | 3 |
| exported consts | 120 |
| exported struct fields | 573 |
| interface methods | 24 |

다른 묶음: [실행 코어](public-api-runtime.md) · [도구/권한](public-api-actions.md) · [컨텍스트/지속성](public-api-context.md) · [확장/조정](public-api-extensions.md)

<a id="pkg-agentcore"></a>

## `agentcore`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| field | `MemoryOptions.AutoInject` | <code>AutoInject bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `MemoryOptions.IncludeIndexInPrompt` | <code>IncludeIndexInPrompt bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `MemoryOptions.MaxInject` | <code>MaxInject int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `MemoryOptions.Store` | <code>Store *memory.Store</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.AllowedTools` | <code>AllowedTools []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.AppendSystemPrompt` | <code>AppendSystemPrompt []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.AskUser` | <code>AskUser tool.AskUserFunc</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.BashEnv` | <code>BashEnv []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.BraveSearchAPIKey` | <code>BraveSearchAPIKey string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.CanUseTool` | <code>CanUseTool permission.CanUseTool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Compaction` | <code>Compaction *compaction.Config</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Compactor` | <code>Compactor harness.Compactor</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DeepSeekSearchAPIKey` | <code>DeepSeekSearchAPIKey string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DeepSeekSearchBaseURL` | <code>DeepSeekSearchBaseURL string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DeepSeekSearchModel` | <code>DeepSeekSearchModel string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DeferredTools` | <code>DeferredTools []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Deps` | <code>Deps harness.QueryDeps</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DisableBackgroundTasks` | <code>DisableBackgroundTasks bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DisallowedTools` | <code>DisallowedTools []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.DynamicBoundary` | <code>DynamicBoundary int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.EnableWebFetch` | <code>EnableWebFetch bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.EnableWebSearch` | <code>EnableWebSearch bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.EscalateMaxTokens` | <code>EscalateMaxTokens bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Hooks` | <code>Hooks harness.HookRunner</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.MaxConcurrency` | <code>MaxConcurrency int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.MaxDuration` | <code>MaxDuration time.Duration</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.MaxTokens` | <code>MaxTokens int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.MaxToolOutputChars` | <code>MaxToolOutputChars int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.MaxTurns` | <code>MaxTurns int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Memory` | <code>Memory *MemoryOptions</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.NonStreaming` | <code>NonStreaming bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.OnWarn` | <code>OnWarn func(string)</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.PermissionMode` | <code>PermissionMode permission.Mode</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Plan` | <code>Plan *PlanOptions</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Provider` | <code>Provider llm.Provider</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.SessionID` | <code>SessionID string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Settlement` | <code>Settlement *harness.Settlement</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Skills` | <code>Skills *skill.Registry</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.SystemPrompt` | <code>SystemPrompt []string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.SystemReminderFunc` | <code>SystemReminderFunc func() string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.TavilySearchAPIKey` | <code>TavilySearchAPIKey string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Temperature` | <code>Temperature *float64</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Todos` | <code>Todos *tool.TodoStore</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.TokenBudget` | <code>TokenBudget int</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.ToolOutputDir` | <code>ToolOutputDir string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Tools` | <code>Tools []tool.CoreTool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.Transcript` | <code>Transcript *transcript.Store</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.UnlockSet` | <code>UnlockSet *tool.UnlockSet</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebFetchCACert` | <code>WebFetchCACert string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebFetchInsecureTLS` | <code>WebFetchInsecureTLS bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebFetchProxy` | <code>WebFetchProxy string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebSearchBackend` | <code>WebSearchBackend string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebSearchCACert` | <code>WebSearchCACert string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebSearchInsecureTLS` | <code>WebSearchInsecureTLS bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WebSearchProxy` | <code>WebSearchProxy string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `Options.WorkingDir` | <code>WorkingDir string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `PlanOptions.Approver` | <code>Approver plan.Approver</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `PlanOptions.StartInPlanMode` | <code>StartInPlanMode bool</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| field | `PlanOptions.TargetMode` | <code>TargetMode permission.Mode</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| func | `NewSession` | <code>func NewSession(opts Options) *Session</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| func | `Run` | <code>func Run(ctx context.Context, opts Options, input string) (string, error)</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Close` | <code>func (*Session) Close() error</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Messages` | <code>func (*Session) Messages() []llm.Message</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Prompt` | <code>func (*Session) Prompt(ctx context.Context, input string) iter.Seq2[harness.Event, error]</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Reset` | <code>func (*Session) Reset()</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Resume` | <code>func (*Session) Resume(sessionID string) error</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.SessionID` | <code>func (*Session) SessionID() string</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.UnlockSet` | <code>func (*Session) UnlockSet() *tool.UnlockSet</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| method | `Session.Usage` | <code>func (*Session) Usage() llm.Usage</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| type | `MemoryOptions` | <code>type MemoryOptions struct</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| type | `Options` | <code>type Options struct</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| type | `PlanOptions` | <code>type PlanOptions struct</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |
| type | `Session` | <code>type Session struct</code> | [agentcore/agentcore.go](evidence:api-agentcore-agentcore) |

<a id="pkg-harness"></a>

## `harness`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| const | `ContinueMaxOutputTokensEscalate` | <code>const ContinueMaxOutputTokensEscalate ContinueReason = &#34;max_output_tokens_escalate&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueMaxOutputTokensRecovery` | <code>const ContinueMaxOutputTokensRecovery ContinueReason = &#34;max_output_tokens_recovery&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueNextTurn` | <code>const ContinueNextTurn ContinueReason = &#34;next_turn&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueReactiveCompactRetry` | <code>const ContinueReactiveCompactRetry ContinueReason = &#34;reactive_compact_retry&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueStopHookBlocking` | <code>const ContinueStopHookBlocking ContinueReason = &#34;stop_hook_blocking&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueTaskNotification` | <code>const ContinueTaskNotification ContinueReason = &#34;task_notification&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ContinueTokenBudget` | <code>const ContinueTokenBudget ContinueReason = &#34;token_budget_continuation&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindProgress` | <code>const KindProgress EventKind = &#34;progress&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindResult` | <code>const KindResult EventKind = &#34;result&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindText` | <code>const KindText EventKind = &#34;text&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindThinking` | <code>const KindThinking EventKind = &#34;thinking&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindToolResult` | <code>const KindToolResult EventKind = &#34;tool_result&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindToolUse` | <code>const KindToolUse EventKind = &#34;tool_use&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `KindUsage` | <code>const KindUsage EventKind = &#34;usage&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonAbortedStreaming` | <code>const ReasonAbortedStreaming TerminalReason = &#34;aborted_streaming&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonAbortedTools` | <code>const ReasonAbortedTools TerminalReason = &#34;aborted_tools&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonBlockingLimit` | <code>const ReasonBlockingLimit TerminalReason = &#34;blocking_limit&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonCompleted` | <code>const ReasonCompleted TerminalReason = &#34;completed&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonHookStopped` | <code>const ReasonHookStopped TerminalReason = &#34;hook_stopped&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonImageError` | <code>const ReasonImageError TerminalReason = &#34;image_error&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonMaxTurns` | <code>const ReasonMaxTurns TerminalReason = &#34;max_turns&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonModelError` | <code>const ReasonModelError TerminalReason = &#34;model_error&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonPromptTooLong` | <code>const ReasonPromptTooLong TerminalReason = &#34;prompt_too_long&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonStopHookPrevented` | <code>const ReasonStopHookPrevented TerminalReason = &#34;stop_hook_prevented&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| const | `ReasonTimeout` | <code>const ReasonTimeout TerminalReason = &#34;timeout&#34;</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.Kind` | <code>Kind EventKind</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.Terminal` | <code>Terminal *Terminal</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.Text` | <code>Text string</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.ToolResult` | <code>ToolResult *llm.ContentBlock</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.ToolUse` | <code>ToolUse *llm.ContentBlock</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Event.Usage` | <code>Usage *llm.Usage</code> | [harness/event.go](evidence:api-harness-event) |
| field | `QueryDeps.CallModel` | <code>CallModel func(ctx context.Context, req llm.CompletionRequest) iter.Seq2[llm.StreamEvent, error]</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryDeps.CallModelSync` | <code>CallModelSync func(ctx context.Context, req llm.CompletionRequest) (llm.Message, string, llm.Usage, error)</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryDeps.NewID` | <code>NewID func() string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.AgentID` | <code>AgentID string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Allowed` | <code>Allowed []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.BashEnv` | <code>BashEnv []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.CanUseTool` | <code>CanUseTool permission.CanUseTool</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Compactor` | <code>Compactor Compactor</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.DeferredTools` | <code>DeferredTools []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Disallowed` | <code>Disallowed []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.DynamicBoundary` | <code>DynamicBoundary int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.EscalateMaxTokens` | <code>EscalateMaxTokens bool</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Hooks` | <code>Hooks HookRunner</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.MaxConcurrency` | <code>MaxConcurrency int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.MaxDuration` | <code>MaxDuration time.Duration</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.MaxTokens` | <code>MaxTokens int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.MaxToolOutputChars` | <code>MaxToolOutputChars int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.MaxTurns` | <code>MaxTurns int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Messages` | <code>Messages []llm.Message</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.NonStreaming` | <code>NonStreaming bool</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.PermissionMode` | <code>PermissionMode permission.Mode</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.PermissionModeFunc` | <code>PermissionModeFunc func() permission.Mode</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Provider` | <code>Provider llm.Provider</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Recorder` | <code>Recorder Recorder</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Settlement` | <code>Settlement *Settlement</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.System` | <code>System []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.SystemReminder` | <code>SystemReminder string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Tasks` | <code>Tasks *tool.Manager</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Temperature` | <code>Temperature *float64</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.TodoReminderTurnsBetweenReminder` | <code>TodoReminderTurnsBetweenReminder int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.TodoReminderTurnsSinceWrite` | <code>TodoReminderTurnsSinceWrite int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Todos` | <code>Todos *tool.TodoStore</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.TokenBudget` | <code>TokenBudget int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.ToolOutputDir` | <code>ToolOutputDir string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.Tools` | <code>Tools *tool.Registry</code> | [harness/query.go](evidence:api-harness-query) |
| field | `QueryInput.WorkingDir` | <code>WorkingDir string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `Settlement.DisabledTools` | <code>DisabledTools []string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `Settlement.MaxTurns` | <code>MaxTurns int</code> | [harness/query.go](evidence:api-harness-query) |
| field | `Settlement.Prompt` | <code>Prompt string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `Settlement.PromptByReason` | <code>PromptByReason map[TerminalReason]string</code> | [harness/query.go](evidence:api-harness-query) |
| field | `Terminal.Err` | <code>Err error</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Terminal.Messages` | <code>Messages []llm.Message</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Terminal.Reason` | <code>Reason TerminalReason</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Terminal.Text` | <code>Text string</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Terminal.Turns` | <code>Turns int</code> | [harness/event.go](evidence:api-harness-event) |
| field | `Terminal.Usage` | <code>Usage llm.Usage</code> | [harness/event.go](evidence:api-harness-event) |
| func | `Query` | <code>func Query(ctx context.Context, in QueryInput, deps QueryDeps) iter.Seq2[Event, error]</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `Compactor.IsOverflow` | <code>IsOverflowfunc(err error) bool</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `Compactor.Pre` | <code>Prefunc(ctx context.Context, msgs []llm.Message, lastInputTokens int) []llm.Message</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `Compactor.Reactive` | <code>Reactivefunc(ctx context.Context, msgs []llm.Message) ([]llm.Message, bool)</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `ContextView.View` | <code>Viewfunc(ctx context.Context, msgs []llm.Message) []llm.Message</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `HookRunner.PostToolUse` | <code>PostToolUsefunc(ctx context.Context, name string, input, result []byte, isErr bool)</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `HookRunner.PreToolUse` | <code>PreToolUsefunc(ctx context.Context, name string, input []byte) (block bool, message string, updated []byte)</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `HookRunner.Stop` | <code>Stopfunc(ctx context.Context, messages []llm.Message) (prevent bool, blockingErrors []string, message string)</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `Recorder.RecordBoundary` | <code>RecordBoundaryfunc(meta llm.BoundaryMeta)</code> | [harness/query.go](evidence:api-harness-query) |
| interface method | `Recorder.RecordMessage` | <code>RecordMessagefunc(m llm.Message, usage llm.Usage)</code> | [harness/query.go](evidence:api-harness-query) |
| type | `Compactor` | <code>type Compactor interface</code> | [harness/query.go](evidence:api-harness-query) |
| type | `ContextView` | <code>type ContextView interface</code> | [harness/query.go](evidence:api-harness-query) |
| type | `ContinueReason` | <code>type ContinueReason string</code> | [harness/event.go](evidence:api-harness-event) |
| type | `Event` | <code>type Event struct</code> | [harness/event.go](evidence:api-harness-event) |
| type | `EventKind` | <code>type EventKind string</code> | [harness/event.go](evidence:api-harness-event) |
| type | `HookRunner` | <code>type HookRunner interface</code> | [harness/query.go](evidence:api-harness-query) |
| type | `QueryDeps` | <code>type QueryDeps struct</code> | [harness/query.go](evidence:api-harness-query) |
| type | `QueryInput` | <code>type QueryInput struct</code> | [harness/query.go](evidence:api-harness-query) |
| type | `Recorder` | <code>type Recorder interface</code> | [harness/query.go](evidence:api-harness-query) |
| type | `Settlement` | <code>type Settlement struct</code> | [harness/query.go](evidence:api-harness-query) |
| type | `Terminal` | <code>type Terminal struct</code> | [harness/event.go](evidence:api-harness-event) |
| type | `TerminalReason` | <code>type TerminalReason string</code> | [harness/event.go](evidence:api-harness-event) |

<a id="pkg-llm"></a>

## `llm`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| const | `BlockCompactBoundary` | <code>const BlockCompactBoundary BlockType = &#34;compact_boundary&#34;</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| const | `BlockText` | <code>const BlockText BlockType = &#34;text&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `BlockThinking` | <code>const BlockThinking BlockType = &#34;thinking&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `BlockToolResult` | <code>const BlockToolResult BlockType = &#34;tool_result&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `BlockToolUse` | <code>const BlockToolUse BlockType = &#34;tool_use&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `FormatAnthropic` | <code>const FormatAnthropic Format = &#34;anthropic&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `FormatOpenAI` | <code>const FormatOpenAI Format = &#34;openai&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `FormatOpenAIResponses` | <code>const FormatOpenAIResponses Format = &#34;openai-responses&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `MaxTokensFieldCompletion` | <code>const MaxTokensFieldCompletion = &#34;max_completion_tokens&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `RoleAssistant` | <code>const RoleAssistant Role = &#34;assistant&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `RoleUser` | <code>const RoleUser Role = &#34;user&#34;</code> | [llm/types.go](evidence:api-llm-types) |
| const | `SEMessageDelta` | <code>const SEMessageDelta StreamEventType = &#34;message_delta&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEMessageStart` | <code>const SEMessageStart StreamEventType = &#34;message_start&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEMessageStop` | <code>const SEMessageStop StreamEventType = &#34;message_stop&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SETextDelta` | <code>const SETextDelta StreamEventType = &#34;text_delta&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEThinkingDelta` | <code>const SEThinkingDelta StreamEventType = &#34;thinking_delta&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEThinkingSignature` | <code>const SEThinkingSignature StreamEventType = &#34;thinking_signature&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEToolInputJSON` | <code>const SEToolInputJSON StreamEventType = &#34;tool_input_delta&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| const | `SEToolUseStart` | <code>const SEToolUseStart StreamEventType = &#34;tool_use_start&#34;</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Accumulator.StopReason` | <code>StopReason string</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| field | `Accumulator.Usage` | <code>Usage Usage</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| field | `BoundaryMeta.ActiveSkills` | <code>ActiveSkills []string `json:&#34;active_skills,omitempty&#34;`</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| field | `BoundaryMeta.MessagesSummarized` | <code>MessagesSummarized int `json:&#34;messages_summarized,omitempty&#34;`</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| field | `BoundaryMeta.PreTokens` | <code>PreTokens int `json:&#34;pre_tokens&#34;`</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| field | `BoundaryMeta.Trigger` | <code>Trigger string `json:&#34;trigger,omitempty&#34;`</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| field | `CompletionRequest.DynamicBoundary` | <code>DynamicBoundary int</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.MaxTokens` | <code>MaxTokens int</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.Messages` | <code>Messages []Message</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.Stop` | <code>Stop []string</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.System` | <code>System []string</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.Temperature` | <code>Temperature *float64</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.Thinking` | <code>Thinking string</code> | [llm/types.go](evidence:api-llm-types) |
| field | `CompletionRequest.Tools` | <code>Tools []ToolSchema</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Config.APIKey` | <code>APIKey string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.APIVersion` | <code>APIVersion string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.BaseURL` | <code>BaseURL string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.EmptyResponseInterval` | <code>EmptyResponseInterval time.Duration</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.EmptyResponseRetries` | <code>EmptyResponseRetries int</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.Format` | <code>Format Format</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.HTTPClient` | <code>HTTPClient *http.Client</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.MaxRetries` | <code>MaxRetries int</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.MaxTokensField` | <code>MaxTokensField string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.Model` | <code>Model string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.Proxy` | <code>Proxy string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.RateLimit` | <code>RateLimit *RateLimit</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.ReasoningEffort` | <code>ReasoningEffort string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.RetryInterval` | <code>RetryInterval time.Duration</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `Config.ThinkingType` | <code>ThinkingType string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `ContentBlock.Content` | <code>Content []ContentBlock `json:&#34;content,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.ID` | <code>ID string `json:&#34;id,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Input` | <code>Input json.RawMessage `json:&#34;input,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.IsError` | <code>IsError bool `json:&#34;is_error,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Name` | <code>Name string `json:&#34;name,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Signature` | <code>Signature string `json:&#34;signature,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Text` | <code>Text string `json:&#34;text,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Thinking` | <code>Thinking string `json:&#34;thinking,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.ToolUseID` | <code>ToolUseID string `json:&#34;tool_use_id,omitempty&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ContentBlock.Type` | <code>Type BlockType `json:&#34;type&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Message.Content` | <code>Content []ContentBlock `json:&#34;content&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Message.Role` | <code>Role Role `json:&#34;role&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `RateLimit.Burst` | <code>Burst float64</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| field | `RateLimit.OnWait` | <code>OnWait func(blocked time.Duration)</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| field | `RateLimit.PerMinute` | <code>PerMinute float64</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| field | `RateLimit.PerSecond` | <code>PerSecond float64</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| field | `StreamEvent.StopReason` | <code>StopReason string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `StreamEvent.Text` | <code>Text string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `StreamEvent.ToolID` | <code>ToolID string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `StreamEvent.ToolName` | <code>ToolName string</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `StreamEvent.Type` | <code>Type StreamEventType</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `StreamEvent.Usage` | <code>Usage Usage</code> | [llm/provider.go](evidence:api-llm-provider) |
| field | `ToolSchema.Description` | <code>Description string `json:&#34;description&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ToolSchema.InputSchema` | <code>InputSchema map[string]any `json:&#34;input_schema&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `ToolSchema.Name` | <code>Name string `json:&#34;name&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Usage.CacheReadTokens` | <code>CacheReadTokens int `json:&#34;cache_read_tokens&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Usage.CacheWriteTokens` | <code>CacheWriteTokens int `json:&#34;cache_write_tokens&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Usage.InputTokens` | <code>InputTokens int `json:&#34;input_tokens&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| field | `Usage.OutputTokens` | <code>OutputTokens int `json:&#34;output_tokens&#34;`</code> | [llm/types.go](evidence:api-llm-types) |
| func | `BoundaryMessage` | <code>func BoundaryMessage(meta BoundaryMeta) Message</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `IsBoundaryMarker` | <code>func IsBoundaryMarker(m Message) bool</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `IsTodoReminder` | <code>func IsTodoReminder(m Message) bool</code> | [llm/todomsg.go](evidence:api-llm-todomsg) |
| func | `LastBoundaryIndex` | <code>func LastBoundaryIndex(msgs []Message) int</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `MessagesAfterBoundary` | <code>func MessagesAfterBoundary(msgs []Message) []Message</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `MessagesForAPI` | <code>func MessagesForAPI(msgs []Message) []Message</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `NewAccumulator` | <code>func NewAccumulator() *Accumulator</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| func | `NewProvider` | <code>func NewProvider(cfg Config) (Provider, error)</code> | [llm/provider.go](evidence:api-llm-provider) |
| func | `PairToolBlocks` | <code>func PairToolBlocks(msgs []Message) []Message</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `ParseBoundaryMeta` | <code>func ParseBoundaryMeta(m Message) (BoundaryMeta, bool)</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| func | `RateLimited` | <code>func RateLimited(p Provider, rl RateLimit) Provider</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| func | `SkillInvocationMessage` | <code>func SkillInvocationMessage(name, path, body string) Message</code> | [llm/skillmsg.go](evidence:api-llm-skillmsg) |
| func | `SkillInvocationName` | <code>func SkillInvocationName(m Message) (string, bool)</code> | [llm/skillmsg.go](evidence:api-llm-skillmsg) |
| func | `TextBlock` | <code>func TextBlock(s string) ContentBlock</code> | [llm/types.go](evidence:api-llm-types) |
| func | `TodoReminderMessage` | <code>func TodoReminderMessage(listText string) Message</code> | [llm/todomsg.go](evidence:api-llm-todomsg) |
| func | `ToolResultText` | <code>func ToolResultText(toolUseID, text string, isError bool) ContentBlock</code> | [llm/types.go](evidence:api-llm-types) |
| func | `TruncateSkillMessage` | <code>func TruncateSkillMessage(m Message, maxChars int) Message</code> | [llm/skillmsg.go](evidence:api-llm-skillmsg) |
| func | `UserText` | <code>func UserText(s string) Message</code> | [llm/types.go](evidence:api-llm-types) |
| interface method | `Provider.Complete` | <code>Completefunc(ctx context.Context, req CompletionRequest) (Message, string, Usage, error)</code> | [llm/provider.go](evidence:api-llm-provider) |
| interface method | `Provider.Stream` | <code>Streamfunc(ctx context.Context, req CompletionRequest) iter.Seq2[StreamEvent, error]</code> | [llm/provider.go](evidence:api-llm-provider) |
| method | `Accumulator.Add` | <code>func (*Accumulator) Add(ev StreamEvent)</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| method | `Accumulator.Message` | <code>func (*Accumulator) Message() Message</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| method | `Message.Text` | <code>func (Message) Text() string</code> | [llm/types.go](evidence:api-llm-types) |
| method | `Message.ToolUses` | <code>func (Message) ToolUses() []ContentBlock</code> | [llm/types.go](evidence:api-llm-types) |
| method | `Usage.Add` | <code>func (*Usage) Add(o Usage)</code> | [llm/types.go](evidence:api-llm-types) |
| type | `Accumulator` | <code>type Accumulator struct</code> | [llm/accumulate.go](evidence:api-llm-accumulate) |
| type | `BlockType` | <code>type BlockType string</code> | [llm/types.go](evidence:api-llm-types) |
| type | `BoundaryMeta` | <code>type BoundaryMeta struct</code> | [llm/boundary.go](evidence:api-llm-boundary) |
| type | `CompletionRequest` | <code>type CompletionRequest struct</code> | [llm/types.go](evidence:api-llm-types) |
| type | `Config` | <code>type Config struct</code> | [llm/provider.go](evidence:api-llm-provider) |
| type | `ContentBlock` | <code>type ContentBlock struct</code> | [llm/types.go](evidence:api-llm-types) |
| type | `Format` | <code>type Format string</code> | [llm/provider.go](evidence:api-llm-provider) |
| type | `Message` | <code>type Message struct</code> | [llm/types.go](evidence:api-llm-types) |
| type | `Provider` | <code>type Provider interface</code> | [llm/provider.go](evidence:api-llm-provider) |
| type | `RateLimit` | <code>type RateLimit struct</code> | [llm/ratelimit.go](evidence:api-llm-ratelimit) |
| type | `Role` | <code>type Role string</code> | [llm/types.go](evidence:api-llm-types) |
| type | `StreamEvent` | <code>type StreamEvent struct</code> | [llm/provider.go](evidence:api-llm-provider) |
| type | `StreamEventType` | <code>type StreamEventType string</code> | [llm/provider.go](evidence:api-llm-provider) |
| type | `ToolSchema` | <code>type ToolSchema struct</code> | [llm/types.go](evidence:api-llm-types) |
| type | `Usage` | <code>type Usage struct</code> | [llm/types.go](evidence:api-llm-types) |

