AI mission-editing assistant β action catalogue¶
Audience: Mission Makers driving their mission's editing with an AI (Claude) wired to the
veaf-mission-mcpMCP server.π«π·
AI_ASSISTANT_CATALOG.mdπ Technical doc (developers/integrators):
developer/mission-editing-mcp.en.md.
This page lists everything you can ask the AI to do today, in plain language. You don't need to know the technical action names: you phrase your request, the AI picks the action.
π± Living doc β this catalogue grows with every new capability added to the MCP. The "frequency" column is an estimate of usage, to be adjusted with field feedback.
Two editing levels (keep this in mind)¶
The AI can act in two places, and it changes what "survives":
- The recipe (the source
mission.yaml) β the config file the VEAF tooling builds your mission from. Editing the recipe is durable: the next rebuild starts from the updated config. Prefer this level for anything configuration-related. - The built mission (the
.miz) β direct edits to the final mission file, without a rebuild. Fast and handy for a one-off tweak, but a rebuild from the recipe will overwrite those edits.
π Safety net: before every change, the AI takes a timestamped backup of the file concerned. Nothing is overwritten without a copy. In a mission folder the copies go to
.veaf-backups/at the folder's root β not intosrc/, which the build packs, nor into your commits (the directory ignores itself) β and only the last 20 of each file are kept.
Frequency legend¶
| Icon | Estimated frequency |
|---|---|
| π₯ | Very frequent (every editing session) |
| β | Frequent |
| β½ | Occasional |
| π§ | Advanced / rare |
Complete index¶
| # | Action (in plain language) | Theme | Level | Freq. |
|---|---|---|---|---|
| 1 | List the groups and zones already present | Mission state | Built mission | π₯ |
| 2 | Inspect the units, their loadouts and their routes | Mission state | Built mission | π₯ |
| 3 | List VEAF modules and their settings | Mission state | Recipe | π₯ |
| 4 | Add a ground / vehicle group | Order of battle | Built mission | β |
| 5 | Change an existing aircraft or vehicle | Order of battle | Built mission | β |
| 6 | Move, rename or reconfigure a group | Order of battle | Built mission | β |
| 7 | Change a flight's route and what it does there | Order of battle | Built mission | β |
| 8 | Enable / disable / configure a module (recipe) | Modules & settings | Recipe | β |
| 9 | Enable / disable a module (built mission) | Modules & settings | Built mission | β |
| 10 | Change the log level | Modules & settings | Recipe + built | β½ |
| 11 | Enable / disable password security | Modules & settings | Recipe + built | β½ |
| 12 | Set a specific VEAF parameter | Modules & settings | Recipe + built | β½ |
| 13 | Add a circular trigger zone | Zones & triggers | Built mission | β½ |
| 14 | Change a zone (move, resize, polygon) | Zones & triggers | Built mission | β½ |
| 15 | Add a startup script to the mission | Zones & triggers | Built mission | β½ |
| 16 | Draw on the F10 map | Zones & triggers | Built mission | β½ |
| 17 | Search-and-replace text in scripts | Advanced edits | Built mission | π§ |
| 18 | List DCS unit types | Domain knowledge | β | β |
| 19 | List VEAF aliases / shortcuts | Domain knowledge | β | β |
| 20 | Explain the naming conventions | Domain knowledge | β | β½ |
| 21 | Look up a VEAF module | Domain knowledge | β | β½ |
| 22 | Check a group name | Domain knowledge | β | β½ |
| 23 | Create a full combat zone (one pass) | ποΈ Composites | Recipe (folder) | π₯ |
| 24 | Create a full QRA (one pass) | ποΈ Composites | Recipe (folder) | π₯ |
| 25 | Create an on-demand CAP mission (one pass) | ποΈ Composites | Recipe (folder) | β |
| 26 | Create a mission folder from scratch | ποΈ Getting started | Folder | β |
| 27 | Read the map (orientation) | πΊοΈ Map & coordinates | β | β |
| 28 | Convert coordinates (x/y β lat/lon) | πΊοΈ Map & coordinates | β | β½ |
| 29 | Place by real place name (geocoding) | πΊοΈ Map & coordinates | β | β |
| 30 | Validate a mission before build | π Validate & build | Folder | β |
| 31 | Build the playable .miz | π Validate & build | Folder | π₯ |
| 32 | Colour a base and enable its dynamic slots | π« Bases & airfields | Recipe (folder) | π₯ |
| 33 | Date the mission and set its start time | π°οΈ Mission settings | Recipe + built | β |
| 34 | Place a coalition's bullseye | π°οΈ Mission settings | Recipe + built | β |
| 35 | Write the briefing | π°οΈ Mission settings | Recipe + built | β |
| 36 | Know the known limitations | Domain knowledge | β | β |
| 37 | List a theatre's airfields | π« Bases & airfields | β | β |
| 38 | Place a complete FARP | π« Bases & airfields | Recipe + built | β |
| 39 | Set the mission's weather | π°οΈ Mission settings | Recipe + built | β |
| 40 | Place a complete carrier group | π« Bases & airfields | Recipe + built | β½ |
| 41 | Embed a sound in the mission | Zones & triggers | Recipe + built | β½ |
| 42 | Give the bases their real radio frequencies | π« Bases & airfields | Recipe (folder) | β |
| 43 | Know the ground elevation and terrain masking | πΊοΈ Map & coordinates | β | β |
| 44 | List an aircraft's default loadouts | Domain knowledge | β | β |
| 45 | Complete the statics placed without a shape | π Validate & build | Recipe + built | β½ |
| 46 | Create an operation (chained zones) | ποΈ Composites | Recipe (folder) | β½ |
| 47 | Add a picture to the briefing | π°οΈ Mission settings | Recipe + built | β½ |
| 48 | Read where a campaign stands | ποΈ Campaign | Campaign (folder) | β |
| 49 | Apply a flown campaign mission | ποΈ Campaign | Campaign (folder) | β |
| 50 | Prepare a campaign's next mission | ποΈ Campaign | Campaign (folder) | β |
| 51 | Write the campaign briefing | ποΈ Campaign | Campaign (folder) | β |
| 52 | Build a whole mission, from the questions to the briefing | ποΈ Getting started | Folder | β |
| 53 | Read and edit the mission folder's files | Modules & settings | Recipe | β |
| 54 | Make a mission's briefing (PPTX, maps, DCS pictures) | π°οΈ Mission settings | Folder (built) | β |
| 55 | Write the players' flight plan | π°οΈ Mission settings | Recipe (folder) | β |
| 56 | Announce the mission (poster, calendar banner, Discord post) | π°οΈ Mission settings | Folder (built) | β |
| 57 | Also build the training versions, one per role | π Validate & build | Recipe (folder) | β |
π§ Domain knowledge (the AI knows DCS + VEAF)¶
The AI leans on these to pick the right unit types, name groups correctly and configure modules β so you don't have to know the technical details. They read from VEAF's canonical (generated / vendored) data, so they're always current. You can also query them directly.
List DCS unit types¶
Knowledge Β· β β DCS unit types (filter by category or name), from the update-dcs-data
generated database.
π¬ "Which Russian fighters are available?" Β· "Show me the DCS SAMs."
Every weapon and radar carries its range as DCS gives it (the Mission Editor's circles): enough to check that a battery does not reach an enemy base.
List an aircraft's default loadouts¶
Knowledge Β· β β The loadouts the Mission Editor offers an AI aircraft, by name (Β« R-40T2,R-334 Β» for a MiG-31). The assistant can then arm a flight, a QRA or a CAP by that name, without copying the weapons one by one.
π¬ "Arm the QRA MiG-31s with their R-33 loadout."
List VEAF aliases / shortcuts¶
Knowledge Β· β β The VEAF alias vocabulary (shilka, sa8, β¦) for spawning units and composite
groups (SAM sites, convoys), and the -samLR, -armor⦠shortcuts with the range of each
parameter they draw at random (defense, armor, size).
π¬ "What's the alias for a Shilka?" Β· "List the ready-made SAM groups."
Explain the naming conventions¶
Knowledge Β· β½ β The reserved naming patterns (combat zone, veafSpawn-, #command,
interpreterβ¦) the AI must respect so it doesn't break a mission.
π¬ "Why does my group vanish at start?" (the AI checks the conventions)
Look up a VEAF module¶
Knowledge Β· β½ β Confirms a module exists, points to its doc page, and says whether it's enabled in a given mission.
π¬ "How is the QRA module configured?"
Check a group name¶
Knowledge Β· β½ β Checks that a group name doesn't fall into a reserved pattern
(veafSpawn-/OnDemand- prefixes, #command/interpreter markers, QRA syntaxβ¦) and, against a
given mission, warns about the combat-zone capture trap. The AI uses it before adding a group
and relays any warning to you.
π¬ "Could this group name cause a problem?"
Know the known limitations¶
Knowledge Β· β β Read before building a mission. For the installed veaf-tools version: what the
tools cannot do yet (and how to do without), and the DCS behaviours that raise no error and are
wrong anyway β a late-activated group visible to scripts, a start_time that does not delay an
aircraft, a SAM without early-warning radar permanently lit⦠A fixed limitation is no longer
returned from the version that fixes it.
π¬ "Read the known limitations before you start."
ποΈ Getting started β a mission from scratch¶
Before anything else: start from an empty folder and get a ready-to-use VEAF mission folder. The AI downloads the VEAF tools from GitHub, installs them into the folder, and lays down the default files for the chosen template.
Create a mission folder from scratch¶
Folder Β· β β In one call, on an empty folder: the AI fetches the latest VEAF tools (updater +
veaf-tools) from the GitHub release, installs them, then prepares the folder with the chosen
template. This is step 0 before adding combat zones, QRAs, etc. The AI asks which template
first:
minimalβ infrastructure + core modules;standardβ the everyday set (recommended);fullβ everything, advanced config as commented examples.
You can also name the theatre (Caucasus, β¦): the AI then generates a blank mission for that map directly, ready for combat zones / QRAs β with no DCS round-trip.
π¬ "Create a new VEAF mission on Caucasus in this folder." (the AI asks for the template + theatre, then installs and generates everything)
Build a whole mission, from the questions to the briefing¶
Folder Β· β β Saying "create a mission" is enough. The AI asks which of the two kinds you want, then loads the VEAF instructions that describe it end to end: the questions to ask, the design rules, the build order.
- Objective mission, played in one session β a package, objectives, a threat, a way home. The AI proposes a scenario, proposes others as long as you want, and writes nothing before you have approved one; then it builds the mission and its briefing.
- Open Training β a VEAF training mission on a whole map: airfields, support, air defence, graded training zones, combat zones, QRA.
These instructions ship with the tools: nothing to paste, nothing to fetch.
π¬ "Create a mission." Β· "Create an Open Training on Syria." Β· "An objective mission for four F-16s on the Caucasus, one hour of play."
ποΈ Multi-mission campaign¶
A campaign flown mission after mission, each mission starting from what the last one left. The AI runs the loop: read the situation, apply the mission flown, prepare the next one, then design it with the other actions.
Read where a campaign stands¶
Campaign (folder) Β· β β The missions flown, each zone's owner and garrison strength, both sides' reserves, the objectives met or not, and what changed in the last mission. This is what the AI decides the enemy's intent for the next turn from.
π¬ "Where does the Caucasus campaign stand? What will red try next?"
Apply a flown campaign mission¶
Campaign (folder) Β· β β Once the mission is flown and its state file fetched from the server, the AI merges it into the campaign, plays the turn between missions (reserves, repairs, counter-attacks) and says what changed. It also writes the mission's debriefing, and can tell it as a story for the squadron. A file already applied, from another campaign, or skipping a mission is refused without writing anything.
π¬ "Here is mission 3's state file, apply it."
Prepare a campaign's next mission¶
Campaign (folder) Β· β β The AI prepares the next mission's folder from the state: each base to its owner with its dynamic slots, the garrisons with their losses, the campaign module turned on. It gets the factual part of the strategic briefing in French and English β already the briefing of a new mission folder β then designs the mission on top and writes the narrative part. One mission, no weather variant: date, time and weather are fixed in the mission, the date moving on with the campaign and the ground staying visible; the AI adjusts date and time to the story (details).
π¬ "Prepare mission 4: red counter-attacks at Senaki."
Write the campaign briefing¶
Campaign (folder) Β· β β The AI writes the campaign's situation brief in briefing.yaml β political, economic and military situation, mission and intent, objectives, concept of operations by phase, rules of engagement, the mission's tasks β and the tools turn it into a PPTX after the VEAF briefing template, with the strategic map, the intelligence on the enemy and an annex of the rules.
The enemy stays mysterious: never a strength, only intelligence of uneven reliability, and fixed sites named once known.
After each mission, the AI rewrites the coming mission's page from the debriefing.
Once the mission is built, the tools also write its mission briefing β ATO, tactical map, one zoom per objective, frequencies β, read from the mission itself.
π¬ "Write the campaign briefing: red has crossed the Inguri, the coalition has three missions to retake Senaki."
πΊοΈ Map & coordinates¶
Orient and convert without launching DCS. DCS theatres are the real world projected: the AI can convert between DCS local coordinates (x/y) and lat/long.
Read the map¶
Orientation Β· β β The AI reads the theatre, per-coalition bullseyes, and existing zones/groups as reference points, each with its position (and each group its size), to place things relative to known anchors.
π¬ "Which theatre is this? Show me the bullseyes and existing zones."
Convert coordinates¶
Conversion Β· β½ β Converts a position between DCS x/y and lat/long for the mission's theatre (the AI reads the theatre; you supply nothing else).
π¬ "What's x=-291000 y=617000 in lat/long?"
Place by real place name¶
Geocoding Β· β β DCS theatres are the real world: the AI resolves a place name ("Batumi", "Kobuleti airport"), optionally offset ("10 km north of X"), to DCS coordinates. Via OpenStreetMap by default (free); Google Maps if a key is configured. Approximate result (DCS terrain approximates reality): the AI always shows the resolved point for you to confirm. Named places work; vague terrain ("the woods") does not.
π¬ "Put a SAM 15 km south-east of Batumi airport." (the AI geocodes, offsets, then places)
Know the ground elevation and terrain masking¶
Ground elevation Β· β β With no DCS running, the AI gives the ground height under a target (for
the briefing), the highest ground along each leg of a route (the floor of a low-level ingress),
how much of each leg a SAM sees over the terrain, and the top of each 10 km square of the F10
grid. Terrain only: no buildings, pylons or trees, and a measured margin to add, which the AI
reminds you of.
The grids of the theatres VEAF has swept are downloaded on first use, with no DCS (list).
Another theatre must first be swept once in DCS (.\veaf-tools.exe dcs terrain-sweep Caucasus, under three minutes); without it, the AI offers you the command.
π¬ "Does my low-level route stay under the Damascus SA-6's coverage?"
π Validate & build¶
The last step: from recipe to a playable .miz, without leaving the assistant.
Validate a mission¶
Folder Β· β β Checks the folder before build (config, modules, references) and lists errors and warnings. Do this before building.
π¬ "Check my mission is OK before building it."
Complete the statics placed without a shape¶
Recipe + built Β· β½ β A static placed by a tool before 6.26 can lack the shape (shape_name) the
editor writes; DCS refuses some types without it and the object never exists. Validation lists them,
this action completes them all at once.
π¬ "Validation complains about shape_name: fix them."
Build the playable .miz¶
Folder Β· π₯ β Builds the folder into a .miz ready to play in DCS (runs veaf-tools mission build). The
payoff: empty folder β content β playable mission.
π¬ "Build the mission." Β· "Build the local test version."
Also build the training versions, one per role¶
Recipe (folder) Β· β β So that pilots train before the mission night, on the same setting, without finding out in advance what the briefing does not announce.
The AI proposes a classification of the mission (enemy CAP, QRA, long-range SAMs, A2G targets, the SAMs protecting them), checks it against the briefing β what the briefing states stays fixed, what it describes vaguely is drawn again at every launch β, shows it to you, then writes it.
The next build produces, beside the night's mission, one version per role (_TRAINING_A2G, _TRAINING_CAP, _TRAINING_SEAD) and a common one (_TRAINING_ALL), with the same briefing.
The mission briefing gets one page per version.
The details: Training versions, one per role.
π¬ "Also build the training versions of this mission." Β· "Make a SEAD version so we can train on Thursday."
ποΈ Composites β create a full feature (one pass)¶
The core goal: from a single request, the AI lays down a whole VEAF feature across both worlds
(source src/mission + mission.yaml) of a mission folder. Durable: a later veaf-tools mission build
produces the .miz.
Create a full combat zone¶
Recipe (folder) Β· π₯ β In one call: the trigger zone, the groups placed inside it (auto-named so
the zone captures them) and the COMBATZONE block in mission.yaml. You describe, the AI
assembles. The AI can also make the zone spawn predefined VEAF groups on activation (SAM sites,
convoysβ¦) instead of hard-placing units.
π¬ "Create a βNorthβ combat zone with two enemy armor groups."
Create a full QRA¶
Recipe (folder) Β· π₯ β In one call: the protected zone, the Late-Activation interceptors (on
the right coalition) and the QRA definition in mission.yaml (referencing the groups by
exact name). You name the aircraft, the AI picks the type and assembles. The interceptors are
created airborne, fuelled and with a loadout: give it, or ask for it to be copied from a
veafSpawn-* template β an unarmed interceptor intercepts nothing.
π¬ "Create a red QRA in Mirage 2000s over the North zone, armed like the Mirage veafSpawn template."
Create an on-demand CAP mission¶
Recipe (folder) Β· β β In one call: the OnDemand-<name> Late-Activation template group
and the cap_missions entry in mission.yaml. The template is created airborne and fuelled;
give it a second point and it flies a race-track between the two β without one it patrols nowhere.
π¬ "Create an on-demand CAP βEscortβ with two F-15s."
Create an operation (chained zones)¶
Recipe (folder) Β· β½ β Groups combat zones already created into an operation: activating it brings all its zones to life at once, and each task becomes the current objective once the ones it depends on are complete β an objective that must not exist before another is a chained zone instead. Players start it from its F10 menu, or it starts with the mission. The AI refuses a task that names no zone of the mission.
π¬ "Make an operation Thunder: CZ-Alpha first, then CZ-Bravo once Alpha has fallen."
π« Bases & airfields¶
Colour a base and enable its dynamic slots¶
Recipe (folder) Β· π₯ β Assign an airfield to a coalition (blue / red / neutral). A base's colour is not changed by placing a unit nearby: just say "Mezzeh is blue" and the assistant colours the airfield durably, then enables its Dynamic Spawn slots, filling its warehouse with the coalition's dynamic aircraft at build time. For a base that must offer no slot (an enemy base, say), say so: the colour changes and the slots stay closed.
π¬ "Make Mezzeh blue." Β· "Turn Stendal red, with no dynamic slots."
List a theatre's airfields¶
Read Β· β β A map's bases, with their exact name, their DCS number and their position: enough to choose which bases to colour, or to place something near one of them, without guessing a name. Works before a mission exists too, by naming the map.
π¬ "Which bases are there in East Germany on GermanyCW?"
Give the bases their real radio frequencies¶
Recipe (folder) Β· β β A radio holds about twenty channels, a map has dozens of airfields: a choice has to be made. The AI reads the mission, lists the bases each side holds (those with slots first, red ones included), with the frequencies and TACAN DCS gives them β the ones the pilot sees on the F10 view β and proposes which to put in the radio plan. It only writes the ones you choose, and refuses to invent a frequency: a base DCS does not declare gets no channel. The tactical and flight channels do not move.
π¬ "Which bases deserve a radio channel in my mission?" Β· "Put Batumi, Kutaisi and Vaziani in the radio plan."
Place a complete FARP¶
Recipe + built Β· β β A FARP that actually serves: the heliport, its radio frequency, its callsign, and the warehouse that lets helicopters refuel and rearm there. Placing the "FARP" object alone is not enough: nobody can use it.
π¬ "Place a blue FARP at Fulda, on 127.5 MHz."
Place a complete carrier group¶
Recipe + built Β· β½ β A carrier ready for flight operations: the ship (and its escorts) steaming on a
heading at a speed, its radio, its TACAN, its ICLS, and on an arrested-landing deck its
Link 4 with ACLS; the recovery tanker and rescue helicopter the CARRIER module looks for under
the exact names <carrier> S3B-Tanker and <carrier> Pedro; and the ship's warehouse, which the build
then stocks. Deck slots are then placed like a flight on the ramp, with a deck
start.
π¬ "Place a blue carrier group off Batumi, heading 270, TACAN 74X, ICLS 7." π¬ "Put four F/A-18C slots on the Stennis deck, cold start."
Worth knowing: the build stocks a deck only with the aircraft that can both take off from and land
on that ship, by DCS's own data β an F-14 on the Stennis, not on the Tarawa; a Harrier and the
helicopters on both. An aircraft list written by hand in warehouses.yaml is still obeyed as written.
Remember to switch the CARRIER module on.
π°οΈ Mission settings¶
Date the mission and set its start time¶
Recipe + built Β· β β The date and the start time, like the editor's time panel. A mission created
from scratch is dated 2016; a Cold War mission wants 1980. The time is the theatre's, the one DCS
shows. The weather variants of versions.yaml can still set their own, variant by variant.
π¬ "Date the mission 1 June 1980, starting at 09:30."
Place a coalition's bullseye¶
Recipe + built Β· β β A coalition's bullseye. The build takes each flight plan's BULLSEYE waypoint from it, and the VEAF scripts announce positions relative to it: place it early, on a known landmark.
π¬ "Put the blue bullseye on Point Alpha, in the Fulda Gap."
Write the players' flight plan¶
Recipe (folder) Β· β β The route the players' aircraft carry, in one call: the points in order (place or coordinates), each set on the ground, the names checked β two places with one name cannot be told apart in the cockpit or the briefing, while the same name at the same place is a return to the departure point (HOME, IP, TGT, HOME) β and the plan that gives them to the chosen aircraft. It returns each leg's magnetic heading and distance, for the briefing and the F10 labels, and names any plan of the file that would still win over it.
π¬ "Lion's route: feet wet off Anaklia, push, IP, the depot, egress, feet dry."
Write the briefing¶
Recipe + built Β· β β The mission's name, the situation and each coalition's task; only the texts
given change. A mission saved by the editor keeps these texts in its dictionary: the assistant writes
them where the mission already keeps them. ${METAR} and the other briefing variables are replaced
at build, variant by variant.
π¬ "Write the situation: Central Europe, June 1980. Blue task: hold the Fulda Gap."
Set the mission's weather¶
Recipe + built Β· β β Clouds, wind, temperature, visibility, rain, fog, or a whole METAR. A mission
created from scratch has its clouds on the ground: this is where to fix it. The weather variants of
versions.yaml still override it, variant by variant.
The wind asked for is the one pilots will meet 10 m above the departure airfield (or an airfield you name): the tool sets DCS to get it, and the AI gives you the simulated wind by layer, with a warning when helicopters meet more than 20 kt in the first 600 metres.
π¬ "Broken clouds at 1,500 m, 12 Β°C, westerly wind at 10 knots."
π₯ Mission state¶
The AI looks at what exists before acting β just like you open the DCS editor outliner before adding something.
List the groups and zones¶
Built mission Β· π₯ β The AI lists the groups (name, coalition, country, category) and trigger zones (name, position, radius) present in the mission.
π¬ "What groups are in my mission?" π¬ "List the trigger zones for me."
Inspect the units, their loadouts and their routes¶
Built mission Β· π₯ β A deeper level of detail than the group list. For every aircraft or vehicle the AI gives you its type, its AI skill, its livery, its callsign, its side number, position, heading, fuel β and its loadout, pylon by pylon. Per group: its task, its radio frequency, whether it is hidden, whether it starts engines-off or late-activated, and its full route with the tasks at each waypoint.
This is what to read before asking for a change: to alter a loadout the AI first has to see the one that is there, and on which stations.
π¬ "What is Colt flight carrying, and on which pylons?" π¬ "Show me Enfield's route and what it is meant to do at each waypoint."
β οΈ On a big mission, say what you are after. An adopted mission (a Foothold, say) holds hundreds of groups β megabytes of detail β so ask for one flight by name ("Colt" is enough), a coalition or a category. Say so if you do not care about the routes; it shortens the answer a lot.
List VEAF modules¶
Recipe Β· π₯ β The AI reads the source config and tells you which VEAF modules are enabled, disabled, or configured (with their settings).
π¬ "What's enabled in my mission?" π¬ "Is CTLD active?" (its settings live in
ctld-config.yaml)
β Order of battle¶
Add a group¶
Built mission Β· β β The AI inserts a ground / vehicle group: the units (you say what and how
many), a position, and optionally a route (with a looping patrol). Adding twice creates two
groups β like two placements in the editor. The AI names the group correctly itself from your
intent: attached to a combat zone (zone-name prefix), Late Activation for a QRA, or a spawn
template (veafSpawn-).
It also sets the AI skill of the units (Average to Excellent, or Random), the level of the opposition you chose; a combat zone takes it too.
A static placed where the clear-ground data says the ground is not clear is not moved, but the AI is told where the nearest clear spot is.
π¬ "Add a section of 3 T-72s patrolling around this point." π¬ "Put two armor groups in the North combat zone." π¬ "Place Su-27 interceptors in Late Activation for the QRA."
Create a player slot¶
Built mission Β· β β The AI creates a flyable slot: the one thing needed before anybody can fly a mission built from scratch. You give the aircraft, a position, and the start type β airborne (altitude, speed, heading) or on the ground cold/hot (there you supply the parking spot). A ground start with no spot is refused rather than guessed: parking spots are data captured in DCS, not invented. The AI writes the right start waypoint pair for you and sets the group radio.
π¬ "Add an A-10C slot on parking 43 at Kobuleti, cold start." π¬ "Put an F-16 slot airborne at 15,000 ft over the zone."
As in the editor, the slot gets a callsign (Enfield, Springfieldβ¦ ; a number for an Eastern country), an onboard number no other aircraft of the mission carries, and the countermeasures (chaff and flare) the editor gives that type β an airborne slot cannot rearm.
One thing to know: a slot is Client skill (playable in single-player too) and is never a dynamic-spawn template β that setting, left on, is exactly what makes a slot sit in the file but not appear in the slot list.
Put a flight on the ramp¶
Built mission Β· β β The AI places a flight (one or more aircraft) on the parking stands of an airfield you name β it picks the free stands itself, so you never need their numbers. It takes the stands nearest the runway, skips the ones already taken, and refuses if a requested stand is occupied (telling you which group holds it) or the airfield has no real aircraft stand. Start cold or hot on the ramp, from the runway, airborne, or on the deck of a carrier (carrier group) β an aircraft that cannot use that deck is refused. Each aircraft gets its countermeasures, a callsign (Texaco for a tanker, Overlord for an AWACS) and an onboard number unique in the mission.
π¬ "Put a two-ship of F-16s on the ramp at Kobuleti." π¬ "Add four Su-25s at Batumi parking, engines hot." π¬ "Scramble a flight of F-15s from Incirlik's runway."
Aircraft are AI by default β handy for traffic or targets. An AI flight does not appear in the "Choice of role" screen (which lists only playable slots): to spawn into it and fly it, ask explicitly for player slots. The airfield must have been captured first (parking data); otherwise the AI tells you rather than guessing.
Change an existing aircraft or vehicle¶
Built mission Β· β β Change what is already in the mission, unit by unit: its loadout (pylon by pylon), its countermeasures (chaff and flare), its AI level, its livery, its heading, its callsign and its onboard number, its name, its position. You give the heading in degrees, the AI converts it. Only the settings you ask for change, and the AI tells you what was there before.
π¬ "Give Colt flight an air-to-ground loadout." π¬ "Take the bombs off pylon 4 of Colt 1-1-1." π¬ "Set this MiG to Excellent and point it at 270." π¬ "Rename this flight's callsign to Colt 2-3."
Three things worth knowing, because each one saves a surprise:
- The AI has to look first (inspect the units): it addresses the unit by its exact name, so an edit can never land on the wrong group.
- A livery and a weapon cannot be checked by the tool: DCS shows the default skin, or drops a weapon the airframe cannot carry, without saying so. The AI will remind you; verify it in the editor.
- Turning an AI unit into a player slot is refused (and the reverse too): that is not a skill level but a multiplayer slot, which would appear in β or vanish from β the list of available places.
Move, rename or reconfigure a group¶
Built mission Β· β β Act on a whole group: move it, rename it, change its radio frequency, put it in Late Activation, hide it or leave it with engines off.
π¬ "Move that SAM battery 5 km east." π¬ "Rename this group to the VEAF convention." π¬ "Put this flight in Late Activation, engines off." π¬ "Set this flight's frequency to 305 AM."
The move is the part that needed the most care, and here is why:
- A group is not a point. It is units in a formation, plus possibly a route. The tool moves every unit, every waypoint and the group's anchor by the same vector: otherwise the formation shears, or the route detaches from the units β and neither shows until somebody flies it.
- A bearing and a distance are computed on the globe, with the same machinery as placing by a real-world place name, not by adding metres to a coordinate.
- β οΈ The terrain at the destination cannot be checked at build time: a ground group can end up in the water or on a slope with nothing to say so. That is also why runtime placement (a VEAF spawn) is the thing that knows how to avoid villages and forests. Verify it in the editor.
Two useful refusals: renaming onto a name already taken is blocked (two groups sharing a name make every later edit ambiguous), and so is a name that triggers a reserved VEAF convention β for instance prefixing a group with a combat zone's name, which makes it vanish at mission start. If that is exactly your intent, the AI can go through by saying so explicitly. Finally, the frequency is checked against what the aircraft can actually tune: out of range, the DCS editor would refuse to save the mission.
Change a flight's route and what it does there¶
Built mission Β· β β Add, insert, remove or reorder a waypoint, change its altitude, speed, name
or type β and above all give it a task: orbit, attack a group, bomb a point, engage the targets in
a zone, land, set a frequency, or loop the route back on itself. For a support flight: refuel others
(tanker), act as AWACS, turn on a TACAN (channel, X/Y mode, callsign), enable the datalink (EPLRS),
carry unlimited fuel, or escort another group named by its name. For a radio beacon: a unit
that plays a sound in a loop on its frequency, which a helicopter homes on with its direction
finder (embed the sound first, and set the frequency just before).
For a convoy, each waypoint can follow the roads or drive straight across.
π¬ "Add a waypoint after the third, at 20,000 feet." π¬ "Have this tanker orbit a race-track at 20,000 feet, 300 knots." π¬ "Put an attack task on that group at waypoint 3." π¬ "Loop the patrol from the last waypoint back to the second." π¬ "Make Texaco a tanker, TACAN 30Y callsign TXO, unlimited fuel." π¬ "Have the two F-15s escort Texaco." π¬ "Make this truck a beacon on 31 MHz FM playing beacon.ogg in a loop." π¬ "Have the convoy follow the road up to the third waypoint."
Three things worth knowing:
- You speak feet and knots, the tool converts (the mission file itself is in metres and metres per second). Answers give you both.
- Tasks are a closed list, each with its parameters checked. That is deliberate: a made-up task is accepted by the file, ignored by DCS, and you only find out in flight when the aircraft does nothing. If a task you need is missing, it can be added β on request, never at random.
- DCS refuses to save a mission whose route has no waypoint with a locked time. Removing or reordering can take out the only locked one: the tool re-locks one and tells you.
Change a zone: move it, resize it, fit it to the terrain¶
Built mission Β· β½ β A VEAF combat zone is a trigger zone. Until now, adjusting one meant deleting it and building it again; now it moves, resizes, gets renamed, changes shape, can follow a carrier, or go away.
π¬ "Shift the combat zone 3 km north." π¬ "Have this zone follow the ridge line rather than a circle." π¬ "Make the QRA zone bigger." π¬ "Attach this zone to the Stennis."
- A polygon zone follows the terrain: you give three points or more. The VEAF runtime handles any polygon β but the DCS editor only draws 4-point quads, so beyond that the tool warns you and it needs one check in the editor.
- Moving a polygon zone carries its shape (otherwise the zone would cover terrain nobody chose).
- β οΈ Renaming a zone does not update what references it: the combat zone's
mission.yamlentry and its groups' name prefix need doing by hand. The tool reminds you.
Draw on the F10 map¶
Built mission Β· β½ β A coordination line, an ingress corridor, a no-fly box, a label. The reason to do it here rather than in the editor: a drawing made by hand is lost the moment the mission is rebuilt from its folder, while one the AI places is part of the recipe.
π¬ "Draw the FSCL and label the ingress corridor on the F10 map." π¬ "Draw a no-fly box around Maykop." π¬ "Move that label 5 km south."
- The layer decides who sees the drawing β red, blue, neutral, common, or the author's own β and it is never a default: a drawing on the wrong layer is invisible to those who need it and visible to those who should not see it.
- Six shapes are available: the line (two points or more, closed to outline an area), the rectangle, the text label, the circle (a radius), the oval (two axes and an angle), and the free-form filled polygon (three points or more). The arrow and the icon are still refused with a reason β an arrow's outline needs an in-game check, and an icon needs a file name from DCS's own icon set that nothing here lists β rather than a guess the editor would silently drop.
β Modules & settings¶
Read and edit the mission folder's files¶
Recipe Β· β β For an AI with no access to your files (Claude Desktop in chat mode): it reads and edits mission.yaml and the src/*.yaml files (presets, weather and time variants, waypoints, slotsβ¦) of the mission folder, and nothing else.
It replaces one exact passage, after a backup; an edit that would leave the file unreadable is refused, and the file stays as it was.
That is how it renames the mission or changes its era.
π¬ "Rename the mission helico_convoi_Montagnes."
Enable / disable / configure a module β recipe¶
Recipe Β· β β The AI edits the source config: it enables or disables a module (simple toggle), or sets a full settings block (e.g. a combat zone with its zones, messagesβ¦). Durable: survives a rebuild. Your comments in the file are preserved.
π¬ "Enable CTLD in my mission." π¬ "Add a combat zone βAlphaβ with these settingsβ¦"
Enable / disable a module β built mission¶
Built mission Β· β β Toggles a module's activation directly in the already-built mission, without a rebuild. Handy for a quick test (β οΈ overwritten on the next rebuild from the recipe).
π¬ "Quickly disable the SPAWN module in the .miz to test."
Change the log level¶
Recipe + built Β· β½ β Sets the VEAF logging level (error / warning / info / debug / trace). On the recipe (durable) or the built mission (fast, overwritten on rebuild).
π¬ "Put the VEAF logs in debug (in the recipe)."
Enable / disable password security¶
Recipe + built Β· β½ β Enables or disables the VEAF security flag (the password required for
protected commands). On the recipe it also handles the password hashes (JTF / Mission
Master) β which the built mission does not.
You make a hash yourself, never the AI: .\veaf-tools.exe password-hash asks for the password with the input hidden and prints the hash to give it.
Outside the VEAF servers no pilot is known to the mission, so only a password opens the protected commands, and the one shipped with the tools is public: turn security off for a mission among friends, or set your own.
π¬ "Turn off password security on this test mission."
Set a specific VEAF parameter¶
Recipe + built Β· β½ β Sets a given VEAF configuration parameter to a value (recipe: the
settings: block β veaf.config.<key>; built: directly in veaf-config.lua).
π¬ "Set such-and-such VEAF parameter to this value."
β½ Zones & triggers¶
Add a circular trigger zone¶
Built mission Β· β½ β Inserts a named circular trigger zone (centre, radius). This is the zone a VEAF combat zone references β combined with adding groups, it lets you lay down a full combat zone.
π¬ "Create a βNorthβ trigger zone of 3 km here."
Add a startup script to the mission¶
Built mission Β· β½ β Adds a "mission start" trigger that runs a script β useful to outfit a
vanilla or CTLD mission with scripting without the DCS editor's Triggers tab (inline Lua, or
a .lua file embedded / loaded from disk).
π¬ "Run this bit of Lua at mission start." π¬ "Embed and load this .lua script at launch."
Embed a sound in the mission¶
Recipe + built Β· β½ β Copies a sound (.ogg or .wav) into the mission and declares it, as the editor
does when you pick a file. It is what a unit needs before it can play it β the radio
beacon of a helicopter zone, a distress signal. Embedding the same file twice reuses the first.
π¬ "Embed beacon.ogg and sos.ogg in the mission."
Add a picture to the briefing¶
Recipe + built Β· β½ β Copies a picture (.png or .jpg) into the mission and adds it to a side's briefing (blue, red or neutral), after the pictures it already has β as the editor does when you pick a briefing picture.
Avoid putting the same picture on both sides: a player whose side the briefing does not know (a dynamic slot, for instance) would see it twice.
π¬ "Put map.jpg in the blue briefing."
Make a mission's briefing¶
Folder (built) Β· β β The AI writes the scenario's words (title, context, objectives, known threats, flow); the tool reads everything else in the built mission β date, weather, bullseye, flights, support, flight plan, the presets in the cockpits, each target's coordinates β and writes docs/briefing.pptx on the VEAF template, an overview map and one zoom per objective in docs/maps/, and puts those maps in the DCS briefing (blue and neutral).
No script: an AI with no command line on your PC (Claude Desktop in chat mode) does it too.
Build the mission first, and run it again after every change: it replaces its own pictures.
The PPTX imports into Google Slides. docs/briefing.pdf is written beside it β the same pages, maps and words with a layout of its own, no PowerPoint or other program needed on your PC. The tool also warns the AI when a waypoint number of its text does not match the route, and when its French text lacks its accents.
OpenStreetMap background, or OpenTopoMap (relief) for a desert or a low-level mission; without the network, the maps are drawn on a plain background.
The pictures go into every built .miz, each weather variant included, and the kneeboard of every aircraft gets the maps drawn for its page, a flight card (points, heading and distance of each leg, highest ground; not the frequencies, already in the cockpits' presets) and the targets.
The overview takes the page's whole width, framed on the route, the objectives and the threats, turned when that holds it tighter (an arrow shows north), its key drawn inside; each zoom carries an inset placing it on the overview.
The targets and the flight plan's steps are sheets, six to a page: name, what it is, coordinates in DMS and DDM, elevation, a thumbnail of the map β and for a step, the heading and distance that reach it and what is done there.
The AI can add a strategic situation page and a deployment and coordination page, in prose; with dynamic slots, the ATO says "dynamic slot" and lists the package's flights under their base, not the dozens of types it offers.
A second map, the combat area, follows the situation map, framed on the objectives and the threats; on the kneeboard every map is turned so that the attack axis (from the base to the objectives) runs up the page.
The AI can also give the package's code words (a page in the deck and on the kneeboard), and the briefing takes the recon photos left in docs/recon/ (a JPEG photo and its JSON sheet: zone, title, heading, pitch, position), two to a page after their objective's zoom.
π¬ "Make the mission's briefing, topo background."
Announce the mission¶
Folder (built) Β· β β Once the briefing is made, the tool makes the evening's announcement: a 16:9 poster (docs/poster.jpg), a banner for the VEAF calendar (docs/calendar-banner.jpg, 2400 Γ 432, the 5.55:1 the calendar shows uncropped) and a Discord post under 2,000 characters (docs/discord-post.md).
The background is a recon photo graded in evening light (or the map), with the combat-area map and the photo pinned on it, the title and two or three tagline lines.
The post takes the map, the time of day, the sky and the departure bases from the mission; the AI writes the rest (pitch, programme by role, practical lines).
The evening's date and hour, and the links (calendar sign-up, shared briefing) are yours to give: the tool never invents them, and without them nothing carries a date.
π¬ "Make the poster and the Discord post: Thursday 29 October, 21:00, sign-up https://www.veaf.org/calendar/1423."
π§ Advanced edits¶
Search-and-replace text in scripts¶
Built mission Β· π§ β Text or regular-expression replacement across the mission's embedded Lua files (restricted to scripts, never the raw tables or binaries). A troubleshooting tool β handle with care.
π¬ "Replace βdebugβ with βinfoβ in the veaf- scripts."*
What's next?¶
The roadmap aims to let the AI build complete VEAF features in a single pass, across both
worlds (the .miz and the mission.yaml recipe):
- π§ The AI gains a "domain brain" β access to DCS unit types, VEAF aliases/shortcuts, naming conventions and each module's config. It names and configures things itself (you give the intent, not the details).
- β Context-aware group creation β "create a CZ with two armor groups" or "a QRA in Mirage 2000s": the AI picks the types, names the groups per the conventions, handles Late Activation, etc.
- π Target symmetry β every setting applicable to both the recipe and the built mission will work on both.
- ποΈ One-shot actions β
create_combat_zone,create_qra,create_cap_mission: zone + groups + config in a single call.
This page grows with each new capability. For the technical detail, see the developer doc.