| Crates.io | homeboy |
| lib.rs | homeboy |
| version | 0.36.4 |
| created_at | 2026-01-14 23:58:56.440786+00 |
| updated_at | 2026-01-24 14:27:55.459332+00 |
| description | CLI for multi-component deployment and development workflow automation |
| homepage | https://github.com/Extra-Chill/homeboy |
| repository | https://github.com/Extra-Chill/homeboy |
| max_upload_size | |
| id | 2044213 |
| size | 1,228,466 |
Homeboy is a development and deployment automation CLI designed for agentic coding sessions and rapid iteration across multiple projects.
It standardizes configuration-driven workflows for projects, servers, and components while providing extensible automation through modules. Most commands return stable JSON output for machine parsing alongside human-readable output.
Note: This is still early in development. Breaking changes may occur between releases.
Homeboy provides these core capabilities:
homeboy init for environment discoveryUse the Agent Hooks module to guide your coding agent to use Homeboy effectively. Our module provides hooks for Claude Code and OpenCode.
homeboy inithomeboy init is a setup helper intended to reduce first-run friction. Depending on your environment it can guide you through (or scaffold) common configuration so you can start using commands like project, server, ssh, and modules sooner.
See: homeboy docs commands/init.
See the monorepo-level documentation for installation options:
See CLI documentation for the authoritative command list, embedded docs topics (homeboy docs ...), and JSON contracts.
Start with homeboy init to understand your environment and get context. Based on the output:
homeboy server create <id> --host <host> --user <user>homeboy project create <id> <domain> --server <server-id>homeboy component create <name> --local-path <path> --remote-path <path> --build-artifact <path>homeboy project components add <project> <component>homeboy init# Initialize and explore
homeboy init # Get context and next steps
homeboy docs list # List all available topics
homeboy docs commands/commands-index # Browse all commands
# Discovery commands
homeboy project list
homeboy component list
homeboy server list
homeboy module list
homeboy status # Show current working context (alias for init)
# Create a component (buildable/deployable unit)
homeboy component create <name> --local-path . --remote-path <path> --build-artifact <path>
homeboy component set <id> --build-command "./build.sh"
homeboy component set <id> --changelog-target "CHANGELOG.md"
# Create a project (deployable environment)
homeboy project create <name> <domain> --server <server_id>
homeboy project create <name> <domain> --base-path <local-path> # Local project
# Link components to a project
homeboy project components add <project> <component>
homeboy project components set <project> <component-1> <component-2>
# Check component status without deploying
homeboy deploy <project> --check
homeboy deploy <project> --check --outdated
# Preview what would be deployed
homeboy deploy <project> --all --dry-run
# Deploy components
homeboy deploy <project> component-a component-b
homeboy deploy <project> --all
homeboy deploy <project> --outdated
# Review changes since last release
homeboy changes <component_id>
# Add changelog entries
homeboy changelog add <component_id> "Added: new feature"
homeboy changelog add <component_id> -m "Fixed: bug" -t fixed
# Plan and run release pipeline
homeboy release plan <component_id>
homeboy release run <component_id>
# List and install modules
homeboy module list
homeboy module install <git-url>
homeboy module update <module-id>
homeboy module uninstall <module-id>
# Run modules with context
homeboy module run <module-id> --project <project-id>
homeboy module run <module-id> --project <project-id> --component <component-id>
homeboy module run <module-id> --input key=value
# Execute module actions
homeboy module action <module-id> <action-id> --project <project-id>
# Configure module settings
homeboy project set <project-id> --json '{"modules": {"<module-id>": {"settings": {"key": "value"}}}}'
homeboy component set <id> --json '{"modules": {"<module-id>": {"settings": {"key": "value"}}}}'
# Git operations
homeboy git status <component_id>
homeboy git commit <component_id> -m "Update docs" --files README.md
homeboy git commit <component_id> -m "Release prep" --staged-only
homeboy git push <component_id> --tags
homeboy git pull <component_id>
# Bulk operations
homeboy git status --json '{"component_ids": ["id1", "id2"]}'
homeboy git commit --json '{"components": [{"id": "id1", "message": "msg"}]}'
# Version management
homeboy version show <component_id>
homeboy version bump <component_id> patch
homeboy version set <component_id> 1.2.3
# SSH access
homeboy ssh <project_id> # Interactive shell
homeboy ssh <project_id> "ls -la" # Execute command
homeboy ssh list # List available servers
# File operations
homeboy file list <project_id> <path>
homeboy file read <project_id> <path>
homeboy file write <project_id> <path> < stdin
homeboy file find <project_id> <path> --name "*.php" --type f --max-depth 3
homeboy file grep <project_id> <path> "TODO" --name "*.php" -i
# Log operations
homeboy logs list <project_id>
homeboy logs show <project_id> <path> --lines 100
homeboy logs show <project_id> <path> --follow
homeboy logs search <project_id> <path> "error" -i -C 3
# Database operations
homeboy db tables <project_id>
homeboy db describe <project_id> <table>
homeboy db query <project_id> "SELECT * FROM wp_posts LIMIT 10"
homeboy db search <project_id> <table> --column user_email --pattern "gmail" --exact
homeboy db delete-row <project_id> <table> <row_id>
homeboy db drop-table <project_id> <table>
homeboy db tunnel <project_id>
# WordPress (via wordpress module)
homeboy wp <project_id> plugin list
homeboy wp <project_id> db export
# Node.js (via nodejs module)
homeboy pm2 <project_id> status
homeboy pm2 <project_id> restart
# Cargo (via rust module)
homeboy cargo <component_id> test
Configuration and state live under universal directory ~/.config/homeboy/ (all platforms):
~/.config/homeboy/ (Windows: %APPDATA%\homeboy\)projects/<id>.json, servers/<id>.json, components/<id>.json - Persistent configurationmodules/<module_id>/<module_id>.json - Module manifestskeys/ - SSH keyshomeboy/homeboy.json - Global defaultsHomeboy does not use repo-local config files. All configuration is managed in the OS config directory.
Homeboy modules extend functionality with platform-specific tools and behaviors. Modules can provide CLI tools, define platform behaviors, implement release steps, and include their own documentation.
The module system enables deep extensibility without modifying the core CLI:
homeboy docsModules are JSON manifests that define configuration and runtime behavior. See the homeboy-modules repository for available modules, examples, and implementation details.
The official homeboy-modules repository contains publicly available modules:
Install modules from this repository or create your own to extend Homeboy for your specific workflows.
To create a custom module:
homeboy module install <local-path>See the homeboy-modules README for detailed module creation guidelines.
# From git repository
homeboy module install <git-url>
# From local path (creates symlink for development)
homeboy module install <local-path>
# Update a git-cloned module
homeboy module update <module-id>
# Uninstall a module
homeboy module uninstall <module-id>
Each module includes a JSON manifest (<module_id>/<module_id>.json) defining:
run_command, setup_command, ready_check, entrypoint, envrelease.publish)Example runtime configuration:
{
"runtime": {
"run_command": "./venv/bin/python3 {{entrypoint}} {{args}}",
"setup_command": "python3 -m venv venv && ./venv/bin/pip install -r requirements.txt",
"ready_check": "test -f ./venv/bin/python3",
"entrypoint": "main.py",
"env": {
"MY_VAR": "{{modulePath}}/data"
}
}
}
Module settings are merged across scopes (later scopes override earlier ones):
projects/<project_id>.json): modules.<module_id>.settingscomponents/<component_id>.json): modules.<module_id>.settingsEffective settings are passed to modules via environment variables:
HOMEBOY_SETTINGS_JSON: Merged effective settings (JSON)HOMEBOY_PROJECT_ID: Project ID (when project context is used)HOMEBOY_COMPONENT_ID: Component ID (when component context is resolved)HOMEBOY_COMPONENT_PATH: Absolute path to component directoryConfigure module settings:
# At project level
homeboy project set <project-id> --json '{"modules": {"<module-id>": {"settings": {"key": "value"}}}}'
# At component level
homeboy component set <component-id> --json '{"modules": {"<module-id>": {"settings": {"key": "value"}}}}'
Modules can define their own top-level CLI commands and documentation topics. Discover what's available:
homeboy docs list # List all topics (core + modules)
homeboy docs <module-topic> # Render module-provided docs
Executable modules define runtime behavior:
Template variables available in run_command:
{{modulePath}}: Module directory path{{entrypoint}}: Module entrypoint file{{args}}: Command-line arguments passed to moduleModules can define actions for execution via homeboy module action:
homeboy module action <module-id> <action-id> --project <project-id> --data '<json>'
Actions can be:
Actions are also used in release pipelines as custom steps:
{
"id": "publish",
"type": "module.run",
"config": {
"module": "github",
"inputs": [
{"id": "create_release", "value": "true"}
]
}
}
MIT License Created by Chris Huber https://chubes.net