Sync: update plugins, settings, archive skills, add new sessions and marketplaces

- plugins: update installed_plugins, known_marketplaces, install-counts-cache, blocklist; add agent-toolkit and cal-claude-plugins marketplaces
- settings.json: significant config changes (129 insertions, -129 deletions net)
- CLAUDE.md: minor update
- skills: remove json-pretty and save-doc (archived to _archive/save-doc)
- sessions: remove 2 old sessions, add 4 new sessions
- add command-permissions.json, permission-audit.jsonl, tmp/permissions-audit.md
This commit is contained in:
Cal Corum 2026-03-20 02:00:59 -05:00
parent b464a10964
commit 9fd5539dc1
26 changed files with 7353 additions and 655 deletions

View File

@ -33,3 +33,4 @@ Automatic loads are NOT enough — Read loads required CLAUDE.md context along t
- Just `ssh <alias>` (e.g. `ssh sba-db`, `ssh proxmox`, `ssh manticore`)
- If unsure of an alias, read `~/.ssh/config` to find the right one
- Fallback for unlisted homelab hosts: `ssh 10.10.0.x` (wildcard rule handles key/user)

5
command-permissions.json Normal file
View File

@ -0,0 +1,5 @@
{
"allow": [
"git pull*"
]
}

6530
permission-audit.jsonl Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
{
"fetchedAt": "2026-03-18T06:15:49.939Z",
"fetchedAt": "2026-03-20T07:00:45.229Z",
"plugins": [
{
"plugin": "code-review@claude-plugins-official",

File diff suppressed because it is too large Load Diff

View File

@ -23,10 +23,10 @@
"playground@claude-plugins-official": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/claude-plugins-official/playground/6b70f99f769f",
"version": "6b70f99f769f",
"installPath": "/home/cal/.claude/plugins/cache/claude-plugins-official/playground/b664e152af57",
"version": "b664e152af57",
"installedAt": "2026-02-18T19:51:28.422Z",
"lastUpdated": "2026-03-17T22:45:51.123Z",
"lastUpdated": "2026-03-20T05:00:48.614Z",
"gitCommitSha": "261ce4fba4f2c314c490302158909a32e5889c88"
}
],
@ -43,10 +43,10 @@
"frontend-design@claude-plugins-official": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/claude-plugins-official/frontend-design/6b70f99f769f",
"version": "6b70f99f769f",
"installPath": "/home/cal/.claude/plugins/cache/claude-plugins-official/frontend-design/b664e152af57",
"version": "b664e152af57",
"installedAt": "2026-02-22T05:53:45.091Z",
"lastUpdated": "2026-03-17T22:45:51.117Z",
"lastUpdated": "2026-03-20T05:00:48.607Z",
"gitCommitSha": "aa296ec81e8ccb49c9784f167c2c0aa625a86cec"
}
],
@ -59,6 +59,96 @@
"lastUpdated": "2026-02-27T01:15:24.393Z",
"gitCommitSha": "55b58ec6e5649104f926ba7558b567dc8d33c5ff"
}
],
"session@agent-toolkit": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/agent-toolkit/session/3.5.0",
"version": "3.5.0",
"installedAt": "2026-03-18T23:37:09.034Z",
"lastUpdated": "2026-03-18T23:37:09.034Z",
"gitCommitSha": "8c6e15ce7c51ae53121ec12d8dceee3c8bf936c6"
}
],
"format-on-save@agent-toolkit": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/agent-toolkit/format-on-save/1.1.0",
"version": "1.1.0",
"installedAt": "2026-03-18T23:38:34.141Z",
"lastUpdated": "2026-03-18T23:38:34.141Z",
"gitCommitSha": "8c6e15ce7c51ae53121ec12d8dceee3c8bf936c6"
}
],
"permission-manager@agent-toolkit": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/agent-toolkit/permission-manager/2.5.0",
"version": "2.5.0",
"installedAt": "2026-03-18T23:38:34.158Z",
"lastUpdated": "2026-03-18T23:38:34.158Z",
"gitCommitSha": "8c6e15ce7c51ae53121ec12d8dceee3c8bf936c6"
}
],
"json-pretty@cal-claude-plugins": [
{
"scope": "local",
"projectPath": "/mnt/NV2/Development/claude-plugins",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/json-pretty/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T19:27:24.303Z",
"lastUpdated": "2026-03-19T19:27:24.303Z",
"gitCommitSha": "52ccf51e8123d500bd800862544264ee65419eaa"
},
{
"scope": "local",
"projectPath": "/mnt/NV2/Development/paper-dynasty/card-creation",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/json-pretty/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T20:06:19.803Z",
"lastUpdated": "2026-03-19T20:06:19.803Z",
"gitCommitSha": "4287001dd8dcb0864e89f9b412218f0a695b2c35"
}
],
"project-plan@cal-claude-plugins": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/project-plan/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T20:07:15.440Z",
"lastUpdated": "2026-03-19T20:07:15.440Z",
"gitCommitSha": "4287001dd8dcb0864e89f9b412218f0a695b2c35"
}
],
"save-doc@cal-claude-plugins": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/save-doc/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T20:07:15.456Z",
"lastUpdated": "2026-03-19T20:07:15.456Z",
"gitCommitSha": "4287001dd8dcb0864e89f9b412218f0a695b2c35"
}
],
"youtube-transcriber@cal-claude-plugins": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/youtube-transcriber/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T20:07:15.472Z",
"lastUpdated": "2026-03-19T20:07:15.472Z",
"gitCommitSha": "4287001dd8dcb0864e89f9b412218f0a695b2c35"
}
],
"z-image@cal-claude-plugins": [
{
"scope": "user",
"installPath": "/home/cal/.claude/plugins/cache/cal-claude-plugins/z-image/1.0.0",
"version": "1.0.0",
"installedAt": "2026-03-19T20:07:15.488Z",
"lastUpdated": "2026-03-19T20:07:15.488Z",
"gitCommitSha": "4287001dd8dcb0864e89f9b412218f0a695b2c35"
}
]
}
}

