# Hostlink

> Execute commands on the host machine from inside the OpenClaw container via the HostLink daemon. Provides secure, authenticated remote shell execution over a Unix domain socket (local) or TCP/WireGuard (remote). Use when you need to run commands on the host: access files outside the container, run host-side tools, interact with the Qwen3 merge project, manage Docker on the host, or execute anything requiring host-level access. The 'hostlink' binary is in PATH. Triggers on: "run on host", "execute on host", "host command", "outside container", "host machine", "hostlink", "hostlinkd".

- Skill: `lord1egypt/hostlink` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lord1egypt/hostlink`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lord1egypt/hostlink/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: Lord1Egypt (https://skillmd.com/u/lord1egypt)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/lord1egypt/hostlink

---


# HostLink Skill

Execute commands on the host machine from inside this container.

## Quick Reference

```bash
# Execute a command on the host
hostlink exec "ls /home/jebadiah"

# Ping the daemon (connection test)
hostlink ping

# With explicit socket/token (if env vars not set)
hostlink -s /run/hostlink/hostlink.sock -k $HOSTLINK_TOKEN exec "echo hello"

# Set working directory
hostlink -w /home/jebadiah exec "pwd"

# Set environment variables
hostlink -e MY_VAR=value exec "echo $MY_VAR"

# With timeout (ms)
hostlink -T 60000 exec "long-running-command"

# JSON output (machine-readable)
hostlink -j exec "ls -la" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['stdout'])"

# List configured targets
hostlink targets
```

## Environment Variables

Set these so you don't need to pass flags every time:

| Variable | Purpose | Default |
|----------|---------|---------|
| `HOSTLINK_SOCKET` | Unix socket path | `/run/hostlink/hostlink.sock` |
| `HOSTLINK_TOKEN` | Auth token | (required) |
| `HOSTLINK_TARGET` | Target node name | (optional) |

Best place to set these: `workspace/.env` or `openclaw.json` env.vars section.

## Connection Status

Check if hostlinkd is reachable:
```bash
hostlink ping
# Expected: [hostname] pong - uptime Xs
# If error: daemon not running or socket not mounted
```

## Common Use Cases

### Access host filesystem
```bash
hostlink exec "ls /home/jebadiah/projects"
hostlink exec "cat /etc/hostname"
```

### Run host-side GPU/ML tools
```bash
hostlink exec "nvidia-smi"
hostlink exec "ollama list"
hostlink exec "ls ~/.cache/huggingface/hub"
```

### Access the Qwen3 merge project
```bash
hostlink exec "ls /path/to/qwen3-merge"
hostlink exec "cat /path/to/qwen3-merge/README.md"
```

### Docker management on host
```bash
hostlink exec "docker ps"
hostlink exec "docker stats --no-stream"
```

## Exit Codes

| Code | Meaning |
|------|---------|
| 0 | Success |
| 1 | Remote command failed (check exit_code in JSON output) |
| 2 | Connection failed (daemon unreachable) |
| 3 | Authentication failed (wrong token) |
| 5 | Timeout |
| 7 | Client error (bad args, missing targets file) |

## Troubleshooting

**"Connection failed" / exit 2:**
- hostlinkd not running on host: `sudo systemctl start hostlinkd`
- Socket not mounted: check docker-compose volume mount
- Wrong socket path: check `HOSTLINK_SOCKET` env var

**"Authentication failed" / exit 3:**
- Wrong `HOSTLINK_TOKEN` — must match auth_token in `/etc/hostlink/hostlink.conf`

**"server busy" error:**
- Host is at max_concurrent limit — retry shortly

## Architecture

```
Container (you are here)          Host machine
┌─────────────────────┐          ┌──────────────────────────┐
│  hostlink (client)  │◄────────►│  hostlinkd (daemon)      │
│  workspace/bin/     │  Unix    │  /etc/hostlink/           │
│                     │  socket  │  auth_token = <secret>    │
└─────────────────────┘          │  shell = /bin/bash        │
                                 └──────────────────────────┘
```

See `references/setup.md` for installation and docker-compose configuration.

