digraph { console_forwarder [label = < console_forwarder >, penwidth = 2] host_console_in [label = "internal/console.in", shape = "rectangle"] host_console_out [label = "internal/console.out", shape = "rectangle"] host_pty [label = "/dev/pty/###", shape = "rectangle"] run_cvd screen user [label = "User CLI"] vmm [label = "crosvm / qemu"] subgraph cluster_android { label = "Android VM" vm_console [label = "/dev/ttyS0", shape = "rectangle"] shell [label = "toybox / sh"] } run_cvd -> console_forwarder user -> screen screen -> host_pty -> console_forwarder [dir = "both"] console_forwarder -> host_console_out -> vmm [dir = "back"] console_forwarder -> host_console_in -> vmm vmm -> vm_console -> shell [dir = "both"] }