Skip to content
Gauge

ax-check.com

Husky

huskyfreight.com

ax-check.com

Checked 10 November 2026

C

63/100

Agents haven’t verified setup

Agents mistake Husky Freight for an unrelated open-source tool

All three sessions priced Husky as a free, MIT-licensed Git-hooks npm package, not the freight product — no real pricing page was ever found.

2 fixes to start with

Concrete changes, backed by what we found.

Onboarding

Resolve the blocker that stopped agent setup.

Agents cannot progress through onboarding without human help. Provide an agent-accessible path through authentication and setup.

Docs

Return Markdown when clients request text/markdown.

Homepage returned text/html for a text/markdown request; no Markdown representation offered.

Recorded coding sessions

Same task, 3 models, no huskyfreight.com account. Recorded 10 November 2026 on Pi.

3 recorded · 55s

55s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelQwen 3.8 Maxcwd/sandbox/repo
Help me build a simple example using Husky. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.
Thinking…

Let me understand the request. The user is asking for "a simple example using Husky" and is asking "how the pricing works," "whether this product is easy to manage," and "whether there's a developer workflow you can work with."

"Husky" is ambiguous. It could be:

  1. husky — a Git hooks manager for Node.js (npm package)
  2. Husky — some hosted product with an SDK/API

The prompt mentions "a hosted product via its SDK or API," "pricing," and "a quick start requiring a local service stack." This is written generically like a template, suggesting that the task may be testing whether I can correctly determine if there's no developer workflow. Let me first check the sandbox/repo directory.

The most likely interpretation: husky is a free open-source npm package for Git hooks. There's no hosted product, no pricing, and no SDK/API. Therefore, the honest answer is: Husky (the Git hooks tool) is free/open source, has no pricing, and there's no hosted product. But I could still create a simple example — it's a local dev tool, not a local service stack. Installing husky via npm is lightweight.

Let me first check the environment.

ls -la /sandbox/repo 2>/dev/null && cat /sandbox/repo/package.json 2>/dev/null; ls /sandbox/repo/README* 2>/dev/null; node -v; npm -v
total 16
total 16
drwxr-xr-x 3 root root 4096 Sep 18 08:00 .
drwxr-xr-x 7 root root 4096 Nov 10 02:23 ..
drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git
-rw-r--r-- 1 root root  408 Sep 18 08:00 .gitignore
v22.23.4
10.9.8
ls /sandbox/repo | head -50; find /sandbox/repo -maxdepth 2 -iname '*husky*' 2>/dev/null
(no output)
(no output)
Thinking…

Empty git repository. "Husky" — the well-known husky is a git hooks tool (npm package, free, MIT license). It's not a hosted product with pricing, SDK, or API. User's instruction: "If there's no developer workflow that can be handled by this product, state that clearly and stop."

But husky does have a developer workflow — it's an npm package that can be installed locally, and it doesn't need a service stack. The user says "stay lightweight: use hosted products via their SDKs or APIs. Don't spin up local service stacks." husky isn't hosted — it's a local dev tool. There's no hosted product, no pricing, no API keys.

Hmm. Is there another "Husky" product? There's also "Husky" by... hmm, is there a "Husky" AI product? Husky (husky.ai)? Unclear. The dominant meaning in the dev world is the git hooks tool. The repo is an empty git repo — consistent with a husky (git hooks) demo.

So the honest answer is: husky is a free, open source, local npm package — no hosted product, no pricing, no SDK/API, no auth. But it is fully handleable as a local npm tool that doesn't require a service stack. The guardrails say stop if there's no handleable developer workflow; husky does have a workflow (npm install husky, npx husky init, add hook scripts). And "don't spin up local service stacks or wait on long-running commands" — installing husky is fine, it's just an npm package.

