Skip to content
Back to skills

Hostwarden Onboard

ASecurity

Onboard a host into Hostwarden explicitly and read-only,

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
ai-agentsrustgonodesecurity

Security analysis

A100/100

Scanned September 29, 2026

npx -y skills add hostwarden/hostwarden --skill hostwarden-onboard --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hostwarden Onboard?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hostwarden Onboard
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hostwarden-hostwarden-onboard/badge)](https://www.skillsdirectory.com/skills/hostwarden-hostwarden-onboard)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hostwarden-onboard
argument-hint: "<hostname> [more hostnames]"
description: Onboard a host into Hostwarden explicitly and read-only,
  as its first connection — the full OS and hardware probe, its
  memory with what housekeeping would record, the network profile
  where the host has one, on a hypervisor the guest inventory and
  registration, then what it lacks against the server baseline, and
  a report. A host Hostwarden already knows is
  probed in full again and its memory refreshed. Use when the user
  says "onboard web1", "add this server to Hostwarden", "take db1 into
  Hostwarden", "set up pve1 in Hostwarden", "nimm web1 in Hostwarden
  auf", "übernimm den Server xyz in die Verwaltung", "richte db1 in
  Hostwarden ein", or names hosts to be onboarded. Makes no change on
  a server beyond one read-only line in each host's journal. Not for
  taking over a Heinzel installation (hostwarden-heinzel-takeover),
  and not for a new guest (hostwarden-new-guest).
---

# hostwarden-onboard

Runs a host's first connection on request, while the user is there,
rather than whenever the host is next needed, records what
housekeeping and the security audit would otherwise be first to
record, and ends with where the host stands against
`rules/baseline.md`. A host that already has a
`memory.md` gets a full re-probe instead (`rules/os-detection.md` →
On subsequent connections): the user asks for one by naming a known
host here, to refresh a record they no longer trust or one written
before a rule recorded more.

**Only in an operations checkout** (`AGENTS.md` → Development or
Operations). In a development checkout, say so, name the operations
checkout (`rules/server-check-handoff.md` → Find the operations
checkout) and stop.

## Workflow

1. **The hosts.** Take them from the argument, or ask. With several,
   the hosts whose memory, or the caller, names a hypervisor go
   first, the rest in the order given. A guest of the run that one of
   them registers keeps its turn, now as a known host: its own
   connection runs steps 4 to 6 here, and pipeline step 9
   (→ The first own login) does not. Where nothing but its host
   reaches it, its report line says
   `registered through <host>, not measured`.

2. **Announce each host** in one line before its first command:

       Onboarding 2/5: pve1.example.com — first connection, read-only
       Onboarding 3/5: web1.example.com — known host, full re-probe, read-only

3. **Run `rules/first-connection.md`** for it: on a new host as its
   first connection, with the full probe of
   `rules/first-detection.md` and `memory.md` in the form of
   `rules/machine-memory.md`; on a known host as a known one, with the
   full re-probe in place of the short one. Either way it gets the
   full network profile where `rules/network.md` → When gives the
   host one, and on a hypervisor the full inventory
   (`rules/hypervisors.md`). A blacklisted host is not reached; its
   report line says so. A host that cannot be reached gets what
   `rules/ssh-unreachable.md` allows and no more, and the run moves on
   to the next one.

4. **Where the host stands.** For a host reached through its own way
   in (`rules/machine-memory.md` → Onboarded and stale lines), run
   `hostwarden-baseline` steps 1 and 2 — its overrides and the
   measurement, read-only — and not its question. A decision the
   pipeline offers to record is asked before the measurement, so a
   section it settles is not listed as missing. The Host Certificate
   and User CA Trust probes of `rules/ssh-ca.md` run with it, and
   record what they find as its Memory section says. A guest
   registered through its host finishes onboarding on its first own
   login (→ The first own login). A Proxmox VE node without a
   `Baseline template:` line (`rules/appliance/proxmox-ve.md` →
   Guests) has that on its report line: a container created there
   starts without the baseline.

5. **What else memory holds.** The lines that otherwise only
   housekeeping or the security audit would write, each from the
   probe its reference gives, in the form it gives for the host's
   family, read-only and bundled with step 4's calls where the
   probes allow it. Onboarding records them; what a value means — a
   finding, its severity, an offer — stays with the skill that owns
   the probe.

   - `USB:` — housekeeping's
     `.agents/skills/hostwarden-housekeeping/references/usb-devices.md`:
     Probe, Reading the output and Memory. Not in a system
     container.
   - `Passthrough:` — housekeeping's
     `.agents/skills/hostwarden-housekeeping/references/passthrough.md`,
     on a host with guests, up to its Memory.
   - `Depends on:` — the probe of `rules/coordination.md` →
     Dependencies, and the entries it finds.
   - `Community script:` — for a guest its host's `guests.md`
     marks, as `rules/community-scripts.md` → A guest built by
     one says.
   - `Auto restarts:` — on Linux, the probe of
     `rules/maintenance-windows.md` → Automatic restarts.
   - **The disks** in `storage.md` — `rules/storage-inventory.md` →
     Disks and When.
   - `Accounts:` — `rules/accounts-probe.md` → Probe, in a call of
     its own, written as `rules/accounts.md` → Memory says. Without
     root it says `sudo rules unchecked (needs root)`.
   - `Management:` — `rules/management-controller.md` → When it
     applies and Detection; a question it leaves joins step 6.
     Without root the host's report line says
     `Management: not settled (needs root)`.
   - `Backup:` — a mechanism step 4's Backup section found, written
     as housekeeping's
     `.agents/skills/hostwarden-housekeeping/references/backup-presence.md`
     → Recording the Answer writes one. Where it found none, that
     file's question joins step 6.
   - `Container registries:` — where a container engine runs, the
     image column of the `ps -a` line in housekeeping's
     `.agents/skills/hostwarden-housekeeping/references/containers.md`
     → Probe, read as the security audit's
     `.agents/skills/hostwarden-security/references/containers.md`
     → Registries says. Which registries to trust joins step 6.
   - `Upstream firewall:` — where step 4 found a family the host does
     not filter and memory has no such line, the ports the host
     listens on, which `rules/baseline.md` → Filtering in front of
     the host starts from, read with step 4's calls. Its question
     joins step 6, and the weighing waits for the answer.
   - `memory/topology.md` and `Dynamic routing:` — where step 3
     wrote a full network profile, `rules/network-topology.md` →
     Folding a profile. On an appliance whose file has a
     `## Network configuration read`, that read, folded as
     `rules/network-topology.md` → Folding a configuration read.
   - `memory/dns.md` and `DNS server:` — `rules/dns.md` → Reading a
     DNS server: its detection on every host, and on one that runs a
     DNS server the read of its name spaces.

6. **Close the host.** Any other question whose answers only get
   recorded — stopped guests, the questions step 5 hands on, the
   host's `Site:` (`rules/network-topology.md` → The question,
   whose answer rewrites the site field of the ranges step 5
   already folded, in the same edit, as → Pruning and staleness
   requires) and its site's uplink where it is still open, whether
   the `Site:` line is new or was there
   (`rules/network-topology.md` → The uplink question), what
   filters in front of the host (`rules/baseline.md` → Filtering in
   front of the host), the ones
   its references ask once (a UPS and what it
   powers, a serial adapter's far end, a reserved device no guest
   claims), anything else the pipeline's rules offer to record — is
   asked once the measurement has run, in the order its rules give,
   so the answers
   are in its memory before the next host starts. In a run of several
   hosts they wait for the run's close instead
   (→ Several hosts: questions by site). An answer that settles
   part of step 4's measurement — a backup the host cannot see, a
   filter in front of it — is weighed as its rule says, and where
   that closes a gap, the host's `Baseline check:` line, its report
   line and the gaps step 7 offers lose it. Once steps 3 to 5
   have run through the host's own way in, the host gets
   `- Onboarded: <date>` in place of any `SSH: untested`; on a known
   host the date moves. The
   journal line rides in the host's last call, and its changelog
   entry and commit follow (`rules/changelog.md`):

       read-only: onboarded — the server's details recorded and
       checked against the server baseline, nothing changed