View File

@ -5,7 +5,7 @@
"url": "https://github.com/anthropics/claude-plugins-official.git"
},
"installLocation": "/home/cal/.claude/plugins/marketplaces/claude-plugins-official",
"lastUpdated": "2026-03-17T14:00:49.109Z"
"lastUpdated": "2026-03-19T18:01:10.476Z"
},
"claude-code-plugins": {
"source": {
@ -13,6 +13,23 @@
"repo": "anthropics/claude-code"
},
"installLocation": "/home/cal/.claude/plugins/marketplaces/claude-code-plugins",
"lastUpdated": "2026-03-18T07:00:48.444Z"
"lastUpdated": "2026-03-20T07:00:48.487Z"
},
"agent-toolkit": {
"source": {
"source": "github",
"repo": "St0nefish/agent-toolkit"
},
"installLocation": "/home/cal/.claude/plugins/marketplaces/agent-toolkit",
"lastUpdated": "2026-03-18T23:36:04.279Z"
},
"cal-claude-plugins": {
"source": {
"source": "git",
"url": "https://git.manticorum.com/cal/claude-plugins.git"
},
"installLocation": "/home/cal/.claude/plugins/marketplaces/cal-claude-plugins",
"lastUpdated": "2026-03-19T20:32:33.873Z",
"autoUpdate": true
}
}

@ -0,0 +1 @@
Subproject commit 8c6e15ce7c51ae53121ec12d8dceee3c8bf936c6

@ -0,0 +1 @@
Subproject commit 4287001dd8dcb0864e89f9b412218f0a695b2c35

@ -1 +1 @@
Subproject commit a3d9426e3e183d1fdc560fcc8a69e9d854f040c9
Subproject commit 16536693ecc04f50f04696e109fe2a1a5f0d09fd

