Journal
June 21, 2026

The four-hour course is delivered, demo fails and all

Three threads this week.

I delivered a four-hour online course on Saturday. It was part of Packt's Deep Engineering platform, and they did an amazing job co-hosting the call with me. I felt a little bad for them — the call didn't wrap until around 12:30 am their time. I think it went pretty well. A couple of demo fails along the way, but that is the way of live talks, and of non-deterministic LLMs.

I also made a bit of progress on lsp4agents. The lsp4a command now returns well-formed output — here's a rename in action:

❯ lsp4a rename sample.py greet greetz
{
  "changes": [
    {
      "after": "from sample import greetz",
      "before": "from sample import greet",
      "file": "consumer.py",
      "line": 8
    },
    {
      "after": "reply = greetz(\"world\")",
      "before": "reply = greet(\"world\")",
      "file": "consumer.py",
      "line": 10
    },
    {
      "after": "def greetz(name: str) -> str:",
      "before": "def greet(name: str) -> str:",
      "file": "sample.py",
      "line": 1
    },
    {
      "after": "message = greetz(123)",
      "before": "message = greet(123)",
      "file": "sample.py",
      "line": 6
    }
  ],
  "renamed_to": "greetz",
  "resolved": {
    "file": "sample.py",
    "from": "symbol",
    "line": 1
  },
  "scope": {
    "edits": 4,
    "files": 2
  },
  "status": "preview",
  "target": "greet"
}

It's a preview of a cross-file rename: every edit the change would make, listed before it touches a file. Use --apply have the changes made on the filesystem.

Lastly, I'm starting to plan a Tech Builder Demo event to host here in Vancouver, WA. Looking forward to that one.

ai-assisted-devagentstoolingteaching