1.3 / 30
What changed in the harness
Selection accuracy 97→95, token cost up 4%, unconfirmed writes 4%→4%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
23.6 / 30
03Economics
16.3 / 20
04Discoverability
10.9 / 20
Highest-impact fix
Estimated gain +29 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
14 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
get_mission |
no_return_description |
Get the full details of a drone mission and return all its waypoints, generation settings, and area polygon. Use list_missions to find available mission IDs. |
create_mission |
no_return_description |
Create a new drone mission manually with custom waypoints and return the saved mission with its ID. Supported types: waypoint, grid, orbit, spiral, panorama, corridor. For automated survey generation with optimal waypoint placement, use generate_grid_survey, generate_orbit_mission, or other generate_* tools instead. |
update_mission |
params_unexplained no_return_description |
Update an existing mission and return the updated mission. Fetches the current version and merges your changes — omitted fields remain unchanged, so pass only the fields you want to change: name (new mission name), type (mission type: waypoint, grid, orbit, spiral, panorama, or corridor), waypoints (replacement waypoint array), tags (labels for the mission), or drone_profile_id (UUID of the drone profile to associate). Use list_missions to find mission IDs. |
delete_mission |
no_return_description |
Permanently delete a mission and all its waypoints and return confirmation once the deletion succeeds. This action cannot be undone. Use list_missions to find mission IDs. |
duplicate_mission |
no_return_description |
Create a full copy of an existing mission including all waypoints and settings and return the new mission with its unique ID. Use list_missions to find mission IDs. |
share_mission |
no_return_description |
Generate a public share link for a mission and return the share URL. Anyone with the link can view the mission details and waypoints. Use list_missions to find mission IDs. |
import_litchi |
no_return_description |
Import a Litchi CSV file, create a new waypoint mission from it, and return the saved mission with its ID. Parses the standard Litchi CSV format (latitude, longitude, altitude, heading, gimbal pitch, actions). Automatically saves the imported mission to your account. |
create_drone |
params_unexplained no_return_description |
Create a new drone profile with manufacturer and model information and return the created profile with its ID. Optionally include camera specs and flight characteristics, such as max_speed_mph (the drone's maximum speed in miles per hour, used for mission flight time and coverage estimates). Created profiles can be linked to missions for flight time and coverage estimates. |
update_drone |
params_unexplained no_return_description |
Update an existing drone profile and return the updated profile. Pass only the fields you want to change — omitted fields remain unchanged. Provide model (model name, e.g., Mavic 3), camera_model (camera model name, e.g., Hasselblad L2D-20c), or max_speed_mph (the drone's maximum speed in miles per hour). Use list_drones to find drone IDs. |
delete_drone |
no_return_description |
Permanently delete a drone profile and return confirmation once the deletion succeeds. This action cannot be undone. Fails if the drone is currently referenced by any missions — unlink it from missions first. |
generate_orbit_mission |
params_unexplained |
Generate an orbit/POI mission that flies a circle around a point of interest. All waypoints face the center for consistent framing. Automatically saves the mission to your account — returns the saved mission with ID and waypoint count. Pass drone_profile_id (UUID of the drone profile to associate) to link the mission to a specific drone profile. |
generate_panorama_mission |
params_unexplained |
Generate a panorama capture mission at a fixed hover location. Creates a grid of heading/pitch combinations for photo stitching. Automatically saves the mission to your account — returns the saved mission with ID and photo count. Pass drone_profile_id (UUID of the drone profile to associate) to link the mission to a specific drone profile. |
generate_spiral_mission |
params_unexplained |
Generate a spiral survey mission expanding outward or contracting inward from a center point. Useful for search patterns or radial coverage. Automatically saves the mission to your account — returns the saved mission with ID and waypoint count. Pass drone_profile_id (UUID of the drone profile to associate) to link the mission to a specific drone profile. |
generate_corridor_mission |
params_unexplained no_return_description |
Generate a linear corridor mapping mission along a path (roads, pipelines, power lines). Creates parallel flight passes with camera-based spacing for full coverage. Automatically saves the mission to your account and returns the saved mission with ID and waypoint count. Call list_cameras first to see available camera_model values. Pass drone_profile_id (UUID of the drone profile to associate) to link the mission to a specific drone profile. |
Selection evidence
Confusable tool pairs.
6 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_active_tfrs |
get_notams |
medium | Both return FAA airspace notices near a lat/lng; a task like 'check for flight restrictions near this location' could resolve to either since TFRs and NOTAMs are overlapping categories. |
check_airspace |
check_live_traffic |
medium | A task like 'check traffic in my flight area' is ambiguous: check_live_traffic returns ADS-B aircraft, but check_airspace also summarizes nearby hazards and restrictions and is the recommended full assessment. |
generate_grid_survey |
generate_spiral_mission |
medium | Both are automated survey generators sharing the mission/survey vocabulary; 'generate a survey of this area' could lead to either, with spiral being the less-obvious choice despite its 'survey' naming. |
generate_orbit_mission |
generate_spiral_mission |
medium | Both create concentric flight paths centered on a point with cw/ccw direction options; a task like 'fly a circular search pattern around the center' could plausibly pick either. |
generate_orbit_mission |
generate_panorama_mission |
medium | Both build 360-degree capture around a center point; a task like 'take a full 360 capture of this point' could resolve to orbit (circle, facing center) or panorama (fixed-hover heading grid). |
create_mission |
duplicate_mission |
low | A task like 'create a new mission based on my existing one' could resolve to duplicate_mission (copies all waypoints) instead of create_mission, though the descriptions mostly disambiguate them. |
Compare the field