@ -1 +1 @@
Subproject commit 6b70f99f769f58b9b642dc8a271936b17862cf8c
Subproject commit b664e152af5742dd11b6a6e5d7a65848a8c5a261

View File

@ -1 +0,0 @@
{"pid":1547863,"sessionId":"b6b7297b-08ce-48fc-9cab-7c26eba76dae","cwd":"/mnt/NV2/Development/paper-dynasty/card-creation","startedAt":1773524318697}

View File

@ -1 +0,0 @@
{"pid":2121928,"sessionId":"03413088-aceb-4863-a6d8-358355abf06d","cwd":"/mnt/NV2/Development/claude-home","startedAt":1773803933365}

1
sessions/3329518.json Normal file
View File

@ -0,0 +1 @@
{"pid":3329518,"sessionId":"cefc895c-cc54-4802-a333-23fe9d249a51","cwd":"/home/cal/work/esb-monorepo","startedAt":1773934215198}

1
sessions/3658665.json Normal file
View File

@ -0,0 +1 @@
{"pid":3658665,"sessionId":"b8652ead-c5db-4e4d-87fa-5ebef4b52dca","cwd":"/mnt/NV2/Development/claude-plugins","startedAt":1773948416776}

1
sessions/3715596.json Normal file
View File

@ -0,0 +1 @@
{"pid":3715596,"sessionId":"b3de910b-ef57-4d77-96ca-b39750532918","cwd":"/mnt/NV2/Development/paper-dynasty/card-creation","startedAt":1773952331523}

1
sessions/3717522.json Normal file
View File

@ -0,0 +1 @@
{"pid":3717522,"sessionId":"bb120e55-3562-4c44-9432-d3a93d7c1d64","cwd":"/mnt/NV2/Development/mlb-the-show","startedAt":1773952373260}

View File