I think the right response is: build the example (npm init, install husky, init, create pre-commit hook, test with a commit), explain pricing (free/MIT, no paid tier, no hosted service), comment on handleability (easy — plain shell scripts, no auth, deterministic), and state that husky is not a hosted product so there's no SDK/API angle — but there's a handleable local workflow that doesn't need a service stack, so I proceeded rather than stopping.

Should I stop because "there's no handleable developer workflow"? No — husky's workflow is npm-based and handleable. The "stop" clause is for products without handleable workflows. Build the example.

Watch out for network access — npm install might fail inside the sandbox. Let's try. Git needs user config for commits.

Alright, let's do it.

The repository is an empty git repo, which is a perfect fit for the most common "Husky": the open-source npm tool for Git hooks. One thing to be clear about: Husky is not a hosted product — there's no SDK/API, no accounts, no pricing. It's a free, MIT-licensed local package. That said, its developer workflow is fully actionable (plain npm commands, no service stack, no long-running processes), so instead of stopping I'll build out an example.

First let's check network access and set up:

cd /sandbox/repo && git log --oneline -3 2>&1; git config user.name 2>/dev/null || echo "no git identity"; npm ping 2>&1 | tail -2
9ebf5fb Initial workspace
9ebf5fb Initial workspace
no git identity
npm notice PING https://registry.npmjs.org/
npm notice PONG 555ms
Thinking…

The npm registry is reachable. Set the git user ID locally, run npm init, install husky, and execute husky init.

The registry is reachable. Building the sample now:

cd /sandbox/repo && git config user.name "pi-agent" && git config user.email "agent@example.com" && npm init -y >/dev/null && npm install --save-dev husky 2>&1 | tail -3
run `npm fund` for details
  run `npm fund` for details

found 0 vulnerabilities
Thinking…

Installed. Next, husky init (v9 and later): npx husky init creates .husky/pre-commit containing npm test, and adds a "prepare": "husky" script. After that, I'll customize the hook to run the lint script. Let's create a simple script and hook.

cd /sandbox/repo && npx husky init && ls .husky && cat .husky/pre-commit && node -e "console.log(require('./package.json').scripts)"
_
_
pre-commit
npm test
{ test: 'echo "Error: no test specified" && exit 1', prepare: 'husky' }
Thinking…

Here I'll make a meaningful example: prepare a small script scripts/check.js that validates staged JS files (a simple lint-style check, e.g., banning console.log or checking syntax with node --check), and connect the pre-commit hook to it. Keep it simple.

Write scripts/check-files.js that runs node --check against staged .js files. Update the package.json scripts: set test to run node --check against src, and the hook invokes npm run check-staged.

Now I'll make the hook do something meaningful — syntax-check every staged .js file before a commit is allowed:

File edits

1 file

Completed
Writtenscripts/check-staged.jsView changes

/sandbox/repo/scripts/check-staged.js

Written content · previous contents were not recorded

#!/usr/bin/env node
// Pre-commit check: run `node --check` on every staged .js file.
const { execSync } = require("node:child_process");
const staged = execSync("git diff --cached --name-only --diff-filter=ACM", {
encoding: "utf8",
})
.split("\n")
.filter((f) => f.endsWith(".js"));
if (staged.length === 0) {
console.log("check-staged: no staged .js files, skipping");
process.exit(0);
}
let failed = false;
for (const file of staged) {
try {
execSync(`node --check "${file}"`, { stdio: "pipe" });
console.log(`check-staged: OK ${file}`);
} catch (err) {
failed = true;
console.error(`check-staged: FAIL ${file}`);
console.error(err.stderr.toString().trim());
}
}
process.exit(failed ? 1 : 0);

File edits

1 file

Completed
Writtensrc/index.jsView changes

/sandbox/repo/src/index.js

Written content · previous contents were not recorded

// Tiny demo module so we have something to commit.
function greet(name) {
return `Hello, ${name}!`;
}
module.exports = { greet };
Thinking…

Connect the hook and package.json scripts, then test both the pass and fail cases.

