diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 0000000000000000000000000000000000000000..58993aaeefd1e2be0b83d453941fadbd7b74266d
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,4 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+pnpm lint
diff --git a/package.json b/package.json
index 5bf808928028a6b3065e1ed206c16e13b796e777..596156e55c0692ba3dc286717baf4c7639c6757e 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,8 @@
     "dev": "turbo run dev",
     "lint": "turbo run lint",
     "test": "turbo run test",
-    "format": "prettier --write \"**/*.{ts,tsx,md}\""
+    "format": "prettier --write \"**/*.{ts,tsx,md}\"",
+    "prepare": "husky install"
   },
   "devDependencies": {
     "@turbo/gen": "^1.9.7",
@@ -16,7 +17,8 @@
     "prettier": "^2.5.1",
     "prettier-plugin-tailwindcss": "^0.3.0",
     "ts-jest": "^29.1.0",
-    "turbo": "latest"
+    "turbo": "latest",
+    "husky": "^8.0.0"
   },
   "packageManager": "pnpm@7.15.0",
   "name": "llamascript"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 307d0e29717d1f183c8b0e2ddb6afe6ca82530e7..2a6588d3b5eac11ff2c3d7804540ef12dcd869ac 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -20,6 +20,9 @@ importers:
       eslint-config-custom:
         specifier: workspace:*
         version: link:packages/eslint-config-custom
+      husky:
+        specifier: ^8.0.0
+        version: 8.0.0
       jest:
         specifier: ^29.5.0
         version: 29.5.0(@types/node@18.6.0)
@@ -3052,6 +3055,12 @@ packages:
     engines: {node: '>=14.18.0'}
     dev: false
 
+  /husky@8.0.0:
+    resolution: {integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w==}
+    engines: {node: '>=14'}
+    hasBin: true
+    dev: true
+
   /iconv-lite@0.4.24:
     resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
     engines: {node: '>=0.10.0'}