EncountersState changing Human approval Reversible
modify_encounter
Changes encounter composition, reinforcement timing, spawn position, hazard, or difficulty target without directly increasing enemy health.
Input schema
{
"type": "object",
"properties": {
"encounter_id": {
"type": "string",
"description": "Encounter to modify.",
"maxLength": 96
},
"add_enemy_archetype_id": {
"type": "string",
"description": "Optional archetype to add to the opening composition.",
"maxLength": 96
},
"add_reinforcement_archetype_id": {
"type": "string",
"description": "Optional archetype to add as a delayed reinforcement.",
"maxLength": 96
},
"reinforcement_delay": {
"type": "number",
"description": "Turn when the added reinforcement enters.",
"minimum": 1,
"maximum": 20
},
"remove_enemy_id": {
"type": "string",
"description": "Optional existing enemy instance to remove.",
"maxLength": 96
},
"spawn_position": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "Horizontal spawn position from 0 to 100.",
"minimum": 0,
"maximum": 100
},
"y": {
"type": "number",
"description": "Vertical spawn position from 0 to 100.",
"minimum": 0,
"maximum": 100
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"difficulty_target": {
"type": "number",
"description": "Target difficulty from 0 to 1.",
"minimum": 0,
"maximum": 1
},
"hazard": {
"type": "string",
"description": "Optional environmental hazard.",
"maxLength": 160
},
"reason": {
"type": "string",
"description": "Why this change is needed.",
"maxLength": 500
}
},
"required": [
"encounter_id",
"reason"
],
"additionalProperties": false
}Example input
{
"encounter_id": "enc-gallery",
"add_reinforcement_archetype_id": "arch-gravebound",
"reinforcement_delay": 4,
"spawn_position": {
"x": 68,
"y": 32
},
"difficulty_target": 0.65,
"reason": "Apply the closest measured single-change calibration to the requested pressure target."
}Output
Applied encounter delta.
Mutation examples are reviewed through the approval workflow in the laboratory.
WebMCP lifecycle
FORGE registers this capability with document.modelContext.registerTool(), validates input in the shared service layer, records the call, and unregisters it with an AbortSignal when the page lifecycle ends.