@redconfetti can we camelCase `external_tools_hash`?