)]}'
{
  "log": [
    {
      "commit": "83b2d35b61eb68c0d633a10c2f5b7c0905e584df",
      "tree": "b29314fe23190123cc4e24d2327a237de7ebf096",
      "parents": [
        "3b733a5e21229c1ff29389895bb587c0243d6ba7"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 11:39:50 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Sat May 24 12:07:43 2025 -0700"
      },
      "message": "claudetool/codereview: expand on when to commit vs revert"
    },
    {
      "commit": "9daa5183df5270beaf5611c20e4d77cd7cfe21f7",
      "tree": "84bd4bf7d7bfbc723925bfae2af828cd9e7ccd0b",
      "parents": [
        "55c87e3ababb0800b5710cbb11bec4dea8c13515"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 16 18:34:00 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue May 20 14:27:29 2025 -0700"
      },
      "message": "experiment: remove llm_review experiment and associated code\n\nIt creates confusion for the agent and doesn\u0027t provide much value.\nPerhaps with better prompt engineering, but I can\u0027t invest\nin that much right now.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s9f2a8c418876c498k"
    },
    {
      "commit": "f163e9e785845bed2d7fba31ddf06a22a2e1e853",
      "tree": "c728e8da4f5c9a7a3d885f3130bc9bde13f28c3e",
      "parents": [
        "de5f74466b6db86c310762d627ea5f05b24cd08e"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 12:38:30 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 13:17:42 2025 -0700"
      },
      "message": "claudetool/codereview: stop checking string iteration patterns\n\nEven frontier LLMs get confused by these recent language improvements.\nI\u0027m sick of fighting them (i.e. watching them fight themselves).\nWe\u0027ll just have to wait for them to either get more capable,\nor to learn the new idioms. Sigh.\n"
    },
    {
      "commit": "de5f74466b6db86c310762d627ea5f05b24cd08e",
      "tree": "12196afbbb7362c93883cf63fe8d94d5e87b5387",
      "parents": [
        "fbbf83bba97e2e2fd5e5ea1693c96efce1fdc3b1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 18:32:32 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 13:17:42 2025 -0700"
      },
      "message": "claudetool: ignore some gopls (/vet) checks\n\nFixes #95\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s934f225a42c1d576k\n"
    },
    {
      "commit": "74d690e7b4794f2c164a9da30dd106a002b935d9",
      "tree": "412f1ad777e599ed61904c7f80c53859315babab",
      "parents": [
        "039fc34bd9c8f7cf3e9f3c9aeee2e9677ce28e00"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 14 18:16:03 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 15 12:40:29 2025 -0700"
      },
      "message": "claudetool: remove knowledge base, focus on about sketch\n\nWe should have a more general kb.\nMeanwhile, this is important and standalone.\nMake it all clearer and sharper.\n"
    },
    {
      "commit": "75f93a1e5f32366c138c1584fdeb4919e257719d",
      "tree": "977a7932cbfd1c1f95b0b56cbe0930a5aeb5e7b8",
      "parents": [
        "a10f151746c0dafd073d4998755bedbec8f82db6"
      ],
      "author": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 15 13:51:55 2025 +0000"
      },
      "committer": {
        "name": "Pokey Rule",
        "email": "755842+pokey@users.noreply.github.com",
        "time": "Thu May 15 14:24:48 2025 +0000"
      },
      "message": "codereview: Filter out non-existent files from related files suggestions\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s8c2a925e22191308k\n"
    },
    {
      "commit": "49edc92f95cab092a7ee62c350c6e69275b50cc8",
      "tree": "946b8359f6187ed630c4d08fa05e91fe1bc5a48d",
      "parents": [
        "52eeb15cf2f70caaadc4e0722a3b687ad9a91981"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Wed May 14 09:45:45 2025 -0700"
      },
      "committer": {
        "name": "Autoformatter",
        "email": "bot@sketch.dev",
        "time": "Wed May 14 16:46:49 2025 +0000"
      },
      "message": "agent: move \"sketch-base\" into git\n\nThe agent\u0027s notion of \"initial commit\" is kind of special, in that it\nis used as the \"base\" for a bunch of git operations. It\u0027s hard for\nthe user to change (we only provide a workflow via restart), yet\nsometimes you want to do just that.\n\nSo, instead we put it as data inside of it, named as a tag sketch-base.\nIt\u0027s abusing tags, but branches are no better.\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": "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": "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": "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": "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": "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"
    }
  ]
}
