<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>storagebits · #android-tv</title>
    <subtitle>Firmware, TV apps, a homelab, built at night with an organization of AI agents. And blok, the workshop notebook.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blok.storagebits.workers.dev/tags/android-tv/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blok.storagebits.workers.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-12T00:00:00+00:00</updated>
    <id>https://blok.storagebits.workers.dev/tags/android-tv/atom.xml</id>
    <entry xml:lang="en">
        <title>Twelve minutes from idea to TV</title>
        <published>2026-10-12T00:00:00+00:00</published>
        <updated>2026-10-12T00:00:00+00:00</updated>
        <author><name>François</name></author>
        <link rel="alternate" type="text/html" href="https://blok.storagebits.workers.dev/blog/quatre-jours/"/>
        <id>https://blok.storagebits.workers.dev/blog/quatre-jours/</id>
        <summary type="html">Four days, six projects, 159 commits. The gap between “I&#39;d like that” and “it runs on the device” has become ridiculous. What still slows things down is me, my cables and my quotas.</summary>
        <content type="html" xml:base="https://blok.storagebits.workers.dev/blog/quatre-jours/">&lt;p&gt;Thursday, October 8, 8:34 pm. I send a mission prompt to an agent. At 8:46 pm the time shows up, huge, on my TV, in a typeface the agent picked.&lt;/p&gt;
