Skip to content
CAI
Software that uses CAICheck a score

sigoden/aichat

46.6

Weak · 29 September 2026

15.3k

lines of production code

Rust

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

AIChat is a command-line interface and web-based tool for interacting with multiple large language model providers. It supports features such as session management, agent-driven workflows with function calling, and retrieval-augmented generation using local documents. The system includes a REPL with fuzzy autocompletion, shell integration for quick command processing, and an OpenAI-compatible API server.

How it got here

2023 — Initial release and core architecture

9 changes.

This period marks the initial release of the AIChat CLI tool, establishing its core structure with multi-provider LLM support, REPL functionality, and agent configuration. The work focused on building foundational infrastructure, including a unified client architecture, session management, and web-based interfaces for playground and arena usage. Subsequent updates refined the user experience through REPL enhancements, streaming markdown rendering, and comprehensive dependency upgrades.

2024 — Shell integration and RAG support

4 changes.

This period focused on enhancing the user experience through comprehensive shell integration, adding keybinding scripts and tab-completion for major shells. Simultaneously, the project introduced a Retrieval-Augmented Generation (RAG) module, featuring language-aware document splitting and hybrid search capabilities to improve context retrieval for AI responses.

Features

Add shell integration scripts for Bash, Fish, Nushell, PowerShell, and Zsh

New integration scripts have been added for Bash, Fish, Nushell, PowerShell, and Zsh, enabling users to invoke the \aichat\ tool via a keybinding (Alt+E or Esc+E) to process the current command line. Each script implements shell-specific logic to capture the current input, display a loading indicator, call \aichat -e\ with that input, and replace the line with the result.

scripts/shell-integration · high confidence

Initial release of AIChat with comprehensive configuration and model definitions

This entry marks the initial release of the AIChat CLI tool, introducing the core application structure and configuration framework. The release includes a default \config.example.yaml\ defining settings for LLM providers (OpenAI, Gemini, Claude, etc.), RAG, sessions, and appearance, alongside a \config.agent.example.yaml\ for agent-specific setups. A comprehensive \models.yaml\ file is added to define supported models, their capabilities (vision, function calling), and pricing for various providers. The release also establishes the project's licensing under MIT/Apache 2.0, adds a \README.md\ detailing features like multi-provider support, REPL mode, and shell integration, and introduces an \Argcfile.sh\ for development and testing tasks.

(repo-wide) · high confidence

Initial release of aichat CLI with REPL, API serving, and tool support

This entry introduces the aichat application, a command-line tool for interacting with LLMs. It features a REPL with session management, a command-line mode for scripting, and the ability to serve an OpenAI-compatible API (including chat, embeddings, and rerank endpoints) alongside a web-based playground and arena. The tool supports roles, agents with function calling, RAG (Retrieval-Augmented Generation), and macro execution.

src · high confidence

Introduce RAG (Retrieval-Augmented Generation) module

Adds a new RAG capability to the application, allowing users to ingest documents, generate embeddings, and perform hybrid search using both BM25 and HNSW vector indices. This feature enables the agent to retrieve relevant context from local files or URLs to enhance its responses, with support for configurable chunking, reranking, and document management via REPL commands.

src/rag · high confidence

Introduce agent configuration and session management subsystems

The configuration module has been restructured to support agents and sessions as first-class concepts. A new \Agent\ struct and \AgentConfig\ allow defining agent-specific models, variables, and RAG settings, while \Session\ manages conversation history, token usage, and autonomous naming. The \Role\ system now supports embedding metadata (model, temperature, tools) directly within role definitions, and the \Input\ handler has been updated to resolve roles and sessions contextually. This change establishes the foundational configuration structures for agent-driven workflows and persistent, state-aware conversations.

src/config · high confidence

Language-aware document splitting for RAG

The RAG splitter now supports language-specific text splitting logic. A new \Language\ enum and associated separator definitions have been added for C++, Go, Java, JavaScript, PHP, Protocol Buffers, Python, reStructuredText, Ruby, Rust, Scala, Swift, Markdown, LaTeX, HTML, and Solidity. The \RecursiveCharacterTextSplitter\ now uses file extensions to automatically select the appropriate separators, allowing it to split code and structured documents based on language-specific syntax (such as function definitions or class declarations) rather than relying solely on generic whitespace or newline breaks.

src/rag/splitter · high confidence

New Arena and Playground Web UI interfaces

The WebUI now includes dedicated Arena and Playground interfaces. The Arena page provides a side-by-side chat layout for comparing model responses, while the Playground offers a sidebar for configuring model settings (such as max tokens and system prompts) alongside the chat interface. Both pages support markdown rendering with KaTeX for math, syntax highlighting via highlight.js, and Alpine.js for interactivity.

