---
title: "Native SSH voor Comma-agents · Comma-blog"
description: "De agent blijft in de harness en bereikt je machines via SSH: op een publiek adres, via Tailcat of via je eigen tailnet."
url: https://comma.surf/nl/blog/native-ssh
language: nl
---

[Terug naar de blog](https://comma.surf/nl/blog)

19 oktober 2026

# Native SSH voor Comma-agents

[Aan de slag](https://app.comma.surf/) [Lees de documentatie](https://comma.surf/nl/docs/salix/agent-runtimes)

Je thuisserver maakt zijn nachtelijke back-up niet meer af. De logs staan op de server, de server staat achter je router, en je wilt dat [Comma](https://comma.surf/nl/) uitzoekt wat er is gebeurd, in plaats van je een lijst commando’s te geven die je heen en weer moet kopiëren. De agents van Comma kunnen nu via SSH op die machine werken, zonder dat je er nog een AI-agent op installeert.

## De agent woont buiten de sandbox

De meeste cloudagents draaien in hun sandbox: een container of VM met de modellus, de tools en de bestanden, die aanstaat zolang de agent bestaat. Salix, de gedistribueerde harness achter Comma, haalt die onderdelen uit elkaar. De agentlus draait in de harness, buiten elke sandbox, met meer dan 100 agents per CPU-core. Een cloud-VM of een apparaat is een plek waar commando’s draaien, en wordt alleen gebruikt als het werk een computer nodig heeft.

Om op je server te werken, verhuist de agent er dus niet naartoe. Hij roept vanuit de harness native SSH-tools aan:

- `ssh.open`, `ssh.write`, `ssh.read` en `ssh.screen` voor een interactieve terminal, ook met programma’s op volledig scherm;
- `ssh.exec` voor één commando, met stdout, stderr en de exitstatus apart;
- `ssh.list_files`, `ssh.download` en `ssh.upload` voor bestanden, via SFTP;
- `ssh.close` en `ssh.list` voor de levenscyclus van de verbinding.

De agent authenticeert met een **Group SSH key**: één sleutel per Workspace, gedeeld door de agents daarin. `ssh.public_key` geeft hem terug, en jij zet hem in `~/.ssh/authorized_keys` op de machine, net als voor elke andere SSH-client.

De harness kan je machine op drie manieren bereiken.

## 1. Een publiek adres

Heeft de machine al een bereikbare SSH-server, dan verbindt de agent met het IP-adres of de DNS-naam:

json

```
{ "tool": "ssh.open", "params": { "host": "203.0.113.10", "user": "deploy" } }
```

## 2. Tailcat, voor een machine zonder publiek adres

Een laptop of thuisserver achter NAT heeft vaak geen adres dat de harness kan bellen. [Tailcat](https://github.com/tailscale/tailcat) verbindt hem zonder inkomende poort, VPN of account. Het draait op de machine, maakt alleen uitgaande verbindingen en toont een adres dat begint met `tc`.

Tailcat kan ook zelf de SSH-server zijn. Start het met de publieke Group-sleutel:

sh

```
tailcat serve --ssh-authorized-keys='ssh-ed25519 AAAA...' ssh
```

Zo krijg je een login-shell, het uitvoeren van commando’s en SFTP onder het account dat Tailcat draait. Er is geen `sshd` voor nodig en je SSH-configuratie blijft ongewijzigd. Draait de machine al OpenSSH, gebruik dan `tailcat serve 22`, en OpenSSH regelt de login. Stuur daarna het adres naar de agent:

json

```
{ "tool": "ssh.open", "params": { "tailcat": "tc...", "user": "deploy" } }
```

## 3. Je eigen Tailscale-netwerk

Zitten je machines al in een tailnet, dan kan de Workspace zich erbij aansluiten. Koppel hem in de instellingen van de Comma-app, of vraag de agent het te doen. Een tailnet-beheerder opent een inloglink en keurt de node goed. De node krijgt standaard de tag `tag:comma-agent`, dus jouw tailnet-policy bepaalt precies welke apparaten en poorten hij kan bereiken, bijvoorbeeld alleen poort 22 op de thuisserver.

De agent toont apparaten met `tailnet.peers` en verbindt via een MagicDNS-naam of Tailscale-adres:

json

```
{
  "tool": "ssh.open",
  "params": { "host": "nas.tail1234.ts.net", "via_tailnet": true, "user": "deploy" }
}
```

## Vertrouwen en levensduur

Op elke route legt de eerste verbinding met een host diens hostsleutel vast. Een latere verbinding met een andere sleutel wordt geweigerd met `host_key_mismatch` en beide fingerprints, en de agent vraagt het jou voordat hij de oude sleutel verwijdert met `ssh.known_hosts.remove`.

Een SSH-verbinding hoort bij één agentsessie. Ze sluit na 30 minuten zonder gebruik en overleeft geen herstart van de agent of deploy van het platform, dus lang werk hoort in `tmux` of `screen` op de externe machine. Commando’s zijn begrensd: `ssh.exec` stopt standaard na 60 seconden en hooguit na 600, en een time-out wordt gemeld, nooit automatisch opnieuw geprobeerd.

Voor de back-up zou je kunnen vragen: ‘Lees de logs en controleer de schijfruimte, maar verwijder geen bestanden en wijzig de configuratie niet. Vertel me eerst wat je vindt.’

[Terug naar de blog](https://comma.surf/nl/blog)

## Try Comma, Now.

[Aan de slag](https://app.comma.surf/)