7. **Report.** One block for the run, then the question.

   ```
   Onboarded 3 hosts, read-only
   pve1.example.com — Proxmox VE 9.0.3, 11 guests: 9 registered
     baseline: missing automatic security updates, backup;
     no baseline template for containers
   web1.example.com — Debian 13, known host re-probed, its record
     140 days old:
     OS: Debian 12 in memory, Debian 13 now
     baseline: complete; Management: not settled (needs root)
     gateway 192.0.2.1 is not in Hostwarden — onboarding it
     (read-only, SSH) gives the full picture of ranges and VLANs
   db1.example.com — not onboarded: SSH timeout
   Written: memory.md and a read-only journal line for each onboarded
     host, network.md for pve1 and web1, guests.md for pve1, the
     workspace committed
   Registered guests finish onboarding on their first own login.
   Nothing on the servers was changed.
   Housekeeping keeps health and settings current, the fleet audit
     the drift between hosts; neither runs by itself.
   ```

   - A known host's line names the age of the record the re-probe
     replaced where it was stale (`rules/machine-memory.md` →
     Onboarded and stale lines).
   - The line on registered guests stands where the run registered
     one that it did not reach through its own way in.
   - The gateway line stands under a host whose range's gateway
     field in `memory/topology.md` names no host, once per gateway
     address in the run. It is an offer, never an assumption: an
     address does not say what answers there.
   - A host onboarded under an adopted naming scheme whose name
     does not check out against it gets `not on naming scheme
     (would be <proposed name>)` at the end of its line
     (`rules/naming-scheme.md` → Checking a name, → Onboarding a
     host whose name does not match).
   - The last line always stands.

   Then, where a host has gaps, ask which to take on first: one option
   per host with gaps, one per node without a baseline template,
   "schedule housekeeping", and "not now". A host in read-only mode —
   on the read-only list, through a read-only host, or by its family,
   as Windows is (`rules/access-control.md` → Read-Only Servers) —
   gets no option: its gaps go into the modification report that
   section gives. A host picked starts `hostwarden-baseline` at its
   step 3, with this measurement; a node starts building its template
   (`hostwarden-new-guest`); scheduling follows
   `.agents/skills/hostwarden-housekeeping/references/scheduled.md`.
   Where no
   host has gaps, the question offers the schedule and "not now"
   alone.

