docs: reorganize developer documentation

This commit is contained in:
2026-06-01 20:59:32 +09:00
parent e6c458021c
commit 9dcbd4c3e0
83 changed files with 1320 additions and 5649 deletions
+30
View File
@@ -0,0 +1,30 @@
# client
## Role
`client` contains reusable socket-client and runtime-command mechanics for talking to Pods from CLI/TUI code.
## Boundaries
Owns:
- one-shot Pod socket client behavior
- request/reply delivery mechanics
- runtime command construction below the product façade
- shared attach/status probing helpers used by higher layers
Does not own:
- product command names (`yoi`)
- Pod state authority (`pod`, `pod-store`, `session-store`)
- UI rendering (`tui`)
- Worker turn semantics (`llm-worker`)
## Design notes
The client boundary lets `tui` and `yoi` share Pod communication without making library crates depend on the product binary. Socket clients should drain connect-time snapshot/alert traffic before sending a method or deciding status.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
- [`../../docs/design/overview.md`](../../docs/design/overview.md)
+21 -5
View File
@@ -1,9 +1,25 @@
# daemon
Pod のライフサイクルを管理する常駐デーモン。未実装。
## Role
## 依存クレート
`daemon` is reserved for future long-lived Pod lifecycle management.
- `manifest` — マニフェスト設定
- `protocol` — 通信プロトコル型
- `tokio` — 非同期ランタイム
## Boundaries
Owns:
- daemon-specific lifecycle coordination when that design is implemented
Does not own today:
- current Pod socket serving (`pod`)
- normal CLI/TUI startup (`yoi`, `tui`)
- live registry mechanics already handled elsewhere (`pod-registry`)
## Design notes
This crate exists as a placeholder. Do not route current runtime authority through it until there is a concrete daemon design and work item.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
+28
View File
@@ -0,0 +1,28 @@
# lint-common
## Role
`lint-common` contains shared linting primitives for structured project records.
## Boundaries
Owns:
- reusable frontmatter/slug/path validation helpers
- common lint diagnostic shapes used by higher-level crates
Does not own:
- memory-specific policy (`memory`)
- workflow-specific policy (`workflow`)
- product CLI command shape (`yoi`)
- work item script behavior (`tickets.sh`)
## Design notes
Keeping common lint mechanics here avoids duplicating low-level validation while leaving each record type's policy in its owning crate.
## See also
- [`../../docs/design/memory-knowledge.md`](../../docs/design/memory-knowledge.md)
- [`../../docs/development/work-items.md`](../../docs/development/work-items.md)
+23 -5
View File
@@ -1,9 +1,27 @@
# llm-worker-macros
Rust メソッドを LLM 呼び出し可能なツールとして自動登録する手続きマクロクレート。引数構造体・Tool トレイト実装・ToolDefinition を自動生成する。
## Role
## 公開マクロ
`llm-worker-macros` provides procedural macros for declaring Rust methods as LLM-callable tools.
- `#[tool_registry]` — impl ブロックに付与し、内部の `#[tool]` メソッドを一括処理
- `#[tool]` — メソッドをツールとしてマーク
- `#[description = "..."]` — 引数に説明を付与(JSON Schema の description に反映)
## Boundaries
Owns:
- compile-time generation of tool argument structures and definitions
- small macro conveniences around tool descriptions and schemas
Does not own:
- runtime permission decisions
- filesystem scope checks
- tool execution policy
- model/tool-loop orchestration
## Design notes
Macros reduce boilerplate, but they must not imply capability. A generated tool definition is still subject to manifest permissions, Pod scope, and runtime policy.
## See also
- [`../../docs/design/tool-permissions-scope.md`](../../docs/design/tool-permissions-scope.md)
+25 -16
View File
@@ -1,23 +1,32 @@
# llm-worker
LLM との対話を管理する低レベル基盤クレート。会話履歴、ツール実行、イベントストリーミング、ライフサイクルフックを統合した `Worker` 抽象を提供する。
## Role
## 公開型
`llm-worker` owns provider-independent model turn orchestration over committed history, tools, callbacks, retries, continuation, pruning, and compaction boundaries.
### コア
## Boundaries
- `Worker<C, S>` — LLM 対話の中央管理(ターン実行、ツール呼び出し、キャンセル)
- `WorkerConfig` / `WorkerResult` / `WorkerError` — 設定・実行結果・エラー
- `Item` / `ContentPart` / `Role` — 会話履歴の構成要素
Owns:
### モジュール
- Worker history mutation and append contracts
- tool-call loop semantics
- pre-stream retry and stream-started continuation policy
- pruning/compaction coordination from the Worker perspective
- provider-neutral events/callbacks/interceptors
- `llm_client` — プロバイダ抽象(`LlmClient` トレイト、`Request`, `RequestConfig`, Anthropic/OpenAI/Gemini/Ollama 実装)
- `tool` — ツール定義・実行(`Tool` トレイト、`ToolDefinition`, `ToolOutput`, サイズ判定による Inline/Stored 切替)
- `tool_server` — ツール登録・ルックアップ(`ToolServer`, `ToolServerHandle`
- `hook` — 実行フローへの介入ポイント(`Hook` トレイト、`PreToolCall`, `PostToolCall`, `OnTurnEnd` など)
- クロージャベースイベント購読(`Worker::on_text_block()`, `on_tool_use_block()`, `on_usage()` 等)
- `timeline` — イベントストリームのディスパッチ(`Handler` トレイト、各ブロックコレクター)。パワーユーザー向けに `timeline_mut()` も提供
- `event` — ストリーミングイベント型(`Event`, `BlockStart`, `BlockDelta` など)
- `state` — 型状態パターンによるキャッシュ保護(`Mutable` / `CacheLocked`
cratesの整理Add READMEsRE to all crates@@
Does not own:
- Pod names, sockets, process lifecycle, or scope delegation (`pod`)
- product CLI shape (`yoi`)
- provider catalog and secret resolution (`provider`, `secrets`)
- durable Pod current state (`pod-store`)
## Design notes
The Worker is where turn lifecycle belongs because it sees history, in-flight usage, partial output, and tool-call state. It should not receive context-only volatile facts; model-affecting inputs must first be appended to history.
## See also
- [`../../docs/design/context-history.md`](../../docs/design/context-history.md)
- [`../../docs/design/compaction.md`](../../docs/design/compaction.md)
- [`../../docs/design/provider-model-boundary.md`](../../docs/design/provider-model-boundary.md)
+27 -10
View File
@@ -1,14 +1,31 @@
# manifest
Pod の宣言的設定を TOML マニフェストとして定義・パースするクレート。モデル設定、ワーカー設定、ディレクトリスコープ制約を記述できる。
## Role
## 公開型
`manifest` resolves reusable profile/configuration inputs into the concrete runtime Manifest used to create or restore Pods.
- `PodManifest` — Pod 設定全体(`from_toml()` でパース)
- `PodMeta` — Pod メタデータ(名前、pwd)
- `ModelConfig` — LLM モデル設定(scheme、base_url、model_id、auth
- `SchemeKind` — wire scheme 種別(`Anthropic`, `OpenaiChat`, `OpenaiResponses`, `Gemini`
- `AuthRef` — 認証参照(`None`, `ApiKey { env, file }`, `CodexOAuth`
- `WorkerManifest` — ワーカー設定(システムプロンプト、生成設定、reasoning
- `ScopeConfig` / `ScopeRule` / `Permission` — allow / deny の宣言的スコープ設定
- `Scope` — 実行時スコープ。`from_config(&ScopeConfig, pwd)` で構築し、`is_readable` / `is_writable` / `permission_at` で問い合わせる
## Boundaries
Owns:
- Profile and Manifest data structures
- source/partial/resolved configuration layering
- path and prompt-resource resolution
- tool permission and filesystem scope configuration types
- model/provider references as configuration records
Does not own:
- provider HTTP clients or secret lookup implementation (`provider`, `secrets`)
- Pod lifecycle (`pod`)
- product CLI parsing (`yoi`)
- generated memory records (`memory`)
## Design notes
Profiles are reusable recipes; resolved Manifests are runtime contracts. Keep runtime-bound fields such as Pod name, concrete delegated scope, sockets, session pointers, and raw secrets out of reusable Profiles.
## See also
- [`../../docs/design/profiles-manifests-prompts.md`](../../docs/design/profiles-manifests-prompts.md)
- [`../../docs/design/tool-permissions-scope.md`](../../docs/design/tool-permissions-scope.md)
+31
View File
@@ -0,0 +1,31 @@
# memory
## Role
`memory` owns generated memory, Knowledge records, staging/consolidation mechanics, linting, and audit observations.
## Boundaries
Owns:
- memory/Knowledge record parsing and validation
- memory lint subcommand backend behavior
- staging and consolidation file mechanics
- audit log observation writes
- generated memory prompt support where it belongs below the CLI
Does not own:
- authoritative project records (`work-items/`, git history)
- normal Pod turn orchestration (`llm-worker`)
- product CLI command shape (`yoi`)
- curated workflow definitions (`workflow`)
## Design notes
Memory is useful context, not authority. It should preserve small durable preferences and rationale without duplicating tickets, docs, or implementation reports.
## See also
- [`../../docs/design/memory-knowledge.md`](../../docs/design/memory-knowledge.md)
- [`../../docs/development/work-items.md`](../../docs/development/work-items.md)
+30
View File
@@ -0,0 +1,30 @@
# pod-registry
## Role
`pod-registry` tracks live Pod process ownership and delegated scope locks at runtime.
## Boundaries
Owns:
- machine-local live Pod registration
- collision detection for running Pod names
- delegated scope lock bookkeeping
- registry cleanup hooks for stopped or unreachable children
Does not own:
- durable Pod metadata (`pod-store`)
- replayable session logs (`session-store`)
- socket protocol definitions (`protocol`)
- project work item state
## Design notes
The registry is a runtime coordination mechanism. It can help decide whether a Pod is live or colliding, but durable visibility/restoration should be backed by Pod metadata when possible.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
- [`../../docs/design/tool-permissions-scope.md`](../../docs/design/tool-permissions-scope.md)
+30
View File
@@ -0,0 +1,30 @@
# pod-store
## Role
`pod-store` owns current Pod metadata keyed by Pod name.
## Boundaries
Owns:
- persisted Pod metadata files
- current active/pending session pointers
- resolved manifest snapshots for restoration
- parent-visible spawned-child metadata
- restoration labels and diagnostics derived from metadata
Does not own:
- replayable conversation logs (`session-store`)
- live process locks or socket reachability (`pod-registry`, `client`)
- product CLI behavior (`yoi`)
- model turn execution (`llm-worker`)
## Design notes
Pod metadata is intentionally thin. It should answer current-state questions without duplicating transcripts or becoming a second session log.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
+23 -13
View File
@@ -1,22 +1,32 @@
# pod
独立したエージェント実行単位「Pod」を実装するクレート。LLM ワーカーセッションをマニフェスト設定・ファイルスコープ制約と組み合わせ、Unix ソケット経由の双方向通信で操作可能にする。
## Role
## 公開型
`pod` turns an `llm-worker` Worker into a named runtime entity with manifest configuration, scoped tools, session persistence, protocol handling, and Pod metadata integration.
### コア
## Boundaries
- `Pod<C, St>` — LLM ワーカーセッション + マニフェスト + スコープのラッパー(`run()`, `resume()`, `from_manifest()`
- `PodRunResult` — 実行結果(`Finished`, `Paused`
- `PodError` — エラー型
Owns:
### 制御
- Pod lifecycle and socket protocol serving
- Worker construction around a resolved Manifest
- session-store and pod-store coordination
- built-in tool registration under scope/policy
- spawned-child orchestration hooks
- `PodController` — Pod ライフサイクルを管理するアクター(`spawn()` でタスク起動)
- `PodHandle` — Pod への操作ハンドル(`send()`, `subscribe()`
- `PodSharedState` / `PodStatus` — 共有状態(`Idle`, `Running`, `Paused`
Does not own:
### ランタイム
- provider-specific wire formats (`provider` / `llm-worker` clients)
- product CLI parsing (`yoi`)
- TUI display authority (`tui`)
- current-state storage schema outside Pod metadata (`pod-store`)
- `RuntimeDir``$XDG_RUNTIME_DIR/yoi/{pod_name}/` 配下のランタイムディレクトリ管理(ステータス・履歴のアトミック書き込み)
- `SocketServer` — Pod Protocol 用 Unix ソケットサーバー
## Design notes
A Pod is runtime authority, not UI state. It should commit model-visible events through history/session paths and keep current Pod-name state in Pod metadata rather than in transient runtime files.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
- [`../../docs/design/context-history.md`](../../docs/design/context-history.md)
- [`../../docs/design/tool-permissions-scope.md`](../../docs/design/tool-permissions-scope.md)
+27 -6
View File
@@ -1,10 +1,31 @@
# protocol
クライアントとPod間の通信プロトコルを定義するクレート。Unix ソケット上で JSON Lines として送受信されるメッセージ型を提供する。
## Role
## 公開型
`protocol` defines the JSONL message boundary between Pod clients and Pod servers.
- `Method` — クライアント→Pod のコマンド(`Run`, `Resume`, `Cancel`
- `Event` — Pod→クライアント のイベント(`TurnStart`, `TextDelta`, `ToolCallStart`, `Usage`, `Error` など)
- `TurnResult` — ターン完了状態(`Finished`, `Paused`
- `ErrorCode` — エラー分類(`AlreadyRunning`, `ProviderError`, `ToolError` など)
## Boundaries
Owns:
- transport-neutral method/event/result types
- request/reply and broadcast event shapes
- protocol error categories shared by clients and servers
Does not own:
- Unix socket implementation details (`client`, `pod`)
- TUI rendering (`tui`)
- Worker history semantics (`llm-worker`)
- durable storage (`session-store`, `pod-store`)
## Design notes
The exact enum variants are code authority. The README should describe the boundary, not duplicate every message shape.
Protocol events can inform UI and orchestration, but durable state changes still need to flow through Pod/session/metadata records.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
- [`../../docs/design/context-history.md`](../../docs/design/context-history.md)
+27 -15
View File
@@ -1,21 +1,33 @@
# provider
マニフェストの `ModelManifest` から適切な `LlmClient``HttpTransport<S>`)を構築するファクトリクレート。プロバイダ / モデルカタログの解決、API キーの local secret store / 明示ファイル解決、scheme ↔ auth の整合検証を担う。
## Role
## 公開型
`provider` resolves model/provider configuration and constructs provider-specific LLM clients for `llm-worker`.
- `build_client(manifest: &ModelManifest) -> Result<Box<dyn LlmClient>, ProviderError>` — ref / inline を受け取り、カタログ解決 → `HttpTransport<S>` 構築までを行う
- `build_client_from_config(config: &ModelConfig) -> Result<Box<dyn LlmClient>, ProviderError>` — 解決済み `ModelConfig` から構築
- `catalog::resolve_model_manifest(&ModelManifest) -> Result<ModelConfig, ResolveError>` — ref / inline を `ModelConfig` へ解決(build せずに参照のみ欲しいケース向け)
- `catalog::{load_providers, load_models}` — builtin + user override を解決したカタログ
- `ProviderError` / `CatalogError` / `catalog::ResolveError` — エラー種別
## Boundaries
## 責務
Owns:
- プロバイダ / モデルカタログの builtin (`resources/{providers,models}/builtin.toml`) と user override (`$XDG_CONFIG_HOME/yoi/{providers,models}.toml`) の解決
- `ModelManifest` の ref 形を `(provider, model_id)` に split し、`ModelConfig` へ展開
- `AuthRef::SecretRef` / `AuthRef::ApiKey``ResolvedAuth::ApiKey` に解決(通常は local secret store、低レベル manifest では明示ファイルも可)
- `AuthRef::None` / `AuthRef::CodexOAuth` の解決
- `Scheme::required_auth()``ResolvedAuth` の妥当性検証(非対応組合せは構築エラー)
- capability は manifest 明示 > model catalog > provider.default_capability > `Scheme::default_capability()` の順で解決
- context window は manifest 明示 > model catalog > provider.default_context_window > builtin fallback の順で解決し、inline model でも `context_window` で override できる
- builtin and user provider/model catalog resolution
- model reference expansion into concrete model config
- auth reference resolution through supported mechanisms
- provider/scheme capability and context-window metadata
- provider-specific client construction
Does not own:
- Worker turn lifecycle (`llm-worker`)
- secret storage internals (`secrets`)
- Pod lifecycle (`pod`)
- product CLI parsing (`yoi`)
## Design notes
Provider API facts drift. Keep wire-format, auth, catalog, and capability differences here so Worker semantics remain stable.
Codex OAuth is a separate integration from normal provider secret refs because its local file shape and lifecycle differ.
## See also
- [`../../docs/design/provider-model-boundary.md`](../../docs/design/provider-model-boundary.md)
- [`../../docs/design/profiles-manifests-prompts.md`](../../docs/design/profiles-manifests-prompts.md)
+30
View File
@@ -0,0 +1,30 @@
# secrets
## Role
`secrets` provides the local secret reference store used by provider and tool configuration.
## Boundaries
Owns:
- provider-independent secret id to value lookup
- modest plaintext-at-rest reduction and integrity checks
- secret store file format and validation
Does not own:
- provider-specific auth protocol (`provider`)
- Codex OAuth local integration shape (`provider`)
- prompting or model context
- work item or diagnostic redaction policy outside its API surface
## Design notes
The store is not a high-assurance keychain. It exists to avoid scattering plaintext credentials through config files and logs, not to provide strong local adversary protection.
Secret values must stay out of diagnostics, Debug output, CLI/TUI output, work items, docs, session logs, model context, and persisted plaintext files.
## See also
- [`../../docs/design/provider-model-boundary.md`](../../docs/design/provider-model-boundary.md)
+29
View File
@@ -0,0 +1,29 @@
# session-metrics
## Role
`session-metrics` records usage and memory/session metrics that are useful for diagnostics and maintenance.
## Boundaries
Owns:
- metric record types and persistence helpers
- explicit memory usage/read/reference observations where applicable
- lightweight diagnostic data that should not become model context by itself
Does not own:
- prompt context packing (`llm-worker`)
- generated memory contents (`memory`)
- provider billing semantics (`provider`)
- UI status rendering (`tui`)
## Design notes
Metrics are observations. They may guide compaction, memory effectiveness analysis, or UX, but they are not authoritative conversation history and should not smuggle hidden state into model input.
## See also
- [`../../docs/design/memory-knowledge.md`](../../docs/design/memory-knowledge.md)
- [`../../docs/design/compaction.md`](../../docs/design/compaction.md)
+22 -19
View File
@@ -1,29 +1,32 @@
# llm-worker-persistence
# session-store
Worker のセッション永続化を提供するクレート。追記専用の JSONL ログとして状態遷移を記録し、ログの再生によってセッションを完全に復元する。大きなツール出力は Blob ストアに分離保存する。
## Role
## 公開型
`session-store` owns replayable append-only session logs.
### セッション
## Boundaries
- `Session<C, St>` — Worker をラップした永続化セッション(`run()`, `resume()`, `fork()`, `fork_at()`
- `SessionId` — UUID v7 によるセッション識別子
- `SessionConfig` — 永続化設定(イベントトレース記録の有無)
Owns:
### ストア
- session identifiers and segment lineage
- JSONL log entries for replayable conversation/runtime history
- restoring Worker/session state from committed records
- schema surfaces that should make drift compile-visible
- `Store` トレイト — 永続化バックエンド抽象(`append`, `read_all`, `list_sessions`
- `FsStore` — ファイルシステム上の JSONL ストア実装
- `BlobStore` トレイト — Blob ストレージ抽象(`store`, `load`
- `FsBlobStore` — ファイルシステム上の Blob ストア実装
- `BlobOutputProcessor` — ToolOutputProcessor 実装(小さい出力はインライン、大きい出力は Blob 保存)
Does not own:
### ログ
- current Pod-name metadata (`pod-store`)
- live process/socket discovery (`pod-registry`, `client`)
- UI state (`tui`)
- generated memory summaries (`memory`)
- `LogEntry` — セッションログのエントリ型(`SegmentStart`, `UserInput`, `AssistantItem`, `ToolResult`, `SystemItem`, `TurnEnd` など)
- `RestoredState` — ログ再生で復元された状態
- `collect_state()` — ログエントリ列から状態を復元する関数
## Design notes
### ツール
A session log records what happened. It is not the current Pod registry and should not be queried as the only source of "what does Pod X mean now?"
- `InspectTool` — Blob 内容を取得する組み込みツール(行範囲・配列スライス・キー指定セレクタ対応)
Prefer explicit current log variants over broad legacy compatibility when schema changes; hidden compatibility can make future replay bugs silent.
## See also
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
- [`../../docs/design/context-history.md`](../../docs/design/context-history.md)
+30
View File
@@ -0,0 +1,30 @@
# tools
## Role
`tools` implements built-in tools and shared tool execution helpers used by Pods.
## Boundaries
Owns:
- built-in filesystem, web, memory, and Pod-management tool implementations where applicable
- bounded tool output formatting
- scope-aware file operation helpers
- tool-facing diagnostics suitable for history/model consumption
Does not own:
- manifest permission policy definition (`manifest`)
- Worker tool-loop semantics (`llm-worker`)
- Pod lifecycle decisions (`pod`)
- UI presentation (`tui`)
## Design notes
A tool implementation must assume model input is untrusted. Permission policy, scope checks, output bounding, and redaction are part of the safety boundary, not optional UI behavior.
## See also
- [`../../docs/design/tool-permissions-scope.md`](../../docs/design/tool-permissions-scope.md)
- [`../../docs/design/memory-knowledge.md`](../../docs/design/memory-knowledge.md)
+26 -6
View File
@@ -1,10 +1,30 @@
# tui
Pod と対話するためのターミナル UI クライアント。Unix ソケット経由で Pod に接続し、チャット形式でユーザー入力の送信・アシスタント応答の表示・ツール実行の監視を行う。
## Role
## 公開型
`tui` implements terminal UI clients for interacting with one or more Pods.
- `App` — アプリケーション状態(メッセージ履歴、入力バッファ、スクロール位置)
- `Message` / `MessageKind` — 表示メッセージ(User, Assistant, Tool, Error, Status
- `PodClient` — Pod との Unix ソケット通信クライアント(`connect()`, `send()`, `next_event()`
- `draw()` — ratatui によるUI描画関数
## Boundaries
Owns:
- terminal rendering and input handling
- local composer state and UI affordances
- single-Pod attach/restore screens
- multi-Pod dashboard presentation
Does not own:
- durable transcript authority (`session-store`)
- Pod current state (`pod-store`)
- Pod lifecycle policy (`pod`)
- product CLI ownership (`yoi`)
## Design notes
The TUI should display committed events and Pod snapshots rather than inventing durable state. Local input history and optimistic UI affordances are editing conveniences; they must not become hidden model context.
## See also
- [`../../docs/design/context-history.md`](../../docs/design/context-history.md)
- [`../../docs/design/pod-session-state.md`](../../docs/design/pod-session-state.md)
+29
View File
@@ -0,0 +1,29 @@
# workflow
## Role
`workflow` owns project-authored workflow record parsing, validation, and invocation metadata.
## Boundaries
Owns:
- workflow file schema/linting
- workflow discovery from configured workflow locations
- typed workflow metadata used by runtime/tooling layers
Does not own:
- generated memory records (`memory`)
- work item file lifecycle (`tickets.sh`, `work-items/`)
- Pod orchestration decisions (`pod`, workflows executed by agents)
- product CLI command shape (`yoi`)
## Design notes
Workflows are curated project assets. They should not be mixed with generated memory, and invoking a workflow should not bypass work item authority or scope policy.
## See also
- [`../../docs/development/workflows.md`](../../docs/development/workflows.md)
- [`../../docs/design/profiles-manifests-prompts.md`](../../docs/design/profiles-manifests-prompts.md)
+30
View File
@@ -0,0 +1,30 @@
# yoi
## Role
`yoi` is the product CLI facade. It owns the installed binary name, top-level argument parsing, normal TUI launch, and product subcommands such as `yoi pod` and `yoi memory lint`.
## Boundaries
Owns:
- product command shape and user-facing CLI entry points
- profile/default selection for ordinary startup
- wiring library crates into the executable
- headless maintenance commands that are part of the product surface
Does not own:
- Pod runtime internals (`pod`)
- socket client mechanics (`client`)
- model turn orchestration (`llm-worker`)
- TUI rendering/runtime implementation (`tui`)
## Design notes
Keeping product CLI ownership here prevents lower crates from depending on the binary name or parsing top-level arguments. Runtime launch should use typed command boundaries, not shell-command strings.
## See also
- [`../../docs/design/overview.md`](../../docs/design/overview.md)
- [`../../docs/design/profiles-manifests-prompts.md`](../../docs/design/profiles-manifests-prompts.md)