Skip to content

Commit 8aa67e7

Browse files
authored
feat(desktop): UX philosophy doc + Advanced Mode (chat-first, internals hidden) (#83)
1 parent e3d3ab8 commit 8aa67e7

4 files changed

Lines changed: 132 additions & 2 deletions

File tree

docs/desktop-ux-philosophy.md

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# OpenThymos Desktop — UX Philosophy
2+
3+
This is the canonical guide for the desktop app's experience. Every desktop PR
4+
is measured against it.
5+
6+
## The one principle
7+
8+
**Standard AI chat experience first. OpenThymos capabilities second.**
9+
10+
It should feel immediately familiar to anyone who has used ChatGPT, Claude,
11+
Cursor, LM Studio, or Open WebUI. We do **not** reinvent the chat experience — we
12+
add governance, replay, and auditability *on top of* a familiar one.
13+
14+
> A premium AI desktop app that happens to have governance — **not** a governance
15+
> system that happens to have a chat box.
16+
17+
The user chats normally. OpenThymos quietly provides skills, tools, providers,
18+
grants, replay, and audit **when needed** — never in the user's face by default.
19+
A user should understand the interface within seconds.
20+
21+
## Default layout
22+
23+
```
24+
┌───────────────┬───────────────────────────────────────────────┐
25+
│ + New chat │ active model · provider · skills (quiet) │
26+
│ ⌕ Search ├───────────────────────────────────────────────┤
27+
│ Chat history │ │
28+
│ • … │ conversation │
29+
│ • … │ │
30+
│ ├───────────────────────────────────────────────┤
31+
│ Providers │ [ + ] message… [ Send ] │
32+
│ Skills │ │
33+
│ Tools │ optional: provider · skill · model (light) │
34+
│ Audit │ │
35+
│ ⚙ Settings │ │
36+
└───────────────┴───────────────────────────────────────────────┘
37+
```
38+
39+
- **Chat is always the primary screen.** It opens to chat.
40+
- **Sidebar:** New Chat · Search · Chat history. Secondary nav (Providers,
41+
Skills, Tools, Audit, Settings) lives below, lightweight.
42+
- **Composer at the bottom:** prompt · attachments · send. Optional
43+
provider/skill/model selectors are *light*, not overwhelming.
44+
45+
## How each capability should feel
46+
47+
- **Skills** — like GPTs / Claude styles / agent profiles. Enable one, several,
48+
or none without friction. (Multi-skill is shipped.)
49+
- **Tools** — capabilities the assistant has. Users never see schemas or
50+
internals unless they enter **Advanced Mode**.
51+
- **Grants** — clean and modern. Plain language, not runtime jargon:
52+
> **OpenThymos wants permission to use the File System tool.** `Allow` `Deny`
53+
with an *Advanced details* expander, not a wall of writ/policy text.
54+
- **Replay** — "**View what happened**", not "inspect internal runtime
55+
artifacts." Advanced users can expand into commits/writs.
56+
57+
## Visual design
58+
59+
Prioritize: whitespace · readable typography · smooth animation · modern cards ·
60+
clear icons · clean navigation. Avoid: clutter · developer-only terminology ·
61+
excessive JSON · overwhelming controls · exposing internals by default.
62+
63+
## Advanced Mode
64+
65+
A single toggle (Settings / header). **Off by default.** When off, normal users
66+
**never** see raw runtime data, policies, writs, commits, debug traces, or
67+
low-level tooling. When on, those reveal:
68+
69+
- raw ledger entry data in the Mind inspector and Audit,
70+
- the custom-tool schema editor and raw skill/policy JSON,
71+
- writ / commit / proposal internals, debug/perf info,
72+
- experimental / unstable controls (also gated to Nightly).
73+
74+
Implementation: a `body.advanced` class toggled + persisted; anything
75+
developer-facing is tagged `.adv-only` (hidden unless Advanced). New
76+
internals-exposing UI must be `.adv-only` by default.
77+
78+
## Stable vs Nightly
79+
80+
- **Stable** surfaces: multi-skill selection, basic skill/tool builders,
81+
provider/model selection, grant cards, replay viewer, the Mind graph.
82+
- **Nightly / Advanced**: raw JSON editing, experimental automation, debug
83+
traces, low-level runtime internals.
84+
85+
## The test for any desktop change
86+
87+
1. Does chat stay the primary, familiar experience?
88+
2. Is the new power *quiet* until needed?
89+
3. Would a non-engineer understand it in seconds?
90+
4. Is anything that exposes internals behind Advanced Mode?
91+
92+
If a change makes the app feel like a governance console, it's wrong — governance
93+
is the substrate, not the surface.

thymos/clients/desktop/src/index.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
<span id="ledger" class="pill">ledger: —</span>
2828
</div>
2929
<div class="controls">
30+
<label class="adv-toggle" title="Show developer internals — raw ledger data, schemas, writs/commits. Off by default.">
31+
<input type="checkbox" id="advToggle" /> Advanced
32+
</label>
3033
<button id="startBtn">Start runtime</button>
3134
<button id="stopBtn" class="ghost">Stop</button>
3235
</div>
@@ -40,7 +43,7 @@
4043
<button class="tab" data-tab="skills">✦ Skills</button>
4144
<button class="tab" data-tab="tools">▣ Tools</button>
4245
<button class="tab" data-tab="audit">≡ Audit</button>
43-
<button class="tab" data-tab="backups">↧ Backups</button>
46+
<button class="tab adv-only" data-tab="backups">↧ Backups</button>
4447
</nav>
4548

4649
<main>
@@ -276,7 +279,7 @@ <h3>Create / tune a skill</h3>
276279
<b>before</b> it runs — a tool can never exceed its class.
277280
</p>
278281

279-
<details class="addtool">
282+
<details class="addtool adv-only">
280283
<summary><b>+ Add a custom tool</b> — declare a governed tool (no code)</summary>
281284
<form id="toolForm" class="card provider-form">
282285
<div class="starter-row">

thymos/clients/desktop/src/main.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,29 @@ document.querySelectorAll(".tab").forEach((btn) => {
4848
});
4949
});
5050

