Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Remove Window Panel

ASecurity

No-trace removal recipe for a window panel or overlay. Use when deleting, killing, or retiring a window/overlay, or consolidating X into Y and deleting X ('kill this panel', 'remove the X window'). NOT for adding or opening an overlay (use overlay-system).

3 stars
0 votes
0 copies
0 views
Added 10/3/2026
developmenttypescriptgobashnodegit

Security Analysis

A100/100

Scanned 10/3/2026

$npx -y skills add armanisadeghi/ai-matrx --skill remove-window-panel --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Remove Window Panel?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Remove Window Panel
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/armanisadeghi-remove-window-panel/badge)](https://www.skillsdirectory.com/skills/armanisadeghi-remove-window-panel)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
name: remove-window-panel
description: "No-trace removal recipe for a window panel or overlay. Use when deleting, killing, or retiring a window/overlay, or consolidating X into Y and deleting X ('kill this panel', 'remove the X window'). NOT for adding or opening an overlay (use overlay-system)."
---

# Remove a Window Panel (kill it completely)

Deleting a window panel/overlay means removing it from **every** place the registration system spreads it across — then proving zero residue. A panel that "looks deleted" but leaves a stale `OverlayId`, a dangling opener, or a tile is a half-kill. **No shims. No back-compat aliases. No fallback opener that forwards to the replacement. No commented-out block or `// removed X` tombstone. No dead panel name left in a comment.**

Read the [`overlay-system`](../overlay-system/SKILL.md) skill first if you don't know how the overlay layer is wired. This skill is the reverse operation. Editing the WindowPanel component primitive itself (drag, resize, tray) → the [`window-panels`](../window-panels/SKILL.md) skill, not this one.

## The keystone strategy — pull the union member, let TypeScript hunt

`OverlayId` is `keyof typeof OVERLAY_CATALOGUE` — the keys of [`features/overlays/catalogue.ts`](../../../features/overlays/catalogue.ts) — and the OverlayController's selectors are typed against it. So:

1. **Delete the catalogue entry first** — that removes the union member.
2. **Run `pnpm type-check`.** Every *hard* reference now fails to compile — the controller's `isOpenById` / `dataById` selectors, the opener's `OVERLAY_ID as const`, and any typed dispatch site. The compiler hands you the list.
3. **Grep finds the *soft* references** the compiler can't see — the tile, registry metadata, url-sync, comments, docs. Do both; neither alone is complete.

## The removal checklist — every place a panel hides

Parameterize on `<overlayId>` (camelCase, e.g. `agentContentSidebarWindow`), `<slug>` (kebab, e.g. `agent-content-sidebar-window`), `<Component>` (e.g. `AgentContentSidebarWindow`), and the tile id / label / urlSync key.

| # | Location | What to remove |
|---|---|---|
| 1 | `features/overlays/catalogue.ts` | The `<overlayId>: { … }` entry — its key IS the `OverlayId` union member. **Do this first.** |
| 2 | `features/window-panels/windows/**/<Component>.tsx` | The component file — `git rm`. |
| 3 | `features/overlays/openers/<overlayId>.tsx` | The opener file — `git rm`. No forwarding shim. |
| 4 | `features/window-panels/registry/windowRegistryMetadata.ts` | The whole entry (slug + overlayId + label + defaultData + any `deprecated:` block). |
| 5 | `features/window-panels/tools-grid/toolsGridTiles.ts` | The `{ id: "tile.<…>", overlayId: "<overlayId>" }` tile. |
| 6 | `features/overlays/OverlayController.tsx` | **Four sub-sites:** the `const <Component> = lazyOverlay(() => import(...))`, the `isOpenById` selector entry, the `dataById` selector entry, and the gated JSX render block. |
| 7 | `features/window-panels/url-sync/initUrlHydration.ts` | Any `registerPanelHydrator("<urlSyncKey>", …)` for this panel. |
| 8 | `features/window-panels/windows/<feature>/callbacks.ts` | Only if it was a **callback-aware** opener — delete its callback contract. |
| 9 | `features/admin/**` (FeatureAdminMap), `FEATURE.md`, README/docs | Any map row, table row, or prose naming the panel. |

Not every panel touches all nine — a panel with no `urlSync` skips 7, a non-callback panel skips 8. Steps 1–6 are universal.

## The rewire step — repoint every opener before you delete it

A panel is *used* by whatever opens it. Find and repoint each to the replacement **before** removing the dead one:

```bash
# Every way to open it:
grep -rn "useOpen<Component>\|<Component>Controller" --include="*.ts*" .   # opener hook + declarative wrapper
grep -rn 'openOverlay({ overlayId: "<overlayId>"' --include="*.ts*" .       # raw dispatch sites
grep -rn "panels=<urlSyncKey>" --include="*.ts*" .                          # ?panels= deep links in code/docs
```

The Tools-grid tile is itself a usage — decide per task: **remove it** (capability gone) or **repoint** its `overlayId` to the replacement (capability moved). Confirm the replacement actually covers the dead panel's capability — parity is the user's call, never a silent capability drop.

## Do NOT delete shared infrastructure the panel happened to touch

The single biggest over-kill mistake. Before removing anything the dead component imported, owned, or was marked with, prove it's unused elsewhere (`grep` / `Explore` subagent):

- **The `deprecated:` metadata mechanism** (red ring + banner) is shared by many windows. Remove the panel's *entry*, never the field type in `windowRegistryTypes.ts` or the rendering in `WindowPanel.tsx`.
- **Shared icons** in `toolsGridTiles.ts` — the import stays if another tile uses it.
- **Shared exports the component re-exported.** A window may `export const ALL_TABS` / `TabContent` that siblings import. If you delete the *owner* of a shared export, you orphan its consumers — relocate the shared piece first. (Check `export` lines in the component before `git rm`.)
- **A `import type` in OverlayController** that the deleted block used may still serve a sibling block — leave it if `grep` shows another user.

## Clean comments, don't just delete

Other files may *name* the dead panel in a comment ("the same composition the legacy X used"). **Reword to keep the useful doc and drop the dead name** — don't delete the whole comment, don't leave the dead name. The user's bar: not even a comment mentions it.

## Verify — the kill isn't done until this passes

1. **Re-grep every token**, case-insensitive, across the repo (exclude `node_modules`, `.next*`, `.claude/worktrees`). Must be empty:
   ```bash
   grep -rni "<overlayId>\|<Component>\|<slug>\|<label>\|tile.<tile-id>\|<urlSyncKey>" \
     --include="*.ts" --include="*.tsx" --include="*.md" . | grep -v node_modules
   ```
2. **Deleted files gone**; no import of the deleted opener/component paths survives.
3. **`pnpm type-check`** clean for every touched file (every controller selector, opener, and dispatch site is typed against `keyof typeof OVERLAY_CATALOGUE`, so a missed reference *cannot* compile — that is the safety net).
4. **`pnpm check:doctrine`** passes.
5. **Spawn an independent `Explore` subagent** to re-verify from scratch — hand it the checklist above and the token list. The user expects this as the standard final gate, not optional.
6. **Inspect `git status`** — commit **only** the panel's files. If unrelated files are dirty (concurrent work), stage your paths explicitly; never fold them in.

## Worked example

The kill of **Agent Editor (Sidebar)** (`agentContentSidebarWindow` → replaced by `agentAdvancedEditorWindow`) touched exactly steps 1–6 + the comment cleanup, had zero external opener callsites (only the tile opened it), and kept the `deprecated:` mechanism + `FileStack` icon (both used elsewhere). That's the canonical shape: small, total, no residue.

Attribution

armanisadeghiarmanisadeghi
View sourceSee grades on GitHubMore from armanisadeghi →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Clean Code

Pragmatic coding standards - concise, direct, no over-engineering, no unnecessary comments

304955 votes

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

286712 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2222 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Writing Plans

Use when you have a spec or requirements for a multi-step task, before touching code

2927051 votes
View all in development →