# 도구와 권한 공개 API

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

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

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

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

## `tool`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| const | `ExecuteExtraToolName` | <code>const ExecuteExtraToolName = &#34;ExecuteExtraTool&#34;</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| const | `KindBash` | <code>const KindBash TaskKind = &#34;bash&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `KindMonitor` | <code>const KindMonitor TaskKind = &#34;monitor&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `SearchExtraToolsName` | <code>const SearchExtraToolsName = &#34;SearchExtraTools&#34;</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| const | `TaskCompleted` | <code>const TaskCompleted TaskStatus = &#34;completed&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `TaskFailed` | <code>const TaskFailed TaskStatus = &#34;failed&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `TaskKilled` | <code>const TaskKilled TaskStatus = &#34;killed&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `TaskRunning` | <code>const TaskRunning TaskStatus = &#34;running&#34;</code> | [tool/task.go](evidence:api-tool-task) |
| const | `TodoCompleted` | <code>const TodoCompleted TodoStatus = &#34;completed&#34;</code> | [tool/todo.go](evidence:api-tool-todo) |
| const | `TodoInProgress` | <code>const TodoInProgress TodoStatus = &#34;in_progress&#34;</code> | [tool/todo.go](evidence:api-tool-todo) |
| const | `TodoPending` | <code>const TodoPending TodoStatus = &#34;pending&#34;</code> | [tool/todo.go](evidence:api-tool-todo) |
| field | `Answer.Selected` | <code>Selected []string</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Notification.Kind` | <code>Kind TaskKind</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Notification.OutputPath` | <code>OutputPath string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Notification.Status` | <code>Status TaskStatus</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Notification.Summary` | <code>Summary string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Notification.TaskID` | <code>TaskID string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Option.Description` | <code>Description string</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Option.Label` | <code>Label string</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `ProgressInfo.Message` | <code>Message string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Question.Header` | <code>Header string</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Question.MultiSelect` | <code>MultiSelect bool</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Question.Options` | <code>Options []Option</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Question.Question` | <code>Question string</code> | [tool/ask.go](evidence:api-tool-ask) |
| field | `Result.Content` | <code>Content []llm.ContentBlock</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Result.Extra` | <code>Extra []llm.Message</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Result.IsError` | <code>IsError bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `SearchResult.Description` | <code>Description string `json:&#34;description&#34;`</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `SearchResult.Position` | <code>Position int `json:&#34;position&#34;`</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `SearchResult.Title` | <code>Title string `json:&#34;title&#34;`</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `SearchResult.URL` | <code>URL string `json:&#34;url&#34;`</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `SpawnSpec.Command` | <code>Command string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `SpawnSpec.Description` | <code>Description string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `SpawnSpec.Env` | <code>Env []string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `SpawnSpec.Kind` | <code>Kind TaskKind</code> | [tool/task.go](evidence:api-tool-task) |
| field | `SpawnSpec.WorkingDir` | <code>WorkingDir string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Spec.Concurrent` | <code>Concurrent func(json.RawMessage) bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Description` | <code>Description string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Name` | <code>Name string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Permissions` | <code>Permissions func(ctx context.Context, input json.RawMessage, pc permission.Context) permission.Decision</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Prompt` | <code>Prompt string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.RawInput` | <code>RawInput bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.ReadOnly` | <code>ReadOnly func(json.RawMessage) bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Run` | <code>Run func(ctx context.Context, input json.RawMessage, tc *ToolContext) (Result, error)</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Spec.Schema` | <code>Schema map[string]any</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `Task.Command` | <code>Command string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.Description` | <code>Description string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.EndTime` | <code>EndTime time.Time</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.ExitCode` | <code>ExitCode int</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.ID` | <code>ID string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.Kind` | <code>Kind TaskKind</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.OutputPath` | <code>OutputPath string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.StartTime` | <code>StartTime time.Time</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Task.Status` | <code>Status TaskStatus</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.Backgrounded` | <code>Backgrounded bool</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.Command` | <code>Command string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.Description` | <code>Description string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.EndTime` | <code>EndTime time.Time</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.ExitCode` | <code>ExitCode int</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.ID` | <code>ID string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.Kind` | <code>Kind TaskKind</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.OutputPath` | <code>OutputPath string</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.StartTime` | <code>StartTime time.Time</code> | [tool/task.go](evidence:api-tool-task) |
| field | `TaskInfo.Status` | <code>Status TaskStatus</code> | [tool/task.go](evidence:api-tool-task) |
| field | `Todo.Content` | <code>Content string `json:&#34;content&#34;`</code> | [tool/todo.go](evidence:api-tool-todo) |
| field | `Todo.Status` | <code>Status TodoStatus `json:&#34;status&#34;`</code> | [tool/todo.go](evidence:api-tool-todo) |
| field | `ToolContext.AgentID` | <code>AgentID string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.Emit` | <code>Emit func(ProgressInfo)</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.Env` | <code>Env []string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.MaxOutputChars` | <code>MaxOutputChars int</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.OutputDir` | <code>OutputDir string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.Tasks` | <code>Tasks *Manager</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.ToolUseID` | <code>ToolUseID string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `ToolContext.WorkingDir` | <code>WorkingDir string</code> | [tool/tool.go](evidence:api-tool-tool) |
| field | `WebFetchConfig.CACert` | <code>CACert string</code> | [tool/webfetch.go](evidence:api-tool-webfetch) |
| field | `WebFetchConfig.InsecureTLS` | <code>InsecureTLS bool</code> | [tool/webfetch.go](evidence:api-tool-webfetch) |
| field | `WebFetchConfig.Proxy` | <code>Proxy string</code> | [tool/webfetch.go](evidence:api-tool-webfetch) |
| field | `WebSearchConfig.Backend` | <code>Backend string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.BraveAPIKey` | <code>BraveAPIKey string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.CACert` | <code>CACert string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.DeepSeekAPIKey` | <code>DeepSeekAPIKey string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.DeepSeekBaseURL` | <code>DeepSeekBaseURL string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.DeepSeekModel` | <code>DeepSeekModel string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.InsecureTLS` | <code>InsecureTLS bool</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.Proxy` | <code>Proxy string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| field | `WebSearchConfig.TavilyAPIKey` | <code>TavilyAPIKey string</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| func | `BackgroundTasksDisabled` | <code>func BackgroundTasksDisabled() bool</code> | [tool/task.go](evidence:api-tool-task) |
| func | `Build` | <code>func Build(s Spec) CoreTool</code> | [tool/tool.go](evidence:api-tool-tool) |
| func | `Capture` | <code>func Capture(tc *ToolContext, s string) string</code> | [tool/helpers.go](evidence:api-tool-helpers) |
| func | `CaptureOnce` | <code>func CaptureOnce(tc *ToolContext, s string) string</code> | [tool/helpers.go](evidence:api-tool-helpers) |
| func | `DefaultTools` | <code>func DefaultTools() []CoreTool</code> | [tool/registry.go](evidence:api-tool-registry) |
| func | `EnsureRipgrep` | <code>func EnsureRipgrep() string</code> | [tool/ripgrep.go](evidence:api-tool-ripgrep) |
| func | `Errorf` | <code>func Errorf(s string) Result</code> | [tool/tool.go](evidence:api-tool-tool) |
| func | `InteractiveShellDisabled` | <code>func InteractiveShellDisabled() bool</code> | [tool/shell_session.go](evidence:api-tool-shell-session) |
| func | `NewAskUserQuestion` | <code>func NewAskUserQuestion(ask AskUserFunc) CoreTool</code> | [tool/ask.go](evidence:api-tool-ask) |
| func | `NewBash` | <code>func NewBash() CoreTool</code> | [tool/bash.go](evidence:api-tool-bash) |
| func | `NewEdit` | <code>func NewEdit() CoreTool</code> | [tool/files.go](evidence:api-tool-files) |
| func | `NewExecuteExtraTool` | <code>func NewExecuteExtraTool(reg *Registry, unlock *UnlockSet) CoreTool</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| func | `NewGlob` | <code>func NewGlob() CoreTool</code> | [tool/search.go](evidence:api-tool-search) |
| func | `NewGrep` | <code>func NewGrep() CoreTool</code> | [tool/search.go](evidence:api-tool-search) |
| func | `NewLS` | <code>func NewLS() CoreTool</code> | [tool/ls.go](evidence:api-tool-ls) |
| func | `NewManager` | <code>func NewManager(sessionID string) (*Manager, error)</code> | [tool/task.go](evidence:api-tool-task) |
| func | `NewMonitor` | <code>func NewMonitor() CoreTool</code> | [tool/monitor.go](evidence:api-tool-monitor) |
| func | `NewMultiEdit` | <code>func NewMultiEdit() CoreTool</code> | [tool/multiedit.go](evidence:api-tool-multiedit) |
| func | `NewRead` | <code>func NewRead() CoreTool</code> | [tool/files.go](evidence:api-tool-files) |
| func | `NewRegistry` | <code>func NewRegistry(tools ...CoreTool) *Registry</code> | [tool/registry.go](evidence:api-tool-registry) |
| func | `NewSearchExtraTools` | <code>func NewSearchExtraTools(reg *Registry, deferred []string) CoreTool</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| func | `NewShellClose` | <code>func NewShellClose() CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `NewShellList` | <code>func NewShellList() CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `NewShellOpen` | <code>func NewShellOpen() CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `NewShellRead` | <code>func NewShellRead() CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `NewShellSend` | <code>func NewShellSend() CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `NewSleep` | <code>func NewSleep() CoreTool</code> | [tool/sleep.go](evidence:api-tool-sleep) |
| func | `NewTaskList` | <code>func NewTaskList() CoreTool</code> | [tool/tasklist.go](evidence:api-tool-tasklist) |
| func | `NewTaskOutput` | <code>func NewTaskOutput() CoreTool</code> | [tool/taskoutput.go](evidence:api-tool-taskoutput) |
| func | `NewTaskStop` | <code>func NewTaskStop() CoreTool</code> | [tool/taskstop.go](evidence:api-tool-taskstop) |
| func | `NewTodoStore` | <code>func NewTodoStore() *TodoStore</code> | [tool/todo.go](evidence:api-tool-todo) |
| func | `NewUnlockSet` | <code>func NewUnlockSet(initial ...string) *UnlockSet</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| func | `NewWebFetch` | <code>func NewWebFetch(cfg WebFetchConfig) CoreTool</code> | [tool/webfetch.go](evidence:api-tool-webfetch) |
| func | `NewWebSearch` | <code>func NewWebSearch(cfg WebSearchConfig) (CoreTool, error)</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| func | `NewWrite` | <code>func NewWrite() CoreTool</code> | [tool/files.go](evidence:api-tool-files) |
| func | `RenderDeferredToolsBlock` | <code>func RenderDeferredToolsBlock(names []string) string</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| func | `RenderTodoReminder` | <code>func RenderTodoReminder(todos []Todo) string</code> | [tool/todo.go](evidence:api-tool-todo) |
| func | `RipgrepPath` | <code>func RipgrepPath() string</code> | [tool/ripgrep.go](evidence:api-tool-ripgrep) |
| func | `ShellSessionTools` | <code>func ShellSessionTools() []CoreTool</code> | [tool/shell_tools.go](evidence:api-tool-shell-tools) |
| func | `Text` | <code>func Text(s string) Result</code> | [tool/tool.go](evidence:api-tool-tool) |
| func | `ValidateInput` | <code>func ValidateInput(schema map[string]any, raw json.RawMessage) error</code> | [tool/schema.go](evidence:api-tool-schema) |
| func | `WebSearchProbe` | <code>func WebSearchProbe(ctx context.Context, cfg WebSearchConfig, query string, limit int) ([]SearchResult, error)</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| interface method | `CoreTool.Call` | <code>Callfunc(ctx context.Context, input json.RawMessage, tc *ToolContext) (Result, error)</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.CheckPermissions` | <code>CheckPermissionsfunc(ctx context.Context, input json.RawMessage, pc permission.Context) permission.Decision</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.Description` | <code>Descriptionfunc() string</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.InputSchema` | <code>InputSchemafunc() map[string]any</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.IsConcurrencySafe` | <code>IsConcurrencySafefunc(input json.RawMessage) bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.IsReadOnly` | <code>IsReadOnlyfunc(input json.RawMessage) bool</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.Name` | <code>Namefunc() string</code> | [tool/tool.go](evidence:api-tool-tool) |
| interface method | `CoreTool.Prompt` | <code>Promptfunc() string</code> | [tool/tool.go](evidence:api-tool-tool) |
| method | `Manager.Background` | <code>func (*Manager) Background(id string)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Cleanup` | <code>func (*Manager) Cleanup()</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.DrainNotifications` | <code>func (*Manager) DrainNotifications() []Notification</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Forget` | <code>func (*Manager) Forget(id string)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Get` | <code>func (*Manager) Get(id string) (TaskInfo, bool)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Kill` | <code>func (*Manager) Kill(id string) bool</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.KillAll` | <code>func (*Manager) KillAll() int</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.List` | <code>func (*Manager) List() []TaskInfo</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Output` | <code>func (*Manager) Output(id string, maxBytes int) (string, error)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.RunForeground` | <code>func (*Manager) RunForeground(ctx context.Context, spec SpawnSpec, timeout time.Duration) (t *Task, finished bool, output string, err error)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Spawn` | <code>func (*Manager) Spawn(spec SpawnSpec) (*Task, error)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Manager.Wait` | <code>func (*Manager) Wait(ctx context.Context, id string, timeout time.Duration) (TaskInfo, bool)</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Notification.String` | <code>func (Notification) String() string</code> | [tool/task.go](evidence:api-tool-task) |
| method | `Option.UnmarshalJSON` | <code>func (*Option) UnmarshalJSON(data []byte) error</code> | [tool/ask.go](evidence:api-tool-ask) |
| method | `Registry.Add` | <code>func (*Registry) Add(t CoreTool)</code> | [tool/registry.go](evidence:api-tool-registry) |
| method | `Registry.Get` | <code>func (*Registry) Get(name string) (CoreTool, bool)</code> | [tool/registry.go](evidence:api-tool-registry) |
| method | `Registry.List` | <code>func (*Registry) List() []CoreTool</code> | [tool/registry.go](evidence:api-tool-registry) |
| method | `Registry.Schemas` | <code>func (*Registry) Schemas() []llm.ToolSchema</code> | [tool/registry.go](evidence:api-tool-registry) |
| method | `Result.Flatten` | <code>func (Result) Flatten() string</code> | [tool/tool.go](evidence:api-tool-tool) |
| method | `TaskStatus.Terminal` | <code>func (TaskStatus) Terminal() bool</code> | [tool/task.go](evidence:api-tool-task) |
| method | `TodoStore.List` | <code>func (*TodoStore) List() []Todo</code> | [tool/todo.go](evidence:api-tool-todo) |
| method | `TodoStore.Tool` | <code>func (*TodoStore) Tool() CoreTool</code> | [tool/todo.go](evidence:api-tool-todo) |
| method | `UnlockSet.Add` | <code>func (*UnlockSet) Add(names ...string)</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| method | `UnlockSet.Has` | <code>func (*UnlockSet) Has(name string) bool</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| method | `UnlockSet.List` | <code>func (*UnlockSet) List() []string</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| type | `Answer` | <code>type Answer struct</code> | [tool/ask.go](evidence:api-tool-ask) |
| type | `AskUserFunc` | <code>type AskUserFunc func(ctx context.Context, q Question) Answer</code> | [tool/ask.go](evidence:api-tool-ask) |
| type | `CoreTool` | <code>type CoreTool interface</code> | [tool/tool.go](evidence:api-tool-tool) |
| type | `Manager` | <code>type Manager struct</code> | [tool/task.go](evidence:api-tool-task) |
| type | `Notification` | <code>type Notification struct</code> | [tool/task.go](evidence:api-tool-task) |
| type | `Option` | <code>type Option struct</code> | [tool/ask.go](evidence:api-tool-ask) |
| type | `ProgressInfo` | <code>type ProgressInfo struct</code> | [tool/tool.go](evidence:api-tool-tool) |
| type | `Question` | <code>type Question struct</code> | [tool/ask.go](evidence:api-tool-ask) |
| type | `Registry` | <code>type Registry struct</code> | [tool/registry.go](evidence:api-tool-registry) |
| type | `Result` | <code>type Result struct</code> | [tool/tool.go](evidence:api-tool-tool) |
| type | `SearchResult` | <code>type SearchResult struct</code> | [tool/websearch.go](evidence:api-tool-websearch) |
| type | `SpawnSpec` | <code>type SpawnSpec struct</code> | [tool/task.go](evidence:api-tool-task) |
| type | `Spec` | <code>type Spec struct</code> | [tool/tool.go](evidence:api-tool-tool) |
| type | `Task` | <code>type Task struct</code> | [tool/task.go](evidence:api-tool-task) |
| type | `TaskInfo` | <code>type TaskInfo struct</code> | [tool/task.go](evidence:api-tool-task) |
| type | `TaskKind` | <code>type TaskKind string</code> | [tool/task.go](evidence:api-tool-task) |
| type | `TaskStatus` | <code>type TaskStatus string</code> | [tool/task.go](evidence:api-tool-task) |
| type | `Todo` | <code>type Todo struct</code> | [tool/todo.go](evidence:api-tool-todo) |
| type | `TodoStatus` | <code>type TodoStatus string</code> | [tool/todo.go](evidence:api-tool-todo) |
| type | `TodoStore` | <code>type TodoStore struct</code> | [tool/todo.go](evidence:api-tool-todo) |
| type | `ToolContext` | <code>type ToolContext struct</code> | [tool/tool.go](evidence:api-tool-tool) |
| type | `UnlockSet` | <code>type UnlockSet struct</code> | [tool/deferred.go](evidence:api-tool-deferred) |
| type | `WebFetchConfig` | <code>type WebFetchConfig struct</code> | [tool/webfetch.go](evidence:api-tool-webfetch) |
| type | `WebSearchConfig` | <code>type WebSearchConfig struct</code> | [tool/websearch.go](evidence:api-tool-websearch) |

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

## `permission`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| const | `Allow` | <code>const Allow Behavior = &#34;allow&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `Ask` | <code>const Ask Behavior = &#34;ask&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `Deny` | <code>const Deny Behavior = &#34;deny&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModeAcceptEdits` | <code>const ModeAcceptEdits Mode = &#34;acceptEdits&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModeAuto` | <code>const ModeAuto Mode = &#34;auto&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModeBypass` | <code>const ModeBypass Mode = &#34;bypassPermissions&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModeDefault` | <code>const ModeDefault Mode = &#34;default&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModeDontAsk` | <code>const ModeDontAsk Mode = &#34;dontAsk&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| const | `ModePlan` | <code>const ModePlan Mode = &#34;plan&#34;</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Context.Allowed` | <code>Allowed []string</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Context.Disallowed` | <code>Disallowed []string</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Context.Mode` | <code>Mode Mode</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Context.WorkingDir` | <code>WorkingDir string</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Decision.Behavior` | <code>Behavior Behavior</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Decision.Message` | <code>Message string</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Decision.Suggestions` | <code>Suggestions []Update</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Decision.UpdatedInput` | <code>UpdatedInput json.RawMessage</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.Ask` | <code>Ask CanUseTool</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.Ctx` | <code>Ctx Context</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.Input` | <code>Input json.RawMessage</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.IsReadOnly` | <code>IsReadOnly bool</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.ToolDecision` | <code>ToolDecision Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Request.ToolName` | <code>ToolName string</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Update.Rule` | <code>Rule string `json:&#34;rule&#34;`</code> | [permission/permission.go](evidence:api-permission-permission) |
| field | `Update.Type` | <code>Type string `json:&#34;type&#34;`</code> | [permission/permission.go](evidence:api-permission-permission) |
| func | `Allowed` | <code>func Allowed() Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| func | `AskUser` | <code>func AskUser(msg string) Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| func | `Denied` | <code>func Denied(msg string) Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| func | `Evaluate` | <code>func Evaluate(ctx context.Context, req Request) Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Behavior` | <code>type Behavior string</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `CanUseTool` | <code>type CanUseTool func(ctx context.Context, toolName string, input json.RawMessage, pc Context) Decision</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Context` | <code>type Context struct</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Decision` | <code>type Decision struct</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Mode` | <code>type Mode string</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Request` | <code>type Request struct</code> | [permission/permission.go](evidence:api-permission-permission) |
| type | `Update` | <code>type Update struct</code> | [permission/permission.go](evidence:api-permission-permission) |

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

## `hook`

| 종류 | 식별자 | 선언/시그니처 | 근거 |
|---|---|---|---|
| const | `PostToolUse` | <code>const PostToolUse EventType = &#34;PostToolUse&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `PostToolUseFailure` | <code>const PostToolUseFailure EventType = &#34;PostToolUseFailure&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `PreToolUse` | <code>const PreToolUse EventType = &#34;PreToolUse&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `SessionEnd` | <code>const SessionEnd EventType = &#34;SessionEnd&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `SessionStart` | <code>const SessionStart EventType = &#34;SessionStart&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `Stop` | <code>const Stop EventType = &#34;Stop&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `SubagentStart` | <code>const SubagentStart EventType = &#34;SubagentStart&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| const | `UserPromptSubmit` | <code>const UserPromptSubmit EventType = &#34;UserPromptSubmit&#34;</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.AgentType` | <code>AgentType string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.Input` | <code>Input json.RawMessage</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.IsError` | <code>IsError bool</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.Messages` | <code>Messages []llm.Message</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.Prompt` | <code>Prompt string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.Result` | <code>Result json.RawMessage</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.ToolName` | <code>ToolName string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Event.Type` | <code>Type EventType</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Result.AdditionalContext` | <code>AdditionalContext string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Result.Decision` | <code>Decision string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Result.Message` | <code>Message string</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Result.PreventContinuation` | <code>PreventContinuation bool</code> | [hook/hook.go](evidence:api-hook-hook) |
| field | `Result.UpdatedInput` | <code>UpdatedInput json.RawMessage</code> | [hook/hook.go](evidence:api-hook-hook) |
| func | `NewRegistry` | <code>func NewRegistry() *Registry</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.FireSessionEnd` | <code>func (*Registry) FireSessionEnd(ctx context.Context)</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.FireSessionStart` | <code>func (*Registry) FireSessionStart(ctx context.Context)</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.FireSubagentStart` | <code>func (*Registry) FireSubagentStart(ctx context.Context, agentType string)</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.FireUserPromptSubmit` | <code>func (*Registry) FireUserPromptSubmit(ctx context.Context, prompt string) string</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.On` | <code>func (*Registry) On(t EventType, f Func) *Registry</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.PostToolUse` | <code>func (*Registry) PostToolUse(ctx context.Context, name string, input, result []byte, isErr bool)</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.PreToolUse` | <code>func (*Registry) PreToolUse(ctx context.Context, name string, input []byte) (bool, string, []byte)</code> | [hook/hook.go](evidence:api-hook-hook) |
| method | `Registry.Stop` | <code>func (*Registry) Stop(ctx context.Context, messages []llm.Message) (prevent bool, blockingErrors []string, message string)</code> | [hook/hook.go](evidence:api-hook-hook) |
| type | `Event` | <code>type Event struct</code> | [hook/hook.go](evidence:api-hook-hook) |
| type | `EventType` | <code>type EventType string</code> | [hook/hook.go](evidence:api-hook-hook) |
| type | `Func` | <code>type Func func(ctx context.Context, ev Event) Result</code> | [hook/hook.go](evidence:api-hook-hook) |
| type | `Registry` | <code>type Registry struct</code> | [hook/hook.go](evidence:api-hook-hook) |
| type | `Result` | <code>type Result struct</code> | [hook/hook.go](evidence:api-hook-hook) |

