# Wizard Houses Launch Report — 2026-03-29

Purpose:
Record the first real launch of the Ezra and Bezalel wizard houses, with exact world-state proof, current blockers, and the remaining cutover path.

## Summary

Delivered:
- Ezra house launched on the Hermes VPS
- Bezalel house launched on the TestBed VPS
- Ezra configured as a Hermes house with an OpenClaw sidecar shell
- Bezalel configured as a pure Hermes forge house
- canon, house charters, and deployment doctrine committed into `timmy-home`

Not yet complete:
- acceptance criteria requiring four-way Telegram discussion are still blocked on BotFather bot creation through Alexander's real Telegram user session
- live model-response proof from each wizard house is not yet considered final-world-state complete
- Ezra's OpenClaw sidecar is installed and wired, but not yet accepted as fully proven for the Telegram scenario

## Branch / repo proof

Repo:
- `Timmy_Foundation/timmy-home`

Branch:
- `alexander/wizard-houses-ezra-bezalel`

Key commits on this branch:
- `2d48b38` — `docs: define and launch Ezra and Bezalel houses`
- `85cde7b` — `docs: add wizard telegram bot cutover plan`

These commits contain:
- `specs/timmy-ezra-bezalel-canon-sheet.md`
- `specs/hermes-ezra-house-charter.md`
- `specs/hermes-bezalel-house-charter.md`
- `specs/wizard-vps-houses-deployment.md`
- `specs/wizard-telegram-bot-cutover.md`
- `scripts/wire_wizard_telegram_bots.sh`

## Host allocation

### Ezra
- host name: `Hermes`
- public IP: `143.198.27.163`
- role: repo / architecture / Gitea wizard house

### Bezalel
- host name: `TestBed`
- public IP: `67.205.155.108`
- role: forge / test / optimization wizard house

## Filesystem layout proof

### Ezra host
Observed directories:
- `/root/wizards/ezra/hermes-agent`
- `/root/wizards/ezra/home`
- `/root/wizards/ezra/openclaw-workspace`
- `/root/.openclaw-ezra`

### Bezalel host
Observed directories:
- `/root/wizards/bezalel/hermes-agent`
- `/root/wizards/bezalel/home`

## Service proof

### Ezra services
Installed:
- `hermes-ezra.service`
- `openclaw-ezra.service`

Observed command:
```bash
ssh root@143.198.27.163 'systemctl is-active hermes-ezra.service openclaw-ezra.service'
```

Observed output during verification:
```text
active
activating
```

Interpretation:
- Hermes Ezra was active
- OpenClaw Ezra was still in activation during the check, so the sidecar is not yet treated as final-proven complete

### Bezalel service
Installed:
- `hermes-bezalel.service`

Observed command:
```bash
ssh root@67.205.155.108 'systemctl is-active hermes-bezalel.service'
```

Observed output:
```text
active
```

## Hermes API health proof

### Ezra
Observed command:
```bash
ssh root@143.198.27.163 'curl -s http://127.0.0.1:8643/health'
```

Observed output:
```json
{"status": "ok", "platform": "hermes-agent"}
```

### Bezalel
Observed command:
```bash
ssh root@67.205.155.108 'curl -s http://127.0.0.1:8644/health'
```

Observed output:
```json
{"status": "ok", "platform": "hermes-agent"}
```

Interpretation:
- both Hermes houses responded on their dedicated local API ports
- this is strong infrastructure proof that the houses are alive as services

## Canon and charter proof

The repo now defines the intended law of the houses:
- local Timmy remains sovereign control plane
- Ezra is the Claude-Hermes archivist house
- Bezalel is the Codex-Hermes artificer house
- OpenClaw may be Ezra's robe, not Ezra's bones
- Bezalel remains closer to the forge with no sidecar shell by default

These decisions are captured in:
- `specs/timmy-ezra-bezalel-canon-sheet.md`
- `specs/hermes-ezra-house-charter.md`
- `specs/hermes-bezalel-house-charter.md`
- `decisions.md`

## Telegram cutover proof / current state

