)]}'
{
  "log": [
    {
      "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": "495c1fa247565e21b36bcb847c6cd3f08e0e196f",
      "tree": "5c7031ad37f4f0181824664f15220f87c7314861",
      "parents": [
        "b6bc113f9ebb00084285e8c3aeaf2fd4a648afc0"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 29 00:37:22 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Thu May 29 15:12:53 2025 -0700"
      },
      "message": "claudetool: add just-in-time tool installation for bash commands\n\nImplements automatic tool installation when bash commands use missing tools,\nproviding a seamless experience for the LLM to Just Use tools it knows ought to exist.\n\nCore Features:\n\n1. Command Analysis Pipeline:\n   - Parse bash commands to extract individual tools/programs\n   - Use exec.LookPath to check if tools exist in PATH\n   - Handle shell built-ins, absolute/relative paths correctly\n   - Support complex command chaining with \u0026\u0026, ||, ;, and |\n\n2. Subagent Tool Installation:\n   - Spawn dedicated subagents to install missing tools\n\nThe system preserves existing bash tool behavior while adding invisible\ntool installation. Original commands run regardless of installation\nsuccess/failure, avoiding agent confusion.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s226cd6260a6469e9k\n"
    },
    {
      "commit": "dbfd36a4149c03a501be12aacfecdbe237c7b7bf",
      "tree": "c8928ebe5568b7c5330f9211538ab8139832652f",
      "parents": [
        "afeafea91f20db4e5b99620df98baa1628bfeaf1"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 20:57:50 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Fri May 23 14:25:55 2025 -0700"
      },
      "message": "claudetool/bashkit: add validation to reject blind git add commands\n\nImplements new validation function to prevent bash commands that blindly\nadd all files to git commits, requiring agents to specify files explicitly.\n\nChanges include:\n\n1. New noBlindGitAdd validation function that rejects:\n   - git add -A (add all)\n   - git add --all (add all)\n   - git add . (add current directory)\n   - git add * (add all files via glob)\n\n2. Enhanced hasBlindGitAdd helper function:\n   - Parses git command structure using existing AST approach\n   - Finds \u0027add\u0027 subcommand and checks subsequent arguments\n   - Handles git flags before \u0027add\u0027 subcommand correctly\n   - Allows legitimate specific file additions like \u0027git add main.go\u0027\n\n3. Comprehensive test coverage for all blind add patterns:\n   - Tests rejection of all blind patterns including flags combinations\n   - Tests acceptance of specific file additions and valid use cases\n   - Tests multiline scripts and edge cases like filenames that look\n     like flags (e.g., \u0027file.A\u0027)\n\n4. Integration with existing validation framework:\n   - Added noBlindGitAdd to the checks slice alongside existing\n     noGitConfigUsernameEmailChanges validation\n   - Uses same error reporting pattern and AST parsing infrastructure\n\nThis prevents agents from accidentally committing unintended files or\nbuild artifacts by forcing explicit file specification in git add\ncommands. The validation maintains the existing pattern of being\nmistake-prevention rather than security-focused.\n\nError message provides clear guidance: \u0027blind git add commands (git add -A,\ngit add ., git add --all, git add *) are not allowed, specify files explicitly\u0027\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\nChange-ID: s4d8fe71ef5816b36k\n"
    },
    {
      "commit": "dae19073cfdc420af8da311c4f3974ac6db77b46",
      "tree": "d2744d5ff7a9477e34537d7be9b772a3d3de522b",
      "parents": [
        "a9b3822fd2cfdc035e7daa8b59496f9838a4b2c6"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Wed Apr 30 01:08:57 2025 +0000"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Apr 29 19:06:19 2025 -0700"
      },
      "message": "Add WillRunGitCommit function to bashkit\n\nThis function inspects a bash script to determine if it will run \u0027git commit\u0027 commands.\nThe implementation is similar to the existing Check function but is kept separate as requested.\n\nCo-Authored-By: sketch \u003chello@sketch.dev\u003e\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"
    }
  ]
}
