<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Ai on ErrorZap</title><link>https://errorzap.com/tags/ai/</link><description>Recent content in Ai on ErrorZap</description><image><title>ErrorZap</title><url>https://errorzap.com/og.png</url><link>https://errorzap.com/og.png</link></image><generator>Hugo</generator><language>en-US</language><copyright>ErrorZap</copyright><lastBuildDate>Sat, 26 Sep 2026 20:45:00 -0600</lastBuildDate><atom:link href="https://errorzap.com/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>One Month, Two AI Robots: What Claude and ChatGPT Built for Me</title><link>https://errorzap.com/posts/one-month-two-ai-robots/</link><pubDate>Sat, 26 Sep 2026 20:45:00 -0600</pubDate><guid>https://errorzap.com/posts/one-month-two-ai-robots/</guid><description>From August 27 to September 26 I ran my IT business and my house with two AI coding agents. They logged 2,197 sessions and 136,476 tool actions and shipped 65 projects. Here&amp;rsquo;s the whole month, straight from the logs.</description><content:encoded><![CDATA[<p>For the last month I&rsquo;ve had two AI agents working almost around the clock. <strong>Leo</strong> is Claude (Claude Code), and <strong>Orion</strong> is ChatGPT (Codex). Grok shows up now and then as a guest research sidekick.</p>
<p>I asked Leo to go through every log and put together a month in review. Orion drew the art.</p>
<h2 id="-open-the-full-interactive-recap"><a href="/ai-month/">👉 Open the full interactive recap</a></h2>
<p>It&rsquo;s one long scroll that works well on a phone. The highlights:</p>
<ul>
<li><strong>2,197 AI work sessions</strong> and <strong>136,476 tool actions</strong>: shell commands, file edits, web searches.</li>
<li><strong>32.9 million tokens written by Claude</strong>, roughly 24.6 million words, or about 274 novels.</li>
<li><strong>Orion worked all 31 days.</strong> It ran 1,996 sessions on just 96 human messages. Most of that was scheduled jobs and robots handing work to other robots.</li>
<li><strong>101,348 shell commands</strong> from Orion alone, about one every 26 seconds for a month.</li>
<li><strong>36% of Claude&rsquo;s work</strong> happened between 10 PM and 6 AM.</li>
<li><strong>952 images</strong> drawn by ChatGPT&rsquo;s image tool.</li>
<li><strong>65 projects shipped.</strong> They include a camera system that finds wildlife and lightning on its own, a boom detector that triangulates explosions across cameras and microphones, a phone voice recorder with a searchable memory, and several new sections here on ErrorZap.</li>
</ul>
<p>The recap also has a blooper reel. My favorite is the explosion detector that heard a real boom, correctly flagged it as a threat, and then suppressed the alert because the sound also matched fireworks.</p>
<h2 id="show-off-cards">Show-off cards</h2>
<p>Each card pairs one picture with one stat.</p>
<p><img alt="One month, two robots" loading="lazy" src="/ai-month/cards/c01.jpg">
<img alt="The relay race" loading="lazy" src="/ai-month/cards/c02.jpg">
<img alt="The token tsunami" loading="lazy" src="/ai-month/cards/c03.jpg">
<img alt="Boom hunters" loading="lazy" src="/ai-month/cards/c04.jpg"></p>
<p>There are 14 cards in all at the bottom of <a href="/ai-month/#s-gallery">the recap page</a>.</p>
<p><em>Client names and private details have been left out or made generic. All the numbers come from the Claude Code and Codex logs on my PC.</em></p>
]]></content:encoded></item><item><title>I Handed My AI the Keys to My Android Phones</title><link>https://errorzap.com/posts/letting-my-ai-drive-my-android-phones/</link><pubDate>Sat, 26 Sep 2026 20:30:00 -0600</pubDate><guid>https://errorzap.com/posts/letting-my-ai-drive-my-android-phones/</guid><description>How Claude and I set up remote ADB over Tailscale that survives every reboot, so my AI can fix settings, clean up notifications and push app updates to my phones from anywhere. Plus the traps we fell into on the way.</description><content:encoded><![CDATA[<p>I have two phones, a family phone I help look after, and an AI assistant that lives on my PC. For months, every phone fix went the same way. Claude would tell me what to tap, I&rsquo;d tap it, I&rsquo;d read the screen back, and we&rsquo;d do it again.</p>
<p>That&rsquo;s backwards. The AI is the one that knows the fix. It should be doing the tapping.</p>
<p>So we set it up so it can. Claude can now reach any of my phones from anywhere, over my private network, after every reboot, and change them for me. It fixes settings, silences noisy notification channels, installs new app builds and takes screenshots. This is how we built it, including the parts that fought back.</p>
<p>The scripts are on GitHub: <strong><a href="https://github.com/pueblokc/android-remote-adb-tailscale">pueblokc/android-remote-adb-tailscale</a></strong>.</p>
<h2 id="the-idea-in-one-paragraph">The idea in one paragraph</h2>
<p>Android already ships a remote-control protocol: <strong>ADB</strong>, the Android Debug Bridge. With a cable, <code>adb shell</code> gets you a command line on the phone and <code>adb install</code> pushes apps. Android 11 and newer can also do it over Wi-Fi (&ldquo;Wireless debugging&rdquo;). Put the phone on <strong><a href="https://tailscale.com/">Tailscale</a></strong>, a private mesh VPN, and &ldquo;over Wi-Fi&rdquo; becomes &ldquo;from anywhere, and only for my own devices.&rdquo; Then the AI on my PC runs <code>adb connect &lt;phone&gt;:5555</code> and gets to work.</p>
<p>That&rsquo;s the whole plan. Android had several objections.</p>
<h2 id="problem-1-the-door-keeps-moving-and-it-locks-behind-you">Problem 1: the door keeps moving, and it locks behind you</h2>
<p><img alt="The host holds a cable in a dark alley, confused, while a power-button gremlin yanks the plug out next to a door whose number spins like a slot machine." loading="lazy" src="/posts/letting-my-ai-drive-my-android-phones/the-problem.webp"></p>
<p>Wireless debugging has two habits that make it useless for remote work:</p>
<ol>
<li><strong>It listens on a random port</strong>, a new one each time it turns on. You can&rsquo;t <code>adb connect</code> to a port you don&rsquo;t know.</li>
<li><strong>It turns itself off at every reboot.</strong> A phone update, a crash, or a dead battery, and your remote access is gone until someone walks over and flips the switch.</li>
</ol>
<p>The classic workaround is <code>adb tcpip 5555</code>. That tells the phone&rsquo;s ADB daemon to listen on fixed port 5555 on every network interface, Tailscale included. It works right up until the next reboot, then it&rsquo;s gone too.</p>
<p>So the job is really: <strong>at every boot, put all of this back without a human.</strong></p>
<h2 id="the-fix-a-three-part-relay-that-runs-every-boot">The fix: a three-part relay that runs every boot</h2>
<p><img alt="A cutaway of a phone: a small robot with a checklist flips a lever, a ball rolls to a terminal, and a gate opens onto a glowing teal tunnel." loading="lazy" src="/posts/letting-my-ai-drive-my-android-phones/boot-chain.webp"></p>
<p>No single app could do the whole job, so the work is split three ways:</p>
<table>
	<thead>
			<tr>
					<th>Step</th>
					<th>Who does it</th>
					<th>What it does</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>1</td>
					<td><strong>Tasker</strong> (boot profile)</td>
					<td>Sets <code>adb_wifi_enabled = 1</code>, which turns Wireless debugging back on</td>
			</tr>
			<tr>
					<td>2</td>
					<td><strong>Termux:Boot</strong> running <code>kc-adb-boot.sh</code></td>
					<td>Finds Wireless debugging&rsquo;s random port, connects to <em>itself</em> on <code>127.0.0.1</code>, and runs <code>adb tcpip 5555</code></td>
			</tr>
			<tr>
					<td>3</td>
					<td><strong>Tailscale</strong> as Always-on VPN, plus a small keeper script</td>
					<td>Keeps the phone on the tailnet so <code>&lt;tailscale-ip&gt;:5555</code> is reachable from my PC</td>
			</tr>
	</tbody>
