{
  "permissions": {
    "allow": [
      "Bash(docker exec garden-app python3 -c ' *)",
      "Bash(srv-gw restart *)",
      "Bash(srv-gw logs *)",
      "Bash(curl -sS -c /tmp/garden-cookie.txt -X POST -d \"password=garden\" -o /dev/null -w \"login: %{http_code}\\\\n\" \"http://172.17.0.1:3080/login\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/station_form.html -w \"stations/new: %{http_code}\\\\n\" \"http://172.17.0.1:3080/stations/new\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/area_form.html -w \"areas/1/edit: %{http_code}\\\\n\" \"http://172.17.0.1:3080/areas/1/edit\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/area_detail.html -w \"areas/1: %{http_code}\\\\n\" \"http://172.17.0.1:3080/areas/1\")",
      "Bash(docker port *)",
      "Bash(curl -sS -c /tmp/garden-cookie.txt -X POST -d \"password=garden\" -o /dev/null -w \"login: %{http_code}\\\\n\" \"http://172.17.0.1:3081/login\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/station_form.html -w \"stations/new: %{http_code}\\\\n\" \"http://172.17.0.1:3081/stations/new\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/area_form.html -w \"areas/1/edit: %{http_code}\\\\n\" \"http://172.17.0.1:3081/areas/1/edit\")",
      "Bash(curl -sS -b /tmp/garden-cookie.txt -o /tmp/area_detail.html -w \"areas/1: %{http_code}\\\\n\" \"http://172.17.0.1:3081/areas/1\")",
      "Bash(curl -sS -k -c /tmp/g.txt -X POST -d \"password=garden&next=/\" -o /dev/null -w \"%{http_code} %{redirect_url}\\\\n\" \"https://garden.riverway.ca/login\")",
      "Bash(curl -sS -c /tmp/g.txt -X POST -d \"password=waa5Ih2NANvfChg8&next=/\" -o /dev/null -w \"%{http_code}\\\\n\" \"https://garden.riverway.ca/login\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/station_form.html -w \"stations/new: %{http_code}\\\\n\" \"https://garden.riverway.ca/stations/new\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/area1_edit.html -w \"areas/1/edit: %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/1/edit\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/area1_detail.html -w \"areas/1: %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/1\")",
      "Read(//tmp/**)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/area4.html -w \"%{http_code}\\\\n\" \"https://garden.riverway.ca/areas/4\")",
      "Bash(docker cp *)",
      "Bash(docker exec *)",
      "Bash(grep -nB1 -A4 -i \"transcrib\\\\|whisper\\\\|stt\\\\|speech\" /srv/apps/garden/PLANNING.md /srv/apps/garden/PLANNING_ai_planner.md)",
      "Bash(grep -nB1 -A4 -i \"audio\\\\|transcript\" /srv/apps/garden/PLANNING.md /srv/apps/garden/PLANNING_ai_planner.md)",
      "Bash(awk -F= '/^GEMINI_API_KEY=/ {print length\\($2\\)\"/>\"}' /srv/apps/garden/.env)",
      "Bash(srv-gw deploy *)",
      "Bash(curl -sS -b /tmp/g.txt -X POST -w '\\\\nHTTP %{http_code}\\\\n' https://garden.riverway.ca/api/notes/__TRACKED_VAR__/transcribe)",
      "Bash(python3 /tmp/garden-rename-sql.py)",
      "Bash(curl -sS -b /tmp/g.txt \"https://garden.riverway.ca/years/7\" -o /tmp/year7.html)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/tl.html \"https://garden.riverway.ca/timeline\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/area1.html \"https://garden.riverway.ca/areas/1\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/edit9.html -w \"%{http_code}\\\\n\" \"https://garden.riverway.ca/comments/9/edit\")",
      "Bash(grep -oE '<input.*value=\"[^\"]*comment_date[^\"]*\"|<textarea[^>]*>[^<]{0,100}' /tmp/edit9.html)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/cap.html \"https://garden.riverway.ca/capture\")",
      "Bash(curl -sS -b /tmp/g.txt -X POST -F target_type=area -F target_id=1 -F comment_date=2026-05-04 -F 'body=test note via new comment endpoint' -F kind=note -F next=/areas/1 -o /dev/null -w '%{http_code}\\\\n' https://garden.riverway.ca/comments)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/edit155.html \"https://garden.riverway.ca/comments/155/edit\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/r32.html \"https://garden.riverway.ca/areas/32\")",
      "Bash(curl -sS -b /tmp/g.txt \"https://garden.riverway.ca/areas/1\" -o /tmp/area1.html)",
      "Bash(curl -sS -b /tmp/g.txt \"https://garden.riverway.ca/capture\" -o /tmp/cap.html)",
      "Bash(curl -sS \"https://api.open-meteo.com/v1/forecast?latitude=49.69&longitude=-124.99&daily=temperature_2m_max,temperature_2m_min,precipitation_sum,precipitation_probability_max,wind_speed_10m_max&temperature_unit=celsius&precipitation_unit=mm&forecast_days=10&timezone=America/Vancouver\" -o /tmp/wx.json)",
      "Bash(python3 -c ' *)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a110.html \"https://garden.riverway.ca/areas/110\")",
      "Bash(curl -sS -b /tmp/g.txt -X POST -H 'Content-Type: application/json' -d '{\"positions\": [{\"x\": 0.5, \"y\": 1.0}, {\"x\": 1.0, \"y\": 1.0}, {\"x\": 1.5, \"y\": 1.0}, {\"x\": 2.0, \"y\": 1.0}, {\"x\": 2.5, \"y\": 1.0}, {\"x\": 3.0, \"y\": 1.0}, {\"x\": 3.5, \"y\": 1.0}, {\"x\": 4.0, \"y\": 1.0}, {\"x\": 4.5, \"y\": 1.0}, {\"x\": 5.0, \"y\": 1.0}]}' https://garden.riverway.ca/api/plants/164/positions)",
      "Bash(curl -sS -b /tmp/g.txt -X POST -H 'Content-Type: application/json' -d '{\"positions\": []}' https://garden.riverway.ca/api/plants/164/positions -o /dev/null -w 'reset: %{http_code}\\\\n')",
      "Bash(grep -nA2 \"SPECIES_ICONS = {\" /srv/apps/garden/app/main.py)",
      "Bash(grep -oE 'class=\"plant-icon-emoji\"[^<]{0,40}' /tmp/a110.html)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a57.html \"https://garden.riverway.ca/areas/57\")",
      "Bash(grep -nA15 \"^def load_plants_by_area\" /srv/apps/garden/app/main.py)",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/sp_edit.html \"https://garden.riverway.ca/species/17/edit\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/v_edit.html \"https://garden.riverway.ca/varieties/74/edit\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a110.html -w \"/areas/110: %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/110\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a57.html -w \"/areas/57:  %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/57\")",
      "Bash(curl -sS -b /tmp/g.txt -o /dev/null -w \"/areas/4: %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/4\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a4.html \"https://garden.riverway.ca/areas/4\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/a6.html \"https://garden.riverway.ca/areas/6\")",
      "Bash(curl -sS -b /tmp/g.txt -X POST -H 'Content-Type: application/json' -d '{\"x\": 50, \"y\": 25}' https://garden.riverway.ca/api/areas/6/parent-position)",
      "Bash(awk -F: '$2 > 4000')",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/lay.html -w \"%{http_code}\\\\n\" \"https://garden.riverway.ca/areas/110/layout\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/lay4.html -w \"%{http_code}\\\\n\" \"https://garden.riverway.ca/areas/4/layout\")",
      "Bash(curl -sS -b /tmp/g.txt -o /tmp/lay.html -w \"/areas/110/layout: %{http_code}\\\\n\" \"https://garden.riverway.ca/areas/110/layout\")",
      "Bash(curl -s -o /tmp/garden-layout-test.html -w \"HTTP %{http_code}\\\\nbytes %{size_download}\\\\n\" 'http://172.17.0.1:8001/areas/1/layout' -H 'Cookie: garden_session=test')",
      "Bash(sqlite3 garden.db \"SELECT status, COUNT\\(*\\) FROM plantings GROUP BY status;\")",
      "Bash(curl -s -w \"HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/areas/1')",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \".schema plants\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT status, COUNT\\(*\\) FROM plants GROUP BY status; SELECT '---'; SELECT id, status FROM plantings WHERE status != 'planted';\")",
      "Bash(curl -s -w \"HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/areas/51/layout')",
      "Bash(curl -s -w \"areas/51: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/areas/51')",
      "Bash(curl -s -w \"plantings/1: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/plantings/1')",
      "Bash(curl -s -w \"/plantings/new: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/plantings/new')",
      "Bash(curl -s -w \"/unplanted: HTTP %{http_code}\\\\n\" -o /tmp/unp.html 'http://172.17.0.1:3081/unplanted')",
      "Bash(curl -s -w \"/areas/51/layout: HTTP %{http_code}\\\\n\" -o /tmp/layout.html 'http://172.17.0.1:3081/areas/51/layout')",
      "Bash(curl -s -w \"/areas/1/layout: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/areas/1/layout')",
      "Bash(curl -s -w \"/unplanted: HTTP %{http_code}\\\\n/plantings: HTTP %{http_code}\\\\n/areas/1/layout: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/unplanted' -o /dev/null 'http://172.17.0.1:3081/plantings' -o /dev/null 'http://172.17.0.1:3081/areas/1/layout')",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT s.name AS species, v.name AS variety, p.status, COUNT\\(*\\) AS rows, SUM\\(CAST\\(NULLIF\\(p.quantity, ''\\) AS INTEGER\\)\\) AS total_qty FROM plants p LEFT JOIN species s ON s.id=p.species_id LEFT JOIN varieties v ON v.id=p.variety_id WHERE p.area_id IS NULL AND COALESCE\\(p.positions, ''\\) IN \\('', '[]'\\) AND p.status IN \\('unplanted', 'idea'\\) AND COALESCE\\(p.is_archived,0\\)=0 GROUP BY p.species_id, p.variety_id, p.status, p.planting_id HAVING rows > 1;\")",
      "Bash(curl -s -w \"HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/areas/1/layout')",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT id, name, length_ft, width_ft FROM areas WHERE length_ft IS NOT NULL AND \\(length_ft != CAST\\(length_ft AS INTEGER\\) OR width_ft != CAST\\(width_ft AS INTEGER\\)\\) LIMIT 5;\")",
      "Bash(curl -s -w \"/unplanted: HTTP %{http_code}\\\\n/plants/263: HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/unplanted' -o /dev/null 'http://172.17.0.1:3081/plants/263')",
      "Bash(curl -s -w \"HTTP %{http_code}\\\\n\" -o /dev/null 'http://172.17.0.1:3081/')",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT photo_paths, audio_path FROM field_notes WHERE id = 171;\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT id, target_type, target_id, is_primary FROM field_note_targets WHERE field_note_id = 171;\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"DELETE FROM field_note_targets WHERE field_note_id = 171; DELETE FROM field_notes WHERE id = 171; SELECT changes\\(\\);\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT id, body, photo_paths FROM field_notes WHERE id = 171 OR id = 170;\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT category, COUNT\\(*\\) FROM activity_log GROUP BY category ORDER BY 2 DESC LIMIT 10;\")",
      "Bash(sqlite3 /srv/apps/garden/data/garden.db \"SELECT comment_date, kind, SUBSTR\\(body, 1, 80\\) FROM field_notes WHERE kind='done' AND comment_date >= '2026-04-01' ORDER BY comment_date DESC LIMIT 10;\")"
    ]
  }
}
