)]}'
{
  "log": [
    {
      "commit": "250348ec3c8bcba21caa62fd4ae53e4d9476fafa",
      "tree": "4be2e3660c84343af23cb81fa14b3c7a5709ebfd",
      "parents": [
        "eb5166a5043946ad6782cb64af987d23a32e3203"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 10:31:28 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "all: mild prompt engineering\n\n"
    },
    {
      "commit": "42f7a7c93682a4ed04c62688e1475cd6ebc04de5",
      "tree": "e2c65947daa4012b98c6a884149c393332fd2f0c",
      "parents": [
        "23b6a2d690a4e208ec21604a5dd6a59bd1129ab5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 10:29:21 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 11:13:16 2025 -0700"
      },
      "message": "loop: enforce rather than fix branch formatting\n\nThis way the UI will always be correct;\nthe UI runs off the LLM response, not the fixed version.\n"
    },
    {
      "commit": "edc88dcc56ebdb1a2d9887728d0b5133b6131fbb",
      "tree": "a5b44389b3ac59022c3006d8347c36626cc7019e",
      "parents": [
        "885a16a8e37fe82dac66a7db729be202f6ce4bea"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 02:55:01 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 09:41:22 2025 -0700"
      },
      "message": "Rename cancelInnerLoop to cancelTurn to match refactored naming\n\n- Updated all references to cancelInnerLoop and CancelInnerLoop\n- Changed method and variable names to match the new processTurn naming\n- Updated references in related files: server/loophttp.go and termui/termui.go\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "885a16a8e37fe82dac66a7db729be202f6ce4bea",
      "tree": "eff84390d70dda2a09c79faffad2ba0850c1b763",
      "parents": [
        "0d95d3a268ffad82b7c645200804fb43ed088a81"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 02:49:25 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 30 09:41:22 2025 -0700"
      },
      "message": "Refactor loop/agent.go to reduce complexity\n\n- Restructured Agent.InnerLoop into smaller, more focused functions\n- Renamed InnerLoop to processTurn to better reflect its purpose\n- Extracted helper methods for different responsibilities\n- Improved code organization and testability\n- Each extracted function now handles a single responsibility\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "fff269b875d14dd6fbd1b90050739679f4bc2061",
      "tree": "ee3155adc63e627cf2fe8e24a4bf1a5d7776b5c7",
      "parents": [
        "47b193683089f6ca98877af497f7800d4a26f4a9"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:49:39 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Update title tool to reject branch names that already exist\n\nAdded a check to the title tool to verify that branches do not already exist\nbefore setting them, which prevents potential issues with duplicate branch names.\nIncludes a new unit test to validate this behavior.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "47b193683089f6ca98877af497f7800d4a26f4a9",
      "tree": "43b4b54c7b32650ff7ea9256c0aca7a793d68246",
      "parents": [
        "0137a7f2a025a2ac08e536b207ded2d58e928e32"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:34:14 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Display branch name alongside title in termui and webui\n\nThis change adds the branch name alongside the title in both the terminal UI and the web UI, following up on commit a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6 which added the branch_name parameter to the title tool.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d499fd6e12374193df2d769d12753bbd1ddd1493",
      "tree": "e8c2a8a134773164910b78b4606bd196c55d6d5f",
      "parents": [
        "dae19073cfdc420af8da311c4f3974ac6db77b46"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:31:29 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Add permission callback to Bash tool to enforce title setting before git commits\n\n- Convert Bash tool from a plain variable to a struct with a permission callback function\n- Add a constructor for creating Bash tools with custom callback functions\n- Implement a permission check in agent.go that verifies a branch name has been set before allowing git commits\n- If no branch name is set and a git commit command is attempted, return an error instructing to use the title tool first\n- Maintain backward compatibility for tests with BashRun function\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6",
      "tree": "9fc7773eb4c012398133633e41e6f1551f621996",
      "parents": [
        "1ae976bde49d4f0dc48146c1e3d3f38201e1f830"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 18:05:06 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 18:05:06 2025 -0700"
      },
      "message": "Add branch_name parameter to title tool\n\nModified the title tool to accept a branch_name parameter, which allows specifying\na custom branch name slug instead of deriving it from the title. The branch name\nis still cleaned to ensure it\u0027s valid.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "1ae976bde49d4f0dc48146c1e3d3f38201e1f830",
      "tree": "9d6235d7b3a16df5b968c271ca318147ac293412",
      "parents": [
        "e2d24ab80f34e25f602b306ea8e8b765101d8585"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 00:06:43 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 17:59:55 2025 -0700"
      },
      "message": "loop: fiddle with titleToBranch\n\nAdd support for numbers.\nUse strings.Map.\n"
    },
    {
      "commit": "dbe02304e804066bb32fcf6f41690336a98e6531",
      "tree": "d27ed5e5b94b004167e202254b97f7d1806733bd",
      "parents": [
        "2b2090e7fa8fd53eda5dca132980c3e2fa4cb3b8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:44:23 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 16:44:23 2025 -0700"
      },
      "message": "loop: extract system prompt into a separate file\n\nThis will make swapping it out easier, if/when desired.\n"
    },
    {
      "commit": "c72fff52ad6c5436fa8469f049fa232f2f6be5ed",
      "tree": "2f42838fc0af2f4954a64b8edcc4c8e09ec08af4",
      "parents": [
        "d3906e2e0a18197148089f384b188135b07559be"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 20:17:54 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Apr 29 16:24:19 2025 -0700"
      },
      "message": "Add SSH connection information to web UI\n\nThis commit implements:\n1. Added SSH information display to the web UI info button\n2. Shows SSH connection information only when running inside Docker container\n3. Constructs the full SSH hostname as \"sketch-[session_id]\"\n4. Added copy-to-clipboard buttons for SSH commands\n5. Styles the VSCode URL as a proper clickable link\n6. Shows a warning message when SSH is not available\n7. Modified container naming to use only SessionID instead of imgName+SessionID\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "50a1d62e0dc285c69b7c495e4a01a47fa3561692",
      "tree": "3a3e261735a063208430e457a0fbf93c1d30f58c",
      "parents": [
        "5fabc74b668752dc68e05a9a452cc15cf62077f7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 09:59:03 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 09:59:13 2025 -0700"
      },
      "message": "loop: don\u0027t panic when LLM API call fails\n\nAnd refactor a touch."
    },
    {
      "commit": "9c07e1d30f7f576bd7679a155873f6419743e6a6",
      "tree": "e962e6cb86fdaca7fbb4359efd025b39a47de74e",
      "parents": [
        "ffecb1e9fbaca84d7f142aa294fa795c324587af"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:25:37 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Apr 28 19:25:37 2025 -0700"
      },
      "message": "loop: prevent panic on double Agent.Init"
    },
    {
      "commit": "99a9a0285fe449f047fbc93766f37e6ea7af21df",
      "tree": "ba255c9b05449c09d137cd6cf81edf58469542a1",
      "parents": [
        "f98d7305e73ecec9a78f94f527693d5adfb89159"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 15:15:25 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Sun Apr 27 20:00:22 2025 -0700"
      },
      "message": "Implement tracking of outstanding LLM and Tool calls\n\nThis commit implements a listener pattern between ant.convo and the Agent for tracking outstanding calls.\n\n* Added fields to the Agent struct to track outstanding LLM calls and Tool calls\n* Implemented the listener methods to properly track and update these fields\n* Added methods to retrieve the counts and names\n* Updated the State struct in loophttp.go to expose this information\n* Added a unit test to verify the tracking functionality\n* Created UI components with lightbulb and wrench icons to display call status\n* Added numerical indicators that always show when there are active calls\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "833a0f83af52be33eed3baf0f67ffa3ddab55cb4",
      "tree": "0f1c78df648d499ed6ac3e975276ecc977ab4e70",
      "parents": [
        "0cbd976940708c94eb8b644b14bfda3f19087997"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Apr 24 18:39:36 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:31:00 2025 -0700"
      },
      "message": "claudetool: improve codereview\n\nDo a bunch of un-vibecoding and bug fixing.\nUnfortunately, lots left.\nGet rid of vet; gopls check covers it.\n\nAdd testing infrastructure and a bunch of fixtures.\n"
    },
    {
      "commit": "18532b212b8c108cc1c8bfcbaf5804a5c4156655",
      "tree": "3667714104cdd0bc0f8078a0ea619676e0764c7f",
      "parents": [
        "d013131a2892d175fcecc270d51e526c617dc170"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 21:11:46 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 19:28:10 2025 -0700"
      },
      "message": "Rename Host/Runtime hostname fields to Outside/Inside pattern\n\nThis renames all hostname/OS/working directory fields to follow the\nOutside/Inside naming pattern rather than Host/Runtime naming pattern.\n\n- HostHostname -\u003e OutsideHostname\n- RuntimeHostname -\u003e InsideHostname\n- HostOS -\u003e OutsideOS\n- RuntimeOS -\u003e InsideOS\n- HostWorkingDir -\u003e OutsideWorkingDir\n- RuntimeWorkingDir -\u003e InsideWorkingDir\n\nThis includes related method names, struct fields, and JavaScript properties.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "d140295fa7d794f5b30feb4eee2f45f9cc9ff383",
      "tree": "659e3d00a94eb2aee0da202efaf2e33477c0e895",
      "parents": [
        "37dc4cf04df5dee6feff005d68a4a24e55be8990"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 03:54:37 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Wed Apr 23 06:40:17 2025 -0700"
      },
      "message": "sketch: Propagate host vs. runtime OS/WorkingDir/Hostname\n\nIf you have a bunch of sketch sessions, you need to know where they were\nlaunched. The container hostnames (some random thing) and working dirs (always /app)\naren\u0027t very helpful, so we want to keep around both. I\u0027ve updated the UI\nto show them as well.\n\nThis commit chooses \"Host\" and \"Runtime\" as the names of the \"Outside\"\nand \"Inside\" sketch. I\u0027m open to suggestions for better names.\n\nCo-Authored-By: sketch, but it did a so-so job\n"
    },
    {
      "commit": "a4674b16548d6db22acddb80c40e05a5decf919d",
      "tree": "f42f28c861f962411be30caa38345ba13d2007f6",
      "parents": [
        "ecba7c7a44d434156ae074b39eb3d876da7f6730"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 10:19:53 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 10:19:53 2025 +0100"
      },
      "message": "Revert \"Fix Docker container initialization with branchless git hooks\"\n\nThis reverts commit ecba7c7a44d434156ae074b39eb3d876da7f6730.\n"
    },
    {
      "commit": "ecba7c7a44d434156ae074b39eb3d876da7f6730",
      "tree": "cfe51daed46f2e3d18298ec1aeec6105ebf52e76",
      "parents": [
        "a54c6a3cec2a35f11345b1e95336dae34a5458f8"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 10:09:56 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed Apr 23 10:09:56 2025 +0100"
      },
      "message": "Fix Docker container initialization with branchless git hooks\n\nDisable git hooks during container initialization to prevent errors from\nmissing git extensions like \u0027branchless\u0027. This change renames the hooks\ndirectory or removes specific problematic hooks if renaming fails.\n\nCo-Authored-By: sketch\n"
    },
    {
      "commit": "d0ac1eadd3a80c9d115ce4d1c13cdb78ed266df3",
      "tree": "e5b39519d626c5e866a1646063461886f75716bf",
      "parents": [
        "5e227dd8f494194284b4b545c02e09bc79909d41"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 20:04:19 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip.zeyliger@gmail.com",
        "time": "Mon Apr 21 20:04:53 2025 -0700"
      },
      "message": "sketch: \"git add remote sketch-host\"\n\nHaving a named remote makes working with the sketch container\neasier with the terminal and so forth.\n"
    },
    {
      "commit": "d9f1337ec3317a60df50d8ba4eefb448473d62fa",
      "tree": "67b60b05d8e2e3fb01293f68dfc5d08600a28dda",
      "parents": [
        "db8c5abcc18082bcbf47247e8d50889a32e65e06"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:08:49 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon Apr 21 15:21:40 2025 -0700"
      },
      "message": "webui: auto-generate types.ts from go structs\n"
    },
    {
      "commit": "2e463fb649fcff14d4025ddb91f630a98e7da526",
      "tree": "0e86854d80d2759a913870655f13226c31f9d30c",
      "parents": [],
      "author": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:22:22 2025 -0700"
      },
      "committer": {
        "name": "Earl Lee",
        "email": "earl.lee@sketch.dev",
        "time": "Thu Apr 17 11:35:33 2025 -0700"
      },
      "message": "Initial commit\n"
    }
  ]
}
