diff --git a/TODO.md b/TODO.md index 2f43ed05..39f5386a 100644 --- a/TODO.md +++ b/TODO.md @@ -20,39 +20,39 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Themes -**84 open, 25 closed**, across 29 themes. +**87 open, 25 closed**, across 29 themes. -| Theme | Open | Closed | -| --- | --- | --- | -| [Affordances](todo/affordances/) | 1 | 0 | -| [Speaking into a session from the backend](todo/agent-delivery/) | 2 | 0 | -| [Backburner](todo/backburner/) | 2 | 0 | -| [Background jobs](todo/background-jobs/) | 2 | 0 | -| [Chat interface](todo/chat/) | 1 | 0 | -| [Code editor](todo/code-editor/) | 1 | 0 | -| [Components — the shared UI layer](todo/components/) | 1 | 0 | -| [File watchers](todo/file-watchers/) | 1 | 0 | -| [Fleet — one command across every server](todo/fleet/) | 5 | 2 | -| [Headscale](todo/headscale/) | 0 | 5 | -| [Infra (alpha)](todo/infra/) | 6 | 0 | -| [Known bugs](todo/known-bugs/) | 3 | 2 | -| [Mobile apps](todo/mobile-apps/) | 3 | 0 | -| [Multi-user](todo/multi-user/) | 16 | 5 | -| [Notifications](todo/notifications/) | 1 | 0 | -| [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | -| [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 | -| [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 | -| [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 | -| [Prompt library](todo/prompt-library/) | 1 | 0 | -| [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 | -| [Shell — spotlight and the dock](todo/shell/) | 1 | 1 | -| [Sub-agents — agents spawning agents](todo/sub-agents/) | 1 | 1 | -| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | -| [Tooling — the list about the list](todo/tooling/) | 1 | 0 | -| [Transmission](todo/transmission/) | 6 | 0 | -| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 | -| [Waiting on the owner to run it](todo/waiting-on-owner/) | 2 | 0 | -| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | +| Theme | Open | Closed | +| ------------------------------------------------------------------------------------------ | ---- | ------ | +| [Affordances](todo/affordances/) | 1 | 0 | +| [Speaking into a session from the backend](todo/agent-delivery/) | 2 | 0 | +| [Backburner](todo/backburner/) | 2 | 0 | +| [Background jobs](todo/background-jobs/) | 2 | 0 | +| [Chat interface](todo/chat/) | 1 | 0 | +| [Code editor](todo/code-editor/) | 1 | 0 | +| [Components — the shared UI layer](todo/components/) | 1 | 0 | +| [File watchers](todo/file-watchers/) | 1 | 0 | +| [Fleet — one command across every server](todo/fleet/) | 5 | 2 | +| [Headscale](todo/headscale/) | 0 | 5 | +| [Infra (alpha)](todo/infra/) | 6 | 0 | +| [Known bugs](todo/known-bugs/) | 3 | 2 | +| [Mobile apps](todo/mobile-apps/) | 3 | 0 | +| [Multi-user](todo/multi-user/) | 16 | 5 | +| [Notifications](todo/notifications/) | 1 | 0 | +| [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | +| [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 | +| [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 | +| [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 | +| [Prompt library](todo/prompt-library/) | 1 | 0 | +| [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 | +| [Shell — spotlight and the dock](todo/shell/) | 4 | 1 | +| [Sub-agents — agents spawning agents](todo/sub-agents/) | 1 | 1 | +| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | +| [Tooling — the list about the list](todo/tooling/) | 1 | 0 | +| [Transmission](todo/transmission/) | 6 | 0 | +| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 | +| [Waiting on the owner to run it](todo/waiting-on-owner/) | 2 | 0 | +| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | ## Records — no items, kept for the reasoning @@ -66,10 +66,10 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-22` **A plugin's permission should be on for every role by default, off only on request** — [multi-user/a-plugin-s-permission-should-be-on-for-every](todo/multi-user/a-plugin-s-permission-should-be-on-for-every.md) - `2026-08-22` **A user's settings should export and import as a plain file** — [settings/a-user-s-settings-should-export-and-import-as](todo/settings/a-user-s-settings-should-export-and-import-as.md) - `2026-08-22` **The same for system settings, owned by the Super Admin** — [settings/the-same-for-system-settings-owned-by-the](todo/settings/the-same-for-system-settings-owned-by-the.md) +- `2026-08-22` **All keyboard shortcuts configurable** — [shell/all-keyboard-shortcuts-configurable](todo/shell/all-keyboard-shortcuts-configurable.md) +- `2026-08-22` **Ctrl+? shows every keyboard shortcut in a modal** — [shell/ctrl-shows-every-keyboard-shortcut-in-a-modal](todo/shell/ctrl-shows-every-keyboard-shortcut-in-a-modal.md) +- `2026-08-22` **Revamp the menus — spotlight, themes — toward an Omarchy-like shape** — [shell/revamp-the-menus-toward-an-omarchy-like-shape](todo/shell/revamp-the-menus-toward-an-omarchy-like-shape.md) - `2026-08-21` **No way to see which affordances are reaching your agents, or to turn one off** — [affordances/no-way-to-see-which-affordances-are-reaching](todo/affordances/no-way-to-see-which-affordances-are-reaching.md) - `2026-08-21` **Generalise it: deliver a turn to a named session, from anywhere in the backend** — [agent-delivery/generalise-it-deliver-a-turn-to-a-named](todo/agent-delivery/generalise-it-deliver-a-turn-to-a-named.md) - `2026-08-21` **The cost of resuming grows with the transcript** — [agent-delivery/the-cost-of-resuming-grows-with-the-transcript](todo/agent-delivery/the-cost-of-resuming-grows-with-the-transcript.md) - `2026-08-21` **'An agent spawned by a background job is invisible in the interface'** — [background-jobs/a-spawned-agent-is-invisible-in-the-interface](todo/background-jobs/a-spawned-agent-is-invisible-in-the-interface.md) -- `2026-08-21` **Show how long a turn took, beside its cost and tokens** — [chat/show-how-long-a-turn-took-beside-its-cost](todo/chat/show-how-long-a-turn-took-beside-its-cost.md) -- `2026-08-21` **Map every custom component, centralise it, and let a theme override it** — [components/map-every-custom-component-and-centralise-it](todo/components/map-every-custom-component-and-centralise-it.md) -- `2026-08-21` **Watch a directory, and attach actions to what lands in it** — [file-watchers/watch-a-directory-and-attach-actions-to-what](todo/file-watchers/watch-a-directory-and-attach-actions-to-what.md) diff --git a/todo/shell/all-keyboard-shortcuts-configurable.md b/todo/shell/all-keyboard-shortcuts-configurable.md new file mode 100644 index 00000000..a3402f98 --- /dev/null +++ b/todo/shell/all-keyboard-shortcuts-configurable.md @@ -0,0 +1,33 @@ +--- +id: shell/all-keyboard-shortcuts-configurable +title: "All keyboard shortcuts configurable" +theme: shell +status: open +created: 2026-08-22 +date_source: stated +order: 3 +--- + +**All keyboard shortcuts configurable.** Stated 2026-08-22 as coming soon. Every binding in the app +should be something the owner sets, not something the code decides. + +**There is nothing central to configure today.** Nine separate `keydown` listeners are registered across +the app — the code editor, the file browser and its grid and dialogs, the terminal, the chat launcher, +the embeddable chat, the file viewer's editor, and Spotlight — each owning its own keys, in its own +component, with no registry and no way to see the set at once. So the first half of this is an +inventory, and the second is a registry the bindings are read FROM rather than written INTO the +components. + +Spotlight is the cautionary tale and it is already written down in `Spotlight.tsx:14`: the launcher went +`ctrl-space` → `shift-space` → `alt-space`, three changes in a day, because each chord turned out to +collide with something — `shift-space` types a space, which is why that version needed a focus check +that `alt-space` does not. **A hard-coded chord costs a code change and a release every time it is +wrong**, which is the argument for this item in one sentence. + +Worth deciding with the config format: a binding that conflicts with another must be refused or flagged +at the moment it is set, since the failure otherwise is silent and shows up as "that key does nothing". +And a browser cannot claim every chord — some are the browser's or the window manager's — so the UI has +to be able to say a binding was rejected by something above it. + +Storage lands on `todo/settings/` — this is exactly the kind of preference that should be a portable +file rather than a row. diff --git a/todo/shell/ctrl-shows-every-keyboard-shortcut-in-a-modal.md b/todo/shell/ctrl-shows-every-keyboard-shortcut-in-a-modal.md new file mode 100644 index 00000000..7ca37494 --- /dev/null +++ b/todo/shell/ctrl-shows-every-keyboard-shortcut-in-a-modal.md @@ -0,0 +1,22 @@ +--- +id: shell/ctrl-shows-every-keyboard-shortcut-in-a-modal +title: "Ctrl+? shows every keyboard shortcut in a modal" +theme: shell +status: open +created: 2026-08-22 +date_source: stated +order: 4 +--- + +**Ctrl+? shows every keyboard shortcut in a modal.** Stated 2026-08-22, alongside making the bindings +configurable. One chord, and the whole set is on screen. + +It is the same work seen from the other end, and the order matters: **the modal is trivial once a +registry exists and impossible to keep honest before that.** Today the bindings live in nine separate +`keydown` listeners across the app, so a hand-written list of shortcuts would be a second copy of +something nobody updates — a help screen that lies is worse than none. Build it as a render of the +registry from `shell/all-keyboard-shortcuts-configurable`, never as its own list. + +Two things to get right when it is built: the modal should show which bindings apply **here** versus +everywhere, since most of the nine are scoped to one app or panel; and it is the natural place to +surface a conflict or a chord the browser refused, because that is when someone is looking. diff --git a/todo/shell/revamp-the-menus-toward-an-omarchy-like-shape.md b/todo/shell/revamp-the-menus-toward-an-omarchy-like-shape.md new file mode 100644 index 00000000..02969b3c --- /dev/null +++ b/todo/shell/revamp-the-menus-toward-an-omarchy-like-shape.md @@ -0,0 +1,26 @@ +--- +id: shell/revamp-the-menus-toward-an-omarchy-like-shape +title: "Revamp the menus — spotlight, themes — toward an Omarchy-like shape" +theme: shell +status: open +created: 2026-08-22 +date_source: stated +order: 5 +--- + +**Revamp the menus — spotlight, themes — toward an Omarchy-like shape.** Flagged 2026-08-22 as a plan +the owner has and has deliberately not worked out yet: *"i have plans… i think some time soon we will +take a more Omarchy like approach but i am too happy right now to think about that."* + +**Recorded so it is not lost, not so someone can start it.** The shape is his and does not exist on +paper yet — ask him before designing anything here. + +What is already true and will be the raw material: Spotlight exists and opens on `alt-space` +(`Spotlight.tsx`), the dock is full and cannot grow, and all 22 themes are generated from Omarchy's own +palettes by `scripts/generate-themes.ts` — so the borrowing has already started on the colour side and +this is the same borrowing extended to the menus. `shell/dock-effects-and-auto-hide` and the launcher +item are both part of whatever this becomes rather than separate work. + +Note the two keyboard items in this theme are probably prerequisites rather than neighbours: an +Omarchy-like shell is keyboard-driven first, and that needs bindings to be configurable and discoverable +before the menus are rebuilt around them.