my-work-ui
Skill65 starsChanged 16 days agoMITView on GitHub
UX principles for the My Work canvas (the my-issues-triage panel). Use before changing, rebuilding, restyling or customising any part of its UI, including layout, toolbars, lists, bands, the details pane, buttons, colours and density, and when reviewing such a change. It keeps the panel looking and behaving like VS Code, simple and quiet.
In this repository30 other files it gives its agents.
- AGENTS.mdAGENTS.md
- manage-bansSkill
- build-healthSkill
- setup-component-explorer-fullSkill
- setup-component-explorer-lightSkill
- setup-component-explorerSkill
- use-component-explorerSkill
- debugSkill
- inbox-add-reactionSkill
- inbox-dismiss-notificationSkill
- inbox-get-notification-detailsSkill
- inbox-install-gh-cliSkill
- inbox-list-notificationsSkill
- inbox-manage-subscriptionSkill
- inbox-mark-all-readSkill
- inbox-memorySkill
- inbox-open-notificationSkill
- inbox-search-issuesSkill
- inbox-setupSkill
- council-planSkill
- council-reviewSkill
- monitor-prSkill
- my-issuesSkill
- my-work-setupSkill
- generate-presentationSkill
- generate-videoSkill
- review-areasSkill
- review-planSkill
- session-timelineSkill
- generate-test-videoSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 8 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 30
When VS Code has a token for something new, map it in toTokens() and use it.
- Distinctive: line 49
Compact: no gaps and no corners; the panes are joined by one 1px border.
- Very specific: line 58
Every band collapses, and its state is saved in collapsedGroups.
- Distinctive: line 62
No description or reason lines: those belong in the tooltip and the details pane.
- Distinctive: line 69
Every count (band and stage) is a badge aligned on the same right edge.
- Very specific: line 78
Don't add rows of pills. A filter that switches on is a toggle action using --toggle-*.
- Distinctive: line 86
Keep it simple: Before adding a control, look for an existing place for it: a menu, a tooltip, or the details pane.
- Very specific: line 88
Chat inputs look like VS Code's chat input: Every input is one bordered box (--input-bg, --input-border, --focus border while focused, 6px …
- Distinctive: line 90
Add a toolbar row under the text only when there are more input actions (attach, mode).
- Very specific: line 93
Never build a separate input style for a new chat surface: reuse .composer.
- Distinctive: line 102
Flat content: no cards, boxes, tinted backgrounds or shadows inside sections.
- Very specific: line 111
Every icon-only control has an aria-label and a tooltip.
- Distinctive: line 119
Before committing, check the change live in the panel (screenshots) for each of:
- Distinctive: line 123
No horizontal overflow, and nothing clipped at the right edge, including the header split button.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
My Work canvas: UX principles
The My Work panel must look and behave like a part of VS Code, not like a web app. It should stay simple: one row of controls per view, no repeated labels, and no boxes where a line will do. Apply every rule below to new UI as well as existing UI. If a request conflicts with a rule, say which rule and ask before breaking it.
Code: com.github.copilot/extensions/my-work/assets/ (app.js, style.css, index.html) and lib/vscodeTheme.mjs. Asset edits reload open panels automatically. Changes in lib/ need an extensions reload and the canvas reopened.
1. VS Code look
Colours come from the VS Code theme.
lib/vscodeTheme.mjsmaps the host theme into CSS variables. Use these variables and never hard-coded colours. Each has a fallback for the panel's own Light and Dark themes, for examplevar(--section-bg, transparent).Element Variables VS Code tokens Band and section headers --section-bg/fg/bordersideBarSectionHeader.*Row hover --hoverlist.hoverBackgroundSelected row --sel-bg/fg,--sel-active-bg/fglist.inactiveSelection*,list.activeSelection*Focus --focuslist.focusOutline,focusBorderCounts --badge-bg/fgbadge.*Primary button --accent,--accent-fg,--btn-hover,--btn-border,--btn-separatorbutton.*Other buttons --btn2-bg/fg/hover/borderbutton.secondary*Inputs, dropdowns --input-*,--dropdown-*input.*,dropdown.*Icon actions --toolbar-hover,--icon-fgtoolbar.hoverBackground,icon.foregroundToggled actions --toggle-bg/fg/borderinputOption.active*Tabs --tab-fg,--tab-active-fg/borderpanelTitle.*When VS Code has a token for something new, map it in
toTokens()and use it.- Shapes and type follow VS Code.
- 4px corners (
--r). No shadows on panes, buttons or cards. - The VS Code system font and 13px base size.
- Focus is a 1px
--focusoutline inset by 1px.
- 4px corners (
- Icons are codicons. The font comes from the VS Code installation. A new icon needs its
.codicon-<name>::beforecode point, taken from VS Code'ssrc/vs/base/common/codiconsLibrary.ts. - Text: sentence case. The only uppercase text is 11px bold pane and section headers, as in VS Code.
- The activity bar (the left rail) is VS Code's activity bar.
- 48px square items with 24px icons and no logo. Inactive icons use
--ab-inactive(activityBar.inactiveForeground); the active one uses--ab-fg, with a 2px--ab-active-borderon its left edge. - Counts are small, quiet numbers under the icon, in the icon's colour. Not
activityBarBadgebadges, which are too heavy here. - Tooltips use the hover widget colours (
editorHoverWidget.*). - Settings and Refresh sit at the bottom, like Manage and Accounts.
- 48px square items with 24px icons and no logo. Inactive icons use
2. Layout and density
- Two panes: the list on the left and the details on the right. When the panel is narrow they stack, list on top. The page grid uses
minmax(0, 1fr), so wide content (a long code line) can never push a pane past the window. - Density follows VS Code's
window.density.layout, read from the user settings and pushed live. The panel's Density setting offers VS Code (follow), Default and Compact.- Default: the panes are cards with a 4px gap and small padding.
- Compact: no gaps and no corners; the panes are joined by one 1px border. Spacing inside is tighter.
- The sash between the panes behaves like a VS Code sash:
- It is 4px wide and highlights in
--accentafter hovering a moment. - Drag it, or use the arrow keys when it has focus. Double-click resets it.
- The size is saved (
listWidth, orlistHeightwhen stacked).
- It is 4px wide and highlights in
3. Lists and bands
- A band is a VS Code view pane header. It is full width and 22px tall, with an 11px bold uppercase title, a 16px chevron, header colours and a count badge on the right.
- Every band collapses, and its state is saved in
collapsedGroups. - Its one-line description is the title's tooltip, not a line under it.
- Every band collapses, and its state is saved in
- Collapse All / Expand All sits in each view's action bar and toggles icon and label with the state.
- A row is a title plus at most one meta line. The meta line holds the number, age, and only the tags that change a decision.
- No description or reason lines: those belong in the tooltip and the details pane.
- Rows are square and use the list hover and selection colours.
- Row actions are an action bar. They show on hover or focus as 22px icon buttons with 5px corners, on an opaque background so they cover the title. Each has a tooltip and an
aria-label. - My Work groups have In progress / To do / Done stages:
- Stages collapse; Done starts collapsed.
- A session that works on or fixed an issue stands for that issue, so nothing is listed twice.
- Indent like a VS Code tree, one 16px step per level: band chevron, stage chevron 16px in, item titles under the stage title.
- Every count (band and stage) is a badge aligned on the same right edge.
- Header actions such as Clear done are icon actions, not text links.
4. Toolbars and actions
- One toolbar row per view: the area picker, then an icon action bar, then Refresh.
- Counts sit next to their icons, for example Route 2, Auto-dismiss 7, Safe to dismiss 12.
- Labels and status ("Updated 1m ago") go in tooltips.
- Actions keep fixed places: show them disabled at 0 rather than hiding them, and let a busy state replace an action in its own slot, so the bar never jumps.
- Don't add rows of pills. A filter that switches on is a toggle action using
--toggle-*.
- Search works like the Settings and Keyboard Shortcuts editors.
- One full-width input with its actions inside it on the right: Group by (an icon over an invisible native select), Recent filters, Refresh.
- Source tabs (Bugs, Features, All, Reviews) go under the input as VS Code panel tabs with an underline on the active one. A secondary dropdown goes on the right of that row.
- Buttons:
- Give each place one primary button. Everything else is a secondary button or an icon action.
- A primary action with alternatives is a split button: one joined shape with a
--btn-separatorline, not two separate buttons.
- Leave breathing space. The toolbar has about 10px of padding around it (8px in Compact), rows keep at least 6px above and below, and nothing touches the pane edge. When space is short, labels truncate with an ellipsis; actions never get pushed out of view.
- Keep it simple. Before adding a control, look for an existing place for it: a menu, a tooltip, or the details pane. Rare actions go in menus, never in the always-visible toolbar.
- Chat inputs look like VS Code's chat input. Every input is one bordered box (
--input-bg,--input-border,--focusborder while focused, 6px corners) built by the same.composermarkup.- One line: the auto-growing text area, with Send as a 22px icon action at its end, coloured
--accentonce there is text or focus. It is never a big filled button. - Add a toolbar row under the text only when there are more input actions (attach, mode).
- Pasted screenshots show above the text.
- Enter sends; Shift+Enter adds a new line.
- Never build a separate input style for a new chat surface: reuse
.composer.
- One line: the auto-growing text area, with Send as a 22px icon action at its end, coloured
5. Details pane
- The header has the title (15px), one meta line (number, kind, age) and the primary split button on the right.
- Sections are VS Code panes. Every block (Recommended next, Suggested approach, Sweeper's assessment, Sessions, Description, On GitHub, Comments, Your checks, Sweeper's evidence, Works on, Latest reply…) gets a full-width section header with a chevron, built by
sectionizeDetail()from.reco-h,.reco > .section-label,.linked > .linked-head,.gh-titleand.gh-comments-h.- Header actions such as "Ask the chat" sit on the right of the header.
- Folded sections stay folded, keyed by name (
d-<name>incollapsedGroups). A new block must use one of these header classes, so it becomes a section automatically. - Collapse All Sections / Expand All Sections is an icon action in the details header next to the primary button, shown when there are two or more sections. Every details view (notification, issue, PR, session, note, browse item) uses the same section style.
- Flat content: no cards, boxes, tinted backgrounds or shadows inside sections.
- Status messages (Needs you, Your rules, Sweeper proposes) are an icon line with a 2px coloured left edge.
- Recommendations are plain list rows.
- Clamp long text: the description gets "Show full description". Comments over about 240px get "Show more", remembered for the session. A commenter's role (member, owner) is quiet text, not a chip.
6. Behaviour
- Hovers: native
titletooltips don't show in the canvas webview. A shared VS Code-style hover widget (.vs-hover,editorHoverWidget.*colours, 500ms delay) shows any element'stitle. Icon-only buttons fall back to theiraria-label, and the activity bar usesdata-label. Every action and every meaningful icon needs atitle. Purely decorative icons beside visible text don't. - Accessibility:
- Every icon-only control has an
aria-labeland a tooltip. - Headers and toggles are buttons with
aria-expanded, and Enter or Space toggles them. - The list supports keyboard navigation, and Alt+↑/↓ reorders items within a section.
- Every icon-only control has an
- Persist what the user arranges: collapsed bands and sections, pane size, density, reorder, grouping and filters.
- The panel never changes GitHub on its own. Actions that post, close, assign or dismiss need the user's explicit click or approval. Panel requests to the chat say "change nothing on GitHub".
7. Check every UI change
Before committing, check the change live in the panel (screenshots) for each of:
- Both densities, Default and Compact, and the narrow stacked layout.
- The VS Code theme and the panel's own Light and Dark themes. Fallbacks must work when a token is missing.
- No horizontal overflow, and nothing clipped at the right edge, including the header split button.
- Hover, selection and focus states, and the collapsed and expanded state of bands and sections.
- Then run
npm testinmy-work/andnpm run test:packagesat the repository root. Add a line toCHANGELOG.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

