{ "env": { "ECC_HOOK_PROFILE": "standard" }, "permissions": { "allow": [ "Bash(wsl -e bash -c \"cd /mnt/c/Users/yaoji/git/ColaCoder/invoice-master-poc-v2 && source ~/miniconda3/etc/profile.d/conda.sh && conda activate invoice-sm120 && python -m src.cli.train --dataset-dir data/dataset --limit 100 --epochs 1 --batch 8 --device 0 --export-only\")", "Bash(netstat:*)", "Bash(findstr:*)", "Bash(./mvnw test:*)", "Bash(grep:*)", "Bash(mvn test:*)", "Bash(find:*)", "Bash(xargs wc:*)", "Bash(xargs ls:*)", "Bash(do echo:*)", "Bash(curl:*)", "Bash(uv sync:*)", "Bash(uv run:*)", "Bash(uv pip:*)", "Bash(claude mcp:*)", "Bash(ls:*)", "Bash(cat:*)", "Bash(head:*)", "Bash(tail:*)", "Bash(echo:*)", "Bash(pwd:*)", "Bash(wc:*)", "Bash(sort:*)", "Bash(which:*)", "Bash(node:*)", "Bash(npm:*)", "Bash(npx:*)", "Bash(pnpm:*)", "Bash(dotnet build:*)", "Bash(dotnet test:*)", "Bash(dotnet run:*)", "Bash(dotnet restore:*)", "Bash(python:*)", "Bash(python3:*)", "Bash(pip:*)", "Bash(pytest:*)", "Bash(go build:*)", "Bash(go test:*)", "Bash(go vet:*)", "Bash(git status:*)", "Bash(git diff:*)", "Bash(git log:*)", "Bash(git branch:*)", "Bash(git stash:*)", "Bash(git add:*)", "Bash(git commit:*)", "Bash(git checkout:*)", "Bash(git show:*)", "Bash(gh:*)", "Bash(docker:*)", "Bash(docker-compose:*)", "WebSearch", "WebFetch", "mcp__billo-es-logs__list_applications", "mcp__billo-es-logs__recent_errors", "mcp__billo-es-logs__error_patterns", "mcp__billo-es-logs__search_logs", "mcp__billo-es-logs__slow_requests" ], "defaultMode": "acceptEdits" }, "hooks": { "PreCompact": [ { "matcher": "*", "hooks": [ { "type": "prompt", "prompt": "Context is about to be compacted. Update the 'Active Session State' section in MEMORY.md (the auto-memory file) with: 1) Current task, 2) Active agents/skills, 3) Key decisions, 4) Remaining work. Keep it under 10 lines. If new stable knowledge was learned (not session-specific), save it to the appropriate topic file (architecture.md, test-locations.md, etc.) instead of MEMORY.md. MEMORY.md must stay under 50 lines total - it is an index, not a log.", "timeout": 30 } ] } ], "SessionStart": [ { "hooks": [ { "type": "command", "command": "node \"C:/Users/yaoji/.claude/hooks/gsd-check-update.js\"" } ] } ], "PostToolUse": [ { "hooks": [ { "type": "command", "command": "node \"C:/Users/yaoji/.claude/hooks/gsd-context-monitor.js\"" } ] } ] }, "enabledPlugins": { "dotnet-skills@dotnet-skills": true, "planning-with-files@planning-with-files": true, "csharp-lsp@claude-plugins-official": true, "pyright-lsp@claude-plugins-official": true, "typescript-lsp@claude-plugins-official": true, "everything-claude-code@everything-claude-code": true, "obsidian@obsidian-skills": true }, "extraKnownMarketplaces": { "obsidian-skills": { "source": { "source": "github", "repo": "kepano/obsidian-skills" } } }, "skipDangerousModePermissionPrompt": true, "statusLine": { "type": "command", "command": "node \"C:/Users/yaoji/.claude/hooks/gsd-statusline.js\"" } }