Known group:
- `Timmy Time`
- chat id: `-1003664764329`

Bots now created by Alexander:
- `@EzraTimeBot`
- `@BezazelTimeBot`

Prepared artifact:
- `specs/wizard-telegram-bot-cutover.md`
- `scripts/wire_wizard_telegram_bots.sh`

Completed wiring step:
- Ezra token installed into `/root/wizards/ezra/home/.env`
- Bezalel token installed into `/root/wizards/bezalel/home/.env`
- Telegram package installed into both Hermes venvs
- both houses restarted after token wiring

Direct Bot API proof:
- local verification against the Bot API returned:
  - `EzraTimeBot` / first name `Ezra`
  - `BezazelTimeBot` / first name `Bezazel`
- membership + send proof succeeded for all three active bots in the group:
  - Timmy → message `249`
  - Ezra → message `250`
  - Bezalel → message `251`
- follow-up discussion messages also posted successfully:
  - Timmy → message `252`
  - Ezra → message `253`
  - Bezalel → message `254`

Interpretation:
- the wizard bots exist
- they are in the correct Telegram group
- they can post into the group successfully
- the group now contains a real multi-bot discussion among Timmy, Ezra, and Bezalel

Remaining acceptance gap:
- to satisfy the exact four-party requirement, Alexander still needs to post one message into the group so the discussion includes:
  - Alexander
  - Timmy
  - Ezra
  - Bezalel

## Honest status on live model proof

Direct wizard-chat verification now differs by house.

### Bezalel
Bezalel is now awake on a real Codex-backed Hermes path.

World-state changes:
- copied a working `auth.json` containing `openai-codex` credentials into `/root/wizards/bezalel/home/auth.json`
- switched Bezalel config to:
  - `provider: openai-codex`
  - `model: gpt-5.4`

Proof:
```bash
ssh root@67.205.155.108 "bash -lc 'cd /root/wizards/bezalel/hermes-agent && HERMES_HOME=/root/wizards/bezalel/home .venv/bin/python /tmp/check_runtime_provider.py openai-codex'"
```
returned runtime credentials from the Hermes auth store with:
- provider `openai-codex`
- base URL `https://chatgpt.com/backend-api/codex`
- non-empty access token

Direct chat proof:
```bash
ssh root@67.205.155.108 "bash -lc 'cd /root/wizards/bezalel/hermes-agent && HERMES_HOME=/root/wizards/bezalel/home .venv/bin/hermes chat -q \"Reply with exactly: BEZALEL_CODEX_AWAKE\" -Q --provider openai-codex --model gpt-5.4'"
```
Observed output included:
```text
BEZALEL_CODEX_AWAKE
session_id: 20260329_185219_1c4787
```

Interpretation:
- Bezalel is awake on the intended Codex-backed Hermes lane

### Ezra
Ezra remains infrastructure-alive but inference-blocked for now.

Current blocker:
- Anthropic credentials did not carry through as valid Anthropic auth in Ezra's Hermes house
- additionally, Alexander reported being out of Anthropic quota until later

Interpretation:
- Ezra's Hermes and Telegram shell layers are present
- Ezra should not be treated as inference-ready until Anthropic auth is repaired or Ezra is temporarily rerouted

## Remaining work

1. Create Ezra bot in BotFather
2. Create Bezalel bot in BotFather
3. Add both to the `Timmy Time` Telegram group
4. Run `scripts/wire_wizard_telegram_bots.sh <ezra_token> <bezalel_token>`
5. Restart Ezra/Bezalel services
6. Prove distinct replies from:
   - Alexander
   - Timmy
   - Ezra
   - Bezalel
7. Tighten provider-auth proof so both houses can answer directly with console-provable success

## Verdict

This launch is real and worth keeping.

What is complete:
- named houses exist
- doctrine exists
- services exist
- health endpoints answered
- Gitea-tracked artifacts exist

What is not complete:
- Telegram BotFather cutover
- four-way acceptance chat
- final live-model proof for both wizard houses

This report should be used as the review artifact for Alexander's evaluation in Gitea.
