Skip to content

Commit 625d5f9

Browse files
committed
📝 Expand README with complete feature documentation
Document previously undocumented Studio features: - Real-time streaming and token usage tracking - Full mouse support (click, scroll, navigate) - Clipboard integration with visual feedback - File search modal (Ctrl+F) - Explore mode with semantic blame feature - In-app modals table (Settings, File Search, Preset/Emoji selectors) - New --raw flag for markdown output commands Also adds Explore mode controls and expands Commit mode keyboard shortcuts with preset (p) and emoji (m) selector keys.
1 parent b565604 commit 625d5f9

File tree

3 files changed

+190
-129
lines changed

3 files changed

+190
-129
lines changed

CLAUDE.md

Lines changed: 65 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -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

161164
Iris 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

170174
Each 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

200204
Iris 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

228232
Iris 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

238242
The `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

CONFIG.md

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ The configuration file is organized into these main sections:
1414

1515
### Global Settings
1616

17-
| Option | Type | Default | Description |
18-
|--------|------|---------|-------------|
19-
| `use_gitmoji` | Boolean | `false` | Enable Gitmoji in commit messages |
20-
| `custom_instructions` | String | `""` | Custom instructions included in all LLM prompts |
21-
| `instruction_preset` | String | `"default"` | Default preset for AI instructions |
17+
| Option | Type | Default | Description |
18+
| --------------------- | ------- | ----------- | ----------------------------------------------- |
19+
| `use_gitmoji` | Boolean | `false` | Enable Gitmoji in commit messages |
20+
| `custom_instructions` | String | `""` | Custom instructions included in all LLM prompts |
21+
| `instruction_preset` | String | `"default"` | Default preset for AI instructions |
2222

2323
**Examples:**
2424

@@ -33,8 +33,8 @@ instruction_preset = "conventional"
3333

3434
### Default Provider
3535

36-
| Option | Type | Default | Description |
37-
|--------|------|---------|-------------|
36+
| Option | Type | Default | Description |
37+
| ------------------ | ------ | ---------- | ------------------------------- |
3838
| `default_provider` | String | `"openai"` | The default LLM provider to use |
3939

4040
**Example:**
@@ -47,23 +47,23 @@ default_provider = "anthropic"
4747

4848
Each provider has its own subtable under `[providers]` with these fields:
4949

50-
| Field | Type | Required | Description |
51-
|-------|------|----------|-------------|
52-
| `api_key` | String | Yes | The provider's API key |
53-
| `model` | String | No | Primary model for complex analysis tasks |
54-
| `fast_model` | String | No | Fast model for simple tasks (status updates, parsing) |
55-
| `additional_params` | Table | No | Additional provider-specific parameters |
56-
| `custom_token_limit` | Integer | No | Custom token limit override |
50+
| Field | Type | Required | Description |
51+
| -------------------- | ------- | -------- | ----------------------------------------------------- |
52+
| `api_key` | String | Yes | The provider's API key |
53+
| `model` | String | No | Primary model for complex analysis tasks |
54+
| `fast_model` | String | No | Fast model for simple tasks (status updates, parsing) |
55+
| `additional_params` | Table | No | Additional provider-specific parameters |
56+
| `custom_token_limit` | Integer | No | Custom token limit override |
5757

5858
## 🤖 Supported Providers
5959

6060
Git-Iris supports three LLM providers:
6161

62-
| Provider | Default Model | Fast Model | Context Window | API Key Env |
63-
|----------|---------------|------------|----------------|-------------|
64-
| **openai** | gpt-5.1 | gpt-5.1-mini | 128,000 | `OPENAI_API_KEY` |
65-
| **anthropic** | claude-sonnet-4-5-20250929 | claude-haiku-4-5-20251001 | 200,000 | `ANTHROPIC_API_KEY` |
66-
| **google** | gemini-3-pro-preview | gemini-2.5-flash | 1,000,000 | `GOOGLE_API_KEY` |
62+
| Provider | Default Model | Fast Model | Context Window | API Key Env |
63+
| ------------- | -------------------------- | ------------------------- | -------------- | ------------------- |
64+
| **openai** | gpt-5.1 | gpt-5.1-mini | 128,000 | `OPENAI_API_KEY` |
65+
| **anthropic** | claude-sonnet-4-5-20250929 | claude-haiku-4-5-20251001 | 200,000 | `ANTHROPIC_API_KEY` |
66+
| **google** | gemini-3-pro-preview | gemini-2.5-flash | 1,000,000 | `GOOGLE_API_KEY` |
6767

6868
> **Note:** The `claude` provider name is still supported as a legacy alias for `anthropic`.
6969
@@ -157,13 +157,13 @@ git-iris project-config --print
157157

158158
You can also configure Git-Iris using environment variables:
159159

160-
| Variable | Description |
161-
|----------|-------------|
162-
| `OPENAI_API_KEY` | OpenAI API key |
163-
| `ANTHROPIC_API_KEY` | Anthropic API key |
164-
| `GOOGLE_API_KEY` | Google API key |
165-
| `GITIRIS_PROVIDER` | Default provider (for Docker/CI) |
166-
| `GITIRIS_API_KEY` | API key (for Docker/CI) |
160+
| Variable | Description |
161+
| ------------------- | -------------------------------- |
162+
| `OPENAI_API_KEY` | OpenAI API key |
163+
| `ANTHROPIC_API_KEY` | Anthropic API key |
164+
| `GOOGLE_API_KEY` | Google API key |
165+
| `GITIRIS_PROVIDER` | Default provider (for Docker/CI) |
166+
| `GITIRIS_API_KEY` | API key (for Docker/CI) |
167167

168168
**Example (Docker/CI):**
169169

@@ -179,13 +179,15 @@ docker run --rm -v "$(pwd):/git-repo" \
179179
Git-Iris includes built-in instruction presets for different styles:
180180

181181
**General Presets:**
182+
182183
- `default` — Standard professional style
183184
- `conventional` — Conventional Commits specification
184185
- `detailed` — More context and explanation
185186
- `concise` — Short and to-the-point
186187
- `cosmic` — Mystical, space-themed language ✨
187188

188189
**Review-Specific Presets:**
190+
189191
- `security` — Focus on security vulnerabilities
190192
- `performance` — Analyze performance optimizations
191193
- `architecture` — Evaluate design patterns
@@ -221,13 +223,13 @@ git-iris config --provider openai --token-limit 4000
221223

222224
## 🐛 Troubleshooting
223225

224-
| Issue | Solution |
225-
|-------|----------|
226-
| **Authentication failed** | Verify API key is correct and has required permissions |
227-
| **Model not found** | Check you're using a supported model for your provider |
228-
| **Token limit exceeded** | Reduce `custom_token_limit` or use a smaller changeset |
229-
| **Slow responses** | Try a faster model with `--fast-model` |
230-
| **Debug issues** | Enable logging with `-l` or use `--debug` for agent details |
226+
| Issue | Solution |
227+
| ------------------------- | ----------------------------------------------------------- |
228+
| **Authentication failed** | Verify API key is correct and has required permissions |
229+
| **Model not found** | Check you're using a supported model for your provider |
230+
| **Token limit exceeded** | Reduce `custom_token_limit` or use a smaller changeset |
231+
| **Slow responses** | Try a faster model with `--fast-model` |
232+
| **Debug issues** | Enable logging with `-l` or use `--debug` for agent details |
231233

232234
**Enable debug logging:**
233235

0 commit comments

Comments
 (0)