feat: add Agents tab for browsing AI coding assistants#3
Merged
Conversation
Design for a second TUI tab to browse AI coding assistants with: - gh-aw agent for weekly data scraping from artificialanalysis.ai - GitHub API integration for releases/changelogs (cached, lazy-loaded) - CLI detection for installed tools with version comparison - User config persistence at ~/.config/models/config.toml - Add/remove picker for tracking tools Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Detailed step-by-step plan covering: - Phase 1: Core infrastructure (deps, data structures, config) - Phase 2: CLI detection - Phase 3: TUI tab system - Phase 4: Agents tab implementation - Phase 5: Polish and gh-aw workflow Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add imports for load_agents and Config - Load agents file and config at startup - Pass agents_file and config to App::new - Simplify run_app function Co-Authored-By: Claude Opus 4.5 <[email protected]>
Replace placeholder functions with full agents tab implementation: - Categories panel showing All, Installed, CLI Tools, IDEs, Open Source - Agent list with columns for name, installed version, latest version, status - Detail panel showing agent name, repo, versions, pricing, providers, categories - Proper focus highlighting for panels (cyan when focused, gray otherwise) - Header row with underline styling in agent list - Selection state management with offset for header row Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add comprehensive event handling for the Agents tab: - Add new Message variants for agent navigation and actions - Implement tab-aware key handling (global vs tab-specific keys) - Support j/k navigation for categories and agents - Add h/l/Tab focus switching between panels - Add filter toggles (1/2/3 for installed/cli/open-source) - Add actions: o=open docs, r=open repo, c=copy name Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add GitHubClient that fetches repository stars, issues, license, and release info using the `gh api` CLI. Includes 1-hour cache TTL to minimize API calls. - GitHubClient with fetch/fetch_fresh methods - RepoResponse and ReleaseResponse structs for API parsing - format_stars() for human-readable star counts (e.g., "12.3k") - format_relative_time() to extract date from ISO timestamps - Unit tests for formatting functions Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add GitHubClient integration to the TUI to fetch live GitHub data for agents: - Add refresh_github_data() method to AgentsApp for bulk fetching - Add refresh_agent_github() method for single agent refresh - Add github_client field to App struct - Call refresh_github_data() on startup in mod.rs Errors are handled gracefully - GitHub data is optional and failures don't crash the app. Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add state fields and methods for the agent add/remove picker modal: - show_picker, picker_selected, picker_changes fields - open_picker, close_picker, picker_toggle_current methods - picker_next, picker_prev, picker_save navigation methods - Message variants: OpenPicker, ClosePicker, PickerNext, PickerPrev, PickerToggle, PickerSave Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add keybindings to open and interact with the picker modal: - 'a' to open picker when on Agents tab - j/k or arrows to navigate picker items - space to toggle selection - enter to save and close - esc to cancel Co-Authored-By: Claude Opus 4.5 <[email protected]>
Draw a centered popup modal for adding/removing tracked agents. The modal shows checkboxes with agent name (bold), category (gray), and installed status. Includes title and keybinding hints in footer. Co-Authored-By: Claude Opus 4.5 <[email protected]>
Wire up picker message handlers to call the appropriate AgentsApp methods. Add config field to App struct to enable picker_save functionality. Remove #[allow(dead_code)] attributes from picker methods and fields. Co-Authored-By: Claude Opus 4.5 <[email protected]>
Add 'u' key in Agents tab to copy the update command for the current agent to clipboard (e.g., "npm update -g @anthropic-ai/claude-code"). Co-Authored-By: Claude Opus 4.5 <[email protected]>
Co-Authored-By: Claude Opus 4.5 <[email protected]>
arimxyer
added a commit
that referenced
this pull request
Mar 7, 2026
- Add Model Info section with Creator, Source, Region, Type, Released - Source colored green (Open) / red (Closed) - Region and Type use creator category colors from sidebar - Add medal-colored ranks: gold ★ (#1), silver (#2), bronze (#3) - Add ★ Wins summary row near top showing per-model win counts - Pre-compute wins via two-pass to position above metric sections Co-Authored-By: Claude Opus 4.6 <[email protected]>
arimxyer
added a commit
that referenced
this pull request
Mar 20, 2026
Add Focus::Details to the Models tab, allowing users to navigate to the detail panel with h/l/Tab and scroll its content with j/k/g/G/Ctrl+d/u. - Add ScrollOffset-based detail_scroll to ModelsApp - Replace SwitchFocus with directional FocusModelLeft/FocusModelRight - Refactor draw_model_detail from fixed Layout+Tables to Vec<Line> + ScrollablePanel for scrollable, focus-aware rendering - Reset detail scroll on model change (navigation, sort, filter, search) - Update style guide: mark known inconsistency #3 as fixed Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
6 tasks
arimxyer
added a commit
that referenced
this pull request
Mar 20, 2026
* Models tab: make detail panel navigable and scrollable Add Focus::Details to the Models tab, allowing users to navigate to the detail panel with h/l/Tab and scroll its content with j/k/g/G/Ctrl+d/u. - Add ScrollOffset-based detail_scroll to ModelsApp - Replace SwitchFocus with directional FocusModelLeft/FocusModelRight - Refactor draw_model_detail from fixed Layout+Tables to Vec<Line> + ScrollablePanel for scrollable, focus-aware rendering - Reset detail scroll on model change (navigation, sort, filter, search) - Update style guide: mark known inconsistency #3 as fixed Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Benchmarks tab: make detail panel navigable and scrollable Add BenchmarkFocus::Details to the Benchmarks tab, allowing users to navigate to the detail panel with h/l/Tab and scroll with j/k/g/G/Ctrl+d/u. - Add ScrollOffset-based detail_scroll to BenchmarksApp - Replace switch_focus with directional focus_right/focus_left methods - Refactor draw_benchmark_detail to use ScrollablePanel with focus-aware border coloring and scrollbar - Extract build_benchmark_detail_lines for reuse by detail overlay - Reset detail scroll on selection change, filter, sort, and rebuild - Update tests for new directional focus API - Update style guide: mark known inconsistency #4 as fixed Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * style: fix formatting in models detail render Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
arimxyer
added a commit
that referenced
this pull request
Mar 20, 2026
- Add Model Info section with Creator, Source, Region, Type, Released - Source colored green (Open) / red (Closed) - Region and Type use creator category colors from sidebar - Add medal-colored ranks: gold ★ (#1), silver (#2), bronze (#3) - Add ★ Wins summary row near top showing per-model win counts - Pre-compute wins via two-pass to position above metric sections Co-Authored-By: Claude Opus 4.6 <[email protected]>
arimxyer
added a commit
that referenced
this pull request
Mar 20, 2026
* Models tab: make detail panel navigable and scrollable Add Focus::Details to the Models tab, allowing users to navigate to the detail panel with h/l/Tab and scroll its content with j/k/g/G/Ctrl+d/u. - Add ScrollOffset-based detail_scroll to ModelsApp - Replace SwitchFocus with directional FocusModelLeft/FocusModelRight - Refactor draw_model_detail from fixed Layout+Tables to Vec<Line> + ScrollablePanel for scrollable, focus-aware rendering - Reset detail scroll on model change (navigation, sort, filter, search) - Update style guide: mark known inconsistency #3 as fixed Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * Benchmarks tab: make detail panel navigable and scrollable Add BenchmarkFocus::Details to the Benchmarks tab, allowing users to navigate to the detail panel with h/l/Tab and scroll with j/k/g/G/Ctrl+d/u. - Add ScrollOffset-based detail_scroll to BenchmarksApp - Replace switch_focus with directional focus_right/focus_left methods - Refactor draw_benchmark_detail to use ScrollablePanel with focus-aware border coloring and scrollbar - Extract build_benchmark_detail_lines for reuse by detail overlay - Reset detail scroll on selection change, filter, sort, and rebuild - Update tests for new directional focus API - Update style guide: mark known inconsistency #4 as fixed Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * style: fix formatting in models detail render Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add a second tab to the TUI for browsing AI coding assistants (Claude Code, Cursor, aider, Windsurf, Goose, Zed).
Features
Core Infrastructure
data/agents.jsonwith metadata (pricing, categories, providers, platform support)~/.config/models/config.tomlfor tracking preferencesGitHub Integration
gh api: stars, latest versions, changelogs, release datesTab-based UI
[/]navigation between Models and Agents tabsPicker Modal
akey opens add/remove pickerActions
oopen docsropen GitHub repoccopy nameucopy update command1/2/3keysAutomation
New Dependencies
semver- Version comparisondirs- Cross-platform config pathstoml- Config file parsingTest Plan
cargo test- 8 tests passingcargo clippy -- -D warnings- No warningscargo run -- tui, switch tabs, test GitHub data, picker, filters🤖 Generated with Claude Code