Dashboard โ
Your own avatars at a glance: a family summary, then one row per avatar (its state, current goal, total level, quest points, XP, wealth and AI) with an ๐ eye that opens its avatar page: status, quests, skill levels, wealth, worn items, backpack and bank, the scripts it wrote (its skills), its personality, recent activity, the script reviewer's suggestions for it, and its settings (its AI provider and model). It is personal: you only ever see your own avatars, nobody else's, and nobody else sees yours. Only signed-in people can open it; there is no public version. The only things you can change on it are your own: an avatar's AI, its drives and the Eager family sharing switch.
| Environment | Page |
|---|---|
| TEST | test-play.mindrune.xyz/dashboard (sign-in required) |
It replaces the skill dashboard: the old /skill-dashboard address no longer exists (it opens the app's home, with no redirect), and neither does the former skill market.

Who can see it โ
- You, signed in, and only your own avatars. Signed out, the page shows the normal sign-in screen; after signing in with Discord you land back on the dashboard (or the avatar page you opened). The API behind it answers
401without a session and returns only your own avatars and their rows: no other family, no family names, no Discord usernames, no game account names. - Never agents. Your avatars don't see this page: their wealth stays with you, and a private script stays private from its siblings exactly as before (an avatar only sees its siblings' shared skills, through its skill library: Skills and learning). The sandbox gate forwards nothing but the public hiscores, and refuses the dashboard's addresses (and the old skill dashboard's and skill market's names, in any case, separator or encoding) with
403. See Security and privacy.
Using the page โ
The page opens with a one-line reminder (only you see this page; agents never do) and a Back to MindRune link. It is built for phones (from 360 px wide, safe areas respected) and scrolls on its own. The app's settings link to it (the Dashboard icon next to ๐ avatar logs and ๐ hiscores).
Family summary at the top: how many of your avatars are running and stopped, their combined wealth (est. when any is estimated), their total quest points and how many family skills they share.
Under it, your family sharing bar (how many runs and what score a script with the @skill header needs to be shared with your other avatars) and the Eager family sharing switch (5 runs and 600 standard, 3 and 500 eager; details). It is an account preference: it follows you to every device, and the bar and the private scripts' progress lines follow it at once. With it on, a short note says your avatars hear that you want proven routines shared (what to share stays their choice).
Sort: Running (the default: running avatars first, then by name), Name, Level (total level, highest first) or Wealth (highest first). An avatar without the number sorts last.
One row per avatar. On a desktop the rows form a table under a header (Avatar, State, Current goal, Total, QP, XP, Wealth, AI); on a phone each row is a compact card with the same fields, so nothing scrolls sideways (from 360 px wide) and five avatars fit on about one screen:
- a status dot and the name;
- the state: Running, Stopped (with why: Stopped by you, AI provider rejected the key, โฆ), Error, or Limit when its plan's usage limit paused or stopped it (Limit ยท resets 14:00; details);
- its current goal on one muted line (Fletch 1,000 yew longbows, cut with
โฆwhen long; details); - its total level, its quest points (12 QP; out of how many on hover, from its last game save), its XP over all skills (1.34M; the exact number on hover) and its wealth (
*when estimated); an avatar that has never been in the game says Not in the game yet; - its AI: model and provider (Claude Sonnet 5.5 ยท Anthropic), or No AI;
- the ๐ eye: it opens the avatar's page (so does a tap anywhere on the row). It is a real link, named Open and the avatar's name for screen readers, 44 px, and Tab reaches each eye in row order.
XP per hour or a recent XP gain isn't shown: MindRune keeps no XP history yet, only the current numbers.
The avatar page โ
Each avatar has its own address, /dashboard/avatar/<id>, so a link or bookmark opens it directly; โ Dashboard (or the browser's Back) returns to the list where you left it. Old links of the form /dashboard#bowmaker open that avatar's page.
At the top: the name, its state and why, Live while it is in the game (otherwise Last seen and the time of its last game save), its whole goal and who set it (Set by you, Chosen by the avatar, or Choosing its next goal), and its total level, XP, combat level, quest points and wealth. Live view opens the app's main screen with this avatar selected.
Sections (one column on a phone, two on a desktop). On a phone, Quests and Skills start folded to one line with a summary (12 QP ยท 8/68 done, Total 433 ยท Combat 48); tap the line to open or fold it. The browser remembers each choice. On a desktop they are always open.
- Quests: how many of the world's quests it completed and its quest points, and the list with each quest's points. The avatar itself can read the same, plus its started quests and their stages, as its own quest status; no other avatar can.
- Skills: every game skill with its level (the XP on hover).
- Wealth: coins plus items (est. /
*when some item never sold on the Grand Exchange), with coins and items apart. The avatar itself can read only its own bank, as items and counts without any value; it never sees wealth. - Items: what it wears, its backpack, and its bank (items and counts in bank order; the first 40, then Show all).
- Scripts: the scripts it wrote, which MindRune calls skills, one line each: ๐ช (shared with your other avatars as a Family skill) or ๐ (private), its name, its score 0โ1000 (green from 700, yellow from 400), its runs and the day it last ran. The first 5 show; Show all (n) lists the rest (Show fewer goes back). Tap a line for its details: its version (v3 ยท 2 versions), runs, ok runs and last run. A private script also shows its way to being shared, for example @skill header ยท 3/5 runs ยท score 540/600 ยท shared once it qualifies, @skill header ยท qualifies: shared at its avatar's next turn, or No @skill header: stays private. A family skill shows the version its siblings get (the newest shared version that proved itself). Its details also have what it does (the goal from its
@skillheader as plain text: secrets, code, paths and links removed, at most 300 characters) and View code. - Settings: AI for avatar, its provider (one of your connected providers) and model. A change is saved at once (a check mark shows it) and restarts only this avatar's agent; a stopped avatar stays stopped (per-avatar provider). Providers themselves are connected in the app's Settings.
- Personality: the avatar's own description of who it is and how it feels (it starts from a random starting personality and is the avatar's to change), with when it last changed; read-only, only you can read it (Personality).
- Recent activity: what it is doing now, its train of thought (its last 20 thoughts, newest first and live while the page is open: what it reasons, what it says between steps, and each tool it runs as one line such as "execute_code ยท await bot.walkTo(โฆ)", each with its time; tap a long one to read it all, or a tool for its code and result), and its run history (the last 20 times it started or stopped and why), folded under "Run history (n)". The thoughts are the same ones the live view shows, cleaned of keys and passwords the same way, and only you see them. Opening the page doesn't start the game picture. They are kept in memory for the current run only, so a stopped avatar may show "No thoughts yet".
- Script reviews: the script reviewer's suggestions for this avatar's scripts.
Each section loads on its own: if one can't load (the suggestions, say), it says so with Try again and the rest of the page still shows.
View code (your scripts only, family and private alike): loaded when you open it, the current version first, another one from the version list. Plain text in a monospace box that scrolls sideways inside itself, with Copy and Download (saves the version shown as <name>-v<version>.ts, made in the browser from the same response: no download link or endpoint).

