blender-harness-driving
Skill4 starsChanged 21 days agoApache-2.0View on GitHub
Drive the Blender Design Harness from a shell client: launch a session, dispatch the closed request contract, keep the sceneRevision chain coherent, sign action-bound authorizations for gated commands, and verify exported artifacts independently.
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- openspec-apply-changeSkill
- openspec-archive-changeSkill
- openspec-exploreSkill
- openspec-proposeSkill
- openspec-sync-specsSkill
- openspec-update-changeSkill
- blender-ai-replicationSkill
- blender-asset-librarySkill
- blender-background-jobsSkill
- blender-character-animationSkill
- blender-character-riggingSkill
- blender-cinematographySkill
- blender-connectorSkill
- blender-curvesSkill
- blender-design-loopSkill
- blender-designSkill
- blender-exportSkill
- blender-grease-pencilSkill
- blender-hairSkill
- blender-hard-surfaceSkill
- blender-harnessSkill
- blender-inspectSkill
- blender-managedSkill
- blender-mcp-setupSkill
- blender-previewSkill
- blender-previsSkill
- blender-procedural-modelingSkill
- blender-quality-validationSkill
- blender-recoverSkill
- blender-render-compositingSkill
- blender-retopologySkill
- blender-scene-assemblySkill
- blender-sculpt-surfaceSkill
- blender-seedance-pipelineSkill
- blender-sequence-editingSkill
- blender-simulationSkill
- blender-to-dreaminaSkill
- blender-trackingSkill
- blender-useSkill
- blender-uv-materialSkill
- blender-video-originalSkill
- blender-video-recreateSkill
- blender-visual-loopSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 15
Start one session per production task with scripts/launch_harness.py, then dispatch through scripts/harness_cli.py --descriptor …
- Very specific: line 22
Every request is a closed contract: protocolVersion codex-blender/v1, sessionId, requestId, transactionId, command, arguments, and …
- Very specific: line 24
Read the receipt from stdout for status, sceneRevision, changedObjects, warnings, and result or error{code,message,retryable}.
- Very specific: line 69
Never trust a receipt alone.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Driving the Harness
This is the mechanical layer beneath the domain Skills. It owns the request contract, the
revision chain, transaction snapshots, authorization, and verification. Delegate the actual
modeling, lookdev, jobs, and validation decisions to the precise domain Skill advertised by
capability.describe.
Session and dispatch
Start one session per production task with scripts/launch_harness.py, then dispatch through
scripts/harness_cli.py --descriptor <descriptor> --request <file>; see
managed sessions. An installed copy may live under a
different root than this repository, so hold the plugin root in one constant rather than
rebuilding paths, and do not restart a session simply because the root moved — the process and
its descriptor stay valid.
Every request is a closed contract: protocolVersion codex-blender/v1, sessionId,
requestId, transactionId, command, arguments, and expectedSceneRevision for mutations.
Read the receipt from stdout for status, sceneRevision, changedObjects, warnings, and
result or error{code,message,retryable}. Batch a milestone as
transaction.begin, mutations, transaction.commit; on any failure issue
transaction.rollback and stop.
Revision chain
Take expectedSceneRevision from the live response of the previous command; never guess it.
A missing revision is rejected as STALE_SCENE_REVISION.
object.describe, mesh.inspect, and scene.inspect look read-only but are dispatched as
mutations: send them inside a transaction with a revision. A revision without an open
transaction fails with TRANSACTION_NOT_FOUND.
A transaction is a lease, not a label. begin snapshots; each mutation bumps the revision;
commit approves the snapshot at the resulting revision. export.file requires a snapshot
committed at the current revision or it fails with MILESTONE_NOT_APPROVED. After takeover or
re-inspection, begin a new transaction and never reuse a pre-takeover approval.
Gated commands
object.delete, export.file with overwrite, and other risk: gated commands are refused
with AUTHORIZATION_REQUIRED until the request carries a claim minted by
session.authorize {"action": <command>, "requestId": <the exact requestId being sent>,
"userConfirmed": true, "ttlSeconds": N}. The claim is action- and request-bound, so one
authorization cannot cover a loop; mint a fresh requestId per gated step. Confirm with the user
first, and on refusal report the error code verbatim instead of retrying around it.
Export parameters
export.file accepts path, snapshotId (required), sessionId, overwrite, parameters.
Keys are whitelisted per format and an unknown key is INVALID_ARGUMENT:
- glb / gltf:
use_selection,use_visible,use_renderable,export_apply,export_animations,export_materials - fbx:
use_selection,use_visible,use_active_collection,bake_anim,apply_scale_options - obj:
export_selected_objects,apply_modifiers,export_materials,export_uv - blend: none
There is no export_cameras or export_lights and no object-type filter, so a mesh-only model
requires temporarily setting studio lights and cameras invisible, exporting with
use_visible, then restoring them. Keep the .blend exported separately: a project file carries
the studio rig, a GLB or FBX should not. See export.
Verify what you ship
Never trust a receipt alone. Re-hash the file on disk. Parse the container: for GLB, read the
12-byte header plus the JSON and BIN chunks and list nodes, meshes, materials, cameras;
for FBX, walk the binary node tree (version at offset 23, 8-byte fields at version >= 7500,
and null records still occupy 25 bytes) and count Model, Geometry, Material, Camera.
Then re-import into an empty scene and measure vertices, polygons, triangles, non-manifold and
boundary edges, loose vertices, and world-space bounds. Use bmesh: MeshEdge.is_manifold no
longer exists in Blender 5.x.
Triangles must agree per object across GLB and FBX; GLB vertex counts are higher because glTF splits vertices per normal and UV. Assert that construction helpers and QA copies never appear in an exported node list. Report unverified qualities explicitly rather than implying coverage.
Confirm maturity with capability.list and capability.describe before relying on a command:
L1 results are query-only and must not be delivered as production output.
Normalise scene scale to real units before lighting; a part built as 90 Blender units reads as
90 m to the renderer and a studio rig sized for a 9 cm part renders it black. When a mesh
operation produces a defect, preserve the broken object as a hidden *_DEFECTIVE record in a
QA_Verify collection, rebuild the part, and let the export omit it.
For long or high-quality renders, use background jobs;
the synchronous preview.capture path is EEVEE-bound and client-timeout-bound.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

