Graph Assistant

Building a reward graph by hand means knowing which card reads what, which field is required, and which combination silently does nothing. The Graph Assistant does that part with you: you describe what you want, it proposes a graph, and you decide whether it goes in.

✨ What it is

A chat panel on the graph editor — both the Leveling reward graph and Custom Commands in graph mode. Open it with the ✨ button in the top-right of the canvas.

It belongs to your team, not to you personally. Everyone on the team sees the same conversation, so a teammate can pick up where you left off, and you can see what they already asked rather than asking it again.

✏️ It edits your graph — it never replaces it

The assistant sends only the changes it wants to make: add this card, change that field, connect these two, remove that one. Anything it does not name is left exactly as it was.

This matters more than it sounds. The first version answered with a complete replacement graph, and on a long one the model would rebuild it from memory and quietly drop branches — leaving a smaller graph that still looked perfectly valid. That is no longer possible, rather than merely less likely.

Two side effects come free: card identifiers are assigned by the panel and not by the model, so duplicates cannot happen, and removing a card takes its links with it, so no link is ever left pointing at nothing.

🔒 It proposes. You apply.

Nothing it suggests is ever applied on its own. A proposal appears in the thread with a Review changes and a Discard button, and until you apply from the review window your graph is untouched.

👀 The review window

Review changes opens a summary of what the proposal would do:

It is computed against the graph you have on screen at that moment, not against the one that existed when the answer arrived — so if you edited something in between, what you read is what will actually happen. A proposal that would change nothing says so, and Apply stays disabled.

This is not a formality. A reward graph is live automation on your server — it hands out roles, sends DMs and grants XP to real members. The decision to run it belongs to a person.

If you can talk to the assistant but not change a server, you still see the proposals — the Apply button is simply greyed out. Reading what was suggested is useful even when acting on it is not yours to do.

🧪 A proposal is checked before you are offered it

Every proposed graph is validated against the real card list before the Apply button appears. When something is wrong, the problems are listed instead:

When that happens, ask for a correction rather than working around it. The assistant can see the same problems you can.

👀 Watching it think

Each answer carries the assistant's reasoning, folded away under Show reasoning. It is worth opening when a proposal surprises you: it usually explains which condition it thought you wanted, and that is faster than reading the graph card by card.

Questions are labelled with who asked them, because the thread is shared.

⏳ One request at a time

While the assistant is working, the composer is disabled for the whole team, in every conversation, and everyone sees who it is working for. A team shares one model and one bill, so two questions running at once would cost twice and answer over each other.

💬 Several conversations

Reward graphs and custom commands no longer share a single thread. Start a new conversation whenever you change subject — each keeps its own history, and that history is all the assistant sees, so an unrelated earlier discussion cannot confuse it.

Ask again on any answer puts your previous question back in the box, so you can adjust a word instead of retyping it. The answer it replaces stops offering Apply.

If a request fails, the thread says so and the assistant frees up immediately.

🌍 What it can see

It can look at every server your team owns — which features are on, how they are configured, and their graphs. That is what makes "set this up the way my other server does" a question it can actually answer.

Two limits are built in:

⚙️ Which model it uses

By default it uses the model configured by the platform. A team can bring its own instead — its own API key, its own model, or its own endpoint, which is how you point it at a model running on your own hardware. Any OpenAI-compatible endpoint works, and in that case no API key is needed.

You set it on your team settings page, under Assistant model. Only the team owner can change it, because it is a credential rather than a preference. The key is stored and never shown again: leave the field blank when saving and the stored one is kept.

💡 Getting a good answer

Say what should happen and to whom, not which cards to use — deciding that is its job:

Then read the reasoning, check the cards it chose, and apply.

Ask it to change one thing at a time. A short, specific request produces a short list of changes, which is far easier to check in the review window than a dozen at once.