Przejdź do treści
Biblioteka skilli
DevOps i chmura · Integracja z narzędziem

hogwild

/hogwild

Opisuje obsługę domowego serwera Hogwild: który host SSH i konto z sudo, co tam działa, gdzie znajdują się repozytoria, usługi i konfiguracja oraz jak instalować narzędzia dla agenta.

Licencja
MIT
Ostatnia zmiana repozytorium
28.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
4
Skrypty
3
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 28.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 3 skrypty w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: scripts/hw.ts, scripts/plan.test.ts, scripts/plan.ts

Co robi i kiedy

Opisuje obsługę domowego serwera Hogwild: który host SSH i konto z sudo, co tam działa, gdzie znajdują się repozytoria, usługi i konfiguracja oraz jak instalować narzędzia dla agenta.

Argumenty

/hogwild [task on Hogwild]
Oryginalny opis (EN)

Operate the Hogwild home server: which SSH host to use, which account holds sudo, what runs there, where each repo, service, route, and config lives, and how to install tools for the Agent. Use for any task that touches Hogwild over SSH.

Jak działa

  1. The hw CLI
  2. Pick the SSH host first
  3. What runs there
  4. Repos and config that own each part
  5. Agent checkouts on the host
  6. Email and browser identities
  7. Install a tool for the Agent
  8. Control the Agent
  9. Docker and firewall
  10. Do not
Sekcje z nagłówków SKILL.md, w oryginale · 134 linii, 1 179 słów
Podgląd SKILL.md
---
name: hogwild
description: "Operate the Hogwild home server: which SSH host to use, which account holds sudo, what runs there, where each repo, service, route, and config lives, and how to install tools for the Agent. Use for any task that touches Hogwild over SSH."
argument-hint: "[task on Hogwild]"
license: MIT
---

# Hogwild

Hogwild is one Ubuntu host on the LAN and the tailnet. It runs the Harlan GitHub Agent, the GitHub runner supervisor, three public sites behind one Cloudflare tunnel, AdGuard DNS, and Jellyfin.

## The `hw` CLI

Context sync installs `hw` in `~/.local/bin` for noninteractive shells.
It runs the installed planner and picks the correct account.
Run `pnpm sync:context` if the command is missing.
If sync is unavailable, run `node --experimental-strip-types scripts/hw.ts` from this Skill directory.

```bash
hw status                                  # host, services, containers, Agent unit
hw logs agent -n 100                       # or runner, caddy, tunnel, adguard, jellyfin, docker, status, dragon
hw install fd-find --link fd=fdfind        # apt as admin, link as the Agent
hw caddy check                             # or reload: validate first, then reload
hw runners                                 # live runners.conf against the repo copy, job containers
hw pending                                 # open host items from hogwild/README.md
hw run admin 'sudo iptables -S DOCKER-USER'
hw run agent 'ls ~/.local/bin'
```

`hw --help` lists every command. Reach for `ssh` directly only when `hw run` does not fit.

## Pick the SSH host first

| Command | Account | Use it for |
| --- | --- | --- |
| `ssh hogwild` | `harlan` | Agent state, config, checkouts under `~/pkg` and `~/sites`, `systemctl --user`, tool links in `~/.local/bin`. No sudo, no docker. |
| `ssh hogwild-admin` | `harlan-admin` | `sudo`, `apt`, `docker`, system `systemctl`, `/etc`, `/opt`, `/var/lib`. Cannot read `/home/harlan`. |

If the task needs both, run two commands. Never grant `harlan` sudo or docker. Never SSH as root. The Agent runs public issue text under `harlan`; root there is the attack path the split closed on 2026-09-11.

The desktop zsh aliases `hogwild`, `hogwild-lan`, `hogwild-admin`, `hogwild-admin-lan` use the same key `~/.ssh/id_ed25519_hogwild`.

## What runs there

