{
  "service": "open_hands",
  "displayName": "OpenHands",
  "categories": [
    "AI",
    "Developer Tools"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "openhands_api_key",
      "description": "OpenHands Cloud API key sent with the Authorization Bearer header. Create it from Settings > API Keys in OpenHands Cloud: https://app.all-hands.dev/settings/api-keys."
    }
  ],
  "homepageUrl": "https://www.all-hands.dev",
  "actions": [
    {
      "id": "open_hands.get_conversation",
      "service": "open_hands",
      "name": "get_conversation",
      "description": "Get an OpenHands Cloud conversation by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "conversation_id": {
            "type": "string",
            "description": "OpenHands conversation ID.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "required": [
          "conversation_id"
        ],
        "description": "Input parameters for getting an OpenHands conversation."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "conversation": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "description": "OpenHands conversation ID."
                  },
                  "sandbox_id": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "description": "Sandbox ID for the conversation."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "selected_repository": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "description": "Repository selected for the conversation."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "selected_branch": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "description": "Branch selected for the conversation."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "title": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "description": "Conversation title."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "sandbox_status": {
                    "type": "string",
                    "enum": [
                      "STARTING",
                      "RUNNING",
                      "PAUSED",
                      "ERROR",
                      "MISSING"
                    ],
                    "description": "OpenHands sandbox status."
                  },
                  "execution_status": {
                    "anyOf": [
                      {
                        "type": "string",
                        "enum": [
                          "idle",
                          "running",
                          "paused",
                          "waiting_for_confirmation",
                          "finished",
                          "error",
                          "stuck",
                          "deleting"
                        ],
                        "description": "OpenHands agent execution status when the sandbox is running."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "conversation_url": {
                    "anyOf": [
                      {
                        "type": "string",
                        "minLength": 1,
                        "description": "URL where the conversation can be opened."
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "created_at": {
                    "type": "string",
                    "description": "Timestamp when the conversation was created.",
                    "format": "date-time"
                  },
                  "updated_at": {
                    "type": "string",
                    "description": "Timestamp when the conversation was last updated.",
                    "format": "date-time"
                  }
                },
                "additionalProperties": true,
                "required": [
                  "id",
                  "sandbox_id",
                  "selected_repository",
                  "selected_branch",
                  "title",
                  "sandbox_status",
                  "execution_status",
                  "conversation_url",
                  "created_at",
                  "updated_at"
                ],
                "description": "OpenHands app conversation."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Raw OpenHands response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "conversation",
          "raw"
        ],
        "description": "OpenHands conversation response."
      }
    },
    {
      "id": "open_hands.get_start_task",
      "service": "open_hands",
      "name": "get_start_task",
      "description": "Get the status of an OpenHands Cloud conversation start task.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "task_id": {
            "type": "string",
            "description": "Start task ID returned by start_conversation.",
            "format": "uuid"
          }
        },
        "additionalProperties": false,
        "required": [
          "task_id"
        ],
        "description": "Input parameters for getting an OpenHands start task."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "task": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "description": "Start task ID returned by OpenHands."
              },
              "status": {
                "type": "string",
                "enum": [
                  "WORKING",
                  "WAITING_FOR_SANDBOX",
                  "PREPARING_REPOSITORY",
                  "RUNNING_SETUP_SCRIPT",
                  "SETTING_UP_GIT_HOOKS",
                  "SETTING_UP_SKILLS",
                  "STARTING_CONVERSATION",
                  "READY",
                  "ERROR"
                ],
                "description": "OpenHands start task status."
              },
              "detail": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Additional start task detail when OpenHands returned one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "app_conversation_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Conversation ID once the start task reaches READY."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sandbox_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Sandbox ID once the start task has a sandbox."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "agent_server_url": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Agent server URL when OpenHands returned one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "description": "Timestamp when the start task was created.",
                "format": "date-time"
              },
              "updated_at": {
                "type": "string",
                "description": "Timestamp when the start task was last updated.",
                "format": "date-time"
              }
            },
            "additionalProperties": true,
            "required": [
              "id",
              "status",
              "detail",
              "app_conversation_id",
              "sandbox_id",
              "agent_server_url",
              "created_at",
              "updated_at"
            ],
            "description": "OpenHands conversation start task."
          },
          "conversation_url": {
            "anyOf": [
              {
                "type": "string",
                "description": "OpenHands conversation URL when the conversation ID is available.",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Raw OpenHands response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "task",
          "conversation_url",
          "raw"
        ],
        "description": "OpenHands start task response."
      },
      "asyncLifecycle": {
        "startActionId": "open_hands.start_conversation",
        "statusActionId": "open_hands.get_start_task"
      }
    },
    {
      "id": "open_hands.list_conversations",
      "service": "open_hands",
      "name": "list_conversations",
      "description": "List OpenHands Cloud conversations with optional filters.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "title__contains": {
            "type": "string",
            "minLength": 1,
            "description": "Only return conversations whose title contains this text."
          },
          "created_at__gte": {
            "type": "string",
            "description": "Only return conversations created at or after this time.",
            "format": "date-time"
          },
          "created_at__lt": {
            "type": "string",
            "description": "Only return conversations created before this time.",
            "format": "date-time"
          },
          "updated_at__gte": {
            "type": "string",
            "description": "Only return conversations updated at or after this time.",
            "format": "date-time"
          },
          "updated_at__lt": {
            "type": "string",
            "description": "Only return conversations updated before this time.",
            "format": "date-time"
          },
          "sandbox_id__eq": {
            "type": "string",
            "minLength": 1,
            "description": "Only return conversations for this exact sandbox ID."
          },
          "page_id": {
            "type": "string",
            "minLength": 1,
            "description": "Next page ID returned by a previous list response."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "description": "Maximum number of conversations to return."
          },
          "include_sub_conversations": {
            "type": "boolean",
            "description": "Whether to include sub-conversations."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for listing OpenHands conversations."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "description": "OpenHands conversation ID."
                },
                "sandbox_id": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "Sandbox ID for the conversation."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "selected_repository": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "Repository selected for the conversation."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "selected_branch": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "Branch selected for the conversation."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "Conversation title."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "sandbox_status": {
                  "type": "string",
                  "enum": [
                    "STARTING",
                    "RUNNING",
                    "PAUSED",
                    "ERROR",
                    "MISSING"
                  ],
                  "description": "OpenHands sandbox status."
                },
                "execution_status": {
                  "anyOf": [
                    {
                      "type": "string",
                      "enum": [
                        "idle",
                        "running",
                        "paused",
                        "waiting_for_confirmation",
                        "finished",
                        "error",
                        "stuck",
                        "deleting"
                      ],
                      "description": "OpenHands agent execution status when the sandbox is running."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "conversation_url": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "URL where the conversation can be opened."
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "created_at": {
                  "type": "string",
                  "description": "Timestamp when the conversation was created.",
                  "format": "date-time"
                },
                "updated_at": {
                  "type": "string",
                  "description": "Timestamp when the conversation was last updated.",
                  "format": "date-time"
                }
              },
              "additionalProperties": true,
              "required": [
                "id",
                "sandbox_id",
                "selected_repository",
                "selected_branch",
                "title",
                "sandbox_status",
                "execution_status",
                "conversation_url",
                "created_at",
                "updated_at"
              ],
              "description": "OpenHands app conversation."
            },
            "description": "OpenHands conversations on this page."
          },
          "page": {
            "type": "object",
            "properties": {
              "next_page_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Next page ID when OpenHands returned one."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "next_page_id"
            ],
            "description": "OpenHands page metadata."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Raw OpenHands response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "items",
          "page",
          "raw"
        ],
        "description": "OpenHands conversation list response."
      }
    },
    {
      "id": "open_hands.send_message",
      "service": "open_hands",
      "name": "send_message",
      "description": "Send a follow-up user message to an existing OpenHands Cloud conversation.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "conversation_id": {
            "type": "string",
            "description": "OpenHands conversation ID.",
            "format": "uuid"
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "description": "Follow-up message text to send to the conversation."
          },
          "run": {
            "type": "boolean",
            "description": "Whether OpenHands should automatically run the agent after sending."
          }
        },
        "additionalProperties": false,
        "required": [
          "conversation_id",
          "message"
        ],
        "description": "Input parameters for sending an OpenHands follow-up message."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Whether OpenHands accepted the message."
          },
          "sandbox_status": {
            "type": "string",
            "enum": [
              "STARTING",
              "RUNNING",
              "PAUSED",
              "ERROR",
              "MISSING"
            ],
            "description": "OpenHands sandbox status."
          },
          "message": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "description": "Additional response message when OpenHands returned one."
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Raw OpenHands response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "success",
          "sandbox_status",
          "message",
          "raw"
        ],
        "description": "OpenHands send message response."
      }
    },
    {
      "id": "open_hands.start_conversation",
      "service": "open_hands",
      "name": "start_conversation",
      "description": "Start an OpenHands Cloud conversation for a repository task.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "minLength": 1,
            "description": "Initial task message to send to OpenHands."
          },
          "selected_repository": {
            "type": "string",
            "minLength": 1,
            "description": "Repository name in owner/repo format."
          },
          "selected_branch": {
            "type": "string",
            "minLength": 1,
            "description": "Branch to use for the conversation."
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "description": "Optional title for the conversation."
          },
          "llm_model": {
            "type": "string",
            "minLength": 1,
            "description": "Optional OpenHands LLM model identifier."
          },
          "system_message_suffix": {
            "type": "string",
            "minLength": 1,
            "description": "Optional extra system instructions appended by OpenHands."
          },
          "run": {
            "type": "boolean",
            "description": "Whether OpenHands should run the agent after creating the message."
          }
        },
        "additionalProperties": false,
        "required": [
          "message"
        ],
        "description": "Input parameters for starting an OpenHands Cloud conversation."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "task": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1,
                "description": "Start task ID returned by OpenHands."
              },
              "status": {
                "type": "string",
                "enum": [
                  "WORKING",
                  "WAITING_FOR_SANDBOX",
                  "PREPARING_REPOSITORY",
                  "RUNNING_SETUP_SCRIPT",
                  "SETTING_UP_GIT_HOOKS",
                  "SETTING_UP_SKILLS",
                  "STARTING_CONVERSATION",
                  "READY",
                  "ERROR"
                ],
                "description": "OpenHands start task status."
              },
              "detail": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Additional start task detail when OpenHands returned one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "app_conversation_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Conversation ID once the start task reaches READY."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "sandbox_id": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Sandbox ID once the start task has a sandbox."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "agent_server_url": {
                "anyOf": [
                  {
                    "type": "string",
                    "minLength": 1,
                    "description": "Agent server URL when OpenHands returned one."
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "created_at": {
                "type": "string",
                "description": "Timestamp when the start task was created.",
                "format": "date-time"
              },
              "updated_at": {
                "type": "string",
                "description": "Timestamp when the start task was last updated.",
                "format": "date-time"
              }
            },
            "additionalProperties": true,
            "required": [
              "id",
              "status",
              "detail",
              "app_conversation_id",
              "sandbox_id",
              "agent_server_url",
              "created_at",
              "updated_at"
            ],
            "description": "OpenHands conversation start task."
          },
          "conversation_url": {
            "anyOf": [
              {
                "type": "string",
                "description": "OpenHands conversation URL when the conversation ID is available.",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Raw OpenHands response payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "task",
          "conversation_url",
          "raw"
        ],
        "description": "OpenHands start task response."
      },
      "followUpActions": [
        "open_hands.get_start_task"
      ],
      "asyncLifecycle": {
        "startActionId": "open_hands.start_conversation",
        "statusActionId": "open_hands.get_start_task"
      }
    }
  ]
}
