@@ -117,31 +117,34 @@ Studio is built on a **pure reducer pattern** for predictable state management:
117117### Key Components
118118
119119** Events (` events.rs ` ):**
120+
120121- ` StudioEvent ` enum captures all possible state transitions
121122- Events are dispatched from handlers and async tasks
122123- Clear, traceable data flow
123124
124125** Reducer (` reducer.rs ` ):**
126+
125127- Pure function: ` (state, event) → (state, effects) `
126128- No I/O inside reducer—side effects returned as data
127129- Enables testing, replay, debugging
128130
129131** Side Effects:**
132+
130133- ` SpawnAgent { task } ` — Start async agent execution
131134- ` LoadData { data_type, from_ref, to_ref } ` — Load git data
132135- ` UpdateContent { content, update_type } ` — Update displayed content
133136- ` StreamUpdate { tool_name, message } ` — Show progress updates
134137
135138### Studio Modes
136139
137- | Mode | Description | State Struct |
138- | ------| -------------| --------------|
139- | ** Explore** | Navigate codebase with AI insights | ` ExploreMode ` |
140- | ** Commit** | Generate/edit commit messages | ` CommitMode ` |
141- | ** Review** | AI-powered code reviews | ` ReviewMode ` |
142- | ** PR** | Pull request descriptions | ` PRMode ` |
143- | ** Changelog** | Structured changelog generation | ` ChangelogMode ` |
144- | ** Release Notes** | Release documentation | ` ReleaseNotesMode ` |
140+ | Mode | Description | State Struct |
141+ | ----------------- | ---------------------------------- | ------------------ |
142+ | ** Explore** | Navigate codebase with AI insights | ` ExploreMode ` |
143+ | ** Commit** | Generate/edit commit messages | ` CommitMode ` |
144+ | ** Review** | AI-powered code reviews | ` ReviewMode ` |
145+ | ** PR** | Pull request descriptions | ` PRMode ` |
146+ | ** Changelog** | Structured changelog generation | ` ChangelogMode ` |
147+ | ** Release Notes** | Release documentation | ` ReleaseNotesMode ` |
145148
146149### Chat Integration
147150
@@ -159,6 +162,7 @@ pub struct ChatState {
159162```
160163
161164Iris can update content directly through tools:
165+
162166- ` update_commit ` — Modify commit message
163167- ` update_pr ` — Modify PR description
164168- ` update_review ` — Modify review content
@@ -169,41 +173,41 @@ Iris can update content directly through tools:
169173
170174Each capability is defined in ` src/agents/capabilities/*.toml ` :
171175
172- | Capability | Output Type | Description |
173- | ------------| -------------| -------------|
174- | ` commit ` | ` GeneratedMessage ` | Commit messages with emoji/title/body |
175- | ` review ` | ` MarkdownReview ` | Multi-dimensional code analysis |
176- | ` pr ` | ` MarkdownPullRequest ` | Pull request descriptions |
177- | ` changelog ` | ` MarkdownChangelog ` | Keep a Changelog format |
178- | ` release_notes ` | ` MarkdownReleaseNotes ` | Release documentation |
179- | ` chat ` | Varies | Interactive conversation |
176+ | Capability | Output Type | Description |
177+ | --------------- | ---------------------- | ------------------------------------- |
178+ | ` commit ` | ` GeneratedMessage ` | Commit messages with emoji/title/body |
179+ | ` review ` | ` MarkdownReview ` | Multi-dimensional code analysis |
180+ | ` pr ` | ` MarkdownPullRequest ` | Pull request descriptions |
181+ | ` changelog ` | ` MarkdownChangelog ` | Keep a Changelog format |
182+ | ` release_notes ` | ` MarkdownReleaseNotes ` | Release documentation |
183+ | ` chat ` | Varies | Interactive conversation |
180184
181185### Tools Available to Iris
182186
183- | Tool | Purpose |
184- | ------| ---------|
185- | ` git_diff(detail, from, to) ` | Get changes with relevance scores |
186- | ` git_log(count) ` | Recent commit history for style reference |
187- | ` git_status() ` | Repository status |
188- | ` git_changed_files() ` | List of changed files |
189- | ` file_analyzer() ` | Deep file analysis (content, metadata) |
190- | ` code_search() ` | Search for patterns, functions, classes |
191- | ` workspace() ` | Iris's notes and task tracking |
192- | ` project_docs(doc_type) ` | Read README, AGENTS.md, CLAUDE.md |
193- | ` parallel_analyze() ` | Concurrent subagent processing |
194- | ` update_commit() ` | Chat: update commit message |
195- | ` update_pr() ` | Chat: update PR description |
196- | ` update_review() ` | Chat: update review |
187+ | Tool | Purpose |
188+ | ---------------------------- | ----------------------------------------- |
189+ | ` git_diff(detail, from, to) ` | Get changes with relevance scores |
190+ | ` git_log(count) ` | Recent commit history for style reference |
191+ | ` git_status() ` | Repository status |
192+ | ` git_changed_files() ` | List of changed files |
193+ | ` file_analyzer() ` | Deep file analysis (content, metadata) |
194+ | ` code_search() ` | Search for patterns, functions, classes |
195+ | ` workspace() ` | Iris's notes and task tracking |
196+ | ` project_docs(doc_type) ` | Read README, AGENTS.md, CLAUDE.md |
197+ | ` parallel_analyze() ` | Concurrent subagent processing |
198+ | ` update_commit() ` | Chat: update commit message |
199+ | ` update_pr() ` | Chat: update PR description |
200+ | ` update_review() ` | Chat: update review |
197201
198202### Context Strategy
199203
200204Iris adapts her approach based on changeset size:
201205
202- | Scenario | Strategy |
203- | ----------| ----------|
204- | Small (<10 files, <100 lines each) | Full context for all files |
205- | Medium (10-20 files) | Relevance scoring to prioritize |
206- | Large (20+ files) | Parallel subagent analysis |
206+ | Scenario | Strategy |
207+ | ---------------------------------- | ------------------------------- |
208+ | Small (<10 files, <100 lines each) | Full context for all files |
209+ | Medium (10-20 files) | Relevance scoring to prioritize |
210+ | Large (20+ files) | Parallel subagent analysis |
207211
208212### Adding a New Capability
209213
@@ -227,13 +231,13 @@ Instructions for Iris...
227231
228232Iris produces structured responses (all in ` src/types/ ` ):
229233
230- | Type | Format | Description |
231- | ------| --------| -------------|
232- | ` GeneratedMessage ` | JSON | ` { emoji, title, message } ` |
233- | ` MarkdownPullRequest ` | Markdown | ` { content: String } ` |
234- | ` MarkdownReview ` | Markdown | ` { content: String } ` |
235- | ` MarkdownChangelog ` | Markdown | ` { content: String } ` |
236- | ` MarkdownReleaseNotes ` | Markdown | ` { content: String } ` |
234+ | Type | Format | Description |
235+ | ---------------------- | -------- | --------------------------- |
236+ | ` GeneratedMessage ` | JSON | ` { emoji, title, message } ` |
237+ | ` MarkdownPullRequest ` | Markdown | ` { content: String } ` |
238+ | ` MarkdownReview ` | Markdown | ` { content: String } ` |
239+ | ` MarkdownChangelog ` | Markdown | ` { content: String } ` |
240+ | ` MarkdownReleaseNotes ` | Markdown | ` { content: String } ` |
237241
238242The ` Markdown* ` types use a simple wrapper, letting the LLM drive format while capability TOMLs provide guidelines.
239243
@@ -243,23 +247,23 @@ Git-Iris follows the **SilkCircuit Neon** color palette for a cohesive, electric
243247
244248### Color Palette
245249
246- | Color | Hex | RGB | Usage |
247- | -------| -----| -----| -------|
248- | Electric Purple | ` #e135ff ` | ` (225, 53, 255) ` | Active modes, markers, emphasis |
249- | Neon Cyan | ` #80ffea ` | ` (128, 255, 234) ` | Paths, interactions, focus |
250- | Coral | ` #ff6ac1 ` | ` (255, 106, 193) ` | Hashes, numbers, constants |
251- | Electric Yellow | ` #f1fa8c ` | ` (241, 250, 140) ` | Warnings, timestamps |
252- | Success Green | ` #50fa7b ` | ` (80, 250, 123) ` | Success, confirmations |
253- | Error Red | ` #ff6363 ` | ` (255, 99, 99) ` | Errors, danger |
250+ | Color | Hex | RGB | Usage |
251+ | --------------- | --------- | ----------------- | ------------------------------- |
252+ | Electric Purple | ` #e135ff ` | ` (225, 53, 255) ` | Active modes, markers, emphasis |
253+ | Neon Cyan | ` #80ffea ` | ` (128, 255, 234) ` | Paths, interactions, focus |
254+ | Coral | ` #ff6ac1 ` | ` (255, 106, 193) ` | Hashes, numbers, constants |
255+ | Electric Yellow | ` #f1fa8c ` | ` (241, 250, 140) ` | Warnings, timestamps |
256+ | Success Green | ` #50fa7b ` | ` (80, 250, 123) ` | Success, confirmations |
257+ | Error Red | ` #ff6363 ` | ` (255, 99, 99) ` | Errors, danger |
254258
255259### Backgrounds
256260
257- | Surface | Hex | Usage |
258- | ---------| -----| -------|
259- | Base | ` #121218 ` | Main background |
260- | Panel | ` #181820 ` | Individual panels |
261- | Highlight | ` #2d283c ` | Selections |
262- | Code | ` #1e1e28 ` | Code blocks |
261+ | Surface | Hex | Usage |
262+ | --------- | --------- | ----------------- |
263+ | Base | ` #121218 ` | Main background |
264+ | Panel | ` #181820 ` | Individual panels |
265+ | Highlight | ` #2d283c ` | Selections |
266+ | Code | ` #1e1e28 ` | Code blocks |
263267
264268### Implementation
265269
@@ -325,11 +329,11 @@ git-iris config --provider anthropic --model claude-sonnet-4-5-20250929
325329
326330### Provider Details
327331
328- | Provider | Default Model | Fast Model | Context |
329- | ---------- | ---------------| ------------| ---------|
330- | openai | gpt-5.1 | gpt-5.1-mini | 128K |
331- | anthropic | claude-sonnet-4-5-20250929 | claude-haiku-4-5-20251001 | 200K |
332- | google | gemini-3-pro-preview | gemini-2.5-flash | 1M |
332+ | Provider | Default Model | Fast Model | Context |
333+ | --------- | -------------------------- | ------------------------- | ------- |
334+ | openai | gpt-5.1 | gpt-5.1-mini | 128K |
335+ | anthropic | claude-sonnet-4-5-20250929 | claude-haiku-4-5-20251001 | 200K |
336+ | google | gemini-3-pro-preview | gemini-2.5-flash | 1M |
333337
334338## Key Design Decisions
335339
0 commit comments