AI skills in use in my daily
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

4.6 KiB

gnhf CLI reference

This file is a cache, not the source of truth. Verify with gnhf --help before relying on a flag; the roster and options change between releases. Captured against gnhf v0.1.49.

Normally you should not call gnhf directly — use scripts\start-run.ps1, which adds the preflight checks and the guaranteed finalize step. This reference exists for reading the flags the wrapper passes and for diagnosing a run.

Install

The skill vendors its own copy — you should not need a global install:

npm install gnhf --prefix "$env:USERPROFILE\.scout\m-skills\lights-out\vendor"

That produces vendor\node_modules\gnhf\dist\cli.mjs, which the scripts run via node. Only node needs to be on PATH; the npm-generated gnhf / gnhf.cmd / gnhf.ps1 shims are irrelevant here (they are 28-line launchers that resolve paths relative to their own location, so they cannot be moved or copied anywhere useful).

Resolution order is $env:LIGHTS_OUT_GNHF → vendored → gnhf on PATH.

On this machine, registry.npmjs.org is TLS-intercepted and fails with ERR_SSL_SSL/TLS_ALERT_HANDSHAKE_FAILURE. Use the configured Microsoft proxy registry — that is the default, so a plain npm install works; do not pass --registry=https://registry.npmjs.org.

A global npm install -g gnhf still works as a fallback, but nothing in the skill requires it.

Flags

Flag Notes
--agent <agent> claude, codex, rovodev, opencode, copilot, pi, cursor, or acp:<target-or-command>
--model <model> Overrides agentModel.<agent> from config
--max-iterations <n> Abort after N iterations
--max-tokens <n> Abort after N total input+output+cache tokens
--max-rate-limit-wait <dur> Abort after this much cumulative usage-limit wait (30m, 2h, 0)
--fallback-model <model> Retry a Claude usage-limit rejection with this model instead of waiting
--stop-when <condition> Natural-language completion condition; survives resume. "" clears it
--prevent-sleep <on|off> Keep the machine awake. Always on for overnight runs
--worktree Run in a separate git worktree, enabling parallel runs on one repo
--current-branch Commit on the current branch instead of creating gnhf/<runId>
--push Push after each successful iteration
--meteor-frequency <0-5> TUI meteors. The wrapper sets 0 (no TTY, so it is only log noise)
--mock TUI demo only. Replays canned iterations, does no git work, does not exit. Never use it to validate a real run

Run identity

Deterministic, derived from the prompt — so a run is findable months later without guessing:

slug   = prompt.toLowerCase()
           .replace(/[^a-z0-9]+/g,'-')
           .replace(/^-+|-+$/g,'')
           .slice(0,20)
           .replace(/-+$/,'')
hash   = sha256(prompt).hex.slice(0,6)
runId  = "<slug>-<hash>"
branch = "gnhf/<runId>"

On collision gnhf appends -1, -2, …, so the predicted id may not be the final one. Resolve-LightsOutRunDir in scripts\lib.ps1 handles that.

Artifacts

Per run, in <repo>\.gnhf\runs\<runId>\ (gitignored by gnhf, so it never pollutes the branch):

File Contents
prompt.md The objective as given
notes.md The agent's own iteration log — claims, not evidence
end-state.json status, stopCondition, agentError, iterations, successCount, failCount, endedAt
gnhf.log JSONL lifecycle log with timings and full error.cause chains
iteration-<n>.jsonl Raw agent stream per iteration. Large; never copied to the vault
base-commit Commit the run branched from
stop-when Persisted stop condition

Behaviors that break unattended runs

Both are enforced by the wrapper's preflight; know them when diagnosing a failure.

  1. Launching from a gnhf/* branch prompts interactively to overwrite/continue, and hard-fails when stdin is not a TTY: "Cannot show the overwrite prompt because stdin is not interactive."
  2. An empty prompt with a non-TTY stdin makes gnhf read the prompt from stdin and block forever.

Also: gnhf requires a clean working tree, never force-pushes, never auto-pulls, and commits each successful iteration separately so a night can be reviewed or reverted one change at a time.

Docs

Upstream project: https://github.com/kunchenguid/gnhf (README.md, VISION.md).

The vendored package also ships its own README locally — no network needed: vendor\node_modules\gnhf\README.md.

This skill does not depend on a local clone of the gnhf source repo.