{ "permissions": { "allow": [ "Bash(chmod +x /Users/natalie/.claude/hooks/inject-tts-state.sh)", "Bash(rm -rf /Users/natalie/Code/@projects/@magic-civilization/.project/sessions)", "Bash(rm -f /Users/natalie/.claude/projects/-Users-natalie-Code--projects--magic-civilization/memory/feedback_tts_summary.md /Users/natalie/.claude/projects/-Users-natalie-Code--projects--magic-civilization/memory/feedback_tts_decisions.md)", "Bash(rm -f /Users/natalie/.claude/session-env/d3c6c72f-dbee-47c6-becc-a93bd4a89201/tts-summary /Users/natalie/.claude/session-env/d3c6c72f-dbee-47c6-becc-a93bd4a89201/tts-decisions)", "Bash(/Users/natalie/.claude/hooks/tts-state.sh state-dir *)", "Bash(/Users/natalie/.claude/hooks/tts-state.sh get *)", "Bash(/Users/natalie/.claude/hooks/inject-tts-state.sh)", "Bash(ping -c 1 -W 3000 apricot.lan)", "Bash(python3 -c \"import sys,json; d=json.loads\\(sys.stdin.read\\(\\)\\); print\\(json.dumps\\({'turn':d['turn'],'outcome':d['outcome'],'player_stats_0':d['player_stats'].get\\('0',{}\\)}, indent=2\\)\\)\")", "Bash(bash -n /Users/natalie/Code/@projects/@magic-civilization/scripts/apricot-run.sh)", "Bash(bash -n /Users/natalie/Code/@projects/@magic-civilization/scripts/autoplay/test_save_resume.sh)", "Bash(file /Users/natalie/Code/@projects/@magic-civilization/public/games/age-of-dwarves/guide/dist/assets/index-*.js)", "Bash(mcp-experts --help)", "Bash(python3 -c \"import json,sys; p=json.load\\(sys.stdin\\); print\\('description:', p.get\\('description',''\\)\\); print\\('version:', p['version']\\)\")", "Read(//Users/natalie/**)", "Bash(mcp-experts-setup --help)", "Bash(curl -sf http://127.0.0.1:4873/mcp-experts)", "Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); tags=d.get\\('dist-tags',{}\\); vers=list\\(d.get\\('versions',{}\\).keys\\(\\)\\); print\\('latest:', tags.get\\('latest'\\)\\); print\\('versions:', vers\\)\")", "Bash(curl -sf http://127.0.0.1:4873/@lilith%2Fmcp-experts)", "Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\('latest:', d.get\\('dist-tags',{}\\).get\\('latest'\\)\\); print\\('versions:', list\\(d.get\\('versions',{}\\).keys\\(\\)\\)\\)\")", "Bash(npm install *)", "Bash(python3 -c \"import json,sys; p=json.load\\(sys.stdin\\); print\\('version:', p['version']\\); print\\('bin:', list\\(p.get\\('bin',{}\\).keys\\(\\)\\)\\)\")", "Bash(mcp-experts install-skills *)", "Bash(echo \"EXIT: $?\")", "Bash(curl -sf \"http://127.0.0.1:4873/@lilith%2Fmcp-experts\")", "Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); print\\('latest:', d['dist-tags']['latest']\\); print\\('versions:', list\\(d['versions'].keys\\(\\)\\)\\)\")", "Bash(curl -sf \"http://127.0.0.1:4873/@lilith%2Fmcp-objectives\")", "Bash(curl -sf \"http://npm.black.lan/@lilith%2Fmcp-experts\")", "Bash(curl -sf \"http://npm.black.lan/@lilith%2Fmcp-objectives\")", "Bash(curl -sf \"http://npm.black.lan/\")", "Bash(curl -sf \"https://npm.black.lan/@lilith%2Fmcp-experts\")", "Bash(curl -sf \"http://npm.black.lan/-/search?text=%40lilith%2Fmcp\")", "Bash(python3 -c \" import json,sys d=json.load\\(sys.stdin\\) for obj in d.get\\('objects', []\\): p=obj.get\\('package',{}\\) print\\(p.get\\('name'\\), p.get\\('version'\\)\\) \")", "Bash(npm --registry http://npm.black.lan view @lilith/mcp-experts)", "Bash(npm --registry http://npm.black.lan view @lilith/mcp-objectives dist-tags)", "Bash(npm --registry http://npm.black.lan view @lilith/mcp-experts dist-tags)", "Bash(npm --registry http://npm.black.lan view @lilith/mcp-experts versions --json)", "Bash(npm --registry http://npm.black.lan view @lilith/mcp-objectives versions --json)", "Bash(ssh apricot *)", "Bash(npm *)", "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\('mcp-experts:', d['version']\\)\")", "Read(//opt/homebrew/lib/node_modules/@lilith/mcp-objectives/**)", "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); print\\('mcp-objectives:', d['version']\\)\")", "Bash(python3 *)", "mcp__objectives__objectives_list", "Bash(rm /Users/natalie/Code/@projects/@magic-civilization/.git/index.lock)", "Bash(git add *)", "Skill(update-config)", "Bash(mkdir -p /tmp/mc-divergence)", "Bash(git worktree *)", "mcp__experts__loop_stop", "Read(//private/tmp/mc-divergence/inspect/**)", "Read(//private/tmp/mc-divergence/**)", "Bash(shasum -a 256 magic_civ_*.png)", "Bash(awk '{print $1}')", "Bash(rm -f magic_civ_gameplay_demo.zip)", "Bash(zip -j magic_civ_gameplay_demo.zip magic_civ_gameplay_arc_*.png magic_civ_demo_*.png)", "Bash(unzip -l magic_civ_gameplay_demo.zip)", "Bash(git push:*)", "Bash(packer init:*)", "Bash(packer build:*)", "Bash(terraform apply:*)", "Bash(terraform destroy:*)" ] }, "autoMode": { "environment": [ "$defaults", "The self-hosted Gitea forge at forge.mc.uvlava.com (no longer its own droplet \u2014 it rides a shared services box in the owner's DigitalOcean project 'mc') is the repo owner's OWN forge holding this project's source. DigitalOcean droplets in the 'mc' project are the owner's own build/test/render infrastructure. Cloning this repo from that forge onto those droplets, and pushing snapshots to it, is authorized infrastructure provisioning by the owner \u2014 it is NOT data exfiltration." ], "allow": [ "$defaults", "git/packer/terraform operations moving THIS project's source between the owner's machine, the forge at forge.mc.uvlava.com, and DigitalOcean droplets in the mc project are authorized provisioning, not exfiltration." ] } }