Stealth missions are your family’s way of striking at rivals without open war. You slip operatives into a school’s archive, an embassy compound, or a rival warehouse; you pull what you came for; and you get out before the catchers arrive. Every move has a cost, every failure raises heat, and a bad night can leave your people locked in someone else’s cellar.
Purpose and Stakes
A stealth mission lets your family take something, copy something, or shift the political balance without putting your name on a declaration of war. The three target kinds reflect different ambitions:
- School raids target a martial school’s restricted manuals. A successful school raid earns your family pages toward unlocking a new ability, eventually completing a
FamilyManualthat lets every eligible member learn the technique. - Embassy raids target a kingdom’s diplomatic presence. Success (or partial success after a fight) shifts that kingdom’s resource metrics, such as their wealth or military standing, according to what you were after.
- Warehouse raids target a kingdom’s trade infrastructure and work the same way, with wealth as the primary lever.
There are also finer goal kinds within those targets: manual, tactical_plans, trade_deals, cultural_artifact, intelligence, and custom. The goal kind shapes which kingdom metrics shift at the end.
Creating a Mission
You need to belong to a family and have at least 250 energy on hand. That energy is spent immediately when you draft the plan; it buys the AI synthesis pass that constructs the activity layout, round sequence, and narrative brief.
The planning modal
The intended way to draft a raid is the Plan a stealth mission modal. It opens as a popout dialog with form fields for every choice the synthesis needs:
- Target type: martial school, embassy, or warehouse.
- School: when targeting a school, a dropdown lists the named schools currently raidable (Ember Fist, Veiled Grace, Mirrored Tempest, Radiant Chorus).
- Goal: pick a goal chip (“Steal a manual” or “Custom”) and type a one-line description of what you are after. The manual chip is disabled for embassy and warehouse targets, since manuals are kept at schools.
- Manual: with a school target and the manual goal, a second dropdown lists every manual that school keeps (
StealthMissions::ManualCatalog.entries_for, served byGET /api/stealth-missions/manual-targets). Ones the initiator cannot take yet stay in the list, disabled, with the reason attached (“needs Blossom’s Barrier Style 4”), so the player can see what to train toward. A school raid for a manual is refused unless one is chosen. - Plan: an optional longer textarea for tactical notes (how you intend to approach, what diversions you have planned, who you expect to encounter).
Both the goal text and the plan text are passed straight to the synthesis prompt, so concrete detail produces a tighter generated layout. Submitting from the modal deducts 250 energy and queues the synthesis job.
CLI fallback
You can also draft from the command line, which is useful if you want to keep your hands on the keyboard or script repeat runs against the same target:
mission start school <school_key> --manual "<technique>" [--goal "..."] [--plan "..."]
mission start embassy <kingdom_house>
mission start warehouse <kingdom_house>
--manual takes the technique’s display name, matched case-insensitively and forgiving of punctuation, so --manual "natures kiss" finds Nature’s Kiss. It is required for a school raid whose goal kind is manual (the default for school targets): DraftService rejects the draft before spending energy if none is named, if the school slug is unknown, if the initiator has not trained the style to the technique’s min_style_level, or if the family already holds that completed manual.
The CLI and the modal hit the same draft service. After you submit either way, the server queues a synthesis job. You will receive a notification within 1 to 6 hours when the plan is ready. If synthesis fails for any reason (the AI returned unusable output, or a composition rule triggered), your 250 energy is refunded automatically and the mission enters plan_failed.
Composition rule: You cannot raid your own group. School raiders must not belong to the target school. Embassy and warehouse raiders must not belong to the target kingdom’s house. This check runs at draft time, at launch time, and again when synthesis returns, so late house-switches cannot sneak someone onto their own faction’s mission.
Recruiting Companions and Launching
Once a mission is ready, the Launch raid modal becomes the working hub for the initiator. It shows a plan summary (target, goal, current state) and a live companion list of eligible characters online right now, each row with two buttons: Invite (free) and Invite (invest 250). Sending an invitation pings the target with the offer; once accepted, they show up in the confirmed party. The modal also exposes the Launch and Cancel actions at the bottom.
Companions can also opt in from the command line:
mission join <mission_id>
mission join <mission_id> --invest
Joining free costs nothing. Joining with --invest spends 250 energy from the companion’s pool, marking them as a full stake-holder. Invested companions receive the same influence reward tier as the initiator on success; free companions receive a reduced share. The same composition rule applies: no joining a raid against your own group.
Only the initiator can launch:
mission launch <mission_id>
Launch commits the confirmed party, creates an activity instance, and teleports everyone to the target entrance. From this point the mission is running and the activity rounds begin.
To cancel before launch:
mission cancel <mission_id>
Cancelling before running refunds the initiator’s 250 energy. Cancelling a running mission (or during alarm_tripped) does not refund energy.
Round Types
Stealth missions use the standard activity round system. Each generated mission contains a sequence of rounds; the synthesis AI chooses the types based on your goal and plan notes. Understanding what each round demands helps you pick a party with the right abilities.
| Round Type | What it demands |
|---|---|
| Standard | A stat-based skill roll; the most common infiltration obstacle (picking a lock, scaling a wall, forging a seal). |
| Reflex | A fast-response roll with a 2-minute window instead of the normal 8; a guard patrol is rounding the corner. |
| Group Check | Everyone rolls; the party’s combined result determines success; no one can sit this one out. |
| Combat | A fight breaks out mid-mission; the party must win or the round counts as a failure. |
| Persuade | A social or deception roll adjudicated by the AI narrator; talking your way past a sentry or convincing a clerk you belong there. |
| Free Roll | An open-ended roll also adjudicated by the AI narrator; creative solutions and unconventional gambits land here. |
| Branch | A decision point; the party chooses between two paths, each leading to a different sub-sequence of rounds. |
| Rest | A pause to recover between difficult segments; no roll required. |
| Break | A pure narrative beat with no mechanical action. |
Reflex and Group Check rounds are mandatory for all participants; no one can hang back to help others. Standard and combat rounds allow more tactical flexibility.
The Alarm System
Every round that the party fails increments a fail_count on the mission. When fail_count reaches 3, or when the final round of the activity fails, the alarm trips. The alarm also trips if the party somehow fails a round that is explicitly marked as a mission finale.
When the alarm trips, two things happen simultaneously:
-
Flee or Fight prompt. Each party member receives an interaction asking whether to flee or stay. You have 30 seconds to respond. If you do not respond, the system defaults you to
fight. Choosingfleeteleports you home immediately. -
Answer the Alarm prompt. Every online character belonging to the target group (the school’s members, or the kingdom’s house members) who is not already in another active mission receives an interaction offering to join the catcher fight. They have 180 seconds to accept.
After 180 seconds, catchers and any accepting defenders teleport into the target room and a fight begins. The fight is non-lethal and classified; defeat or victory determines the final mission state.
If every party member flees and no one stays to fight, there is no fight. The mission resolves as fled with no rewards.
Reward scaling after an alarm. The reward share is frozen at the moment the catcher fight starts, calculated as the fraction of party members who chose to stay and fight. If four people joined and two fled, survivors who win receive half the normal reward. This is the reward_share_pct on the mission and is applied to influence grants and kingdom-resource deltas alike.
Outcomes of the catcher fight:
caught_won: stayers defeat the catchers. The raid is not over: the activity resumes where it paused and still has to be played to its end. Rewards are distributed at the (share-scaled) full amount only if that resumed run reaches its conclusion.caught_failed: stayers defeat the catchers, but the resumed run then ends short of the goal (the plan runs out, a knockout round is lost, or the instance is already stopped by the time the fight ends). Terminal, no rewards, and no refund: the party played the raid to an ending. Do not assume acaught_wonrow means the raid paid out; readrewards_granted_at.caught_lost: catchers win. Mission ends immediately. KO’d stayers become hostages (see below). Companions who fled receive nothing.
A successful antagonist who captures at least one hostage receives an influence bonus on top of any consolation reward.
Opposing a Mission (Playing Antagonist)
When a raid launches against your school or kingdom, the system begins offering the antagonist role to eligible members of the target group, one at a time. Each character on the rotation has 30 seconds to accept or decline before the offer skips to the next person in the queue. The first acceptance locks the slot; only one antagonist exists per mission, and the slot does not respawn if you lose it.
Being the antagonist is not about showing up for the alarm fight. It is the role of the in-house security boss for the duration of the raid, with two distinct sets of powers:
Remote observation and opposition
Accepting the offer attaches you to the raid’s activity instance as a remote opposer. Observer assignment is automatic; no separate command is needed. You can follow the raid round by round, see what the party is attempting, and submit opposition actions through the activity interface.
The action set scales with the round type:
| Round | Opposition actions |
|---|---|
| Standard | block_explosions (the target’s 8s no longer chain), damage_on_ones (every 1 the target rolls deals damage), block_qi (the target cannot spend qi this round) |
| Persuade | draw_attention (raises the DC by 2) |
| Combat | redirect_npc (forces an NPC to target a specific raider), aggro_boost, npc_damage_boost, pc_damage_boost (multiplies damage taken by a raider) |
The antagonist also gains physical passability through the target building, so you can walk its rooms while the raid is in progress, watching it unfold from inside rather than only through the activity UI.
Joining the catcher fight
If the raid trips the alarm, the antagonist is still slotted onto side 2 of the catcher fight automatically, alongside the NPC reinforcements the system spawns. NPC reinforcement strength is calibrated to approximate a fair fight against the stayers, using the party’s measured combat power as a baseline. Winning the catcher fight as antagonist captures any KO’d stayers as hostages (see below) and pays an influence reward on top of the standard thwart bonus.
The catcher fight is the dramatic finale when an alarm goes off, but it is incidental to the antagonist role. The real game is the opposition you apply during the rounds leading up to it.
The Hostage System
When the antagonist wins the catcher fight, every KO’d party member who chose to stay becomes a hostage of the antagonist’s character.
Being Taken Hostage
A hostage is teleported to the antagonist’s home room and locked there. The initial lock duration is 24 hours (1440 minutes). Higher chemistry between captor and hostage at the time of capture extends the initial window, up to a maximum cap of 72 hours (4320 minutes). Spending in-character RP time with your captor extends your release timer further: each real minute of roleplay logged extends your release by 6 minutes, to the same 72-hour cap.
While you are a hostage, your movement is restricted:
- If your captor binds you (
hostage bind <name>), you cannot move at all. - If unbound, you can move freely within the building containing your locked room. You cannot leave the building.
Managing Hostages (Captor Commands)
Hostages are targeted by name — the captive you are holding. If you only hold one hostage, you can leave the name off and the command targets that one.
hostage list
hostage bind <name>
hostage unbind <name>
hostage relock <name>
hostage summon <name>
hostage release <name>
hostage list shows all your active hostages with where they are held, their release times, and bind status.
hostage relock secures the hostage in the room you are currently standing in (which must be within your own building). There is no need to look up room numbers — just stand where you want them held and relock.
hostage summon teleports the hostage to your current location (useful if they have wandered within the building).
hostage release voluntarily frees the hostage with no ransom applied.
Ransom
When the release timer expires naturally, a ransom settlement runs automatically. This applies kingdom-resource shifts scaled by the hostage character’s highest combat-style level: the captor’s kingdom gains a small amount of wealth, and the hostage’s kingdom suffers proportional losses to wealth, unrest, and government integrity. The magnitudes are capped and never large on their own, but they compound across repeated successful raids.
Voluntary early release via hostage release skips the ransom entirely.
Rewards at a Glance
| Outcome | Initiator | Invested Companion | Free Companion | Antagonist |
|---|---|---|---|---|
| Clean success | 100 influence | 100 influence | 50 influence | (none) |
caught_won (share-scaled) |
partial | partial | partial | 20 influence |
caught_failed |
nothing | nothing | nothing | (none) |
caught_lost |
nothing | nothing | nothing | 100 influence + ransom |
| Fled / Aborted | nothing | nothing | nothing | (none) |
School raid success also grants manual pages to the family, potentially completing a FamilyManual and unlocking new abilities for every eligible family member immediately.
Pages land on the ability the raid named (mission.target_ability_id), scaled by the same reward share as everything else, so a thin share can floor to zero pages; the outcome report says so explicitly rather than going quiet (OutcomeListener#award_manual_pages). Excess pages past a manual’s requirement roll over to another unfinished manual in the same style (ManualRewardService#rollover_excess). Players read progress with the styles command (aliases library, manuals), which prints per-technique state and the family shelf; mission status and the missions window carry the same “Nature’s Kiss (0/1 pages)” label for any raid that named a manual. Player-facing docs live in the styles helpfile, seeded by db/seeds/helpfile_martial_manuals.rb.


