Your table has a goblin in it now.

Every command, what it does, and how the pieces fit together.

Getting Started

Invite the bot, register a campaign, and let it build you a table.

Install Table Goblin Opens Discord's own invite screen. Pick your server and it's added with every permission below already ticked.

What the bot asks for, and why

Table Goblin needs the permissions below. Use the Install Table Goblin link above and they're all granted for you; if you add the bot some other way, tick them on its role yourself. Each one is load-bearing:

PermissionWhat breaks without it
Manage RolesIt can't create your campaign's two roles, so nobody can be granted access to anything.
Manage ChannelsNo category, no channels, no permission model — setup_channels does nothing.
Manage WebhooksCharacters can't speak. Every in-character post goes out through a webhook so it wears the character's name and portrait.
Manage MessagesYour pc::{strike} trigger stays in the channel instead of being tidied away after the character's post goes up.
Manage Threads, Create Public Threads, Send Messages in ThreadsThe in-character forum can't be built or posted in. Discord also refuses to give players thread permissions the bot doesn't hold itself.
View Channels, Send Messages, Read Message History, Add Reactions, Embed Links, Attach FilesThe everyday basics — it can't see, post, or attach maps and sheets without them.
Connect, Speak, Use Voice ActivityOnly needed so the campaign's voice channel can be set up with the right permissions.

Missing one? /tgm setup_channels checks before it builds anything and tells you exactly which permissions to enable on the bot's role (Server Settings → Roles), so nothing is left half-created.

Re-inviting wipes registered commands. If you re-authorise the bot and the slash commands vanish, that's expected — they come back when the bot next starts up. Give it a moment, then refresh Discord.

Two commands to a working table

/tgm campaign_create name [notes] [system]
admin only
Registers the campaign and makes you its first GM. Run it from any channel that isn't already part of a campaign. The name's slug is unique per server — another Discord running "Curse of the Crimson Vault" is none of your business. system lists Pathfinder 2e only for now; the field exists so more can join it later. It then opens your campaign's rules panel, and says so, so the private message isn't a surprise.
/tgm setup_channels campaign_name [mode] [include_voice]
gm only
Builds the two roles, the category, and the channels, then binds them. This is the only /tgm command that takes a campaign name, because the campaign has no channels yet to identify it by.
/tgm campaign_rules
gm only
Your table's rules, in a private panel: which optional rules you run, and how much of the game's uncommon and rare content your players may pick. See GM Tools. Worth setting before anyone builds a character, because the builder follows it from the first step.

What it builds

#icForum In-character. A forum so each thread is a scene, and an old scene can be closed without scrolling it away.
#oocText Table talk, scheduling, arguing about the rules.
#gm-privateText GM only — and explicitly denied to the Members role on the channel itself, so it stays private even if you later open the category up.
#character-sheetsText Somewhere to keep sheets that isn't the scene.
#dicerollsText For tables that like the dice kept out of the fiction.
#voice (optional)Voice Pass include_voice to get one. Members can speak in it; nobody outside the campaign can see it.

The two roles

RoleGranted byWhat it allows
TG-<campaign>-GM/tgm add_gmEverything a member can do, plus managing the campaign's channels, messages and threads.
TG-<campaign>-Members/tgm add_playerView, post, reply in forum threads, react, attach files, use the bot, and speak in voice.

Neither role carries a single server-wide permission. Everything is granted on the campaign's category, so a role can never confer anything outside its own campaign — and with @everyone denied on that category, nobody sees the campaign at all without one of them.

Prefer your own channels? That works too.

The category is a convenience, not a requirement. Any channel inside the campaign's category belongs to that campaign automatically — drop a new one in and it works immediately, no binding needed.

If you'd rather use channels you already have, skip setup_channels and bind them by hand. Binding is how you tell the bot which channel plays which role — where the map posts, which one is GM-private:

/tgm channel_add channel_type [channel]
gm only
Binds a channel as In-Character, Out-of-Character, GM Private, Character Sheets or Dice Rolls. Defaults to the channel you run it in. Text, forum and voice channels are all accepted.
/tgm repair_campaign [add_ic_forum]
gm only
Recreates anything missing on an existing campaign and reapplies the current permission model.

Commands work inside forum threads because the thread's parent category resolves even though the thread's own id is bound to nothing. That's the main reason the category matters.

Discord cannot convert a text channel into a forum. If you're upgrading an older campaign, repair_campaign add_ic_forum:true creates a new forum and leaves your old IC channel in place with its history intact, simply unbound. Delete it yourself when you're ready.

GM Tools

Everything under /tgm — and every one of them is gated.

Every /tgm command needs a campaign GM or a Server Administrator, and every one except campaign_create must be run from inside that campaign's own channels. The channel is how the bot knows which campaign you mean, which is why none of them takes a campaign name you could point somewhere else.

People

/tgm add_gm user
gm only
Makes another user a GM of this campaign and gives them the GM role.
/tgm remove_gm user
gm only
Revokes a user's GM status for this campaign and takes away the GM role. Works even if they've left the server.
/tgm add_player user
gm only
Grants the Members role — this is what gives access to the campaign's channels.
/tgm remove_player user
gm only
Takes it away again. The bot only ever removes a role it was asked to remove, so assigning these by hand in Discord stays perfectly valid.

GM narration persona

/tgm persona [name] [token] [token_url]
gm only
Sets or updates the campaign's own narration identity — a name and avatar for the gm:: chat trigger, the same way an NPC has one. Run it with no arguments to see what's currently set. One persona per campaign, shared by every GM at the table, not one per person.

Table settings

/tgm auto_saves enabled
gm only
Chooses who rolls a player's saving throw. Off (default): the player gets a button and rolls their own — most of the fun of failing a save is failing it yourself. On: the bot rolls for them, to keep things moving. A creature's save is always rolled by the bot either way.
/tgm environment
gm only
Where the party is — forest, jungle, aquatic, settlement, underground, snow, stone… (pick every tag that fits). Feats that only work in certain surroundings read it: Woodcraft in a forest, Rock Runner on stone, Pelagic Aptitude underwater. A fight can override it with /tge environment.
/tgm list_campaigns
gm only
Every campaign in this server where you hold GM or admin rights.
/tgm delete_campaign confirm_campaign_name
gm only
Permanently deletes the campaign bound to this channel — every sheet in it, plus its channels, category and both roles. You must type the campaign's real name to confirm. Cannot be undone.

Campaign rules

/tgm campaign_rules opens a private panel — dropdowns and buttons, not a wall of arguments — holding everything about how your table plays. Nothing is saved until you press Save, and only the GM who opened it can touch it.

/tgm campaign_rules
gm only
Runs itself automatically right after campaign_create, and is there whenever you want to change your mind.
/tgm levelup
gm only
Opens the next level to your players: raises the party level by one and tells the channel. Players can't level a character past the party level, so you can't be surprised by someone running ahead. Set it to any level in the panel's Party level dropdown instead (a campaign starting at level 10 sets it once and lets everyone build up to it). It starts with no limit.

Optional rules

Tick the ones your table uses. The character builder and level-up follow them from the start, so a player builds the right character the first time rather than patching it afterwards.

RuleWhat the bot does with it
Free ArchetypeAn archetype feat at every even level. Nothing to pick at 1st — the builder says so, and the first one (a dedication) arrives at 2nd through /tgchar levelup.
Ancestry ParagonA second 1st-level ancestry feat in the builder, then another at every odd level.
Skill ParagonAdds a Paragon Skill step: the character is trained in it (or trains something else if they already were). At 3rd, 7th and 15th an extra increase for that skill is applied for you, and every common general feat requiring it is granted as they qualify.
Dual ClassAdds a Second Class step. The character gets both classes' features and specialisations, a class feat from each class that grants one at 1st, both key attribute boosts, the higher Hit Points, the better proficiencies, and both spellcastings if both classes cast.

Uncommon and rare

Common is always available. Uncommon and rare are two switches, both off to begin with — which is stricter than it sounds, since only 8 of the game's 50 ancestries are common. Turn on what your table allows.

Then there are ancestry exceptions: two dropdowns, one for the 20 uncommon ancestries and one for the 22 rare ones. An exception flips the switch for that one ancestry. With rare off, ticking Poppet makes Poppet available; with rare on, ticking Poppet takes it away. An ancestry you allow brings all its heritages and ancestry feats with it whatever their own rarity — and the panel tells you exactly how many uncommon or rare ones that means before you save.

Everything else follows the two switches. Backgrounds, heritages outside an allowed ancestry, feats, spells and items. Unique content is never offered at all — that is a GM handing it over by name.

Treasure tables

Both of these roll on PF2e's own 40 per-level treasure tables — with their real dice and weightings, so commoner results stay commoner.

