# Docker with a HEART on heartcortex.ai: screenshots

These are real screenshots taken on 12 November 2026, **for illustration only: the site may change.** Docker with a HEART built in (`dockerd-heart`, way A) ran on the
author's own server with `demo_server.sh` and reported to https://heartcortex.ai every 30 seconds. The container `web`
was limited to 0.5 CPU and 128 MB, and labelled so that the HEART shares its figures under the alias `web` and offers its
CPU and memory limits as settings (0.5 to 4 CPUs, 64 to 1024 MB).

| # | Screenshot | What it shows |
|---|---|---|
| 1 | [01-register-device.png](01-register-device.png) | The owner registers the device with the device ID and the claim code that Docker's HEART printed once in the daemon's log. (The claim code is hidden here.) |
| 2 | [02-device-page.png](02-device-page.png) | The device's private page: **Healthy**, last heard 17 seconds ago, reporting every 30 seconds |
| 3 | [03-figures.png](03-figures.png) | The figures the device chose to share: containers, images, disk, and `web`'s CPU and memory limits and use. `web` uses all of its 0.5 CPU. |
| 4 | [04-problems-history-settings-on.png](04-problems-history-settings-on.png) | No open problems, and the owner turns on changing settings from the site |
| 5 | [05-settings.png](05-settings.png) | The settings the device offers, within the ranges it set itself. Each change needs a code sent by email. |
| 6 | [06-ask-ai-approvals-sharing.png](06-ask-ai-approvals-sharing.png) | Ask AI before a model is connected, approvals (off), and sharing (private) |
| 7 | [07-ai-models-connect.png](07-ai-models-connect.png) | The owner connects Anthropic Claude (`claude-opus-5-5`) with their own API key |
| 8 | [08-ai-models-connected.png](08-ai-models-connected.png) | Connected. The key is encrypted on the site and shown again only by its last four characters. |
| 9 | [09-ask-ai-system-prompt.png](09-ask-ai-system-prompt.png) | Ask AI, with the system prompt that tells the model about the device's API. The owner may change it. |
| 10 | [10-ask-ai-question.png](10-ask-ai-question.png) | The question: "Does the docker needs additional CPUs?" |
| 11 | [11-ask-ai-answer.png](11-ask-ai-answer.png) | Claude's answer. It read the status, figures, settings, alerts and 7 minutes of figure history with six read-only tools, and recommended raising `web` from 0.5 to 1 CPU. The model cannot make the change itself. |
| 12 | [12-settings-change.png](12-settings-change.png) | The owner makes the change in Settings |
| 13 | [13-answer-after-change.png](13-answer-after-change.png) | The answer kept on the page after the change request |

## The screenshots

### 1. Registering the device

The owner registers the device with the device ID and the claim code that Docker's HEART printed once in the daemon's log. (The claim code is hidden here.)

![Registering the device](01-register-device.png)

### 2. The device page

The device's private page: **Healthy**, last heard 17 seconds ago, reporting every 30 seconds

![The device page](02-device-page.png)

### 3. The figures it shares

The figures the device chose to share: containers, images, disk, and `web`'s CPU and memory limits and use. `web` uses all of its 0.5 CPU.

![The figures it shares](03-figures.png)

### 4. Problems, history, and turning on settings

No open problems, and the owner turns on changing settings from the site

![Problems, history, and turning on settings](04-problems-history-settings-on.png)

### 5. The settings it offers

The settings the device offers, within the ranges it set itself. Each change needs a code sent by email.

![The settings it offers](05-settings.png)

### 6. Ask AI, approvals and sharing

Ask AI before a model is connected, approvals (off), and sharing (private)

![Ask AI, approvals and sharing](06-ask-ai-approvals-sharing.png)

### 7. Connecting a model

The owner connects Anthropic Claude (`claude-opus-5-5`) with their own API key

![Connecting a model](07-ai-models-connect.png)

### 8. A connected model

Connected. The key is encrypted on the site and shown again only by its last four characters.

![A connected model](08-ai-models-connected.png)

### 9. Ask AI and its system prompt

Ask AI, with the system prompt that tells the model about the device's API. The owner may change it.

![Ask AI and its system prompt](09-ask-ai-system-prompt.png)

### 10. The question

The question: "Does the docker needs additional CPUs?"

![The question](10-ask-ai-question.png)

### 11. Claude's answer

Claude's answer. It read the status, figures, settings, alerts and 7 minutes of figure history with six read-only tools, and recommended raising `web` from 0.5 to 1 CPU. The model cannot make the change itself.

![Claude's answer](11-ask-ai-answer.png)

### 12. Making the change

The owner makes the change in Settings

![Making the change](12-settings-change.png)

### 13. The answer after the change request

The answer kept on the page after the change request

![The answer after the change request](13-answer-after-change.png)

## What happened next

**What happened next, from the logs:** the owner asked for `web.cpus = 1` and confirmed it with the emailed code at
22:53:46 UTC. The site signed the request. The HEART in Docker checked the signature, the device ID, the age and the
range, then asked Docker for the change. Docker applied it at 22:54:09 UTC, 23 seconds after the owner confirmed,
without restarting the container. `docker inspect` then showed `NanoCpus` = 1000000000.

Notes:
- At the time of these screenshots, the site showed the model's Markdown (such as `**bold**`) as plain text. Since the same day, it shows headings, lists, bold, italics and code as formatted text.
- The same steps run automatically, against the site's code with a fake Claude API, in [`../test_monitor_e2e.py`](../test_monitor_e2e.py).
