# Table Truce - a holiday dinner seating chart that keeps feuding guests apart, and lines for the hot spots > List who is coming to a holiday dinner and who does not get on. The browser lays out a round or long table, seats everyone with a seeded solver so feuds sit apart, couples and small kids stay together, the aisle seats go to who needs them and the host stays near the kitchen - pinned seats never move - and lists what is still hot (H1, H2...) with a tension score - free. Then one metered run reads the seats as they are: the seat swaps worth making, and for every hot spot an opener, a redirect to a safe topic and a kind way out; host moves before the day, at arrival, during dinner and at dessert; and a warm group message that never names the feud. Every reply cites the page's ids and is checked against the seating. URL: https://table-truce.skillsafe.ai/ API: https://table-truce.skillsafe.ai/api.html Built on the SkillSafe skill @refoundai/having-difficult-conversations (from the lenny-skills collection: prepare for a hard conversation, lead with curiosity, say the true thing kindly and early, listen more than you argue, set a boundary without punishing anyone). ## What runs free in the browser (tablekit.js, tableview.js) - Guests, one per line ("Name: tags"). Tags it understands: host, big talker, quiet, kid, needs an aisle seat (aisle, walker, wheelchair, cane, bad knee), first time here (new, plus one, date), elder. Up to 14 at a round table, 24 at a long one; a .txt or .csv list can be dropped in. - Ties, one per line: "A x B: topic" keep apart (also "vs" or "!"), "A + B" keep together (also "&"), "A ~ B" they get on. Names match on the full name, the first name or a unique word. - Tension points: a feud side by side 10 (high), face to face 6 (medium), one seat apart 2 (low); a keep-together pair split 4 (medium) or facing 1; someone who needs an aisle seat boxed in 4 (medium); two big talkers side by side 2; a first-timer with nobody they know beside them 2; the host far from the kitchen 2. These weights are the page's own rules of thumb, not research findings. - The solver: random restarts plus annealed swaps between unpinned seats, deterministic for the same input. Tap two seats to swap them by hand; pin a seat to keep it. Exports: Markdown, a seat-list CSV, plan JSON and printable folded place cards. ## The metered task (model gpt-terra) - `truce` - verdict `calm` (no high or medium hot spots), `watch` (nothing high that a swap could fix, but something medium, or a feud one seat apart) or `reshuffle` (a feud side by side that swapping unpinned guests can fix; swaps required). Returns swaps `[{a, b, why, cite}]`, hot_spots `[{id, read, opener, redirect, exit, cite}]`, host_moves `[{when, text, cite}]`, group_text, safe_topics and caveats. - House rules: only what the page gives; no sides on any political, religious or moral view; no diagnostic labels; nobody uninvited or deceived; a note mentioning threats or abuse puts safety first. `TableKit.reconcile` re-scores the table after the suggested swaps (they must lower the tension and never create a new side-by-side feud), checks that every high and medium hot spot is answered, that a calm verdict is not given over a side-by-side feud, that the group message does not name a feud's topic, and that every cited id is on the page. ## Notes - Suggestions for a calmer meal, not therapy or mediation. Sample names are made up. - Saved tables go to the signed-in user's own collection (`tables`), only when they press save.