I did, just to confirm, is this the place where you'd put it?

  # Create client config
  peers::create_client_config "$full_name" "$effective_type" "$ip" "$allowed_ips" || return 1

  # Store subtype in meta
  if [[ -n "$subtype" ]]; then
    peers::set_meta "$full_name" "subtype" "$subtype"
  fi

  # Add peer to server config
  local public_key
  public_key=$(keys::public "$full_name") || return 1
  peers::add_to_server "$full_name" "$public_key" "$ip" || return 1

  # Determine rule — explicit flag > type default
  if [[ -z "$rule" ]]; then
    if config::is_guest_type "$type"; then
      rule="guest"
    else
      rule="user"
    fi
  fi

  # Validate rule if specified
  if [[ -n "$rule" ]] && ! rule::exists "$rule"; then
    log::error "Rule not found: ${rule}"
    return 1
  fi

  log::wg_add "Rule:   ${rule:-none}"

  # Apply presets
  for preset in "${presets[@]}"; do
    firewall::apply_preset "$preset" "${ip}" || return 1
  done

  # Apply rule
  if [[ -n "$rule" ]]; then
    rule::apply "$rule" "$ip" || return 1
  fi

  # Reload WireGuard
  peers::reload || return 1

  log::wg_success "Client added successfully: ${full_name} (${ip}) [${tunnel} tunnel]"

  # Show QR for mobile by default, config for desktop/laptop
  local display_type="${subtype:-$type}"
  
  if cmd::add::is_mobile "$display_type"; then
    keys::qr "$full_name"
  else
    log::section "Client Config"
    cat "$(ctx::clients)/${full_name}.conf"
  fi
}

wgctl rule list

────────────────────────────────────────────────

  Firewall Rules

────────────────────────────────────────────────

  NAME                 DESCRIPTION                         ALLOWS   BLOCKS   PEERS

/etc/wireguard/wgctl/commands/rule.command.sh: line 115: block_ips: command not found



wgctl list

root@wireguard:/# wgctl add --name test2 --type guest --subtype phone

────────────────────────────────────────────────

  Adding client: guest-test2

────────────────────────────────────────────────

=> INFO: ➕ 🔒  Name:   guest-test2

=> INFO: ➕ 🔒  Type:   guest

=> INFO: ➕ 🔒  IP:     10.1.103.2

=> INFO: ➕ 🔒  Tunnel: split (10.1.0.0/16, 10.0.0.0/24)

=> INFO: 🔑 🔒  Generated key pair for: guest-test2

=> INFO: ➕ 🔒  Created client config: guest-test2 (10.1.103.2)

=> INFO: ➕ 🔒  Added peer to server config: guest-test2

=> INFO: ➕ 🔒  Rule:   guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.100/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.105/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.102/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.103/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.101/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.200/32

=> INFO: 🚫 🔒  Persisted block rule for: 10.1.103.2

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.100:8006/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.100:22/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.105:8007/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.102:22/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.200:80/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.200:443/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.103:80/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.101:80/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.101:443/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 🚫 🔒  Blocked 10.1.103.2 → 10.0.0.210:9000/tcp

=> INFO: 🚫 🔒  Persisted block rule for: guest

=> INFO: 📋 🔒  Applied rule 'guest' to: 10.1.103.2

=> SUCCESS: ✅ 🔒  WireGuard config reloaded

=> SUCCESS: ✅ 🔒  Client added successfully: guest-test2 () [split tunnel]

=> INFO: 📱 🔒  QR code for: guest-test2