Hub for Orchestrating Metadata, Events, and Resources
HOMER is a modular Python + Docker automation framework designed to manage metadata, events, and resource workflows across diverse platforms. It provides a unified CLI and FastAPI interface for seamless integration with systems like GitHub, Confluence, Jira, ResourceSpace, and more.
Built for modularity, composability, and security, HOMER enables teams to orchestrate complex workflows while maintaining structured logging and isolated secrets.
-
Build a
homer-baseimage with:- Shared CLI, FastAPI, config loader, and structured logging
-
Modular layers:
github: GitHub automationatlassian: Confluence + Jira supportresourcespace: DAM sync and ingestion
-
Composable Docker stacks defined in
stacks/ -
Support CLI tooling, FastAPI services, and webhook triggers
- Add modules for Slack, Teams, Notion, and Miro
- Enable cron-based or event-driven automation
- Support chatbot-style archive queries
- Maintain structured logs and secure secrets injection
HOMER is layered and declarative:
- 🧩 Modules — Located under
modules/; copied intohomer/modules/at build - 🧱 Stacks — Layered task images built from
stacks/; copied intohomer/stacks/ - 💻 CLI — Powered by
Click+@register_cli(...) - ⚡ FastAPI — Auto-registers with
@register_api(...) - 🎯 Entrypoint — Smart detection of CLI, API, or daemon mode via
entrypoint.py
.
├── build_and_push_all.sh # Build script for base/modules/stacks
├── README.md
├── Dockerfile # Base image (homer-base)
├── homer/
│ ├── api/ # FastAPI core
│ ├── modules/ # Populated at build
│ ├── stacks/ # Populated at build
│ ├── utils/ # Logging, config, decorators
│ ├── cli_registry.py # CLI registration logic
│ ├── entrypoint.py # CLI/API launcher
│ ├── homer # CLI runner script
│ ├── Makefile # Make targets for builds
│ ├── requirements.txt # Base dependencies
│ └── .env.example # Base-level env vars
├── modules/ # Source modules (copied into image)
│ ├── github/
│ ├── atlassian/
│ ├── resourcespace/
│ ├── netbox/
│ ├── ha_api/
│ └── flow/
├── stacks/ # Stack Dockerfiles
│ ├── github-atlassian/
│ └── homer-latest/ # Dynamically generated with all modules
├── examples/
│ ├── modules/ # Module template
│ │ └── Dockerfile
│ └── stacks/ # Stack template
│ └── Dockerfile
homer/modules/andhomer/stacks/are empty in the repo and populated dynamically during Docker build.
HOMER uses decorators for auto-registration:
# cli.py
@register_cli("example")
@click.group()
def cli(): ...
# api.py
@register_api
class ExampleAPI(HomerAPI): ...Each module should expose a CLI command group and (optionally) an API handler.
All modules and stacks are built from the same base:
FROM mscrnt/homer:baseResulting images are tagged as:
mscrnt/homer:<module>
mscrnt/homer:<stack>
The final homer:latest image includes all available modules.
Use the provided script to build everything:
./build_and_push_all.shThis script will:
- Build
mscrnt/homer:base - Build each module in
modules/ - Create a combined
homer:latestimage with all modules - Build all defined stacks except
homer-latest - Push all images to the registry
# Local CLI
./homer <module> <command> [args]
# Docker CLI
docker run --rm \
-e HOMER_ENV=production \
mscrnt/homer:<module> <module> <command># Generic health check
curl http://localhost:4242/<module>/pingThese base variables apply to all builds:
| Variable | Description |
|---|---|
HOMER_ENV |
Runtime environment (default: development) |
LOG_LEVEL |
Logging level (INFO, DEBUG, etc.) |
CONFIG_PATH |
Path to shared config file (default: config/config.yaml) |
Module-specific environment variables are documented within each module's README.
| Module | Description |
|---|---|
github |
GitHub repo automation and syncing |
atlassian |
Confluence + Jira integration |
resourcespace |
DAM metadata automation |
ha_api |
Home Assistant integration |
netbox |
NetBox DCIM/IPAM connector |
flow |
Automation routing and conditional logic |
To scaffold your own module:
cp -r examples/modules modules/<your_module>Each module should contain:
cli.py
api.py
client.py
config.py
requirements.txt
Dockerfile
Makefile
README.md
You must define either a CLI or API entrypoint (or both) using the provided decorator patterns.
- Modular – Each module is self-contained and independently testable
- Composable – Stack modules as needed into tailored automation images
- Transparent – Logs everything with full context and structure
- Secure – No secrets in code; use
.envor CI secrets - Extensible – Add CLI, API, and daemon tasks easily across any platform
© Mscrnt, LLC – 2025
