2026 OpenClaw on a Rented Mac Mini: memory.qmd Nightly Reindex, searchTool Pin & config validate to Avoid Restart Loops
Operators who rent a Mac Mini for seven by twenty four OpenClaw gateways often see retrieval drift: daytime memory.qmd increments fight nightly full rebuilds, and a loose searchTool path triggers mcporter failures plus a config restart loop.
This checklist delivers a decision matrix, seven rollout steps, citeable thresholds, and a downgrade FAQ—always config validate before apply. Internal links: Home, Pricing, APFS disk waterline FAQ, launchd throttle guide.
Three pain points on unattended memory indexes
- Index tear. Daytime memory.qmd increments overlap a full nightly rebuild; queries return stale vectors beside fresh metadata.
- mcporter trap. A relative searchTool path shifts after Homebrew; the gateway fails validation and launchd enters a restart ring.
- Config storm. File watchers reload half-written YAML; skipping config validate before apply breaks night batches.
Rented Mac Mini scenarios for local RAG and QMD
Best fit for seven by twenty four unattended hosts: knowledge stays on the rental, chat uses a loopback gateway, retrieval reads memory.qmd instead of a remote vector API—lower latency, predictable cost, auditable offline.
- Daytime: conversations append under
$OPENCLAW_HOME/memory/; searchTool stays read-only. - Night: launchd triggers full or segmented rebuild off-peak from inference.
- Pin versions: OpenClaw build, embedding model, and mcporter land in a git runbook for reproducible rentals.
# directory layout (example)
export OPENCLAW_HOME=/var/openclaw/prod
export MEMORY_QMD=$OPENCLAW_HOME/memory/index.qmd
export MEMORY_STAGING=$OPENCLAW_HOME/memory/staging/
memory.qmd and searchTool recommended values
Freeze these controls before you promote seven by twenty four traffic on an M4 rental.
| Control | Starter value | Notes |
|---|---|---|
| Index file | memory/index.qmd | Rebuild writes staging; atomic rename into place. |
| Chunk size | 512–768 tokens | Smaller for prose KB; code repos may use 1024. |
| Top-K | 6–8 night / 10 day | Lower K overnight reduces hallucination load. |
| Rebuild calendar | UTC 02:30 | Stagger from backup and cert renew per launchd health matrix. |
| mcporter | Absolute path + sha256 | Must pass validate before apply. |
| Disk gates | Yellow 15% / red 10% | See APFS FAQ. |
Pin searchTool to avoid mcporter validation failures
Record searchTool.binary, indexDir, and checksums in a manifest. Run config validate against $OPENCLAW_HOME/config.staging/ before any live swap.
# pin-manifest.json (excerpt)
{
"searchTool": "/opt/openclaw/bin/mc-search",
"indexDir": "/var/openclaw/prod/memory/index",
"sha256": "a1b2c3…"
}
- Never rely on relative paths that drift after package upgrades.
- Failed mcporter self-check must not touch the running config file.
Nightly rebuild window and disk waterlines
Run full rebuilds only inside UTC 22:00–06:00. Set Nice 10 and IOPriority=utility per our launchd throttle guide.
- Yellow gate: pause new embeddings; queries only; staging read-only.
- Red gate: kill rebuild job; page immediately via webhook.
- Rotate rebuild logs at 128 MB × 7 with newsyslog—separate from gateway logs.
Avoid config restart loops: validate first, then apply
#!/bin/bash
set -euo pipefail
STAGING="$OPENCLAW_HOME/config.staging/openclaw.yaml"
openclaw config validate --config "$STAGING" # mcporter + searchTool
install -m 0644 "$STAGING" "$OPENCLAW_HOME/config/openclaw.yaml"
openclaw gateway reload-once # single HUP; disable watch loops
Ignore the staging directory in file watchers. After a successful apply, touch .config_generation for health probes.
launchd silent window and Healthchecks or generic webhook heartbeat
Split rebuild and gateway launchd labels. Fix StandardOutPath, set ThrottleInterval 120s on the rebuild label to damp crash loops.
# segment-end heartbeat (Healthchecks or generic webhook)
curl -fsS -m 10 -X POST "$HC_URL/$SLUG" \
-d '{"batch_id":"'"$BATCH"'","phase":"reindex_done"}'
Pair with Healthchecks night batch guide and daemon healthcheck webhooks. Log-only failures inside the silent band; page outside it.
Seven reproducible rollout steps
- Provision. Purchase, SSH from Help, baseline
df -hon Home. - Layout. Create
memory/and staging dirs; commit pin-manifest. - Config. Wire searchTool and memory.qmd paths;
openclaw config validatethen apply. - launchd. Load nightly rebuild plist at UTC 02:30 with Nice and IO from the matrix.
- Heartbeat. POST
reindex_doneto Healthchecks or a generic webhook. - Gates. Align APFS yellow/red with newsyslog caps from the disk FAQ.
- Drill. Force a validate failure; confirm live config is untouched and no restart loop.
Cite: rebuild UTC 02:30; deep window 22:00–06:00 UTC; Top-K 6–8 night; chunks 512–768 tokens; APFS yellow 15% red 10%; rebuild log 128 MB × 7; launchd ThrottleInterval 120s; validate-before-apply mandatory for config changes.
Long-run task downgrade FAQ
Should I run a full rebuild when daytime chat feels slow?
Check yellow disk and Top-K first. Run full rebuild only inside the deep window; use incremental daytime updates or lower K.
Validate passed but apply still loops restarts?
Confirm watchers ignore staging; switch to reload-once and raise ThrottleInterval on the gateway label.
Rent a Mac Mini for 7×24 OpenClaw memory indexes
RunMini Apple Silicon rentals host loopback gateways, nightly memory.qmd rebuilds, and honest probes. Compare Plans, open Purchase, and align disk waterlines plus launchd throttle before you promote traffic.
Summary. Freeze memory.qmd nightly windows, pin searchTool, and enforce config validate before apply so OpenClaw stays searchable on a rented Mac Mini seven by twenty four. Return to Home after three silent nights with clean heartbeats.