)]}'
{
  "log": [
    {
      "commit": "194bfa8cc3970d28f2d072dc82142e24b7e56c9f",
      "tree": "8cf0872d8d1d6b1ab5eec4ef1f20ab7b201a7de9",
      "parents": [
        "ba351be3a9e50c67baef59af5ee35e3b654727e1"
      ],
      "author": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Jun 24 06:03:06 2025 -0700"
      },
      "committer": {
        "name": "Philip Zeyliger",
        "email": "philip@bold.dev",
        "time": "Tue Jun 24 06:03:06 2025 -0700"
      },
      "message": "sketch: add MCP support\n\nLets you initialize extra tools via MCP. This is additive, so it\u0027s\nharmless enough.\n\nHere are some examples of the kind of things you can pass to the -mcp\nflag.\n\n  {\"name\": \"context7\", \"type\": \"http\", \"url\": \"https://mcp.context7.com/mcp\"}\n  {\"name\": \"context7-http\", \"type\": \"http\", \"url\": \"https://mcp.context7.com/mcp\"}\n  {\"name\": \"context7-stdio\", \"type\": \"stdio\", \"command\": \"npx\", \"args\": [\"-y\", \"@upstash/context7-mcp\"]}\n  {\"name\": \"context7-sse\", \"type\": \"sse\", \"url\": \"https://mcp.context7.com/sse\"}\n  {\"name\": \"local-tool\", \"type\": \"stdio\", \"command\": \"my_tool\", \"args\": [\"--option\", \"value\"], \"env\": {\"TOKEN\": \"secret\"}}\n  { \"name\": \"playwright\", \"command\": \"npx\", \"args\": [ \"@playwright/mcp@latest\" ]}\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s259a35d11e7bd660k\n"
    },
    {
      "commit": "2a32f01e45169200bfb252031ca880ef09d7c0c2",
      "tree": "012e403e57be0c333ff1107b3f096f619c08c33a",
      "parents": [
        "3d040bd66f81a9211e616ef755b261323d4fea95"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:40:07 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu Jun 05 19:42:17 2025 -0700"
      },
      "message": "go.mod: bump to Go 1.24.4\n\nand use this opportunity to bust the cache.\ngood to do every once in a while.\n"
    },
    {
      "commit": "67b4c77c37021647363ed36d4a2b87e5d0925baf",
      "tree": "d1cf08a4fefaf0a8c060c90356f53aee434eab01",
      "parents": [
        "bf381a7b6c6df65e7b74796181ab0489566e3795"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 30 08:46:27 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 30 08:58:10 2025 -0700"
      },
      "message": "claudetool: minor auto-install cleanup\n\nFollow-up to 495c1fa247565e21b36bcb847c6cd3f08e0e196f"
    },
    {
      "commit": "6e35332ceac45166d6dd549d1e3d94937f683320",
      "tree": "87b4eeea74b9f6d9786d99983a976c1cf0f7ff05",
      "parents": [
        "8d8b7ac6b00b1d0b3a2c6d3a4079e2c2fb76cc8a"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 21 18:21:24 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed May 21 11:36:32 2025 -0700"
      },
      "message": "all: remove testify\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s51244611964f2413k"
    },
    {
      "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": "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": "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": "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": "cf291fafd7142308f27ec5805251f2e2bdeded6b",
      "tree": "f18805cbe3583f62e423c5a0b17a3be3a757df54",
      "parents": [
        "d0a3cd609ca36baebd066d6fd83c153293c459eb"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 03 17:55:48 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Sat May 03 17:59:43 2025 -0700"
      },
      "message": "sshserver: add scp support\n\nfixes https://github.com/boldsoftware/sketch/issues/53\n"
    },
    {
      "commit": "4f84ab729ddbf428b0e891940f08f70b4edee05c",
      "tree": "f2e52e4a01c188ada1f5acf8b2a013029b999495",
      "parents": [
        "44f9b4cec11e269a52fbfc099989ab425b8e125f"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 22 16:40:54 2025 -0700"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 02 12:57:44 2025 -0700"
      },
      "message": "all: support openai-compatible models\n\nThe support is rather minimal at this point:\nOnly hard-coded models, only -unsafe, only -skabandaddr\u003d\"\".\n\nThe \"shared\" LLM package is strongly Claude-flavored.\n\nWe can fix all of this and more over time, if we are inspired to.\n(Maybe we\u0027ll switch to https://github.com/maruel/genai?)\n\nThe goal for now is to get the rough structure in place.\nI\u0027ve rebased and rebuilt this more times than I care to remember.\n"
    },
    {
      "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": "a0801ad5dbd2a0e4d4983447b62f72444e829927",
      "tree": "6c622b74649869703cd85f2fe3ea317ee293d46f",
      "parents": [
        "df2d3dccd3f2f97fd4b8ab3bd153fbef15becea0"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 19:34:53 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri Apr 25 13:56:59 2025 -0700"
      },
      "message": "Add comma formatting to input and output token displays\n\nThe token counts now display with commas in both the terminal UI and web UI.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\n"
    },
    {
      "commit": "4854c6535a320f6fbfe8baee02af509367e4236c",
      "tree": "6ef13e82fb6597c443b31c350af8e390a8d0062f",
      "parents": [
        "53786efbbbb2fbc3edb91ba639894e713b293140"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 18:37:02 2025 -0700"
      },
      "committer": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Thu Apr 24 20:49:55 2025 -0700"
      },
      "message": "dockerimg: +SSHTheater, auto-configures local ssh\n\n- removes the old cli flags for pointing sketch at existing ssh key files\n- generates key pairs for both the container ssh server and the user if\n  these don\u0027t already exist in ~/.sketch/\n- automatically edits ~/.sketch/known_hosts and ~/.sketch/ssh_config to\n  add entries when you start a sketch container and remove them when you\u0027re\n  done\n- does not make any edits to default ~/.ssh/config files, so you\u0027ll have\n  to manually add line to you default ssh config file like:\n  `Include HOME_DIR/.sketch/ssh_config`\n  in order to have your ssh tools pick up what sketch is putting down.\n"
    },
    {
      "commit": "baa2b590cc3a5f63bc52c3324f2835666b9ae450",
      "tree": "69b313aab41b2f3d3cd27c72ce7d09f6b6453aa6",
      "parents": [
        "97188fc1955f036e57c42a2f345b3c01fc5f0dc0"
      ],
      "author": {
        "name": "Sean McCullough",
        "email": "banksean@gmail.com",
        "time": "Wed Apr 23 10:40:08 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 10:40:08 2025 -0700"
      },
      "message": "sketch: initial container ssh support (#15)\n\nAdds an in-process ssh server to the sketch agent running inside\nthe container.\n\nThe ssh server implementation uses https://github.com/gliderlabs/ssh/\n\nThis change does not automatically generate any keys (this may come later).\nYou specify the server identity private key and the user\u0027s authorized public\nkeys on the sketch command line.\n\nThe host sketch process reads these files from the cli flags at startup. Once\nthe container is launched, it passes these keys to to the container\nsketch process via new /init POST body fields."
    },
    {
      "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"
    }
  ]
}