| Service | Unit | Account | Listens | Source |
| --- | --- | --- | --- | --- |
| Harlan GitHub Agent | `harlan-github-agent.service` (user unit, linger) | `harlan` | `127.0.0.1:3210` dashboard, `:3211` webhook | `~/.local/share/harlan-github-agent/service` |
| GitHub runner supervisor | `hogwild-github-runner.service` | `github-runner` | none; one Docker container per job | `/var/lib/github-runner` |
| Status site | `hogwild-status.service` | `hogwild-status` | `127.0.0.1:9100` | `/opt/hogwild-status/current` |
| Dragon deck | `chasing-the-ai-dragon.service` | `dragon-deck` | `127.0.0.1:3031` | `/opt/chasing-the-ai-dragon/current` |
| Caddy | `caddy.service` | `caddy` | `127.0.0.1:8080` | `/etc/caddy/Caddyfile`, routes in `/etc/caddy/routes/*.caddy` |
| Cloudflare tunnel | `cloudflared.service` | `cloudflared` | outbound only | `/etc/cloudflared/config.yml` |
| AdGuard Home | `adguardhome.service` | `adguardhome` | DNS `:53` on the LAN and tailnet addresses, admin `:5380` on every interface, ufw blocks it from the LAN | `/opt/AdGuardHome`, config in `/var/lib/adguardhome` |
| Jellyfin | `jellyfin.service` | `jellyfin` | `:8096`, ufw allows the LAN and the tailnet | `/srv/jellyfin` |
| Docker | `docker.service` | root | published ports bind loopback | `/etc/docker/daemon.json`, `DOCKER-USER` rules from `hogwild-docker-user.service` |

Public routes go internet, Cloudflare tunnel, Caddy `:8080`, then the loopback port above:

- `hogwild.harlanzw.com`, the status site
- `dragon.harlanzw.com`, the deck
- `agent.harlanzw.com`, the Agent dashboard behind Basic auth; `/webhook` reaches the signed webhook listener

## Repos and config that own each part

| Part | Repo | Local checkout | Deploy |
| --- | --- | --- | --- |
| Agent service code | `harlan-zw/harlan-agent-kit` `packages/harlan-github-agent` | `~/pkg/harlan-agent-kit` | `pnpm service:hogwild:update` from the repo root |
| Agent context, worktrunk, env files | same repo, `scripts/` | same | `pnpm sync:context:hogwild`, `pnpm service:hogwild:sync-env`, `pnpm service:hogwild:sync-worktrunk` |
| Agent config | not in git | `hogwild:~/.config/harlan-github-agent/config.yml` | edit, then request durable Restart |
| Agent state | not in git | `hogwild:~/.local/share/harlan-github-agent/state.sqlite`, `journal.sqlite`, `worktrees/` | back up before a migration |
| Runner supervisor, runners.conf, Dockerfile, host hardening | `harlan-zw/hogwild-gh-runner` (private) `github-runner/` | `~/pkg/hogwild-gh-runner` | install steps in its README |
| Host security layout, Docker rules, pending items | same repo, `hogwild/` | same | `hogwild/README.md` |
| Status site | `harlan-zw/hogwild.harlanzw.com` | `~/pkg/hogwild.harlanzw.com` | GitHub Actions deploy job to `hogwild-deploy` |
| Caddy routes | `scripts/30-agent.caddy` for the agent route; others live only on the host | | `sudo systemctl reload caddy` |

A deploy reads `~/.config/harlan-github-agent/config.yml` with the new revision before it restarts anything. If the new revision rejects the file, the deploy stops and the running revision keeps serving. Run the same check by hand with `harlan-github-agent check-config --config <path>`.

The live `runners.conf` is `/var/lib/github-runner/config/runners.conf`. Change it in the repo first, then install it.

## Agent checkouts on the host

`harlan` holds a primary checkout for every repository the Agent works on. They live under `/home/harlan/pkg` and `/home/harlan/sites` and must stay clean on `main`. The Agent creates its worktrees under `~/.local/share/harlan-github-agent/worktrees/`.

Not every checkout is mapped. `config.yml` lists the active `repositories` and the observe-only `external_repositories`. Read the file for the current list: `ssh hogwild 'rg -n "^  - github:" ~/.config/harlan-github-agent/config.yml'`.

If a new repository joins, clone it as `harlan` into the matching directory, then add a `repositories` entry and request durable Restart.

## Email and browser identities

Before email work, read [email-usage](../email-usage/SKILL.md).
Before browser work, read [browser](../browser/SKILL.md).
Discover accounts on Hogwild. Its Himalaya configuration intentionally has no send backend.
Desktop Chrome profiles do not imply signed-in sessions on Hogwild.
Never copy desktop credentials or browser sessions to the server.

