Code factory + fleet ops CLI. Audits for slop, lints, tests, refactors, releases, deploys, manages dev rigs, and ratchets performance benchmarks — all with a stable JSON envelope so AI agents and CI scripts can drive it without screen-scraping. If it can be fixed mechanically, Homeboy will find it and fix it without human input.
Homeboy ships four pillars from one binary:
- Code Factory —
audit/lint/test/refactor/releasewith the autofix loop. - Fleet & Ops —
deploy,ssh,file,db,logs,transfer,server,project,component,fleet. - Dev Rig —
rig+rig-specfor reproducible, code-defined local dev environments. - Bench — performance benchmarks with baseline ratchet, sibling of
lint/test/build.
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)
Code-defined, reproducible local dev environments. A rig is a JSON spec at ~/.config/homeboy/rigs/<id>.json that captures everything a dev setup needs — which components, which background services, which symlinks, which pre-flight invariants — and a linear pipeline that materializes it.
- Service supervision —
http-staticandcommandservice kinds run detached, tracked by PID, logs captured per service - Pipeline steps —
service,command,symlink,check,git,build. Typed primitives reuse Homeboy's existing build/git plumbing instead of shelling out blindly. - Git ops (MVP) —
status,pull,fetch,checkout,current-branch.rebase/cherry-pickare deferred. - Verbs —
rig upmaterializes the env,rig checkreports health without fail-fast,rig downtears it down,rig statusreports running services and last run timestamps. - Variable expansion —
${components.<id>.path},${env.<NAME>}, and~work acrosscwd,command,link,target, and check fields.
The use case: cross-repo setups that today live as wiki runbooks (Studio + Playground combined-fixes, WordPress core + Gutenberg dev, sandbox + tunnel, etc).
Performance benchmarks as a first-class capability, sibling of lint / test / build. Extensions provide the runner; Homeboy owns regression detection and the baseline ratchet.
- Baseline storage — per-scenario snapshots stored in
homeboy.jsonunderbaselines.bench.--baselinesaves,--ratchetauto-updates on improvement,--ignore-baselineskips comparison. - Regression policy — runners declare
metric_policiesfor arbitrary metrics (latency, throughput, error rate, memory). Direction (lower_is_better/higher_is_better) and percent/absolute tolerances are per-metric. Legacy fallback comparesp95_mswith--regression-threshold(default 5%). - Rig-pinned baselines —
--rig <id>keys the baseline asbench.rig.<id>so per-environment runs don't fight each other. - Strict envelope — runner output schema is locked at the top level; scenario-level extras are tolerated for diagnostics. Regressions exit
1regardless of the runner's own exit code.
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. |
version |
Semantic version management with configurable file targets. |
changelog |
Add/finalize categorized changelog entries. |
changes |
Show commits and diffs since last version tag. |
build |
Build a component using its configured build command. |
git |
Component-aware git operations. |
status |
Repo state overview: uncommitted, needs-bump, ready, docs-only. |
| Command | What it does |
|---|---|
deploy |
Push components to projects. Single, multi-project, fleet, or shared. |
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. |
server |
Manage server connection definitions. |
project |
Manage project definitions and their server bindings. |
component |
Manage component definitions (plugins, themes, CLIs, libraries). |
fleet |
Create and manage named groups of projects. |
| Command | What it does |
|---|---|
rig |
Bring up / tear down / health-check reproducible local dev environments. |
rig-spec |
Inspect and validate the JSON spec format used by rig. |
| Command | What it does |
|---|---|
bench |
Run performance benchmarks with baseline ratchet and regression gating. |
| Command | What it does |
|---|---|
init |
Deprecated alias for status --full. |
auth |
Authenticate with a project's API; credentials stored in OS keychain. |
api |
Direct authenticated calls against a project's API. |
audit-rules |
Inspect and manage audit rules and confidence gating. |
extension |
Install, list, and update extensions. |
list |
List registered components, projects, servers, fleets. |
config |
Read and write Homeboy configuration. |
supports |
Machine-readable CLI capability checks for shell wrappers. |
upgrade |
Self-upgrade the homeboy binary. |
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