@ -9,7 +9,6 @@
"allow": [
"Bash",
"Read(*)",
"Read(//home/cal/.claude/**)",
"MultiEdit(*)",
"Glob(*)",
"Grep(*)",
@ -23,104 +22,11 @@
"Task(*)",
"Skill(*)",
"SlashCommand(*)",
"Bash(git add:*)",
"Bash(sudo systemctl status:*)",
"Bash(sudo journalctl:*)",
"WebFetch(domain:github.com)",
"Bash(podman exec tdarr-node-gpu ls:*)",
"Bash(podman exec tdarr-node-gpu tail:*)",
"WebFetch(domain:docs.tdarr.io)",
"WebFetch(domain:superuser.com)",
"Bash(ping:*)",
"Bash(podman logs:*)",
"Bash(podman exec tdarr-node-gpu-unmapped ls:*)",
"Bash(podman exec tdarr-node-gpu-unmapped find:*)",
"Bash(ssh tdarr \"docker inspect\":*)",
"WebFetch(domain:docs.podman.io)",
"Bash(sudo podman logs:*)",
"Bash(sudo podman ps:*)",
"Bash(mkdir:*)",
"Read(//home/cal/.local/share/Steam/userdata/32759396/1144200/ac/WinAppDataLocal/ReadyOrNot/**)",
"Read(//home/cal/.local/share/Steam/userdata/32759396/1144200/**)",
"mcp__notion__API-retrieve-a-page",
"mcp__notion__API-get-block-children",
"mcp__notion__API-post-database-query",
"WebFetch(domain:platform.openai.com)",
"Skill(youtube-transcriber)",
"Skill(proxmox)",
"WebFetch(domain:docs.n8n.io)",
"WebFetch(domain:help.ko-fi.com)",
"WebFetch(domain:n8n.io)",
"Skill(mcp-manager)",
"mcp__notediscovery__get_notes_by_tag",
"mcp__memorygraph__*",
"mcp__memorygraph__get_memory",
"Skill(notediscovery)",
"mcp__cognitive-memory__*",
"mcp__n8n-mcp__*",
"mcp__gitea-mcp__*",
"WebFetch(domain:custom-system-builder.gitlab.io)",
"WebFetch(domain:foundryvtt.com)",
"WebFetch(domain:10.10.0.174)",
"WebFetch(domain:docs.openclaw.ai)",
"WebFetch(domain:pve.proxmox.com)",
"WebFetch(domain:git.manticorum.com)",
"WebFetch(domain:developers.cloudflare.com)",
"WebFetch(domain:uptime-kuma-api.readthedocs.io)",
"WebFetch(domain:www.enworld.org)",
"WebFetch(domain:2minutetabletop.com)",
"WebFetch(domain:www.forgotten-adventures.net)",
"WebFetch(domain:www.doodlesanddragons.com)",
"WebFetch(domain:www.drivethrurpg.com)",
"WebFetch(domain:forums.rptools.net)",
"WebFetch(domain:www.fantasygrounds.com)",
"WebFetch(domain:gmkeros.wordpress.com)",
"WebFetch(domain:inkwellideas.com)",
"WebFetch(domain:itch.io)",
"WebFetch(domain:opengameart.org)",
"WebFetch(domain:store.paizo.com)",
"WebFetch(domain:forum.gitea.com)",
"WebFetch(domain:docs.gitea.com)",
"WebFetch(domain:gitea.com)",
"WebFetch(domain:docs.anthropic.com)",
"WebFetch(domain:raw.githubusercontent.com)",
"WebFetch(domain:ra-h.app)",
"WebFetch(domain:ollama.com)",
"mcp__cognitive-memory__memory_store",
"mcp__cognitive-memory__memory_episode",
"mcp__cognitive-memory__memory_recall",
"mcp__cognitive-memory__memory_search",
"mcp__cognitive-memory__memory_get",
"WebFetch(domain:community.teamspeak.com)",
"WebFetch(domain:docs.docker.com)",
"WebFetch(domain:forums.docker.com)",
"mcp__docker-mcp-gateway__mcp-find",
"mcp__docker-mcp-gateway__mcp-config-set",
"WebFetch(domain:about.gitea.com)",
"mcp__docker-mcp-gateway__mcp-add",
"mcp__docker-mcp-gateway__mcp-exec",
"mcp__tui-driver__*"
],
"deny": [
"Bash(diskutil partitionDisk)",
"Bash(diskutil eraseDisk)",
"Bash(diskutil eraseVolume)",
"Bash(diskutil reformat)",
"Bash(diskutil zeroDisk)",
"Bash(diskutil appleRAID)",
"Bash(diskutil randomDisk)",
"Bash(diskutil coreStorage)",
"Bash(diskutil cs)",
"Bash(diskutil disableJournal)",
"Bash(diskutil resetFusion)",
"Bash(diskutil disableOwnership)",
"Bash(diskutil apfs deleteContainer)",
"Bash(diskutil apfs eraseVolume)",
"Bash(diskutil apfs decryptVolume)",
"Bash(diskutil apfs changePassphrase)",
"Bash(diskutil apfs deleteVolume)",
"Bash(diskutil apfs deleteVolumeGroup)",
"Bash(diskutil apfs deleteSnapshot)",
"Bash(rm -rf /)",
"Bash(rm -rf /*)",
"Bash(rm -rf ~)",
@ -164,17 +70,6 @@
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "/usr/bin/python3 /mnt/NV2/Development/cognitive-memory/scripts/session_memory.py",
"timeout": 15
}
]
}
]
},
"statusLine": {
@ -186,7 +81,29 @@
"claude-code-setup@claude-plugins-official": true,
"frontend-design@claude-plugins-official": true,
"rust-analyzer-lsp@claude-plugins-official": true,
"pyright-lsp@claude-plugins-official": true
"pyright-lsp@claude-plugins-official": true,
"session@agent-toolkit": true,
"format-on-save@agent-toolkit": true,
"permission-manager@agent-toolkit": true,
"project-plan@cal-claude-plugins": true,
"save-doc@cal-claude-plugins": true,
"youtube-transcriber@cal-claude-plugins": true,
"z-image@cal-claude-plugins": true
},
"extraKnownMarketplaces": {
"agent-toolkit": {
"source": {
"source": "github",
"repo": "St0nefish/agent-toolkit"
}
},
"cal-claude-plugins": {
"source": {
"source": "git",
"url": "https://git.manticorum.com/cal/claude-plugins.git"
},
"autoUpdate": true
}
},
"autoUpdatesChannel": "latest",
"skipDangerousModePermissionPrompt": true

