{"_id":"@davidorbelian/hq","_rev":"9-1971a8c30aff89706aab2b77124d7903","name":"@davidorbelian/hq","dist-tags":{"latest":"0.9.0"},"versions":{"0.1.0":{"name":"@davidorbelian/hq","version":"0.1.0","_id":"@davidorbelian/hq@0.1.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"88eb7772d7b2c900307dde9aa65a14208075af20","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.1.0.tgz","fileCount":18,"integrity":"sha512-u9YIbNRv3a0j7U/34hFm91iFkOdcSnWaSWWZPHK/ewYWxJC61ZlWVwvQlOpdoh4KBGcuqLAq/5wr5COwH16EAQ==","signatures":[{"sig":"MEQCICw6ZHoMgkFyuugpw8q0eaiLhkBxqeBOgIhuInKvDU+kAiAJZ+sYzmXRydENEhtvSYCEtIEnl+9ltjHzxJE9PRpiAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39480},"type":"module","engines":{"node":">=22"},"gitHead":"cf0b031ace481ae9b260bc3d843d743c898bcdc5","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"davidorbelian","email":"david.orbelian@gmail.com"},"_npmVersion":"10.9.8","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.1.0_1787248761497_0.7161506297058406","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@davidorbelian/hq","version":"0.2.1","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.2.1","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"287a88cf0ad91170eaea4bfb20c33cf94ea31508","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.2.1.tgz","fileCount":17,"integrity":"sha512-7tCTZf+dP4TVCvbxUFzqvsLevFl0vT+/2ZPxnHMkxcmYXNtfMRhdULLbcNfVRJkDDyiuvIDQ5RbUJtGe1QJHQg==","signatures":[{"sig":"MEYCIQDOCoLooii3eVLV4ZCuoTnkreAEyr5CC51RO8eLq5uFWwIhANzG5H3+8kcScjSldkxSMbXr/xeGR9KOx6c+y/PdAV6J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62132},"type":"module","engines":{"node":">=22"},"gitHead":"5d61e4a19aa8dd0d879c848af2d2508efd0d17e5","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.2.1_1787258071022_0.5151814791492206","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@davidorbelian/hq","version":"0.3.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.3.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"b0a04fe68f1e4ccbde765e55c4f98adb4ebb9cbd","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.3.0.tgz","fileCount":34,"integrity":"sha512-aIPGWLv5adwfMzojfOyupaCx2udCM8xTTfpiOE6EnX3MMbEK7W+TPHSFIW4M9Kszj8EkeHcX2T8nR9fJvVUlmQ==","signatures":[{"sig":"MEQCIGNlKRKildK3NGRpCY7daddj96C1/DmMkOAtjBb4cJZwAiB3Izq3jGpZMB8M5wMhW3IfM2bpvoCkqS8OQ3QDYFlYNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188414},"type":"module","engines":{"node":">=22"},"gitHead":"8597df7600f7ad51ac7061bd53ebc4bc31ebf9ac","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.3.0_1787633748327_0.1204546893534717","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@davidorbelian/hq","version":"0.4.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.4.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"8f6608fd1fdc604dea5dc931dd81582dfce576af","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.4.0.tgz","fileCount":34,"integrity":"sha512-heb4MSk+ytg6NaZ0RGHjPDosx+DRDRn8ur+8fmKA92xHdjgx3KXivo0EWSgVp7QZaEEqiEx7lPPzbJBMcRvmoA==","signatures":[{"sig":"MEUCIQC7NiXfdEuUULP/1kVGyTAb4tFkPgFNlu8DMyTmlR7tnQIgH2RC72emUYKCG819NrS+2b2mV8nCPKwuB23VXxoo40A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205466},"type":"module","engines":{"node":">=22"},"gitHead":"891ec29e284b434a90c74c43d61a4e6544269525","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.4.0_1787639373617_0.9672096491428053","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@davidorbelian/hq","version":"0.5.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.5.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"4966a47172cdb720cdb8224b1a0e72361f8d2c12","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.5.0.tgz","fileCount":35,"integrity":"sha512-osZIw18S0WQguhbUzBjNBYPWuFxqcx4IfdvvjQrQDV4QIIT3YgFv6HNcrFDJ51O6uG5SbXdrF5m9f7Czq5p7xQ==","signatures":[{"sig":"MEUCIQDIf4xoiyaipFBePyAMxzlG17rbD4O5BoAwmuZp7RpMNwIgNUMle7nIj6/oz/a6w9WSvfsCBI2v5etwJHeua9szhEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243450},"type":"module","engines":{"node":">=22"},"gitHead":"35511c90baae719e1ae37dea3cb1049b0658a7a7","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.5.0_1787647710094_0.0861246897841823","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@davidorbelian/hq","version":"0.6.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.6.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"f4239dbb95429b1d168578f05580e61d151e11c4","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.6.0.tgz","fileCount":37,"integrity":"sha512-tKXFYvfb0uZOM6/IseUtvT9SkfuzHEuc5mJOxcEfEoDiqpjQ1Q9lqX3oeTCoW5k+vkr7y+PuFKq2svSjKDJjcg==","signatures":[{"sig":"MEMCICIfjSaQh+YChjBaXzM08fQukA4Nz6pLAs7D2jtDC8pcAh8bNh2uy4Nq/1xU0BbZv8iQnVuQjlwetaYvdEJAoK8B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305290},"type":"module","engines":{"node":">=22"},"gitHead":"3fbbac0320a1282c8bc711eaf53771354b869a71","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.6.0_1787735189956_0.8015056651927774","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@davidorbelian/hq","version":"0.7.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.7.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"d4137cc72bcb5508803bd1be6d9d4ed65bde695c","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.7.0.tgz","fileCount":41,"integrity":"sha512-0ZZ+A80ydk7o6p1SF+OmMshQviMRjuwH1WFWbg5eDnDg16olC2bJwSvhpBt9YpiJ/6OfhJpVELildSQT1Euu0A==","signatures":[{"sig":"MEUCIQCoqfc/YJYuUzcxeEy8DVLVSQSDDwtPdbpRXqZFPXkaoQIgY8MHVZZrYirR+70dXcXm7ILUJ0eupAnocKJ+iSRiffU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":377296},"type":"module","engines":{"node":">=22"},"gitHead":"ef95d7cb673bdce9a0f9431dcd05b4e464c995cb","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.7.0_1787780418450_0.21659068073120258","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@davidorbelian/hq","version":"0.8.0","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"license":"MIT","_id":"@davidorbelian/hq@0.8.0","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"//":"version is empty on purpose; the publish workflow sets it from the tag","bin":{"hq":"dist/src/cli.js"},"dist":{"shasum":"75c82dc6e049194dd175c3acbcac4ef421abb1f2","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.8.0.tgz","fileCount":41,"integrity":"sha512-MsDqm4N4GLoa86OKfXDVxQHN10F3LmbHP+axfT0w3LZ6ssHMCZgssVTFiiJ40Qxvg3xt/zJJTfjqu59hFbvPTg==","signatures":[{"sig":"MEYCIQCvVel+YwKtE7BxjkJMs3GHdVFrmhcqv0S7LkWXqOATCwIhAIqHb4bLnLetgkkXwfBHeMmoCkJQBy1hK80QscwvsFW4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407741},"type":"module","engines":{"node":">=22"},"gitHead":"22c09cff3fec2b3cb96e3874b9ac3ebd8a0e2f81","scripts":{"test":"tsc && node --test 'dist/test/**/*.test.js'","build":"tsc","prepublishOnly":"tsc"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"repository":{"url":"git+https://github.com/davidorbelian/hq.git","type":"git","directory":"installer"},"_npmVersion":"12.0.2","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","directories":{},"_nodeVersion":"22.23.2","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.2.0"},"_npmOperationalInternal":{"tmp":"tmp/hq_0.8.0_1787826238690_0.9562127158893845","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@davidorbelian/hq","//":"version is empty on purpose; the publish workflow sets it from the tag","version":"0.9.0","description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/davidorbelian/hq.git","directory":"installer"},"homepage":"https://github.com/davidorbelian/hq#readme","bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"keywords":["claude-code","codex","agents","skills","mcp","hooks"],"type":"module","bin":{"hq":"dist/src/cli.js"},"engines":{"node":">=22"},"scripts":{"build":"tsc","test":"tsc && node --test 'dist/test/**/*.test.js'","prepublishOnly":"tsc"},"devDependencies":{"@types/node":"^26.2.0","typescript":"^7.0.2"},"gitHead":"6bcb9c60cc25ba28817ef4cda85f5621ae3ce58e","_id":"@davidorbelian/hq@0.9.0","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-efYIojjehAFNE0L2RwQB6Ydv9x+NNJpScxtWwWzNcfQb3qOO1EsxKdoI3/+dQkKr4WLx3xDQCg9BC6+PJGU1YA==","shasum":"2389f0d4426c6ee3be915ba3c5c9ef7cefdc8189","tarball":"https://registry.npmjs.org/@davidorbelian/hq/-/hq-0.9.0.tgz","fileCount":41,"unpackedSize":458229,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHuGSrLEbtrcNzQGq885N6F+6IG5+0yM+bJhXRyk5UcZAiBRrI8bIknXe+YheNwEf6/OlE2TYd3nV9yOSMvMGpN41g=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:b6a32d75-c526-4484-b1ad-9988fac27dec"}},"directories":{},"maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hq_0.9.0_1787900565335_0.517950325780657"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-20T17:59:21.268Z","modified":"2026-08-28T07:02:45.667Z","0.1.0":"2026-08-20T17:59:21.652Z","0.2.1":"2026-08-20T20:34:31.174Z","0.3.0":"2026-08-25T04:55:48.500Z","0.4.0":"2026-08-25T06:29:33.782Z","0.5.0":"2026-08-25T08:48:30.245Z","0.6.0":"2026-08-26T09:06:30.107Z","0.7.0":"2026-08-26T21:40:18.629Z","0.8.0":"2026-08-27T10:23:58.827Z","0.9.0":"2026-08-28T07:02:45.507Z"},"bugs":{"url":"https://github.com/davidorbelian/hq/issues"},"license":"MIT","homepage":"https://github.com/davidorbelian/hq#readme","keywords":["claude-code","codex","agents","skills","mcp","hooks"],"repository":{"type":"git","url":"git+https://github.com/davidorbelian/hq.git","directory":"installer"},"description":"Installs hq's shared agent skills, commands, hooks, and MCP config into a repo for Claude Code and Codex.","maintainers":[{"name":"davidorbelian","email":"david.orbelian@gmail.com"}],"readme":"# @davidorbelian/hq\n\nInstalls a shared set of agent tooling into a repo, for **Claude Code and Codex at\nonce**. Skills, commands, hooks, and MCP servers are written once in this package\nand fanned out to both agents' file layouts.\n\nRequires Node 22 or newer. It works in any repo, not only Node ones.\n\nIt is built for repos driven with [herdr](https://herdr.dev), so herdr content is\na first-class part of what it ships.\n\n## Getting started\n\nRun it in the root of the repo you want to set up:\n\n```sh\nnpx @davidorbelian/hq\n```\n\nCommit what it writes, including `.hq/manifest.json`. Everyone else on the repo\nthen gets the tooling from git, and only re-runs the installer when a new version\nof this package ships.\n\n## Commands\n\n| Command | What it does |\n|---|---|\n| `npx @davidorbelian/hq` | install, or update an existing install |\n| `npx @davidorbelian/hq check` | report whether the repo is still in sync; writes nothing |\n| `npx @davidorbelian/hq uninstall` | remove everything hq owns, and hq's entries in shared files |\n\n| Option | Where | What it does |\n|---|---|---|\n| `--content-dir <dir>` | install, check | the content to install, instead of the package's own |\n| `--dry-run` | install, uninstall | show what would change, write nothing |\n| `--force` | install, uninstall | overwrite or remove files you edited |\n| `--latest` | check | also compare with the version published on npm |\n| `--only <agent>` | all | act on `claude` or `codex` only; can be repeated |\n| `--target <dir>` | all | the repo to act on, instead of the current directory |\n\nExit codes: `0` clean, `2` finished but something was skipped or is out of sync,\n`1` fatal error. `check` is the one to run in CI.\n\n## What gets installed\n\n| Content source | Claude Code | Codex |\n|---|---|---|\n| `content/skills/hq-<n>/` | `.claude/skills/hq-<n>/` | `.agents/skills/hq-<n>/` |\n| `content/commands/hq-*.md` | `.claude/commands/` | `.codex/prompts/` (Claude-only frontmatter keys stripped) |\n| `content/agents/hq-*.md` | `.claude/agents/` | - |\n| `content/hooks/` | `hooks` key in `.claude/settings.json` | `.codex/hooks.json` |\n| `content/scripts/*.mjs` | `.hq/scripts/` | same files |\n| `content/seeds/` | `.hq/` at the same relative path, written once | same files |\n| `content/mcp/servers.json` | `mcpServers` in `.mcp.json` | marker block in `.codex/config.toml` |\n| `content/agents-md/section.md` | marker block in `AGENTS.md` | same block |\n| `content/gitignore/section.txt` | marker block in `.gitignore` | same block |\n\nEvery skill, command and subagent hq installs is named `hq-*`, so it never\ncollides with your own and you can always see where it came from.\n\nHook scripts are installed once, under `.hq/hooks/`, and helper scripts a skill\nruns by name under `.hq/scripts/`. Both are one copy for both agents and run with\n`node`, so they work on every OS. Commands assume the agent runs them from the\nrepo root.\n\n## The way of working\n\nThe main thing hq ships is a way of running work on a repo. One **root**\nsession sits in the main checkout: it talks with you, sizes the work, and opens\nroutes, but never edits code. A **route** is one unit of work, a herdr worktree\non its own branch, and it lives until its work is done.\n\nA session-start hook, `.hq/hooks/routes.mjs`, recognizes which of the two a\nsession is and names the skill that carries it. The branch prefix picks the\nroute kind: `auto/` runs unattended, `grill/` settles the open choices with you\nbefore building, `research/` answers one question from outside sources,\n`prototype/` builds something throwaway to react to, and `roadmap/` reaches one\ndestination across many routes.\n\nA **roadmap** is a root of its own. It keeps its plan in its worktree's own\ngitignored `.route/`, so no plan is ever committed anywhere. It opens the other\nkinds as nodes, takes their results back, and cleans up after them. It reports\nwhich nodes are ready and you choose which to open, so nodes that do not depend\non each other run at the same time.\n\nA roadmap's branch is where that work gathers: every node is cut from it and\nevery node's PR targets it, so half-done work never blocks a release on your\ndefault branch. The plan also names **checkpoints**, points where the work so\nfar stands on its own. At one the roadmap asks whether to merge everything so\nfar into your default branch, and the default answer is no.\n\nNine skills carry that: one per kind, plus `hq-root`, `hq-route` for what every\nroute shares, `hq-deliver` for the way to a PR, and `hq-interview` for how to\nask. None is a command you type. The hook and the skills start each other, and\nthe contract they all read is `routes.md`, shipped inside the `hq-root` skill\ndirectory. All of it needs herdr, and it stays inert without it.\n\nEight scripts under `.hq/scripts/` do the parts that must not drift. `open.mjs`\nopens a route and records who opened it and what its base is. `watch.mjs` polls\nthe pull requests a route is waiting on and wakes it when one moves.\n`handoff.mjs` hands a finished route back to that opener. `graph.mjs` draws a\nroadmap's plan as a live graph in a pane beside it, coloured by state, and\nsplits the pane to put itself there. `review.mjs` runs the independent review\nbelow, and draws that in a pane of its own the same way, and `init.mjs` writes\nthe standard that review judges by. `pane.mjs` is what those two panes are\nbuilt on, and the one script here nothing runs by name. `cleanup.mjs`\nremoves the worktrees and branches hq created, once their work has either\nmerged or been withdrawn, and reports everything else it found without\ntouching it. A branch hq did not create is never removed, however merged or\nstale it looks, because your repo is not hq's to tidy.\n\nEach route keeps its own state in a gitignored `.route/` directory, which is\nwhy hq adds one line to your `.gitignore`.\n\n## The independent review\n\n`.hq/scripts/review.mjs` reviews a route's change with a swarm of headless\n`claude` runs. What it reviews and on which models comes from `.hq/review.md`,\nseeded once and yours to edit: the model per stage in the frontmatter, one\n`###` heading per dimension under `## Dimensions`, and the shared rules for\nwhat a finding must carry. The prose under each heading is the prompt, passed\nas written.\n\nA round runs in a fresh temporary worktree at the route's HEAD, never in the\nroute's own, so it judges committed state only and the route can keep working.\nOne investigator per dimension runs in parallel. Every finding that carries\nfile, line, claim and reasoning goes to a skeptic prompted to refute it, and\nonly confirmed findings survive. One aggregator writes the report. A failed\nrun is retried once; an answer in the wrong shape is handed back once, to be\nrewritten into the demanded format; a second miss fails the review closed,\nbecause a review that silently lost a dimension is worse than none.\n\n```sh\nnode .hq/scripts/review.mjs [--base <branch>] [--rebuttals <file>] \\\n  [--json <path>] [--report <path>]\n```\n\nThe change is the merge base of `origin/<base>` and HEAD, to HEAD. The base\ncomes from `.route/state.json`, so inside a route no flag is needed. The\nengine writes two outputs, by default under `.route/review/`: `review.json`,\nevery raw finding with its dimension, file, line, claim, reasoning, skeptic\nverdict and status (`confirmed`, `refuted`, `rebutted` or `dropped`), and\n`review.md`, the rendered report. Exit codes: `0` nothing blocks, `2`\nconfirmed findings stand, `1` fatal.\n\nA round is minutes with nothing on screen, because every investigator reads the\nwhole change before any of them has a finding. So the engine splits a pane\nbeside the route's own and draws the round there while it runs: one row per\ndimension with its state and what it returned, then every finding as it lands,\nsettling to confirmed or refuted as its skeptic answers. It reads a third file,\n`.route/review/progress.json`, rewritten whenever anything moves. The pane\nstands after a round ends, holding its verdict, and the next round draws into\nthe same one. `node .hq/scripts/review.mjs --once` prints that same picture into\nthe terminal you are in.\n\n`--rebuttals` takes a JSON array of claims, each a string or\n`{\"claim\", \"rebuttal\"}`. A finding whose claim matches one is marked rebutted\ninstead of blocking; the one-line claim is a finding's identity across rounds,\nand matching forgives only case and spacing. That carry-over is what makes a\nfix-and-re-review loop terminate.\n\n## The codebase standard\n\n`/hq-init` writes your repo's own standard: what agents building code here\nfollow, and what the review above judges by. That shared ground is the point:\ncode gets written to the same conventions the review later checks.\n\nThe command runs `.hq/scripts/init.mjs`, which inspects the codebase with a\nswarm of headless `claude` runs: one scout proposes the areas to read, one\ninvestigator per dimension per area reads its area, one aggregator per\ndimension writes that dimension's file, and one reviewer rewrites all files\ntogether so they read as one standard. What to inspect and on which models\ncomes from `.hq/init.md`, seeded once and yours to edit, the same contract as\nthe review definition: the model per stage and the area cap in the\nfrontmatter, one `###` heading per dimension under `## Dimensions`.\n\nThe output is one file per dimension under `.hq/standards/`: by default\n`conventions.md`, `architecture.md` and `abstractions.md`. The files are the\nrepo's, not hq's: they are never in hq's manifest, `check` and `uninstall`\nignore them, and you edit and commit them like any other file. The engine\ncommits nothing; review the diff it leaves and commit what holds. Rerunning\nthe command is how the standard follows the code: the existing files go in as\nprior knowledge, so your edits are input, not lost.\n\n## The herdr skill\n\n`hq-herdr` teaches both agents to drive herdr, yet carries none of herdr's CLI\nguidance itself. It first checks that the agent runs inside a herdr pane. Then\nit runs `herdr --skill` and follows what herdr itself prints. So the guidance\nalways matches the herdr installed on the machine, not a copy pinned to an hq\nrelease.\n\nOutside a herdr pane the skill stops the agent at that first check. What it costs\nin every other repo is one skill description in the agent's context per session.\n\n## What it will not touch\n\n`.hq/manifest.json` records what hq owns. That record is what keeps your own work\nsafe:\n\n- re-running the installer overwrites hq-owned files, and removes files hq no\n  longer ships;\n- a file you created, or an installed file you edited, is never overwritten or\n  removed. hq skips it, says so, and exits with code `2`. `--force` overrides\n  that and adopts the file as hq-owned;\n- in shared files hq only touches its own entries: hook entries whose command\n  points into `.hq/hooks/`, the MCP server keys recorded in the manifest, and the\n  text between the `HQ` markers. Your entries stay;\n- `uninstall` follows the same rule. It leaves anything you edited in place and\n  keeps the manifest, so a later `uninstall --force` can still finish the job;\n- a **seeded** file, from `content/seeds/`, is a starting point: created when\n  it is absent, then yours. Re-runs never update it, an edit is never a\n  conflict, and `check` calls it in sync whatever it holds. `uninstall` removes\n  it only while it still holds the seeded bytes; once edited it stays, even\n  under `--force`.\n\n## Staying up to date\n\nA session-start hook checks once a day whether a newer version of this package is\npublished, and prints one line when the repo is behind:\n\n```\nhq: this repo is on 0.2.0, 0.3.0 is published. Run: npx @davidorbelian/hq\n```\n\nIt says nothing when the repo is current, when the lookup fails, and when it is\noffline. The answer is cached in `~/.cache/hq/registry.json`, outside the repo.\nSet `HQ_NO_UPDATE_CHECK=1` to switch the check off.\n\nTo fail a build on an out-of-date or hand-edited install, run\n`npx @davidorbelian/hq check` in CI. It stays offline unless you add `--latest`.\n\n## Caveats\n\n- Codex loads `.codex/` config and hooks only after you trust the repo.\n- Shared JSON files (`.claude/settings.json`, `.mcp.json`, `.codex/hooks.json`)\n  are reformatted to 2-space JSON on first merge.\n\n## Developing\n\n```sh\nnpm install   # dev dependencies: typescript, @types/node\nnpm test      # compiles and runs unit and end-to-end tests (node --test)\n```\n\n`AGENTS.md` in the repo root explains the layout and the rules the code enforces.\n\n## License\n\nMIT. See `LICENSE`.\n","readmeFilename":"README.md"}