@mcpware/claude-code-organizer 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  Claude Code saves your customizations across scattered directories with encoded paths. This tool gives you a visual dashboard to see everything, understand which scope each item applies to, and move items between scopes with one click.
6
6
 
7
+ ![Claude Code Organizer Dashboard](docs/dashboard.png)
8
+
7
9
  ---
8
10
 
9
11
  ## Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpware/claude-code-organizer",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Organize all your Claude Code memories, skills, MCP servers, and hooks — view by scope hierarchy, move between scopes via drag-and-drop",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,7 +26,7 @@
26
26
  "claude-hooks",
27
27
  "config-manager"
28
28
  ],
29
- "mcpName": "io.github.ithiria894/claude-code-organizer",
29
+ "mcpName": "io.github.mcpware/claude-code-organizer",
30
30
  "author": "ithiria894",
31
31
  "license": "MIT",
32
32
  "repository": {
package/server.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.mcpware/claude-code-organizer",
4
+ "description": "Organize Claude Code memories, skills, MCP servers, and hooks via drag-and-drop dashboard.",
5
+ "repository": {
6
+ "url": "https://github.com/mcpware/claude-code-organizer",
7
+ "source": "github"
8
+ },
9
+ "version": "0.1.3",
10
+ "packages": [
11
+ {
12
+ "registryType": "npm",
13
+ "identifier": "@mcpware/claude-code-organizer",
14
+ "version": "0.1.3",
15
+ "transport": {
16
+ "type": "stdio"
17
+ }
18
+ }
19
+ ]
20
+ }
package/PLAN.md DELETED
@@ -1,243 +0,0 @@
1
- # Claude Inventory Manager
2
-
3
- **A scope-aware inventory manager for Claude Code customizations — view, organize, and sync your memories, skills, MCP servers, hooks, commands, and plugins.**
4
-
5
- ## Problem
6
-
7
- Claude Code customizations (memories, skills, MCP servers, hooks, etc.) are scattered across multiple directories with ugly encoded paths. Users don't know:
8
- - What customizations they have
9
- - Which scope each one applies to
10
- - Whether something is in the wrong scope
11
- - How parent-child scope inheritance works
12
-
13
- ## Solution
14
-
15
- A lightweight web dashboard + MCP server that:
16
- 1. Scans all Claude Code customizations
17
- 2. Displays them in a scope-aware hierarchy
18
- 3. Lets users drag-and-drop items between scopes
19
- 4. Syncs changes to git for versioning
20
-
21
- ## Competitive Landscape (researched 2026-03-18)
22
-
23
- ### Direct Competitors
24
-
25
- | Tool | Type | Scope View | Move Between Scopes | Threat |
26
- |---|---|:---:|:---:|:---:|
27
- | [drewipson/claude-code-config](https://github.com/drewipson/claude-code-config) | VS Code ext (pre-release v0.1.2) | ✅ Tree view | ✅ Right-click move | ⚠️ Medium |
28
- | [conradBruchmann/claude-admin](https://github.com/conradBruchmann/claude-admin) | Web dashboard (v0.1.9, Feb 2026) | Partial | ❌ | Low |
29
- | [joeyism/claude-code-config](https://github.com/joeyism/claude-code-config) | TUI | MCP only | ✅ MCP only | Low |
30
- | [Claude Deck](https://claudedeck.org/) | Web dashboard (React+FastAPI) | ❌ | ❌ | Low |
31
- | [claude-code-backup](https://github.com/Ranteck/claude-code-backup) | Backup scripts | ❌ | ❌ | None |
32
- | [ocodista/claude-dashboard](https://github.com/ocodista/claude-dashboard) | Read-only HTML | ❌ | ❌ | None |
33
-
34
- ### Key Competitor Analysis
35
-
36
- **drewipson/claude-code-config** — closest competitor:
37
- - VS Code extension with tree view of memories, skills, hooks, permissions
38
- - Right-click to move items between global and project scope
39
- - **Gaps vs us:** VS Code only (not standalone), no drag-and-drop, no MCP servers, no scope hierarchy visualization, pre-release quality, no web UI
40
-
41
- **conradBruchmann/claude-admin** — broadest feature set:
42
- - Web dashboard covering skills, memory, MCP, agents, plugins, sessions, analytics
43
- - Shipped Feb 20, 2026 — growing fast (33 commits, v0.1.9)
44
- - **Gaps vs us:** No scope hierarchy view, no move between scopes, no drag-and-drop. Config editor, not inventory manager
45
-
46
- ### What Nobody Has Built (our lane)
47
-
48
- No existing tool combines all three:
49
- 1. **Unified scope hierarchy** — all item types (memories, skills, MCP, hooks) organized by Global → workspace → project
50
- 2. **Move between scopes** via drag-and-drop or modal UI
51
- 3. **Standalone web dashboard** — not tied to VS Code or any IDE
52
-
53
- ### Anthropic Official Stance (researched 2026-03-18)
54
-
55
- - `/config` is a per-scope settings toggle, NOT a cross-scope inventory
56
- - No changelog entries, planned issues, or blog posts mention config dashboard / inventory
57
- - Official plugin `claude-md-management` focuses on CLAUDE.md content quality, not scope management
58
- - 2026 Anthropic focus: plugins ecosystem, remote control, scheduled tasks, auto memory, 1M context
59
- - **Risk of Anthropic building this: LOW** — no signals in any channel
60
-
61
- **Our unique angles:**
62
- - Scope-aware hierarchy with drag-and-drop (nobody has this)
63
- - Zero dependencies (single Node.js file + SortableJS CDN)
64
- - Daily git versioning (track what changed over time)
65
- - Cross-machine diff and export/import
66
- - Standalone — works anywhere, not locked to VS Code
67
-
68
- ## Target User
69
-
70
- Any Claude Code power user who has accumulated enough memories, skills, and configs that they need to organize and understand their setup.
71
-
72
- ---
73
-
74
- ## Architecture
75
-
76
- ### What We Manage
77
-
78
- | Type | Has Sub-types | Has Scope | Can Move Scope | Storage |
79
- |---|---|---|---|---|
80
- | **Memory** | feedback / user / project / reference | Global, per-project | Yes — between memory folders | `.md` files with frontmatter |
81
- | **Skills** | No | Global (`~/.claude/skills/`), per-repo (`.claude/skills/`) | Yes — between skill folders | Folders with `SKILL.md` |
82
- | **MCP Servers** | No | Global (`.mcp.json`), workspace, per-repo | Yes — move JSON entry between `.mcp.json` files |
83
- | **Hooks** | By event type (Stop, PreToolUse, PostToolUse, etc.) | Global, per-project, per-repo | Yes — move between `settings.json` files |
84
- | **Commands** | No | Per-repo (`.claude/commands/`) | Yes — between command folders |
85
- | **Plugins** | No | Global | No — installed globally only |
86
- | **Config** | No | Global + per-project | No — locked, edit via Claude or manually |
87
- | **Plans** | No | Global (`~/.claude/plans/`) | No — ephemeral |
88
- | **Agents** | No | Per-repo (`.claude/agents/`) | Yes — between agent folders |
89
- | **CLAUDE.md** | No | Global + per-repo | No — locked, edit manually |
90
-
91
- ### Scope Hierarchy
92
-
93
- ```
94
- 🌐 Global ← applies everywhere
95
- ↳ 📂 AlltrueAi (workspace) ← applies when cd ~/AlltrueAi/*
96
- ↳ 📂 ai-security-control-plane (project)
97
- ↳ 📂 ai-security-ui (project)
98
- ↳ 📂 rule-processor (project)
99
- ↳ 📂 MyGithub (project) ← applies when cd ~/MyGithub
100
- ↳ 📂 Documents (project) ← applies when cd ~/Documents
101
- ```
102
-
103
- Child scopes inherit parent scope's memories, skills, and MCP servers.
104
-
105
- ### Move Safety Rules
106
-
107
- - Memory → only to other memory folders
108
- - Skill → only to other skill locations (global or per-repo)
109
- - MCP → only between `.mcp.json` files
110
- - Config/CLAUDE.md/Plans → locked, cannot move
111
- - Every drag-and-drop shows a confirmation modal before executing
112
- - Moves happen in real `~/.claude/` paths (not just the backup repo)
113
-
114
- ### Tech Stack
115
-
116
- - **Server**: Single Node.js file (zero npm dependencies, built-in modules only)
117
- - **Client**: HTML + CSS + [SortableJS](https://github.com/SortableJS/Sortable) via CDN (13KB)
118
- - **Distribution**: MCP server + npm package (`npx @mcpware/claude-inventory`)
119
- - **Also works as**: standalone `localhost` dashboard
120
-
121
- ### Platform Support
122
-
123
- | Platform | Status | Notes |
124
- |----------|:------:|-------|
125
- | **Ubuntu / Linux** | ✅ Supported | Primary development and testing platform |
126
- | **macOS** | ⚠️ Untested | `~/.claude/` path should work, needs verification |
127
- | **Windows** | ❌ Not yet | Path handling needs adaptation (`C:\Users\...\.claude\`) |
128
- | **WSL** | ⚠️ Untested | Should work like Linux, needs verification |
129
-
130
- Current limitation: developed and tested on Ubuntu only. macOS and Windows support planned for future release.
131
-
132
- **Cross-platform notes (researched 2026-03-18):**
133
- - macOS: `~/.claude/` same as Linux, `os.homedir()` works → should work out of the box
134
- - Windows: `%USERPROFILE%\.claude\`, but path encoding uses `--` for `:\` (known Claude Code bug [#14403](https://github.com/anthropics/claude-code/issues/14403))
135
- - `CLAUDE_CONFIG_DIR` env var can override config location — should check this first
136
- - `fs.rename` needs `EXDEV` fallback (copy+delete) for cross-filesystem moves
137
-
138
- ---
139
-
140
- ## Roadmap
141
-
142
- ### MVP 1 — View + Move + Sync ✅ DONE (2026-03-18)
143
- - [x] UI mockup (see `mockup.html`)
144
- - [x] Node.js server that scans real `~/.claude/` directory
145
- - [x] Scope-aware hierarchy display (Global → projects → sub-projects)
146
- - [x] Categories: Memory, Skills, MCP Servers, Config, Hooks, Plugins, Plans
147
- - [x] SortableJS drag-and-drop between same-type scopes
148
- - [x] Confirmation modal on every move
149
- - [x] Move files in real `~/.claude/` paths
150
- - [x] "Open in Editor" button (VS Code deeplink)
151
- - [x] Search across all items
152
- - [x] Multi-select filter pills with counts
153
- - [x] Detail panel on click
154
- - [x] Move-to modal with scope tree + correct indentation
155
- - [x] Current scope indicator in move modal
156
- - [x] Auto-scroll during drag
157
- - [x] Locked items (config, plugins, plans) cannot be moved
158
- - [x] Generic — no hardcoded paths, works on any user's machine
159
- - [x] Frontend/backend separation (4 UI files, 3 backend files)
160
- - [ ] Daily git sync (`sync.sh` + cron) — already working separately
161
- - [ ] Export/import tarball
162
-
163
- ### MVP 2 — Inline Edit + Polish
164
- - [ ] Click item → show full `.md` content in detail panel
165
- - [ ] Edit content inline, save back to file
166
- - [ ] Improve confirm modal design (show item icon, type, scope badges)
167
- - [ ] Add Commands management
168
- - [ ] Check `CLAUDE_CONFIG_DIR` env var for custom config paths
169
- - [ ] `fs.rename` EXDEV fallback (copy + delete)
170
- - [ ] Add Agents management
171
-
172
- ### MVP 3 — Dashboard Stats + Polish
173
- - [ ] Stats panel (total counts, size, last modified)
174
- - [ ] Scope inheritance visualization
175
- - [ ] Cross-machine diff (compare two exports)
176
- - [ ] Config health/lint (detect conflicts, redundancies)
177
- - [ ] Dark mode toggle
178
-
179
- ### MVP 4 — MCP + npm Distribution
180
- - [ ] Package as MCP server (`@mcpware/claude-inventory`)
181
- - [ ] MCP tools: `scan_setup`, `move_memory`, `list_memories`, `export_setup`
182
- - [ ] `npx @mcpware/claude-inventory` one-command start
183
- - [ ] Publish to npm (@mcpware org)
184
- - [ ] Register on Official MCP Registry
185
- - [ ] Submit to awesome-mcp-servers
186
-
187
- ---
188
-
189
- ## UI Design
190
-
191
- ### Design Principles
192
- - Light theme, clean, minimal
193
- - Hierarchy: Scope headers (most prominent) > Category bars (medium) > Item rows (subtle)
194
- - All light backgrounds with dark text
195
- - Items indented under categories, categories indented under scopes
196
- - Same-type icons: all memories use 🧠, all skills use ⚡, all MCP use 🔌, all scopes use 📂
197
-
198
- ### Current Mockup
199
- See `mockup.html` — interactive prototype with:
200
- - Collapsible scope/category sections
201
- - SortableJS drag-and-drop (memory↔memory, skill↔skill, mcp↔mcp only)
202
- - Drag confirmation modal
203
- - Detail panel on click
204
- - Search and filter pills
205
- - Scope inheritance indicators (`↳ Inherits 🌐 Global 📂 AlltrueAi`)
206
-
207
- ### Color Palette
208
- ```
209
- Background: #fafbfc
210
- Surface: #ffffff
211
- Border: #e2e4ea
212
- Text primary: #1e2028
213
- Text secondary: #5a5d6e
214
- Text muted: #9598a8
215
- Accent: #5b5fc7 (indigo)
216
- Accent light: #ededfa
217
- Scope bg: #f0f1f8
218
- Category bg: #f6f7fb
219
-
220
- Tags:
221
- Global: bg #e8e9fa text #5b5fc7
222
- Workspace: bg #fef0e4 text #c67a2e
223
- Project: bg #e4f6ec text #2d8a56
224
-
225
- Badges:
226
- feedback: #e6960a
227
- user: #7c3aed
228
- project: #2563eb
229
- reference: #059669
230
- skill: #ea580c
231
- mcp: #d946a8
232
- config: #9ca3af
233
- ```
234
-
235
- ---
236
-
237
- ## Research Sources
238
-
239
- - [Drag-and-drop research](../.claude/skills/claude-inventory/) — SortableJS recommended over raw HTML5 DnD
240
- - [Market research: existing tools](PLAN.md#competitive-landscape)
241
- - [MCP ecosystem analysis](https://github.com/punkpeye/awesome-mcp-servers) — 83K stars, 600+ servers
242
- - [Claude Code GitHub issues](https://github.com/anthropics/claude-code) — 280+ issues about config/memory management
243
- - [Official MCP Registry](https://registry.modelcontextprotocol.io/) — distribution channel
package/SHIP.md DELETED
@@ -1,96 +0,0 @@
1
- # Ship Plan — claude-code-organizer
2
-
3
- > Follow side-hustle/3-ship/ship-workflow.md template
4
- > Created: 2026-03-18
5
-
6
- ---
7
-
8
- ## Phase 0: Launch Checklist (TODAY)
9
-
10
- ### README
11
- - [ ] One-line description (3 seconds)
12
- - [ ] Screenshot / demo GIF at the top
13
- - [ ] Features bullet list
14
- - [ ] Quick Start (`npx @mcpware/claude-code-organizer`)
15
- - [ ] Comparison table (vs claude-control, claude-admin, claude-deck)
16
- - [ ] Usage examples
17
-
18
- ### GitHub Repo Setup
19
- - [ ] Description ✅ (already set)
20
- - [ ] Topics / Tags (use all 20)
21
- - [ ] Social Preview Image (1280×640) — use Canva MCP
22
- - [ ] LICENSE file (MIT)
23
- - [ ] .gitignore
24
- - [ ] Release tag (v0.1.0)
25
- - [ ] Badges (version, license, npm downloads)
26
-
27
- ### Package Registry
28
- - [ ] `npm publish --access public` as `@mcpware/claude-code-organizer`
29
- - [ ] Also publish as `claude-code-organizer` (unscoped, for discoverability)
30
-
31
- ### Plugin Marketplace
32
- - [ ] Create `.claude-plugin/plugin.json` manifest
33
- - [ ] Create marketplace repo `mcpware/marketplace`
34
- - [ ] Submit to Anthropic official marketplace (claude.ai/settings/plugins/submit)
35
-
36
- ---
37
-
38
- ## Phase 1: Registry Registration (Day 1-2)
39
-
40
- | Platform | URL | Status | Notes |
41
- |----------|-----|:------:|-------|
42
- | **npm** | npmjs.com | [ ] | `@mcpware/claude-code-organizer` + `claude-code-organizer` |
43
- | **Anthropic Plugin Marketplace** | claude.ai/settings/plugins/submit | [ ] | Official, needs review |
44
- | **Official MCP Registry** | registry.modelcontextprotocol.io | [ ] | Submit via `mcp-publisher` CLI |
45
- | **awesome-mcp-servers** | github.com/punkpeye/awesome-mcp-servers | [ ] | PR (need Glama listing first) |
46
- | **awesome-claude-code** | github.com/hesreallyhim/awesome-claude-code | [ ] | PR |
47
- | **awesome-claude-plugins** | github.com/ComposioHQ/awesome-claude-plugins | [ ] | PR |
48
- | **Glama.ai** | glama.ai/mcp/servers | [ ] | Need Dockerfile + glama.json + release tag |
49
- | **MCP.so** | mcp.so | [ ] | Submit form |
50
- | **Smithery.ai** | smithery.ai | [ ] | Submit MCP server |
51
- | **MCPServers.org** | mcpservers.org | [ ] | Submit to directory |
52
- | **PulseMCP** | pulsemcp.com | [ ] | Submit |
53
- | **mcpmarket.com** | mcpmarket.com | [ ] | Submit |
54
-
55
- ### Glama Requirements (blocks awesome-mcp-servers PR)
56
- - [ ] Add `Dockerfile`
57
- - [ ] Add `glama.json`
58
- - [ ] Create GitHub Release v0.1.0
59
- - [ ] Submit to Glama → Claim → Wait for indexing
60
-
61
- ---
62
-
63
- ## Phase 2: Social Media Launch (Day 2-5)
64
-
65
- | Day | Platform | Content | Status |
66
- |-----|----------|---------|:------:|
67
- | Day 2 | Reddit r/ClaudeAI | "I built a visual organizer for Claude Code memories, skills, and MCP servers" | [ ] |
68
- | Day 2 | Reddit r/MCP | Technical angle — scope hierarchy + drag-and-drop | [ ] |
69
- | Day 3 | Twitter/X | Thread: problem → solution → demo GIF → link | [ ] |
70
- | Day 4 | Dev.to | Blog post: "I was drowning in 84 Claude Code config files" | [ ] |
71
- | Day 5 | LinkedIn | Professional: "Built an open-source tool used by X developers" | [ ] |
72
-
73
- ---
74
-
75
- ## Phase 3: Content Angles
76
-
77
- ### Problem-first (Dev.to, HN)
78
- > "Claude Code saves memories, skills, MCP servers, and hooks across 5+ scattered directories with ugly encoded paths. I had 84 config files and couldn't tell which scope each one applied to. So I built Claude Code Organizer — a visual dashboard that shows everything organized by scope hierarchy with drag-and-drop to move items between scopes."
79
-
80
- ### Comparison (Reddit, Twitter)
81
- > "There are 10+ Claude Code config tools, but none let you actually MOVE items between scopes. claude-control is read-only. Claude Deck needs React+FastAPI+SQLite. I built a zero-dependency organizer with real drag-and-drop. Here's how they compare: [table]"
82
-
83
- ### Build-in-public (Twitter)
84
- > "Day 1: Built a scope-aware inventory manager for Claude Code in one session. Zero npm dependencies, SortableJS for drag-and-drop. Here's what I learned about Claude's config system..."
85
-
86
- ---
87
-
88
- ## Execution Order (Today)
89
-
90
- 1. ~~Rename repo~~ ✅
91
- 2. Write README
92
- 3. Add LICENSE, .gitignore, topics
93
- 4. npm publish
94
- 5. Create plugin structure
95
- 6. Create GitHub Release v0.1.0
96
- 7. Submit to registries
package/mockup.html DELETED
@@ -1,419 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width,initial-scale=1">
6
- <title>Claude Inventory</title>
7
- <script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.6/Sortable.min.js"></script>
8
- <style>
9
- :root {
10
- --bg: #fafbfc;
11
- --surface: #ffffff;
12
- --border: #e2e4ea;
13
- --border-light: #eef0f4;
14
- --text-primary: #1e2028;
15
- --text-secondary: #5a5d6e;
16
- --text-muted: #9598a8;
17
- --text-faint: #c2c5d0;
18
- --accent: #5b5fc7;
19
- --accent-light: #ededfa;
20
- --accent-text: #4345a0;
21
- --scope-bg: #f0f1f8;
22
- --scope-border: #d8dae8;
23
- --cat-bg: #f6f7fb;
24
- --cat-border: #e8e9f0;
25
- --hover: #f5f6fa;
26
- --tag-global-bg: #e8e9fa; --tag-global-text: #5b5fc7;
27
- --tag-workspace-bg: #fef0e4; --tag-workspace-text: #c67a2e;
28
- --tag-project-bg: #e4f6ec; --tag-project-text: #2d8a56;
29
- --badge-feedback: #e6960a; --badge-user: #7c3aed; --badge-project: #2563eb;
30
- --badge-reference: #059669; --badge-skill: #ea580c; --badge-mcp: #d946a8;
31
- --badge-config: #9ca3af;
32
- --shadow-sm: 0 1px 2px rgba(0,0,0,0.04);
33
- --shadow-md: 0 2px 8px rgba(0,0,0,0.06);
34
- --radius: 10px;
35
- }
36
- * { margin:0; padding:0; box-sizing:border-box; }
37
- body { font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; background:var(--bg); color:var(--text-primary); height:100vh; overflow:hidden; -webkit-font-smoothing:antialiased; font-size:14px; }
38
- .app { display:flex; height:100vh; }
39
- .tree-area { flex:1; overflow-y:auto; padding:32px 40px 80px; max-width:920px; margin:0 auto; }
40
-
41
- /* ── Page header ── */
42
- .page-hdr { display:flex; align-items:center; gap:16px; margin-bottom:32px; }
43
- .logo { width:32px; height:32px; background:var(--accent); border-radius:8px; display:flex; align-items:center; justify-content:center; color:#fff; font-size:16px; font-weight:700; }
44
- .page-hdr h1 { font-size:1.25rem; color:var(--text-primary); font-weight:700; letter-spacing:-0.4px; }
45
- .spacer { flex:1; }
46
- .search { background:var(--surface); border:1px solid var(--border); border-radius:8px; padding:8px 14px; color:var(--text-primary); font-size:0.8rem; width:200px; font-family:inherit; outline:none; transition:all 0.15s; }
47
- .search:focus { border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-light); }
48
- .search::placeholder { color:var(--text-faint); }
49
- .pills { display:flex; gap:4px; }
50
- .pill { background:var(--surface); border:1px solid var(--border); border-radius:20px; padding:5px 14px; color:var(--text-secondary); font-size:0.72rem; cursor:pointer; font-weight:500; transition:all 0.15s; }
51
- .pill:hover { background:var(--hover); border-color:var(--scope-border); }
52
- .pill.active { background:var(--accent); border-color:var(--accent); color:#fff; }
53
- .pill b { font-weight:700; margin-left:2px; opacity:0.7; }
54
- .pill.active b { opacity:1; }
55
- .pills { display:flex; gap:4px; flex-wrap:wrap; }
56
-
57
- /* ══════════════════════════════════════════
58
- SCOPE HEADER — Most prominent
59
- ══════════════════════════════════════════ */
60
- .scope-block { margin-bottom:4px; }
61
- .scope-block .scope-block { margin-left:20px; }
62
-
63
- .scope-hdr {
64
- display:flex; align-items:center; gap:10px;
65
- padding:12px 16px; cursor:pointer; border-radius:var(--radius);
66
- background:var(--scope-bg); border:1px solid var(--scope-border);
67
- user-select:none; transition:all 0.15s; margin-bottom:3px;
68
- }
69
- .scope-hdr:hover { background:#e8e9f4; border-color:#cfd1e2; }
70
- .scope-tog { width:16px; text-align:center; color:var(--accent); font-size:0.7rem; transition:transform 0.15s; }
71
- .scope-tog.c { transform:rotate(-90deg); }
72
- .scope-ico { font-size:1rem; }
73
- .scope-nm { font-size:0.95rem; font-weight:700; color:var(--text-primary); letter-spacing:-0.2px; }
74
- .scope-tag { font-size:0.58rem; padding:2px 8px; border-radius:5px; font-weight:600; }
75
- .tag-global { background:var(--tag-global-bg); color:var(--tag-global-text); }
76
- .tag-workspace { background:var(--tag-workspace-bg); color:var(--tag-workspace-text); }
77
- .tag-project { background:var(--tag-project-bg); color:var(--tag-project-text); }
78
- .scope-info { font-size:0.65rem; color:var(--text-muted); margin-left:auto; }
79
- .scope-cnt { background:var(--accent-light); color:var(--accent-text); border-radius:10px; padding:2px 9px; font-size:0.62rem; font-weight:700; }
80
-
81
- .scope-body { padding:0 0 6px; }
82
- .scope-body.c { display:none; }
83
- .inherit { font-size:0.68rem; color:var(--accent-text); padding:6px 14px 10px 40px; font-style:normal; font-weight:500; display:flex; align-items:center; gap:6px; }
84
- .inherit-pill { background:var(--accent-light); color:var(--accent-text); padding:2px 8px; border-radius:4px; font-size:0.6rem; font-weight:600; }
85
- .inherit-arrow { color:var(--accent); font-size:0.8rem; }
86
-
87
- /* ══════════════════════════════════════════
88
- CATEGORY BAR — Medium prominence
89
- ══════════════════════════════════════════ */
90
- .cat-hdr {
91
- display:flex; align-items:center; gap:8px;
92
- padding:8px 14px; margin:4px 0 2px 24px; cursor:pointer;
93
- background:var(--cat-bg); border:1px solid var(--cat-border);
94
- border-radius:8px; user-select:none; transition:all 0.15s;
95
- }
96
- .cat-hdr:hover { background:#eeeef6; border-color:#dddee8; }
97
- .cat-tog { width:14px; text-align:center; color:var(--text-muted); font-size:0.6rem; transition:transform 0.15s; }
98
- .cat-tog.c { transform:rotate(-90deg); }
99
- .cat-ico { font-size:0.85rem; }
100
- .cat-nm { font-size:0.72rem; color:var(--text-secondary); font-weight:700; text-transform:uppercase; letter-spacing:1px; }
101
- .cat-cnt { font-size:0.62rem; color:var(--text-muted); margin-left:auto; font-weight:500; }
102
-
103
- .cat-body { padding:0; }
104
- .cat-body.c { display:none; }
105
-
106
- /* ══════════════════════════════════════════
107
- ITEM ROW — Least prominent, subtle
108
- ══════════════════════════════════════════ */
109
- .sortable-zone { min-height:4px; margin-left:64px; padding:2px 0; }
110
-
111
- .item-row {
112
- display:flex; align-items:center; gap:8px;
113
- padding:6px 10px; margin:1px 0; border-radius:6px;
114
- cursor:grab; transition:all 0.1s;
115
- border:1px solid transparent;
116
- }
117
- .item-row:hover { background:var(--hover); border-color:var(--border-light); }
118
- .item-row:active { cursor:grabbing; }
119
- .item-row.sortable-ghost { opacity:0.2; border:1px dashed var(--accent); background:var(--accent-light); }
120
- .item-row.sortable-chosen { background:var(--accent-light); border-color:var(--accent); }
121
- .item-row.locked { opacity:0.35; cursor:default; }
122
- .item-row.selected { background:var(--accent-light); border-color:var(--accent); }
123
-
124
- .row-ico { font-size:0.72rem; flex-shrink:0; }
125
- .row-name { font-size:0.75rem; color:var(--text-secondary); font-weight:500; flex-shrink:0; max-width:220px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
126
- .row-badge { font-size:0.5rem; padding:1px 5px; border-radius:3px; color:#fff; font-weight:600; flex-shrink:0; }
127
- .b-feedback { background:var(--badge-feedback); }
128
- .b-user { background:var(--badge-user); }
129
- .b-project { background:var(--badge-project); }
130
- .b-reference { background:var(--badge-reference); }
131
- .b-skill { background:var(--badge-skill); }
132
- .b-mcp { background:var(--badge-mcp); }
133
- .b-config { background:var(--badge-config); }
134
- .row-desc { font-size:0.65rem; color:var(--text-muted); flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
135
- .row-meta { font-size:0.58rem; color:var(--text-faint); flex-shrink:0; }
136
- .row-acts { display:flex; gap:3px; opacity:0; transition:opacity 0.1s; flex-shrink:0; }
137
- .item-row:hover .row-acts { opacity:1; }
138
- .rbtn { background:var(--surface); border:1px solid var(--border); border-radius:5px; color:var(--text-secondary); padding:3px 8px; cursor:pointer; font-size:0.6rem; font-family:inherit; transition:all 0.12s; }
139
- .rbtn:hover { background:var(--accent); color:#fff; border-color:var(--accent); }
140
-
141
- /* ── Detail panel ── */
142
- .detail { width:340px; border-left:1px solid var(--border); display:flex; flex-direction:column; flex-shrink:0; background:var(--surface); }
143
- .detail.hidden { display:none; }
144
- .detail-hdr { padding:18px 20px; border-bottom:1px solid var(--border-light); display:flex; align-items:center; }
145
- .detail-hdr h2 { font-size:0.88rem; color:var(--text-primary); flex:1; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
146
- .detail-x { background:none; border:none; color:var(--text-faint); cursor:pointer; font-size:1.1rem; transition:color 0.1s; }
147
- .detail-x:hover { color:var(--text-primary); }
148
- .detail-bd { flex:1; overflow-y:auto; padding:18px 20px; }
149
- .df { margin-bottom:16px; }
150
- .dl { font-size:0.6rem; color:var(--text-muted); text-transform:uppercase; letter-spacing:0.8px; margin-bottom:4px; font-weight:600; }
151
- .dv { font-size:0.78rem; color:var(--text-secondary); line-height:1.4; }
152
- .dv a { color:var(--accent); text-decoration:none; }
153
- .detail-ft { padding:16px 20px; border-top:1px solid var(--border-light); display:flex; gap:8px; }
154
- .btn { padding:7px 16px; border-radius:8px; font-size:0.73rem; cursor:pointer; font-family:inherit; border:1px solid var(--border); font-weight:500; transition:all 0.15s; }
155
- .btn-p { background:var(--accent); color:#fff; border-color:var(--accent); }
156
- .btn-p:hover { background:#4e52b8; }
157
- .btn-s { background:var(--surface); color:var(--text-secondary); }
158
- .btn-s:hover { background:var(--hover); }
159
-
160
- /* ── Modals ── */
161
- .modal-bg { position:fixed; inset:0; background:rgba(30,32,40,0.25); display:flex; align-items:center; justify-content:center; z-index:100; backdrop-filter:blur(3px); }
162
- .modal-bg.hidden { display:none; }
163
- .modal { background:var(--surface); border:1px solid var(--border); border-radius:16px; width:420px; padding:24px; box-shadow:var(--shadow-md), 0 12px 40px rgba(0,0,0,0.08); }
164
- .modal h3 { font-size:1rem; color:var(--text-primary); font-weight:700; margin-bottom:6px; }
165
- .modal .modal-sub { font-size:0.7rem; color:var(--text-muted); margin-bottom:16px; }
166
- .move-preview { background:var(--bg); border:1px solid var(--border-light); border-radius:10px; padding:16px; margin-bottom:18px; font-size:0.78rem; line-height:1.8; }
167
- .move-from { color:#dc2626; font-weight:600; }
168
- .move-to { color:#16a34a; font-weight:600; }
169
- .move-item { color:var(--accent); font-weight:700; }
170
- .modal-btns { display:flex; gap:8px; justify-content:flex-end; }
171
- .modal-body { max-height:40vh; overflow-y:auto; margin-bottom:16px; }
172
-
173
- .dest { padding:10px 14px; cursor:pointer; border-radius:8px; display:flex; align-items:center; gap:10px; font-size:0.78rem; margin:2px 0; border:1px solid transparent; transition:all 0.12s; }
174
- .dest:hover { background:var(--hover); }
175
- .dest.sel { background:var(--accent-light); border-color:var(--accent); }
176
- .dest.cur { opacity:0.35; pointer-events:none; }
177
- .dest.cur::after { content:'(current)'; font-size:0.58rem; color:var(--text-faint); margin-left:4px; }
178
- .dest .di { font-size:0.85rem; }
179
- .dest .dn { color:var(--text-primary); font-weight:600; }
180
- .dest .dp { color:var(--text-muted); font-size:0.6rem; margin-left:auto; }
181
-
182
- .toast { position:fixed; bottom:24px; left:50%; transform:translateX(-50%); background:var(--text-primary); color:#fff; padding:12px 28px; border-radius:12px; font-size:0.78rem; z-index:200; box-shadow:0 4px 20px rgba(0,0,0,0.12); font-weight:500; }
183
- .toast.hidden { display:none; }
184
-
185
- ::-webkit-scrollbar { width:6px; }
186
- ::-webkit-scrollbar-track { background:transparent; }
187
- ::-webkit-scrollbar-thumb { background:var(--border); border-radius:3px; }
188
- ::-webkit-scrollbar-thumb:hover { background:var(--text-faint); }
189
- </style>
190
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
191
- </head>
192
- <body>
193
- <div class="app">
194
- <div class="tree-area">
195
- <div class="page-hdr">
196
- <div class="logo">C</div>
197
- <h1>Claude Inventory</h1>
198
- <span class="spacer"></span>
199
- <div class="pills">
200
- <span class="pill active" onclick="filterAll(this)">All <b>94</b></span>
201
- <span class="pill" onclick="ft('memory',this)">🧠 Memory <b>30</b></span>
202
- <span class="pill" onclick="ft('skill',this)">⚡ Skills <b>44</b></span>
203
- <span class="pill" onclick="ft('mcp',this)">🔌 MCP <b>3</b></span>
204
- <span class="pill" onclick="ft('config',this)">⚙️ Config <b>6</b></span>
205
- <span class="pill" onclick="ft('hook',this)">🪝 Hooks <b>1</b></span>
206
- <span class="pill" onclick="ft('plugin',this)">🧩 Plugins <b>1</b></span>
207
- <span class="pill" onclick="ft('plan',this)">📐 Plans <b>9</b></span>
208
- </div>
209
- <input class="search" placeholder="Search..." id="si">
210
- </div>
211
-
212
- <!-- ═══ GLOBAL ═══ -->
213
- <div class="scope-block">
214
- <div class="scope-hdr" onclick="togS(this)"><span class="scope-tog">▼</span><span class="scope-ico">🌐</span><span class="scope-nm">Global</span><span class="scope-tag tag-global">applies everywhere</span><span class="scope-info"></span><span class="scope-cnt">21</span></div>
215
- <div class="scope-body">
216
- <div class="cat-hdr" data-cat="config" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">⚙️</span><span class="cat-nm">Config</span><span class="cat-cnt">3</span></div>
217
- <div class="cat-body" data-cat="config"><div class="sortable-zone">
218
- <div class="item-row locked" data-t="config"><span class="row-ico">📋</span><span class="row-name">CLAUDE.md</span><span class="row-badge b-config">🔒</span><span class="row-desc">Global instructions</span><span class="row-meta">5.1K</span></div>
219
- <div class="item-row locked" data-t="config"><span class="row-ico">⚙️</span><span class="row-name">settings.json</span><span class="row-badge b-config">🔒</span><span class="row-meta">3.0K</span></div>
220
- <div class="item-row locked" data-t="config"><span class="row-ico">⚙️</span><span class="row-name">settings.local.json</span><span class="row-badge b-config">🔒</span><span class="row-meta">4.4K</span></div>
221
- </div></div>
222
-
223
- <div class="cat-hdr" data-cat="memory" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🧠</span><span class="cat-nm">Memories</span><span class="cat-cnt">2</span></div>
224
- <div class="cat-body" data-cat="memory"><div class="sortable-zone" id="z-g-mem" data-scope="Global" data-group="memory">
225
- <div class="item-row" data-t="memory" onclick="sd(this,'Use company GitHub for company repos','Always use nicole-alltrue for AllTrue repos, not ithiria894 (personal). gh CLI v2.88.1 with dual account setup.','feedback','Global','1.0K','2026-03-17')"><span class="row-ico">🧠</span><span class="row-name">Use company GitHub for company repos</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Always use nicole-alltrue for AllTrue repos</span><span class="row-meta">1.0K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
226
- <div class="item-row" data-t="memory" onclick="sd(this,'Always teach with real code','After every task, walkthrough what was done using real merged code. Teach like explaining to a high schooler.','feedback','Global','1.7K','2026-03-17')"><span class="row-ico">🧠</span><span class="row-name">Always teach with real code</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Walkthrough using real merged code</span><span class="row-meta">1.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
227
- </div></div>
228
-
229
- <div class="cat-hdr" data-cat="skill" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">⚡</span><span class="cat-nm">Skills</span><span class="cat-cnt">17</span></div>
230
- <div class="cat-body" data-cat="skill"><div class="sortable-zone" id="z-g-skill" data-scope="Global" data-group="skill">
231
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">chrome-cdp</span><span class="row-badge b-skill">skill</span><span class="row-desc">Interact with local Chrome browser</span><span class="row-meta">3.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
232
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">fullstack-debug</span><span class="row-badge b-skill">skill</span><span class="row-desc">Full-stack debugging workflow</span><span class="row-meta">24.2K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
233
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">auto-commit</span><span class="row-badge b-skill">skill</span><span class="row-desc">Pre-commit, stage, commit</span><span class="row-meta">2.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
234
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">code-review</span><span class="row-badge b-skill">skill</span><span class="row-desc">CodeRabbit critical review</span><span class="row-meta">6.3K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
235
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">journal</span><span class="row-badge b-skill">skill</span><span class="row-desc">Daily work journal</span><span class="row-meta">7.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
236
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">babysit-pr</span><span class="row-badge b-skill">skill</span><span class="row-desc">Monitor PRs, auto-merge when CI passes</span><span class="row-meta">4.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
237
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">claude-inventory</span><span class="row-badge b-skill">skill</span><span class="row-desc">Visualize all Claude Code customizations</span><span class="row-meta">1.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
238
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">file-tax</span><span class="row-badge b-skill">skill</span><span class="row-desc">File Canadian income tax return</span><span class="row-meta">7.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
239
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">git-log</span><span class="row-badge b-skill">skill</span><span class="row-desc">Search git history for changes</span><span class="row-meta">3.3K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
240
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">inspect-branch</span><span class="row-badge b-skill">skill</span><span class="row-desc">Inspect local branches and PR links</span><span class="row-meta">795B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
241
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">paraphrase</span><span class="row-badge b-skill">skill</span><span class="row-desc">Rewrite message into natural English</span><span class="row-meta">3.2K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
242
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">slack-update</span><span class="row-badge b-skill">skill</span><span class="row-desc">Short Slack-style progress update</span><span class="row-meta">2.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
243
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">submit-ticket</span><span class="row-badge b-skill">skill</span><span class="row-desc">Submit Varonis IT ServiceNow ticket</span><span class="row-meta">7.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
244
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">todo</span><span class="row-badge b-skill">skill</span><span class="row-desc">Manage personal TODO list</span><span class="row-meta">4.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
245
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">update-branch</span><span class="row-badge b-skill">skill</span><span class="row-desc">Merge develop into feature branch</span><span class="row-meta">812B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
246
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">aws-login</span><span class="row-badge b-skill">skill</span><span class="row-desc">Check and refresh AWS SSO credentials</span><span class="row-meta">1.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
247
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">all-open-pr-code-review</span><span class="row-badge b-skill">skill</span><span class="row-desc">CodeRabbit review on all open PRs</span><span class="row-meta">6.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
248
- </div></div>
249
-
250
- <div class="cat-hdr" data-cat="mcp" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🔌</span><span class="cat-nm">MCP Servers</span><span class="cat-cnt">2</span></div>
251
- <div class="cat-body" data-cat="mcp"><div class="sortable-zone" id="z-g-mcp" data-scope="Global" data-group="mcp">
252
- <div class="item-row" data-t="mcp"><span class="row-ico">🔌</span><span class="row-name">gmail</span><span class="row-badge b-mcp">mcp</span><span class="row-desc">@gongrzhe/server-gmail-autoauth-mcp</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button></span></div>
253
- <div class="item-row" data-t="mcp"><span class="row-ico">🔌</span><span class="row-name">playwright</span><span class="row-badge b-mcp">mcp</span><span class="row-desc">@playwright/mcp@latest</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button></span></div>
254
- </div></div>
255
- </div>
256
- </div>
257
-
258
- <!-- Projects wrapper (indented from Global) -->
259
- <div style="margin-left:20px;">
260
-
261
- <!-- ═══ ALLTRUEAI ═══ -->
262
- <div class="scope-block">
263
- <div class="scope-hdr" onclick="togS(this)"><span class="scope-tog">▼</span><span class="scope-ico">📂</span><span class="scope-nm">AlltrueAi</span><span class="scope-tag tag-workspace">workspace</span><span class="scope-info">3 sub-projects</span><span class="scope-cnt">28</span></div>
264
- <div class="scope-body">
265
- <div class="inherit"><span class="inherit-arrow">↳</span> Inherits <span class="inherit-pill">🌐 Global</span></div>
266
- <div class="cat-hdr" data-cat="memory" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🧠</span><span class="cat-nm">Memories</span><span class="cat-cnt">1</span></div>
267
- <div class="cat-body" data-cat="memory"><div class="sortable-zone" id="z-at-mem" data-scope="AlltrueAi" data-group="memory">
268
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Chrome Pilot testing goals</span><span class="row-badge b-project">project</span><span class="row-desc">Testing goals for chrome-pilot 0.4.0</span><span class="row-meta">2.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
269
- </div></div>
270
-
271
- <div class="cat-hdr" data-cat="mcp" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🔌</span><span class="cat-nm">MCP Servers</span><span class="cat-cnt">1</span></div>
272
- <div class="cat-body" data-cat="mcp"><div class="sortable-zone" id="z-at-mcp" data-scope="AlltrueAi" data-group="mcp">
273
- <div class="item-row" data-t="mcp"><span class="row-ico">🔌</span><span class="row-name">logfire</span><span class="row-badge b-mcp">mcp</span><span class="row-desc">Logfire MCP server</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button></span></div>
274
- </div></div>
275
-
276
- <div class="scope-block">
277
- <div class="scope-hdr" onclick="togS(this)"><span class="scope-tog">▼</span><span class="scope-ico">📂</span><span class="scope-nm">ai-security-control-plane</span><span class="scope-tag tag-project">project</span><span class="scope-cnt">22</span></div>
278
- <div class="scope-body">
279
- <div class="inherit"><span class="inherit-arrow">↳</span> Inherits <span class="inherit-pill">🌐 Global</span> <span class="inherit-pill">📂 AlltrueAi</span></div>
280
- <div class="cat-hdr" data-cat="memory" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🧠</span><span class="cat-nm">Memories</span><span class="cat-cnt">8</span></div>
281
- <div class="cat-body" data-cat="memory"><div class="sortable-zone" id="z-ascp-mem" data-scope="ai-security-control-plane" data-group="memory">
282
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Minimize screenshots</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Avoid screenshots with Chrome DevTools</span><span class="row-meta">607B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
283
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Stop asking permission</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Never ask "can I?" — just execute</span><span class="row-meta">1.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
284
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Verify DB schema before SQL</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Read actual DB models first</span><span class="row-meta">770B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
285
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">MCP Activity Dashboard</span><span class="row-badge b-reference">reference</span><span class="row-desc">Dashboard data flow, DB tables</span><span class="row-meta">7.3K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
286
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">user_languages</span><span class="row-badge b-user">user</span><span class="row-desc">Cantonese, English, Mandarin, Japanese</span><span class="row-meta">284B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
287
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Slack updates don't need recipient</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Don't ask who the message is for</span><span class="row-meta">731B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
288
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Always use slack-update skill for reports</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">All reports must use /slack-update skill</span><span class="row-meta">668B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
289
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Playground environment URLs</span><span class="row-badge b-reference">reference</span><span class="row-desc">AllTrue playground frontend and API URLs</span><span class="row-meta">349B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
290
- </div></div>
291
-
292
- <div class="cat-hdr" data-cat="skill" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">⚡</span><span class="cat-nm">Skills</span><span class="cat-cnt">14</span></div>
293
- <div class="cat-body" data-cat="skill"><div class="sortable-zone" id="z-ascp-skill" data-scope="ai-security-control-plane" data-group="skill">
294
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">test-runner</span><span class="row-badge b-skill">skill</span><span class="row-desc">Run tests — verify before committing</span><span class="row-meta">4.3K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
295
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">test-generator</span><span class="row-badge b-skill">skill</span><span class="row-desc">Guide writing pytest tests</span><span class="row-meta">4.8K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
296
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">register-guardrail</span><span class="row-badge b-skill">skill</span><span class="row-desc">Register guardrail end-to-end</span><span class="row-meta">11.8K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
297
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">create-db-table</span><span class="row-badge b-skill">skill</span><span class="row-desc">Create database table</span><span class="row-meta">8.9K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
298
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">create-schema</span><span class="row-badge b-skill">skill</span><span class="row-desc">Create Pydantic schema</span><span class="row-meta">9.6K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
299
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">generate-alembic-migration</span><span class="row-badge b-skill">skill</span><span class="row-desc">Generate Alembic migration</span><span class="row-meta">3.5K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
300
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">make-pr</span><span class="row-badge b-skill">skill</span><span class="row-desc">Create GitHub pull request</span><span class="row-meta">3.0K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
301
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">new-feature-branch</span><span class="row-badge b-skill">skill</span><span class="row-desc">Start new feature branch</span><span class="row-meta">4.3K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
302
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">new-router</span><span class="row-badge b-skill">skill</span><span class="row-desc">Create new API router</span><span class="row-meta">9.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
303
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">paginate-graphql-endpoint</span><span class="row-badge b-skill">skill</span><span class="row-desc">Add pagination to GraphQL</span><span class="row-meta">10.0K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
304
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">paginate-rest-endpoint</span><span class="row-badge b-skill">skill</span><span class="row-desc">Add pagination to REST</span><span class="row-meta">9.8K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
305
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">query-local-db</span><span class="row-badge b-skill">skill</span><span class="row-desc">Query local database</span><span class="row-meta">2.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
306
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">skill-builder</span><span class="row-badge b-skill">skill</span><span class="row-desc">Create a new Claude Code skill</span><span class="row-meta">2.9K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
307
- <div class="item-row" data-t="skill"><span class="row-ico">⚡</span><span class="row-name">add-common-error</span><span class="row-badge b-skill">skill</span><span class="row-desc">Document new common error pattern</span><span class="row-meta">1.7K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
308
- </div></div>
309
- </div>
310
- </div>
311
-
312
- <div class="scope-block"><div class="scope-hdr" onclick="togS(this)"><span class="scope-tog c">▼</span><span class="scope-ico">📂</span><span class="scope-nm">ai-security-ui</span><span class="scope-tag tag-project">project</span><span class="scope-cnt">3</span></div><div class="scope-body c"></div></div>
313
- <div class="scope-block"><div class="scope-hdr" onclick="togS(this)"><span class="scope-tog c">▼</span><span class="scope-ico">📂</span><span class="scope-nm">rule-processor</span><span class="scope-tag tag-project">project</span><span class="scope-cnt">8</span></div><div class="scope-body c"></div></div>
314
- </div>
315
- </div>
316
-
317
- <!-- ═══ MYGITHUB ═══ -->
318
- <div class="scope-block">
319
- <div class="scope-hdr" onclick="togS(this)"><span class="scope-tog">▼</span><span class="scope-ico">📂</span><span class="scope-nm">MyGithub</span><span class="scope-tag tag-project">project</span><span class="scope-cnt">10</span></div>
320
- <div class="scope-body">
321
- <div class="inherit"><span class="inherit-arrow">↳</span> Inherits <span class="inherit-pill">🌐 Global</span></div>
322
- <div class="cat-hdr" data-cat="memory" onclick="togC(this)"><span class="cat-tog">▼</span><span class="cat-ico">🧠</span><span class="cat-nm">Memories</span><span class="cat-cnt">10</span></div>
323
- <div class="cat-body" data-cat="memory"><div class="sortable-zone" id="z-mg-mem" data-scope="MyGithub" data-group="memory">
324
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Use Codex for personal study</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Study code must go through Codex CLI</span><span class="row-meta">1.6K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
325
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">MyGithub uses personal GitHub</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">All repos must use ithiria894</span><span class="row-meta">1.0K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
326
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Nicole's AI usage profile</span><span class="row-badge b-user">user</span><span class="row-desc">Heavy AI user, AI as infrastructure</span><span class="row-meta">1.0K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
327
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Business philosophy — system architect</span><span class="row-badge b-user">user</span><span class="row-desc">Businesses as distributed systems</span><span class="row-meta">1.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
328
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Market research must check official sources</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Exhaustively search for official solutions first</span><span class="row-meta">1.1K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
329
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Use neutral professional framing</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Claude output uses professional terminology</span><span class="row-meta">2.4K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
330
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Always source nvm before node/npx</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Running npx without nvm.sh can break nvm default</span><span class="row-meta">980B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
331
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Use personal SSH key for MyGithub pushes</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Switch gh to ithiria894, use github.com-personal</span><span class="row-meta">872B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
332
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Always update C facts folder</span><span class="row-badge b-feedback">feedback</span><span class="row-desc">Update ~/MyGithub/C/ when user shares C info</span><span class="row-meta">705B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
333
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">Side hustle docs structure</span><span class="row-badge b-project">project</span><span class="row-desc">OVERVIEW.md → 1-think/2-build/3-ship/4-grow</span><span class="row-meta">1.2K</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
334
- <div class="item-row" data-t="memory"><span class="row-ico">🧠</span><span class="row-name">npm publish setup</span><span class="row-badge b-reference">reference</span><span class="row-desc">npm account ithiria, orgs @mcpware @agents-io</span><span class="row-meta">881B</span><span class="row-acts"><button class="rbtn" onclick="ev(event);om()">Move</button><button class="rbtn" onclick="ev(event)">Open</button></span></div>
335
- </div></div>
336
- </div>
337
- </div>
338
-
339
- <!-- ═══ DOCUMENTS ═══ -->
340
- <div class="scope-block"><div class="scope-hdr" onclick="togS(this)"><span class="scope-tog c">▼</span><span class="scope-ico">📂</span><span class="scope-nm">Documents</span><span class="scope-tag tag-project">project</span><span class="scope-cnt">1</span></div><div class="scope-body c"></div></div>
341
-
342
- </div><!-- end projects wrapper -->
343
- </div>
344
-
345
- <!-- Detail panel -->
346
- <div class="detail hidden" id="dp">
347
- <div class="detail-hdr"><h2 id="dt">—</h2><button class="detail-x" onclick="cd()">&times;</button></div>
348
- <div class="detail-bd">
349
- <div class="df"><div class="dl">Type</div><div class="dv" id="dty">—</div></div>
350
- <div class="df"><div class="dl">Scope</div><div class="dv" id="dsc">—</div></div>
351
- <div class="df"><div class="dl">Description</div><div class="dv" id="dde">—</div></div>
352
- <div class="df"><div class="dl">Size</div><div class="dv" id="dsz">—</div></div>
353
- <div class="df"><div class="dl">Modified</div><div class="dv" id="dda">—</div></div>
354
- </div>
355
- <div class="detail-ft"><button class="btn btn-p">Open in Editor</button><button class="btn btn-s" onclick="om()">Move to...</button></div>
356
- </div>
357
- </div>
358
-
359
- <!-- Drag confirm -->
360
- <div class="modal-bg hidden" id="dragConfirm">
361
- <div class="modal">
362
- <h3>Confirm Move</h3>
363
- <div class="modal-sub">This will move the file in your Claude config</div>
364
- <div class="move-preview">
365
- <div>Move <span class="move-item" id="dc-item">—</span></div>
366
- <div style="margin-top:8px">From: <span class="move-from" id="dc-from">—</span></div>
367
- <div>To: <span class="move-to" id="dc-to">—</span></div>
368
- </div>
369
- <div class="modal-btns"><button class="btn btn-s" onclick="cancelDrag()">Cancel</button><button class="btn btn-p" onclick="confirmDrag()">Yes, move it</button></div>
370
- </div>
371
- </div>
372
-
373
- <!-- Move-to picker -->
374
- <div class="modal-bg hidden" id="mm" onclick="if(event.target===this)cm()">
375
- <div class="modal">
376
- <h3>Move to...</h3>
377
- <div class="modal-sub">Select destination scope</div>
378
- <div class="modal-body">
379
- <div class="dest" onclick="sld(this)"><span class="di">🌐</span><span class="dn">Global</span><span class="dp">applies everywhere</span></div>
380
- <div class="dest" onclick="sld(this)"><span class="di">📂</span><span class="dn">AlltrueAi</span><span class="dp">workspace</span></div>
381
- <div class="dest" onclick="sld(this)" style="padding-left:36px"><span class="di">📂</span><span class="dn">ai-security-control-plane</span></div>
382
- <div class="dest" onclick="sld(this)" style="padding-left:36px"><span class="di">📂</span><span class="dn">ai-security-ui</span></div>
383
- <div class="dest" onclick="sld(this)" style="padding-left:36px"><span class="di">📂</span><span class="dn">rule-processor</span></div>
384
- <div class="dest" onclick="sld(this)"><span class="di">📂</span><span class="dn">MyGithub</span></div>
385
- <div class="dest" onclick="sld(this)"><span class="di">📂</span><span class="dn">Documents</span></div>
386
- </div>
387
- <div class="modal-btns"><button class="btn btn-s" onclick="cm()">Cancel</button><button class="btn btn-p" id="cmb" onclick="dm()" disabled>Move here</button></div>
388
- </div>
389
- </div>
390
-
391
- <div class="toast hidden" id="tt"><span id="tm">Done</span></div>
392
-
393
- <script>
394
- function ev(e){e.stopPropagation()}
395
- function togS(h){const b=h.closest('.scope-block').querySelector(':scope>.scope-body');const t=h.querySelector('.scope-tog');b.classList.toggle('c');t.classList.toggle('c')}
396
- function togC(r){const b=r.nextElementSibling;const t=r.querySelector('.cat-tog');b.classList.toggle('c');t.classList.toggle('c')}
397
- function sd(el,n,d,t,s,sz,dt){document.getElementById('dp').classList.remove('hidden');document.getElementById('dt').textContent=n;document.getElementById('dty').innerHTML='<span class="row-badge b-'+t+'">'+t+'</span>';document.getElementById('dsc').textContent=s;document.getElementById('dde').textContent=d;document.getElementById('dsz').textContent=sz;document.getElementById('dda').textContent=dt;document.querySelectorAll('.item-row.selected').forEach(c=>c.classList.remove('selected'));el.classList.add('selected')}
398
- function cd(){document.getElementById('dp').classList.add('hidden');document.querySelectorAll('.item-row.selected').forEach(c=>c.classList.remove('selected'))}
399
- function om(){document.getElementById('mm').classList.remove('hidden')}
400
- function cm(){document.getElementById('mm').classList.add('hidden');document.querySelectorAll('.dest').forEach(d=>d.classList.remove('sel'));document.getElementById('cmb').disabled=true}
401
- function sld(el){document.querySelectorAll('.dest').forEach(d=>d.classList.remove('sel'));el.classList.add('sel');document.getElementById('cmb').disabled=false}
402
- function dm(){cm();toast('Moved successfully!')}
403
- let pendingDrag=null;
404
- function showDragConfirm(n,f,t,rv){pendingDrag={rv};document.getElementById('dc-item').textContent=n;document.getElementById('dc-from').textContent=f;document.getElementById('dc-to').textContent=t;document.getElementById('dragConfirm').classList.remove('hidden')}
405
- function confirmDrag(){document.getElementById('dragConfirm').classList.add('hidden');toast('Moved "'+document.getElementById('dc-item').textContent+'" → '+document.getElementById('dc-to').textContent);pendingDrag=null}
406
- function cancelDrag(){document.getElementById('dragConfirm').classList.add('hidden');if(pendingDrag&&pendingDrag.rv)pendingDrag.rv();pendingDrag=null}
407
- function toast(m){const t=document.getElementById('tt');document.getElementById('tm').textContent=m;t.classList.remove('hidden');setTimeout(()=>t.classList.add('hidden'),3000)}
408
- function filterAll(el){document.querySelectorAll('.pill').forEach(p=>p.classList.remove('active'));el.classList.add('active');document.querySelectorAll('.cat-hdr,.cat-body').forEach(s=>s.style.display='')}
409
- function ft(type,el){document.querySelectorAll('.pill').forEach(p=>p.classList.remove('active'));el.classList.add('active');document.querySelectorAll('.cat-hdr').forEach(r=>{r.style.display=r.dataset.cat===type?'':'none'});document.querySelectorAll('.cat-body').forEach(b=>{b.style.display=b.dataset.cat===type?'':'none'})}
410
- document.getElementById('si').addEventListener('input',function(){const q=this.value.toLowerCase();document.querySelectorAll('.item-row').forEach(c=>{c.style.display=(!q||c.textContent.toLowerCase().includes(q))?'':'none'})});
411
- document.querySelectorAll('.sortable-zone').forEach(el=>{
412
- const grp=el.dataset.group||'none';
413
- Sortable.create(el,{group:grp,animation:150,ghostClass:'sortable-ghost',chosenClass:'sortable-chosen',draggable:'.item-row:not(.locked)',fallbackOnBody:true,scroll:true,scrollSensitivity:60,
414
- onEnd(evt){if(evt.from!==evt.to){const item=evt.item;const name=item.querySelector('.row-name')?.textContent||'item';const fromScope=evt.from.dataset.scope||'?';const toScope=evt.to.dataset.scope||'?';const oldParent=evt.from;const oldIndex=evt.oldIndex;const rv=()=>{if(oldIndex>=oldParent.children.length)oldParent.appendChild(item);else oldParent.insertBefore(item,oldParent.children[oldIndex])};showDragConfirm(name,fromScope,toScope,rv)}}
415
- });
416
- });
417
- </script>
418
- </body>
419
- </html>