/tgm loot level [permanent] [consumable]
gm only
Rolls a find. About one result in ten names a rune, a material or a family rather than a single item — Cold Iron Weapon (Standard-Grade). Those aren't lookup failures: the table is telling you what kind of thing was found and leaving the specifics to you.
/tgm treasure level [party_size]
gm only
A whole level's budget from Party Treasure by Level — every permanent item, every consumable and the coin. This is a level's worth, not one encounter's, and it's the figure that answers "is the party on track?"
/tgm give alias [weapon] [armor] [item] [rune] [quantity]
gm only
Gives a character something outside the normal loot/purchase cycle — no coin changes hands. quantity gives several at once (five Healing Potions in one command). A rune given together with weapon/armor applies directly to it for free; given alone it's granted as a loose rune, free for the player to apply themselves later via /tgchar weapon edit/armor edit's own "own it already" discount.
/tgm approve_rebuild alias [revoke]
gm only
Approves a character for a full rebuild (new ancestry, background, class…). The player then runs /tgretrain kind:Full rebuild; the approval is used up when the rebuild is finished.
/tgm starting_gear alias
gm only
Resets an existing character to a fresh starting-gear shopping trip — for one built before that shipped, one who never got the chance, or one a bug left stuck partway through. A real reset: no gate on the character's current coin, grants a fresh 15gp purse. The character's own player does the shopping, not the GM. For reopening a trip that just closed early or timed out, see /tgchar starting_gear below.

Characters

Build a character without leaving Discord, or bring one in from Pathbuilder.

Building a character

Premium soon. The character builder and battle maps will become premium features. They are free while we test them.

/tgchar build walks you through ancestry, heritage, background, class, boosts, skills and feats, one dropdown at a time, saving as it goes. A companion or familiar a class or feat grants gets its own name-and-species step right there in the wizard, not a separate command afterward. A background that asks you something — which skill (Hermit), which feat (Professional Letter Writer), a skill that decides the feat (Martial Disciple: Acrobatics brings Cat Fall, Athletics brings Quick Jump), an energy resistance (Energy Scarred), or a ranged weapon you treat as one category simpler (Student of Archery) — asks it right on the background step, each option showing what it grants. Anything that grants alchemical formulas gets a Formulas step with a dropdown per source — an Alchemist, a hobgoblin's Alchemical Scholar, an Investigator's Alchemical Sciences, or a background that grants Alchemical Crafting. A new character finishes with real starting wealth (15gp) and a searchable shopping-cart vendor for common starting gear, opened automatically right after creation — 7 specialist vendors (Melee Weapons, Ranged Weapons, Armor, Shields, Adventuring Gear, Alchemical, Scrolls). The top line shows what you're actually trained in, grouped by rank, and each weapon/armor result is flagged ⚠️ Not proficient if you aren't trained in it yet (shields have no proficiency of their own to check) — each result also shows real stats (a weapon's damage die/category/group/traits, armor's AC/Dex cap/Str/type, a shield's AC/Hardness/HP) rather than just its price. Search each vendor, add matches to a cart, remove one with the cart's own "Remove an item" dropdown if you change your mind, and check out once at the end. Ammunition is sold, priced, and tracked in packs of 10 (real Core Rulebook pricing) — each click is one pack, and the cart spells out the real round count.

/tgchar build name alias [assist_me] [level]
self / gm
Starts a build, or resumes one already in progress under the same name/alias. assist_me makes the wizard visible to the whole table instead of just you, for a GM walking a new player through their first build. level (1–20) builds a higher-level character: after the 1st-level build, the bot walks you through levels 2 to that level, one level-up at a time, within the party level your GM has set. What you are offered follows the campaign's rules (/tgm campaign_rules) — common always, uncommon and rare where your GM allows them, and whichever optional rules your table runs add their own steps.
/tgchar starting_gear [alias] [player]
self / gm
Reopens your still-open starting-gear shopping trip if it closed early or timed out — no GM needed. Only works while it's genuinely still open; once you check out or click Done shopping, this refuses and points to /tgm starting_gear for a real re-do.
Example /tgchar build name:Manyjurr alias:manyjurr

A brand-new character, visible only to you.

/tgchar build name:Manyjurr alias:manyjurr assist_me:true

The same build, shown to the whole table — for a GM walking a new player through it.

Three steps of the real builder.

The class step of the character builder
Each step is one message that edits itself. Everything chosen so far is listed, with Back, Next and Abandon always in reach.
The attribute boosts step
Boosts are spent from dropdowns, and the running scores update as you go.
The spells step of the character builder
Cantrips and spells are picked from dropdowns that show how many are still to choose.

A build resumes exactly where you left off. Run /tgchar build again with the same name and alias and it picks the draft back up — nothing is lost to a closed laptop or a bot restart.

A feat that grants an innate cantrip asks for it on the spot. Roughly 60 ancestry feats and heritages work this way — Open Mind lets a Kashrishi cast any occult cantrip, Arcane Tattoos lets a Human pick from seven named schools, Oracular Samsaran asks a tradition first and then a cantrip from it. Picking one immediately asks its own follow-up right there in the same step, the same way Assurance already asks for a skill.

Deity: type the name, pick the rest. A Cleric or Champion types their deity's name (✍️ Deity name) and picks what the deity decides from plain lists — the favored weapon (🔍 to search every base weapon, plus Fist, Claw and the other unarmed favorites), the divine skill (you become trained in it) and sanctification (the button cycles None → Holy → Unholy). A Cloistered Cleric also picks Domain Initiate's domain from all 64. The bot never lists deities. A Cleric then gets a Deity Spells step: 📖 Deities on AoN links out to look yours up; a real deity's exact name can ✨ fill its spells in, otherwise pick a rank, a tradition and the spell (one per rank, most deities add three). Each joins your known spells once you can cast its rank. Forge-Blessed Dwarf asks which of its seven spells on the heritage step.

Signature spells (Bard, Oracle, Psychic, Sorcerer, Summoner). From 3rd level, once you've chosen your spells the Spells step asks for one signature spell per rank — cast freely heightened, with its lower ranks too. A 1st- or 2nd-level build has none yet (the rules give them at 3rd). Reset signature picks starts over.

Non-spell ancestry choices work the same way. Kobold's Draconic Benefactor — one shared choice of 40 dragons, made once no matter which of its 3 feats you take first — sets your breath weapon's real damage type, shape and save, plus a matching resistance. A damage-type resistance pick and an unarmed-strike-form pick (claws, jaws, tails, and more) both ask inline the same way. /tgchar ancestry_choice re-asks any of these for a character built before this shipped, or to change a pick later.

Surki get one extra step: Magiphage. Every Surki's own automatic ancestry feature picks which tradition (arcane/divine/occult/primal) all of their spells and magical actions use — asked right after ancestry, since a Surki feat like Sequestered Spell depends on the answer. Yaoguai, Anadi and Kitsune builds also get a real, trackable shapeshift form — see /tgchar shape below.

Importing and exporting

Already have a sheet? Bring a Pathbuilder character in, or move one between tables with Table Goblin's own export.

/tgchar create player name alias [pathbuilder_id] […]
self / gm
Creates the character. Give a pathbuilder_id and the whole sheet imports immediately. The alias is the short handle you'll use in every other command and in chat — keep it short and typeable.
/tgchar import source [alias] [file] [pathbuilder_id] [sync]
self / gm
Brings a character in and makes it your active character. Pathbuilder: attach Pathbuilder's own Export JSON file (safest — no mix-ups with whatever is in your account's one export slot) or give its pathbuilder_id. Table Goblin export: attach a file from /tgchar export to bring that whole character, companions and all, into this campaign.
/tgchar import source:Pathbuilder sync:Update existing…
self / gm
Re-imports after a level-up. Keep my edits deliberately preserves live play data: your coin, items you found, spells learned in play, your current HP, and any manual GM corrections. Discard my edits is the escape hatch — it throws all of that out and takes Pathbuilder's word for everything.
/tgchar export [alias]
self / gm
Sends you a file holding the whole character and its companions. Import it into any campaign with /tgchar import source:Table Goblin export — handy for moving a character between tables. A file edited after export can only be imported by the GM.

Companions come along. Pass companion_name/companion_alias or eidolon_name/eidolon_alias at creation and they're linked to the character. An eidolon always displays its summoner's HP, because that's whose hit points it actually spends.

Companions, eidolons, familiars, constructs, and followers

A companion or familiar a class or feat grants during /tgchar build gets its own step right in the wizard — nothing further to run. Adding one to a character built another way, or one imported from Pathbuilder without companion_name/eidolon_name at creation, uses /tgcompanion instead.