8. **Naming**, with a person at the keyboard, once step 7's report
   and question are answered:
   - **The workspace has neither `memory/naming.md` nor the decision
     at `memory/decisions/naming.md`** (first run): ask
     `rules/naming-scheme.md` → The question in the first
     onboarding.
   - **Otherwise:** where `rules/naming-scheme.md` → Detection's
     "When it runs" is met by the hosts now in memory, run
     Detection.
   - **Neither applies:** nothing to do.

   Never on a run with nobody at the keyboard
   (`rules/naming-scheme.md` → The question in the first onboarding,
   → Detection): it is left for the next interactive run.

`hostwarden-heinzel-takeover` runs this skill for the hosts it
takes over from Heinzel; where it adds to a step, its step 9 says
so.

## Several hosts: questions by site

In a run of several hosts, step 6's questions are asked once the
last host has run step 5, and before step 7's report. The guests a
hypervisor of the run registered and the run reached are among
them. Each host's journal line, `Onboarded:`, changelog entry and
commit still come at its own step 6, so a host is on record as soon
as it is measured.

A question whose answer is a fact about a place is asked once for
every host it is open for at that place. The question names each of
those hosts, so the answer is the user's for each: every host gets
its own line, in the form and with the source and date its rule
gives, as if it had been asked alone. An answer that names
exceptions records the others and asks each exception alone;
"differs per host" asks every host of the group alone. Where a
rule's question has a fixed form, the group question keeps its
options and puts the hosts in its first line:

    web1.example.com, web2.example.com, db1.example.com (home):
    How do you reach these machines when SSH is gone?

