From ea5d8dfd4e8503b937cb29924a2b5e431d94b464 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Mon, 28 Sep 2026 16:36:44 -0700 Subject: [PATCH] docs(blender): desktop Blender + MCP registration per working session, not per task (Prime 2026-09-28) --- docs/fleettools/FLEETTOOLS.md | 2 +- docs/fleettools/blender.md | 11 +++++++---- persistent-memory.md | 4 ++-- stacks/blender/README.md | 17 ++++++++++++++--- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/fleettools/FLEETTOOLS.md b/docs/fleettools/FLEETTOOLS.md index 8bd085a..bcfccf3 100644 --- a/docs/fleettools/FLEETTOOLS.md +++ b/docs/fleettools/FLEETTOOLS.md @@ -78,7 +78,7 @@ live contract for its API. Fetch it rather than trusting a transcription. - **Blender** — Blender 5.2 LTS on fv-ml1 GPU 3 (borrowed, on demand). `scripts/blender-run` for headless one-shot renders and conversions; `scripts/blender-mcp` for agent-driven scenes - (register per task). + (up and registered per working session, down at its end). *When:* 3D rendering, STL → image, scene building. *Detail:* `/home/lkraven/development/eshpfi-management/docs/fleettools/blender.md` diff --git a/docs/fleettools/blender.md b/docs/fleettools/blender.md index 16e8272..cf808b8 100644 --- a/docs/fleettools/blender.md +++ b/docs/fleettools/blender.md @@ -11,7 +11,7 @@ runs only while in use, and this access ends if a big seat moves onto the card. | You are… | Use | Shape | |---|---|---| | a script or CLI caller (renders, conversions) | `scripts/blender-run` | one-shot `docker run --rm`: no desktop, gone when Blender exits | -| an agent building scenes interactively | `scripts/blender-mcp` (MCP, per task) | a GUI Blender plus the mcp-for-blender add-on; `up` / `status` / `down` | +| an agent building scenes interactively | `scripts/blender-mcp` (MCP, per working session) | a GUI Blender plus the mcp-for-blender add-on; `up` / `status` / `down` | Both scripts are in `/home/lkraven/development/eshpfi-management/scripts/` and run from nh3-dev, reaching fv-ml1 as `infra-ops@10.251.50.54` over ssh. **No HTTP API** and no openapi.json. @@ -69,8 +69,11 @@ scripts/blender-run -- --python-expr 'import bpy; print(bpy.app.version_string)' ## blender-mcp (agents) -Register it **per task**, never user- or project-wide (Prime, 2026-09-27): +Bring it up **once per working session**, never always-on, and never register it user- or +project-wide (Prime, 2026-09-28, superseding the 2026-09-27 per-task rule). At session start: +`scripts/blender-mcp up`, wait for `status` to say answering, then `claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp`. -Then run `scripts/blender-mcp up`, wait for `status` to say answering, work, and run `down` -when finished. Safe mode is on (no os/open/network in agent code), so the startup hook has +At session end: `claude mcp remove blender` (the default local scope persists for the +directory) and `scripts/blender-mcp down`. There is one GUI and one scene, so MCP work +serializes fleet-wide; parallel work goes through blender-run. Safe mode is on (no os/open/network in agent code), so the startup hook has already pointed Cycles at OptiX. Save to `/work/…`. Details and traps are in the stack README. diff --git a/persistent-memory.md b/persistent-memory.md index d821be7..3fb14ef 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -1,6 +1,6 @@ # Persistent memory — eshpfi-management -_Last updated: 2026-09-28 ~0850 PT (Zigbee2MQTT live on esh-docker-vm + HA-MQTT macvlan route fixed; Blender on fv-ml1 GPU 3 (MCP per task, blender-run batch for draupnir); semif-serve 0.1.4; Worldtree reward config on demo+personal and instance-configs pushed; restic repository-file move verified all-green 2026-09-28.)_ +_Last updated: 2026-09-28 ~0850 PT (Zigbee2MQTT live on esh-docker-vm + HA-MQTT macvlan route fixed; Blender on fv-ml1 GPU 3 (MCP per working session, blender-run batch for draupnir); semif-serve 0.1.4; Worldtree reward config on demo+personal and instance-configs pushed; restic repository-file move verified all-green 2026-09-28.)_ > **Always check for `/tmp/infra-ops-handoff.md`** — if it exists and its > `Written:` stamp is under **8 hours** old, read it (it carries the in-flight @@ -195,7 +195,7 @@ _As of 2026-09-27 ~0900 PT._ server runs INSIDE the container, and agents reach it as ssh+docker-exec stdio via `scripts/blender-mcp`. No port is published, and screenshots work because server and Blender share a filesystem. Telemetry is off and safe mode is on. Verified end to end (render, screenshot, - safe-mode refusal). **Batch path: `scripts/blender-run`** (one-shot `docker run --rm`, `--job` staging; first user is draupnir). **Access: the shared fleet `infra-ops` login, with no render-only key (Prime, 2026-09-28).** **Registration: PER TASK (Prime, 2026-09-27)**: a session that needs Blender runs `claude mcp add blender -- …/scripts/blender-mcp`. It goes in NO user- or project-wide config. + safe-mode refusal). **Batch path: `scripts/blender-run`** (one-shot `docker run --rm`, `--job` staging; first user is draupnir). **Access: the shared fleet `infra-ops` login, with no render-only key (Prime, 2026-09-28).** **Registration + up/down: PER WORKING SESSION (Prime, 2026-09-28, relayed by draupnir; superseded per-task of 09-27)**: `blender-mcp up` + `claude mcp add` at session start, `claude mcp remove` + `down` at its end. Never always-on, never user- or project-wide config. → `stacks/blender/README.md` - **Extensions (2026-09-28, draupnir; Prime ruled Blender a MANDATORY pipeline stage):** 8 pinned add-ons (`stacks/blender/extensions.lock`) built by `scripts/blender-extensions sync` into diff --git a/stacks/blender/README.md b/stacks/blender/README.md index 6671c9c..4fa717f 100644 --- a/stacks/blender/README.md +++ b/stacks/blender/README.md @@ -79,13 +79,24 @@ not a sandbox. ### For an agent +**Per working SESSION** (Prime, 2026-09-28, relayed by draupnir; supersedes the 2026-09-27 +per-task rule): a session that does design work brings the desktop up once at its start and +takes it down at its end. It is still not always-on, and the registration is still never user- +or project-wide. + ```bash -scripts/blender-mcp up # GPU 3 is borrowed: start only when needed +# session start +scripts/blender-mcp up # GPU 3 is borrowed: only for a session that needs it scripts/blender-mcp status # wait for "mcp add-on: answering" (~10-40 s) -claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp # PER TASK (Prime 2026-09-27): never user/project-wide -scripts/blender-mcp down # when finished: the card goes back to 0 +claude mcp add blender -- /home/lkraven/development/eshpfi-management/scripts/blender-mcp +# session end +claude mcp remove blender # `mcp add` defaults to local scope, which PERSISTS for this directory +scripts/blender-mcp down # the card goes back to 0 ``` +- **One GUI, one scene: MCP work serializes fleet-wide.** Two sessions driving it at once + trample each other's scene. Parallel parts belong on `blender-run` (`--cpu` if nothing renders). + - **Always pass `user_prompt`.** The tools require it; it is a short statement of the user's request. - **Render on the GPU:** set `scene.cycles.device = 'GPU'` on any scene you create. Safe mode