/tgcompanion add kind [companion_alias] [companion_name] [alias] [player]
self / gm
The front door for all 6 companion kinds. kind Animal Companion or Eidolon attaches a bare stub directly here (needs companion_alias/companion_name). Familiar, Construct, Follower, or Hireling instead points you at that kind's own one-step command below — Discord can't collect each kind's different follow-up fields in a single command, so add just routes you there.
/tgcompanion set_eidolon key_ability primary_strike_name primary_choice primary_damage_type secondary_strike_name secondary_damage_type [eidolon_alias] [player]
self / gm
Configures an Eidolon already created with add: Strength- or Dexterity-based, and the shape of both unarmed attacks. Applies immediately — no separate sync needed.
/tgcompanion set_familiar familiar_alias name ability_1 ability_2 [specific] [ability_3…6] [alias] [player]
self / gm
Creates or updates a Familiar in one step — name, a named variety if it has one (e.g. "Faerie Dragon"), and its abilities. Run it again on the same familiar_alias to change any of that later.
/tgcompanion set_construct construct_alias name [size] [alias] [player]
self / gm
Creates or updates an Inventor's Construct Innovation. Its tier (Prototype/Advanced/Incredible/Paragon) is read from the character's own feats, not asked here.
/tgcompanion set_follower follower_alias name follower_type [alias] [player]
self / gm
Creates or updates a Captain's follower. follower_type is Adept, Berserker, Medic, Scout, Sharpshooter, or Shieldbearer — run it again on the same follower_alias to change type later.
/tgcompanion set_hireling hireling_alias name skilled [skill] [alias] [player]
self / gm
Creates or updates a hired downtime NPC (GM Core) — no combat stat block. Unskilled is untrained at everything; Skilled names one skill it's Expert in and stays untrained elsewhere.
/tgcompanion active_follower follower_alias [alias] [player]
self / gm
Chooses which recruited follower fights alongside you right now — a Captain can build up several over time, but only one is active at once.

An Eidolon is a two-step setup; everything else isn't. add creates the Eidolon stub and reads its family from the Eidolon subclass you already picked, then set_eidolon configures it. set_familiar, set_construct, set_follower, and set_hireling each create and configure in one call.

The sheet

/tgchar sheet opens an interactive sheet with five tabs — Overview, Combat, Spellbook, Gear, Companions — the Overview shows your background and deity at a glance. Only you see it and only you can click anything — pass show_all:true to post it visibly for the whole table instead.

Rolling happens through dropdowns rather than more commands. The Combat tab has skills, saves and strikes (plus a separate dropdown for companion attacks). Spells are shown and cast heightened to their slot's rank (cantrips and focus spells to half your level) — more damage, area or targets, from each spell's own heightened entries; the (heightened) target count is applied, and an effect that asks you something at cast time prompts you privately. A lasting effect goes on the creature the spell targets (the ally you cast Heroism on, the foe Ray of Frost crits), as its attack or save allows; cast with nobody named, you're asked who it affected. A spell that costs 1 to 3 actions (Force Barrage) is listed once per action count, and rolls what the extra actions add. Bards, Oracles, Psychics, Sorcerers and Summoners pick a signature spell per rank from 3rd level, castable heightened from any higher slot. A Sorcerer's bloodline adds its granted spells and bloodline focus spells on its own (Draconic, Elemental and Genie are asked their exemplar / element / type), and casting a bloodline spell offers its Blood Magic, applied for real. The Spellbook tab lets you pick a rank and then a spell — casting consumes the correct slot automatically, applies any lasting buff or debuff, and attaches an Uncast button for a mis-click.

Four tabs of the real sheet.

The Overview tab of a character sheet
Overview: the whole character at a glance, with a dropdown to roll any skill.
The Combat tab of a character sheet
Combat: defenses, saves, Perception and strikes, with saving throws one click away.
The Spellbook tab of a character sheet
Spellbook: ranks and spells, each one castable from a dropdown.
The Companions tab of a character sheet
Companions: an eidolon, familiar or animal companion gets its own tab.

Using, investing and giving gear

The sheet's Gear tab has three buttons. Use Item spends a consumable from your pack and asks who it is for — you, or anyone in the encounter (the party outside one). Its activation is posted as your character, a stated healing roll is added to the target's Hit Points, and the item's effect goes on their sheet: an Antidote's bonus against poison, an Eagle Eye Elixir's Perception, temporary Hit Points. What the bot can't read is listed as not tracked so you can apply it by hand. {item} does the same from chat, as a dropdown or {item: healing potion}.

Invest invests or divests a magic item, up to ten (✨ marks them). Only invested items give their bonuses: a Cloak of Elvenkind adds to Stealth while it is invested, and Handwraps of Mighty Blows apply their runes only then. An item in the pack gives nothing.