51+
/* ---------- Advanced Mode ---------- */
52+
// Off by default: normal users never see raw runtime data, schemas, writs, or
53+
// commits. The toggle reveals everything tagged `.adv-only` (see the UX
54+
// philosophy doc). Persisted locally.
55+
const ADV_KEY = "thymos.advanced.v1";
56+
(function initAdvanced() {
57+
const on = (() => { try { return localStorage.getItem(ADV_KEY) === "1"; } catch (_) { return false; } })();
58+
document.body.classList.toggle("advanced", on);
59+
const t = $("advToggle");
60+
if (t) {
61+
t.checked = on;
62+
t.addEventListener("change", () => {
63+
document.body.classList.toggle("advanced", t.checked);
64+
try { localStorage.setItem(ADV_KEY, t.checked ? "1" : "0"); } catch (_) {}
65+
// If an advanced-only tab was active and we just hid it, fall back to Chat.
66+
const active = document.querySelector(".tab.active");
67+
if (!t.checked && active && active.classList.contains("adv-only")) {
68+
document.querySelector('.tab[data-tab="chat"]').click();
69+
}
70+
});
71+
}
72+
})();
73+
5174
/* ---------- runtime supervision + health ---------- */
5275
async function refreshStatus() {
5376
let running = false;

thymos/clients/desktop/src/styles.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,3 +397,14 @@ button.full { width: 100%; }
397397
border: 1px solid var(--line); border-radius: 6px; padding: 8px;
398398
}
399399
.mind-hint { font-size: 12px; margin: 8px 0; }
400+
401+
/* Advanced Mode — developer internals hidden unless toggled (UX philosophy) */
402+
.adv-only { display: none; }
403+
body.advanced .adv-only { display: revert; }
404+
.adv-toggle {
405+
display: inline-flex; align-items: center; gap: 5px;
406+
font-size: 12px; color: var(--muted); cursor: pointer; user-select: none;
407+
padding: 4px 8px; border-radius: 999px; border: 1px solid var(--line);
408+
}
409+
.adv-toggle:hover { border-color: var(--violet); color: var(--text); }
410+
.adv-toggle input { accent-color: var(--violet); margin: 0; }

0 commit comments

Comments
 (0)