The code factory that audits for slop, lints, tests, refactors, updates your changelog, and releases a new version in CI. If it can be fixed mechanically, Homeboy will find it and fix it without human input.
You push code. Homeboy does the rest.
merge to main
|
v
ββββββββββββββββββββββββββββββββββββββββββββββββ
β cron wakes up (every 15 min) β
β β
β 1. releasable commits? (feat: / fix:) β
β 2. audit β find slop, autofix, ratchet β
β 3. lint β format, autofix, commit back β
β 4. test β run suite, fix what it can β
β 5. version bump (from commit types) β
β 6. changelog (from commit messages) β
β 7. tag + push β
β 8. cross-platform builds (5 targets) β
β 9. publish: GitHub + crates.io + Homebrew β
β 10. auto-refactor (post-release cleanup) β
ββββββββββββββββββββββββββββββββββββββββββββββββ
|
v
humans provide features, code maintains itself
No version files to edit. No changelog to write. No release button to click.
fix:commit β patch releasefeat:commit β minor releaseBREAKING CHANGEβ major releasechore:/ci:/docs:/test:β no release
{
"id": "my-project",
"extensions": {
"rust": {}
}
}name: CI
on: [pull_request]
jobs:
quality:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Extra-Chill/homeboy-action@v1
with:
extension: rust
commands: audit,lint,test
autofix: 'true'name: Release
on:
schedule:
- cron: '*/15 * * * *'
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: Extra-Chill/homeboy-action@v1
with:
extension: rust
component: my-project
commands: releaseThat's it. PRs get quality checks with autofix. Main gets continuous releases. See code-factory.md for the full pipeline architecture with quality gates, baseline ratchet, and autofix loops.
Discovers conventions from your codebase and flags drift. Unlike traditional linters that enforce external rules, audit learns your patterns and catches outliers.
- Convention compliance β naming patterns, interface contracts, structural patterns
- Duplication β exact duplicates, near-duplicates, parallel implementations
- Dead code β unreferenced exports, orphaned functions, unused parameters
- Test coverage β missing test files, missing test methods, orphaned tests
- Structural health β god files, high complexity
- Documentation β broken references, stale claims
The baseline ratchet ensures the codebase never gets worse. New findings fail CI. Resolved findings auto-ratchet the baseline down. Over time, the baseline trends toward zero.
Language-specific formatting and static analysis. Autofix commits formatting changes back to the PR.
Runs the project's test suite. Supports test drift detection β when source symbols are renamed or deleted, Homeboy identifies affected tests.
Structural improvements with safety tiers:
- Safe β deterministic fixes auto-applied with preflight validation (imports, registrations, namespace fixes, visibility changes, doc updates)
- PlanOnly β method stubs, function removals (human review required)
When a CI stage fails:
- Run fix commands (
homeboy audit --fix --write,homeboy lint --fix) - Commit changes as
chore(ci): apply homeboy autofixes - Push using a GitHub App token (re-triggers CI β
GITHUB_TOKENpushes don't) - Re-run the full pipeline to verify
- Max-commits guard prevents infinite loops
For PRs: fixes commit directly to the PR branch. For releases on protected branches: opens an autofix PR.
Homeboy also manages the relationship between components, projects, and servers.
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β COMPONENT βββββ>β PROJECT βββββ>β SERVER β
β Plugin, β β Site or β β VPS, host, β
β theme, CLI β β applicationβ β cloud... β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
βββββββ΄ββββββ
β FLEET β
β Group of β
β projects β
βββββββββββββ
Deploy components to servers, manage SSH connections, run remote commands, tail logs, query databases, transfer files β all from one CLI with structured JSON output.
| Command | What it does |
|---|---|
audit |
Discover conventions, flag drift, autofix. Baseline ratchet. |
lint |
Format and static analysis with autofix. |
test |
Run tests. Drift detection for renamed/deleted symbols. |
refactor |
Structural renaming, decomposition, and auto-refactor with safety tiers. |
release |
Automated version bump + changelog + tag + push from conventional commits. |
deploy |
Push components to projects. Single, multi-project, fleet, or shared. |
version |
Semantic version management with configurable file targets. |
changelog |
Add/finalize categorized changelog entries. |
changes |
Show commits and diffs since last version tag. |
status |
Repo state overview: uncommitted, needs-bump, ready. |
build |
Build a component using its configured build command. |
git |
Component-aware git operations. |
ssh |
Managed SSH connections to configured servers. |
file |
Remote file operations: list, read, write, find, grep. |
db |
Remote database queries, search, and tunneling. |
logs |
Remote log viewing and searching with live tailing. |
transfer |
File transfer between servers or local/remote. |
fleet |
Create and manage named groups of projects. |
docs |
Browse embedded documentation. All docs ship in the binary. |
Extensions add platform-specific commands at runtime (e.g., homeboy wp for WordPress, homeboy cargo for Rust).
Every command returns structured JSON:
{
"success": true,
"data": { ... }
}Error codes are stable and namespaced (config.*, ssh.*, deploy.*, git.*). Exit codes map to categories. This makes Homeboy reliable for AI agents and automation pipelines.
Extensions add platform-specific behavior. Installed from git repos, stored in ~/.config/homeboy/extensions/.
| Extension | What it provides |
|---|---|
rust |
Cargo integration, crates.io publishing, release artifacts |
wordpress |
WP-CLI integration, WordPress-aware build/test/lint |
nodejs |
PM2 process management |
github |
GitHub release publishing |
homebrew |
Homebrew tap publishing |
swift |
Swift testing for macOS/iOS projects |
homeboy extension install https://github.com/Extra-Chill/homeboy-extensions --id rustBrowse available extensions: homeboy-extensions
Global config lives in ~/.config/homeboy/. Per-repo config lives in homeboy.json at the repository root.
~/.config/homeboy/
βββ homeboy.json # Global defaults
βββ components/ # Component definitions
βββ projects/ # Project definitions
βββ servers/ # Server connections
βββ fleets/ # Fleet definitions
βββ extensions/ # Installed extensions
βββ keys/ # SSH keys
The portable homeboy.json in your repo is all CI needs β no registered component required.
Components and extensions can declare lifecycle hooks:
| Event | When | Failure mode |
|---|---|---|
pre:version:bump |
After version files updated, before commit | Fatal |
post:version:bump |
After pre-bump hooks, before commit | Fatal |
post:release |
After release pipeline completes | Non-fatal |
post:deploy |
After deploy completes on remote | Non-fatal |
homeboy-action runs Homeboy in CI. Installs the binary, sets up extensions, runs commands, posts PR comments with per-command status, and handles the autofix loop.
See homeboy-action README for full documentation.
# Homebrew (macOS/Linux)
brew tap Extra-Chill/homebrew-tap
brew install homeboy
# Cargo
cargo install homeboy
# From source
git clone https://github.com/Extra-Chill/homeboy.git
cd homeboy && cargo install --path .All documentation is embedded in the binary:
homeboy docs list # Browse all topics
homeboy docs code-factory # The Code Factory pipeline
homeboy docs commands/deploy # Command reference
homeboy docs schemas/component-schema # Config schemas
homeboy docs architecture/release-pipeline # System internalsMIT License β Created by Chris Huber