diff --git a/dist/index.js b/dist/index.js
index ba2ca00..d7bafcc 100644
Binary files a/dist/index.js and b/dist/index.js differ
diff --git a/package.json b/package.json
index 453bbe7..336386e 100644
--- a/package.json
+++ b/package.json
@@ -13,10 +13,10 @@
     "@types/js-yaml": "^4.0.9",
     "@types/node": "^20.11.5",
     "@types/node-fetch": "^2.6.11",
-    "ajv": "^8.12.0",
     "expand-tilde": "^2.0.2",
     "fs-extra": "^11.2.0",
-    "yaml": "^2.3.4"
+    "yaml": "^2.3.4",
+    "zod": "^3.22.4"
   },
   "devDependencies": {
     "@vercel/ncc": "^0.38.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 473d2e8..4b0f167 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -23,9 +23,6 @@ dependencies:
   '@types/node-fetch':
     specifier: ^2.6.11
     version: 2.6.11
-  ajv:
-    specifier: ^8.12.0
-    version: 8.12.0
   expand-tilde:
     specifier: ^2.0.2
     version: 2.0.2
@@ -35,6 +32,9 @@ dependencies:
   yaml:
     specifier: ^2.3.4
     version: 2.3.4
+  zod:
+    specifier: ^3.22.4
+    version: 3.22.4
 
 devDependencies:
   '@vercel/ncc':
@@ -107,15 +107,6 @@ packages:
     hasBin: true
     dev: true
 
-  /ajv@8.12.0:
-    resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
-    dependencies:
-      fast-deep-equal: 3.1.3
-      json-schema-traverse: 1.0.0
-      require-from-string: 2.0.2
-      uri-js: 4.4.1
-    dev: false
-
   /asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
     dev: false
@@ -139,10 +130,6 @@ packages:
       homedir-polyfill: 1.0.3
     dev: false
 
-  /fast-deep-equal@3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-    dev: false
-
   /form-data@4.0.0:
     resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
     engines: {node: '>= 6'}
@@ -172,10 +159,6 @@ packages:
       parse-passwd: 1.0.0
     dev: false
 
-  /json-schema-traverse@1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-    dev: false
-
   /jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
     dependencies:
@@ -207,16 +190,6 @@ packages:
     hasBin: true
     dev: true
 
-  /punycode@2.3.1:
-    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-    engines: {node: '>=6'}
-    dev: false
-
-  /require-from-string@2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
-    engines: {node: '>=0.10.0'}
-    dev: false
-
   /tunnel@0.0.6:
     resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
     engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
@@ -244,12 +217,6 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: false
 
-  /uri-js@4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-    dependencies:
-      punycode: 2.3.1
-    dev: false
-
   /uuid@8.3.2:
     resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
     hasBin: true
@@ -259,3 +226,7 @@ packages:
     resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
     engines: {node: '>= 14'}
     dev: false
+
+  /zod@3.22.4:
+    resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+    dev: false
diff --git a/src/inputs/run-install.ts b/src/inputs/run-install.ts
index f1dd44a..e4858cf 100644
--- a/src/inputs/run-install.ts
+++ b/src/inputs/run-install.ts
@@ -1,5 +1,6 @@
-import { getInput, InputOptions, error } from '@actions/core'
-import { parse } from 'yaml'
+import { getInput, error } from '@actions/core'
+import * as yaml from 'yaml'
+import { z, ZodError } from 'zod'
 
 export interface RunInstall {
   readonly recursive?: boolean
@@ -7,64 +8,43 @@ export interface RunInstall {
   readonly args?: readonly string[]
 }
 
+const zRunInstall = z.object({
+  recursive: z.boolean().optional(),
+  cwd: z.string().optional(),
+  args: z.array(z.string()).optional(),
+})
+
 export type RunInstallInput =
   | null
   | boolean
   | RunInstall
   | RunInstall[]
 
-const options: InputOptions = {
-  required: true,
-}
+const zRunInstallInput = z.union([
+  z.null(),
+  z.boolean(),
+  zRunInstall,
+  z.array(zRunInstall),
+])
 
-export function parseRunInstall(name: string): RunInstall[] {
-  const input: any = parse(getInput(name, options))
+export function parseRunInstall(inputName: string): RunInstall[] {
+  const input = getInput(inputName, { required: true })
+  const parsedInput: unknown = yaml.parse(input)
 
-  if (!input) return []
-  if (input === true) return [{ recursive: true }]
+  try {
+    const result: RunInstallInput = zRunInstallInput.parse(parsedInput)
+    if (!result) return []
+    if (result === true) return [{ recursive: true }]
+    if (Array.isArray(result)) return result
+    return [result]
+  } catch (exception: unknown) {
+    error(`Error for input "${inputName}" = ${input}`)
 
-  if (!isInputValid(input)) process.exit(1);
-
-  return Array.isArray(input) ? input : [input]
-}
-
-function isInputValid(input: any) {
-  if (Array.isArray(input)) {
-    return input.every(isEntryValid)
-  } else {
-    return isEntryValid(input)
-  }
-}
-
-function isEntryValid(input: any): boolean {
-  if (typeof input !== 'object') {
-    error(`Invalid input for run_install. Expected object, but got ${typeof input}`)
-    return false;
-  }
-
-  if (input.recursive !== undefined && typeof input.recursive !== 'boolean') {
-    error(`Invalid input for run_install.recursive. Expected boolean, but got ${typeof input.recursive}`)
-    return false;
-  }
-
-  if (input.cwd !== undefined && typeof input.cwd !== 'string') {
-    error(`Invalid input for run_install.cwd. Expected string, but got ${typeof input.cwd}`)
-    return false;
-  }
-
-  if (input.args !== undefined) {
-    if (!Array.isArray(input.args)) {
-      error(`Invalid input for run_install.args. Expected array, but got ${typeof input.args}`)
-      return false;
-    }
-
-    const invalidArgs: any[] = input.args.filter((arg: any) => typeof arg !== 'string');
-    if (invalidArgs.length > 0) {
-      const invalidArgsMessage = invalidArgs.map((arg: any) => typeof arg).join(', ');
-      error(`Invalid input for run_install.args. Expected array of strings, but got ${invalidArgsMessage}`)
-      return false;
+    if (exception instanceof ZodError) {
+      error(`Errors: ${exception.errors}`)
+    } else {
+      error(`Exception: ${exception}`)
     }
+    process.exit(1)
   }
-
-  return true;
 }