---
{
  "n": 74,
  "title": "Settings page redesign",
  "abstract": "",
  "refs": [
    "todo:2598",
    "todo:2620",
    "message:15100",
    "message:15102"
  ],
  "seen": [
    "agent",
    "system",
    "user"
  ],
  "data": {
    "written": true,
    "environment": "main",
    "revisions": 1,
    "open_until": 1791154125.615652
  },
  "created": 1791152314.911663,
  "updated": 1791298295.1967602,
  "deleted": 0.0,
  "completed": 0.0,
  "outcome": "",
  "type": "doc"
}
---
I've put the Settings page redesign in Claude Design, run the one critique round and revised the same file. Nothing in the repository was changed. The served file renders exactly like my local render, checked pixel for pixel down the whole page.

- **Project:** "Settings page redesign"
- **File:** `Settings page.html` (one self-contained file). Turn 2, the final version, is at the top; turn 1, with its alternatives, is kept below it.

## Layout
The design is one scrolling page, with a left list of groups that works as its table of contents.

- **Page bar:** a "Find a setting" search box (the `/` key focuses it), a segmented All / Changed / Off filter, and "Applies to environment main".
- **Left list (216px):** five headings (General, Agent, Work, Memory and records, More) over 20 groups. A changed group shows a dot, a feature group that is off shows "Off", and Environments and Tunler are links to their existing views.
- **Each group:** a title, one plain line under it, and a "How it works" link. If the group is one feature, its On/Off switch sits in the same column as the row switches. The rows below are compact, about 44px each: a label, at most one short hint, and the control on the right.
- **Smaller features** sit as blocks inside a group named after their subject. Each block keeps its own switch, and the block's rows dim while it is off.
- **Always-on features** show an "Always on" pill instead of a switch.
- **Timing settings** (today's "Runs every…") become a chip such as "every 5 tool calls". Clicking it opens a small editor: a number, then % of context / tool calls / minutes, or "Or once, when" the agent rests / after work / a session starts. It also shows the shipped value and a Reset.
- **Changed settings** carry a dot, and hovering the row shows Reset.
- **Search** keeps only the matching rows, still inside their groups, and the left list shows how many match in each.
- **Phone width** (this is the viewer at narrow width; the phone app itself has no Settings screen): a list of groups, then one group per screen with bigger switches. Timing opens as a bottom sheet.
- **States drawn:** dark and light, the timing editor open, search, a block that is off, an always-on block, and three phone screens.

**Alternatives in the file:** 1b shows one group at a time, and 1c has one left-list entry per feature (more than forty). I picked 1a, the single scrolling page. The user asked for one merged page, and search should narrow that same page. 1b hides where a setting lives, and 1c reads like a feature catalogue rather than a settings page.

## Critique round (turn 2)
I looked at it as a first-time user and as someone used to macOS/Linear-style settings.

**Taken:**
- The group switch is now a plain switch with "On"/"Off" beside it, lined up with the row switches.
- "Hold writes" and "Hold tool calls" now say "Pause".
- There is one help pattern everywhere: a plain "How it works" link, with no "?" circles.
- The Changed filter carries the same dot as changed rows, so the dot explains itself.
- Journal says "For the whole project, every environment" and Viewer says "For this browser only".
- Group lines for Messages, Plans, Work tracking and Boards are plainer.
- The timing editor's second line reads "Or once, when".

**Not taken:**
- Moving the feature switch into the card as its first row. It would repeat the group's name.
- Dropping "How it works". It is the only help each feature has in the viewer.
- Putting the unit inside the number field. "5 times" reads as a sentence and matches today's panel.

## Content table
Values are the shipped defaults. The design itself shows two of them changed (every 5 tool calls, 2 tickets) so the "changed" state is visible. ↳ marks a row that belongs to the block above it.

| Group | New label | Hint | Was | Control (default) |
|---|---|---|---|---|
| Journal | Project color | The band that tells this project apart from other open journals | Project color | color |
| Journal | Deliver messages while the agent works | Off: they are typed into its terminal instead | Send lines through the channel | switch |
| Journal | Start the last agent when you write | Only when no agent is running | Start the environment's last agent when the user writes and none is running | switch |
| Journal | Set other hooks aside at launch | They are put back when the agent exits | Clean slate (feature) | switch |
| Journal | Chrome extension | The chat on any page; the agent can see and use the tab | Chrome extension | buttons: Add to Chrome, Download |
| Journal | Services | Start, stop and read the logs of the journal's processes | Services | button: Show services |
| Journal | **Install updates automatically** | Off: the agent installs a new version instead | Auto-update (feature + timing) | switch + timing (every 5 minutes) |
| Journal | Always on: Start agents from the viewer · Open the viewer at launch · Let the agent use your browser tab · Plugins | | Start an agent in an environment · Open the viewer at start · Controlling your browser tab · Plugins (fixed features) | one "Always on" line |
| Journal | Stop the journal | Closes the viewer, the engine and every plugin. Nothing is deleted. | Stop the journal (Shut down) | danger button |
| Viewer | Show what happened while you were away | A card when you come back to this tab | While you were away card | switch |
| Viewer | Show the Home tour | | Home tour | switch |
| Viewer | **Show the status bar** | | Status bar (feature) | switch |
| Viewer | ↳ Show how much of the plan is left | | Show how much of the plan is left | switch |
| Viewer | Show the agent's terminal | | Terminal (feature) | switch |
| Viewer | Connect a phone | Scan a code to use the chat from your phone | Phone connection (feature) | switch |
| Viewer | Show the agent family tree | | Agent family tree (feature) | switch |
| Viewer | Show the agent organization | Domains and roles read from the project | Agent organization (feature) | switch |
| Chat | Show what the agent is thinking | | Thinking (feature) | switch |
| Chat | Show file edits as they land | | File feed (feature) | switch |
| Chat | Show branch switches | | Branch switches in the chat (feature) | switch |
| Chat | Show history searches | | History searches in the chat (feature) | switch |
| Chat | Hide turns that only acknowledge | The chat's Shown menu brings them back | Hidden acknowledgements (feature) | switch |
| Chat | Pin links the agent gives you | | Pinned links (feature) | switch |
| Chat | Pin open pull requests | | Pull requests (feature) | switch |
| Chat | Show buttons on the agent's messages | | Buttons on messages (feature) | switch |
| Chat | Turn row numbers into links | to-do 648 opens to-do 648 | Row links (feature) | switch |
| Chat | Show update reports as cards | | Update reports (feature) | switch |
| Chat | **Show permission prompts** | Allow and Deny in the chat | Permission prompts (feature) | switch |
| Chat | ↳ Skip permission prompts | Restarts the agent in the same conversation | Skip permission prompts | switch |
| Agent | **Address you by title** | | How the agent addresses you (feature) | switch |
| Agent | ↳ Title | Empty: your first name alone | What the agent calls you | text (Sir) |
| Agent | ↳ First name | Empty: the name git knows you by | Your first name | text |
| Agent | **Work modes** | | Work modes (feature) | switch |
| Agent | ↳ Mode | | How the agent works: builder, orchestrator or solo | segmented: Builder / Orchestrator / Solo |
| Agent | ↳ Remind an orchestrator after its own edits | | In orchestrator mode, remind the agent after this many of its own file edits | number (8 edits) |
| Agent | **Keep journal talk out of the chat** | | Chat etiquette (feature) | switch |
| Agent | ↳ Remind the agent | | Remind the agent of chat etiquette every few journal lines | switch + timing (every 20 journal lines) |
| Agent | Brief each new session | | Session briefing (feature) | switch |
| Agent | **Run commands from tags** | A tag the agent writes runs the command it stands for | Command tags (feature) | switch |
| Agent | ↳ Show the agent the tag for a command | | Show the tag for a command | switch + timing (every 30 minutes) |
| Sessions and helpers | **Track agent sessions** | | Agent sessions (feature) | switch |
| Sessions and helpers | ↳ Pause a session pushed out of its environment | Its writes wait until it claims the environment back | Hold a session whose environment was claimed | switch |
| Sessions and helpers | ↳ Mark silent sessions stopped | | Mark a silent session stopped | switch + timing (every hour) |
| Sessions and helpers | ↳ ↳ Silent for | | Mark a session stopped after | number (60 minutes) |
| Sessions and helpers | ↳ Release a silent subagent's rows | | Mind a subagent's rows | switch |
| Sessions and helpers | ↳ ↳ Silent for | | Give a subagent's rows back after | number (20 minutes) |
| Sessions and helpers | ↳ List sessions active in the last | | List sessions active in the last | number (60 minutes) |
| Sessions and helpers | Wait for named agents and runs | Results come back when they all finish | Waiting on agents and runs (feature) | switch |
| Sessions and helpers | Allow helper agents | | Helpers (feature) | switch |
| Sessions and helpers | Give each helper its own worktree | | Helper worktrees (feature) | switch |
| Sessions and helpers | Link worktrees to the project's journal | | Worktrees (feature) | switch |
| Long commands | **Long commands** (group switch) | Move a command that holds the terminal to the background | Long commands (feature) | switch |
| Long commands | Move to the background after | | Move a command to the background after | number (30 seconds) |
| Long commands | Tell the agent about commands it left running | When one ends or has run ten minutes | Tell an agent about the commands it left running | switch |
| Laws | **Laws** (always on) | Dispatch and reading rules every agent follows | Journal laws (fixed) | Always on |
| Laws | Name subagents after cartoon characters | | Name subagents after cartoon characters | switch |
| Laws | Refuse to read a whole file longer than | | Refuse reading a whole file longer than | number (300 lines) |
| Laws | Keep lines at each end of long output | 0 keeps every line | Keep this many lines at each end of a long command's output | number (200 lines) |
| Laws | Name the largest tool result of the session | | Tell the agent when a tool result is the largest this session | switch |
| Laws | ↳ Ignore results smaller than | | Tell the agent about a tool result from | number (20000 characters) |
| Laws | Warn when an instruction file is too long | | Tell the agent when an instruction file is longer than its provider reads | switch + timing (every day) |
| Laws | Repeat a law when its keyword comes up | | Whisper a row when one of its keywords appears | switch + timing (every 100 tool calls) |
| Skills | **Skills** (group switch) | Which skills load, and when | Skill loading (feature) | switch |
| Skills | Remind the agent to load the journal skill | | Skill loading's own timing | timing (every 25 tool calls) |
| Skills | Load a skill when its keyword comes up | | Load a skill when one of its keywords comes up | switch |
| Skills | Show each loaded skill in the chat | | Show each skill the agent loads as a line in the chat | switch |
| Skills | Pause writes after a compaction until the skill is loaded | | Hold writes after a compaction until the journal skill is loaded again | switch |
| Skills | Pause tool calls until every-start skills are loaded | | Hold tool calls at a session start until every always-on skill is loaded | switch |
| Skills | Reload every-start skills that changed | | Hold tool calls when an every-start skill changed since it was loaded | switch |
| Skills | Refuse tool calls at most | Then they go through for a while | Refuse tool calls for a missing skill at most | number (5 times) |
| Skills | Then let tool calls through for | | Then let tool calls through for | number (10 tool calls) |
| Skills | After a compaction, also reload the last used | | After a compaction, also reload the skills last used, this many | number (5 skills) |
| Work tracking | **Work tracking** (group switch) | The agent opens work before it edits and logs it on its to-do | Work tracking (feature) | switch |
| Work tracking | Check open work | | Work tracking's own timing | timing (after the agent works) |
| Work tracking | Work the list without asking | | Work the list without asking | switch + timing (when the agent rests) |
| Work tracking | Tell a stopped agent to carry on | | Tell an agent that stopped with work in hand to carry on | switch + timing (every 10 minutes) |
| Work tracking | Pause writes after edits without a log entry | | Hold the writes after this many edits without a log entry | number (20 edits) |
| Work tracking | Name the work in hand every | | Name the work in hand every | number (10 edits) |
| Work tracking | Check what the agent waits on every | | Have the agent check what it waits on every | number (5 minutes) |
| Work tracking | Recheck a blocked to-do every | | Ask whether a blocked to-do is still blocked every | number (1 closed to-do) |
| Work tracking | **Catch work put off for later** | Said once when a later has no to-do | Catch put-off work (feature) | switch + timing (when the agent rests) |
| Work tracking | **Close to-dos from commit messages** | Journal: todos done 648 | Close to-dos from commits (feature) | switch |
| Plans | **Plans** (group switch) | How the agent moves through a plan | Planning (feature) | switch |
| Plans | Nudge an agent that stalls on a running plan | | Tell an agent standing still to carry on with the running plan | switch + timing (every 5 minutes) |
| Plans | Recheck a running plan's blocked to-dos | | Ask whether a running plan's blocked to-dos still are | switch + timing (every 30 minutes) |
| Questions | **Questions** (always on) | Choices only you can make are asked as questions | Questions, not prose choices (fixed) | Always on |
| Questions | Pause writes until choices are asked as a question | | Ask through a question, not in prose | switch + timing (when the agent rests) |
| Questions | Recheck questions open longer than a day | | Ask whether a question open for a day is still needed | switch + timing (every day) |
| Questions | Undo a picked answer within | | Hold a picked answer | number (3 seconds) |
| Messages | **Messages** (group switch) | How the agent handles the messages you send | Messaging (feature) | switch |
| Messages | Name unread messages | | Name the unread messages | switch + timing (every 3 tool calls) |
| Messages | ↳ Pause writes after naming them | | Hold writes after the unread messages are named this often | number (5 times) |
| Messages | Require a reply before writing | | Answer a message before writing | switch + timing (every 10 tool calls) |
| Messages | ↳ Stop asking after | | Stop naming an unanswered message after | number (3 times) |
| Messages | Close a message once it is handled | | Close a message once it is dealt with | switch |
| Messages | Link new rows to the open message | | Link what is filed to the message in hand | switch |
| Messages | Remind to keep paragraphs apart | | Keep the paragraphs of a message apart | switch + timing (when the agent rests) |
| Messages | Remind to name what a number is | answered 1712 becomes answered message 1712 | Name what a number in a message is | switch |
| Sequences | **Sequences** (group switch) | Steps the agent follows in order | Sequences (feature) | switch |
| Sequences | Remind about an unfinished step | | Remind the agent of a sequence step left unfinished, plus Nudge the agent about a sequence step standing still every (merged) | switch + timing (every minute) |
| Boards | **Boards** (group switch) | Ticket boards and the agents that fill them | Boards (feature) | switch |
| Boards | Suggest new work | Shown as chips under New work | Think up new ideas for New work | switch + timing (every 12 hours) |
| Boards | Board filler model | | Model of the agent that fills a board | segmented: Haiku / Sonnet / Opus (Sonnet) |
| Boards | Reviewer model | | Model of the agents that review plans, tickets and the board's goal | segmented (Sonnet) |
| Boards | This environment orchestrates its boards | On: its agent only delegates | This environment's agent orchestrates its boards | switch |
| Boards | **Show to-dos as a kanban board** | | Kanban board (feature) | switch |
| Boards | ↳ Keep done cards for | | Show done cards for | number (7 days) |
| Tickets | **Tickets** (group switch) | Each ticket runs in an environment of its own | Tickets (feature) | switch |
| Tickets | Check the tickets | | Tickets' own timing | timing (every minute) |
| Tickets | Tickets running at once | 0: no limit | Tickets whose agents run at once, 0 for no limit | number (3 tickets) |
| Tickets | Repeat that a ticket's plan is done every | | Tell the orchestrator again that a ticket's plan is done every | number (5 minutes) |
| Tickets | Remind the orchestrator of a ticket's open question | | Remind the orchestrator of a ticket agent's open question | switch + timing (every 5 minutes) |
| Tickets | Remind it of a ticket waiting on a person | | Remind the orchestrator of a ticket agent waiting on a person | switch + timing (every 5 minutes) |
| Tickets | Remind it of decisions it may take | | Remind the orchestrator of waits and drafts it may decide | switch + timing (every 5 minutes) |
| Tickets | Ask an idle orchestrator to check its boards | | Ask an idle orchestrator to check on its boards | switch + timing (every 5 minutes) |
| Tickets | **Run each ticket's own app** | From its worktree, while it is worked on | Ticket apps (feature) | switch + timing (every minute) |
| Memory | **Memory checkpoints** | | Memory checkpoints (feature) | switch + timing (at 50, 70, 90, 95% of context) |
| Memory | ↳ Reread every rule and fact each week | | Read every rule and fact again each week | switch + timing (every day) |
| Memory | **Repeat facts** | | Facts (feature) | switch + timing (every 25% of context) |
| Memory | ↳ Repeat a fact when its keyword comes up | | Whisper a row when one of its keywords appears | switch + timing (every 100 tool calls) |
| Memory | **Repeat reminders** | | Reminders (feature) | switch + timing (every 25% of context) |
| Memory | ↳ Repeat a reminder when its keyword comes up | | Whisper a row when one of its keywords appears | switch + timing (every 100 tool calls) |
| Memory | **Repeat rules** | | Rules (feature) | switch + timing (every 25% of context) |
| Memory | ↳ Repeat a rule when its keyword comes up | | Whisper a row when one of its keywords appears | switch + timing (every 100 tool calls) |
| Records | **Check the record for rows that no longer hold** | | Record audit (feature) | switch + timing (every day) |
| Records | **Ask for source links** | On new plans, documents and reports | Source links (feature) | switch |
| Records | ↳ Count what was read in the last | | Count what was read in the last | number (30 minutes) |
| Records | **Keep document revisions** | | Revisions (feature) | switch |
| Records | ↳ Save an open revision after no edits for | | Keep an open revision after | number (30 minutes) |
| Records | **Read attachments for the agent** | | Describing attachments (feature) | switch |
| Records | ↳ Ask for a description of each image and video | | Ask for a description of each image and video | switch |
| Records | ↳ Sample videos into frames | Needs ffmpeg | Sample a video into frames | switch |
| Records | **Triggers** | Your watch words and what they do | Triggers (feature) | switch |
| Records | ↳ Fire a trigger when its word comes up | | Fire a trigger when one of its words comes up | switch |
| Records | Collections | | Collections (feature) | switch |
| Records | Sort dumped files into a collection | | Dumps (feature) | switch |
| Records | Templates | | Templates (feature) | switch |
| Records | Turn accepted suggestions into to-dos | | Suggestions (feature) | switch |
| Records | Checks | Pass or fail scripts; a failure is filed | Checks (feature) | switch |
| Archive and cleanup | **Archive finished rows** | | Auto-archive (feature) | switch + timing (every hour) |
| Archive and cleanup | ↳ Keep reports for | 0 keeps them listed | Keep: reports | number (14 days) |
| Archive and cleanup | ↳ Keep finished to-dos for | | Keep: todos | number (7 days) |
| Archive and cleanup | **Clean the runtime folder** (always on) | | Runtime cleanup (fixed) | Always on + timing (every hour) |
| Archive and cleanup | ↳ Remove a quiet session's files after | | Remove a quiet session's files after | number (2 days) |
| Sharing | **Sharing** (group switch) | Share one item through a tunler link | Sharing (feature) | switch |
| Sharing | Tunler server | | Tunler server | text (tunler.jessegall.nl) |
| Developer | **Report developer faults** | | Developer fault reports (feature, off by default) | switch |
| Developer | ↳ Report anything slower than 50 ms | | Report anything slower than its budget | switch |
| Developer | ↳ Report errors the viewer throws | | Report what the viewer throws | switch |
| Developer | ↳ Write a diagnostic log | .journal/runtime/diagnostics.log | Keep a diagnostic log | switch (off) |
| Developer | **Critique rounds** | | Critique rounds (feature) | switch |
| Developer | ↳ App address | | The address the critics open, such as the phone app of a demo journal | text |
| Developer | ↳ Login file | | A browser storage file the critics start logged in with | text |
| Developer | ↳ Demo data command | | The project's own command that puts demo data in place before a round | text |
| Developer | ↳ Playwright folder | | A folder with Playwright installed, for the critics' browsers | text |
| Developer | Allow session recording | | Session recording (feature) | switch |
| More | Environments, Tunler | | the Environments and Tunler tabs | links to the existing views |

All 66 features, every behaviour and every setting has a place except `command_tags.runs`. That one is a map setting the current page already leaves out, and the design leaves it out too.

## Dropped or changed
- **Dropped:** the "What it can say to the agent" section, which today lists 121 lines across 39 features.
- **Shortened:** each feature's long description becomes the one-line hint. The "When it runs" block becomes the timing chip.
- **Replaced:** the Options / Environments / Tunler tabs are now entries in the left list.
- **Gone:** the side panel that opened per feature, and the folded "Always on" list. Always-on features now show in place with their pill.

## Components the build needs
- **`domain/settingsCatalog.js` (pure):**
  - Builds sections, groups, blocks and rows from `store.spec.features` plus the loose Journal and Viewer settings, using the labels and hints above.
  - Searches over label and hint (a group-title match shows the whole group).
  - Counts Changed and Off rows.
  - Turns a timing into words (`whenWords` moves here).
  - Knows each row's control kind and its shipped value for Reset.
- **`kit/SettingGroup.vue`:**
  - The heading: title, one line, "How it works" disclosure, and either an On/Off switch or the "Always on" pill.
  - The card body.
  - A block variant: a head row with its own switch and optional timing chip, with child rows that dim while it is off.
  - The "Always on" footer line.
- **`kit/SettingControl.vue`:**
  - One row: label, optional hint, changed dot, and Reset on hover.
  - Controls: switch, number plus unit, text, segmented choice, timing chip, color, buttons, and danger button.
  - The timing chip opens a popover on desktop and a bottom sheet at phone width. It holds the number with a Segmented unit, the event choices, an "at 50, 70, 90, 95%" marks field, and Reset to the shipped value.
- **Reused as they are:** Switch, Segmented, TextInput, Btn, PageBar, EmptyState; `Section.vue` for the color; ServicesPanel; SettingsEnvironments; SettingsTunnel; and the save helpers in `featureSettings.js` (flip, every, unit, marks).
- **Replaced:** FeaturePanel, UList, FeatureRetention and FeaturePermissions, whose contents become ordinary rows.

## Open points
1. The "How it works" texts are written to the agent ("you"). I kept them behind the link; rewording them for the user would be separate work.
2. Sequences has two controls for one thing (`unfinished` timing and `nudge_every`). I merged them into one row, so the build has to pick which key that row saves.
3. The model choices are free text in the code. If someone has set a model other than Haiku, Sonnet or Opus, the segmented control should show it as a fourth segment.

Design: https://claude.ai/design/p/ae068ac0-17a8-4ae4-a6a3-73171e725137?file=Settings+page.html

**What I changed and why:**
- **One page with a contents list:** the user asked for every feature's settings merged into one page.
- **Features grouped by subject:** small features became blocks inside subject groups, which keeps the left list scannable.
- **Agent-told sections removed:** the user asked for that.
- **Plain labels:** every label rewritten to say what happens, for example "Developer", not "Developer fault reports".
- **Timing chips:** replace the cadence editor, so timing is one control on the row.
- **Switches in one column, "Pause" wording, one help pattern:** these came from the critique.