View File

@ -1,66 +0,0 @@
# json-pretty
Simple JSON prettifier CLI tool for formatting JSON without using external online services.
## When to Use
Use when the user asks to:
- "prettify json"
- "format json"
- "pretty print json"
- "validate json"
- "clean up json"
- Or mentions wanting to format/prettify JSON data
## Tool Location
`~/.claude/skills/json-pretty/json-pretty.py`
Symlinked to `~/.local/bin/json-pretty` for PATH access.
## Usage
```bash
# From file
json-pretty input.json
# From stdin/pipe
cat data.json | json-pretty
echo '{"foo":"bar"}' | json-pretty
# Save to file
json-pretty input.json -o output.json
# Options
json-pretty input.json --indent 4 # Custom indentation
json-pretty input.json --sort-keys # Sort object keys
json-pretty input.json --compact # Minify instead of prettify
```
## Options
- `-o, --output FILE`: Write to file instead of stdout
- `-i, --indent N`: Indentation spaces (default: 2)
- `-s, --sort-keys`: Sort object keys alphabetically
- `-c, --compact`: Compact output (minify)
## Examples
**Prettify inline JSON:**
```bash
echo '{"name":"cal","items":[1,2,3]}' | json-pretty
```
**Format a file:**
```bash
json-pretty messy.json -o clean.json
```
**Sort keys and use 4-space indent:**
```bash
json-pretty data.json --indent 4 --sort-keys
```
## Privacy Note
Built specifically to avoid posting potentially sensitive JSON to online prettifier services.

View File