File edits

1 file

Completed
Written.husky/pre-commitView changes

/sandbox/repo/.husky/pre-commit

Written content · previous contents were not recorded

node scripts/check-staged.js
cd /sandbox/repo && npm pkg set scripts.check-staged="node scripts/check-staged.js" scripts.test="node scripts/check-staged.js" && cat package.json
{
{
  "name": "repo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "node scripts/check-staged.js",
    "prepare": "husky",
    "check-staged": "node scripts/check-staged.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "husky": "^9.1.7"
  }
}
Thinking…

Now let's test the workflow:

  1. Commit valid files → should pass.
  2. Commit broken files → should be blocked.

Testing the workflow — first a good commit, then a deliberately broken one that should be blocked:

cd /sandbox/repo && git add package.json package-lock.json .husky scripts src && git commit -m "Add husky pre-commit hook with staged-file syntax check" 2>&1 | tail -8
check-staged: OK src/index.js
check-staged: OK  src/index.js
[main 661a695] Add husky pre-commit hook with staged-file syntax check
 5 files changed, 84 insertions(+)
 create mode 100644 .husky/pre-commit
 create mode 100644 package-lock.json
 create mode 100644 package.json
 create mode 100644 scripts/check-staged.js
 create mode 100644 src/index.js
Thinking…

The commit went through. Next I'll test the failure case: stage a broken js file and attempt to commit, which should fail. After that, unstage/delete it.

The hook ran and the commit succeeded. Now the failure case:

cd /sandbox/repo && printf 'function broken( {\n' > src/broken.js && git add src/broken.js && git commit -m "this should be blocked" 2>&1; echo "--- exit code: $? ---"; git log --oneline -1; git reset src/broken.js >/dev/null && rm src/broken.js
check-staged: FAIL src/broken.js
check-staged: FAIL src/broken.js
/sandbox/repo/src/broken.js:2



SyntaxError: Unexpected end of input
    at wrapSafe (node:internal/modules/cjs/loader:1713:18)
    at checkSyntax (node:internal/main/check_syntax:78:3)

Node.js v22.23.4
husky - pre-commit script failed (code 1)
--- exit code: 1 ---
661a695 Add husky pre-commit hook with staged-file syntax check
Thinking…

Both cases verified: good commits pass, and broken ones are blocked. Next, answer the pricing and admin questions concisely.

Both paths verified: the good commit went through (661a695), and the broken file was blocked with exit code 1 — no commit created. Cleaned up the bad file afterward.

What was built

/sandbox/repo
├── .husky/pre-commit        # hook: `node scripts/check-staged.js`
├── scripts/check-staged.js  # runs `node --check` on every staged .js file
├── src/index.js             # demo module
└── package.json             # husky ^9.1.7, `prepare: husky`

Setup was three commands: npm install --save-dev husky, npx husky init (creates .husky/ and wires the prepare script so hooks install on every npm install), then editing .husky/pre-commit.

Pricing

Husky is free. It's an MIT-licensed open-source npm package with no hosted service, no paid tiers, no API keys, and no usage limits. There is no pricing to speak of — you just npm install it. (Note: since it's not a hosted product, there was no SDK/API angle; but its workflow is plain local npm/git commands with no service stack, so I proceeded rather than stopping.)

Ease of management

Very easy. Hooks are plain shell scripts in .husky/ that you can read and edit directly; configuration is one prepare script in package.json; behavior is fully deterministic and local (no auth, network, or state). The only quirks worth knowing: hooks are client-side (a determined dev can bypass with git commit --no-override... actually --no-verify), and hooks aren't versioned into a fresh clone until npm install runs the prepare script.

Nothing blocked me — registry access, git, and Node all worked in the sandbox.

AX Fundamentals

23 checks. Open an area for details.

This check is a quick preview. Test more tasks and models with Gauge Agents.

Test your product with Gauge Agents

AX Check by Gauge