Skip to content
CAI
Software that uses CAICheck a score

ogham/exa

63.2

Adequate · 27 September 2026

9.1k

lines of production code

Rust

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Add Git status and extended attribute (xattr) filesystem features

Users can now view Git status information (e.g. modified, unmerged, ignored) for files and directories, and on macOS and Linux, view extended file attributes. The Git feature is conditionally compiled via a 'git' feature flag, while xattr support is enabled on macOS and Linux systems.

src/fs/feature · high confidence

Add fish shell completion for exa

Users of the fish shell will now receive command-line completions for the exa utility, including options for display modes, sorting, and long-view metadata. This adds the \completions/fish/exa.fish\ script to provide tab-completion for flags like \--color\, \--sort\, and \--time-style\.

completions/fish · high confidence

Added zsh completion for the exa command

A new zsh completion script (\_exa) has been added to provide command-line argument completion for the exa utility. This enables users to receive autocompletion suggestions for exa's various flags and options, such as --color, --long, and --sort, improving the interactive shell experience.

completions/zsh · high confidence

Introduce internal debug logging via the log crate

The application now includes a dedicated logger module that configures the \log\ crate's verbosity based on the \EXA\_DEBUG\ environment variable. Debug and trace messages are printed to stderr with color-coded level indicators, allowing users to enable detailed diagnostic output for troubleshooting.

src · high confidence

New development environment scripts and helpers

Added a suite of shell scripts in the devtools directory to streamline the Vagrant-based development workflow. This includes helper scripts for managing the environment (dev-set-up-environment.sh, dev-fixtures.sh), convenience commands for building and running exa in debug or release modes (dev-run-debug.sh, dev-run-release.sh), and automated packaging scripts for Linux and macOS that build, strip, and zip the binaries. The devtools directory also now includes a README, a help display script (dev-help.sh), and a version display script (dev-versions.sh) to improve the developer experience.

devtools · high confidence

Architecture

Project infrastructure and build system overhaul

The project has been modernized with a new Rust toolchain (1.66.1) and a Justfile to replace the previous Makefile, streamlining build, test, and release workflows. A build.rs script was added to generate version strings and handle compilation-time metadata. The repository also introduces a Vagrantfile to standardize the development environment, updates .gitignore to exclude build artifacts and Vagrant state, and updates the license to MIT. Additionally, the legacy colours.rs and exa.rs source files were removed, indicating a significant refactoring of the codebase structure.

(repo-wide) · high confidence

Refactored command-line options parsing into a modular, strict-mode-aware system

The command-line argument parsing has been restructured into a new modular system within the \src/options\ directory. This introduces a dedicated parser that supports both strict mode (which errors on conflicts, duplicates, or useless options) and a legacy mode that allows later arguments to override earlier ones. The refactoring extracts specific option groups—such as directory actions, file filtering, sorting, and themeing—into separate modules (\dir\_action.rs\, \filter.rs\, \theme.rs\, etc.), each with their own \deduce\ logic. This change improves error reporting for invalid or conflicting flags and provides a more robust foundation for future CLI features.

src/options · high confidence

Refactored file system module into separate modules

The \src/fs\ module has been reorganized into distinct files: \dir.rs\ (directory handling), \file.rs\ (file metadata and properties), \fields.rs\ (wrapper types for display), \filter.rs\ (filtering and sorting logic), and \dir\_action.rs\ (directory traversal modes). This structural change improves code maintainability and separates concerns within the file system abstraction layer.

src/fs · high confidence

Refactored output module into dedicated submodules

The output rendering logic has been reorganized into separate modules for each view (details, grid, lines, tree) and supporting types (cell, escape, icons, time, table). This structural change improves code maintainability and separation of concerns, allowing each view to manage its own rendering logic and state without tightly coupling to the main output module.

src/output · high confidence

Behavioural changes

Centralized file-type detection and theming logic