## Install a tool for the Agent

1. Install as admin: `ssh hogwild-admin 'sudo apt-get install -y <package>'`.
2. If the Agent needs it under a different name, link it as harlan: `ssh hogwild 'ln -sf "$(command -v fdfind)" ~/.local/bin/fd'`.
3. Record it in the tools table in `hogwild-gh-runner/hogwild/README.md`.

Tools in `hogwild:~/.local/bin` today: `node`, `pnpm`, `bun`, `uv`, `gh`, `wt`, `rg`, `fd`, `ripast`, `opencode`, `codex`, `wrangler`, `cf`, `sentry-cli`, `nuxtseo`, `himalaya`, `dev-browser`. No `claude`; the Agent uses `opencode`.

## Control the Agent

Prefer the control CLI from the desktop over raw `systemctl`:

```bash
harlan-github-agent control status
harlan-github-agent control pause
harlan-github-agent control restart
```

If a change needs the process to pick up new groups or a new Node, restart the user manager as admin. That kills in-flight Agent work, so pause first and get Harlan's say so:

```bash
ssh hogwild-admin 'sudo systemctl restart user@1000.service'
```

Use `hw logs agent -n 200` for unit logs.

The launcher reads the default configuration and password file.
Desktop reads `~/.config/harlan-github-agent/control-url`.
Context sync creates it with the Hogwild URL if missing.
It preserves an existing target. Hogwild uses loopback.
Explicit connection arguments win.
Use the Service Skill for [connection recovery and Review reads](../harlan-github-agent/SKILL.md).
For routine configuration changes, request durable Restart.
Never restart the user unit directly while Agents run.

## Docker and firewall

`ufw` allows SSH, DNS, and Jellyfin from the LAN, and everything on `tailscale0`. Docker bypasses ufw, so `hogwild-docker-user.service` fills `DOCKER-USER`: containers cannot reach the LAN, the tailnet, or link-local; the LAN cannot open published ports. `daemon.json` binds published ports to loopback. After `ufw reload`, restart Docker. Verify with `sudo iptables -S DOCKER-USER`.

## Do not

- Do not add `harlan` to `sudo` or `docker`.
- Do not edit a primary checkout under `~/pkg` or `~/sites` on the host. The Agent owns them.
- Do not reboot without draining the runner: `sudo systemctl stop hogwild-github-runner.service`, then `sudo reboot`.
Pliki w paczce (4)
  • SKILL.md 9 KB
  • scripts/hw.ts 1 KB
  • scripts/plan.test.ts 7 KB
  • scripts/plan.ts 8 KB

Wersje

W bazie nie ma innych skilli o nazwie hogwild.

Identyczna treść występuje jeszcze w 1 innych folderach na GitHubie. Tu pokazujemy jedną, najlepiej ocenioną kopię.

Migawka bazy z 28.10.2026 · wersja paczki d0c7ea588c68 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100ssh-config
    Edytuje konfigurację SSH: dodaje, zmienia i przenosi hosty, wiąże klucze i porządkuje pliki config oraz multipleksowanie połączeń.
  • 100tailscale-operator
    Zarządza urządzeniami w tailnecie Tailscale, łączy się z nimi i diagnozuje problemy: adresy IP, SSH, logowanie kluczem publicznym, Tailscale SSH i uprawnienia sudo na zdalnych Macach i hostach Linux.
  • 90ssh-remote-operations
    Wykonuje operacje DevOps na zdalnych serwerach przez konfigurację SSH w katalogu projektu, bez ujawniania kluczy i haseł.
  • 90remote-host-diagnostics
    Diagnozuje stan zdalnego hosta przez SSH, Ansible i skanowanie sieci, gdy serwer lub maszyna wirtualna działa źle.
  • 95glab-ssh-key
    Dodaje, wypisuje i usuwa klucze SSH na koncie GitLab, gdy konfigurujesz uwierzytelnianie przez SSH i Git.
  • 100env
    Instaluje pakiety, środowiska uruchomieniowe języków i narzędzia CLI przez x-cmd bez sudo, np. Python, Node czy jq.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.