Where the numbers come from โ
| What | Running avatar | Stopped avatar |
|---|---|---|
| Skill levels, total and combat level | live: the game state the gateway holds for it (read-only, the same frame the runner reads) | its last game save |
| Worn items, backpack | live | last game save |
| Bank | last game save | last game save |
| Quests and quest points | last game save | last game save |
| Wealth | last game save, valued like the wealth board | the same |
| Status, AI | the app's own state | the same, with the reason it stopped |
| Goal | the avatar's own goal record, read when the page loads | the goal it resumes on Play |
The game saves an avatar when it logs out, every 15 minutes while it plays, and at Grand Exchange trades, so a running avatar's quests, wealth and bank can be up to about 15 minutes old: its page says Quests, wealth and the bank as of the last game save and the time. If the live game state can't be read, a running avatar's page falls back to its last save and says Last saved.
Quests are read from the quest progress in the save, by the game's own quest point rules (the same ones the game uses to count your quest points), so the points always match what the avatar sees in its quest list. Wealth is the same figure as on the hiscores' wealth board: coins plus every item in the bank, backpack, worn and in Grand Exchange offers, each at its last Grand Exchange sale price (an item never sold there at its shop value, and marked est.). Nothing new is stored for the dashboard: everything is read when you open it.

What it never shows โ
- anything of another account: avatars, stats, wealth, scripts, family names, Discord usernames;
- your avatars' game account names,
execute_codesnippets and lab logs; - internal ids other than your own avatars' and scripts', emails, file paths.
The dashboard itself never carries code: its schema is strict and a test asserts that no script or code field ever appears in it. Code only comes through its own request, for you.
The API โ
GET /dashboard with the app's normal session (Bearer access token), read-only:
401without a session; rate-limited per user (429withRetry-After); cached per user for 30 seconds;private, no-store;- only your own avatars and rows (the sources read that owner's rows alone, and the route filters again);
- response:
agents[](id,name,status,activity,stop,stats,scripts) andbar(minUses,minScore,eager: your sharing bar).statsisnullbefore the avatar's first time in the game, elselive,liveAt,savedAt,skills[](id,name,level,xp),totalLevel,combatLevel,quests(points,maxPoints,completed[]withnameandpoints,total;nullif the world's quest list can't be read),wealth(total,coins,items,estimated),equipment[],inventory[]andbank[](name,count; the bank always from the save). A script:id,kind(familyorprivate),name,description,version,versions,score,runs,ok,lastUsed,headed(its avatar gave it the@skillheader).
GET /dashboard/scripts/:id/code (optionally ?version=N), same session, read-only:
- returns
name,version,versionsandscriptfor one of your own scripts: a family skill (its shared versions) or a private script (any of its versions); - anyone else, an unknown id or version, a family skill's private draft:
404(never403, so it doesn't confirm that a script exists);401without a session; rate-limited per user; - the script was scrubbed of secrets when it was recorded and is scrubbed again on the way out (your avatars' passwords, credential-looking lines); never cached by the browser (
private, no-store), never reachable by agents.
The rows' AI and usage limits come from GET /avatars, an avatar page's personality, run history and script reviews from GET /avatars/:id/personality, GET /avatars/:id/run-events and GET /reviewer/reviews (your own avatars only), its train of thought from the live view's socket (/ws, without asking for the picture), and its AI is saved with PUT /avatars/:id/ai: the same requests the app makes elsewhere.
The old /skill-dashboard and /skill-market API routes are removed. The operator console's skills view (/admin/skills) is unchanged.
