diff --git a/qga_comms.sh b/qga_comms.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d502d6daf39d3880db9c5af07b0bca1f969144e8
--- /dev/null
+++ b/qga_comms.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+if [ $# -eq 0 ]; then
+    echo "Usage: $0 <message>"
+    exit 1
+fi
+
+user_msg=$1
+
+first_user=$({ echo '{"execute":"guest-get-users"}'; sleep 1; } | socat unix-connect:/tmp/qga.sock - | jq -r '.return[0].user')
+echo "First user: $first_user"
+
+file_path="/home/"$first_user"/busted"
+echo "Creating file: $file_path"
+
+create_file_cmd=$(jq -n --arg file_path "$file_path" '{"execute":"guest-file-open", "arguments":{"path":$file_path,"mode":"w"}}')
+file_handle=$({ echo $create_file_cmd; sleep 1; } | socat unix-connect:/tmp/qga.sock - | jq '.return')
+
+bytes_count=$(echo -n $user_msg | wc -c | awk '{print $1}')
+encoded_str=$(echo -n $user_msg | base64 | tr -d '\n')
+
+int_handle=$((file_handle))
+int_bytes_count=$((bytes_count))
+
+write_to_file_cmd=$(jq -n --argjson int_handle "$int_handle" \
+    --arg encoded_str "$encoded_str" \
+    --argjson int_bytes_count "$int_bytes_count" \
+    '{"execute":"guest-file-write", "arguments":{"handle":$int_handle,"buf-b64":$encoded_str,"count":$int_bytes_count}}')
+
+echo "Writing to $file_path ($file_handle)..."
+
+{ echo $write_to_file_cmd; sleep 1; } | socat unix-connect:/tmp/qga.sock - > /dev/null
+
+close_file_cmd=$(jq -n --argjson int_handle "$int_handle" \
+    '{"execute":"guest-file-close", "arguments":{"handle":$int_handle}}')
+
+
+echo "Closing $file_path ($file_handle)..."
+
+{ echo $close_file_cmd; sleep 1; } | socat unix-connect:/tmp/qga.sock - > /dev/null