{"name":"autonomy.md","version":"1.0","description":"One skill file any agent can read before it plans a mission for a ground robot, drone, arm, boat or humanoid, with your own limits written in: speed, distance from people, geofence, battery reserve, lost communication and approvals. Read-only tools check a mission against those limits over HTTP and MCP. Not a safety system; every number comes from your request.","skill":{"url":"https://autonomy.md/autonomy.md","with_settings":"https://autonomy.md/autonomy.md?preset=cautious"},"settings":"https://autonomy.md/api/v1/settings","usage":"GET /api/v1/<tool> with query parameters (arrays and objects as URL-encoded JSON), or POST /api/v1/<tool> with a JSON body (64 KB at most). No key. CORS open. Nothing is stored.","tools":[{"name":"mission_check","title":"Check a mission against your envelope","description":"Checks a planned route against limits you send: points or legs outside the geofence or inside keep-out zones, clearance to the fence, keep-outs and people, speed, acceleration, altitude, payload, mission time, operating hours, wind, battery reserve at the end and on a direct return from every waypoint, and whether communication-loss behavior and an emergency stop are set. Estimates time and energy from your own numbers. Lists what it can't check. Not a safety system; it approves nothing.","get":"https://autonomy.md/api/v1/mission_check","post":"https://autonomy.md/api/v1/mission_check","example_body":{"frame":"local","robot_type":"aerial","waypoints":[{"x":10,"y":10,"alt_m":0,"label":"launch"},{"x":10,"y":10,"alt_m":30,"speed_mps":2},{"x":180,"y":20,"alt_m":30},{"x":180,"y":60,"alt_m":30},{"x":20,"y":60,"alt_m":30},{"x":20,"y":110,"alt_m":30},{"x":180,"y":110,"alt_m":45,"hold_s":30}],"cruise_speed_mps":6,"accel_mps2":2,"return_home":true,"geofence":[{"x":0,"y":0},{"x":200,"y":0},{"x":200,"y":150},{"x":0,"y":150}],"keep_outs":[{"label":"roof","points":[{"x":90,"y":95},{"x":120,"y":95},{"x":120,"y":125},{"x":90,"y":125}]},{"label":"mast","center":{"x":150,"y":40},"radius_m":8}],"people":[{"x":60,"y":140}],"buffer_m":5,"max_speed_mps":8,"max_altitude_m":40,"min_people_distance_m":20,"payload_kg":0.5,"max_payload_kg":1,"max_mission_min":20,"battery_wh":90,"battery_reserve_pct":30,"power_w":350,"derate_pct":10,"wind_mps":5,"max_wind_mps":8,"comm_loss":"return","estop":"tested","simulated":true},"input":{"type":"object","properties":{"frame":{"type":"string","enum":["local","latlon"],"description":"local: x east and y north in meters. latlon: lat and lon in decimal degrees (projected around the first waypoint for zone checks)."},"robot_type":{"type":"string","enum":["ground","aerial","arm","marine","humanoid","other"],"description":"The kind of robot. Altitude checks matter most for aerial."},"waypoints":{"type":"array","description":"The route, in order: [{ x, y } or { lat, lon }, speed_mps?, alt_m?, hold_s?, label? }]. speed_mps is the speed on the leg into this point.","items":{"type":"object","description":"A waypoint","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"minItems":2,"maxItems":200},"cruise_speed_mps":{"type":"number","minimum":0.001,"maximum":300,"description":"Speed for legs whose waypoint has no speed_mps, m/s."},"accel_mps2":{"type":"number","minimum":0.001,"maximum":100,"description":"Planned acceleration and braking, m/s^2. If set, each leg starts and ends at rest (a conservative time estimate)."},"home":{"type":"object","description":"Home or launch point, for return checks. Defaults to the first waypoint.","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"return_home":{"type":"boolean","default":false,"description":"Add a straight leg from the last waypoint back home. Default false."},"geofence":{"type":"array","description":"The fence polygon the robot must stay inside: [{ x, y }] or [{ lat, lon }], 3 to 200 points.","items":{"type":"object","description":"A fence vertex","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"maxItems":200},"keep_outs":{"type":"array","description":"Zones to stay out of: [{ label?, points: [...] }] for a polygon or [{ label?, center: {...}, radius_m }] for a circle. Up to 50.","items":{"type":"object"},"maxItems":50},"people":{"type":"array","description":"Known positions of people or occupied spots: [{ x, y }] or [{ lat, lon }]. Up to 100.","items":{"type":"object","description":"A person","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"maxItems":100},"buffer_m":{"type":"number","minimum":0,"maximum":10000,"default":0,"description":"Minimum clearance from the fence edge and from keep-outs, meters. Default 0."},"max_speed_mps":{"type":"number","minimum":0,"maximum":300,"description":"Your speed limit, m/s."},"max_accel_mps2":{"type":"number","minimum":0,"maximum":100,"description":"Your acceleration limit, m/s^2."},"max_altitude_m":{"type":"number","minimum":0,"maximum":20000,"description":"Your altitude limit above home, meters (aerial)."},"min_people_distance_m":{"type":"number","minimum":0,"maximum":10000,"description":"Minimum distance from any listed person, meters."},"payload_kg":{"type":"number","minimum":0,"maximum":100000,"description":"Planned payload, kg."},"max_payload_kg":{"type":"number","minimum":0,"maximum":100000,"description":"Your payload limit, kg."},"max_mission_min":{"type":"number","minimum":0,"maximum":100000,"description":"Your mission time limit, minutes."},"battery_wh":{"type":"number","minimum":0.001,"maximum":10000000,"description":"Usable battery capacity, Wh, from the robot's own documentation or measurements."},"start_charge_pct":{"type":"number","minimum":0,"maximum":100,"default":100,"description":"Charge at the start, %. Default 100."},"battery_reserve_pct":{"type":"number","minimum":0,"maximum":100,"description":"Reserve to keep, % of full capacity."},"wh_per_km":{"type":"number","minimum":0,"maximum":1000000,"description":"Energy per km traveled, Wh/km (your own measurement)."},"power_w":{"type":"number","minimum":0,"maximum":10000000,"description":"Power drawn over time, W, including while holding (your own measurement; for aerial, hover or cruise power)."},"derate_pct":{"type":"number","minimum":0,"maximum":500,"default":0,"description":"Extra energy margin added to every estimate, %. Default 0."},"wind_mps":{"type":"number","minimum":0,"maximum":200,"description":"Expected wind, m/s, from your own source."},"max_wind_mps":{"type":"number","minimum":0,"maximum":200,"description":"Your wind limit, m/s."},"start_hour":{"type":"number","minimum":0,"maximum":24,"description":"Planned start, local hour (decimal, 14.5 = 14:30)."},"window_start_hour":{"type":"number","minimum":0,"maximum":24,"description":"Operating hours start, local hour."},"window_end_hour":{"type":"number","minimum":0,"maximum":24,"description":"Operating hours end, local hour. May be earlier than the start for a window past midnight."},"comm_loss":{"type":"string","enum":["stop","hold","return","land","none"],"description":"What the robot does when communication is lost."},"estop":{"type":"string","enum":["tested","present","none"],"description":"Emergency stop: tested this session, present but not tested, or none."},"simulated":{"type":"boolean","description":"Whether this exact mission ran in simulation first."},"include_geometry":{"type":"boolean","default":false,"description":"Also return every point in local meters, for plotting. Default false."}},"required":["frame","waypoints"]}},{"name":"geo_tools","title":"Geofence geometry","description":"Point in polygon (with distance to the edge), polygon area and perimeter (with a self-crossing check), and distance and bearing between two points. Works in a local metric frame or in latitude and longitude (haversine and spherical-excess formulas). Geometry only: no maps, no airspace data.","get":"https://autonomy.md/api/v1/geo_tools","post":"https://autonomy.md/api/v1/geo_tools","example_body":{"operation":"point_in_polygon","frame":"latlon","point":{"lat":10.0004,"lon":20.0004},"polygon":[{"lat":10,"lon":20},{"lat":10,"lon":20.001},{"lat":10.001,"lon":20.001},{"lat":10.001,"lon":20}]},"input":{"type":"object","properties":{"operation":{"type":"string","enum":["point_in_polygon","polygon_metrics","distance"],"description":"What to compute."},"frame":{"type":"string","enum":["local","latlon"],"description":"local: x east and y north in meters. latlon: decimal degrees."},"point":{"type":"object","description":"For point_in_polygon: { x, y } or { lat, lon }.","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"polygon":{"type":"array","description":"For point_in_polygon and polygon_metrics: 3 to 200 points.","items":{"type":"object","description":"A vertex","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"maxItems":200},"a":{"type":"object","description":"For distance: the start point.","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}},"b":{"type":"object","description":"For distance: the end point.","properties":{"x":{"type":"number"},"y":{"type":"number"},"lat":{"type":"number"},"lon":{"type":"number"}}}},"required":["operation","frame"]}},{"name":"battery_plan","title":"Battery plan with reserve and return","description":"Estimates the energy a trip needs from your distance, speed and consumption (Wh per km, power in W, or both), compares it with your battery and reserve, and gives the turn-back distance and endurance that keep the reserve. Your own numbers only; wind, cold, aging and payload are covered only by the derate you set.","get":"https://autonomy.md/api/v1/battery_plan","post":"https://autonomy.md/api/v1/battery_plan","example_get":"https://autonomy.md/api/v1/battery_plan?distance_km=1.2&speed_mps=8&battery_wh=90&power_w=350&reserve_pct=30&round_trip=true&hold_min=3&derate_pct=15","example_body":{"distance_km":1.2,"speed_mps":8,"battery_wh":90,"power_w":350,"reserve_pct":30,"round_trip":true,"hold_min":3,"derate_pct":15},"input":{"type":"object","properties":{"distance_km":{"type":"number","minimum":0,"maximum":100000,"description":"Trip distance, km. One way when round_trip is true."},"speed_mps":{"type":"number","minimum":0.001,"maximum":300,"description":"Average speed, m/s."},"battery_wh":{"type":"number","minimum":0.001,"maximum":10000000,"description":"Usable battery capacity, Wh."},"wh_per_km":{"type":"number","minimum":0,"maximum":1000000,"description":"Energy per km, Wh/km. Give this, power_w, or both."},"power_w":{"type":"number","minimum":0,"maximum":10000000,"description":"Power drawn over time while moving, W."},"start_pct":{"type":"number","minimum":0,"maximum":100,"default":100,"description":"Charge at the start, %. Default 100."},"reserve_pct":{"type":"number","minimum":0,"maximum":100,"default":25,"description":"Reserve to keep, % of full capacity. Default 25."},"round_trip":{"type":"boolean","default":true,"description":"The robot comes back the same distance. Default true."},"hold_min":{"type":"number","minimum":0,"maximum":100000,"default":0,"description":"Time spent working or holding at the site, minutes. Default 0."},"hold_power_w":{"type":"number","minimum":0,"maximum":10000000,"description":"Power while holding, W. Defaults to power_w."},"derate_pct":{"type":"number","minimum":0,"maximum":500,"default":0,"description":"Extra margin added to all consumption, %, for wind, cold, aging or payload. Default 0."}},"required":["distance_km","speed_mps","battery_wh"]}},{"name":"stopping_distance","title":"Stopping distance","description":"Distance to stop from a speed, given your reaction time (detection, compute and communication delay) and braking deceleration, with the formula. Optionally compares it with the distance available and gives the highest speed that stops in time. Physics only; real braking depends on the surface, load, slope and the robot.","get":"https://autonomy.md/api/v1/stopping_distance","post":"https://autonomy.md/api/v1/stopping_distance","example_get":"https://autonomy.md/api/v1/stopping_distance?speed=1.5&speed_unit=mps&decel_mps2=1&reaction_s=0.4&buffer_m=0.5&available_m=2.5","example_body":{"speed":1.5,"speed_unit":"mps","decel_mps2":1,"reaction_s":0.4,"buffer_m":0.5,"available_m":2.5},"input":{"type":"object","properties":{"speed":{"type":"number","minimum":0,"maximum":1000,"description":"Speed, in speed_unit."},"speed_unit":{"type":"string","enum":["mps","kmh","mph","knots"],"default":"mps","description":"Unit of speed. Default mps (m/s)."},"decel_mps2":{"type":"number","minimum":0.001,"maximum":100,"description":"Braking deceleration, m/s^2 (your own measured or documented figure)."},"reaction_s":{"type":"number","minimum":0,"maximum":60,"description":"Time before braking starts, seconds: sensing, compute and communication delay."},"buffer_m":{"type":"number","minimum":0,"maximum":10000,"default":0,"description":"Extra distance to keep after stopping, m. Default 0."},"available_m":{"type":"number","minimum":0,"maximum":1000000,"description":"Distance available: to the nearest person or obstacle, or reliable sensing range, m. Optional."}},"required":["speed","decel_mps2","reaction_s"]}},{"name":"build_settings","title":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of AUTONOMY.md. Every setting is a number or a fixed choice; the catalog is at https://autonomy.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","get":"https://autonomy.md/api/v1/build_settings","post":"https://autonomy.md/api/v1/build_settings","example_get":"https://autonomy.md/api/v1/build_settings?preset=cautious","example_body":{"preset":"cautious"},"input":{"type":"object","properties":{"preset":{"type":"string","enum":["core","cautious","indoor_ground","outdoor_aerial","arm_cell","marine","humanoid"],"description":"Starting point: core, cautious, indoor_ground, outdoor_aerial, arm_cell, marine, humanoid. Applied first; each setting overrides it."},"robot_type":{"type":"string","enum":["ground","aerial","arm","marine","humanoid","other"],"description":"Robot type: ground (Ground robot), aerial (Aerial (drone)), arm (Robot arm), marine (Marine (surface or underwater)), humanoid (Humanoid or legged), other (Other). Default ground."},"max_mission_min":{"type":"integer","minimum":1,"maximum":1440,"description":"Longest mission (minutes). Optional; unset clears it. Out-of-range values are clamped."},"start_hour":{"type":"integer","minimum":0,"maximum":23,"description":"Operating hours start (h). Optional; unset clears it. Out-of-range values are clamped."},"end_hour":{"type":"integer","minimum":1,"maximum":24,"description":"Operating hours end (h). Optional; unset clears it. Out-of-range values are clamped."},"night_ops":{"type":"string","enum":["never","ask","allowed","unset"],"description":"Night operations: never (Never), ask (Ask first), allowed (Allowed, with lighting and a human watching). Optional; unset clears it."},"max_speed_mps":{"type":"number","minimum":0.05,"maximum":50,"description":"Top speed (m/s). Default 1. Out-of-range values are clamped."},"max_accel_mps2":{"type":"number","minimum":0.05,"maximum":20,"description":"Top acceleration (m/s^2). Optional; unset clears it. Out-of-range values are clamped."},"max_altitude_m":{"type":"integer","minimum":1,"maximum":500,"description":"Top altitude (aerial) (m). Optional; unset clears it. Out-of-range values are clamped."},"max_payload_kg":{"type":"number","minimum":0,"maximum":1000,"description":"Top payload (kg). Optional; unset clears it. Out-of-range values are clamped."},"min_people_m":{"type":"number","minimum":0.5,"maximum":500,"description":"Distance from people (m). Default 2. Out-of-range values are clamped."},"near_people":{"type":"string","enum":["avoid","ask","reduced","unset"],"description":"Working near people: avoid (Never), ask (Ask first), reduced (Allowed at reduced speed, with a human watching). Optional; unset clears it."},"battery_reserve_pct":{"type":"integer","minimum":5,"maximum":80,"description":"Battery reserve (%). Default 25. Out-of-range values are clamped."},"max_wind_mps":{"type":"number","minimum":0,"maximum":30,"description":"Top wind (outdoors) (m/s). Optional; unset clears it. Out-of-range values are clamped."},"comm_loss":{"type":"string","enum":["stop","hold","return","land"],"description":"On lost communication: stop (Stop in place), hold (Hold position), return (Return home), land (Land (aerial)). Default stop."},"estop":{"type":"string","enum":["required","tested"],"description":"Emergency stop: required (Required and in reach), tested (Required, and tested before each session). Default required."},"simulation":{"type":"string","enum":["first","staged","unset"],"description":"Simulation first: first (Simulate new or changed missions), staged (Simulate, then a short supervised run, then the full mission). Optional; unset clears it."},"approve_start":{"type":"string","enum":["every","changed"],"description":"Human yes to start: every (Before every mission), changed (Before new or changed missions). Default every."},"approve_manipulation":{"type":"string","enum":["every","new","none","unset"],"description":"Manipulation: every (Ask before every task), new (Ask before new objects or tasks), none (No manipulation). Optional; unset clears it."},"format":{"type":"string","enum":["section","skill"],"description":"section (default): the settings sections only; skill: the whole skill file too."}}}}],"mcp":{"url":"https://autonomy.md/mcp","transport":"streamable-http, stateless, JSON responses, no auth","add":"claude mcp add --transport http autonomy https://autonomy.md/mcp","tools":["mission_check","geo_tools","battery_plan","stopping_distance","build_settings"],"prompts":["autonomy"],"resources":["https://autonomy.md/autonomy.md","https://autonomy.md/api/v1/settings"]},"openapi":"https://autonomy.md/openapi.json","llms_txt":"https://autonomy.md/llms.txt","manifest":"https://autonomy.md/.well-known/autonomy.json","rule":"Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","never":["fetches or shows third-party data, prices or rates","stores what you send","approves, enforces or certifies anything","never controls or moves a robot, is not a safety system, is not certified for any use, and must never be relied on to protect people or property"],"disclaimer":"Use at your own risk. autonomy.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Robots can injure people and damage property. Nothing here is safety, engineering, legal or regulatory advice. autonomy.md never controls or moves a robot, is not a safety system, is not certified for any use, and must never be relied on to protect people or property. Check everything yourself before you act on it.","terms":"https://autonomy.md/terms","contact":"proofmdorg [ at ] gmail.com"}