` wrappers.',
- },
- {
- selector:
- "JSXOpeningElement[name.name='div'] > JSXAttribute[name.name='className'][value.value=/^(approval-toast|error-toast|update-toast)$/]",
- message:
- 'Use `ToastCard` for toast cards instead of raw `
` wrappers.',
- },
- {
- selector:
- "JSXOpeningElement[name.name='div'] > JSXAttribute[name.name='className'][value.value=/^(approval-toast-header|error-toast-header|update-toast-header|approval-toast-actions|update-toast-actions|update-toast-error)$/]",
- message:
- 'Use DS toast sub-primitives (`ToastHeader`, `ToastActions`, `ToastError`) for shared toast structure.',
- },
- {
- selector:
- "JSXOpeningElement[name.name='div'] > JSXAttribute[name.name='aria-live']",
- message:
- 'Use `ToastViewport` for live-region semantics instead of raw `
` wrappers.',
- },
- {
- selector:
- "Literal[value=/#[0-9A-Fa-f]{3,8}|rgba?\\(|hsla?\\(/]",
- message:
- 'Avoid hardcoded color literals in DS-targeted components; use design-system CSS variables/tokens.',
- },
- ],
- },
- },
- {
- files: ['src/features/git/components/GitDiffViewer.tsx'],
- rules: {
- 'no-restricted-syntax': [
- 'error',
- {
- selector:
- "Literal[value=/#[0-9A-Fa-f]{3,8}|rgba?\\(|hsla?\\(/]",
- message:
- 'Avoid hardcoded diff color literals; use DS diff theme variables from `ds-diff.css`.',
- },
- ],
- },
- },
- {
- files: [
- 'src/features/app/components/MainHeader.tsx',
- 'src/features/app/components/LaunchScriptButton.tsx',
- 'src/features/app/components/LaunchScriptEntryButton.tsx',
- 'src/features/app/components/OpenAppMenu.tsx',
- 'src/features/app/components/Sidebar.tsx',
- 'src/features/app/components/SidebarHeader.tsx',
- 'src/features/app/components/SidebarCornerActions.tsx',
- 'src/features/composer/components/ComposerInput.tsx',
- 'src/features/files/components/FilePreviewPopover.tsx',
- 'src/features/workspaces/components/WorkspaceHome.tsx',
- ],
- rules: {
- 'no-restricted-syntax': [
- 'error',
- {
- selector:
- "JSXOpeningElement[name.name='div'] > JSXAttribute[name.name='className'][value.value=/\\b(workspace-add-menu|sidebar-sort-dropdown|sidebar-account-popover|worktree-info-popover|workspace-branch-dropdown|launch-script-popover|open-app-dropdown|file-preview-popover)\\b/]",
- message:
- 'Use `PopoverSurface` for popover/dropdown shell markup instead of raw `
` wrappers.',
- },
- {
- selector:
- "JSXOpeningElement[name.name='div'] > JSXAttribute[name.name='role'][value.value=/^(menu|listbox)$/]",
- message:
- 'Use `PopoverSurface` for popover/dropdown shell semantics instead of raw `
` wrappers.',
- },
- {
- selector:
- "JSXOpeningElement[name.name='button'] > JSXAttribute[name.name='className'][value.value=/\\b(open-app-option|workspace-add-option|sidebar-sort-option)\\b/]",
- message:
- 'Use `PopoverMenuItem` for precomputed popover list entries instead of raw `
@@ -129,7 +129,7 @@
Skills + prompts
Updater + polish
- Toast-driven updates, resizable panels, and platform-specific window chrome.
+ Toast-driven updates, resizable panels, and a macOS overlay title bar.
@@ -225,7 +225,7 @@
From repo to review in three moves.
01
Connect your workspaces
-
Codex Monitor runs one shared Codex app-server and restores your threads across workspaces.
+
Codex Monitor spawns a Codex app-server per repo and restores your threads.
02
@@ -412,7 +412,7 @@
Ready to monitor every agent run?

Codex Monitor
-
Desktop Codex agent orchestration, built by and for individuals who ship fast.
+
macOS Codex agents orchestration, built by and for individuals who ship fast.