Skip to main content

magehand

The developer CLI for building apps on davidlarrimore's homelab, the same way on the owner's MacBook (Claude Code) and in OpenClaw's VM (its coding workers). It reads platform state and runs apps locally. It never deploys: changes go through pull requests.

It is public because it holds nothing sensitive. Every command needs access that only the owner has: the private homelab repos on GitHub, the private *.lab network, and an authentik passkey for OpenBao.

Install

brew install uv            # once
uv tool install magehand
magehand setup             # once per machine

magehand setup checks GitHub (gh auth login first) and Docker (Docker Desktop or OrbStack, for database blocks), makes sure the homelab's *.lab names resolve (if they don't, it asks for the homelab's DNS address, your home gateway, and points only *.lab lookups at it; magehand setup --undo reverses that), then signs you in and installs the homelab-app skill for Claude Code (and Codex). Every other command assumes this is done. Upgrade with uv tool upgrade magehand.

Commands

Command What it does
magehand guide [topic ["section"]] The app platform guide, live from homelab-apps docs/platform/; magehand guide catalog for blocks and models
magehand guide search WORDS The guide sections (homelab-apps docs/platform/ and AGENTS.md) that best match a question, e.g. magehand guide search web search
magehand app [name] The app's blocks, every env var its pod gets and where it comes from, its URLs. In an app repo the name is the repo's
magehand check [name] [--code DIR] [--apps-dir DIR] [--manifests-only] The platform's rules for the app's code and its homelab-apps deployment: block keys and options, optional: true keys, Secrets that aren't blocks, the image, env the code reads but the pod doesn't set, direct AI/search provider calls, own login, database files. Each finding names the guide section; exit 1 on errors. Run before every push; CI (homelab-apps build-app.yaml) runs it too, with --apps-dir
magehand login Sign in to OpenBao through authentik (passkey) with role dev: read-only access to agent apps' LiteLLM keys, 1h (8h max). The token is kept in the macOS Keychain
magehand dev up|down|status Docker containers for the app's postgres/redis blocks (the blocks' own pinned images) on a per-app network, and local values for secret blocks
magehand run [--no-proxy] -- CMD Runs CMD with the env the app's pod gets: values from its Deployment, the LLM key from OpenBao, databases from dev up. Precedence: manifest < the repo's .magehand.env (committed, non-secret overrides such as WEB_DIR=./web) < your shell < secrets. A proxy on 127.0.0.1:8080 adds the X-authentik-* headers Traefik would, as you
magehand run --container [--no-build] [-- CMD] Builds the repo's Dockerfile and runs the image as its pod runs: read-only, /tmp tmpfs, the pod's user, no capabilities, exactly the pod's env. Secrets go in as -e NAME only, never in the image, argv or on disk
magehand setup [--undo] [--dns ADDRESS] Once per machine: GitHub, Docker, *.lab name resolution (the only step that may ask for your password), sign-in
magehand skill [--install] The homelab-app skill: tells Claude Code and Codex to use app, guide search and check while working on app code. setup installs it ($CLAUDE_CONFIG_DIR or ~/.claude, and $CODEX_HOME or ~/.codex if Codex is installed)
magehand doctor Checks GitHub access, that openbao.lab is reachable, the sign-in and Docker
magehand version The installed version

Development

uv venv && uv pip install -e .
.venv/bin/python -m unittest discover -s tests

Python 3.9+ (the Mac's system Python works). Stdlib plus PyYAML. Releases: bump version in pyproject.toml, merge, then tag vX.Y.Z. The release workflow builds and publishes to PyPI through trusted publishing (no stored token). OpenClaw's VM installs a pinned version from homelab platform/openclaw/vm/versions.env.

Never commit secrets, tokens, IP addresses or email addresses: this repo is public.

Metadata

Release files for magehand 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for magehand 0.2.0
File Size Uploaded
magehand-0.2.0.tar.gz 25.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for magehand 0.2.0
File Interpreter ABI Platform
magehand-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 46.7 kB

Release files / magehand-0.2.0.tar.gz

Download URL magehand-0.2.0.tar.gz
Size 25.0 kB
Tags Source
SHA-256 checksum
How to use checksums
441f29bb3db78e81c7a4c50f751353c1bce8f4d4317e90b0d006690db7698840
BLAKE2b-256 checksum
How to use checksums
6c630f172c1a10f971d49c40498094f2b000b8c3380ae33e6e178a6f94978e94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / magehand-0.2.0-py3-none-any.whl

Download URL magehand-0.2.0-py3-none-any.whl
Size 21.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ac9ac53effbcb92c744b7d4429d218c1da77e164c14aaed43ad2d4ad7797008
BLAKE2b-256 checksum
How to use checksums
5fb5f8645481c667f047164b179e7c58241747577e3625d8f3edebe9eaa0349b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page