Skip to content

Askimo Development & Customization Guide

Welcome to the Askimo development hub. These guides show you how to extend and customize Askimo—whether you’re adding a new CLI command, integrating a new AI model provider, building reusable prompt recipes, or contributing localization for a new language.

Askimo uses a monorepo architecture with three main modules:

askimo/
├── cli/ # Command-line interface (GraalVM Native Image)
├── desktop/ # Desktop application (Compose Multiplatform)
├── desktop-shared/ # UI shared component (Compose Multiplatform)
├── shared/ # Shared core logic, models, and providers
└── detekt-rules/ # Detekt custom rules coding convention
  • cli/: Terminal-based REPL for interactive AI conversations and automation scripts. Built with GraalVM Native Image for fast startup and single-binary distribution. No active support to the new user. Internal use only

  • desktop/: Native desktop application with Material Design 3 UI. Built with Compose Multiplatform for a modern, responsive user experience.

  • desktop-shared/: Native ui components with Material Design 3 UI.

  • shared/: Core business logic shared between CLI and Desktop, including:

  • AI provider implementations (OpenAI, Anthropic, Gemini, X AI, Ollama)

  • Chat models and message handling

  • Configuration and parameter management

  • Security utilities

  • Localization: Add support for new languages (see Contributing a New Locale)
  • UI Components: Extend the Compose UI with new views and dialogs
  • Themes: Customize colors and typography
  • Model Providers: Plug in any chat model API via a factory
  • Parameters & Presets: Tune style, verbosity, and provider-specific settings
  • Chat Models: Implement custom model behaviors

Before extending Askimo, make sure you can build and run it locally:

Terminal window
git clone git@github.com:askimo-ai/askimo.git
cd askimo
./gradlew build

Requirements:

  • JDK 25 or higher
  • Gradle 9.x or higher
  • Keep public APIs documented (KDoc for Kotlin classes).
  • Use clear, emoji-enhanced user feedback (✅, ⚠️, ❌, 🧹, 📦).
  • Favor small, focused handlers/factories.
  • Fail fast with helpful messages when configuration is missing.
  • Avoid hardcoding secrets—use parameters (e.g., api_key).

Askimo uses Spotless with ktlint to enforce consistent formatting. All code must be formatted before committing.

Run the one-time setup script to install a pre-commit hook that automatically formats your code before every commit:

Terminal window
./tools/git/pre-commit

After installation, every git commit will:

  1. Run ./gradlew spotlessApply to auto-format all changed files
  2. Re-stage any files that were reformatted
  3. Proceed with the commit

If you prefer not to use the hook, you can format manually before committing:

Terminal window
./gradlew spotlessApply # auto-fix formatting
./gradlew spotlessCheck # verify only (no changes)

Even without the local hook, every pull request runs spotlessCheck via GitHub Actions. PRs with formatting violations are blocked until fixed. Install the hook to avoid the round-trip.

Build the entire project:

Terminal window
./gradlew build

Build specific modules:

Terminal window
./gradlew :desktop:build # Desktop only
./gradlew :shared:build # Shared library only
./gradlew :desktop-shared:build # Shared UI library only

Desktop:

Terminal window
./gradlew :desktop:run

Run the test suite for all modules:

Terminal window
./gradlew test

Create platform-specific packages:

Terminal window
# Create distributable packages (DMG for macOS, MSI for Windows, DEB/RPM for Linux)
./gradlew :desktop:packageDistributionForCurrentOS
# Or create a runtime image
./gradlew :desktop:createDistributable

The packages will be in desktop/build/compose/binaries/.

Terminal window
# Start the desktop app
./gradlew :desktop:run
# Navigate through:
# - Chat interface
# - Settings dialog
# - Session management
# - Localization (if you added a new locale)

If you build a new provider or command that others may benefit from:

  1. Fork the repo.
  2. Add your feature + docs under this section.
  3. Open a pull request following CONTRIBUTING.md.

Happy hacking! 🚀