assets · high confidence

New utility module for core application infrastructure

The \src/utils\ module has been introduced to centralize core application infrastructure. It provides abort signal handling for clean Ctrl+C/Ctrl-D interruption, a clipboard utility that supports native OS copy and OSC52 terminal escape sequences, and shell command execution with history appending for bash, zsh, fish, and nushell. The module also includes document loading capabilities for files, URLs, and recursive web crawling, HTML-to-Markdown conversion, and a custom REPL prompt renderer that supports variable interpolation and conditional logic. Additional utilities cover path resolution with glob expansion, fuzzy filtering for autocompletions, and environment variable interpolation for system metadata.

src/utils · high confidence

Shell completion scripts added for Bash, Zsh, Fish, PowerShell, and Nushell

Users can now benefit from automatic command-line completion in their preferred shell environment. New completion scripts have been added for Bash, Zsh, Fish, PowerShell, and Nushell, enabling tab-completion for all \aichat\ flags and options. The scripts provide dynamic value suggestions for parameters such as \--model\, \--role\, \--session\, \--agent\, \--rag\, and \--macro\ by querying the corresponding \--list-\*\ commands, while file paths are completed for the \--file\ option.

scripts/completions · high confidence

Architecture

Client module refactored into a unified, macro-driven architecture

The client subsystem has been restructured to use a centralized \register\_client!\ macro in \src/client/macros.rs\, which automatically generates the \ClientConfig\ enum, client initialization logic, and model listing functions for all registered providers. This change introduces a new \access\_token.rs\ module for unified token management and replaces the previous per-client registration pattern with a declarative list in \mod.rs\. The refactoring standardizes how clients like OpenAI, Claude, Bedrock, and Azure OpenAI are defined and instantiated, ensuring consistent configuration handling and simplifying the addition of new providers.

src/client · high confidence

Behavioural changes

New streaming markdown renderer with syntax highlighting and raw fallback

The \src/render\ module now introduces a new streaming markdown renderer (\MarkdownRender\) that uses \syntect\ for code syntax highlighting and \textwrap\ for line wrapping, replacing the previous rendering logic. This change adds support for highlighting specific languages (including mappings for C\# and PHP) and respects terminal width constraints. The rendering pipeline (\render\_stream\) automatically switches to a raw stream output mode when highlighting is disabled or when the output is not a true-color terminal, ensuring consistent display across different environments while fixing issues with duplicate lines in specific terminals like Kitty.

src/render · high confidence

REPL input handling refactored with fuzzy autocompletion and syntax highlighting

The REPL's input experience has been restructured into dedicated submodules (completer, highlighter, prompt) to improve maintainability and user interaction. Autocompletion now uses fuzzy matching to rank suggestions, making it easier to find commands and arguments. Command names in the input line are highlighted in green to provide visual feedback, and the prompt now renders state-aware indicators (such as session or role context) and a distinct multiline indicator ("... ") to clarify when the user is composing a multi-line message.

src/repl · high confidence

Dependencies

Upgrade to v0.30.0 with extensive dependency updates

The application has been updated to version 0.30.0, bringing a comprehensive refresh of its Rust dependencies. Key changes include upgrading the HTTP client from reqwest 0.11 to 0.12, replacing the legacy eventsource-stream crate with reqwest-eventsource, and updating the interactive line editor from reedline 0.16 to 0.40. The release also introduces new dependencies for enhanced functionality, such as syntect for syntax highlighting, bm25 and hnsw\_rs for RAG search capabilities, and arboard for improved clipboard support, while removing older crates like toml and eventsource-stream.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 47 → 47 (-0.2)
  • Rubric changed (rubric-2026.09.8 → rubric-2026.09.17) — scores are not directly comparable.

Lenses

  • Code Health 81 → 81 (+0.0)
  • Architecture 97 → 75 (-22.3)
  • Maturity 58 → 58 (+0.0)
  • Readiness 59 → 60 (+1.3)
  • Security 72 → 76 (+3.7)
  • Accessibility 26 → 26 (+0.0)
  • Performance 100 (new)

New (2)

  • Medium vulnerability: RUSTSEC-2026-0285 (Cargo.lock)
  • Projects may be oversized for their cohesion

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

sigoden/aichat was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 82976d349ad97ac9aae0655ad631dace5e2a6385 — the exact code this score is about.
  • Scored under rubric-2026.09.17 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fbec9b1e08c2.