The file-type detection logic has been extracted from the filesystem module into a new \info\ module, providing a centralized place for business rules about file extensions and names. This change introduces \FileExtensions\ to handle all file-type checks (image, video, compressed, etc.) and applies consistent color styling and icons based on these types. The \sources.rs\ file adds logic to identify compiled files by checking for corresponding source files (e.g., highlighting \foo.js\ if \foo.coffee\ exists).

src/info · medium confidence

Complete overhaul of the terminal theming system

The application's color and style configuration has been restructured into a new modular theme system. Users can now customize the appearance of file listings, permissions, sizes, users, links, and Git status through a dedicated \EXA\_COLORS\ environment variable, which maps specific UI elements to ANSI styles. Additionally, the system supports the standard \LS\_COLORS\ variable for file kinds, allowing for more granular control over how different file types and metadata are displayed in the terminal.

src/theme · medium confidence

Improved Bash completion for exa

The Bash completion script for exa has been updated to provide more accurate command-line suggestions. Specifically, it now correctly handles the --colour flag, adds support for short flags, and fixes previously broken flag completions. The script also dynamically parses help output to ensure short and long options are suggested correctly, including filtering out color-related flags that were previously not parsed correctly.

completions/bash · medium confidence

Restructured file listing rendering into a modular system

The rendering logic for file attributes has been reorganized into a new \src/output/render\ module, with each field type (blocks, filetype, git status, groups, inode, links, octal permissions, permissions, size, times, and users) now handled by its own dedicated module. This change introduces a \Colours\ trait for each field, allowing users to customize the color and style of each column independently. The \render\ methods in these modules handle the conversion of internal field data into styled text cells, supporting both Unix and Windows-specific rendering paths where applicable.

src/output/render · high confidence

Test coverage

Added comprehensive extended tests for exa's output and behavior; Updated and added integration test outputs for file listing, attributes, dates, and error handling.

Dependencies

Update Rust dependencies and lockfile

The project's Cargo.lock and Cargo.toml have been updated to use newer versions of several dependencies, including ansi\_term, datetime, git2, and users. This ensures the build uses the latest compatible versions of these libraries, which may include bug fixes, performance improvements, or compatibility updates for the Rust 2021 edition.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 51 → 63 (+12.0)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 90 (-9.9)
  • Architecture 100 (new)
  • Maturity 57 → 50 (-6.9)
  • Readiness 30 → 58 (+28.1)
  • Security 85 → 85 (-0.4)
  • Domain Modelling 100 (new)

Resolved (7)

  • Dimension evaluation failed
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No automated tests
  • No exposed public API
  • No tests found
  • Test reliability not included

New (56)

  • Args::parse (cognitive 70) (src/options/parser.rs)
  • Args::parse (cyclomatic 23) (src/options/parser.rs)
  • Critical CVE: [GHSA redacted] (Cargo.lock)
  • Dormant codebase
  • Duplicated block (10 lines × 2) (src/output/time.rs)
  • Duplicated block (13 lines × 2) (src/output/details.rs)
  • Duplicated block (5 lines × 2) (src/main.rs)
  • Duplicated block (5 lines × 2) (src/output/details.rs)
  • Duplicated block (6 lines × 2) (src/fs/file.rs)
  • Exa::print_dirs (cognitive 31) (src/main.rs)
  • FileName::paint (cognitive 34) (src/output/file_name.rs)
  • FileName::paint (cyclomatic 18) (src/output/file_name.rs)
  • Files::next_visible_file (cognitive 18) (src/fs/dir.rs)
  • High CVE: [GHSA redacted] (Cargo.lock)
  • High vulnerability: [GHSA redacted] (Cargo.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium CVE: [GHSA redacted] (Cargo.lock)
  • Medium CVE: [GHSA redacted] (Cargo.lock)
  • …and 36 more

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

Survey your own repository

ogham/exa 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 27 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 3d1edbb47052cb416ef9478106c3907586da5150 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-7c1cb6328e11.