This document outlines the development workflow for ArbiterAI.
ArbiterAI uses CMake with vcpkg for dependency management. A Docker environment ensures consistent builds.
# Start the Docker container
./runDocker.sh
# Build inside the container
./build.sh
# Clean rebuild
./build.sh --rebuildBuild output is located in build/linux_x64_debug/.
# From inside the Docker container
./build/linux_x64_debug/arbiterai_testsThe project version lives in CMakeLists.txt (project(arbiterAI VERSION X.Y.Z)). Do not change the version manually in PRs β it is managed exclusively by the release workflows.
The version is embedded into the compiled library at build time via a CMake-generated header. Applications can query it at runtime:
auto ver = arbiterAI::getVersion();
// ver.major, ver.minor, ver.patch, ver.toString()Every PR merge into main or a release/** branch automatically:
- Increments the patch version (
X.Y.ZβX.Y.Z+1) - Commits the version bump with
[skip ci] - Creates a
vX.Y.Ztag - Publishes a GitHub Release with the PR title and link
Triggered from the GitHub Actions page β Release Major/Minor β Run workflow:
- Select
majororminorrelease type - Select the source branch (e.g.,
main) - The workflow creates a
release/X.Ybranch, sets the version toX.Y.0, builds the project, and publishes a GitHub Release with build artifacts
release/0.2β minor release branch for 0.2.xrelease/1.0β major release branch for 1.0.x
PRs can be opened against release branches for hotfixes. Each merge triggers a point release on that branch.
All tags follow the format vX.Y.Z (e.g., v0.1.3, v0.2.0, v1.0.0).
Tasks are maintained as markdown files in the docs/ directory structure.
docs/development/tasks/completed/β Completed task filesdocs/tasks/β Active or planned tasks
Task files use Markdown and include:
- Title β Clear description of the task
- Description β Detailed requirements and context
- Acceptance Criteria β What must be true for the task to be done
- Progress β Checklists or notes on progress
arbiterAI/
βββ CMakeLists.txt # Build configuration
βββ vcpkg.json # Dependency manifest
βββ build.sh # Build script
βββ runDocker.sh # Docker environment launcher
βββ src/arbiterAI/ # Library source code
β βββ arbiterAI.h/cpp # Main API and data structures
β βββ chatClient.h/cpp # Stateful chat client
β βββ modelManager.h/cpp # Model configuration management
β βββ cacheManager.h/cpp # Response caching
β βββ costManager.h/cpp # Spending limits and tracking
β βββ modelDownloader.h/cpp # Async model downloading
β βββ fileVerifier.h/cpp # SHA256 file verification
β βββ configDownloader.h/cpp # Remote config fetching
β βββ providers/ # LLM provider implementations
β βββ baseProvider.h/cpp # Abstract provider interface
β βββ openai.h/cpp # OpenAI provider
β βββ anthropic.h/cpp # Anthropic provider
β βββ deepseek.h/cpp # DeepSeek provider
β βββ openrouter.h/cpp # OpenRouter provider
β βββ llama.h/cpp # Llama.cpp local provider
β βββ mock.h/cpp # Mock testing provider
βββ tests/ # Google Test test files
βββ examples/ # Example applications
β βββ cli/ # CLI chat client
β βββ proxy/ # HTTP proxy server
β βββ mock_example.cpp # Mock provider demo
βββ schemas/ # JSON schemas
βββ docs/ # Documentation
βββ cmake/ # CMake modules and toolchains
βββ docker/ # Dockerfile
βββ vcpkg/ # Custom vcpkg ports