Skip to content
CAI
Software that uses CAICheck a score

bibendi/dip

59.0

Adequate · 19 September 2026

1.6k

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Dip is a Ruby-based command-line interface tool designed to simplify and standardize interactions with Docker Compose and Kubernetes environments. It provides a unified shell integration that allows users to run compose commands, manage infrastructure services like DNS and SSH agents, and execute Kubernetes operations directly from the terminal. The system handles configuration validation, environment variable interpolation, and preflight checks to ensure consistent and reliable development workflows.

How it got here

2016 — Ruby migration and scaffolding

5 changes.

The project underwent a significant architectural shift by migrating its core implementation and test suite from Crystal to Ruby. This period involved initial repository scaffolding, the removal of legacy Crystal-based modules and commands, and the establishment of a new Ruby RSpec testing infrastructure.

2018–2026 — Ruby rewrite and CLI expansion

14 changes.

The dip tool was rewritten from Crystal to Ruby, introducing a Thor-based CLI with extensive new commands for infrastructure, shell integration, and Docker management. This period focused on establishing the core library structure, comprehensive test coverage, and development utilities to support the new architecture.

Features

Add executable entry point for the CLI

The \exe/dip\ script is introduced as the executable entry point for the application. It sets up the load path to include the library, conditionally loads the \pry-byebug\ debugger when the \DIP\_ENV\ environment variable is set to \debug\, and initializes the CLI by calling \Dip::CLI.start\. It also includes signal handling for interrupts and error reporting for runtime exceptions.

exe · high confidence

Added gem development scaffolding scripts

The repository now includes standard Ruby gem development utilities: a \bin/console\ script for interactive experimentation with the gem's code using IRB, and a \bin/setup\ script to automate initial environment configuration by running \bundle install\.

bin · high confidence

Automated release notes generation script

A new shell script (scripts/release\_notes.sh) has been added to extract changelog sections for specific versions. This tool parses a CHANGELOG.md file to isolate the release notes corresponding to a given version tag, facilitating the automated generation of release content for publishing to RubyGems and GitHub Releases.

scripts · high confidence

Initial library structure with core configuration and utility extensions

This change introduces the foundational components of the Dip library. It adds the main \Dip\ module which manages application configuration, environment detection (including \test\ and \debug\ modes), and path resolution for binaries and home directories. Additionally, it provides \ActiveSupport\-style hash extensions (\deep\_symbolize\_keys!\, \deep\_transform\_keys!\, \deep\_merge\) to simplify configuration data manipulation.

lib · high confidence

Initial project scaffolding and configuration

The repository is initialized with the core structure for the dip Ruby gem, including the main module, CLI definitions, and command implementations. A default \dip.yml\ configuration and \docker-compose.yml\ are provided to demonstrate usage, alongside a JSON schema (\schema.json\) for validating configuration files. Development tooling is set up with \.rubocop.yml\ (using Standard and RSpec cops), \.rspec\, and \.pryrc\, while CI is configured via GitHub Actions (replacing Travis CI) and pre-commit hooks via lefthook. Documentation is established with \README.md\, \CHANGELOG.md\, \AGENTS.md\, and a \CODE\_OF\_CONDUCT.md\.

(repo-wide) · high confidence

Introduce Thor-based subcommands for DNS, SSH, and infrastructure services

The CLI now uses Thor subcommands to expose new capabilities for managing infrastructure and connectivity. Users can run \dip dns up/down/restart/ip\ to manage a dnsdock container for service discovery, \dip ssh up/down/restart/status\ to manage an ssh-agent container (including a new \--user\ option to specify the container UID), and \dip infra up/down/update\ to start, stop, or update defined infrastructure services. The \dip console\ command remains available for shell integration.

lib/dip/cli · high confidence

New shell integration and command infrastructure for Dip

This change introduces a new shell integration system that automatically injects Dip commands as shell functions, supporting Bash, Zsh, and Fish. It includes a new \console\ command to manage this integration, with logic to detect the shell type and handle reserved names to avoid shadowing builtins. Additionally, it adds a comprehensive set of new commands (\compose\, \run\, \kubectl\, \dns\, \ssh\, \infra\, \preflight\, \provision\, \down\_all\, \list\) and their corresponding runners, enabling users to interact with Docker Compose, Kubernetes, and custom infrastructure services directly from the shell.

lib/dip/commands · high confidence

Removals

Removal of legacy compose, dns, and ssh command implementations

The specific command implementations for \compose\, \dns\, and \ssh\ have been removed from the codebase. This eliminates the previous logic for running docker-compose with specific file/project name handling, starting/stopping the dnsdock container, and managing the ssh-agent container. Users relying on these specific legacy command structures will no longer have access to them through this location.

src/dip/commands · high confidence

Behavioural changes

Add Danger bot checks for merge commits, labels, and tests

