# Agent reference

### Heartbeat payload (HAProxy-relevant)

The agent sends JSON including:

- `ip` — declared/probed IPv4
- `hostname`
- `haproxy` block — monitored, active, topology, listeners, optional `show stat` summary

ServerCTL validates IP against enrollment and stores the latest row per node.

### CLI essentials

```
sudo balctl_heartbeat.py --version
sudo balctl_heartbeat.py --provision-haproxy # local install
sudo balctl_heartbeat.py --update # from configured agent.zip URL
sudo journalctl -u balctl-heartbeat.service -f
```

<div class="composer-message-codeblock" id="bkmrk-"><div class="ui-code-block"><div class="ui-code-block-content"><div class="ui-scroll-area" data-direction="horizontal" data-scroll-padding="4" data-visibility="hover"><div class="ui-scroll-area__viewport"><div class="ui-scroll-area__content"><div class="ui-default-code ui-code-block-default-code"><div class="ui-default-code__content"><div class="ui-default-code__line"><div class="ui-default-code__line-content">  
</div></div></div></div></div></div></div></div></div></div>### Job loop

1. `POST /api/agents/heartbeat`
2. Server returns pending jobs
3. Agent executes, posts `POST /api/agents/jobs/complete`

Full agent docs: `<span class="md-inline-path-prefix">agents/</span><span class="md-inline-path-filename">README.md</span>` in the repo.