Architecture Overview
Homeboy is headless automation for agentic software engineering workflows. It is built in Rust with a config-driven, extension-oriented architecture that keeps core generic while letting extensions provide platform-specific behavior.
Design Principles
Core Agnostic, Extensions Specific
Homeboy core owns the reusable automation substrate: command routing, configuration, scope resolution, structured output, persisted runs, baselines, release/evidence workflows, runner offload, daemon/API surfaces, and generic audit primitives. It should not encode ecosystem-specific assumptions such as Cargo behavior, WP-CLI flows, package-manager semantics, or framework-specific audit rules.
Those semantics belong in extensions. The shared implementation lives in Extra-Chill/homeboy-extensions, and private teams can provide the same contracts through custom extension manifests, scripts, hooks, docs, and CLI verbs.
Single Source of Truth
Configuration is the authoritative source for system behavior. Project- and platform-specific logic should be represented as component config, project config, or extension contracts rather than hard-coded into core.
Local-First
Homeboy is local-first: the normal developer loop runs from a checkout and
stores configuration under the Homeboy config directory. Remote operations,
runner offload, and the local daemon/API are optional headless surfaces for CI,
scheduled automation, and agent workflows; they do not replace the portable
repo-level homeboy.json loop.
Extension System
Extensibility through an extension system that allows:
- Platform-specific behaviors such as Rust, WordPress, Node.js, GitHub, Homebrew, and Swift
- Custom CLI commands exposed as top-level verbs such as
homeboy wpandhomeboy cargo - Release pipeline actions, deploy hooks, audit rules, lint/test/build runners, benchmark runners, and trace support
- Documentation topics embedded alongside extension behavior
Configuration-Driven
All behavior is configurable via JSON:
- Projects, servers, components
- Extension manifests
- Release pipelines
- Extension settings per project/component
Core Systems
Configuration Management
Location: src/core/config.rs
Centralized configuration system that:
- Loads JSON configs from config directory
- Validates schemas
- Merges settings across scopes (project + component)
- Provides helpers for set/merge/remove operations
Config entities:
- Components: Buildable, testable, reviewable units; often declared portably
in repo-level
homeboy.json - Projects: Deployable environments and server bindings
- Servers: SSH connection settings
- Fleets: Named groups of projects for batch inspection and operations
- Rigs: Reproducible local multi-component environments
- Stacks: Combined-fixes branch specifications
- Extensions: Domain-specific behaviors and tools
Storage Layer
Location: src/core/engine/local_files.rs
File-based storage for configurations:
- Reads/writes JSON files in config directory
- Handles atomic operations for safety
- Cross-platform paths (macOS, Linux, Windows)
Template System
Location: src/core/engine/template.rs
Variable substitution in templates:
- Both
{var}and{{var}}syntax supported - Context-aware resolution (project, component, extension variables)
- Used in: deploy commands, extension runtime, platform behaviors
Execution System
Location: src/core/engine/executor.rs and src/core/engine/
Executes local, remote, and extension commands with:
- Environment variable injection
- Working directory management
- Output capture
- Exit code handling
Supports:
- Local commands such as builds, tests, benchmarks, and review gates
- Remote commands via SSH for configured projects and fleets
- Extension runtime execution
- Extension actions, release hooks, and CLI routing
- Runner offload for supported hot commands
SSH Operations
SSH client wrapper that:
- Manages SSH connections
- Handles keychain-stored passphrases
- Supports SSH agent forwarding
- Executes remote commands and file operations
HTTP Client
Location: src/core/server/http.rs
HTTP client for API operations:
- Template-based URL construction
- Keychain-stored authentication
- JSON request/response handling
- Extension action API integration
Keychain Integration
Secure credential storage:
- macOS: Keychain Access
- Linux: libsecret/gnome-keyring
- Windows: Credential Manager
Secrets stored:
- API tokens (per project)
- Database passwords (per project)
- SSH key passphrases
Git Operations
Location: src/core/git/
Git wrapper for:
- Status checking
- Committing changes
- Tagging releases
- Push/pull operations
Version Management
Location: src/core/extension/version.rs
Semantic versioning:
- Pattern-based version detection in files
- Version bump operations (patch, minor, major)
- Multi-target version detection
Changelog Management
Location: src/core/release/changelog/
Changelog operations:
- Add entries
- Categorize changes (Feature, Fix, Breaking, Docs, Chore, Other)
- Finalize for release
- Extract for git commits
Extension System
Location: src/core/extension/mod.rs
Extension management:
- Install from git or local path
- Load manifests and declared capabilities
- Resolve settings across component/project scopes and CLI overrides
- Execute runtime scripts, actions, hooks, and extension-backed pipeline steps
- Provide CLI commands and docs without changing Homeboy core
- Declare structured sidecars that downstream agents can inspect as stable contracts
Release Pipeline
Location: src/core/release/ (executor.rs, pipeline.rs, types.rs)
Local orchestration system:
- Define steps as configuration
- Dependency graph resolution
- Plan without execution
- Execute with error handling
Step types:
- Core: preflight, changelog, version, git, deploy, cleanup, and artifact steps
- Extension-backed: prepare, package, and publish actions declared by extensions
Code Audit
Location: src/core/code_audit/
Convention detection and drift analysis:
- Fingerprints source files (methods, registrations, types) via extensions
- Groups files by directory and language
- Discovers conventions (patterns most files follow)
- Detects outliers, structural complexity, duplication, dead code, test coverage gaps
- Baseline comparison for drift tracking
- Fix stub generation for outlier files
Audit pipeline phases:
- Discovery (auto-discover file groups)
- Convention detection
- Convention checking
- Findings (outliers, structural, duplication, dead code, test coverage)
- Report (alignment score)
- Cross-directory convention discovery
Docs Audit
Location: src/core/code_audit/docs_audit/
Documentation verification:
- Extracts claims (file paths, directory paths) from markdown docs
- Verifies claims against the filesystem
- Detects features in source code and checks documentation coverage
- Identifies priority docs (source files changed since baseline tag)
- Supports
--featuresfor machine-readable feature inventory
Fleet Management
Location: src/core/fleet/
Fleet management for grouped environments:
- Named groups of projects
- Shared component detection
- Fleet-wide status, triage, and deploy operations
- Coordinated operations across multiple servers or local environments
Config entities:
- Fleets: Named groups of projects for batch operations
CLI Layer
Location: src/commands/ and src/main.rs
Command-line interface built with clap:
- Command definitions and parsing
- Output mode selection (JSON, markdown, interactive)
- JSON envelope wrapping
- Response mapping
Documentation System
Embedded documentation:
- Markdown files embedded at compile time (
build.rs) - Runtime topic resolution
- Extension-provided docs support
Data Flow
Deploy Command Flow
- CLI parses
homeboy deploy <project> [components] - Loads project configuration
- Loads linked server configuration
- Loads component configurations
- Resolves deployment targets
- For each component:
- Detect version from local files
- Detect version from remote files
- Compare versions
- If outdated or explicitly selected:
- Execute build command
- Upload artifact via SSH
- Execute extract command
- Return results in JSON envelope
Extension Execution Flow
- CLI parses
homeboy extension run <extension> --project <project> --component <component> - Load extension manifest
- Resolve project configuration (if provided)
- Resolve component configuration (if provided)
- Merge settings from project and component scopes
- Build execution context:
- Extension metadata
- Project context (domain, paths)
- Component context (paths)
- Merged settings
- Set environment variables
- Execute
runtime.run_commandwith template resolution - Capture output and exit code
- Return results in JSON envelope
Release Pipeline Flow
- CLI parses
homeboy release <component> - Load component configuration
- Parse release pipeline steps
- Validate step dependencies
- Execute steps in order:
- Wait for dependencies to complete
- Execute step (build, extension, git, etc.)
- Stop on failure
- Return results with status for each step
Extension Integration
Extension Manifest
Extension manifest defines:
- Detect version from local files
- Detect version from remote files
- Compare versions
- If outdated or explicitly selected:
- Execute build command
- Upload artifact via SSH
- Execute extract command
Extension Loading
Extensions are loaded from:
- Execute build command
- Upload artifact via SSH
- Execute extract command
Extension Execution
Direct extension execution uses homeboy extension run <extension_id>. Other
Homeboy command families, such as lint, test, build, bench, trace, release, and
deploy, can also invoke extension-owned scripts or actions through their own
typed contracts.
Error Handling
Location: src/core/error/mod.rs
Centralized error system:
- Extension metadata
- Project context (domain, paths)
- Component context (paths)
- Merged settings
Output System
Output modes:
- Wait for dependencies to complete
- Execute step (build, extension, git, etc.)
- Stop on failure
JSON envelope structure:
{
"success": true|false,
"data": {},
"error": {}
}Cross-Platform Considerations
Paths
Homeboy handles path differences:
- Detect version from local files
- Detect version from remote files
- Compare versions
- If outdated or explicitly selected:
- Execute build command
- Upload artifact via SSH
- Execute extract command
Config Directory
Universal config directory:
- Execute build command
- Upload artifact via SSH
- Execute extract command
Keychain
OS-specific credential storage:
- Execute build command
- Upload artifact via SSH
- Execute extract command
Related
- Extension metadata
- Project context (domain, paths)
- Component context (paths)
- Merged settings