@ -1,88 +0,0 @@
#!/usr/bin/env python3
"""Simple JSON prettifier for command-line use."""
import json
import sys
import argparse
def main():
parser = argparse.ArgumentParser(
description="Pretty-print JSON from file or stdin",
epilog="Examples:\n"
" json-pretty input.json\n"
" cat data.json | json-pretty\n"
" json-pretty input.json -o output.json\n"
" echo '{\"a\":1}' | json-pretty --indent 4",
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'input',
nargs='?',
help='Input JSON file (omit or use - for stdin)'
)
parser.add_argument(
'-o', '--output',
help='Output file (default: stdout)'
)
parser.add_argument(
'-i', '--indent',
type=int,
default=2,
help='Indentation spaces (default: 2)'
)
parser.add_argument(
'-s', '--sort-keys',
action='store_true',
help='Sort object keys alphabetically'
)
parser.add_argument(
'-c', '--compact',
action='store_true',
help='Compact output (no extra whitespace)'
)
args = parser.parse_args()
# Read input
try:
if args.input and args.input != '-':
with open(args.input, 'r') as f:
input_text = f.read()
else:
input_text = sys.stdin.read()
except FileNotFoundError:
print(f"Error: File '{args.input}' not found", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"Error reading input: {e}", file=sys.stderr)
sys.exit(1)
# Parse and format JSON
try:
data = json.loads(input_text)
if args.compact:
output = json.dumps(data, sort_keys=args.sort_keys, separators=(',', ':'))
else:
output = json.dumps(data, indent=args.indent, sort_keys=args.sort_keys)
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON - {e}", file=sys.stderr)
sys.exit(1)
# Write output
try:
if args.output:
with open(args.output, 'w') as f:
f.write(output)
f.write('\n')
else:
print(output)
except Exception as e:
print(f"Error writing output: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == '__main__':
main()

156
tmp/permissions-audit.md Normal file
View File

@ -0,0 +1,156 @@
# Claude Code Permissions Audit
**Date:** 2026-03-18
**Purpose:** Document current state before migrating to permission-manager plugin
## Current Approach
Flat allow/deny lists in `~/.claude/settings.json` with ~100+ individual entries.
No cmd-gate hook patterns. Bash is fully open.
---
## Allow-list: Tool Permissions
### Fully open (wildcard)
| Permission | Notes |
|---|---|
| `Bash` | No restrictions on any Bash command |
| `Read(*)` | All files |
| `Glob(*)`, `Grep(*)`, `LS(*)` | All search/list |
| `WebFetch(domain:*)` | All web domains |
| `WebSearch` | Unrestricted |
| `TodoWrite(*)`, `Task(*)` | All task operations |
| `Skill(*)`, `SlashCommand(*)` | All skills |
| `NotebookRead(*)`, `NotebookEdit(*)` | All notebooks |
| `MultiEdit(*)`, `ExitPlanMode(*)` | Unrestricted |
### MCP servers (full access)
| Permission | Server |
|---|---|
| `mcp__n8n-mcp__*` | n8n workflow automation |
| `mcp__gitea-mcp__*` | Gitea git hosting |
| `mcp__tui-driver__*` | TUI automation |
| `mcp__cognitive-memory__*` | Cognitive memory (DECOMMISSIONED) |
| `mcp__memorygraph__*` | Memory graph (DECOMMISSIONED) |
### MCP servers (specific tools)
| Permission | Notes |
|---|---|
| `mcp__notion__API-retrieve-a-page` | Read-only Notion |
| `mcp__notion__API-get-block-children` | Read-only Notion |
| `mcp__notion__API-post-database-query` | Read-only Notion |
| `mcp__notediscovery__get_notes_by_tag` | Note discovery |
| `mcp__docker-mcp-gateway__mcp-find` | Docker MCP gateway |
| `mcp__docker-mcp-gateway__mcp-config-set` | Docker MCP gateway |
| `mcp__docker-mcp-gateway__mcp-add` | Docker MCP gateway |
| `mcp__docker-mcp-gateway__mcp-exec` | Docker MCP gateway |
### Specific Bash commands
These were added before `Bash` was opened fully — now redundant:
- `Bash(git add:*)`
- `Bash(sudo systemctl status:*)`, `Bash(sudo journalctl:*)`
- `Bash(ping:*)`, `Bash(mkdir:*)`
- `Bash(podman exec tdarr-node-gpu ls:*)`, `Bash(podman exec tdarr-node-gpu tail:*)`
- `Bash(podman exec tdarr-node-gpu-unmapped ls:*)`, `Bash(podman exec tdarr-node-gpu-unmapped find:*)`
- `Bash(ssh tdarr "docker inspect":*)`
- `Bash(podman logs:*)`, `Bash(sudo podman logs:*)`, `Bash(sudo podman ps:*)`
### Specific WebFetch domains
All redundant given `WebFetch(domain:*)` wildcard:
- github.com, docs.tdarr.io, superuser.com, docs.podman.io
- platform.openai.com, docs.n8n.io, help.ko-fi.com, n8n.io
- custom-system-builder.gitlab.io, foundryvtt.com, 10.10.0.174
- docs.openclaw.ai, pve.proxmox.com, git.manticorum.com
- developers.cloudflare.com, uptime-kuma-api.readthedocs.io
- www.enworld.org, 2minutetabletop.com, www.forgotten-adventures.net
- www.doodlesanddragons.com, www.drivethrurpg.com, forums.rptools.net
- www.fantasygrounds.com, gmkeros.wordpress.com, inkwellideas.com
- itch.io, opengameart.org, store.paizo.com
- forum.gitea.com, docs.gitea.com, gitea.com, about.gitea.com
- docs.anthropic.com, raw.githubusercontent.com, ra-h.app, ollama.com
- community.teamspeak.com, docs.docker.com, forums.docker.com
### Specific Skills
- `Skill(youtube-transcriber)`, `Skill(proxmox)`, `Skill(mcp-manager)`, `Skill(notediscovery)`
- All redundant given `Skill(*)`
### Specific Read paths
- `Read(//home/cal/.claude/**)` — redundant given `Read(*)`
- `Read(//home/cal/.local/share/Steam/userdata/32759396/1144200/**)` — Ready or Not save data
---
## Deny-list
### Destructive disk operations (macOS — NOT APPLICABLE on Linux)
- `diskutil partitionDisk`, `eraseDisk`, `eraseVolume`, `reformat`, `zeroDisk`
- `diskutil appleRAID`, `randomDisk`, `coreStorage`, `cs`
- `diskutil disableJournal`, `resetFusion`, `disableOwnership`
- `diskutil apfs deleteContainer`, `eraseVolume`, `decryptVolume`
- `diskutil apfs changePassphrase`, `deleteVolume`, `deleteVolumeGroup`, `deleteSnapshot`
### Destructive Linux operations (KEEP)
- `rm -rf /`, `rm -rf /*`, `rm -rf ~`, `rm -rf $HOME`
- `rm -rf $PAI_HOME`, `rm -rf $PAI_DIR`
- `sudo rm -rf /`, `sudo rm -rf /*`
- `fork bomb`
- `dd if=/dev/zero of=/dev/sda`
- `mkfs.ext4 /dev/sda`
---
## Hooks
| Event | Matcher | Script | Status |
|---|---|---|---|
| PostToolUse | `Edit\|Write\|MultiEdit` | `~/.claude/hooks/format-code.sh` | Active |
| SubagentStop | (all) | `~/.claude/hooks/notify-subagent-done.sh` | Active |
| SessionEnd | (all) | `/mnt/NV2/Development/cognitive-memory/scripts/session_memory.py` | **REMOVE** (decommissioned) |
---
## Plugins
| Plugin | Source | Status |
|---|---|---|
| `permission-manager@agent-toolkit` | St0nefish/agent-toolkit | Installed, cmd-gate has no custom patterns |
| `session@agent-toolkit` | St0nefish/agent-toolkit | Installed |
| `format-on-save@agent-toolkit` | St0nefish/agent-toolkit | Installed (overlaps PostToolUse hook) |
| `playground@claude-plugins-official` | Official | Active |
| `claude-code-setup@claude-plugins-official` | Official | Active |
| `frontend-design@claude-plugins-official` | Official | Active |
| `rust-analyzer-lsp@claude-plugins-official` | Official | Active |
| `pyright-lsp@claude-plugins-official` | Official | Active |
---
## Additional Directories
- `/home/cal/.config/steamtinkerlaunch/`
- `/mnt/NV2/SteamLibrary/`
---
## Migration Recommendations
### Cleanup (do first)
1. Remove all `diskutil` deny entries — not on macOS
2. Remove all specific `Bash(...)` entries — redundant with `Bash` wildcard
3. Remove all specific `WebFetch(domain:...)` entries — redundant with `domain:*`
4. Remove all specific `Skill(...)` entries — redundant with `Skill(*)`
5. Remove specific `Read(...)` entries — redundant with `Read(*)`
6. Remove `mcp__cognitive-memory__*` and all individual cognitive-memory entries
7. Remove `mcp__memorygraph__*`
8. Remove `mcp__notediscovery__get_notes_by_tag` and `Skill(notediscovery)`
9. Remove `mcp__docker-mcp-gateway__*` if not actively used
10. Remove `SessionEnd` cognitive-memory hook
### Migration to cmd-gate (do second)
1. Remove `Bash` wildcard from allow-list
2. Define cmd-gate custom patterns for common safe operations
3. Replace `WebFetch(domain:*)` with explicit domain groups
4. Test workflow to ensure nothing breaks
### Hook deduplication
- `format-on-save@agent-toolkit` may overlap with existing `PostToolUse(Edit|Write|MultiEdit)``format-code.sh` hook — pick one