This is my quest to using my Google Pixel 9 Pro Android phone as thin client in a docking station, with GrapheneOS build 2026032001, Android 16.
Using the phone as thin client requires an USB-C 3.x connector with "DP alternate mode" or "HDMI mode" to output a display signal
over the USB-C cable. It also requires a higher quality of USB-C cable that connects all the wires. Some cheap (and not-so-cheap) cables don't connect all the pins and thus will not work.
Experience
With the 2026032001 build, you plug the phone into the docking station, select the display mode to extend the screen to the external display, and it just works. The mouse and keyboard input work anyway,
and the phone asks you whether to connect the screen as a secondary display or to mirror the phone screen to the external display.
Display setup
The mouse cursor can now move between the desktop display and the phone display.
You can even arrange the location of the phone relative to the large screen.

Adding an off-brand magnetic cable connector ("Magsafe") still lets the video
work. I prefer this in situations where I expect to disconnect / reconnect the
phone often. This was a "USB4 40 Gbps USB-C Magnetic Adapter" from
Amazon or AliExpress.
As I wiped my old Samsung S10, I can't really compare the experience with
Samsung Dex, but for mild desktop working, using Android Desktop Mode is OK
as long as you have a mouse and keyboard connected. I couldn't find a way
to make the phone screen act as touchpad for the external screen.
Configuring the DPI for your external screen
My display is a small display with a lot of pixels and I suspect it reports some
ridiculous DPI to Android. On my display, the controls, fonts and buttons were
rather large, crowding out the content. You get a slider in the settings that
changes some display parameter. I pulled the slider for the external display
all to the left, which made the display on the external screen mildly less
grotesque. The phone screen remained as-is, so that setting seems to be
per-display.
The display is a 4K display with 11" diagonal, so the controls and fonts
are rather large:

Weird stuff
Home 4K display is supplied at 1920x1080 , but Android displays everything as
if it were a 1280x800 display. This maybe is due to the display being a 4K 11"
display which I use for videoconferencing.
Launching apps on the home display does not work. It works on the display at
work. Maybe this is also due to the ridiculously low resolution / large icons.
Even with the changed DPI settings, I was unable to properly launch an
application via the task bar on the external screen.
Drawbacks
On my Google Pixel 9 Pro, it makes a difference with one USB-C to USB-C cable
whether it is plugged in upside down. I now have to shop Amazon to find a
trusted Known Good USB-C USB-C cable that supports alternate mode. The USB-C
cable that came with my docking station works in both orientations.
I've ordered a bunch of USB-C cables from Amazon and will try them out,
expecting the cheap ones to fail.
I always thought Teenage Engineering were expensive toys, with their (super
shiny) OP-1 and OP-XY , but the EP-40 series seems comparably cheap at € 400.

Of course, I wouldn't do much more with an EP-40 over an OP-1, but at €400
compared to €1200 , the expense is lower. Not buying either is still cheaper
and my rule of not buying a toy unless I have a concrete plan on when I'm going
to use it and what I'm going to do with it is still a money-saving rule.
I saw Kraftklub 2019 on their "Keine Nacht für Niemand" tour, also in the
Festhalle and came back for their 2026 tour. They are still rocking the house
and are really great as a live performance. The sound is still the same
as on their first albums, but it is a good, pushing sound.

They invested a lot in the stage and lighting. The projections worked well,
especially for a band that does a lot of guitar and non-electronic music.

They lived up to their credo of being a live band and had great interaction
with the audience. Moving into and through the audience two times with
songs that worked really well and other interactions with the audience
also were great.

The pictures were taken from the upper levels, as I feel too old for
going into the pit. Thus I missed out on the band going off-stage
and moving through the audience.

The acoustics in the Festhalle were bad as usual. Understanding the song
texts was hard, but I think it's not easy to work with the echoes in the
hall. But they certainly were not worse than other bands I've seen there.


A surprisingly complex tower defense. It has the appeal of the
GemCraft series, but
the mechanics are different. You build your defense towers along a path on
hexagonal terrain and at the same time build up the economy of your village
to provide for more resources to build more towers. The first games you play
are spent on unlocking all the buildings in some kind of meta-game. Once you
have unlocked all the buildings, there is a change to the whole game dynamic
as now you can chase beating the game to level 30, when all hex tiles are
exhausted. After beating level 30, there is the chase of high-scores by getting
your economy and defense good enough to survive wave after wave.
The game could be better, as the first 10 to 15 rounds of a game are mainly about kickstarting your economy, and that slog gets somewhat repetitive. Instead of having to play through these rounds, the game could start you in round 8 (or whatever) with ample resources instead. Otherwise, there is lots of strategy involved combining the right kinds of towers to find synergies. There is the bad luck of drawing bad tiles, but that usually isn't too punishing.
If you like tower defense games, this one is certainly one of the best in the last 5 years.
Why?
Still using z.ai GLM as my main model, I was looking
at other harnesses for using the model. Opencode
is an Open Source coding harness that supports z.ai. The harness still has
UI problems, which is the main point of a harness, so I likely won't be using
it in the near time. I wonder if it will ever get away from the fancy slop
machine, but maybe if most of your time with a program is watching the model in
it output text, then having some colourful distractions / blinking lights is
attractive for people.
How it should look:

How it looks:

No option for making the UI monochrome:

Opencode has had some bad defaults in the name of user convenience, like
sending all prompts to Groks free tier
just for coming up with chat summaries for the UI. It seems that now
the defaults don't do that anymore,
but this weakens my trust in the harness.
Installation
Installing Opencode client just follows the default installation via npm.
Config setup
I did the model configuration within Opencode as outlined
in the z.ai OpenCode instructions:
opencode auth login
and entered there a fresh API token from
the z.ai API key page.
Afterwards I had to actively select the GLM 4.7 model.
Containerfile creating a container for CC-with-GLM4.7
The Containerfile I used for this harness is as follows:
FROM docker.io/library/debian:trixie-slim
# debian-trixie-slim
RUN <<EOF
apt update
# Install our packages
DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install -y npm perl build-essential imagemagick git apache2 wireguard wget curl cpanminus liblocal-lib-perl ripgrep
EOF
RUN <<EOF
# Install opencode
npm install -g opencode-ai
# Set up our directories to be mountable from the outside
mkdir -p /work
mkdir -p /tools
mkdir -p /root/.config/opencode
# Now you need to login manually with opencode :-/
# opencode auth login
EOF
# Add claude to the search path
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.local/bin"
ENTRYPOINT ["bash"]
CMD ["-i"]
launched as
podman run --rm -it -v /home/corion/agents/claude/mailagent-meeting-setup:/work -v /home/corion/agents/opencode/.opencode:/root/.opencode -e IS_SANDBOX=1 -e FORCE_COLOR=0 opencode-runner:latest