)]}'
{
  "log": [
    {
      "commit": "31785aed38e0f63fa736430c6240c8a76b8285dc",
      "tree": "35916d3dbedaeac296ece3dd57610efd82c99c8d",
      "parents": [
        "5c7f95714f34ea327b8f300238da6491dedd6adb"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:50:58 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 19:17:50 2025 -0700"
      },
      "message": "loop: add knowledge_base tool for on-demand information\n\nThe knowledge_base tool provides a way for agents to access specialized information\nwhen needed. Initial topics include:\n\n- sketch: how to use Sketch, including SSH, secrets, and file management\n- go_iterators: information about Go\u0027s iterator feature added in Go 1.22\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "5c7f95714f34ea327b8f300238da6491dedd6adb",
      "tree": "3e550d2deb91606405dc398782443fdd37a18e2f",
      "parents": [
        "8dff12f977fa4f52c27142e8f7b4c8c5d9293711"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 01:17:31 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 13 01:17:31 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "8dff12f977fa4f52c27142e8f7b4c8c5d9293711",
      "tree": "8bfb2d10bb9826d9b82435cbd3ca551ea22bb251",
      "parents": [
        "6d4c7eadb2d465aa665288acc3f45e693d9a76d3"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 19:48:36 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 18:16:14 2025 -0700"
      },
      "message": "loop: emphasize directory guidance\n\nMake it clearer and more emphatic that agents must check and read\ndirectory-specific guidance files before making changes to files.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s624b7b2b4c7c1054k"
    },
    {
      "commit": "6d4c7eadb2d465aa665288acc3f45e693d9a76d3",
      "tree": "2e5128fc06d72237a292d038008ab15bf59e9b59",
      "parents": [
        "98b64d1b30d8715a9238fcda7ecedd313c37b5b7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 12:14:24 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:36:19 2025 -0700"
      },
      "message": "dear_llm: update\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9141e33d762836c9k"
    },
    {
      "commit": "98b64d1b30d8715a9238fcda7ecedd313c37b5b7",
      "tree": "f50c5eafc52d823b81849fa1cd7f384cff5fa461",
      "parents": [
        "39ed5a59d0c3802b3895dbc5da0b38b358252ea3"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 19:42:43 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:36:19 2025 -0700"
      },
      "message": "webui: switch to chat view when user sends a message\n\nWhen a user sends a message by hitting the Send button or pressing Enter,\nautomatically switch them back to the Chat view so they can immediately\nsee that their message is being processed.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s35da158cf333d3abk\n"
    },
    {
      "commit": "39ed5a59d0c3802b3895dbc5da0b38b358252ea3",
      "tree": "44cb42e602c38346a136a3c34f7cb178ef671973",
      "parents": [
        "53b02a6f0c62a8df188fde4a79414099f9d0da95"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:34:45 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 12 17:36:19 2025 -0700"
      },
      "message": "readme: take a quick editing pass"
    },
    {
      "commit": "53b02a6f0c62a8df188fde4a79414099f9d0da95",
      "tree": "e8958aaffe7a251cc9975850543963448c23241f",
      "parents": [
        "ff2df6a1f379812b360f6f3d3e40e4b65aef369c"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 12 14:46:29 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 12 15:12:02 2025 -0700"
      },
      "message": "dockerimg: more exacting prompt for building a dockerfile\n\nThis morning\u0027s claude moving target has forgotten how a Dockerfile\nworks, and it tries injecting direct shell into the file. Tell it\neverything should start with RUN.\n\nFor #83\nFor #85\n"
    },
    {
      "commit": "ff2df6a1f379812b360f6f3d3e40e4b65aef369c",
      "tree": "3245cee772c43f37919c81820bda6286ed317130",
      "parents": [
        "39bcf01eb98e2949d383b65d1651bf804308cc0f"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 12 14:45:29 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 12 14:45:33 2025 -0700"
      },
      "message": "dockerimg: improve errors if dockerfile fails to build\n\nUpdates #83\n"
    },
    {
      "commit": "39bcf01eb98e2949d383b65d1651bf804308cc0f",
      "tree": "929ce5636cf29f0043d5d1a88af485edad2b5788",
      "parents": [
        "e577ef7f883e2b8d54cd6862a23b2f42510d33a0"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 12 10:07:40 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 12 10:07:50 2025 -0700"
      },
      "message": "Added FAQ about no space left.\n"
    },
    {
      "commit": "e577ef7f883e2b8d54cd6862a23b2f42510d33a0",
      "tree": "30b11d3880b5425ec2e64780858628be54159f23",
      "parents": [
        "7a1136201c3444009e2eeda2fb13cb76c943443f"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon May 12 10:29:00 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon May 12 10:29:00 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "7a1136201c3444009e2eeda2fb13cb76c943443f",
      "tree": "479b870608115a330cd4da100e988bfd2d198887",
      "parents": [
        "a9a786b458e989a1ea2d6e8e2b35fb24b79de2cf"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon May 12 10:58:45 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon May 12 11:23:12 2025 +0100"
      },
      "message": "loop: on git fetch or checkout failure, retry without hooks\n\nFix #10 by removing git hooks on git fetch or checkout failure to solve problem where hooks might require dependencies not available in the container (e.g., git-branchless). This prevents errors during container initialization when git operations trigger hooks.\n\nWe can revisit this approach if we find users who need their hooks to run in the container environment.\n"
    },
    {
      "commit": "a9a786b458e989a1ea2d6e8e2b35fb24b79de2cf",
      "tree": "38e4d49a92543141ab9864d580bd237ab0fd5170",
      "parents": [
        "e31d2a95da49b58cabe4675335c2de80039007ec"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon May 12 10:52:34 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Mon May 12 11:21:29 2025 +0100"
      },
      "message": "dockerimg: Fix development version detection when run with -C flag\n\nWhen running sketch with the `-C` flag to change directories, the check for\ndevelopment version should happen in the sketch directory, not the\ntarget directory.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "e31d2a95da49b58cabe4675335c2de80039007ec",
      "tree": "efc2dbe13a82cf2042979386bc39d159422dde71",
      "parents": [
        "04e778cbe6955cccf56a4e52c163a1c2220ff84a"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun May 11 15:22:35 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sun May 11 15:22:35 2025 -0700"
      },
      "message": "webui: Fix message bubbles and tool calls overflow issues in timeline\n\nOn the bright side, Sketch fixed this with repeated \"hey, look at that\nscreenshot; there\u0027s horizontal truncation.\" On the downside, it got\nreally confused by shadow dom, and the solution doesn\u0027t look clean to\nme, with lots of inline CSS.\n\n~~~~~\n\nFixed various overflow issues in timeline component, particularly with\nhandling long bash commands in shadow DOM contexts:\n\n1. Message Bubbles:\n   - Added overflow constraints to message-bubble-container\n   - Changed max-width from 80% to 100% for better containment\n   - Added text-overflow: ellipsis for clean truncation\n\n2. Tool Cards:\n   - Implemented manual string truncation for bash commands\n   - Limited display to 80 chars with ellipsis for overflowing text\n   - Added CSS to constrain width in all contexts\n\n3. Shadow DOM Challenges:\n   - Standard CSS inheritance doesn\u0027t penetrate shadow DOM boundaries\n   - Component-specific styles required direct modification in render methods\n   - Parallel CSS and JS truncation needed for reliable overflow handling\n   - Multiple nested web components required coordinated width constraints\n\n4. Global Improvements:\n   - Added overflow-x: hidden to parent containers\n   - Used box-sizing: border-box for accurate sizing\n   - Fixed scroll container to prevent horizontal scrolling\n\nThe primary insight was that shadow DOM isolation prevented CSS-only\nsolutions from working reliably. Explicit string truncation in the\ncomponent code was needed alongside careful container width management.\nThis pattern may need to be applied to other web components that\ndisplay potentially lengthy content.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sc937c08ac1b7766fk\n"
    },
    {
      "commit": "04e778cbe6955cccf56a4e52c163a1c2220ff84a",
      "tree": "fe0d1b60f73d113cf82a8f66759e6496d3414942",
      "parents": [
        "05224846741b500d8103bd6930a7717e1211ef01"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 10 22:08:04 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 10 23:27:10 2025 -0700"
      },
      "message": "webui: name:sketch-webui, export web-components\n\nThe purpose of this change is so we can re-use the\nsketch-timeline custom element in a different app\nin a different repo, specifically the app that\nrenders publicly shared sketch session transcripts\nat sketch.dev/messages/\u003csession ID\u003e\n"
    },
    {
      "commit": "05224846741b500d8103bd6930a7717e1211ef01",
      "tree": "54eaad583c19b5c00719384a268d8dccab0dd13e",
      "parents": [
        "80b488d853e2766b638e65cfe44a5904d7cb24ee"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:26:08 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:26:08 2025 -0700"
      },
      "message": "browser: add window resize tool with chromedp\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s68bdc7fb84309a7ck\n"
    },
    {
      "commit": "80b488d853e2766b638e65cfe44a5904d7cb24ee",
      "tree": "abd280ec3924efb4dbbd72622129bc4af56e28ca",
      "parents": [
        "6458e7c751856a9f7f4004367cb6274e564a1489"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:21:54 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Sun May 11 01:22:37 2025 +0000"
      },
      "message": "Browser tools: initialize lazily and add timeouts.\n\nAlso rename browser_screenshot to browser_take_screenshot for clarity\\n- Update both Go and UI code to maintain consistency\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8a5cabff914f88dfk\n"
    },
    {
      "commit": "6458e7c751856a9f7f4004367cb6274e564a1489",
      "tree": "42bebd39701d0866ebb6da556ec3970af8a96d01",
      "parents": [
        "5ebdbb819bcbfcc77356c600fb1ad736433b2f07"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:07:54 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 18:08:12 2025 -0700"
      },
      "message": "README: Add instructions about connecting to Sketch container\n"
    },
    {
      "commit": "5ebdbb819bcbfcc77356c600fb1ad736433b2f07",
      "tree": "b341e124bfc37d1e118c4d815dbe75d45100e354",
      "parents": [
        "72252cbcb97840d724133be67c4c69cc69ebb2d3"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 17:20:29 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 17:20:29 2025 -0700"
      },
      "message": "Adding User Guide to README.md\n"
    },
    {
      "commit": "72252cbcb97840d724133be67c4c69cc69ebb2d3",
      "tree": "a361499dc3fa6b9af2be3e74cfd59fd8ba34690e",
      "parents": [
        "7ce5fb76d8748ebf73c5adf9d6cd8eb67716fba8"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 17:00:08 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 17:00:08 2025 -0700"
      },
      "message": "llm and everything: Update ToolResult to use []Content instead of string for multimodal support\n\nThis was a journey. The sketch-generated summary below is acceptable,\nbut I want to tell you about it in my voice too. The goal was to send\nscreenshots to Claude, so that it could... look at them. Currently\nthe take screenshot and read screenshot tools are different, and they\u0027ll\nneed to be renamed/prompt-engineered a bit, but that\u0027s all fine.\n\nThe miserable part was that we had to change the return value\nof tool from string to Content[], and this crosses several layers:\n - llm.Tool\n - llm.Content\n - ant.Content \u0026 openai and gemini friends\n - AgentMessage [we left this alone]\n\nExtra fun is that Claude\u0027s API for sending images has nested Content\nfields, and empty string and missing needs to be distinguished for the\nText field (because lots of shell commands return the empty string!).\n\nFor the UI, I made us transform the results into a string, dropping\nimages. This would have been yet more churn for not much obvious\nbenefit. Plus, it was going to break skaband\u0027s compatibility, and ...\nyet more work.\n\nOpenAI and Gemini don\u0027t obviously support images in this same way,\nso they just don\u0027t get the tools.\n\n~~~~~~~~~~ Sketch said:\n\nThis architectural change transforms tool results from plain strings to []Content arrays, enabling multimodal interaction in the system. Key changes include:\n\n- Core structural changes:\n  - Modified ToolResult type from string to []Content across all packages\n  - Added MediaType field to Content struct for MIME type support\n  - Created TextContent and ImageContent helper functions\n  - Updated all tool.Run implementations to return []Content\n\n- Image handling:\n  - Implemented base64 image support in Anthropic adapter\n  - Added proper media type detection and content formatting\n  - Created browser_read_image tool for displaying screenshots\n  - Updated browser_screenshot to provide usable image paths\n\n- Adapter improvements:\n  - Updated all LLM adapters (ANT, OAI, GEM) to handle content arrays\n  - Added specialized image content handling in the Anthropic adapter\n  - Ensured proper JSON serialization/deserialization for all content types\n  - Improved test coverage for content arrays\n\n- UI enhancements:\n  - Added omitempty tags to reduce JSON response size\n  - Updated TypeScript types to handle array content\n  - Made field naming consistent (tool_error vs is_error)\n  - Preserved backward compatibility for existing consumers\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s1a2b3c4d5e6f7g8h\n"
    },
    {
      "commit": "7ce5fb76d8748ebf73c5adf9d6cd8eb67716fba8",
      "tree": "1890bd46f87cf7261ba5a6aaa3fd2d110e7d67cc",
      "parents": [
        "022b3638c2d2691d60f430d8984959c91eee46ab"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 06:26:22 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 06:26:29 2025 -0700"
      },
      "message": "Revert \"llm: add service.ModelName\"\n\nTurns out I don\u0027t need this.\n\nThis reverts commit 022b3638c2d2691d60f430d8984959c91eee46ab.\n"
    },
    {
      "commit": "022b3638c2d2691d60f430d8984959c91eee46ab",
      "tree": "7459ef27d1e6d2ed83773acb9a33741fddbd730c",
      "parents": [
        "a997be617bd5548a307c708cdba325ea6562acec"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 06:14:21 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 10 06:14:49 2025 -0700"
      },
      "message": "llm: add service.ModelName\n"
    },
    {
      "commit": "a997be617bd5548a307c708cdba325ea6562acec",
      "tree": "1890bd46f87cf7261ba5a6aaa3fd2d110e7d67cc",
      "parents": [
        "dce8d84fdcda62e03b13c95d7614ee7ab983ddca"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 22:52:46 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 15:32:45 2025 -0700"
      },
      "message": "claudetool/onstart: add codebase analysis tool and basic memory support\n\nThis is a preliminary approach. Big high level questions include:\n\n* should we keep the multichoice tool prompting?\n* should we push the list of quidance files or respond with them during codereview?\n* should we use the list of docs and build files at all?\n* are there other files we should hint (e.g. editor settings, something from aider, etc.)?\n\nWe should probably also blog about dear_llm.md to stop the endless proliferation of new files.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "dce8d84fdcda62e03b13c95d7614ee7ab983ddca",
      "tree": "bf7f0dad1b07863b80ae16ea0a183a9c2b270b34",
      "parents": [
        "f59df72da9277859885d4dd65afe76d6de70fd0d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 12:27:19 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 15:32:17 2025 -0700"
      },
      "message": "claudetool: remove mention of go doc"
    },
    {
      "commit": "f59df72da9277859885d4dd65afe76d6de70fd0d",
      "tree": "c5972e45b3666b5e66277bc864b923bb6339771b",
      "parents": [
        "113e2053753d5b3e08be0f3509a204fe24ba5e87"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 12:24:03 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 15:31:54 2025 -0700"
      },
      "message": "claudetool: don\u0027t list out available binaries in bash tool\n\nIt does what it wants to do; I\u0027ve never seen it use this information.\nAnd there\u0027s no impact on Go eval, and it biases the model\ntowards assuming it is working in Go.\n\n"
    },
    {
      "commit": "113e2053753d5b3e08be0f3509a204fe24ba5e87",
      "tree": "1d86ecce8062bd94d0daeb6052623cde019f5e99",
      "parents": [
        "e97a8e54e0c7e5c5cabf29a00bce6a81094a6ca9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 21:59:40 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "git: add retry logic for checked out branch conflicts\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: se1c139889d8c3e3fk\n"
    },
    {
      "commit": "e97a8e54e0c7e5c5cabf29a00bce6a81094a6ca9",
      "tree": "166a672959cbee9c81e56e720eed3572dc375505",
      "parents": [
        "51e8e2b0c970ef488094a33b3c259583fe142dc5"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 14:53:33 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "git: Make \"git fetch sketch-host\" update origin refs as well.\n"
    },
    {
      "commit": "51e8e2b0c970ef488094a33b3c259583fe142dc5",
      "tree": "6ecd15e35a40aece2c24231a0540466c7117292d",
      "parents": [
        "d03318d51ca1e707698f1aab8d18ed83fc159cbe"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 21:41:12 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "dockerimg: Run git fetch when .git/info/refs is requested\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sca37f0dfd43f13e9k\n"
    },
    {
      "commit": "d03318d51ca1e707698f1aab8d18ed83fc159cbe",
      "tree": "ae2ee324779b56baa1bc0670aa6852366a5ad9ab",
      "parents": [
        "8236cbc9eadb1bf775bbfa24ccf04be2c69faaaf"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Thu May 08 13:09:12 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Fri May 09 15:06:33 2025 -0700"
      },
      "message": "sketch: Introduce versions for sketch state\n"
    },
    {
      "commit": "8236cbc9eadb1bf775bbfa24ccf04be2c69faaaf",
      "tree": "8d0024ce5d69622f452315947c4db5b815bad2b0",
      "parents": [
        "d74572d85c7bbb52b36dfc29338f42dc723caba8"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 09:57:57 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 09 11:47:36 2025 -0700"
      },
      "message": "llm/oai: add several more models\n"
    },
    {
      "commit": "d74572d85c7bbb52b36dfc29338f42dc723caba8",
      "tree": "e5db69c3873acb9ad8e8cbfbf208431aa39ac3be",
      "parents": [
        "078e85ae683cfcb6f0cc45dfbb7dd02aafec0046"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri May 09 13:50:04 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Fri May 09 13:50:04 2025 +0100"
      },
      "message": "docs: add DEAR_LLM.md with repository context for AI agents\n\nCreate a concise overview document to help AI agents understand\nthe Sketch repository architecture, components, and common development\nworkflows. Includes information about the dual binary pattern,\ncontainer system, and development gotchas that would be helpful\ncontext for future AI assistance.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "078e85ae683cfcb6f0cc45dfbb7dd02aafec0046",
      "tree": "750dbf13e8d47fefc1566a9922e7a393a0661b9c",
      "parents": [
        "15c9528318131e8b903199fa7dfe82dbe7b2ed91"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 08 17:28:34 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 08 17:28:34 2025 -0700"
      },
      "message": "ssh_theater: only edit conf if host doesn\u0027t resolve\n"
    },
    {
      "commit": "15c9528318131e8b903199fa7dfe82dbe7b2ed91",
      "tree": "15997f3dd5578e975288f30b5659e95b4c84c3bf",
      "parents": [
        "220a36d6404a3a86af2537ca8572b9e28c77bcb6"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 08 16:48:38 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu May 08 16:48:38 2025 -0700"
      },
      "message": "ssh_theater: ask the user before editing config\n"
    },
    {
      "commit": "220a36d6404a3a86af2537ca8572b9e28c77bcb6",
      "tree": "2329c0925b52432d519b7610b571328159ac5364",
      "parents": [
        "9320265a8e0ae7fb3091985c1999ed43bdae9525"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 08 19:06:26 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 08 12:44:11 2025 -0700"
      },
      "message": "experiment: remove not_done experiment\n\nIt didn\u0027t make a difference.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: sc2849bd18751e2cak\n"
    },
    {
      "commit": "9320265a8e0ae7fb3091985c1999ed43bdae9525",
      "tree": "25a424999bee4597b971764640985585ce46f792",
      "parents": [
        "4d54493fe3808ecd0c6a9a4d0bbcc7786e97b094"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 08 02:05:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 08 12:34:07 2025 -0700"
      },
      "message": "loop: update git commit instruction to use --trailer, add Change-ID\n\nWe have run \u0027git config\u0027 for the user, so we can trim those instructions and simplify.\n(And in unsafe mode, the user has \u0027git config\u0027 set up anyway.)\n\nInstead of prompting the model to manually add \u0027Co-Authored-By\u0027 as a line in the\ncommit message, now instruct it to use the --trailer option.\nThis streamlines adding a Change-ID trailer with a random string (s\u003crandom_hex\u003ek format).\n\nI\u0027d actually like to use precommmit hooks to automatically do all the trailer,\nbut that doesn\u0027t play nicely with -unsafe, so for now, do it this way.\nAt least we\u0027ll have Change-IDs that we can start using.\n(Pity the official change-id support in git hasn\u0027t landed yet.)\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9b68cbfa4c7eeb82k\n"
    },
    {
      "commit": "4d54493fe3808ecd0c6a9a4d0bbcc7786e97b094",
      "tree": "9877409fc95aaa32aed882426ea15464b8036e34",
      "parents": [
        "a4ad8af8b08a54326bbbd99d57110a42c459c54e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 13:33:53 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Thu May 08 19:25:30 2025 +0000"
      },
      "message": "all: support hiding subconvo output\n\nSome of it is systematically noisy.\n"
    },
    {
      "commit": "a4ad8af8b08a54326bbbd99d57110a42c459c54e",
      "tree": "91efd4a68b335315d91aa1fc41244e2faaeeb873",
      "parents": [
        "3b279a51ed0d83f3659be932d7e346609df42107"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 08 15:05:27 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 08 15:05:27 2025 +0100"
      },
      "message": "webui: Streamline playwright reporter config\n"
    },
    {
      "commit": "3b279a51ed0d83f3659be932d7e346609df42107",
      "tree": "4e15375aecbcf83a60d67b6da97c28fff7886dfc",
      "parents": [
        "b9e62fdfeb6d4050750aa7beceda13d7beb2223d"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 07 21:02:03 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 07 21:02:03 2025 -0700"
      },
      "message": "README.md: De-emphasize Go a bit.\n\nWe love Go, but Sketch works on other systems too!\n"
    },
    {
      "commit": "b9e62fdfeb6d4050750aa7beceda13d7beb2223d",
      "tree": "7544977472861074bea9ccac721026efdab8ad38",
      "parents": [
        "b529e733365034174f0e5c99e3f0fce347b34c5d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 18:34:53 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 19:17:50 2025 -0700"
      },
      "message": "loop: remove some Go-specific language from system prompt\n\nIt never used gopls anyway. :/"
    },
    {
      "commit": "b529e733365034174f0e5c99e3f0fce347b34c5d",
      "tree": "69491005dfacfdbabfbb244ac72468d85a5f7a99",
      "parents": [
        "d2f54c2e43ad3ad2c9b389068c1555c3e7f231f2"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 22:06:46 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 19:17:50 2025 -0700"
      },
      "message": "loop: disable multiple choice tool in oneshot mode\n\nThis change disables the multiple choice tool when Sketch is running in one-shot mode.\nIt adds an OneShot flag to the AgentConfig struct and conditionally includes\nthe multiple choice tool based on this flag.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "d2f54c2e43ad3ad2c9b389068c1555c3e7f231f2",
      "tree": "a57204539b914c7109b5a53456148970b1293357",
      "parents": [
        "f392251fe06355e73d80eae868916410ab18b08b"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 18:38:07 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 19:17:50 2025 -0700"
      },
      "message": "loop: improve update_tests.sh reliability\n\nEncouraging the agent to call the title tool immediately\nhas its drawbacks!"
    },
    {
      "commit": "f392251fe06355e73d80eae868916410ab18b08b",
      "tree": "a0719a5cc2a2b4d94bdf86e737dd0357fb14615d",
      "parents": [
        "fa66703d711e53c923109cd78a165ed58cbb29da"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 17:56:22 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 19:17:50 2025 -0700"
      },
      "message": "go.mod: bump to Go 1.24.3"
    },
    {
      "commit": "fa66703d711e53c923109cd78a165ed58cbb29da",
      "tree": "49eb4fe2e8891df4c43e0f6d1516736d4778bbed",
      "parents": [
        "6aaf6afdee5d097c23d5e80314ea13cf37bea491"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:13:27 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:13:27 2025 -0700"
      },
      "message": "llm/oai: add Mistral Medium 3 to oai models\n"
    },
    {
      "commit": "6aaf6afdee5d097c23d5e80314ea13cf37bea491",
      "tree": "add2c3678c614dd45b718ef1ff636bd2b012e8b2",
      "parents": [
        "6ab6fce0d5309447156935c39c3d29dc4977c49d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 20:47:13 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:04:30 2025 -0700"
      },
      "message": "experiment: make precommit always on\n\nRemove the precommit experiment flag and make commit message style guidance\nalways available when using the precommit tool.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "6ab6fce0d5309447156935c39c3d29dc4977c49d",
      "tree": "0f90c8ff0b221abc95cc3a05e72f9f1835edd497",
      "parents": [
        "1ed1cc459db26690eddb05da525e1580ae688b59"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 12:42:53 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:03:38 2025 -0700"
      },
      "message": ".dockerignore: add\n\nI\u0027m tired of sketch committing .DS_Store files.\n\nThere\u0027s probably a more general fix to be done here\nthat helps all users, but I don\u0027t see its shape,\nand this at least eases my frustration in the near term.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "1ed1cc459db26690eddb05da525e1580ae688b59",
      "tree": "d94c5ad81bdc6aa15af399081cac3d915592eadc",
      "parents": [
        "85de37e3be602ca67ef5e2f2185ee819323ec31c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 20:21:40 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:03:38 2025 -0700"
      },
      "message": "codereview: only run go mod tidy when go.mod has changed\n\nThis change modifies the codereview tool to only run \u0027go mod tidy\u0027 when\ngo.mod or go.sum files have been modified.\n\nThis makes sketch work better with non-Go projects.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "85de37e3be602ca67ef5e2f2185ee819323ec31c",
      "tree": "4332db4df2ab98f661731107102436291ae02ab9",
      "parents": [
        "a2a31508e1b7348a1337e2038c5560d4b1bc19d3"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 06:46:45 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:03:38 2025 -0700"
      },
      "message": "loop: encourage smaller diffs\n\nHopefully this will prevent the agent from being gratuitously \"helpful\".\nAnd small diffs are always welcome when reviewing.\n"
    },
    {
      "commit": "a2a31508e1b7348a1337e2038c5560d4b1bc19d3",
      "tree": "7c3234c35772260a8cbee23d78ec37d7775a1fc7",
      "parents": [
        "c3c202317359dae2647aee2bcdbe61382fa3b99f"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 12:37:18 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:03:38 2025 -0700"
      },
      "message": "loop: split title tool into title and precommit tools\n\ntitle wants to be called early, as soon as the topic is clear.\nprecommit wants to be called late, just before first git commit.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "c3c202317359dae2647aee2bcdbe61382fa3b99f",
      "tree": "0ac08a058671319e2411df587a72f36e30d1935a",
      "parents": [
        "924a77070bc1edc1a861de6462a4ef7bb863e648"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 05:46:04 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:02:27 2025 -0700"
      },
      "message": "webui, termui: use 〰️ for tool call failures\n\nReplaces 🙈 and 🔔 and ❌ and ⚠️.\n\nMaybe this one will stick. It\u0027s low key and a little wobbly.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "924a77070bc1edc1a861de6462a4ef7bb863e648",
      "tree": "c29b5c835e41c7df9ead819659b8ec9283ade2fc",
      "parents": [
        "4936de3834a2c70db563d19975c072bb42d953cc"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 02:14:40 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:02:13 2025 -0700"
      },
      "message": "claudetool: improve commit message guidance in precommit tool\n\nThe precommit tool now:\n1. Directly executes git commands to extract example commit messages\n2. Displays actual commit message examples from the repository\n3. Includes stronger, mandatory language about following the commit style\n\nThis improves compliance with the repository\u0027s commit message style by\nproviding clear examples rather than just instructions on how to view them.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "4936de3834a2c70db563d19975c072bb42d953cc",
      "tree": "b4e4e9eb513236636c523ca70d7e2983157af156",
      "parents": [
        "593ca6455ea14bf48f6ae4ff6f5d3296c6befa7b"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 13:50:04 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:02:13 2025 -0700"
      },
      "message": "all: make update_tests.sh scripts location-independent\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "593ca6455ea14bf48f6ae4ff6f5d3296c6befa7b",
      "tree": "195d854dcbad19949840d997701315c6c2496965",
      "parents": [
        "a23587b969adfacca40bd443b74fa37d2d91dc79"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 05:19:32 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:00:16 2025 -0700"
      },
      "message": "claudetool: disable prompt caching for one-shot subconvos"
    },
    {
      "commit": "a23587b969adfacca40bd443b74fa37d2d91dc79",
      "tree": "ce1bac36e1e50390e14f1e3a6c7d1543c5f5dbd7",
      "parents": [
        "07e98cc3bbb33571af4f30b402c611ded849a323"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 12:42:53 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 07 14:00:16 2025 -0700"
      },
      "message": "cmd/sketch: make browser flag default behavior conditional on one-shot mode\n\n- If the flag is explicitly set (either true or false), respect that choice\n- If the flag is not set:\n  - In normal mode, default to true (open browser)\n  - In one-shot mode, default to false (don\u0027t open browser)\n\nThis change prevents the browser from opening automatically when in one-shot\nmode unless explicitly requested with -open\u003dtrue.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "07e98cc3bbb33571af4f30b402c611ded849a323",
      "tree": "cdd3eca6b8d0fb88fddf5cb410b99a31d97337e9",
      "parents": [
        "7ac5ed06fe591a4a5a904929e16a9d1982bfa781"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 16:01:33 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 16:01:33 2025 +0100"
      },
      "message": "docs: Update CONTRIBUTING and README for WebUI development server setup and usage\n"
    },
    {
      "commit": "7ac5ed06fe591a4a5a904929e16a9d1982bfa781",
      "tree": "635a2f6a444037d85c5ee6334230053357f04bca",
      "parents": [
        "47fbca6b478414e6a07a23dbb911f73380340a60"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 15:26:10 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 15:26:10 2025 +0100"
      },
      "message": "webui: Roll back broken changes (ef58e06 and 47fbca6)\n"
    },
    {
      "commit": "47fbca6b478414e6a07a23dbb911f73380340a60",
      "tree": "25c36f0ef5d97a06fafc86c356dd1d93e62dec63",
      "parents": [
        "ef58e063d0d82f318a766bd2e91f9deceff2cc0c"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 07 12:38:12 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 07 12:38:12 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "ef58e063d0d82f318a766bd2e91f9deceff2cc0c",
      "tree": "1bfd9a208133defb3e21e663d560cdb405b03cda",
      "parents": [
        "5e8aeadc5bd4b521f817d2ea98890a1dffae53a8"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:32:58 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:36:21 2025 +0100"
      },
      "message": "webui: Refactor tool calls\n"
    },
    {
      "commit": "5e8aeadc5bd4b521f817d2ea98890a1dffae53a8",
      "tree": "635a2f6a444037d85c5ee6334230053357f04bca",
      "parents": [
        "c575fd79d923bbbe395dcae1d04681e8ead19818"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 06 16:21:57 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:34:12 2025 +0100"
      },
      "message": "webui: Simplify tool call rendering code\n"
    },
    {
      "commit": "c575fd79d923bbbe395dcae1d04681e8ead19818",
      "tree": "33273e0f496940ca7d25a9c6e6bccd915f2b29d7",
      "parents": [
        "b6d6d384a2cdbabd2d6abc94bd6b2c6c937d5e22"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Tue May 06 15:46:38 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:34:11 2025 +0100"
      },
      "message": "webui: Fix demo page\n\n- Change asset root for vite\n- Update mock handlers to support SSE by replacing long polling implementation with Server-Sent Events (SSE) in webui mock handlers.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "b6d6d384a2cdbabd2d6abc94bd6b2c6c937d5e22",
      "tree": "64194d0e29739fc0dd686c23590f140d3ae883b7",
      "parents": [
        "31f152493929b3b171c140c2e0e22dbcf9059cac"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 10:29:03 2025 +0100"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Wed May 07 13:34:11 2025 +0100"
      },
      "message": "claudetool: Add SKETCH\u003d1 to bash tool environment\n\nThis adds the SKETCH\u003d1 environment variable to all commands executed\nby the bash tool. This makes the SKETCH environment variable available\nto scripts and programs run through the bash tool.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "31f152493929b3b171c140c2e0e22dbcf9059cac",
      "tree": "80eefea2e5f1977e89d7bec71efc0c85562bc77d",
      "parents": [
        "4962f153fa0d6812543addd690be8dba8c04a406"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 16:03:49 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 16:10:02 2025 -0700"
      },
      "message": "dockerimg: always show build output\n\nThe previous --progress\u003dplain was a bit too quiet, it also depended\non installing buildx which brew does not do by default.\n"
    },
    {
      "commit": "4962f153fa0d6812543addd690be8dba8c04a406",
      "tree": "3a90c5736422c77f8ef3dc8d552640e65f1e07a0",
      "parents": [
        "8b43ffbf41d06aee5ad5c734f1661a3b62cfe1a9"
      ],
      "author": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 17:24:20 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 17:24:20 2025 +0000"
      },
      "message": "all: fix formatting\n"
    },
    {
      "commit": "8b43ffbf41d06aee5ad5c734f1661a3b62cfe1a9",
      "tree": "3a9ce0f6f5330234e89bfb1ed65d4d10aff33ec9",
      "parents": [
        "33d282f80db786cc60ba521a38ed5166f23239ed"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 21:44:18 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 10:23:39 2025 -0700"
      },
      "message": "Install chromium for tests\n"
    },
    {
      "commit": "33d282f80db786cc60ba521a38ed5166f23239ed",
      "tree": "9ed1f15c6d3081d5bef7d16b9d72e78a2c7780cf",
      "parents": [
        "a9d87aa69cfefdc91ec7aaa6bc42907749748e76"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Sat May 03 04:01:54 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 10:23:39 2025 -0700"
      },
      "message": "Add browse tool support.\n\nI reviewed some MCPs (using OpenAI\u0027s deep research to help), and it\nhelped me choose chromedp as the relevant library and helped me come up\nwith an interface. This commit adds chrome to the Docker image which is\nkind of big. (I\u0027ve noticed that it\u0027s smaller on Ubuntu, where it doesn\u0027t\npull in X11.) go-playwright was a library contender as well.\n\nImplement browser automation tooling using chromedp\n\nThis implementation adds browser automation capabilities to the system via the chromedp library,\nenabling Claude to interact with web content effectively.\n\nKey features include:\n\n1. Core browser automation functionality:\n   - Created new browsertools package in claudetool/browser\n   - Implemented tools for navigating, clicking, typing, waiting for elements,\n     getting text, evaluating JavaScript, taking screenshots, and scrolling\n   - Added lazy browser initialization that defers until first use\n   - Integrated with the agent to expose these tools to Claude\n\n2. Screenshot handling and display:\n   - Implemented screenshot storage with UUID-based IDs in /tmp/sketch-screenshots\n   - Added endpoint to serve screenshots via /screenshot/{id}\n   - Created dedicated UI component for displaying screenshots\n   - Ensured proper responsive design with loading states and error handling\n   - Fixed URL paths for proper rehomed URL support\n   - Modified tool calls component to auto-expand screenshot results\n\n3. Error handling and reliability:\n   - Added graceful error handling for browser initialization failures\n   - Implemented proper cleanup of browser resources\n\nThe browser automation tools provide a powerful way for Claude to interact with web content,\nmaking it possible to scrape data, test web applications, and automate web-based tasks.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "a9d87aa69cfefdc91ec7aaa6bc42907749748e76",
      "tree": "0575b15619881ac1bedfc71dd552c05b64bbe152",
      "parents": [
        "df6d7b4a0d5fcf59cfed41cd518bb9489f80da5e"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 10:08:56 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 10:08:56 2025 -0700"
      },
      "message": "llm/gem: remove unused field\n"
    },
    {
      "commit": "df6d7b4a0d5fcf59cfed41cd518bb9489f80da5e",
      "tree": "581e22dfb76bbac4c9ec28fca57ec6c7edf875ea",
      "parents": [
        "37aaf08095add87b345bfc87d4aae4d2e95ed0fd"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 09:56:07 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Tue May 06 09:56:07 2025 -0700"
      },
      "message": "README: skip discord application process\n"
    },
    {
      "commit": "37aaf08095add87b345bfc87d4aae4d2e95ed0fd",
      "tree": "b831c2e6f1701b0df480a88c6bf9d7bc633c8362",
      "parents": [
        "e01ea0e6d41c8235261d09d2847489ff298d1ed9"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue May 06 03:15:55 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Tue May 06 03:28:19 2025 +0000"
      },
      "message": "Fix terminal not loading when first tabbed to.\n\nThe terminal for some reason, at least in Safari, thought it was\nreally small, so it would be hard to use until you resized your window.\nI got Claude, below, to make it lazily init when you tab to the\nterminal view, which is better anyway.\n\nImplement lazy initialization for sketch-terminal component\n\nInstead of initializing the terminal when the component is created (which causes sizing issues when the terminal isn\u0027t visible), this change defers initialization until the terminal tab is actually activated.\n\nThis solves the problem where the terminal was initialized with strange dimensions because:\n1. The terminal is now only initialized when its tab is visible\n2. We use a flag to track initialization state\n3. The resize handler only runs for initialized terminals\n\nThis approach is more efficient and avoids unnecessary initialization when the terminal isn\u0027t being used.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "e01ea0e6d41c8235261d09d2847489ff298d1ed9",
      "tree": "d952975d718f69092a6cbccb420c0d1e46f3e34a",
      "parents": [
        "085f74c133c2c467622a7e34143751f37836c7c6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 02:03:26 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 19:06:57 2025 -0700"
      },
      "message": "experiment: fix more dumb bugs\n"
    },
    {
      "commit": "085f74c133c2c467622a7e34143751f37836c7c6",
      "tree": "7c39fd342c953eb6f9f8ac46d9867fa8a64c0836",
      "parents": [
        "b1cca6f19bf38a7c22793648012598b6a2baf9fb"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:58:25 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:59:42 2025 -0700"
      },
      "message": "experiment: fix Flag.Set\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "b1cca6f19bf38a7c22793648012598b6a2baf9fb",
      "tree": "82af4bf88162497862d862b8831fdd12820fd26f",
      "parents": [
        "29fea840fbe3c279e1480d5f78cff4be697b7ca5"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:52:55 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:54:20 2025 -0700"
      },
      "message": "dockerimg: pass -x flag to inner sketch to enable experimental features\n\nThe -x flag needs to be passed from the outer sketch process to the inner sketch process\nto ensure experimental features are correctly enabled across both processes.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "29fea840fbe3c279e1480d5f78cff4be697b7ca5",
      "tree": "44e4598253553f92de4dd089409f821243b1ca0f",
      "parents": [
        "5cca56ff3aec7785494c6a9fcd4e846900968ed1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:51:09 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:53:08 2025 -0700"
      },
      "message": "llm/ant: replace fmt.Printf with slog in retry logic\n\nBreaks termui.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "5cca56ff3aec7785494c6a9fcd4e846900968ed1",
      "tree": "25b99a05ae7450fc210110414252210d189ca993",
      "parents": [
        "4fcde4a88794aec937fd116d6059871297d974e7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 01:10:16 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:32:34 2025 -0700"
      },
      "message": "loop: migrate system prompt to Go templates\n\nIt was bound to happen eventually.\nBite the bullet now.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "4fcde4a88794aec937fd116d6059871297d974e7",
      "tree": "c64431e4d72508f414c4dea441e47b079e5476fe",
      "parents": [
        "36a5cc15faa43d028f87706ca286adb7f5109120"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:28:13 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:28:13 2025 -0700"
      },
      "message": "loop: clarify tool-ends-turn logic\n\nIt mis-handled ends-turn-tools in subconvos.\nThe multi-if was confusing.\nIt missed an early return.\nGenerally unindent.\n\nMost of this doesn\u0027t matter, but when I noticed the subconvo\nand the weird if structure, I just kept going...\n"
    },
    {
      "commit": "36a5cc15faa43d028f87706ca286adb7f5109120",
      "tree": "a88ca83039990dd73f9582b6c1428af72da69e91",
      "parents": [
        "d42577f657516eba00e41bd266d581b88e28ae05"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 17:59:53 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "loop: don\u0027t rename title tool, even with precommit experiment\n\nDoing so breaks various UIs.\n"
    },
    {
      "commit": "d42577f657516eba00e41bd266d581b88e28ae05",
      "tree": "eaf121c494a873a112213599c15045aaabba43c8",
      "parents": [
        "8fdf753004ffa6f0c2df098d0ff09b60e8c3a074"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 17:59:00 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "experiment: actually enable experiments when using -all\n\nOoops.\n\n"
    },
    {
      "commit": "8fdf753004ffa6f0c2df098d0ff09b60e8c3a074",
      "tree": "0476805ce35aaee0879655c08c439cc47f070a46",
      "parents": [
        "c72ceb21966c5e7685db6c9bf28074042265d683"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 00:56:12 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "termui: remove git ref beautification for cherry-pick commands\n\nUse short SHAs instead of branch/ref names in cherry-pick suggestions\nto avoid issues with git ref skew between local and sketch-host.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "c72ceb21966c5e7685db6c9bf28074042265d683",
      "tree": "8113c9aa9fe4fe689b8b1e3b7ff01c1aa5ff27bb",
      "parents": [
        "bfebfd141e023d12ae44ddcbcfc78c4d83b13344"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 23:30:15 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "claudetool: add go mod tidy check to codereview\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e"
    },
    {
      "commit": "bfebfd141e023d12ae44ddcbcfc78c4d83b13344",
      "tree": "49636077d10256b518a049a665600d0f2f9f10de",
      "parents": [
        "a70246a5b4b528205491bf3052ac0cf98124e9c7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 06 00:41:25 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "go.mod: tidy\n"
    },
    {
      "commit": "a70246a5b4b528205491bf3052ac0cf98124e9c7",
      "tree": "441f2c42a750b69cd5ff3229be7bf2d420a2b17f",
      "parents": [
        "f4047bbd0440a5cec265ef6805f97d18ca3b255e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 16:26:18 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "claudetool/codereview: add readme.md\n"
    },
    {
      "commit": "f4047bbd0440a5cec265ef6805f97d18ca3b255e",
      "tree": "e8d00718fe1363d3826156bc5ce61fad1c25c582",
      "parents": [
        "e750ec9fb4821e241d6f0fbdfa1aeb031d025168"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 23:02:56 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "claudetool/codereview: new package extracted from claudetool\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "e750ec9fb4821e241d6f0fbdfa1aeb031d025168",
      "tree": "3ebd4fd9b86f68888e5cc4c0d22c3c5171cedb3c",
      "parents": [
        "3659d8714d31bad050d36043b67efd76a8d53b77"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 23:01:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 18:20:24 2025 -0700"
      },
      "message": "webui: change tool call failure icon to be less alarming\n\nModified the tool call error indicator to use an information icon (ℹ️) instead of a warning symbol (⚠️)\nand updated the color scheme to use a neutral gray instead of alarming red.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "3659d8714d31bad050d36043b67efd76a8d53b77",
      "tree": "2803c54c63628e397e63bdbbe4fa2647a4d5f556",
      "parents": [
        "021557a7d33dacd4fedb9a4677fc93c48569d57a"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 17:52:23 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 17:52:27 2025 -0700"
      },
      "message": "all: more gemini key plumbing\n"
    },
    {
      "commit": "021557a7d33dacd4fedb9a4677fc93c48569d57a",
      "tree": "13a020ae99f9f86de4b2b10d919427c9287f3de8",
      "parents": [
        "5a7b3698b523365fe070ffcd1019c704c2c3a7b5"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 23:20:53 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 16:58:53 2025 -0700"
      },
      "message": "Allow multiplechoice tool to end the model turn\n\nAdd EndsTurn field to llm.Tool to indicate if a tool should force the end of a turn.\nSet the multiplechoice tool to end the turn by setting EndsTurn\u003dtrue.\nUpdate OnResponse to check for tools that should end the turn.\n\nTranscript of the chat for this change:\nhttps://sketch.dev/messages/1f4n-17a3-hmfx-71gg\n\nNote that I did ask it to investigate an alternative approach, but decided\nthis one (explicit EndsTurn field on Tool) was a better trade-off than\nthe alternative (altering the Tool.Run signature).\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "5a7b3698b523365fe070ffcd1019c704c2c3a7b5",
      "tree": "1b90d8fd84b6e9c24a6a131e1a89afc4416e0b52",
      "parents": [
        "f53875fa18db64d5fa73f3b163314c1bb021db34"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 16:49:15 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 16:50:08 2025 -0700"
      },
      "message": "cmd/sketch, dockerimg: more gemini key plumbing\n\nNext up: SKETCH_* env vars\n\nFor #60\n"
    },
    {
      "commit": "f53875fa18db64d5fa73f3b163314c1bb021db34",
      "tree": "165eecf2b0a58e3bb7c25e9ab9f310ffdf2d160d",
      "parents": [
        "923a3bad481d1881aa895f1262bfa8f07d37374f"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 16:41:34 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 16:41:48 2025 -0700"
      },
      "message": "remove errant console log\n"
    },
    {
      "commit": "923a3bad481d1881aa895f1262bfa8f07d37374f",
      "tree": "a0b1d607e5c291e198df179c1624e0e652b50a12",
      "parents": [
        "4d4e8075e4df5249537e3ec96fea72a8bcc2399d"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:27:13 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:27:13 2025 -0700"
      },
      "message": ".github/workflows: run tests with GOEXPERIMENT\u003dsynctest\n\nSo those tests don\u0027t rot again.\n"
    },
    {
      "commit": "4d4e8075e4df5249537e3ec96fea72a8bcc2399d",
      "tree": "ee1a4ae9fbac1614aefe235a5ea96814969fc420",
      "parents": [
        "6f446faed9f79e08362d22dfc9c79b15cba5f55c"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:00:59 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:17:27 2025 -0700"
      },
      "message": "loop: use stringer for State.String, use String in slogs\n\n"
    },
    {
      "commit": "6f446faed9f79e08362d22dfc9c79b15cba5f55c",
      "tree": "4abe9e1961f152d83974411319e193d40537ee30",
      "parents": [
        "3871a09ecaeead3e67d95a9694ab0fb38fa5e8fe"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 14:51:49 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 15:17:27 2025 -0700"
      },
      "message": "experiment: don\u0027t panic when Enabled called with unknown name"
    },
    {
      "commit": "3871a09ecaeead3e67d95a9694ab0fb38fa5e8fe",
      "tree": "17d7d56c97fef75c994c79e750cc54a4af51adb5",
      "parents": [
        "961cc9e4d4b527d1924d8919d9294fc53eebab40"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 21:54:56 2025 +0000"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 15:08:10 2025 -0700"
      },
      "message": "Update agent_user_cancel_test.go to use new package structure\n\n- Replace imports from sketch.dev/ant to sketch.dev/llm and sketch.dev/llm/conversation\n- Replace ant.* types with llm.* types\n- Update MockConvo to implement CancelToolUse method\n- Update method signatures like OnToolResult\n- Change InnerLoop references to processTurn per recent changes\n- Fix Agent struct initialization to match new structure\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "961cc9e4d4b527d1924d8919d9294fc53eebab40",
      "tree": "81e01c5ae3e1c122155079346a0cf0c2b016e632",
      "parents": [
        "c5b8ed462121e5f0d3abcf0ea17c00bb9e8b8846"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 14:33:33 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 14:38:11 2025 -0700"
      },
      "message": "skabandclient: send model name on start of session\n\nFor #60\n"
    },
    {
      "commit": "c5b8ed462121e5f0d3abcf0ea17c00bb9e8b8846",
      "tree": "b1723cd55a140fd1707f274ab71972f6a48994ea",
      "parents": [
        "d7970e62c34243aaa9c7a6405ceedfb9a073a783"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 20:28:34 2025 +0000"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Mon May 05 21:06:35 2025 +0000"
      },
      "message": "Add -termui\u003dfalse flag to prevent panic in non-TTY environments\n\n- Added -termui flag to control terminal UI usage (defaults to true)\n- Added PTY detection to automatically disable terminal UI in non-TTY environments\n\nSketch did some weird stuff here, so this isn\u0027t particularly co-authored\nby sketch.\n"
    },
    {
      "commit": "d7970e62c34243aaa9c7a6405ceedfb9a073a783",
      "tree": "aaf5359fe136652624580e48d240d732790de3c2",
      "parents": [
        "e2518e5c7b80d3f0d8f3017e34b19e59d6deeac6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 01 01:56:28 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "claudetool: change title tool to precommit, add commit style guidance\n"
    },
    {
      "commit": "e2518e5c7b80d3f0d8f3017e34b19e59d6deeac6",
      "tree": "4d23f4326e76a8f587b4a148aa4347cdc9d243f6",
      "parents": [
        "503b5e3543f69cc56c05bd02ce48666259d01f90"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 11:13:40 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "claudetool: add experimental LLM reviewer stage"
    },
    {
      "commit": "503b5e3543f69cc56c05bd02ce48666259d01f90",
      "tree": "b1d5efec44e4ff2d6094758b7ccb8d306055c53a",
      "parents": [
        "d7e56386b4243bb6b2f303ef824418bae971a836"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:30:55 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "loop: add not_done experiment\n\nThis attempts to get the LLM to introspect a bit more\nwhile calling the done tool, encouraging it to change\nitself mind if it thinks better of its progress\nwhile working through the checklist.\n"
    },
    {
      "commit": "d7e56386b4243bb6b2f303ef824418bae971a836",
      "tree": "cb2d5668a2bdb0b4b1c86864c846dbeb9708d6ef",
      "parents": [
        "c6a2c2408e1fbacbff92931190b3558b8e353944"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:22:08 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "loop: pull done tool description out into a constant"
    },
    {
      "commit": "c6a2c2408e1fbacbff92931190b3558b8e353944",
      "tree": "d3ea94cd8f8190f0561b23b2d5d094b2406285eb",
      "parents": [
        "b4782147bb79cd34495c4418a351672bc44035de"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 22 18:04:16 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "loop: clean up whitespace"
    },
    {
      "commit": "b4782147bb79cd34495c4418a351672bc44035de",
      "tree": "57e11cb271a479c09f577df246ceb619b451a99f",
      "parents": [
        "f396a0014767e7efe619e01a0f1ad371147b385b"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 19:16:54 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon May 05 13:48:06 2025 -0700"
      },
      "message": "experiment: add simple way to toggle experimental features"
    },
    {
      "commit": "f396a0014767e7efe619e01a0f1ad371147b385b",
      "tree": "533d363b29b4acef954a614db612220f757f8ec9",
      "parents": [
        "1dc21374a34fab022eb9138a73ad6b7b566701ec"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 13:12:11 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 13:13:33 2025 -0700"
      },
      "message": "Explaining how to use -docker-args to facilitate some additional sketch inception.\n"
    },
    {
      "commit": "1dc21374a34fab022eb9138a73ad6b7b566701ec",
      "tree": "37e6edd33743e35bd62d1d6b3ed4166e3464cd42",
      "parents": [
        "8fd510465d87574f64135c16d67f4b6d519a9a83"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 19:54:44 2025 +0000"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Mon May 05 13:13:33 2025 -0700"
      },
      "message": "Add docker-args flag to pass arguments to docker create command\n\nThis change allows users to pass additional arguments to the docker create command,\nwhich can be useful for customizing the container environment (e.g. adding volumes,\nsetting resource limits, etc).\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n\nUpdate docker-args flag to handle space-separated arguments with escaping\n\n- Created parseDockerArgs function to handle space-separated arguments with quotes and escaping\n- Added comprehensive tests for argument parsing\n- Updated CLI help text to reflect the new format\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "8fd510465d87574f64135c16d67f4b6d519a9a83",
      "tree": "65a17d20a1a8e514e8545941dfd4ca264700a2e0",
      "parents": [
        "a4b19f822c6c46bd46e4b0f47983a3ee72374d72"
      ],
      "author": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 12:52:43 2025 -0700"
      },
      "committer": {
        "name": "David Crawshaw",
        "email": "david@zentus.com",
        "time": "Mon May 05 12:56:58 2025 -0700"
      },
      "message": "dockerimg: do not include tmp-sketch-dockerfile in image\n\nFixes #39\n"
    },
    {
      "commit": "a4b19f822c6c46bd46e4b0f47983a3ee72374d72",
      "tree": "ec40da15725ee8f81681cd10f10702eb9f770ecc",
      "parents": [
        "995704692a260e7792a6116d19882bc1943e08b4"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 10:22:59 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Mon May 05 10:40:05 2025 -0700"
      },
      "message": "termui: always call ui.updatePrompt\n\nFixes #62\n"
    }
  ],
  "next": "995704692a260e7792a6116d19882bc1943e08b4"
}
