Tool tree
gradeNot graded
report_civic_issueAction
Prepare a civic issue report when a user wants to report a pothole, road damage, broken streetlight, blocked sidewalk, illegal dumping, flooding, fallen tree, traffic signal problem, graffiti, or another public issue. This creates only a draft in Spotigo; it never contacts a government authority and still requires human confirmation before submission.
View tool JSON
{
"name": "report_civic_issue",
"kind": "act",
"impl": "imperative",
"description": "Prepare a civic issue report when a user wants to report a pothole, road damage, broken streetlight, blocked sidewalk, illegal dumping, flooding, fallen tree, traffic signal problem, graffiti, or another public issue. This creates only a draft in Spotigo; it never contacts a government authority and still requires human confirmation before submission.",
"inputSchema": {
"type": "object",
"properties": {
"issue_type": {
"type": "string",
"enum": [
"pothole",
"streetlight",
"sidewalk",
"signal",
"graffiti",
"trash",
"tree",
"flooding",
"other"
]
},
"description": {
"type": "string"
},
"location": {
"type": "string"
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"photo_filename": {
"type": "string"
},
"photo_size_bytes": {
"type": "number"
}
},
"required": [
"issue_type",
"description"
]
}
}describe_issue_accessiblyAnswer
Create a structured civic issue report draft from a plain-language description. Attach optional photo file metadata when the person selected a photo. Does not submit anything — it only builds a draft for review.
View tool JSON
{
"name": "describe_issue_accessibly",
"kind": "answer",
"impl": "imperative",
"description": "Create a structured civic issue report draft from a plain-language description. Attach optional photo file metadata when the person selected a photo. Does not submit anything — it only builds a draft for review.",
"inputSchema": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"pothole",
"streetlight",
"sidewalk",
"signal",
"graffiti",
"trash",
"tree",
"flooding",
"other"
],
"description": "The type of issue. Pick the closest match from the enum."
},
"description": {
"type": "string",
"description": "Plain-language description of the issue, in the user's own words where possible."
},
"location_text": {
"type": "string",
"description": "Human-readable location, e.g. 'corner of 5th and Main' or 'in front of the library'."
},
"lat": {
"type": "number",
"description": "Latitude, if known (e.g. from device GPS)."
},
"lng": {
"type": "number",
"description": "Longitude, if known (e.g. from device GPS)."
},
"photo_filename": {
"type": "string",
"description": "Name of an optional photo selected by the human."
},
"photo_size_bytes": {
"type": "number",
"description": "Byte size of the optional photo selected by the human."
}
},
"required": [
"category",
"description"
]
}
}acknowledge_safety_guidanceAction
Record that the human has heard the urgent safety guidance for a safety-critical draft. Only applies to drafts classified as critical. The human must still explicitly confirm submission afterward.
View tool JSON
{
"name": "acknowledge_safety_guidance",
"kind": "act",
"impl": "imperative",
"description": "Record that the human has heard the urgent safety guidance for a safety-critical draft. Only applies to drafts classified as critical. The human must still explicitly confirm submission afterward.",
"inputSchema": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
},
"acknowledge": {
"type": "boolean",
"description": "Must be explicitly true."
}
},
"required": [
"draft_id",
"acknowledge"
]
}
}check_duplicate_reportsAnswer
Check whether an issue near a given location and category has already been reported recently, to avoid filing a duplicate. Pass a draft_id to reuse its location/category, or pass lat/lng/category directly. Returns duplicate_assessment as one of three structured values an agent can reason about: "NO_NEARBY_REPORTS" (nothing found — safe to proceed), "EXISTING_MATCHING_REPORT" (a report within 25m already covers this, likely the same physical issue), or "POSSIBLE_DUPLICATE" (something nearby but not close enough to be certain). This tool never blocks filing on its own — it only informs the human/agent.
View tool JSON
{
"name": "check_duplicate_reports",
"kind": "answer",
"impl": "imperative",
"description": "Check whether an issue near a given location and category has already been reported recently, to avoid filing a duplicate. Pass a draft_id to reuse its location/category, or pass lat/lng/category directly. Returns duplicate_assessment as one of three structured values an agent can reason about: \"NO_NEARBY_REPORTS\" (nothing found — safe to proceed), \"EXISTING_MATCHING_REPORT\" (a report within 25m already covers this, likely the same physical issue), or \"POSSIBLE_DUPLICATE\" (something nearby but not close enough to be certain). This tool never blocks filing on its own — it only informs the human/agent.",
"inputSchema": {
"type": "object",
"properties": {
"draft_id": {
"type": "string",
"description": "A draft id from describe_issue_accessibly."
},
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"category": {
"type": "string",
"enum": [
"pothole",
"streetlight",
"sidewalk",
"signal",
"graffiti",
"trash",
"tree",
"flooding",
"other"
]
},
"radius_meters": {
"type": "number",
"description": "Search radius in meters. Defaults to 250."
}
}
}
}read_report_summaryAnswer
Produce a plain-language, screen-reader-friendly readback of a draft report exactly as it will be submitted. ALWAYS call this and read it back to the user before calling confirm_submission — this is the accessible equivalent of 'reviewing your order before checkout'.
View tool JSON
{
"name": "read_report_summary",
"kind": "answer",
"impl": "imperative",
"description": "Produce a plain-language, screen-reader-friendly readback of a draft report exactly as it will be submitted. ALWAYS call this and read it back to the user before calling confirm_submission — this is the accessible equivalent of 'reviewing your order before checkout'.",
"inputSchema": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
}
},
"required": [
"draft_id"
]
}
}confirm_submissionAction
Record the human's explicit confirmation that a draft report is accurate and ready to submit. This tool requires confirm=true and must be called only after the human has heard or read the summary from read_report_summary and agreed. submit_report will refuse to run without this.
View tool JSON
{
"name": "confirm_submission",
"kind": "act",
"impl": "imperative",
"description": "Record the human's explicit confirmation that a draft report is accurate and ready to submit. This tool requires confirm=true and must be called only after the human has heard or read the summary from read_report_summary and agreed. submit_report will refuse to run without this.",
"inputSchema": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "Must be true. Represents the human's explicit yes."
}
},
"required": [
"draft_id",
"confirm"
]
}
}submit_reportSensitive Action
Submit a confirmed draft to the city. Will throw an error if the draft has not been confirmed via confirm_submission first — this is a hard gate, not a suggestion.
View tool JSON
{
"name": "submit_report",
"kind": "transact",
"impl": "imperative",
"description": "Submit a confirmed draft to the city. Will throw an error if the draft has not been confirmed via confirm_submission first — this is a hard gate, not a suggestion.",
"inputSchema": {
"type": "object",
"properties": {
"draft_id": {
"type": "string"
}
},
"required": [
"draft_id"
]
}
}undo_last_actionAction
Reverse the most recent mutating action taken in this session (e.g. retract a just-submitted report). Operates on a real action history, not a guess — it will say clearly what was undone, or that there is nothing to undo.
View tool JSON
{
"name": "undo_last_action",
"kind": "act",
"impl": "imperative",
"description": "Reverse the most recent mutating action taken in this session (e.g. retract a just-submitted report). Operates on a real action history, not a guess — it will say clearly what was undone, or that there is nothing to undo.",
"inputSchema": {
"type": "object",
"properties": {}
}
}list_nearby_reportsAnswer
Browse all civic issue reports near a location, optionally filtered by category. Use this to help a user see what's already been reported in their area, independent of filing a new one.
View tool JSON
{
"name": "list_nearby_reports",
"kind": "answer",
"impl": "imperative",
"description": "Browse all civic issue reports near a location, optionally filtered by category. Use this to help a user see what's already been reported in their area, independent of filing a new one.",
"inputSchema": {
"type": "object",
"properties": {
"lat": {
"type": "number"
},
"lng": {
"type": "number"
},
"radius_meters": {
"type": "number"
},
"category": {
"type": "string",
"enum": [
"pothole",
"streetlight",
"sidewalk",
"signal",
"graffiti",
"trash",
"tree",
"flooding",
"other"
]
}
},
"required": [
"lat",
"lng"
]
}
}get_report_statusAnswer
Look up the current status of a previously filed report by its report id.
View tool JSON
{
"name": "get_report_status",
"kind": "answer",
"impl": "imperative",
"description": "Look up the current status of a previously filed report by its report id.",
"inputSchema": {
"type": "object",
"properties": {
"report_id": {
"type": "string"
}
},
"required": [
"report_id"
]
}
}