In this order:

1. **Sites.** A guest's site is its host's, and a host whose memory
   names a site keeps it. The hosts the site question is open for
   are asked as
   `rules/network-topology.md` → The question → Several hosts at
   once says. The uplink question comes once for each site of the
   run where it is still open (`rules/network-topology.md` → The
   uplink question): with the first answer that names the site, or,
   for a site its hosts already name, before step 2.
2. **Per site, one question each,** for the hosts of that site the
   question is open for. A host with no site to group by —
   `Site: unknown`, a workstation, a guest whose host has none — is
   no place: its questions go to step 4.
   - what filters in front of the hosts (`rules/baseline.md` →
     Filtering in front of the host), for those whose measurement
     found a family unfiltered and whose memory has no
     `Upstream firewall:` line. Each host's line names its own
     addresses, from its profile, and a part of the answer that
     names one host goes on that host's line alone. A host with a
     public address on its own interface (the uplink's
     `public on <host>, no NAT`) is asked alone for that family: a
     router of the site does not stand in front of that address;
   - how the machines are reached when SSH is gone
     (`rules/management-controller.md` → Provider console), for the
     bare-metal hosts where detection found no controller;
   - whether a backup the hosts cannot see exists
     (`.agents/skills/hostwarden-housekeeping/references/backup-presence.md`
     → Severity), for those where step 4 found no mechanism and
     memory holds no answer.
3. **Container registries,** one question for the hosts whose images
   come from the same registries, and each host's line lists the
   ones the user trusts among its own.
4. **Every other question,** host by host in the run's order, and
   step 2's for a host with no site.

The answers are written into each host's memory and committed once,
with every path they changed (`rules/changelog.md` → The
Workspace). A run cut off before its close leaves those lines
missing, and the rule that owns each asks at its next moment with a
person present.

## The first own login

A guest its hypervisor registered finishes onboarding on its first
own connection, whatever the task (`rules/first-connection.md`
step 9). Nobody is asked whether: finishing reads only, and costs
only time.

1. **Announce** it in one line, before the first command after the
   pipeline's own:

       web1.example.com: first own login — finishing onboarding,
       read-only, then the task

2. **Steps 4 to 6**, before the task, their questions included;
   the pipeline's OS detection was already the full re-probe
   (`rules/os-detection.md` → On subsequent connections). The
   journal line rides in the last call:

       read-only: onboarded on first own login — the server's
       details recorded and checked against the server baseline,
       nothing changed

3. **The task.**
4. **Baseline gaps after the task**, as one line with the offer,
   where the measurement found any and the guest is not in
   read-only mode:

       web1.example.com: baseline missing firewall, backup — take
       them on now? (hostwarden-baseline)

Where it runs in an agent (`rules/multi-host.md`), the agent returns
step 6's questions and the gaps line as notices naming this skill,
as it returns any skill's question. A run with nobody at the
keyboard, such as scheduled housekeeping
(`.agents/skills/hostwarden-housekeeping/references/scheduled.md`),
asks nothing, not even step 4's decision question: it finishes
steps 4 and 5, writes `Onboarded:`, names each unasked question in
its report as unsettled, and leaves its line missing for the next
interactive run to ask.

## What this skill does not do

- **No change on a host.** Closing a baseline gap, starting a stopped
  guest, moving what Heinzel left — each is its own question under
  its own rule, after the report.
- **No guest creation.** A new guest is `hostwarden-new-guest`, which
  registers it as it goes.
- **No scheduled runs.** It needs a user to answer the first
  connection's questions.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.