diff --git a/CLAUDE.md b/CLAUDE.md
index d3e56985b..dc3de155c 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -56,3 +56,7 @@ Every objective XML file must include a `MetadataFields` block inside the `TreeN
- `runnable` — set to `"true"` for top-level objectives the user can run, `"false"` for subtrees only called by other objectives
- `subcategory` — groups the objective in the UI (e.g., `"AprilTag"`, `"Grasping"`, `"MuJoCo Simulation"`)
+
+### A gripper config needs `close_gripper.xml` / `open_gripper.xml`, or teleop gripper silently fails
+
+Teleoperation drives the gripper by looking up Objectives named exactly `"Close Gripper"` / `"Open Gripper"` (the `Request Teleoperation` SubTree in moveit_pro core). If a config package doesn't provide those overrides in its `objectives/` directory, the lookup falls back to moveit_pro's core placeholder, which logs `[ERROR] LogMessage Error: This robot configuration does not have a \`Close Gripper\` Objective configured to override this default.` on every BT tick for as long as the control is held, and the gripper never moves — even if some other Objective in the same config already drives the gripper directly via `MoveGripperAction` (that path bypasses the named-Objective lookup entirely). Any new config with a gripper needs both files; see `moveit_pro_kinova_configs/kinova_gen3_base_config/objectives/{close,open}_gripper.xml` for the reference pattern.
diff --git a/src/vla_sim/objectives/close_gripper.xml b/src/vla_sim/objectives/close_gripper.xml
new file mode 100644
index 000000000..28280fc86
--- /dev/null
+++ b/src/vla_sim/objectives/close_gripper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/vla_sim/objectives/open_gripper.xml b/src/vla_sim/objectives/open_gripper.xml
new file mode 100644
index 000000000..4b310d17b
--- /dev/null
+++ b/src/vla_sim/objectives/open_gripper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+