<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>HanLHo. - Fractional Architect &amp; Software Product Engineer - codex</title>
    <link rel="self" type="application/atom+xml" href="https://hanlho.com/tags/codex/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://hanlho.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-26T00:00:00+00:00</updated>
    <id>https://hanlho.com/tags/codex/atom.xml</id>
    <entry xml:lang="en">
        <title>Combining agent skills</title>
        <published>2026-02-26T00:00:00+00:00</published>
        <updated>2026-02-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/combining-agent-skills/"/>
        <id>https://hanlho.com/p/combining-agent-skills/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/combining-agent-skills/">&lt;p&gt;A short post on combining skills. It&#x27;s not always clear when a skill will be called or triggered. The easiest way is to put instructions and directly invoke the skill you want by name.&lt;&#x2F;p&gt;
&lt;p&gt;For example, for my &lt;a href=&quot;https:&#x2F;&#x2F;til.hanlho.com&quot;&gt;Today I Learned mini blog site&lt;&#x2F;a&gt;, I have two skills to keep my TILs focussed and concise. One skill evaluates that my text is concise and utilitarian, which is what I expect or aim for in a TIL. And I have a more general skill that I also apply for this blog that creates the text according to UK English &#x27;as done by an English teacher&#x27;.&lt;&#x2F;p&gt;
&lt;p&gt;To combine both, I have the &lt;code&gt;review-til&lt;&#x2F;code&gt; skill that invokes both and specifies the output:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span&gt;Review the provided TIL file or text by running both checks in parallel:
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;1. &lt;&#x2F;span&gt;&lt;span style=&quot;font-weight:bold;color:#d08770;&quot;&gt;**TIL Rules Check**&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;: Invoke the &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`til-rules-checker`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; skill to verify content guidelines (word count, focus, clarity, format)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;2. &lt;&#x2F;span&gt;&lt;span style=&quot;font-weight:bold;color:#d08770;&quot;&gt;**Text Grading**&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;: Invoke the &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`text-grader`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; skill to assess spelling, grammar, and clarity using UK English standards
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span&gt;After both checks complete, provide a unified summary with:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- TIL rules verdict (PASS&#x2F;NEEDS REVISION)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Text grade (A&#x2F;B&#x2F;C&#x2F;D&#x2F;F)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Combined list of actionable improvements (if any)
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span&gt;If a file path is provided as an argument, read that file first. If text is provided directly, use that text.
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Note both &lt;code&gt;Invoke the &#x27;...&#x27;&lt;&#x2F;code&gt; instructions.&lt;&#x2F;p&gt;
&lt;p&gt;This works in Codex and Opencode. When I asked to review two TILs at once (&lt;code&gt;Review both non-committed TILs&lt;&#x2F;code&gt;) the result looks like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-bash &quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;Review&lt;&#x2F;span&gt;&lt;span&gt; summary:
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; beads-query-default-limit.md
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; Word count: 32
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; TIL rules: PASS (focused, clear, non-blog style, utilitarian)
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; Text grade: A (96%)
&lt;&#x2F;span&gt;&lt;span&gt;  &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; beads-query-subcommand.md
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; Word count: 55
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; TIL rules: PASS (focused, clear intent, non-blog style, utilitarian)
&lt;&#x2F;span&gt;&lt;span&gt;      &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; Text grade: B (84%) &lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;due&lt;&#x2F;span&gt;&lt;span&gt; to grammar issues (hard cap applied)
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;(The reason for the &lt;code&gt;B&lt;&#x2F;code&gt; grade is also detailed in the full output.)&lt;&#x2F;p&gt;
&lt;p&gt;In case you are interested, these are the skills I have currently published online:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;til&#x2F;blob&#x2F;main&#x2F;.agents&#x2F;skills&#x2F;check-til-rules&#x2F;SKILL.md&quot;&gt;check-til-rules&lt;&#x2F;a&gt;: This is the skill that has my TIL rules.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lhohan&#x2F;til&#x2F;blob&#x2F;main&#x2F;.agents&#x2F;skills&#x2F;review-til&#x2F;SKILL.md&quot;&gt;review-til&lt;&#x2F;a&gt;: The skill I usually invoke that combines the two skills. The content at the time of writing, aside from the frontmatter, is above.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Experience Report: Building a time-tracking AI assistant</title>
        <published>2026-02-04T00:00:00+00:00</published>
        <updated>2026-02-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://hanlho.com/p/experience-report-building-a-time-tracking-ai-assistant/"/>
        <id>https://hanlho.com/p/experience-report-building-a-time-tracking-ai-assistant/</id>
        
        <content type="html" xml:base="https://hanlho.com/p/experience-report-building-a-time-tracking-ai-assistant/">&lt;p&gt;This is a short experience report about using &lt;a href=&quot;https:&#x2F;&#x2F;agentskills.io&#x2F;home&quot;&gt;skills&lt;&#x2F;a&gt; (with Codex and its models) to build a personal AI assistant that helps me maintain my time-tracking log.&lt;&#x2F;p&gt;
&lt;p&gt;To set expectations: the assistant does not manage my calendar or tasks. It helps me keep a time-tracking log that lives in a Markdown file by interpreting logging requests and editing the file for me (while categorising entries correctly).&lt;&#x2F;p&gt;
&lt;p&gt;I start most days with a bit of planning, which means adding entries to that log. The format is completely custom and tailored to my needs, and I wrote a small companion CLI tool, &lt;code&gt;tt&lt;&#x2F;code&gt;, to generate reports from it. (The project is open source on GitHub, but honestly I don&#x27;t think it is useful to anyone other than me.)&lt;&#x2F;p&gt;
&lt;p&gt;To give an idea, this is what a day entry looks like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;## TT 2026-02-04
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- #admin ##work 30m inbox and daily planning
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- #prj-content ##work 2h article outline and research notes
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- #prj-content ##work 1h 30m first draft writing
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- prj-personal-assistant #llm ##work 1h walking skeleton
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- prj-personal-assistant #llm ##work 1h create skills
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- #break ##energy 20m outdoor walk
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- #learning ##work 1h documentation reading and summary
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;And using &lt;code&gt;tt&lt;&#x2F;code&gt;, I can generate reports like:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span&gt;Overview 2026-02-04 -&amp;gt; 2026-02-04:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- prj-content: 3h 30m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- prj-personal-assistant: 2h 00m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- learning: 1h 00m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- admin: 30m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- break: 20m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Total: 7h 20m
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span&gt;Breakdown:
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- ##work: 7h 00m
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- ##energy: 20m
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Editing the file is not hard, but it is tedious. The goal of this project was not to replace my log format, but to make it easier to operate.&lt;&#x2F;p&gt;
&lt;p&gt;Today I ran a small LLM experiment to make logging less cumbersome. Instead of writing an entry like &lt;code&gt;#prj-personal-assistant #llm #codex ##work 2h Setup walking skeleton&lt;&#x2F;code&gt;, I want to be able to say: &quot;Create a new task to set up a walking skeleton, add tags codex and llm, and attribute the time to the personal assistant project.&quot; And by &quot;say&quot; I mean it literally: I dictate it in normal language, it gets transcribed and sent to the LLM. This turned out to be a surprisingly fast (and fun) experiment with promising first results.&lt;&#x2F;p&gt;
&lt;p&gt;Technical details: I used the Codex agent and its models, mostly Codex 5.2. Working with Codex was smooth, but this post is not about comparing coding agents; I suspect it would work with any capable agent that supports skills.&lt;&#x2F;p&gt;
&lt;p&gt;I started with a log file containing over a year of time entries. That history was a good dataset to prime the LLM on the format: what a day looks like, what an entry line looks like, and how entries should be categorised with tags.&lt;&#x2F;p&gt;
&lt;p&gt;From there I moved into implementation, with a small set of local files and skills.&lt;&#x2F;p&gt;
&lt;p&gt;This is the file tree I ended up with (not ready to call it &quot;architecture&quot; yet):&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span&gt;AGENTS.md
&lt;&#x2F;span&gt;&lt;span&gt;skills
&lt;&#x2F;span&gt;&lt;span&gt;├── tt-cli
&lt;&#x2F;span&gt;&lt;span&gt;│   ├── references
&lt;&#x2F;span&gt;&lt;span&gt;│   │   └── command-cheatsheet.md
&lt;&#x2F;span&gt;&lt;span&gt;│   └── SKILL.md
&lt;&#x2F;span&gt;&lt;span&gt;└── tt-log
&lt;&#x2F;span&gt;&lt;span&gt;    ├── references
&lt;&#x2F;span&gt;&lt;span&gt;    │   ├── log-structure.md
&lt;&#x2F;span&gt;&lt;span&gt;    │   ├── tag-inference.md
&lt;&#x2F;span&gt;&lt;span&gt;    │   └── validation.md
&lt;&#x2F;span&gt;&lt;span&gt;    ├── scripts
&lt;&#x2F;span&gt;&lt;span&gt;    │   └── validate_tt_update.py
&lt;&#x2F;span&gt;&lt;span&gt;    └── SKILL.md
&lt;&#x2F;span&gt;&lt;span&gt;time-tracking-log.md
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;tt&lt;&#x2F;code&gt; is an abbreviation for &quot;time tracking&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;In practice, &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; tells the agent which skill to use for which capability:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; style=&quot;background-color:#eff1f5;color:#4f5b66;&quot; class=&quot;language-markdown &quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;### Time tracking
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#8fa1b3;&quot;&gt;### Time tracking
&lt;&#x2F;span&gt;&lt;span&gt;
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`tt`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;, the custom time-tracking CLI, for time-tracking operations.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`$tt-log`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`time-tracking-log.md`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; edits, tag inference, and 7h to 8h daily policy checks.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;- Use &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`$tt-cli`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; for &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`tt`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt; command discovery, report commands, and CLI troubleshooting.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;  - Rule of thumb: log edits&#x2F;validation =&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`$tt-log`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;; reporting&#x2F;CLI usage questions =&amp;gt; &lt;&#x2F;span&gt;&lt;span style=&quot;color:#a3be8c;&quot;&gt;`$tt-cli`&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;.
&lt;&#x2F;span&gt;&lt;span style=&quot;color:#bf616a;&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The two skills are the heart of the implementation:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tt-cli&lt;&#x2F;code&gt; handles the &lt;code&gt;tt&lt;&#x2F;code&gt; CLI tool: command discovery, reporting, filters, and general troubleshooting.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;tt-log&lt;&#x2F;code&gt; handles log editing, task insertion, tag inference, section ordering, and policy checks.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;From the start I wanted to use skills because my custom format and tooling are a specialised capability. Initially Codex suggested a single skill, but it was clear to me that reading&#x2F;querying and writing&#x2F;editing were different responsibilities, so I pushed it in that direction (it agreed, ha!).&lt;&#x2F;p&gt;
&lt;p&gt;That split improved the quality of outcomes. Beyond maintainability, making responsibilities explicit made behaviour more predictable, because the CLI skill gives the LLM a way to validate its work. The &lt;code&gt;tt-log&lt;&#x2F;code&gt; skill can focus on reliable edits and validation, while &lt;code&gt;tt-cli&lt;&#x2F;code&gt; handles queries like &quot;how much do I still need to log today?&quot; and validates the log.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;code&gt;references&lt;&#x2F;code&gt; locations for both skills were set up by the LLM while we created the skills. They are pretty clean in terms of responsibility, and reviewing and refining the split proved useful.&lt;&#x2F;p&gt;
&lt;p&gt;During implementation I also wanted basic checks for &quot;did I log enough today?&quot;, so we added a validation workflow that checks a daily target range (7h to 8h). The logic is always the same, so I had it write a script: &lt;code&gt;skills&#x2F;tt-log&#x2F;scripts&#x2F;validate_tt_update.py&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;I iteratively refined the default logging rules (which tags to use for which kinds of tasks, the fact that not all my days look the same, and so on). I don&#x27;t expect it to be perfect, but I will probably tweak it over the next couple of weeks as exceptions pop up.&lt;&#x2F;p&gt;
&lt;aside class=&quot;sidebar-note sidebar-note-right&quot;&gt;
  &lt;p&gt;As an aside, when finishing up Codex proposed me to create a &#x27;one-page pdf summary&#x27; of this project. I think it did &lt;a href=&quot;&#x2F;pdfs&#x2F;codex-personal-assistant-summary.pdf&quot;&gt;a pretty good job&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;

&lt;&#x2F;aside&gt;
&lt;p&gt;So in short:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Created initial time-tracking skill behaviour for structured log edits based on existing time tracking data.&lt;&#x2F;li&gt;
&lt;li&gt;Split responsibilities into two dedicated skills (&lt;code&gt;tt-log&lt;&#x2F;code&gt; and &lt;code&gt;tt-cli&lt;&#x2F;code&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Added automated validation for parse integrity, per-day totals, and a daily policy range.&lt;&#x2F;li&gt;
&lt;li&gt;Iteratively refined defaults and behaviour based on real usage (for example, a longer workout-at-noon baseline on Tuesdays).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Things I can now ask: &quot;I want to fill the rest of the day with work on a project I forgot the tag of. Give me the last 5 projects I recorded time on so I can tell you what to log to.&quot; Before, this was not hard, but it involved a bunch of small chores: checking previous days, finding the right project tag, copying it into a new line, and calculating the time left for the day.&lt;&#x2F;p&gt;
&lt;p&gt;Besides the usefulness (and fun), there was an unexpectedly valuable lesson: AI assistance works best in the same way good code does. Define clear boundaries and add executable checks so changes are easier to make and the system can validate its own work.&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