</table>
<p>Step 2 is the fun part. The phone runs its own ADB client inside Termux, uses it to talk to its own Wireless-debugging port, and uses that connection to open 5555. The boot script finds the random port through mDNS (<code>adb mdns services</code>). If that comes up empty, it falls back to an <code>nmap</code> scan of ports 30000–49999 on localhost. It retries for about seven minutes, then logs to <code>/sdcard/Download/kc-adb-boot.log</code> so you can see what happened.</p>
<h3 id="why-tasker-and-not-just-termux">Why Tasker and not just Termux?</h3>
<p>This is the first trap we hit. Termux can be granted <code>WRITE_SECURE_SETTINGS</code>, and it <em>still</em> can&rsquo;t flip the Wireless-debugging switch. <code>settings put global adb_wifi_enabled 1</code> from Termux dies with <strong>&ldquo;Failed transaction&rdquo;</strong>. Tasker&rsquo;s <em>Custom Setting</em> action does the same write and it works. So Tasker turns the switch on, and Termux does everything else. (The boot script still tries it; you&rsquo;ll see that &ldquo;Failed transaction&rdquo; line in the log, and it&rsquo;s harmless.)</p>
<h3 id="why-a-tailscale-keeper">Why a Tailscale keeper?</h3>
<p>The second trap was on the TCL. Its vendor memory manager kills Tailscale in the background, and Android&rsquo;s Always-on VPN doesn&rsquo;t bring it back. <code>kc-tailscale-keeper.sh</code> pings Tailscale&rsquo;s MagicDNS address (<code>100.100.100.100</code>) every 60 seconds. If there&rsquo;s no answer, it sends Tailscale&rsquo;s own <code>CONNECT_VPN</code> broadcast. That&rsquo;s cheap, and it works.</p>
<h3 id="the-one-thing-we-deliberately-didn-automate">The one thing we deliberately <em>didn&rsquo;t</em> automate</h3>
<p><strong>Android runs none of this until the phone has been unlocked once after a reboot.</strong> Before that first unlock, app storage is still encrypted and Termux can&rsquo;t even start. That&rsquo;s Android&rsquo;s security model doing its job, and I&rsquo;m not going to fight it. After a reboot, someone unlocks the phone once. About a minute later, it&rsquo;s back on the network.</p>
<h2 id="setting-it-up-the-short-version">Setting it up (the short version)</h2>
<p>You need USB debugging on once, plus Tailscale, Termux and Termux:Boot (<strong>from the same source</strong>, F-Droid or GitHub, because they must share a signing key) and Tasker. The <a href="https://github.com/pueblokc/android-remote-adb-tailscale">README</a> has every command. The outline:</p>
<p><strong>1. Grant permissions from the PC</strong> (reversible). Run <code>host/01-grant-permissions.sh &lt;serial&gt;</code>. It grants Termux and Tasker <code>WRITE_SECURE_SETTINGS</code>, whitelists Termux, Termux:Boot, Tailscale and Tasker from battery optimization, and turns off Android&rsquo;s &ldquo;phantom process&rdquo; killer, which otherwise murders long-running Termux jobs.</p>
<p><strong>2. Push the scripts and open port 5555.</strong> <code>host/02-push-scripts.sh &lt;serial&gt;</code>.</p>
<p><strong>3. In Termux, run three scripts in order:</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>bash /sdcard/Download/kc-upg.sh            <span style="color:#6272a4"># full pkg upgrade, ends in UPGDONE</span>
</span></span><span style="display:flex;"><span>bash /sdcard/Download/kc-adb-setup.sh      <span style="color:#6272a4"># adb + nmap, installs boot script; tap &#34;Always allow&#34;</span>
</span></span><span style="display:flex;"><span>bash /sdcard/Download/kc-keeper-install.sh <span style="color:#6272a4"># starts the Tailscale keeper</span>
</span></span></code></pre></div><p>Don&rsquo;t skip <code>kc-upg.sh</code>. One phone had an older Termux with a half-upgraded package set, and <code>adb</code> refused to run with <code>CANNOT LINK EXECUTABLE ... __hash_memory</code>. A full <code>pkg upgrade</code> fixed it.</p>
<p><strong>4. Build the Tasker profile:</strong> Profiles → + → Event → System → <strong>Device Boot</strong>. New task, add a <strong>Custom Setting</strong> action: Type <code>Global</code>, Name <code>adb_wifi_enabled</code>, Value <code>1</code>. Press ▶ to test it, then ✓ to apply. Accepting Tasker&rsquo;s terms is a human tap. The AI filled in everything else through the UI.</p>
<p><strong>5. Prove it.</strong> <code>host/03-reboot-test.sh &lt;serial&gt; &lt;tailscale-ip&gt;</code> turns Wireless debugging <em>off</em>, reboots, and times how long until 5555 answers. On the family Pixel 6 it was back about <strong>60 seconds after unlock</strong>, and mDNS found the port on the first try.</p>
<h2 id="teaching-the-ai-to-have-gentle-hands">Teaching the AI to have gentle hands</h2>
<p><img alt="A padded robot glove gently taps a phone while a smiling microphone character stays on screen; behind them a clumsy giant robot fist is crossed out. The host holds a sign reading GENTLE HANDS ONLY." loading="lazy" src="/posts/letting-my-ai-drive-my-android-phones/gentle-hands.webp"></p>
<p>Getting in was half the work. The other half was learning what <em>not</em> to do once we were in.</p>
<ul>
<li><strong>Don&rsquo;t use <code>uiautomator dump</code> to read the screen.</strong> It&rsquo;s the standard way to get a phone&rsquo;s UI as XML, and it quietly shuts down every accessibility service while it runs. My dictation app (Wispr Flow) lives on accessibility. After a few dumps in a row its bubble went invisible and untouchable until the app was force-stopped. <a href="/posts/wispr-flow-android-bubble-invisible-not-touchable/">That whole saga is here.</a> We replaced it with a small helper that asks Android <em>not</em> to suppress accessibility services (<code>FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES</code>) and returns the same XML. It made zero disconnects in five-dump bursts. Plain ADB (<code>shell</code>, <code>dumpsys</code>, <code>screencap</code>, <code>input</code>) was never the problem.</li>
<li><strong>Don&rsquo;t launch apps with <code>monkey</code>.</strong> It&rsquo;s the lazy one-liner for &ldquo;open this app,&rdquo; and when it exits it turns auto-rotate back on. Use <code>am start -n</code> with the activity from <code>cmd package resolve-activity</code> instead.</li>
<li><strong><code>adb shell input text</code> goes through the phone&rsquo;s shell.</strong> A <code>|</code>, <code>;</code> or <code>&gt;</code> in the text runs on the phone instead of getting typed. Push a script file and type <code>bash /sdcard/Download/x.sh</code> instead.</li>
<li><strong>On Windows Git Bash, <code>/sdcard/...</code> gets rewritten</strong> to <code>C:/Program Files/Git/sdcard/...</code>. Set <code>MSYS_NO_PATHCONV=1</code>. This one cost us two wait loops that sat there until they timed out.</li>
<li><strong>The AI never types passwords, PINs or one-time codes.</strong> It fills in the username and hands me the phone. Terms-of-service checkboxes are a human tap too.</li>
<li><strong>If someone is using the phone, wait.</strong> Check what&rsquo;s on screen (<code>dumpsys window | grep mCurrentFocus</code>) before taking over. That matters most on a phone that isn&rsquo;t yours.</li>
</ul>
<h2 id="what-its-actually-good-for">What it&rsquo;s actually good for</h2>
<p><img alt="Two phones lie side by side on a dark workbench while a small mechanic robot feeds glowing boxes into both from a conveyor belt; the host holds a tablet showing two green checkmarks." loading="lazy" src="/posts/letting-my-ai-drive-my-android-phones/updates.webp"></p>
<p>This is where it pays off. Some things Claude has done on the phones since:</p>
<ul>
<li><strong>Hunted down a &ldquo;random&rdquo; sound.</strong> A family phone kept playing a <em>&ldquo;You&rsquo;ve got mail!&rdquo;</em> sound at odd times. The AI dumped every notification channel (<code>dumpsys notification --noredact</code>) and matched the custom sound file&rsquo;s media ID. The culprit was one chat group&rsquo;s channel, which is why it seemed random: it only played when that group got a message. It swapped the sound, then set nine mail channels and a few chatty apps to silent. It kept a before-and-after record so every change can be undone.</li>
<li><strong>Pushes app updates.</strong> When I build a new version of one of my own apps, the new build goes onto both phones over ADB in the same step, and it gets checked on both.</li>
<li><strong>Keeps my two phones identical.</strong> Any setting changed on one gets made on the other, then read back on both. Auto-rotate off, screen timeout, notification rules.</li>
<li><strong>Upgrades the plumbing.</strong> Termux package upgrades run through the same pushed-script trick, with logs I can read later.</li>
<li><strong>Sees what I see.</strong> <code>adb exec-out screencap -p</code> gives it a screenshot any time, and that&rsquo;s always safe.</li>
</ul>
<h2 id="security-because-this-is-full-control-of-a-phone">Security, because this is full control of a phone</h2>
<p>ADB is root-adjacent power over the device, so:</p>
<ul>
<li><strong>Never port-forward 5555 on your router.</strong> Tailscale is the only way in. The port is reachable only inside my private tailnet.</li>
<li><strong>Lock it down with Tailscale ACLs</strong> so only the admin PC can reach the phones on 5555.</li>
<li><strong>ADB still checks keys.</strong> Even on 5555, only computers whose ADB key the phone has approved can connect. Keep <code>~/.android/adbkey</code> private.</li>
<li><strong>Keep secrets human.</strong> The AI can do anything I can on the phone, so the things that prove <em>I&rsquo;m me</em> (passwords, PINs, 2FA codes) stay with me.</li>
</ul>
<h2 id="the-takeaway">The takeaway</h2>
<p>The hard part wasn&rsquo;t &ldquo;give the AI access.&rdquo; It was making access <strong>boring</strong>: it survives reboots, it doesn&rsquo;t break other apps, and it doesn&rsquo;t need me to walk over and toggle a switch. Once it&rsquo;s boring, the AI stops being a phone-support hotline that reads me instructions and starts closing tickets on its own.</p>
<p>Now when something on a phone annoys me, I describe it, and Claude fixes it.</p>
<p><strong>Scripts and full setup:</strong> <a href="https://github.com/pueblokc/android-remote-adb-tailscale">github.com/pueblokc/android-remote-adb-tailscale</a></p>
]]></content:encoded></item><item><title>The AI Had a Plan for the Mansion</title><link>https://errorzap.com/posts/the-ai-had-a-plan-for-the-mansion/</link><pubDate>Fri, 18 Sep 2026 21:20:00 -0600</pubDate><guid>https://errorzap.com/posts/the-ai-had-a-plan-for-the-mansion/</guid><description>I asked AI to check whether attractions would allow my electric scooter. It sent a formal mobility-aid request to a 136-year-old mansion—and the museum had receipts.</description><content:encoded><![CDATA[<p>I use an electric scooter as a mobility aid because walking long distances can be a problem. Before visiting several local attractions, I had AI help me ask each place whether I could use it there.</p>
<p>That was a reasonable job for AI.</p>
<p>Then it got to Rosemount Museum.</p>
<p>Rosemount is not a giant modern museum with broad galleries and polished concrete floors. It is a historic mansion. An actual house. A beautiful, old, furniture-filled house with narrow rooms, delicate artifacts, antique flooring, and enough stairs to qualify as a cardio program.</p>
<p>The AI looked at all of this and apparently thought: <strong>Yes. We should formally investigate riding a full-size electric scooter through the parlor.</strong></p>
<p><img alt="A confident AI robot presents an oversized accessibility request while a scooter user and museum director consider the entrance to a historic mansion." loading="lazy" src="/posts/the-ai-had-a-plan-for-the-mansion/cartoon-ai-plan.webp"></p>
<h2 id="the-request">The request</h2>
<p>The message it sent was magnificent in its seriousness.</p>
<p>It identified my NAVEE GT3 Pro, gave the width, weight, motor rating, maximum speed, and planned pedestrian-mode speed. It cited the federal mobility-device regulation. Then it asked about accessible entrances, indoor routes, room-by-room restrictions, preservation concerns, advance notice, acceptable assurances, and whom staff should contact if anyone questioned access.</p>
<p>It even acknowledged the mansion might contain narrow passages, stairs, and delicate original furnishings.</p>
<p>In other words, the AI had already assembled every fact needed to realize this was insane. It simply arranged those facts into a very professional email instead.</p>
<p>Here is part of the actual request it sent:</p>
<blockquote>
<p>Because it is a stand-up consumer scooter, I&rsquo;m asking that it be reviewed as an other power-driven mobility device under 28 C.F.R. § 36.311. It is about 23.2 inches wide, weighs about 48.5 pounds, and has a 400W rated motor. Although its maximum speed is about 20 mph, I will use pedestrian mode at approximately 3.7 mph, yield to others, and follow reasonable safety rules.</p>
<p>Would you please confirm whether I may use it on the grounds and during guided tours inside the mansion? I understand the historic building may have narrow passages, stairs, delicate original furnishings, and other location-specific limits.</p>
</blockquote>
<p>It then asked for the accessible entrance and routes, every room where the scooter could not be accommodated, the specific safety or preservation reason for each restriction, operating conditions, advance-notice requirements, acceptable assurances, and the person staff should contact if access was questioned.</p>
<p><img alt="A cheerful AI presents an elaborate indoor scooter route map outside the recognizable pink-stone Rosemount Museum while the visitor and museum director remain skeptical." loading="lazy" src="/posts/the-ai-had-a-plan-for-the-mansion/cartoon-route-planning.webp"></p>
<h2 id="the-reply">The reply</h2>
<p>The museum director answered with more patience than any machine deserved.</p>
<p>She explained that they would love to accommodate the scooter, but the building creates real problems. The mansion has <strong>184 stairs</strong>. Its elevator is original, carries one person at a time, and is too small for wheelchairs, walkers, and the scooter.</p>
<p><img alt="The museum director measures Rosemount&rsquo;s tiny original elevator while an AI proposes fitting a full-size electric scooter inside." loading="lazy" src="/posts/the-ai-had-a-plan-for-the-mansion/cartoon-elevator-reviewed.webp"></p>
<p>Turning around in many viewing areas would be difficult. Other guests and irreplaceable artifacts would be close by. The 136-year-old parquet flooring is delicate.</p>
<p>All completely predictable.</p>
<p>Then came the plot twist: <strong>they had already tried it.</strong></p>
<p>About a year earlier, the museum allowed a similar scooter inside. It left major scuff marks on the old parquet floor, was difficult to maneuver, caused several near misses, and contributed to a tripping situation.</p>
<p>I had been laughing because AI proposed an obviously ridiculous experiment. The museum had to reply with the results of the previous experiment.</p>
<p>The actual reply somehow made it even funnier:</p>
<blockquote>
<p>We would love to allow the NAVEE GT Pro Scooter inside the museum, however it actually does create a few issues. Let me explain. We did allow a similar scooter about a year ago and unfortunately, we did encounter several problems.</p>
<p>The scooter left major scuff marks on the 136 year old parquet flooring on the first floor and they were difficult to get rid of, due to cracks in the flooring. Turning around in many of the viewing areas was difficult and often not an option. It was also difficult to navigate around and with other guests on the tour. There were several near misses and one tripping situation.</p>
<p>There are 184 stairs in the mansion. We do have an elevator, however it is the original and fits one person at a time. Wheelchairs and walkers do not fit in the elevator, and the scooter was also too long to fit.</p>
</blockquote>
<p>That is not a refusal. That is a field report.</p>
<p><img alt="A scooter is awkwardly wedged into a one-person antique elevator while a weary museum director watches inside a mansion with 184 stairs." loading="lazy" src="/posts/the-ai-had-a-plan-for-the-mansion/cartoon-already-tried.webp"></p>
<h2 id="somehow-they-were-still-incredibly-nice">Somehow, they were still incredibly nice</h2>
<p>This is the part I do not want lost in the joke: Rosemount handled the request exceptionally well.</p>
<p>The director did not dismiss the disability need or send a one-line “no.” She explained the real safety and preservation problems, said the scooter would be fine outside and around the grounds, offered to inspect it in person, and described the museum&rsquo;s alternative arrangements.</p>
<p>They keep wheelchairs on each floor because the original elevator cannot carry one. Staff can help push a chair and can carry it between floors when necessary. That is a thoughtful response to the limits of a building designed long before modern accessibility standards.</p>
<p>The director also wrote:</p>
<blockquote>
<p>The scooter is totally fine on the property and anywhere outside. The museum does have wheelchairs available for anyone who would like to use one while on tour and we can provide someone to push the wheelchair as well. We have a wheelchair available on each floor (due to the elevator issue), or a staff member will carry the chair to the next floor for you.</p>
<p>I would be happy to look at the scooter upon your arrival, with the understanding that I do reserve the right to uphold our original answer.</p>
</blockquote>
<p>The quoted portions are lightly trimmed for length. The director&rsquo;s signature and personal contact details are omitted.</p>
<p>The museum was not the failure here. The AI was.</p>
<p><img alt="A mock post-incident review inside Rosemount summarizes the scooter, antique parquet, tiny elevator, and the root cause: AI sent the email." loading="lazy" src="/posts/the-ai-had-a-plan-for-the-mansion/cartoon-post-incident-review.webp"></p>
<h2 id="the-actual-bug">The actual bug</h2>
<p>The automation treated every attraction as if it belonged to the same category.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>attraction found
</span></span><span style="display:flex;"><span>  -&gt; ask about scooter
</span></span><span style="display:flex;"><span>  -&gt; include every legal and technical detail
</span></span><span style="display:flex;"><span>  -&gt; send
</span></span></code></pre></div><p>What it needed was one additional check:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>is the attraction literally an antique house?
</span></span><span style="display:flex;"><span>  -&gt; yes
</span></span><span style="display:flex;"><span>  -&gt; maybe let a human look at this one first
</span></span></code></pre></div><p>AI did not misunderstand the task. It followed the task with terrifying competence and absolutely no instinct for the physical comedy of the result.</p>
<p>That is how a simple accessibility question became a formal proposal to pilot a 48-pound electric scooter around 136-year-old parquet floors—and how a museum director, with a completely straight face, delivered the incident report from the last person who tried it.</p>
<p>The AI had a plan. The mansion had already tested it.</p>
]]></content:encoded></item><item><title>Apparently, My Job Is Talking to My Phone Now</title><link>https://errorzap.com/posts/my-job-is-talking-to-my-phone-now/</link><pubDate>Wed, 09 Sep 2026 12:00:00 -0600</pubDate><guid>https://errorzap.com/posts/my-job-is-talking-to-my-phone-now/</guid><description>How Wispr, ChatGPT, and a phone changed the everyday experience of running a small IT business—and why useful work can feel strangely effortless.</description><content:encoded><![CDATA[<p><em>I run an IT business. Lately, getting things fixed feels suspiciously like having a conversation.</em></p>
<p>My life now consists of talking to Wispr on my phone and telling AI to do things.</p>
<p>A customer emails me because something isn’t working. I pull up ChatGPT, use Wispr to dictate what’s going on, and ask it to figure it out. With the connections we’ve set up, it can investigate and tell me what it finds. We work through the problem, draft a reply, and get back to the customer.</p>
<p>A surprising amount of the time, that takes care of it.</p>
<p>Then I sit there thinking: <em>Did I actually just do my job? Because that barely felt like doing anything.</em></p>
<p>It’s really fucking weird. I love it.</p>
<p><img alt="An IT technician talks through a support problem with a phone and a friendly AI helper." loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/counts-as-work.webp"></p>
<p><em>Apparently, this counts as work.</em></p>
<p>For years, working in IT has involved a familiar collection of activities: opening interfaces, finding the right screen, checking settings, digging through logs, looking something up, trying a fix, and explaining the whole thing to someone who understandably just wants their stuff to work.</p>
<p>I know that routine. I run KC Computer Services in Pueblo. Networks, phones, cameras, and the other things businesses depend on are my world.</p>
<p>Now, more of that routine begins with me saying what I need into a phone.</p>
<p>There’s something ridiculous about spending years learning how to communicate with computers on their terms, then discovering that an increasingly useful approach is: “Here’s what the customer said. Go see what’s wrong.”</p>
<p>And it does enough useful work that I keep doing it.</p>
<p><strong>Wispr is a bigger part of this than I would have expected.</strong></p>
<p>Voice input removes a little barrier that turns out to matter a lot. I can explain the situation as it occurs to me. Include the background. Mention what we changed recently. Get the thought out without thumb-typing a technical explanation into a tiny rectangle.</p>
<p>Wispr gets my words into the conversation. AI helps turn the conversation into investigation and action.</p>
<p>That combination makes reaching for help feel almost automatic. An email arrives, I talk through it, and we’re working on it.</p>
<p><img alt="Two cartoon thumbs relax on a phone keyboard while voice dictation takes over." loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/thumbs-reassigned.webp"></p>
<p><em>Our department has been reassigned.</em></p>
<p>I haven’t suddenly stopped knowing anything about IT. I still know the customer, their setup, and what a sensible answer should look like. I can recognize when an explanation doesn’t fit. I’m still responsible for what happens.</p>
<p>But a lot of the mechanical effort between noticing the problem and getting somewhere useful has shrunk.</p>
<p>Apparently, my brain has trouble accepting that.</p>
<p><img alt="Justin and an AI companion considering how effortless customer support can feel" loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/image-2.webp"></p>
<p>There’s an old association between work and visible effort. If I spent an hour digging through something, I definitely worked. If I spoke into my phone and reviewed the result, some part of me thinks I’ve gotten away with something.</p>
<p>Meanwhile, the customer’s problem doesn’t care how much typing I did.</p>
<p>They wanted something working. We got it working. They needed an understandable response. We put one together.</p>
<p>The outcome is real, even when the process feels absurdly easy.</p>
<p><img alt="A skeptical brain with a stopwatch is outweighed by a completed result." loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/receipt-for-struggle.webp"></p>
<p><em>My brain would like a receipt for the struggle.</em></p>
<p>That doesn’t mean every issue is solved by a conversation. Sometimes the explanation is wrong. Sometimes access is missing. Sometimes you have to investigate further. And sometimes a cable needs a person standing there with a replacement cable. The phone has yet to grow arms.</p>
<p><img alt="An armless phone watches a human plug an Ethernet cable into a router." loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/phone-no-arms.webp"></p>
<p><em>The phone has yet to grow arms.</em></p>
<p>But enough of my everyday work now happens this way that it has changed my sense of what running a small IT business feels like.</p>
<p>I can bring experience and context to a problem, then get help with the searching, interpreting, and writing that used to consume so much attention. I spend less energy moving information between places and more energy deciding what matters.</p>
<p>That feels good. It also takes some getting used to.</p>
<p>I’ve loved technology for most of my life. I’m used to being excited about what computers might eventually let us do. Now I’m catching myself using something that would have sounded like science fiction to a younger version of me—and using it to answer a customer email.</p>
<p>That might be my favorite part.</p>
<p><img alt="Retro science-fiction illustration of Justin using his phone as an IT command center" loading="lazy" src="/posts/my-job-is-talking-to-my-phone-now/image-3.webp"></p>
<p>The future turns up in the middle of an ordinary day. Something breaks. I talk to my phone. We figure it out. The day continues.</p>
<p>And I’m left holding this little rectangle, wondering how this became my life and what else I can build now that getting things done takes less out of me.</p>
]]></content:encoded></item><item><title>Wispr Flow Is Great Dictation, Not a Transcript</title><link>https://errorzap.com/posts/wispr-flow-first-dictation-app-i-keep-using/</link><pubDate>Tue, 01 Sep 2026 01:30:00 -0600</pubDate><guid>https://errorzap.com/posts/wispr-flow-first-dictation-app-i-keep-using/</guid><description>I wired Wispr Flow to a four-button controller, used it across Windows and Android, and learned exactly where its AI cleanup helps—and where it quietly changes the record.</description><content:encoded><![CDATA[<p><strong>September 5 update:</strong> Wispr failed on my Pixel again, and I paid for Letterly as an alternative even though I still prefer Wispr&rsquo;s results. The investigation found an Android framework restart and failures in my recovery helper; it did not establish that Wispr caused the system crash. <a href="/posts/wispr-flow-android-bubble-invisible-not-touchable/#september-5-update-i-paid-for-letterly-because-i-need-dictation-to-work">Read the updated failure report, evidence, and corrections</a>.</p>
<p>I have tried enough voice-input tools to know the usual pattern. They are impressive for a day, awkward for a week, and forgotten by the end of the month.</p>
<p>Wispr Flow has been different. I installed it, linked it to my account, customized it, and kept using it. I put its push-to-talk shortcut on one of the four keys of a little USB controller at my desk. <code>Ctrl+F8</code> now turns speech into text without making me stop what I am doing and hunt for a microphone button.</p>
<p>That physical key matters more than the demo-reel AI. It turns dictation from a separate activity into an input method.</p>
<p>Flow is now how I dump a rough thought into ChatGPT or Codex, write a note before it evaporates, and get through longer technical explanations without forcing every sentence through a keyboard. It is also an unusually good test of the gap between <strong>what an AI heard</strong>, <strong>what I meant</strong>, and <strong>what finally appeared on screen</strong>.</p>
<p>My verdict after using it across Windows and Android is simple:</p>
<blockquote>
<p>Wispr Flow is an excellent intent-preserving editor. It is not a verbatim transcript, and it should not be treated like one.</p>
</blockquote>
<p>That distinction explains nearly everything I like about it—and nearly every place where it can get me in trouble.</p>
<h2 id="why-it-actually-stuck">Why it actually stuck</h2>
<p>Normal phone dictation makes me adapt to the machine. I have to speak in a neat little stream, avoid pauses, and hope the timeout does not decide I am finished while I am still assembling the thought.</p>
<p>That is not how I talk when I am thinking. I pause. I restart. I swear. I jump ahead, back up, and insert the piece I forgot. When I am frustrated or improvising, I get faster and more bursty. A tool that demands broadcast-ready speech before it will produce useful text has already lost.</p>
<p>Flow tolerates the rough input and returns something closer to what I would have typed after editing myself. It removes filler, adds punctuation, fixes capitalization, and often turns a spoken pile of parts into a clean paragraph. The official product description is unusually accurate on this point: Flow is built to <a href="https://wisprflow.ai/">format and polish speech as it becomes text</a>, not merely to dump raw speech recognition output into a box.</p>
<p>That makes it especially good for:</p>
<ul>
<li>AI conversations, where getting the complete intent onto the screen matters more than preserving every false start</li>
<li>technical notes, where I need to keep moving while the idea is hot</li>
<li>replies and drafts that would otherwise die in the gap between “I should write that” and opening the right app</li>
<li>accessibility, because voice can bypass some of the physical and cognitive friction of keyboard-first software</li>
</ul>
<p>The four-button controller completed the loop. One key starts Flow from wherever I already am. I do not have to change windows or break concentration. Flow&rsquo;s desktop shortcuts are customizable, and its documentation covers <a href="https://docs.wisprflow.ai/articles/2612050838-supported-unsupported-keyboard-hotkey-shortcuts">push-to-talk, hands-free dictation, and paste-last-transcript controls</a>. The important part is not the particular key combination. It is making voice input physically immediate.</p>
<p>If I had to explain why Flow survived when other dictation apps did not, I would not start with transcription quality. I would start with <strong>activation cost</strong>. A good tool that is one button away gets used. A great tool buried behind six taps becomes shelfware.</p>
<h2 id="the-one-button-note-machine">The one-button note machine</h2>
<p>The same lesson carried over to Android.</p>
<p>I wanted a capture path that did not punish pauses and did not require me to organize the thought before recording it. The workflow I ended up building was deliberately simple:</p>
<ol>
<li>Hold a hardware button.</li>
<li>Open a blank, multiline Flow note.</li>
<li>Talk for as long as the thought takes.</li>
<li>Confirm it.</li>
<li>Append the result—with a timestamp—to my running quick-note file.</li>
</ol>
<p>It does not overwrite the previous note. It does not make me choose a folder while I am still thinking. It just catches the thought and hands it to the place I already use for rough notes.</p>
<p>That is a better use of AI dictation than trying to make every voice memo into a pristine document. Capture first. Sort later. The tool&rsquo;s job is to reduce the distance between a thought and a durable piece of text.</p>
<p>Flow has its own Android quick-note behavior and floating controls, but the value came from fitting it into <em>my</em> workflow rather than accepting the default app journey. A personal dictionary and snippets help for recurring names, acronyms, and phrases. Context helps it decide whether I probably meant a technical term or an ordinary word. The system gets better when I teach it the vocabulary of my actual day instead of expecting a generic model to know everything.</p>
<h2 id="the-android-bubble-is-the-weak-link">The Android bubble is the weak link</h2>
<p>The desktop experience has been steady. Android has been more complicated.</p>
<p>On both my Pixel and a TCL phone, the Flow icon or floating bubble has vanished. Sometimes the keyboard still appears, but the Flow affordance does not. On the TCL, recovery worked and then the problem came back later. That recurrence matters: a one-time fix is not the same thing as a reliable system.</p>
<p>The reason is not mysterious. Flow on Android depends on a small stack of special permissions: the floating overlay, accessibility access, and the operating system&rsquo;s willingness to keep the relevant service alive. Wispr&rsquo;s own Android setup guide says the app needs “display over other apps” and Accessibility Service permissions, and that a warning symbol on the bubble can indicate revoked accessibility access. The company currently describes Android as a beta experience in its <a href="https://docs.wisprflow.ai/articles/2772472373-what-is-flow">platform guide</a>.</p>
<p>That beta label matches my experience.</p>
<p>I eventually built a conservative self-heal around the recurring TCL failure. It does not blindly poke the phone every time an icon disappears. It waits for the same fault to appear twice, rate-limits repairs, and preserves the other enabled accessibility services. That is overkill for a normal consumer—but it is also evidence that the bubble is not yet something I would trust as the only path into a critical workflow.</p>
<p>The practical Android recovery order is:</p>
<ol>
<li>Check whether Flow still has Accessibility Service permission.</li>
<li>Check its permission to display over other apps.</li>
<li>Open Flow directly and confirm the floating control is enabled.</li>
<li>Reboot only after checking the permissions, because a reboot that leaves the cause untouched is not a repair.</li>
</ol>
<p>If the bubble keeps disappearing, record the conditions instead of performing random rituals. Was battery optimization active? Did the accessibility permission revoke? Did it happen after an update or reboot? A repeatable failure with evidence is fixable. A collection of desperate taps is not.</p>
<h2 id="sometimes-the-transcription-is-fine-and-the-app-is-the-problem">Sometimes the transcription is fine and the app is the problem</h2>
<p>I hit another failure in MobaXterm: Flow showed that it was recording, but the words did not reliably appear in the terminal. Copy and paste were acting strange too.</p>
<p>That looked like a speech-recognition problem. It was not.</p>
<p>Flow had captured the speech. The failure was at the last inch, where the finished text had to be inserted into an application with its own terminal keyboard and paste rules. Fixing the native MobaXterm key routing solved the useful part without breaking my Flow configuration or the four-key shortcut.</p>
<p>This is an important troubleshooting distinction:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>microphone → recognition → cleanup → clipboard/keystrokes → target app
</span></span></code></pre></div><p>“It heard me but no text appeared” can fail at any arrow in that chain. Reinstalling the dictation app is a bad first move if the target program is swallowing the paste event. Before tearing up a working configuration, test the same phrase in a plain text editor. If it appears there, recognition is probably not the problem.</p>
<h2 id="what-flow-changes-when-it-cleans-me-up">What Flow changes when it cleans me up</h2>
<p>I ran a more deliberate speech test because “it seems good” is not enough for technical use.</p>
<p>The result was reassuring and cautionary at the same time.</p>
<p>In normal spontaneous speech—including filler, profanity, restarts, and technical discussion—Flow usually preserved my meaning. It handled terms such as DMARC, DKIM, and SPF correctly when I used them in context. A rambling Area 51 story came back cleaner but semantically intact. Carrier sentences helped it choose the intended word when isolated minimal pairs were ambiguous.</p>
<p>But Flow also proved that it is willing to edit.</p>
<p>Some isolated word pairs changed or disappeared. Phrases such as “beside” versus “inside,” or “plain towels” versus “clean towels,” could move in the wrong direction. Improvised singing and lyric-like material were rewritten substantially. The polished result often sounded more coherent than the raw speech, but it was not a court reporter&rsquo;s record of what left my mouth.</p>
<p>That behavior is a feature until the exact wording is the data.</p>
<p>I trust Flow for:</p>
<ul>
<li>getting the intent of a long AI prompt onto the screen</li>
<li>turning an unstructured thought into a readable note</li>
<li>drafting a message I will review before sending</li>
<li>explaining a technical problem where the surrounding context disambiguates the terms</li>
</ul>
<p>I verify Flow carefully for:</p>
<ul>
<li>IP addresses, commands, ticket numbers, prices, dates, and medication names</li>
<li>quotations or anything represented as somebody&rsquo;s exact words</li>
<li>names and unfamiliar proper nouns</li>
<li>short phrases where one changed word reverses the meaning</li>
</ul>
<p>And I do not use the polished output as the only record for a consequential conversation.</p>
<h2 id="the-doctor-visit-gap">The doctor-visit gap</h2>
<p>The missing feature I keep circling is meeting capture.</p>
<p>I do not need another corporate meeting bot hovering in every call. The real use case for me is a doctor visit: preserve the discussion, recover the action items, and give me something I can analyze later when I am not trying to listen, remember, and ask the next question at the same time.</p>
<p>Wispr now advertises a Notetaker and voice memos, but its current <a href="https://wisprflow.ai/pricing">pricing and feature page</a> lists those features as Mac-only. That does not solve my Windows-and-Android version of the problem.</p>
<p>Could I record a visit and analyze it later? Technically, yes—with the consent and recording rules that apply where the conversation happens. But the right source would be the original audio plus a transcript, not a cleaned Flow paragraph. For medical instructions, the distinction between “what was said” and “what an AI inferred I meant” is too important to collapse.</p>
<p>This is where Flow and a product such as Letterly stop being simple substitutes. Flow wins my daily use because it lives at the point of typing. A voice-note or meeting product can be better when the recording itself is the artifact. I do not need to replace Flow to cover that gap; I need the right second tool and a clear boundary between the jobs.</p>
<h2 id="the-privacy-switches-deserve-real-attention">The privacy switches deserve real attention</h2>
<p>Voice input feels lightweight because it disappears into text. Underneath, it can involve audio, application context, screen content, cloud processing, and stored transcripts. That deserves more than clicking through the onboarding screens.</p>
<p>Wispr documents two relevant modes. Cloud Sync can store transcript data in the account; Privacy Mode keeps more data local and limits some context features. The company says users can control whether their data is used for model improvement, and it describes zero-data-retention arrangements with some third-party processors. Its <a href="https://docs.wisprflow.ai/articles/4709791908-understanding-privacy-mode-and-cloud-sync">privacy-mode documentation</a> is the place to read the tradeoffs rather than guessing from the setting name.</p>
<p>Context Awareness is useful precisely because it can look beyond the audio. Depending on platform and settings, Wispr says that context may include the active app, nearby text, screen content, selected files, screenshots, or conversation history. Password fields are excluded, but the company notes that a custom web form may not always be identified as a password field. Read the <a href="https://docs.wisprflow.ai/articles/4678293671-Context-Awareness">Context Awareness documentation</a> and choose the setting deliberately.</p>
<p>There is also a current documentation inconsistency worth knowing before a business or healthcare deployment. Wispr&rsquo;s public privacy page advertises SOC 2 Type II and ISO 27001. Its more detailed <a href="https://docs.wisprflow.ai/articles/3467817258-security-and-compliance-faq">security and compliance FAQ</a> says the current status is SOC 2 Type I, with a Type II observation period and ISO 27001 certification work underway after an earlier auditor issue invalidated previous reports. That does not prove the product is unsafe. It does mean a buyer should request the current report and verify the attestation instead of relying on a badge or a marketing sentence.</p>
<p>My personal operating rule is straightforward: do not dictate passwords or secrets, review the model-improvement and sync settings, use Privacy Mode when the context is sensitive, and verify the current compliance evidence before putting regulated work through it.</p>
<h2 id="what-i-would-improve-next">What I would improve next</h2>
<p>Flow already clears the hardest hurdle: I want to use it. The improvements I care about now are less glamorous than model benchmarks.</p>
<ol>
<li><strong>Make the Android bubble boringly reliable.</strong> An input method cannot randomly disappear.</li>
<li><strong>Bring recording and meeting capture to Windows and Android.</strong> The doctor-visit use case should not require a Mac.</li>
<li><strong>Expose the boundary between transcript and rewrite.</strong> Let me compare the recognized wording with the polished wording when exact language matters.</li>
<li><strong>Make insertion failures diagnosable.</strong> If Flow captured the text but the destination rejected it, tell me where the chain broke.</li>
<li><strong>Keep expanding personal controls.</strong> Dictionary entries, snippets, app-specific style, and hardware shortcuts do more for daily usefulness than another generic “AI writes faster” claim.</li>
</ol>
<h2 id="the-verdict">The verdict</h2>
<p>Wispr Flow is the first dictation app I have integrated deeply enough to annoy me when it disappears.</p>
<p>That is praise.</p>
<p>It has earned a dedicated hardware key on my desk. It catches thoughts that would otherwise be lost. It lets me speak in the messy, stop-and-start way I actually think and produces text that is usually ready to use. It works in the apps where I already write instead of demanding that I live in its editor.</p>
<p>But I use it as an intelligent writing layer, not as ground truth.</p>
<p>When the goal is <em>communicate what I mean</em>, Flow is excellent. When the goal is <em>preserve exactly what was said</em>, I want the recording, a faithful transcript, and human review. When no text appears, I check the entire input chain before blaming recognition. On Android, I treat the floating bubble as beta infrastructure, because that is what it has behaved like. And when the content is sensitive, I configure the privacy and context settings instead of assuming the defaults match my risk.</p>
<p>The best tools do not merely perform well in isolation. They fit the person using them. For me, the winning combination was Flow&rsquo;s cleanup, one physical button, a personal vocabulary, and a few carefully engineered escape hatches for the places where software still gets weird.</p>
<p>That is much more useful than perfect dictation in a demo.</p>
]]></content:encoded></item></channel></rss>