Equip picks the armor you wear, the shield you hold ready and the weapons in your hands; the top of the tab shows them and marks each one. Give / Drop hands any item, or part of a stack, to an ally or throws it away (a backpack goes with everything inside it). Stow moves gear, weapons and armor into a container you carry (a backpack, satchel, haversack, sack...) or back onto your person. For a stack of more than one, it asks how many to move and leaves the rest where it was. The Gear tab's Bulk line totals what you carry: encumbered above 5 + your Strength modifier (Clumsy 1 and −10 feet to all Speeds, applied for you), and 10 + your Strength modifier is the most you can carry. A container holds only what its capacity allows, and the first 2 Bulk in a backpack don't count against you. Getting something out of a pack takes two Interact actions (take the pack off, take it out) before the action to use it, which the bot says when you use it (a bandolier is worn, so that's one). Tools past 2 Bulk on your belt are flagged: stow the extra. Armor you're wearing weighs 1 Bulk less than listed; armor in your pack counts in full. An Inventor's Segmented Frame innovation counts as light Bulk. A Bag of Holding is a Spacious Pouch (the Remaster name) and its contents weigh next to nothing. Over the most you can carry, you can't move on the map.

Talismans aren't used, they're affixed: pick one in Use Item (or {item}) and choose which of your weapons, armor or shields it goes on — only gear the talisman fits is offered. Affixing takes ten minutes and a repair toolkit; if nobody in the party has one, the bot says so and refuses, and a toolkit someone else carries counts. A second talisman on the same item deactivates them all, so it asks first: affix anyway, or swap the old one back into your pack. The Gear tab shows what is on each item, and its Talismans button activates one (its text is posted, it is used up and any bonus goes on you) or takes it off again.

Injury poisons go on a weapon: pick one in Use Item (or {item}) and choose the weapon to coat. The next Strike with it that hits and deals damage exposes the target, who rolls the poison's save as usual, and then the coating is gone; a miss leaves it on.

Give, or {give} / {give: 3 rations} in chat, hands loose gear to another character in your party. Weapons and armor on the sheet go through the GM.

Coin

Imported from Pathbuilder once, then it's yours. PF2e coinage is decimal, so the bot keeps your purse in the shape you're holding it — adding 5 sp to 3 sp gives you 8 sp, not 0.8 gp. It only breaks a purse down when it has to, which is exactly the moment a real table would make change.

/tgchar money show [alias]
self / gm
What you're carrying, and the total in gold.
/tgchar money add amount · money spend amount · money set amount
self / gm
Amounts read naturally: 50gp, 2gp 5sp, 3 silver. Don't put a sign on it — the command name already says which way it goes.

The rest

/tgchar active alias
self / gm
Sets which character pc:: and bare commands mean.
/tgchar deity [alias]
self / gm
A panel for a character's deity: the spells it adds to a cleric's list (search any tradition), the favored weapon and the sanctification. Use it after importing a Cleric from Pathbuilder, which has no field for deity spells.
/tgchar set_avatar [image] [image_url]
self / gm
The portrait on webhook posts and the token on the battle map. Upload a file or paste a link — both work.
/tgchar learn_spell rank name spell_list
self / gm
Adds a spell outside Pathbuilder. Survives a routine sync.
/tgchar armor set category armor_name
self / gm
Recomputes AC from the real armour entry. Switching from armor you own unequips it — it stays in your inventory, just no longer active.
/tgshield set shield
self / gm
Which real shield your Shield Block reaction uses — its real Hardness and HP (tracked: Shield Block with the hit's damage lowers them; at half it's broken — no blocking, no AC when raised — until Repaired in a breather), for any class Shield Block works for, not just the two that grant it free. Needs the feat (or a class that grants it) first; its own root since /tgchar was already full.
/tgchar weapon set weapon [hand]
self / gm
Equips a weapon already in your inventory to a hand. Real data decides one- vs two-handed — a Greatsword always takes both hands, a Bastard Sword can go either way. An empty main hand fills automatically; if it's already full and you don't say which hand, the bot asks with buttons instead of erroring. Equipping into an occupied hand unequips whatever was there.
/tgchar weapon edit weapon · armor edit armor
self / gm
An interactive rune editor with real prices (runes work in play: damage, persistent damage, critical-hit conditions with the target's save rolled, Keen's 19s, Fortification's flat check against critical hits) — Potency, Striking/Resilient, and add/remove property rune dropdowns, rebuilt fresh after every change. Upgrading a tier only charges the price difference from your current one (the real crafting rule). Already own a loose rune of that name? It shows "own x#" and applies for free, consumed from inventory. The item's name (and its linked Strike) auto-update to the real runed form, e.g. "+1 Striking Flaming Shortsword". Handwraps of Mighty Blows (worn, not wielded) rune-edit here too, even though it isn't a weapon — its runes benefit every unarmed Strike you have.
/tgchar weapon remove weapon · armor remove armor [sell] [keep_runes]
self / gm
Deletes it from inventory, with a Yes/No confirmation first — also unequips it and deletes its linked Strike. Property runes return to your inventory by default (pass keep_runes:True to let them go with it). sell:True credits half the item's real value instead of just discarding it — fundamental runes always count toward that, a property rune only if you kept it on.
/tgchar strike new weapon [alias]
self / gm
Builds a real, rollable Strike from a weapon already in your inventory (autocompletes to just what you own) — resolves its die size, traits, and any runes already on it, then computes real attack/damage bonuses the same way a manual stat edit does. Re-run it after editing runes (/tgchar weapon edit) to refresh the same strike in place. Every character also always has a "Fist" strike (1d4 bludgeoning, agile, finesse, nonlethal, unarmed) with no setup needed — this command is only for weapons.
/tgchar strike edit strike [name] [ability] [hand] · strike remove strike
self / gm
Rename a Strike, link it to an ability (for reference only — something like Devise a Stratagem still asks which Strike at cast time) or tag which hand it's held in (doesn't override a real weapon's own tracked hand). remove deletes the Strike outright without touching any linked weapon in inventory.
/tgchar resist damage_type kind [amount]
self / gm
Permanent resistance, weakness or immunity.
/tgchar ancestry_choice choice
self / gm
Answers a pending ancestry/heritage choice (a dragon type, a resistance, a strike form) for a character built before this shipped, or to change a pick later — the build wizard asks these inline for a fresh character. choice autocompletes to whatever's actually still open; Kobold's Draconic Benefactor shows once regardless of which of its 3 feats you hold.
/tgchar shape
self / gm
Switches a shapeshifting ancestry between its own two real forms — Yaoguai's Humanoid/Natural, Anadi's Human/Spider, Kitsune's true/alternate form. Lists only what this character's own ancestry actually has. A Yaoguai's own Morphic Strike only shows up on the sheet while in natural form.
/tgchar death_trigger note [when] [alias]
self / gm
A reminder the bot posts when this character — or one of its thralls or summons — dies. PF2e has a great many death-triggered effects and most are feat-specific, so rather than pretend to know them all, you write the reminder and the bot shows it at the right moment. Necromancers are the obvious case. Pass "" to clear it.
/tgretrain kind [old] [search] [alias]
self / gm
Retrain a skill, general, class or ancestry feat (7 days of downtime). Full Rebuild redoes the whole character in the builder once your GM has approved it with /tgm approve_rebuild (your items and coin are kept). Pick the feat to give up, then choose any feat you qualify for at that same level; the sheet recalculates and your GM gets a note. A Signature Spell can be swapped for another of the same rank, and a Repertoire Spell (a Bard, Oracle, Psychic, Sorcerer or Summoner's, or a Bard or Beast Gunner archetype's) retrained into another of its rank, a cantrip too — granted spells (bloodline, muse, mystery) can't be.
/tgchar levelup — spell slots
self / gm
A spontaneous caster (Bard, Oracle, Psychic, Sorcerer, Summoner) also gets one free spell swap per level: swap one repertoire spell for a different spell of the same rank, a cantrip too — granted spells (bloodline, muse, mystery) stay, and giving up a signature spell asks for a new one. Declined or unused, it's offered again after the night's rest. The spells your class or subclass grants come with the build: a Bard's muse spell and compositions, a Druid's order spell, an Oracle's mystery spells, a Magus's conflux spell, a Psychic's psi cantrips, a Summoner's link spells, a Cleric's domain spell (a Champion picks its devotion spell from the Combat menu). For characters built with the bot, a level-up adds the class's new spell slots and raises spellcasting proficiency on schedule, and the spell DC and attack follow. A prompt then asks for each new slot's spell, one at a time (pages, or 🔍 search): a prepared caster prepares it in that slot, a spontaneous one adds it to the repertoire. A Cleric's deity spell of that rank is listed first. Later leaves the rest; /tgm break overnight offers them again. Archetype casters are asked too: a Bard or Beast Gunner repertoire, a Necromancer's dirge and a Hedge Mage's keepsake fill first, then a prepared archetype prepares its slots.
/tgchar levelup — alchemical formulas
self / gm
Every source of formulas is asked for in its own step at level-up: an Alchemist's Formula Book (2), a hobgoblin's Alchemical Scholar (1 of the new level), an Investigator's Alchemical Sciences (1 elixir or tool, 2 with Discoveries), and the feats you pick that level — Alchemical Crafting (4 first-level), the Alchemist Dedication (4 more), and the Herbalist and Poisoner Dedications (which carry Alchemical Crafting once). Formulas you already know aren't offered again, and what you pick is what the daily-prep panel draws from.
/tgm break duration [count]
gm
Opens a break. breather × count: that many 10-minute breaks, one choice per player per break (a breather of 3 lets a healer Treat Wounds three patients). downtime × count: that many days. overnight × count: the party rests and prepares at once (below). explore: travelling — each player picks an exploration activity (Avoid Notice rolls Stealth for initiative, Scout gives the party +1 to initiative, Defend starts the fight shield raised; the panel's GM-only Search check rolls the Searchers' Perception secretly against a hidden trap, hazard, creature or haunt — the Explorer feats notice their kind without Searching; a found trap can be shown on the battle map with one button). end closes it. A panel lists who has spent what; the open break is saved.
/tgbreak
player
Your choice in the open break, privately. Breather: Refocus (+1 Focus Point), your 10-minute recovery activities (Treat Wounds…), Identify an item in the party's loot (magic or alchemical), Repair an item you carry (a shield's HP come back), or rest. Treat Wounds immunity (an hour; 10 minutes with Continual Recovery) runs on the campaign's in-game clock, which breaks move on. Downtime: how many of your days, then Earn Income (a trained skill or Lore and a task level; one check, the coin added for you), Long-term rest, Retrain (/tgretrain) or something the GM handles.
/tgm break overnight [count]
gm
The whole party (or one character) rests and prepares, once per night: the night's rest (Hit Points equal to Constitution modifier × level; fatigued ends, doomed and drained drop by 1), then a day's preparations: spell slots, prepared spells, Versatile Vials and once-per-day feats refresh. Spell slots left empty since a level-up are offered again. A prepared caster then gets a panel to change today's prepared spells: pick one, then its replacement (pages, 🔍 search), as many as you like. A higher slot can take a lower-rank spell, heightened. A Cleric, Druid or Animist picks from their tradition's whole list (a Cleric's deity spell first); a Wizard, Magus, Witch or Necromancer only from their own book of known spells. Alchemists, Herbalists and Poisoners then get a panel to choose the day's infused items from the formulas they know — an Alchemist up to 4 + Intelligence of any alchemical consumable, a Herbalist 4 healing items (2 outside the wilderness; 6 or 8 with Advanced Herbalism), a Poisoner 4 poisons (6 or 8 with Advanced Poisoncraft). With several sources you get the highest count, not the sum, in any mix they allow. The items go into the inventory and are destroyed at your next daily preparations.
/tgchar list · sheet · print · delete · update
self / gm
The usual housekeeping. update takes an expression like str_score=18 for a manual correction, and those corrections survive a sync.

Playing in Character

The bit that stops feeling like using a bot.

You don't have to run a command to act. Type a prefix straight into any of the campaign's channels and Table Goblin posts as your character, through the same webhook the sheet uses. The dice logic is identical either way — there's no separate "chat version" of a roll.

<prefix>::["message"]{action}
npc::<Display Name>::["message"]{action}
You typeWhat happens
pc:: I stand my ground.Speech, posted as your active character.
pc::{strike}A narrative default, plus a dropdown to pick the strike and a target.
pc::"grins and swings"{strike}Your own narration, then the same dropdown.
alt2::{cast}The same, but as your second companion.
npc::Old Man Withers::"You'll regret that."{strike}A GM narrating an NPC by its real name.
gm::"The door creaks open..."Narration as the campaign's own GM persona (set with /tgm persona).

Prefixes

PrefixResolves to
pcYour active character.
alt / alt2 / alt3Its 1st / 2nd / 3rd companion. An eidolon is always alt.
companion · eidolon · familiarThat specific companion type.
any alias you ownThat character directly, whatever's active.
npc::<Name>::GM only — voices any creature in the campaign.
gmGM only — the campaign's own narration persona, set up with /tgm persona.

Your trigger message is tidied away once the character's post goes up, so the channel reads as fiction rather than as commands. A rejected attempt is left alone so you can see and fix it.

Typo in what you said? Right-click your post, choose Apps → Edit post, fix the text and save — within 10 minutes, and only the person who typed it can. Your speech and narration lines are editable; roll results never are, so a strike's outcome and damage stay exactly as rolled. Discord marks the post “(edited)”.

Nothing happened? Chat triggers only work in a campaign's own channels, and stay completely silent anywhere else — even for a perfectly formed pc::{strike}. Because any word:: counts as a candidate, the bot has to stay out of ordinary server conversation entirely. Also: {strike} and {cast} need a live encounter in that channel, since the target list comes from the roster.

What it looks like

Choosing a strike from a dropdown
Type pc::{strike} and pick the strike. It's rolled as your character.
The result of casting a spell
Casting reports the spell's effect and puts any lasting bonus on the right character.
The result of a Grapple
Skill actions like Grapple roll against the right defense and apply the result.

Maneuvers, grip and the action list

{action} opens a dropdown of everything your character can do beyond a plain Strike or spell, sorted A–Z with your starred favourites first. Once that list is longer than one page it becomes category-first — pick a category (each shows its count), then the action, with a ◀ All categories entry to back out. The sheet's Combat tab uses the same list.

Everyone has a Skill Actions category: Trip, Grapple, Shove, Disarm, Reposition, Escape, Demoralize and Change Grip, plus Feint once you're trained in Deception. A Fighter who took Combat Grab gets that too — it is its own action (a Strike that grabs on a hit), not a Grapple by another name. Apart from Feint, untrained characters may attempt any of them: the remastered rules list no training requirement. Your favourites come first: an action you starred (☆ Favourite on a /tgcheck result, or on the private “✅ … used.” note after using one from this dropdown) is listed at the top, marked ⭐, here and on the Combat tab — above the categories once the list is grouped.

ActionWhat it asks, and what it does
Trip · Shove · Disarm · GrappleA target. Athletics against the right defense, with the effect applied on the result. Each one is an attack: it takes and adds to your multiple attack penalty.
EscapeThe DC of what holds you and which statistic to use (Athletics, Acrobatics or an unarmed Strike). Success frees you; a critical success also lets you Stride 5 ft; a critical failure locks Escape until your next turn. Also an attack.
Combat GrabA melee Strike keeping a hand free. On a hit the target is Grabbed until the end of your next turn.
Change GripTell the bot what is in your hands: empty, one hand on a weapon, both hands, a weapon and a shield, or a weapon in each hand.

Why Change Grip exists. Trip, Shove, Disarm, Grapple and Combat Grab need a free hand, and the bot can't know what is in each hand until you say, so it asks you. It is opt-in: until you set a grip, nothing is warned. Once you have, a maneuver with no hand free tells you so instead of rolling — tick The hand is free anyway to override it. A weapon with the maneuver's own trait (a trip weapon can Trip, and so on) works with no hand free, and an agile one takes the smaller multiple attack penalty.

Creatures & NPCs

An official creature from the bestiary, or one you made up.

You need something to fight before you can run a fight. Everything here is GM-only — creature stat blocks are the GM's to know.

/tgnpc add creature alias […]
gm only
Pulls a creature from the bestiary by name and registers it under a short alias. Pass several comma-separated aliases to add a whole pack at once. The reply is private to you, since it shows the creature's stats. Give target_level (and a tier) and it also suggests the Building Creatures numbers for that level, with an Apply suggested stats button that sets level, HP, AC, Perception, saves and every Strike's attack and damage for you, and the matching /tgnpc edit line to paste if you'd rather type it.
/tgnpc suggest level [tier]
gm only
Stuck for an opponent? Suggests creatures at a level.
/tgnpc add_custom alias name hp ac […]
gm only
Build one from scratch when the bestiary hasn't got it.
/tgnpc strike_add alias name to_hit dice die damage_type
gm only
Give a custom creature something to hit with.
/tgnpc sheet alias · edit · skill_set · resist · list · remove
gm only
Inspect and adjust. sheet replies privately — the whole point of hiding creature HP from players would be lost otherwise.
/tgnpc tags alias
gm only
What a creature is for the few feats that care beyond its traits: bat, rat, wolf, reptile, non-sapient dragon, politician, alghollthu (and their servants). Speak with Bats, Voice of the Night, Reptile Rider, Friend of the Family and Striking Retribution then apply against it. Works on any character in the campaign, not just creatures. When you add a creature whose name sounds like one (a Giant Bat, a Dire Wolf), /tgnpc add offers the tag with one click — it's never applied without you.
/tgnpc set_avatar alias [image] [image_url]
gm only
Sets an NPC's token image (the picture on the map and beside its speech). Kept in the GM channel, not the Character Sheets channel, so players never see it there; with no GM channel set up it stores nothing. image_url:"" clears it.

Encounters

Initiative, conditions, and the rules that run themselves.

/tge start [name] [add_party] [loot] [map_slot] [add_enemies]
gm only
add_party pulls in every PC and their companions automatically. add_enemies takes your creatures' aliases, comma-separated (goblin1, goblin2, boss), so a whole fight can be written ahead of time and pasted in; only how many joined is shown to the table, and anything that didn't match is reported to you alone. Set loot:true and the fight pays out when it ends.
/tge add alias [side] [player]
self / gm
Adds a character, companion or creature to the running encounter, mid-fight included. Comma-separate several aliases to add a group at once. side is Party, Enemy or Neutral; creatures default to Enemy and characters to Party.
/tge roll [alias]
self / gm
Roll initiative. /tge init sets a value by hand; /tge tiebreak settles a clash.
/tge begin
gm only
Locks the order and starts round one.
/tge next · prev · delay after
turn / gm
Advance the turn. Delay puts you back directly after whoever you named — not at a fixed spot — and expires harmlessly at end of round if they never act. On a map, the turn message carries a small view of it beside the turn text: click it to see the whole map.
/tge damage alias amount [damage_type] [critical] [nonlethal]
gm only
Applies damage through resistances and weaknesses.
/tge heal alias amount
self / gm
The other direction.
/tge condition alias name [value]
gm only
Applies a PF2e condition, with its value where it has one.
/tge resist alias damage_type kind duration [amount] [minutes] [owner_alias] [sustain_of]
gm only
A fight-only resistance, weakness or immunity on top of the sheet's own — a spell's resist energy, a hazard's weakness. duration picks how long it lasts (end of turn, end of next turn, minutes, while a spell is sustained, until dismissed); choose Remove it with the same type and kind to take one off again.
/tge reload alias
self / gm
Load a crossbow, firearm or sling (spending its reload actions), or ready a special arrow for a bow (free — it's nocked as part of the Strike). Pick the round from what you carry, and optionally coat it with an injury poison. A round that forces a save (Freezing, Terrifying, Rattling, Black Tendril, Glue...) rolls it for the target and applies its condition. Only ammunition you carry that fits the weapon is offered, and a crossbow, firearm or sling with nothing loaded can't fire until you reload it. The next Strike with that weapon fires it: its extra damage, persistent damage and splash are rolled for you (Rhino Shot's force, Garrote Bolt's bleed, Elemental Ammunition's fire), a round that changes the damage type changes it, and a poisoned round exposes the target on a hit.
/tge affliction expose alias affliction [dc]
gm only
Expose a creature to a poison, disease or curse that didn't come from a hit — a trap's needle, a drink, filth fever from a sewer. affliction searches every poison and disease item and every affliction in the bestiaries. The bot rolls the save and, if it fails, tracks the stages (below). dc overrides the listed DC.
/tge affliction cure alias affliction · list alias
gm only
cure ends one early (Treat Poison, a cure, a counteracted curse) and removes its conditions; list shows what a creature has and its stage.
/tge status [detail]
player
The current order, who's up, and everyone's state.
/tge environment
gm only
This fight's own surroundings, overriding the campaign's (/tgm environment) — the ambush in the swamp while the party is travelling through plains. Pick Use the campaign's environment to go back.
/tge end
gm only
Ends the fight, reports the damage taken, banishes thralls and summons, and pays out the loot if you flagged it. If the fight had a map, offers to save it to a library slot first (you pick the slot; a used one is replaced). Then asks — as its own Yes/No confirmation — whether to purge the fight's roster and map data; the fight stays in history either way, only its storage footprint is reclaimed.

Poisons, diseases and curses

Afflictions run themselves. A creature hit by a venomous Strike (a giant centipede's mandibles) or by a poisoned round is exposed: it rolls the save, and on a failure lands on stage 1 (stage 2 on a critical failure), after any onset. Each stage's damage is dealt and its conditions applied. Whenever a stage's interval passes — counted at the end of that creature's turns — it saves again: a success lowers the stage (a critical success by two), a failure raises it; stage 0 ends it, and so does the maximum duration. Diseases that move a day at a time save during /tgm break overnight. A character's current afflictions and stages are on the sheet's Combat tab, and each turn's saves appear in the turn message.

Critical hits: Deadly and Fatal

A Deadly weapon adds its deadly die on a critical hit (two with greater striking, three with major), and a Fatal weapon's dice become the fatal size on a critical hit, plus one more fatal die — both rolled for you and shown in the damage line.

From initiative to the first move.

Rolling initiative from a dropdown
Initiative: pick Perception or any skill from the dropdown.
A turn announced with the battle map
The turn comes with the map, whose gold ring is whoever's turn it is.
Planning a move on the battle map
Moving: the shading shows what each step costs in actions, and Commit makes it real.
A move blocked by a wall
Walls stop a move, and the bot says so.

Thralls & summons

Both create temporary creatures: they join the encounter, land on the map, and are swept away by /tge end. Aliases keep counting up within a fight — if thrall2 dies in round one, round two raises thrall3 and thrall4.

Casting does the placing. When you cast Create Thrall or a summon spell from the sheet during a fight on a map, the bot asks where it goes right away: Place next to me (the nearest free cell around your token), or Pick a cell. A summon spell also asks which creature answers, from the list its rank allows. Manifest Eidolon puts your eidolon on the nearest free cell by you with no question. None of them get a turn of their own: they share yours. /tge thralls and /tge summon below still do the same thing by hand.

/tge thralls place [alias] [player]
self / gm
Raises Necromancer thralls, adds them and places them in one command. The count comes from the cells you list — place:N18, M21, O25 raises three. Each is a level −1 creature with 1 HP and Speed 15 ft, striking at the Necromancer's spell attack for 1d6 (2d6 at 5th, another d6 every 4 levels after). Every check a thrall makes fails automatically; every check against it succeeds.
/tge summon spell rank creature place [alias] [player]
self / gm
Casts a summon spell and places what it calls. The creature list is filtered by the spell's own trait — undead for Summon Undead, animal for Summon Animal — read from the spell's text rather than a hand-kept table, so a homebrew summon spell works without teaching the bot about it.

Some creatures share a multiple attack penalty. A thrall's strikes count toward its Necromancer's, and an eidolon's toward its summoner's. A companion that is mounted shares its rider's, in both directions, because you and your mount fight as a unit; one that isn't mounted keeps its own. The bot keeps those shared counters for you. The rank you cast at sets the creature level ceiling: rank 1 calls level −1, rank 5 calls level 5, rank 9 calls level 13.

Mounts & vehicles

Riding is a plain Core Rulebook rule, not an archetype perk — any willing, size-qualified character can be someone's mount. /tgmount set only designates who's riding whom; the actual climb-on/off each round is the universal Mount or Dismount action in {action}'s dropdown (or the sheet's Combat tab), which drags the two tokens together and spends the real action.

/tgmount set rider [target]
self / gm
Links rider to target — leave target blank to clear the link. Either side's own controller, or the GM, can set or clear it.

A vehicle works the same way, but for a crew instead of one rider: it's created once and keeps its own HP and occupants from one session to the next, the way a party's own ship would. Exactly one pilot; any number of crew (manning weapon mounts, aiding checks) and passengers (just along for the ride) — a character holds at most one of the three at a time.

/tgvehicle create name vehicle_type
gm only
vehicle_type autocompletes to a real stat block — AC, Hardness, HP, Speed, and its own collision and piloting DCs all come from there, not from anything typed in by hand.
/tgvehicle pilot vehicle_name alias
self / gm
Takes the wheel. Already aboard something else? They're moved off it first — one vehicle at a time.
/tgvehicle crew vehicle_name alias · passenger vehicle_name alias
self / gm
Boards as working crew or as a plain passenger. Re-running the other one switches which it is.
/tgvehicle dismount alias
self / gm
Gets them off, whichever of the three roles they held.
/tgvehicle status vehicle_name
player
Its real stats, current HP, and who's currently pilot, crew, and passengers.
/tgvehicle destroy vehicle_name
gm only
Removes it for good.

Once someone's piloting, Drive and Run Over show up in {action} for anyone aboard — real core actions, no archetype needed. A Trick Driver's own feats (Drive-By Attack, Power Slide, Express Driver) show up the same way once they've taken them, substituting Driving Lore for the usual piloting check.

Hazards

A trap or hazard doesn't join the roster like a creature — it attacks or forces saves directly.

/tghazard attack hazard target_alias
gm only
Rolls the hazard's own real Strike against someone.
/tghazard save hazard target_alias save_type dc
gm only
Forces a save against its effect. Most hazards' own DC isn't clean structured data, so you read it off the stat block and supply it.

Reaction alerts

When someone acts in a way that can trigger a reaction — a manipulate or move action, a ranged attack, a concentrate action, or leaving a square — the bot checks who in the encounter could answer it and tells them. It only announces: nothing is spent or rolled, and whoever holds the reaction still uses it themselves.

Whose reactionWho is told, and where
A player characterPosted in the encounter channel, mentioning the player and the campaign's GMs.
An NPC or creaturePosted to the GM-private channel only — the table never learns what a monster can do.

It knows Reactive Strike (the Fighter's, the shared class feat — Barbarian at 6th and several more classes — and a creature's own), Stand Still, Disrupt Prey, Not So Fast!, Reflexive Courage, Eidolon's Retort, Bone Burst and Implement's Interruption, each listening only for the triggers its own text names (Stand Still and Not So Fast! care about movement only). With a battle map it also measures reach — from where a mover started — and stays quiet for anyone out of it; without one the alert says the reach is unchecked. Someone who has already used their reaction this round isn't alerted.

Two things it can't see. A Step triggers none of the movement reactions but looks like a 5-foot Stride, so every alert for movement says so. And conditions with no state behind them — a ranger's hunted prey, a thaumaturge's Exploit Vulnerability target, a necromancer's thralls — are shown in the alert for you to check.

{reaction} resolves one, right from chat: a dropdown of only the reactions above that you actually hold, kept separate from {action}'s own much longer list of everything else you can do. {reaction: stand still} (or any of their names) runs that one directly. Reactive Strike and Implement's Interruption also keep their original dedicated words ({reactivestrike}, {interrupt}) — {reaction} is a second way to reach the same roll, not a replacement for them.

A roll for anything else

Not every DC in the game has a feat or command of its own behind it — a locked door's Thievery, a rumor's Society check. /tgcheck rolls any named skill (or Perception, or a specific Lore) against a DC you give it, using the same rank-based modifier every other roll in this bot computes.

/tgcheck skill [dc] [action] [target] [alias] [secret]
self / gm
action names what the check is for — Climb, Swim, Lie, Aid, Sense Motive and so on (the list follows the skill you picked). Your feats that help with that action apply automatically: Sure Feet turns a successful Climb into a critical success, for example. The result then has a ☆ Favourite button: starred actions are listed first, with a star, the next time you pick one — and they also appear in your character sheet's skill dropdown, rolled with the skill they suit best. The sheet's Overview also has a Situational toggles menu listing the toggles your feats have (Tail Spin "using your tail", Risky Surgery, Staff Acrobat "wielding your staff"): tick what's true right now and the feat applies until you untick it. Give either a dc or a target: pick a creature in the encounter and its own defense is the DC (Reflex for Trip, Fortitude for Shove, Will for Demoralize, Perception for a Lie or a Feint). Trip, Shove, Grapple, Disarm, Reposition, Tumble Through, Demoralize and Feint against a target run the full action — the multiple attack penalty, Prone or Grabbed applied, and any follow-up buttons. secret:true posts the real result (feat upgrades for the action included) to the GM's own channel only — the table just sees that a roll happened.

Degrees of success

The bot resolves the whole ladder rather than printing all four and leaving you to find the row:

Critical SuccessBeat the DC by 10 or more.
SuccessMet or beat the DC.
FailureMissed the DC.
Critical FailureMissed it by 10 or more.

A natural 20 shifts the result one step up — it isn't an automatic critical — and a natural 1 shifts one step down. A critical hit doubles the whole total, modifiers included. For a basic save the bot says what the target actually takes: none, half, full or double.

Multiple attack penalty

Tracked per turn, automatically: −5 then −10, or −4/−8 for an agile weapon. Flurry rangers get −3/−6 (−2/−4 agile). Thralls and summons share their master's counter, because their strikes count against it.

Dying, wounded and unconscious

  • At 0 HP a PC — or a creature you flagged significant — falls unconscious and starts dying. Their initiative moves to directly before whoever dropped them. Everything else just dies.
  • Recovery checks roll automatically at the start of the dying character's turn, against a DC that climbs with the dying value.
  • Only healing to 1+ HP wakes someone. Succeeding a recovery check clears dying but leaves them unconscious.
  • Wounded climbs each time dying is lost, and raises where dying starts next time. It ends when someone treats your wounds with Treat Wounds, or when you are back at full Hit Points and rest for ten minutes (a night's rest, or a breather spent resting).

HP visibility is asymmetric on purpose. Your own side and the GM see exact numbers. The opposition shows only a band — Healthy, Bloodied, Critical — to keep the table guessing the way it would around a real one.

Battle Maps

Tokens, terrain, fog — and geometry the bot works out for you.

Premium soon. Battle maps and the character builder will become premium features. They are free while we test them.

/tgmap upload_gridless image columns rows [slot] [name]
gm only
Give it a plain image and how many squares to overlay. With a slot it is saved to your map library under name instead of going onto the running encounter.
/tgmap upload_gridded image columns rows cell_size [offset_x] [offset_y] [slot] [name]
gm only
For a map that already has a grid printed on it. /tgmap calibrate helps you line it up.
/tgmap place alias cell [elevation]
gm only
Puts a token down, e.g. cell:H12. Elevation is tracked and counted when distances are measured. A token you place at a height isn't treated as falling.
/tgmap move [alias] [destination]
self / gm
Arrow-key controls, or name a destination cell to jump straight there.
/tgmap terrain · terrain_clear [slot]
gm only
Paint walls, doors, windows, chests, levers, difficult terrain, hazards, water and fixed lights (torch, lamp) directly onto the grid. The same menu sets the whole map's light: bright, dim or darkness. On a dim or dark map, what each token carries also lights it (a lit torch — tick it in the sheet's Situational toggles — a lantern, the Light spell), darkvision and low-light vision work as in the rules, and an attack on a creature you see in dim light or darkness first rolls the Concealed (DC 5) or Hidden (DC 11) flat check; failing it, the attack doesn't happen. Strikes now also roll that check against a creature with the Concealed, Hidden or Invisible condition, and so do Grapple, Trip, Shove, Disarm, Reposition and spells that target creatures. Magical darkness (painted, rank 2 or 4+, shown light and medium purple) blocks light; darkvision sees in the lower one, greater darkvision in both. An area effect is drawn as a grid of small green X's. A Hazard (trap) is pink and hidden from the players' map until you pick Hazards: show to players in the same menu, or the party finds it with the explore panel's Search check (its report has a Show found hazards on the map button); your own copy always shows it. See the Unseen or truesight makes an Invisible creature only Concealed. In a fight, the Combat menu's Drop a light, Throw a light (20 ft) and Pick up a light put a lit torch or lantern down where it keeps shining.
/tgmap interact action cell [alias]
self / gm
Open, close, lock or unlock the door, window, chest or lever painted at a cell. An open door is just floor: movement and sight pass through and fog shows what's beyond. A closed window blocks movement but not sight. Players can open or close an unlocked one from the square next to it; the GM does anything from anywhere, including locking, since picking a lock is a skill check the GM runs.
/tgmap fog enabled [radius] [reset] [slot]
gm only
Fog of war, shared across the party. Explored ground stays remembered — but a creature standing in remembered territory is never revealed by memory alone. On a dim or dark map you need light (or darkvision) to see a cell; dim cells are shaded. /tgmap show draws your own character's view.
/tgmap show [slot] · status · distance
player
Re-post the map, check a token's state, or measure between two of them.

Terrain at a glance

What /tgmap terrain can paint, drawn roughly as it looks over a map. The colours and shapes come from the same code the map uses. The open, locked and pulled states are what /tgmap interact switches a painted door, window, chest or lever to.

The ground

Normal floorOrdinary ground
Difficult+5 ft to enter
Greater difficult+10 ft to enter
Water+5 ft, Swim check

Blockers

WallBlocks movement and sight
Narrow (needs Squeeze)Blocks movement; needs Squeeze

Doors, windows and objects

Door (closed)Light brown: blocks movement and sight
Door (open)Clear inside: walk and see through
Door (locked)Dark brown: blocks; GM unlocks
Window (closed)Glare lines: blocks movement, see through, far side has cover
Window (open)Walk through
Window (locked)Darker blue: blocks movement; GM unlocks
Chest (closed)Light brown: object, blocks nothing
Chest (open)Clear inside: opened
Chest (locked)Dark brown: locked
Lever (up)Handle angled up
Lever (down)Handle angled down (pulled)
Ledge (10 ft)A drop: ending a move here falls 10 ft
Ledge (20 ft)A drop of 20 ft
Ledge (40 ft)A drop of 40 ft

Effects, hazards and light

Area effectArea effect; no cost
Hazard (trap)Pink X's; hidden from players until found
Light: torch (20 ft bright, 40 dim)Light: bright 20 ft, dim 40
Light: lamp (60 ft bright, 120 dim)Light: bright 60 ft, dim 120
Magical darknessMagical darkness; darkvision sees
Magical darkness (4th rank+)Magical darkness; only greater darkvision

Map images can be up to 20 MB. That is the size Discord allows ordinary members to upload. A bigger file is refused before it is uploaded, so shrink or compress it first.

Building maps before the session

Every command above takes an optional slot (1–5, with a picker showing what is in each). Give it one and the command works on a saved map with no encounter running at all — so you can upload the room, line up its grid and paint its walls on a quiet afternoon, rather than making the table wait while you do it live.

/tgmap list
gm only
Your five slots and what is in each — grid size, how much terrain is painted, whether fog is set.
/tgmap use slot
gm only
Drops a saved map onto the encounter that is running now. Or name it when the fight starts: /tge start map_slot:2.
/tgmap save_current slot name
gm only
Keeps the map you are looking at — terrain and fog included — for next time.
/tgmap rename slot name · delete slot
gm only
Housekeeping.

Using a slot copies the map into the fight — image, grid, fog and terrain. Tokens are not copied, and nothing that happens in the fight touches the saved original, so the same ambush site can be used again next month.

What the map works out on its own

Once both combatants have tokens down, every attack roll gains a line reporting the geometry. It never changes the roll — it's information, not enforcement.

CheckWhat you're told
ReachThe distance, and a warning if the target is out of it. Reach comes from size — Small/Medium 5 ft, Large 10, Huge 15 — plus the reach trait.
RangeWhich range increment you're in and the −2 per increment past the first, plus a warning past the sixth where the shot isn't possible at all.
CoverA line crossing a painted wall gives standard cover (+2 AC); one crossing another creature gives lesser cover (+1). Greater cover is never inferred — it comes from Take Cover, which the grid can't see.
FlankingDetected on PF2e's real geometry — opposite sides or corners, both of you within melee reach — and it names your partner.

Flanking detection is deliberately conservative. It won't invent a flank it can't prove, but it can miss one made with a polearm, since it only knows size-based reach. Applying Off-Guard is still yours to do.

Large+ creatures and squeezing

A Large or bigger token's own move checks its whole footprint against the grid, not just the square it's anchored to. A 5-foot-wide gap it's too big to fully fit through is still passable — it just costs real difficult terrain, the same as painted terrain would (the two never stack). A space painted narrow is a genuine hard block for everyone, even Medium creatures, until someone Squeezes through it.

/tgmap squeeze alias dc
self / gm
Rolls the real Acrobatics check against a DC you set — the actual rules give no fixed number, so the GM calls it for the situation. Three real degrees: critical success and success both get the character through; critical failure leaves them stuck. A plain failure has no stated effect at all.

Loot & the Purse

What the fight paid out, who took it, and what it actually is.

Start a fight with loot:true and ending it rolls treasure at the party's level, not the monsters' — PF2e's budget is indexed to what a party of that level should have accumulated, regardless of what they fought for it. Coin goes straight to the shared purse, because coin has no identity and nobody needs to decide who carries the gold. Items get a dropdown each.

The payout scales with the fight's real difficulty, not a flat guess. Every encounter's actual XP (Building Creatures' own level-difference table, summed across its whole roster against the party's level) counts toward the current level's real treasure budget — whether or not that fight pays out loot. Turning loot off for a while doesn't lose that progress; the next payout catches up everything owed in one go, because the math always asks "what does the level owe by now," never "what does this one fight owe."

/tgm loot_settings [mode] [multiplier]
gm only
View or change loot pacing. mode is XP Budget (levels by real XP) or Milestone (you level by story beat — loot still paces by the same real-XP percentage, but a private notice replaces the level-up trigger once a level's budget is fully granted). multiplier is a generosity dial — 1.0 is the book average.
/tgm treasure_catchup
gm only
Pays out whatever the current level's real budget still owes, all at once — shows the exact amount and asks to confirm first.

Unidentified magic

The bot rolls the treasure, so nobody knows what dropped — not even the GM, who gets the real list privately. A magic item shows only its form: a Wand of Manifold Missiles reads as magic wand, a Cloak of Elvenkind as magic cloak. That's PF2e's premise — you can see a thing is magical and what shape it is, not what it does.

Alchemical items need identifying too, a different way. An elixir or a bomb reads as alchemical elixir or alchemical bomb until someone uses Identify Alchemy: ten minutes, Crafting (you must be trained) and an alchemist's toolkit in hand. A success reveals it, a failure can try again, and a critical failure misidentifies it. Magic uses its tradition's skill as before; a character with Crafter's Appraisal can use Crafting for magic items as well. Both are break activities: a ten-minute breather can be spent identifying.

/tgloot list [unclaimed]
player
The pool. Unidentified items show their mask and the DC to crack it.
/tgloot claim item [alias] · unclaim item
player
Claiming puts the item on the character's sheet, and a routine sync won't remove it. Claiming something someone else holds moves it rather than duplicating it.
/tgloot identify item [alias] [skill]
player
Rolls the tradition's skill — arcane→Arcana, divine→Religion, occult→Occultism, primal→Nature — against the item's level DC. Success reveals the real name. A critical failure means your character is now confidently wrong about it.
/tgloot claims
player
Reopens the dropdowns when the original message has scrolled away.
/tgloot add · reveal · identify_free · remove
gm only
Drop something in by hand, see what the unidentified items really are, reveal one without a roll, or take it out entirely.

Checking the pool, then cracking one open — mock-ups, not live screenshots.

↳ used /tgloot list
Table GoblinAPPToday at 9:12 AM

🎒 Loot

• magic wand (level 5, DC 20 to identify) — unclaimed
• Elixir of Life (Lesser) (2 gp) — Ilyra Duskmere
A vial of bright red liquid that restores vitality when swallowed.
↳ used /tgloot identify
Table GoblinAPPToday at 9:14 AM
🔍 Wren Alderfen attempts to Identify Magic on magic wand.
🎲 Arcana: 24 = d20(15) +9 vs DC 20 — Success
✨ It's a Wand of Manifold Missiles!

The party fund

One shared purse per campaign, so the loot doesn't have to sit on one player's sheet — which makes every payout a two-step correction and falls apart the week that player misses a session. Every change is announced in the channel on purpose: shared money with a visible trail is what makes it safe for anyone to move it without asking a GM first.

/tgparty money · money_add · money_spend
player
Check the fund, or adjust it directly.
/tgparty contribute amount · withdraw amount
self / gm
Moves coin between a character's purse and the fund. The character's side is checked first, so a payment that can't be afforded moves nothing at all.
/tgparty split · money_set
gm only
GM-only because neither has an equal-and-opposite undo. Split divides the fund evenly between the PCs — odd coin that won't divide stays in the pot rather than going to whoever sorts first.

Towns & Shops

A settlement, its shopkeepers, and what's on the shelves — in one command.

/tgtown generate level:4 gives you a whole town: a name, a region, shops appropriate to its size, somebody behind each counter with a personality and a hook you can hang a scene on, and stocked shelves. The AI GM writes original flavour by default, drawing only on your campaign's own notes for tone — never on any published setting.

The rules engine keeps the mechanics. The AI never sets a settlement's level, its prices, or what its shops may stock. A settlement's level is PF2e's availability rule — it decides what can legally be sold there — so it stays the GM's call. Pass ai:false for the local name tables instead; if the call fails you get those anyway, and the page tells you so.

/tgtown generate level [name] [size] [region] [seed] [ai]
gm only
Rolls the whole settlement. seed repeats an earlier roll exactly, so a town you liked can be reproduced.
/tgtown list · view town
player
Browse every settlement, or one town's own shop list. list marks whichever one is currently active with 🏠.
/tgtown set_active town
gm only
Sets which settlement the party can currently buy from. shop/buy only ever reach this one town.
/tgtown deactivate
gm only
Clears it — no shops available anywhere until a town is active again. There's no shopping mid-dungeon or three days from the nearest settlement.
/tgtown create · edit · delete
gm only
Write a settlement by hand, or change one. Raising a town's level doesn't restock its shops — their shelves stay as they were until you say otherwise.
/tgtown restock [shop] [count]
gm only
Rolls shelves again, replacing what was there: every shop in the active town, or just the one you name. Scoped to the active town, so a typo'd name can't silently restock the wrong, inactive town.

Shops: /tgshop

Everything you do at a counter. The player commands only reach shops in the campaign's active town.

/tgshop list · view shop
player
list names the shops in the active town. view shows one shop's shelves: level, price and a one-line description for each item, linked to Archives of Nethys. Nobody knows every item by name, and nobody can browse a shop three towns away.
/tgshop buy shop item [alias] [from_fund] [quantity]
player
Buys off the shelf, from your own purse or the party fund. The coin is taken first, so if it can't be afforded nothing moves. Ammunition is one pack of 10 rounds per purchase, matching its per-pack shelf price.
/tgshop sell shop item [qty] [alias] [to_fund]
player
Sells loose gear you carry. The dropdown lists what a shop will take and what it pays. Shops pay the campaign's sell rate, half of list price unless your GM changed it in the campaign rules; gems, art objects and trade goods always sell for full value. The coin goes to your purse (or the party fund), and the item goes onto the shop's shelf. Weapons and armor on the sheet are sold through the GM.
/tgshop add · vendor_add · stock_add
gm only
Add a shop, put someone behind the counter, or place a specific item. Work on any town regardless of which one is currently active for players. level_bonus lets one shop reach past the town's level, like the smith whose cousin trained at a famous artificers' guild.
/tgshop restock shop [count]
gm only
Rolls one shop's shelves again. The same as /tgtown restock shop:, for when you're already working at the counter.

You can't buy out in the woods. /tgshop refuses outright with no active town set — a shop typed by hand from a different town is refused too, not just left off the list. Set one with /tgtown set_active once the party reaches a settlement.

Browsing a settlement, then one shop's shelves — mock-ups, not live screenshots.

↳ used /tgtown view
Table GoblinAPPToday at 8:51 AM

🏘️ Oakhaven

Nestled along the muddy banks of the Elderrun, Oakhaven is a lawless sanctuary built around an ancient, hollowed-out ironwood tree. River pirates, honest merchants, and exiles mingle freely beneath its shaded canopy.
Level8
SizeCity
RegionElderrun
Shops (4)
• Anvil & Ember — weaponsmith +1
• Oakhaven Emporium — general
• The Bubbling Crucible — alchemist
• The Gilded Cuirass — armorer
Items of level 8 or lower are generally available here.
↳ used /tgshop view
Table GoblinAPPToday at 8:52 AM

🏪 Oakhaven Emporium — general

Run by Bramen Copperkettle — nervous and chatty, glances at his cellar door whenever customers mention old ruins.
• Backpack — 1 sp
• Rope, 50 feet — 5 sp
• Torch — 1 cp
• Healer's Toolkit — 5 gp
🛒 Buy an item... ▾

How big is a town?

SizeLevelWhat it supports
Village0–1A general store, and that's your lot.
Town2–4Adds a smith and an armourer.
City5–9Adds the specialists — alchemist, jeweller.
Metropolis10+Everything, and sometimes two of something.

The shop list is a ladder rather than a random draw, because the ordinary shop is the one that always exists. A village with a jeweller and no provisioner is backwards.

Reference Lookup

Rules text the bot doesn't need to know, one search away.

/tglookup searches Archives of Nethys for a name and links straight to the page — for the full description behind a feat, a spell's exact wording, or an item's flavour text. By default it searches every category at once: classes, class feats, ancestries, ancestry feats, backgrounds, general feats, spells, weapons, armor, shields, and alchemical items.

/tglookup query [category]
player
category narrows the search to one bucket — useful once a name shows up in more than one place. Choices: Class, Class Feat, Ancestry, Ancestry Feat, Background, General Feat, Spell, Weapon, Armor, Shield, Alchemical, Skill.

Deities need the exact name. /tglookup query:<deity name> shows a deity's mechanics — domains and favored weapon, no lore — only when the whole name matches; part of a name lists nothing.

Skill is different. It's a plain name match against the game's own skill list (Acrobatics, Arcana, ...) that jumps straight to that skill's AoN page — there's no bot-side skill data to search, so it skips the multi-category search entirely.

Coming Features and Fixes

What we are working on, and the gaps people have reported to us.

When something here ships it comes off this list and appears under Recently added on the home page. Found a problem that isn't listed? Tell us in the Discord.

Coming

Known gaps

  • Elevation is tracked and counted in distances. Falling is handled only for ledges (damage goes straight to Hit Points, with Cat Fall); Grab an Edge isn't, and flying and burrowing speeds don't otherwise limit movement.