# claude-his-agent A Claude Code subagent + skill for a personal home-infrastructure assistant ("His" — Home Infrastructure Specialist). Designed so a sibling Claude on any host in your fleet can summon a single, consistent infra runbook instead of re-learning your topology every session. ## Distribution model This package ships **only the plumbing** — a fetcher and an installer. The actual runbook (agent prompt + skill cheatsheet) lives on a private host that you control and is pulled into a per-user cache the first time you run `claude-his-install`. None of the infra context is in the public package or its git history. ``` public package (this repo) → /usr/bin/claude-his-fetch /usr/bin/claude-his-install /usr/share/doc/claude-his-agent/README.md private host (you set up) → /opt/his-context/agent.md ($HIS_CONTEXT_HOST, default hertz) /opt/his-context/skill/SKILL.md /opt/his-context/scripts/... per-user cache (after fetch) → ~/.cache/claude-his-agent/ ~/.claude wiring (after install) → ~/.claude/agents/his.md -> cache/agent.md ~/.claude/skills/his -> cache/skill ``` `claude-his-fetch` is a thin `rsync -a -e ssh "$HOST:$PATH" "$CACHE/"`. The trust boundary is your existing SSH key auth on `$HIS_CONTEXT_HOST`. ## Install ```bash # Debian (trixie/bookworm): sudo apt install claude-his-agent claude-his-install # Arch / ALARM: sudo pacman -S claude-his-agent claude-his-install ``` `claude-his-install` runs `claude-his-fetch` if the cache is empty, then symlinks `~/.claude/agents/his.md` + `~/.claude/skills/his` to the cache. ## Refresh Re-run `claude-his-fetch` whenever the runbook on the private host changes. A weekly cron is reasonable: ```cron 0 4 * * 0 $HOME/.local/bin/claude-his-fetch >/dev/null 2>&1 ``` (or just call `/usr/bin/claude-his-fetch` from any path the user can read.) ## Configuration | Env var | Default | Purpose | |----------------------|--------------------------------------|---------| | `HIS_CONTEXT_HOST` | `hertz` | SSH target serving the context blob | | `HIS_CONTEXT_PATH` | `/opt/his-context/` | Source dir on the host (trailing slash) | | `HIS_CONTEXT_CACHE` | `~/.cache/claude-his-agent` | Local cache dir | `$HIS_CONTEXT_HOST` resolves through the user's `~/.ssh/config` and known_hosts, so an alias like `Host hertz / HostName 192.0.2.10 / User youruser / IdentityFile ~/.ssh/id_ed25519` keeps the rest of the stack hostname-agnostic. ## Setting up the private host On `$HIS_CONTEXT_HOST`, lay out: ``` /opt/his-context/ ├── agent.md # subagent system prompt (the "take over" form) ├── skill/ │ └── SKILL.md # skill cheatsheet (the "lookup" form) └── scripts/ # any helpers the runbook references └── ... ``` Owner whichever account the fleet logs in as; mode `0644` for files, `0755` for dirs. The directory does not need to be world-readable — `claude-his-fetch` authenticates as the SSH user. ## Source Public framework: `git.reauktion.de/marfrit/claude-his-agent` (this repo — no infra context, safe to mirror). Bug reports / runbook gaps for the *private* runbook stay private; for the public plumbing (fetcher, installer, build), file against this repo's issues. ## License Personal infra tooling; framework code is permissive (see LICENSE if shipped). The runbook content (private) is not redistributable.