The repository now uses Danger to enforce pull request hygiene. It warns against merge commits from master, requires that PRs have labels (excluding 'wip'), and alerts authors if code changes in the main app (exe/lib) are not accompanied by corresponding test changes (spec).

.danger · high confidence

Dip is rewritten in Ruby and upgraded to version 8.4.0

The dip tool has been completely rewritten from Crystal to Ruby, introducing a new CLI structure based on Thor and a new command execution engine that supports both direct program execution and subprocess running. This release (v8.4.0) adds several new capabilities including a \validate\ command to check dip.yml against a JSON schema, a \build\ command, and support for Docker Compose profiles. It also introduces infrastructure service management via the \infra\ subcommand, shell integration for Bash, Zsh, and Fish via the \console\ subcommand, and a \preflight\ hook system. Configuration loading now supports nested modules, override files, and environment variable interpolation with special variables like \DIP\_CURRENT\_USER\. The tool also drops support for Ruby 2.5/2.6 and Docker Compose V1.

lib/dip · high confidence

Removal of legacy CLI, command, config, and environment modules

The files defining the core CLI structure (cli.cr), base command execution (command.cr), configuration parsing (config.cr), and environment variable handling (environment.cr) have been deleted from the src/dip directory. This indicates a significant architectural shift where the previous implementation of these components has been removed, likely replaced by a new structure or external dependency not visible in this specific diff excerpt.

src/dip · high confidence

Removal of legacy Dip module entry point

The main entry point file \src/dip.cr\ has been removed. This file previously handled the initialization of the configuration, environment, and CLI execution for the Dip module. Its deletion indicates that the application's startup logic or module structure has been refactored, likely moving these responsibilities to other parts of the codebase or a different entry mechanism.

src · medium confidence

Test coverage

Added shared test contexts for configuration, environment, and command execution; Added test coverage for configuration, environment, and run variable handling; Added test coverage for dip command implementations; Added test fixtures for configuration loading and schema validation; Added tests for the Dip library core functionality; Migrated test suite from Crystal to Ruby.

Dependencies

Initial release of dip gem with Ruby 2.7+ requirement

The dip gem is introduced as a CLI tool for interacting with Docker Compose files. It requires Ruby version 2.7 or higher and includes runtime dependencies on thor (\>= 0.20, \< 2), json-schema (\~\> 5), and public\_suffix (\>= 2.0.2, \< 6.0) to ensure compatibility with the minimum supported Ruby version. Development dependencies include bundler, pry-byebug, rake, rspec, standard, rubocop-rake, rubocop-rspec, simplecov, test-unit, and fakefs.

(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

Baseline

  • First survey — no prior run to compare against. CAI 59.

Lenses

  • Code Health 100
  • Architecture 89
  • Maturity 63
  • Readiness 41
  • Security 81

Changes since last survey

  • 300 commits — 252 feature/other, 48 fixes

By area

  • (root) — 111 commits
  • lib/dip — 106 commits
  • (repo) — 54 commits
  • .github/workflows — 8 commits
  • .github/logo.svg — 3 commits
  • spec/lib — 3 commits
  • .agents/skills — 2 commits
  • .github/logo-dark.png — 2 commits
  • .github/FUNDING.yml — 1 commit
  • .github/ISSUE_TEMPLATE — 1 commit
  • .github/PULL_REQUEST_TEMPLATE.md — 1 commit
  • .github/logo.png — 1 commit
  • bin/console — 1 commit
  • examples/dip.yml — 1 commit
  • exe/dip — 1 commit
  • lib/dip.rb — 1 commit
  • spec/dip — 1 commit
  • spec/fixtures — 1 commit
  • src/dip — 1 commit

Notable commits

  • fix: Fix :cop: offences
  • fix: Fix env merge
  • fix: Fix gemspec
  • fix: Fix removing aliases when directory changed
  • fix: Fix rspec random ordering
  • fix: Fix run vars
  • fix: Fix some bugs in RunVars
  • fix: Fix some load errors related to different gem versions being available (#184)
  • fix: Merge pull request #103 from omarsotillo/fix/help-command-dip-down
  • fix: Merge pull request #128 from bibendi/fix/shell-mode
  • fix: Merge pull request #131 from bibendi/fix/psych
  • fix: Merge pull request #133 from bibendi/fix/run-args
  • fix: Merge pull request #137 from bibendi/fix/compose-paths
  • fix: Merge pull request #147 from d-lebed/fix-rubocop-warnings
  • fix: Merge pull request #150 from bibendi/fix/subprocess-runner
  • fix: Merge pull request #165 from bibendi/fix/nested-subcommands
  • fix: Merge pull request #58 from bibendi/fix/runner
  • fix: Merge pull request #60 from bibendi/fix/help
  • fix: Merge pull request #64 from bibendi/fix/run-vars
  • fix: Merge pull request #85 from bibendi/fix/cop
  • …and 280 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

bibendi/dip 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 19 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 9e2cafbcb163fbc8ead4152868908e9241a20648 — 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-b51f968c9b10.