&lt;p&gt;Four days later: six projects, 159 commits, some 240 messages from me, a good share of them under five words. “go T8”. “vas-y présente la tranche 3” [go ahead, show me slice 3]. “c’est fait, reteste” [done, test again].&lt;/p&gt;
&lt;p&gt;The gap between intent and something real has become ridiculous. Twelve minutes for the Almanak app. Sixteen for Lukarne. The bottleneck now is me: my sleep, my cables, my quotas.&lt;/p&gt;
&lt;figure class=&quot;frise&quot;&gt;&lt;div class=&quot;defile&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Timeline, scrolls horizontally&quot;&gt;&lt;svg viewBox=&quot;0 0 900 412&quot; role=&quot;img&quot; aria-labelledby=&quot;frise-titre frise-desc&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;title id=&quot;frise-titre&quot;&gt;Four days of commits, project by project&lt;/title&gt;&lt;desc id=&quot;frise-desc&quot;&gt;One row per project, from Thursday 8 October 7 pm to Monday 12 October 7 pm. Each tick is a commit. The hollow circle marks the first message to the agent; the filled circle, raised above the row, the first concrete result. Nights are shaded.&lt;/desc&gt;&lt;rect class=&quot;nuit&quot; x=&quot;157.3&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;157.3&quot; x2=&quot;157.3&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;161.3&quot; y=&quot;28&quot;&gt;Fri 9&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;345.8&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;345.8&quot; x2=&quot;345.8&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;349.8&quot; y=&quot;28&quot;&gt;Sat 10&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;534.3&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;534.3&quot; x2=&quot;534.3&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;538.3&quot; y=&quot;28&quot;&gt;Sun 11&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;722.8&quot; y=&quot;34&quot; width=&quot;55.0&quot; height=&quot;338&quot;/&gt;&lt;line class=&quot;grille&quot; x1=&quot;722.8&quot; x2=&quot;722.8&quot; y1=&quot;34&quot; y2=&quot;372&quot;/&gt;&lt;text class=&quot;axe&quot; x=&quot;726.8&quot; y=&quot;28&quot;&gt;Mon 12&lt;/text&gt;&lt;text class=&quot;axe&quot; x=&quot;118.0&quot; y=&quot;28&quot;&gt;Thu 8&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;85.0&quot; text-anchor=&quot;end&quot;&gt;Almanak&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;81.0&quot; y2=&quot;81.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;669.9&quot; x2=&quot;669.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;669.6&quot; x2=&quot;669.6&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;611.3&quot; x2=&quot;611.3&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;145.9&quot; x2=&quot;145.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;145.3&quot; x2=&quot;145.3&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;140.8&quot; x2=&quot;140.8&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;139.4&quot; x2=&quot;139.4&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;137.5&quot; x2=&quot;137.5&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;135.9&quot; x2=&quot;135.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;133.6&quot; x2=&quot;133.6&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;131.9&quot; x2=&quot;131.9&quot; y1=&quot;74.0&quot; y2=&quot;88.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M130.3,81.0 L131.9,81.0 L131.9,63.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;130.3&quot; cy=&quot;81.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Thu 8:34 pm · mission prompt&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;131.9&quot; cy=&quot;63.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;8:46 pm · the clock shows up on the TV&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;140.9&quot; y=&quot;67.0&quot;&gt;12 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;85.0&quot;&gt;11&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;139.0&quot; text-anchor=&quot;end&quot;&gt;Homelab&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;135.0&quot; y2=&quot;135.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;869.9&quot; x2=&quot;869.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;863.8&quot; x2=&quot;863.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;863.3&quot; x2=&quot;863.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;859.6&quot; x2=&quot;859.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;847.3&quot; x2=&quot;847.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;843.9&quot; x2=&quot;843.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;838.3&quot; x2=&quot;838.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;820.5&quot; x2=&quot;820.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;819.9&quot; x2=&quot;819.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;819.9&quot; x2=&quot;819.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;811.7&quot; x2=&quot;811.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;810.2&quot; x2=&quot;810.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;807.8&quot; x2=&quot;807.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;777.1&quot; x2=&quot;777.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;762.2&quot; x2=&quot;762.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;757.2&quot; x2=&quot;757.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;755.4&quot; x2=&quot;755.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.5&quot; x2=&quot;752.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;747.7&quot; x2=&quot;747.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.7&quot; x2=&quot;729.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.1&quot; x2=&quot;729.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;715.3&quot; x2=&quot;715.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;707.6&quot; x2=&quot;707.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;706.1&quot; x2=&quot;706.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;704.2&quot; x2=&quot;704.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;703.4&quot; x2=&quot;703.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;697.9&quot; x2=&quot;697.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;693.0&quot; x2=&quot;693.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;692.3&quot; x2=&quot;692.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;690.6&quot; x2=&quot;690.6&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;688.3&quot; x2=&quot;688.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;675.3&quot; x2=&quot;675.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;672.7&quot; x2=&quot;672.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;670.4&quot; x2=&quot;670.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;666.2&quot; x2=&quot;666.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;665.0&quot; x2=&quot;665.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.7&quot; x2=&quot;663.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.4&quot; x2=&quot;663.4&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;661.3&quot; x2=&quot;661.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;660.2&quot; x2=&quot;660.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;656.5&quot; x2=&quot;656.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;651.3&quot; x2=&quot;651.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;640.9&quot; x2=&quot;640.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;639.3&quot; x2=&quot;639.3&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;627.0&quot; x2=&quot;627.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;624.1&quot; x2=&quot;624.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;617.1&quot; x2=&quot;617.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;615.1&quot; x2=&quot;615.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;579.8&quot; x2=&quot;579.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;532.9&quot; x2=&quot;532.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;532.8&quot; x2=&quot;532.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;527.1&quot; x2=&quot;527.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;526.5&quot; x2=&quot;526.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;526.0&quot; x2=&quot;526.0&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;496.1&quot; x2=&quot;496.1&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;495.7&quot; x2=&quot;495.7&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;494.8&quot; x2=&quot;494.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;488.8&quot; x2=&quot;488.8&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;488.2&quot; x2=&quot;488.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;487.9&quot; x2=&quot;487.9&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;484.2&quot; x2=&quot;484.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;484.2&quot; x2=&quot;484.2&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;478.5&quot; x2=&quot;478.5&quot; y1=&quot;128.0&quot; y2=&quot;142.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M136.2,135.0 L141.6,135.0 L141.6,117.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;136.2&quot; cy=&quot;135.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Thu 9:19 pm · “let&#39;s go!”&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;141.6&quot; cy=&quot;117.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;10:00 pm · two-factor auth live on the gateway&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;150.6&quot; y=&quot;121.0&quot;&gt;41 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;139.0&quot;&gt;63&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;193.0&quot; text-anchor=&quot;end&quot;&gt;Lukarne&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;189.0&quot; y2=&quot;189.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;852.5&quot; x2=&quot;852.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;842.4&quot; x2=&quot;842.4&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;812.1&quot; x2=&quot;812.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;743.0&quot; x2=&quot;743.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;730.6&quot; x2=&quot;730.6&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;729.1&quot; x2=&quot;729.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;726.2&quot; x2=&quot;726.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;724.3&quot; x2=&quot;724.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;708.1&quot; x2=&quot;708.1&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;705.9&quot; x2=&quot;705.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;705.3&quot; x2=&quot;705.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;703.9&quot; x2=&quot;703.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;656.5&quot; x2=&quot;656.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;655.3&quot; x2=&quot;655.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;652.0&quot; x2=&quot;652.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;650.7&quot; x2=&quot;650.7&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;643.4&quot; x2=&quot;643.4&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;642.9&quot; x2=&quot;642.9&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;610.2&quot; x2=&quot;610.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;531.0&quot; x2=&quot;531.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;429.2&quot; x2=&quot;429.2&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;321.5&quot; x2=&quot;321.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;317.3&quot; x2=&quot;317.3&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;312.5&quot; x2=&quot;312.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;307.7&quot; x2=&quot;307.7&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;306.0&quot; x2=&quot;306.0&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;300.5&quot; x2=&quot;300.5&quot; y1=&quot;182.0&quot; y2=&quot;196.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M298.4,189.0 L300.5,189.0 L300.5,171.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;298.4&quot; cy=&quot;189.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Fri 5:58 pm · mission prompt&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;300.5&quot; cy=&quot;171.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;6:14 pm · first live cam fullscreen&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;309.5&quot; y=&quot;175.0&quot;&gt;16 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;193.0&quot;&gt;27&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;247.0&quot; text-anchor=&quot;end&quot;&gt;DropboksTV&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;243.0&quot; y2=&quot;243.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;687.6&quot; x2=&quot;687.6&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;683.4&quot; x2=&quot;683.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;682.4&quot; x2=&quot;682.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;679.4&quot; x2=&quot;679.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;679.4&quot; x2=&quot;679.4&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;677.5&quot; x2=&quot;677.5&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;676.7&quot; x2=&quot;676.7&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;673.1&quot; x2=&quot;673.1&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;668.8&quot; x2=&quot;668.8&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;666.6&quot; x2=&quot;666.6&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;663.3&quot; x2=&quot;663.3&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;660.2&quot; x2=&quot;660.2&quot; y1=&quot;236.0&quot; y2=&quot;250.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M654.4,243.0 L660.2,243.0 L660.2,225.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;654.4&quot; cy=&quot;243.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Sun 3:18 pm · “read the prompt and go”&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;660.2&quot; cy=&quot;225.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;4:02 pm · pairing works on the TV&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;669.2&quot; y=&quot;229.0&quot;&gt;44 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;247.0&quot;&gt;12&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;301.0&quot; text-anchor=&quot;end&quot;&gt;shot2cart&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;297.0&quot; y2=&quot;297.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;775.5&quot; x2=&quot;775.5&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;770.9&quot; x2=&quot;770.9&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;768.6&quot; x2=&quot;768.6&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;767.6&quot; x2=&quot;767.6&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;760.8&quot; x2=&quot;760.8&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.5&quot; x2=&quot;754.5&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;751.4&quot; x2=&quot;751.4&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;745.4&quot; x2=&quot;745.4&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;731.1&quot; x2=&quot;731.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;718.0&quot; x2=&quot;718.0&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;716.9&quot; x2=&quot;716.9&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;715.1&quot; x2=&quot;715.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;694.1&quot; x2=&quot;694.1&quot; y1=&quot;290.0&quot; y2=&quot;304.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M693.1,297.0 L715.0,297.0 L715.0,279.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;693.1&quot; cy=&quot;297.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Sun 8:13 pm · “forget about previous session”&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;715.0&quot; cy=&quot;279.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;11:01 pm · photo → list → store links&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;724.0&quot; y=&quot;283.0&quot;&gt;2 h 48&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;301.0&quot;&gt;13&lt;/text&gt;&lt;text class=&quot;nom&quot; x=&quot;104&quot; y=&quot;355.0&quot; text-anchor=&quot;end&quot;&gt;Kronograf&lt;/text&gt;&lt;line class=&quot;rail&quot; x1=&quot;118&quot; x2=&quot;872&quot; y1=&quot;351.0&quot; y2=&quot;351.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;861.6&quot; x2=&quot;861.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;845.9&quot; x2=&quot;845.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;844.8&quot; x2=&quot;844.8&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;843.7&quot; x2=&quot;843.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;839.5&quot; x2=&quot;839.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;823.0&quot; x2=&quot;823.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;820.9&quot; x2=&quot;820.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;817.6&quot; x2=&quot;817.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;813.3&quot; x2=&quot;813.3&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;811.5&quot; x2=&quot;811.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;810.9&quot; x2=&quot;810.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;809.4&quot; x2=&quot;809.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;802.1&quot; x2=&quot;802.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;776.0&quot; x2=&quot;776.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;775.4&quot; x2=&quot;775.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;767.6&quot; x2=&quot;767.6&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;761.5&quot; x2=&quot;761.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;760.7&quot; x2=&quot;760.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;759.9&quot; x2=&quot;759.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;759.1&quot; x2=&quot;759.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.9&quot; x2=&quot;756.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.8&quot; x2=&quot;756.8&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.2&quot; x2=&quot;756.2&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;756.0&quot; x2=&quot;756.0&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;755.5&quot; x2=&quot;755.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.2&quot; x2=&quot;754.2&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;754.1&quot; x2=&quot;754.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.7&quot; x2=&quot;752.7&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.4&quot; x2=&quot;752.4&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;752.1&quot; x2=&quot;752.1&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;751.5&quot; x2=&quot;751.5&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;749.9&quot; x2=&quot;749.9&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;line class=&quot;commit&quot; x1=&quot;749.3&quot; x2=&quot;749.3&quot; y1=&quot;344.0&quot; y2=&quot;358.0&quot;/&gt;&lt;path class=&quot;delai&quot; d=&quot;M748.8,351.0 L752.6,351.0 L752.6,333.0&quot;/&gt;&lt;circle class=&quot;intention&quot; cx=&quot;748.8&quot; cy=&quot;351.0&quot; r=&quot;5&quot;&gt;&lt;title&gt;Mon 3:19 am · “read it and get started”&lt;/title&gt;&lt;/circle&gt;&lt;circle class=&quot;concret&quot; cx=&quot;752.6&quot; cy=&quot;333.0&quot; r=&quot;5.5&quot;&gt;&lt;title&gt;3:48 am · first verified flash on the watch&lt;/title&gt;&lt;/circle&gt;&lt;text class=&quot;etiquette&quot; x=&quot;761.6&quot; y=&quot;337.0&quot;&gt;29 min&lt;/text&gt;&lt;text class=&quot;compte&quot; x=&quot;880&quot; y=&quot;355.0&quot;&gt;33&lt;/text&gt;&lt;g class=&quot;legende&quot; transform=&quot;translate(118,394)&quot;&gt;&lt;circle class=&quot;intention&quot; cx=&quot;6&quot; cy=&quot;0&quot; r=&quot;5&quot;/&gt;&lt;text x=&quot;16&quot; y=&quot;4&quot;&gt;first message to the agent&lt;/text&gt;&lt;circle class=&quot;concret&quot; cx=&quot;236&quot; cy=&quot;0&quot; r=&quot;5.5&quot;/&gt;&lt;text x=&quot;246&quot; y=&quot;4&quot;&gt;first concrete result&lt;/text&gt;&lt;line class=&quot;commit&quot; x1=&quot;452&quot; x2=&quot;452&quot; y1=&quot;-7&quot; y2=&quot;7&quot;/&gt;&lt;text x=&quot;462&quot; y=&quot;4&quot;&gt;a commit&lt;/text&gt;&lt;rect class=&quot;nuit&quot; x=&quot;560&quot; y=&quot;-7&quot; width=&quot;14&quot; height=&quot;14&quot;/&gt;&lt;text x=&quot;580&quot; y=&quot;4&quot;&gt;night&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;One row per project, Thursday 7 pm to Monday 7 pm. The number on the right counts commits. Hover the circles for exact times.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Each row is a project, each tick a commit. The hollow circle is my first message to the agent. The filled one, raised above the row, is the first concrete thing: the app running on the TV, the firmware on the watch, two-factor auth live on the homelab gateway. The grey bands are nights. There are commits in them. Not always because I was awake.&lt;/p&gt;
&lt;h2 id=&quot;thursday-night-three-agents-in-45-minutes&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#thursday-night-three-agents-in-45-minutes&quot; aria-label=&quot;Anchor link for: thursday-night-three-agents-in-45-minutes&quot;&gt;#&lt;/a&gt;
Thursday night: three agents in 45 minutes&lt;/h2&gt;
&lt;p&gt;On the evening of the 8th, within 45 minutes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8:34 pm: the Almanak mission goes out.&lt;/li&gt;
&lt;li&gt;8:36 pm: I restart shot2cart, a project begun in September with another tool. “inspect project, it comes from an other AI conversation, inspect and we pursue”.&lt;/li&gt;
&lt;li&gt;9:07 pm: I download from claude.ai the &lt;code&gt;CLAUDE.md&lt;/code&gt; for my homelab, which I’m redesigning with an LLM. I had just written it with another instance while the first one was building Almanak.&lt;/li&gt;
&lt;li&gt;9:19 pm: “je viens de créer CLAUDE.md pour toi, c’est parti !” [just created CLAUDE.md for you, let’s go!]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nobody waits for anybody. While one agent compiles, I write the next one’s mission with a third.&lt;/p&gt;
&lt;h2 id=&quot;almanak-the-spark&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#almanak-the-spark&quot; aria-label=&quot;Anchor link for: almanak-the-spark&quot;&gt;#&lt;/a&gt;
Almanak, the spark&lt;/h2&gt;
&lt;p&gt;The north star fit in one sentence:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A screen you want to leave on. When I walk past my TV, I know in 2 seconds: the time, the date, the weather now and later, and how many minutes until my next bus. It’s beautiful like a design object, not like an admin dashboard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And one rule I kept for every project after it: no slice is done until the agent has seen it running on the Shield. It takes a capture over adb, reads it, critiques it. Legibility at 3 m, overscan, overflow. And for every visual slice, two variants; keep the better one.&lt;/p&gt;
&lt;div class=&quot;galerie&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/almanak.webp&quot; alt=&quot;Almanak on the TV, dark theme: the time in large type, the date, the day of the year, the next buses and a five-day forecast&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/almanak-papier.webp&quot; alt=&quot;Almanak, paper theme: the time, the name day, the buses and the temperature curve for the next hours&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Almanak on the Shield on the first night: the dark theme at 10:17 pm, the paper theme at 9:38 pm.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Seven slices between 8:46 and 10:32 pm. For the clock, the agent compared an editorial serif with a Swiss sans-serif and kept Fraunces, because at 3 m, Inter at weight 200 “starts to look like a wire”. It’s right.&lt;/p&gt;
&lt;p&gt;Best bug: the bus schedule sync returned &lt;code&gt;HTTP 441&lt;/code&gt; on the Shield and worked fine from the Mac. The agent dug through &lt;code&gt;dumpsys connectivity&lt;/code&gt; and found the VPN running on the Shield: the STM site (Montreal’s transit agency) rejects VPN exit IPs. It switched to a mirror of the same feed, byte for byte, and documented split tunnelling in the README. The prompt never mentioned a VPN.&lt;/p&gt;
&lt;p&gt;To be honest: my definition of “done” asked for 24 hours of screensaver without a memory leak. The actual measurement covers about an hour. Done, then. In quotes.&lt;/p&gt;
&lt;h2 id=&quot;lukarne-my-favourite&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lukarne-my-favourite&quot; aria-label=&quot;Anchor link for: lukarne-my-favourite&quot;&gt;#&lt;/a&gt;
Lukarne, my favourite&lt;/h2&gt;
&lt;p&gt;Next day, 5:58 pm, second mission. A window on the world: spin a globe with the remote, dive into a region, watch a wall of live webcams, zap from one camera to the next. The sentence that matters in the prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If an interaction isn’t smooth with the remote, it has failed, even if it is technically correct.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And a quieter one that explains why it all went so fast: “I’ve already built another Google TV app with you on this same Shield. Before anything else, find in my environment […] how we connect to it […]. Reuse what works.” Every project leaves behind an adb address, a deploy script, a &lt;code&gt;DECISIONS.md&lt;/code&gt; format. The next one starts from there.&lt;/p&gt;
&lt;p&gt;6:14 pm: first live stream fullscreen on the TV, HLS and YouTube, left/right to switch. 16 minutes. By 8:54 pm, V1 was there: an OpenGL day/night globe at 60 frames per second (3 ms per frame), 1,640 cameras in 34 regions (19 more since Monday), a 3×3 wall whose focused tile goes live within two seconds, and a “surprise me” button that sends you somewhere it’s daytime. Two 22-minute soak tests, zero crashes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/lukarne-globe.webp&quot; alt=&quot;The Lukarne globe centred on Europe at night, Venice selected, a webcam of St Mark’s Basin inset&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Lukarne: Europe at night, Venice selected, 16 live webcams, St Mark’s Basin in the corner.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The easiest way is to watch it run:&lt;/p&gt;
&lt;figure class=&quot;video&quot;&gt;&lt;video controls muted playsinline preload=&quot;metadata&quot; poster=&quot;lukarne-visite-poster.jpg&quot;&gt;&lt;source src=&quot;lukarne-visite.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;78 seconds on the Shield, no sound: the globe over to California, the dive into Pollock Pines, the wall of live highway cameras, fullscreen, next camera, climbing back out, then “surprise me”.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;The agent shot this video on Monday evening, for this post. It drove the Shield with a virtual remote (&lt;code&gt;adb shell input keyevent&lt;/code&gt;) and recorded the screen with &lt;code&gt;screenrecord&lt;/code&gt;. The first take was in French, over Europe, where it was 1 am: everything was black. It reshot in English, over California, in daylight.&lt;/p&gt;
&lt;div class=&quot;galerie&quot;&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/lukarne-mosaique.webp&quot; alt=&quot;The Pollock Pines wall: nine live highway cameras on US 50, the focused tile outlined&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/lukarne-plein-ecran.webp&quot; alt=&quot;Fullscreen on a California highway camera, a red car at the intersection, place name and local time at the bottom&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A place’s wall, then fullscreen. Left/right jumps to the neighbouring camera without going back to the wall.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/lukarne-aurore.webp&quot; alt=&quot;A green aurora over Fairbanks, Alaska, with the camera name and local time&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“surprise me” landed on this, mid-shoot. Explore.org’s aurora camera in Fairbanks, 3:09 pm local time: probably a replay of the night between two live shots.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then I used it, and complained. Saturday, 11:20 pm: “je suis assez surpris du peu de flux video , bcp d’images fixes qui apportent peu” [I’m pretty surprised how few video feeds there are, lots of stills that don’t add much]. 11:34 pm, commit: live first, stills optional. Fourteen minutes.&lt;/p&gt;
&lt;p&gt;Overnight from Sunday to Monday, at 12:08 am: “parfait , je vais dormir là” [perfect, I’m off to bed]. And two requests: “les vignettes pixelisée : on peut trouver un moyen de charger ne serait ce qu 1 frame propre plutôt que la vignette degeueu ?” [the pixelated thumbnails: can we find a way to load even 1 clean frame instead of the gross thumbnail?], and for the last zoom level, an “effet plongeant genre zoom google earth” [diving effect, like a Google Earth zoom]. At 12:26 am, the thumbnails are real frames grabbed on the device during playback. At 12:48 am, you dive into a place with a ×30 zoom, the lights come on, and you climb back out. At 12:59 am, a 10-minute soak test on top of all that. I was asleep.&lt;/p&gt;
&lt;p&gt;Monday afternoon, I asked for a demo mode, so the TV travels on its own. 41 minutes later:&lt;/p&gt;
&lt;figure class=&quot;video&quot;&gt;&lt;video autoplay loop muted playsinline preload=&quot;metadata&quot; poster=&quot;lukarne-demo-poster.jpg&quot;&gt;&lt;source src=&quot;lukarne-demo.mp4&quot; type=&quot;video/mp4&quot;&gt;&lt;/video&gt;&lt;figcaption&gt;Demo mode: random cameras where it&#39;s daytime, never the same region twice, with a fade through a title card in between.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/lukarne-reglages.webp&quot; alt=&quot;The Lukarne settings panel over the globe: language, temperature, still images, corner player, demo time per camera, source credits&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Settings, one remote away: language (English, French, Spanish), units, stills or live only, corner player, demo time per camera, and credits for every source.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Still missing: live coverage outside North America is thin. On day one, the agent burned the whole YouTube search quota while two bugs hid the results. Now a public repository republishes the live catalogue every day, and the app downloads it behind its logo. And there’s a bug I can’t always reproduce: a YouTube webcam that freezes when you chain two of them. I reported it at 3:46 pm, a fix landed at 4:31 pm. Still to be checked on the TV.&lt;/p&gt;
&lt;h2 id=&quot;dropbokstv-one-sunday-afternoon&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dropbokstv-one-sunday-afternoon&quot; aria-label=&quot;Anchor link for: dropbokstv-one-sunday-afternoon&quot;&gt;#&lt;/a&gt;
DropboksTV, one Sunday afternoon&lt;/h2&gt;
&lt;p&gt;A Dropbox client for the TV, built for the couch: photos and videos first, read-only, no backend. Sunday, 3:18 pm: “read prompt-dropbokstv-claude-code.md and go”. 4:02 pm: phone pairing works on the TV. 6:28 pm: eighth and final slice, with search, offline mode, the screensaver and 128 translated strings per language.&lt;/p&gt;
&lt;p&gt;The trickiest part is pairing. Signing in to Dropbox from a TV, without a keyboard, should be a code you type on your phone. Except Dropbox’s API doesn’t offer that flow. The agent checked the SDK and wrote it down in its decision log. So it built something else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the TV shows a QR code pointing to a page served by the TV itself, on the home Wi-Fi;&lt;/li&gt;
&lt;li&gt;the phone opens that page, which sends it to authorise DropboksTV on Dropbox;&lt;/li&gt;
&lt;li&gt;Dropbox shows a code, you paste it on the phone, and the TV exchanges it for a token (PKCE: the secret never leaves the TV, no backend);&lt;/li&gt;
&lt;li&gt;the session expires after 10 minutes and the TV renews the QR on its own. A typo doesn’t burn the session. And if the phone can’t see the TV, a button switches to the direct Dropbox link.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The TV’s little HTTP server (150 lines) was lifted from Almanak.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/dropbokstv-appairage.webp&quot; alt=&quot;DropboksTV pairing screen: three numbered steps and a QR code, blurred here&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pairing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And then there’s the viewer. In three slices, between 4:25 and 6:07 pm, the agent wrote a viewer that opens pretty much everything:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;photos, with ×2 and ×3 zoom you pan with the arrows, and a slideshow with fades or Ken Burns;&lt;/li&gt;
&lt;li&gt;videos: H.264, HEVC up to 4K, resume where you left off, &lt;code&gt;.srt&lt;/code&gt; subtitles;&lt;/li&gt;
&lt;li&gt;PDFs, page by page, with zoom;&lt;/li&gt;
&lt;li&gt;Word and PowerPoint, which Dropbox converts to PDF, and spreadsheets, scaled to 170% so they’re readable from the couch;&lt;/li&gt;
&lt;li&gt;formatted Markdown, code with line numbers and syntax colours;&lt;/li&gt;
&lt;li&gt;music, MP3 and FLAC, with cover art;&lt;/li&gt;
&lt;li&gt;and for everything else, a QR code that sends the file to your phone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The video player took 16 minutes. Documents, music and send-to-phone, 27. Insane.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/dropbokstv-formats.webp&quot; alt=&quot;Eight DropboksTV screens: a zoomed photo, a video, a PDF, a spreadsheet, Markdown notes, Kotlin code, a song with its cover art and the send-to-phone screen&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In order: zoomed photo, video, PDF, spreadsheet, Markdown, code, music, send to phone (QR blurred). The agent made the test files itself and dropped them into a dedicated Dropbox folder. Screenshots taken during development, in French.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;kronograf-or-the-return-of-hardware&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#kronograf-or-the-return-of-hardware&quot; aria-label=&quot;Anchor link for: kronograf-or-the-return-of-hardware&quot;&gt;#&lt;/a&gt;
Kronograf, or the return of hardware&lt;/h2&gt;
&lt;p&gt;Monday, 3:19 am, a 2020 LilyGO T-Watch plugged in over USB, and a mission: an aviation chronograph face, plus 7-segment “time circuit” displays. At 3:48 am, first verified flash on the watch, after a full backup of the original flash. That was rule no. 2 in the prompt: nothing gets written to the watch without a safety net. The cable dropped out during the first backup, and the agent refused to flash until it had a complete one.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blok.storagebits.workers.dev/blog/quatre-jours/kronograf-photo.webp&quot; alt=&quot;The real 2020 T-Watch on the table: Kronograf diagnostics screen, memory, sensors detected in green, battery at 100%&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The real watch, Monday at 6:11 pm: the diagnostics screen, the first one flashed. Green: chips detected; grey: what the V1 doesn’t have.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;duo&quot;&gt;&lt;img src=&quot;kronograf-t1-aviator.webp&quot; alt=&quot;Aviation chronograph face: graduated bezel, three sub-dials for battery, minutes and steps, orange seconds hand&quot;&gt;&lt;img class=&quot;carre&quot; src=&quot;kronograf-t2-face1.webp&quot; alt=&quot;7-segment display face: destination in red, present in green, last sync in orange&quot;&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Left, a capture of the real watch over the serial port. Right, the “time circuits” face in the simulator, which compiles exactly the same UI.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is where the delay goes back up, and it’s not the agent’s fault. It’s no longer code against an emulator, it’s a tired micro-USB connector. My messages that morning: “elle plante systematiquement au bout de quelque secondes” [it crashes every time after a few seconds], “va vite sinon elle plante” [hurry or it crashes], “j’espère qu’elle n’est pas brikée” [I hope it isn’t bricked]. The problem was light sleep, with an interrupt storm when the button woke it up. At 11:17 am: “ce semble tres bien tenir maintenant” [seems to be holding up fine now]. At 11:18 am: “go pour la météo” [go for the weather]. At 11:31 am, the watch shows the weather and the next bus in real time.&lt;/p&gt;
&lt;p&gt;Tonight it has 33 commits, alarms, a stopwatch, a step counter, Wi-Fi updates and iPhone notifications over Bluetooth, which still don’t hold the connection well. The double tap is “un peu alétoire , comme le mouvement du poignet … mais ca passe” [a bit random, like the wrist gesture… but it’ll do].&lt;/p&gt;
&lt;h2 id=&quot;the-homelab-and-the-shot2cart-app&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-homelab-and-the-shot2cart-app&quot; aria-label=&quot;Anchor link for: the-homelab-and-the-shot2cart-app&quot;&gt;#&lt;/a&gt;
The homelab, and the shot2cart app&lt;/h2&gt;
&lt;p&gt;The longest job doesn’t show. Sixty commits and 276 messages to rebuild the home server from the ground up: an inventory, backups with real restore tests, remote access with passkeys for the family, alerts, a home page with an animated map of the infrastructure and another of the local network.&lt;/p&gt;
&lt;p&gt;My favourite message of the whole run, on the first night: “ignore cet audit ; je ne compte que sur toi maintenant” [ignore that audit; I’m counting only on you now]. The most honest one, on Sunday: “Nest dans Home Assistant c’est payant ??!!” [Nest in Home Assistant costs money??!!]. Yep, $5, thanks Google.&lt;/p&gt;
&lt;p&gt;shot2cart is the counter-example. The app’s pitch: a photo of a shopping list, and the cart opens at the store in under 15 seconds, without typing a thing. First attempt in September, with another tool and a spec-driven workflow: three days, two commits. On Thursday night, I restarted it on that base. Sunday, 8:13 pm, I archived everything: “forget about previous session, I archived the previous project and to start a new one with better prompt”. 11:01 pm: photo, analysis by a vision model, store links item by item. 12:04 am: “I’m going to sleep […] please go as far as you can in full autonomy”. By morning there was streaming detection, review cards and automated test flows.&lt;/p&gt;
&lt;p&gt;Same idea, same developer. The difference between September and this Sunday is the quality of the models, Opus 5.5 in particular. A beast!!!&lt;/p&gt;
&lt;h2 id=&quot;the-delay-measured&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-delay-measured&quot; aria-label=&quot;Anchor link for: the-delay-measured&quot;&gt;#&lt;/a&gt;
The delay, measured&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;What I asked for&lt;/th&gt;&lt;th&gt;Time to commit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;“ajoute la langue espagnole à l’application” [add Spanish to the app] (Lukarne)&lt;/td&gt;&lt;td&gt;5 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;Neighbours 2,500 km away: “je suis sur Londres mais la Patagonie est listée” [I’m on London but Patagonia is listed]&lt;/td&gt;&lt;td&gt;5 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;The logo that only shows for half a second at launch&lt;/td&gt;&lt;td&gt;2 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;More live, fewer stills&lt;/td&gt;&lt;td&gt;14 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;The “Google Earth style” diving zoom, requested before going to bed&lt;/td&gt;&lt;td&gt;40 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;A demo mode that chains random webcams&lt;/td&gt;&lt;td&gt;41 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BUG&lt;/td&gt;&lt;td&gt;The recent video that always opens a video from 2012 (DropboksTV)&lt;/td&gt;&lt;td&gt;2 min&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;FEAT&lt;/td&gt;&lt;td&gt;“go pour la météo” [go for the weather] on the watch&lt;/td&gt;&lt;td&gt;13 min&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;What doesn’t go faster: a micro-USB cable that comes loose, a YouTube quota that resets at 3 am, an API key the provider’s portal rejects, my subscription. Sunday, 4:46 pm: “il me reste que 10% pour notre session en cours” [I’ve only got 10% left for our current session]. And my sleep, which I ended up building into the plan: “je vais dormir la , avance au maximum de ton autonomie” [I’m going to sleep, go as far as you can on your own].&lt;/p&gt;
&lt;p&gt;What I don’t know yet: how many of these six projects I’ll still be using in a month. Time to see it through now, ship what can be shipped, feed other agents.&lt;/p&gt;
&lt;p&gt;This post was made the same way. One message from me on Monday late afternoon, in a jumble, typos included: “génère moi un article complet […] mettre en avant le délai ridicule que c’est devenu entre l’intention et le concret” [write me a complete article […] highlight how ridiculous the gap between intent and reality has become]. Lay it all out, transparently and honestly. The blog itself was online 45 minutes after my first message, Monday at 4 am.&lt;/p&gt;
&lt;p&gt;Anyway, have a good weekend!&lt;/p&gt;
&lt;aside class=&quot;transparence&quot; aria-label=&quot;How this post was written&quot;&gt;
  &lt;p class=&quot;transparence-titre&quot;&gt;How this post was written&lt;/p&gt;
  &lt;p&gt;Drafted by Claude Opus 5.5 from: a one-message brief from François, his Claude Code sessions (about 240 messages), six Git repositories (159 commits), their &lt;code&gt;DECISIONS.md&lt;/code&gt; files and screenshots, videos the agent shot on the Shield, a photo of the watch.&lt;/p&gt;
  &lt;p&gt;Proofread and corrected by François, 19 % of the text rewritten.&lt;/p&gt;
  &lt;p&gt;Translated from French by the AI, from the proofread version. The translation was not reviewed line by line.&lt;/p&gt;
&lt;/aside&gt;
</content>
    </entry>
</feed>
